You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

131 lines
2.7 KiB

2 years ago
2 years ago
  1. VERSION = 2.9.7-mergerfs_2.30.0
  2. OS := $(shell uname -s)
  3. ifeq ($(OS),Linux)
  4. UTILS := utils
  5. INSTALLUTILS := install-utils
  6. else
  7. UTILS :=
  8. INSTALLUTILS :=
  9. endif
  10. ifeq ($(DEBUG),1)
  11. OPT_FLAGS := -O0 -g -fsanitize=undefined
  12. else
  13. OPT_FLAGS := -O2
  14. endif
  15. DESTDIR =
  16. PREFIX = /usr/local
  17. EXEC_PREFIX = $(PREFIX)
  18. DATAROOTDIR = $(PREFIX)/share
  19. DATADIR = $(DATAROOTDIR)
  20. BINDIR = $(EXEC_PREFIX)/bin
  21. SBINDIR = /sbin
  22. MANDIR = $(DATAROOTDIR)/man
  23. MAN1DIR = $(MANDIR)/man1
  24. INSTALLBINDIR = $(DESTDIR)$(BINDIR)
  25. INSTALLSBINDIR = $(DESTDIR)$(SBINDIR)
  26. INSTALLMAN1DIR = $(DESTDIR)$(MAN1DIR)
  27. AR ?= ar
  28. SRC = \
  29. lib/buffer.c \
  30. lib/crc32b.c \
  31. lib/debug.c \
  32. lib/fuse.c \
  33. lib/fuse_dirents.c \
  34. lib/fuse_loop_mt.c \
  35. lib/fuse_lowlevel.c \
  36. lib/fuse_mt.c \
  37. lib/fuse_node.c \
  38. lib/fuse_opt.c \
  39. lib/fuse_session.c \
  40. lib/fuse_signals.c \
  41. lib/helper.c \
  42. lib/mount.c
  43. OBJS = $(SRC:lib/%.c=build/%.o)
  44. DEPS = $(SRC:lib/%.c=build/%.d)
  45. CFLAGS ?= \
  46. $(OPT_FLAGS)
  47. CFLAGS := \
  48. ${CFLAGS} \
  49. -std=gnu99 \
  50. -Wall \
  51. -pipe \
  52. -MMD
  53. CXXFLAGS := \
  54. ${CXXFLAGS} \
  55. -std=c++17 \
  56. -Wall \
  57. -pipe \
  58. -MMD
  59. FUSERMOUNT_DIR = $(BINDIR)
  60. FUSE_FLAGS = \
  61. -Iinclude \
  62. -Ibuild \
  63. -D_REENTRANT \
  64. -D_FILE_OFFSET_BITS=64 \
  65. -DFUSE_USE_VERSION=29 \
  66. -DPACKAGE_VERSION=\"$(VERSION)\" \
  67. -DFUSERMOUNT_DIR=\"$(FUSERMOUNT_DIR)\"
  68. LDFLAGS := \
  69. ${LDFLAGS} \
  70. -lrt \
  71. -pthread
  72. all: build/libfuse.a $(UTILS)
  73. build/config.h: build/stamp
  74. ecfd/build | tee build/config.h
  75. build/stamp:
  76. mkdir -p build
  77. touch $@
  78. objects: build/config.h
  79. $(MAKE) $(OBJS)
  80. build/libfuse.a: objects
  81. ${AR} rcs build/libfuse.a $(OBJS)
  82. utils: mergerfs-fusermount mount.mergerfs
  83. build/mergerfs-fusermount: build/config.h util/fusermount.c lib/mount_util.c
  84. $(CC) $(CFLAGS) $(FUSE_FLAGS) -Ilib -o build/mergerfs-fusermount util/fusermount.c lib/mount_util.c
  85. mergerfs-fusermount: build/mergerfs-fusermount
  86. build/mount.mergerfs: build/libfuse.a util/mount.mergerfs.c
  87. $(CC) $(CFLAGS) $(FUSE_FLAGS) -o build/mount.mergerfs util/mount.mergerfs.c build/libfuse.a $(LDFLAGS)
  88. mount.mergerfs: build/mount.mergerfs
  89. build/%.o: lib/%.c
  90. $(CC) $(CFLAGS) $(FUSE_FLAGS) -c $< -o $@
  91. build/%.o: lib/%.cpp
  92. $(CXX) $(CXXFLAGS) $(FUSE_FLAGS) -c $< -o $@
  93. clean:
  94. rm -rf build
  95. distclean: clean
  96. strip:
  97. strip --strip-all build/mount.mergerfs
  98. strip --strip-all build/mergerfs-fusermount
  99. install-utils: mergerfs-fusermount mount.mergerfs strip
  100. install -D build/mergerfs-fusermount "$(INSTALLBINDIR)/mergerfs-fusermount"
  101. install -D build/mount.mergerfs "$(INSTALLSBINDIR)/mount.mergerfs"
  102. chown root "$(INSTALLBINDIR)/mergerfs-fusermount"
  103. chmod u+s "$(INSTALLBINDIR)/mergerfs-fusermount"
  104. install: $(INSTALLUTILS)
  105. .PHONY: objects strip utils install install-utils
  106. -include $(DEPS)