-
Notifications
You must be signed in to change notification settings - Fork 15
/
Copy pathmakefile
146 lines (113 loc) · 4.6 KB
/
makefile
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
FS_TARGET = dist/from_source/autotierfs
CLI_TARGET = dist/from_source/autotier
FS_LIBS = -lfuse3 -lpthread -lboost_system -lboost_filesystem -lboost_serialization -ldl -lbz2 -llz4 -lzstd -lz -lsnappy -l:lib45d.a
ifdef DEB
FS_LIBS += -l:liburing.a
else
FS_LIBS += -luring
endif
CLI_LIBS = -l:libboost_system.a -l:libboost_filesystem.a -lpthread -l:lib45d.a
CC = g++
CFLAGS = -g -O2 -Wall -Wextra -Isrc/incl -Isrc/rocksdb/include -I/usr/include/fuse3 -D_FILE_OFFSET_BITS=64
FS_LIBS += $(EXTRA_LIBS)
CFLAGS += $(EXTRA_CFLAGS)
FS_SOURCE_FILES := $(shell find src/impl/autotierfs -name *.cpp)
FS_OBJECT_FILES := $(patsubst src/impl/%.cpp, build/%.o, $(FS_SOURCE_FILES))
CLI_SOURCE_FILES := $(shell find src/impl/autotier -name *.cpp)
CLI_OBJECT_FILES := $(patsubst src/impl/%.cpp, build/%.o, $(CLI_SOURCE_FILES))
SHARED_SOURCE_FILES := $(shell find src/impl/shared -name *.cpp)
SHARED_OBJECT_FILES := $(patsubst src/impl/%.cpp, build/%.o, $(SHARED_SOURCE_FILES))
ROCKSDB_STATIC := src/rocksdb/librocksdb.a
ifeq ($(PREFIX),)
PREFIX := /opt/45drives/autotier
DEFAULT_PREFIX := 1
endif
.PHONY: default all clean clean-build clean-target install uninstall debug
default: CFLAGS := -std=c++17 $(CFLAGS)
default: FS_LIBS := -ltbb $(FS_LIBS)
default: $(FS_TARGET) $(CLI_TARGET)
all: default
debug: CFLAGS := -std=c++17 -DLOG_METHODS $(CFLAGS)
debug: FS_LIBS := -ltbb $(FS_LIBS)
debug: $(FS_TARGET) $(CLI_TARGET)
no-par-sort: CFLAGS := -std=c++11 $(CFLAGS)
no-par-sort: $(FS_TARGET) $(CLI_TARGET)
.PRECIOUS: $(TARGET) $(OBJECTS)
$(FS_OBJECT_FILES) $(CLI_OBJECT_FILES) $(SHARED_OBJECT_FILES): build/%.o : src/impl/%.cpp
@mkdir -p $(dir $@)
@echo " CC $@"
@$(CC) $(CFLAGS) -c $(patsubst build/%.o, src/impl/%.cpp, $@) -o $@
$(ROCKSDB_STATIC):
cd src/rocksdb && $(MAKE) USE_RTTI=1 PORTABLE=1 static_lib
$(FS_TARGET): $(FS_OBJECT_FILES) $(SHARED_OBJECT_FILES) $(ROCKSDB_STATIC)
@mkdir -p dist/from_source
@echo " LD $@"
@$(CC) $(FS_OBJECT_FILES) $(SHARED_OBJECT_FILES) $(ROCKSDB_STATIC) -Wall $(FS_LIBS) -o $@
$(CLI_TARGET): $(CLI_OBJECT_FILES) $(SHARED_OBJECT_FILES)
@mkdir -p dist/from_source
@echo " LD $@"
@$(CC) $(CLI_OBJECT_FILES) $(SHARED_OBJECT_FILES) -Wall $(CLI_LIBS) -o $@
clean: clean-build clean-target clean-rocksdb
clean-target:
-rm -rf dist/from_source
clean-build:
-rm -rf build
clean-rocksdb:
cd src/rocksdb && make clean
clean-tests:
-rm -rf dist/tests
install: all inst-man-pages inst-config inst-completion inst-scripts
mkdir -p $(DESTDIR)$(PREFIX)
install -m 755 $(FS_TARGET) $(DESTDIR)$(PREFIX)
install -m 755 $(CLI_TARGET) $(DESTDIR)$(PREFIX)
ifeq ($(DEFAULT_PREFIX),1)
mkdir -p $(DESTDIR)/usr/bin
ln -sf $(PREFIX)/$(notdir $(FS_TARGET)) $(DESTDIR)/usr/bin/$(notdir $(FS_TARGET))
ln -sf $(PREFIX)/$(notdir $(CLI_TARGET)) $(DESTDIR)/usr/bin/$(notdir $(CLI_TARGET))
endif
ifneq ($(PACKAGING),1)
groupadd -f autotier
endif
uninstall: rm-man-pages rm-completion rm-scripts
-rm -f $(DESTDIR)$(PREFIX)/$(notdir $(FS_TARGET))
-rm -f $(DESTDIR)$(PREFIX)/$(notdir $(CLI_TARGET))
-rm -f $(DESTDIR)/usr/bin/$(notdir $(FS_TARGET))
-rm -f $(DESTDIR)/usr/bin/$(notdir $(CLI_TARGET))
tests: view-db
view-db:
mkdir -p dist/tests
$(CC) $(CFLAGS) -DBAREBONES_METADATA tests/src/view_db.cpp src/impl/autotierfs/metadata.cpp -Wall -lboost_serialization -lrocksdb -o dist/tests/view_db
inst-man-pages:
mkdir -p $(DESTDIR)/usr/share/man/man8
gzip -k doc/man/autotier.8
mv doc/man/autotier.8.gz $(DESTDIR)/usr/share/man/man8/
ln -snf autotier.8.gz $(DESTDIR)/usr/share/man/man8/autotierfs.8.gz
rm-man-pages:
-rm -f $(DESTDIR)/usr/share/man/man8/autotier.8.gz
-rm -f $(DESTDIR)/usr/share/man/man8/autotierfs.8.gz
inst-config:
mkdir -p $(DESTDIR)/etc
cp -n doc/autotier.conf.template $(DESTDIR)/etc/autotier.conf
inst-completion:
mkdir -p $(DESTDIR)/usr/share/bash-completion/completions
cp doc/completion/autotier.bash-completion $(DESTDIR)/usr/share/bash-completion/completions/autotier
cp doc/completion/autotierfs.bash-completion $(DESTDIR)/usr/share/bash-completion/completions/autotierfs
rm-completion:
-rm -f $(DESTDIR)/usr/share/bash-completion/completions/autotier
-rm -f $(DESTDIR)/usr/share/bash-completion/completions/autotierfs
inst-scripts:
mkdir -p $(DESTDIR)$(PREFIX)
install -m 755 script/autotier-init-dirs $(DESTDIR)$(PREFIX)
ifeq ($(DEFAULT_PREFIX),1)
mkdir -p $(DESTDIR)/usr/bin
ln -sf $(PREFIX)/autotier-init-dirs $(DESTDIR)/usr/bin/autotier-init-dirs
endif
rm-scripts:
-rm -f $(DESTDIR)$(PREFIX)/autotier-init-dirs
-rm -f $(DESTDIR)/usr/bin/autotier-init-dirs
docs: doc/dev-doc.doxyfile $(HEADER_FILES) doc/main-page.dox
-rm -rf dev-doc
doxygen doc/dev-doc.doxyfile
mv doc/html dev-doc
clean-docs:
-rm -rf dev-doc