]> git.proxmox.com Git - ceph.git/blob - ceph/src/pmdk/src/tools/Makefile.inc
import ceph 16.2.7
[ceph.git] / ceph / src / pmdk / src / tools / Makefile.inc
1 # SPDX-License-Identifier: BSD-3-Clause
2 # Copyright 2014-2020, Intel Corporation
3 #
4 # src/tools/Makefile.inc -- Makefile include for all tools
5 #
6
7 TOP := $(dir $(lastword $(MAKEFILE_LIST)))../..
8
9 include $(TOP)/src/common.inc
10
11 INSTALL_TARGET ?= y
12
13 INCS += -I.
14 INCS += -I$(TOP)/src/include
15 INCS += $(OS_INCS)
16 CFLAGS += -std=gnu99
17 CFLAGS += -Wall
18 CFLAGS += -Werror
19 CFLAGS += -Wmissing-prototypes
20 CFLAGS += -Wpointer-arith
21 CFLAGS += -Wsign-conversion
22 CFLAGS += -Wsign-compare
23
24 ifeq ($(WCONVERSION_AVAILABLE), y)
25 CFLAGS += -Wconversion
26 endif
27
28 CFLAGS += -fno-common
29
30 CFLAGS += -DSRCVERSION='"$(SRCVERSION)"'
31
32 ifeq ($(OS_DIMM),ndctl)
33 CFLAGS += -DSDS_ENABLED
34 endif
35
36 ifeq ($(IS_ICC), n)
37 CFLAGS += -Wunused-macros
38 CFLAGS += -Wmissing-field-initializers
39 endif
40
41 ifeq ($(WUNREACHABLE_CODE_RETURN_AVAILABLE), y)
42 CFLAGS += -Wunreachable-code-return
43 endif
44
45 ifeq ($(WMISSING_VARIABLE_DECLARATIONS_AVAILABLE), y)
46 CFLAGS += -Wmissing-variable-declarations
47 endif
48
49 ifeq ($(WFLOAT_EQUAL_AVAILABLE), y)
50 CFLAGS += -Wfloat-equal
51 endif
52
53 ifeq ($(WSWITCH_DEFAULT_AVAILABLE), y)
54 CFLAGS += -Wswitch-default
55 endif
56
57 ifeq ($(WCAST_FUNCTION_TYPE_AVAILABLE), y)
58 CFLAGS += -Wcast-function-type
59 endif
60
61 ifeq ($(DEBUG),1)
62 CFLAGS += -ggdb $(EXTRA_CFLAGS_DEBUG)
63 else
64 CFLAGS += -O2 -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2 $(EXTRA_CFLAGS_RELEASE)
65 endif
66
67 ifeq ($(VALGRIND),0)
68 CFLAGS += -DVALGRIND_ENABLED=0
69 CXXFLAGS += -DVALGRIND_ENABLED=0
70 endif
71
72 ifeq ($(FAULT_INJECTION),1)
73 CFLAGS += -DFAULT_INJECTION=1
74 CXXFLAGS += -DFAULT_INJECTION=1
75 endif
76
77 ifneq ($(SANITIZE),)
78 CFLAGS += -fsanitize=$(SANITIZE)
79 LDFLAGS += -fsanitize=$(SANITIZE)
80 endif
81 LDFLAGS += $(OS_LIBS)
82
83 CFLAGS += $(EXTRA_CFLAGS)
84
85 LDFLAGS += -Wl,-z,relro -Wl,--warn-common -Wl,--fatal-warnings $(EXTRA_LDFLAGS)
86 ifeq ($(DEBUG),1)
87 LDFLAGS += -L$(TOP)/src/debug
88 else
89 LDFLAGS += -L$(TOP)/src/nondebug
90 endif
91 TARGET_DIR=$(DESTDIR)$(bindir)
92 BASH_COMP_FILES ?=
93 BASH_COMP_DESTDIR = $(DESTDIR)$(bashcompdir)
94
95 ifneq ($(DEBUG),1)
96 TARGET_STATIC_NONDEBUG=$(TARGET).static-nondebug
97 endif
98 TARGET_STATIC_DEBUG=$(TARGET).static-debug
99
100 LIBSDIR=$(TOP)/src
101 LIBSDIR_DEBUG=$(LIBSDIR)/debug
102 LIBSDIR_NONDEBUG=$(LIBSDIR)/nondebug
103
104 ifneq ($(DEBUG),)
105 LIBSDIR_PRIV=$(LIBSDIR_DEBUG)
106 else
107 LIBSDIR_PRIV=$(LIBSDIR_NONDEBUG)
108 endif
109
110 PMEMLOG_PRIV_OBJ=$(LIBSDIR_PRIV)/libpmemlog/libpmemlog_unscoped.o
111 PMEMOBJ_PRIV_OBJ=$(LIBSDIR_PRIV)/libpmemobj/libpmemobj_unscoped.o
112 PMEMBLK_PRIV_OBJ=$(LIBSDIR_PRIV)/libpmemblk/libpmemblk_unscoped.o
113
114 LIBS += $(LIBUUID)
115
116 ifeq ($(LIBRT_NEEDED), y)
117 LIBS += -lrt
118 endif
119
120 ifeq ($(TOOLS_COMMON), y)
121 LIBPMEMCOMMON=y
122 endif
123
124 ifeq ($(LIBPMEMCOMMON), y)
125 DYNAMIC_LIBS += -lpmemcommon
126 STATIC_DEBUG_LIBS += $(LIBSDIR_DEBUG)/libpmemcommon.a
127 STATIC_NONDEBUG_LIBS += $(LIBSDIR_NONDEBUG)/libpmemcommon.a
128 CFLAGS += -I$(TOP)/src/common
129 LIBPMEMCORE=y
130 endif
131
132 ifeq ($(LIBPMEMCORE), y)
133 DYNAMIC_LIBS += -lpmemcore
134 STATIC_DEBUG_LIBS += $(LIBSDIR_DEBUG)/libpmemcore.a
135 STATIC_NONDEBUG_LIBS += $(LIBSDIR_NONDEBUG)/libpmemcore.a
136 CFLAGS += -I$(TOP)/src/core
137 CFLAGS += $(LIBNDCTL_CFLAGS)
138 LIBS += $(LIBNDCTL_LIBS)
139 endif
140
141 ifeq ($(LIBPMEMPOOL), y)
142 LIBPMEM=y
143 DYNAMIC_LIBS += -lpmempool
144 STATIC_DEBUG_LIBS += $(LIBSDIR_DEBUG)/libpmempool.a
145 STATIC_NONDEBUG_LIBS += $(LIBSDIR_NONDEBUG)/libpmempool.a
146 endif
147
148 ifeq ($(LIBPMEMBLK), y)
149 LIBPMEM=y
150 DYNAMIC_LIBS += -lpmemblk
151 STATIC_DEBUG_LIBS += $(LIBSDIR_DEBUG)/libpmemblk.a
152 STATIC_NONDEBUG_LIBS += $(LIBSDIR_NONDEBUG)/libpmemblk.a
153 endif
154
155 ifeq ($(LIBPMEMLOG), y)
156 LIBPMEM=y
157 DYNAMIC_LIBS += -lpmemlog
158 STATIC_DEBUG_LIBS += $(LIBSDIR_DEBUG)/libpmemlog.a
159 STATIC_NONDEBUG_LIBS += $(LIBSDIR_NONDEBUG)/libpmemlog.a
160 endif
161
162 ifeq ($(LIBPMEMOBJ), y)
163 LIBPMEM=y
164 DYNAMIC_LIBS += -lpmemobj
165 STATIC_DEBUG_LIBS += $(LIBSDIR_DEBUG)/libpmemobj.a
166 STATIC_NONDEBUG_LIBS += $(LIBSDIR_NONDEBUG)/libpmemobj.a
167 endif
168
169 ifeq ($(LIBPMEM),y)
170 DYNAMIC_LIBS += -lpmem
171 STATIC_DEBUG_LIBS += $(LIBSDIR_DEBUG)/libpmem.a
172 STATIC_NONDEBUG_LIBS += $(LIBSDIR_NONDEBUG)/libpmem.a
173 endif
174
175 ifeq ($(LIBPMEM2),y)
176 DYNAMIC_LIBS += -lpmem2
177 STATIC_DEBUG_LIBS += $(LIBSDIR_DEBUG)/libpmem2.a
178 STATIC_NONDEBUG_LIBS += $(LIBSDIR_NONDEBUG)/libpmem2.a
179 CFLAGS += $(LIBNDCTL_CFLAGS)
180 LIBS += $(LIBNDCTL_LIBS)
181 endif
182
183 # If any of these libraries is required, we need to link libpthread
184 ifneq ($(LIBPMEMCORE)$(LIBPMEMCOMMON)$(LIBPMEM)$(LIBPMEM2)$(LIBPMEMPOOL)$(LIBPMEMBLK)$(LIBPMEMLOG)$(LIBPMEMOBJ),)
185 LIBS += -pthread
186 endif
187
188 # If any of these libraries is required, we need to link libdl
189 ifneq ($(LIBPMEMCOMMON)$(LIBPMEMPOOL)$(LIBPMEMOBJ),)
190 LIBS += $(LIBDL)
191 endif
192
193 ifeq ($(TOOLS_COMMON), y)
194 vpath %.c $(TOP)/src/tools/pmempool
195
196 OBJS += common.o output.o
197
198 CFLAGS += -I$(TOP)/src/core
199 CFLAGS += -I$(TOP)/src/common
200 CFLAGS += -I$(TOP)/src/libpmemlog
201 CFLAGS += -I$(TOP)/src/libpmemblk
202 CFLAGS += -I$(TOP)/src/libpmemobj
203 CFLAGS += -I$(TOP)/src/tools/pmempool
204 CFLAGS += $(UNIX98_CFLAGS)
205
206 endif
207
208 ifneq ($(LIBPMEMLOG_PRIV),)
209 OBJS += pmemlog_priv.o
210 endif
211
212 ifneq ($(LIBPMEMOBJ_PRIV),)
213 OBJS += pmemobj_priv.o
214 endif
215
216 ifneq ($(LIBPMEMBLK_PRIV),)
217 OBJS += pmemblk_priv.o
218 endif
219
220 ifneq ($(HEADERS),)
221 ifneq ($(filter 1 2, $(CSTYLEON)),)
222 TMP_HEADERS := $(addsuffix tmp, $(HEADERS))
223 endif
224 endif
225
226 ifeq ($(COVERAGE),1)
227 CFLAGS += $(GCOV_CFLAGS)
228 LDFLAGS += $(GCOV_LDFLAGS)
229 LIBS += $(GCOV_LIBS)
230 endif
231
232 MAKEFILE_DEPS=$(TOP)/src/tools/Makefile.inc $(TOP)/src/common.inc
233
234 ifneq ($(TARGET),)
235 all: $(TARGET) $(TARGET_STATIC_NONDEBUG) $(TARGET_STATIC_DEBUG)
236 else
237 all:
238 endif
239
240 SYNC_FILE=.synced
241
242 clean:
243 $(RM) $(OBJS) $(CLEAN_FILES) $(SYNC_FILE) $(TMP_HEADERS)
244
245 clobber: clean
246 ifneq ($(TARGET),)
247 $(RM) $(TARGET)
248 $(RM) $(TARGET_STATIC_NONDEBUG)
249 $(RM) $(TARGET_STATIC_DEBUG)
250 $(RM) -r .deps
251 endif
252
253 install: all
254 ifeq ($(INSTALL_TARGET),y)
255 ifneq ($(TARGET),)
256 install -d $(TARGET_DIR)
257 install -p -m 0755 $(TARGET) $(TARGET_DIR)
258 endif
259 ifneq ($(BASH_COMP_FILES),)
260 install -d $(BASH_COMP_DESTDIR)
261 install -p -m 0644 $(BASH_COMP_FILES) $(BASH_COMP_DESTDIR)
262 endif
263 endif
264
265 uninstall:
266 ifeq ($(INSTALL_TARGET),y)
267 ifneq ($(TARGET),)
268 $(RM) $(TARGET_DIR)/$(TARGET)
269 endif
270 ifneq ($(BASH_COMP_FILES),)
271 $(RM) $(BASH_COMP_DESTDIR)/$(BASH_COMP_FILES)
272 endif
273 endif
274
275 %.gz: %
276 gzip -nc ./$< > $@
277
278 %.txt: %
279 man ./$< > $@
280
281 $(TARGET) $(TARGET_STATIC_DEBUG) $(TARGET_STATIC_NONDEBUG): $(TMP_HEADERS) $(OBJS) $(MAKEFILE_DEPS)
282
283 $(TARGET_STATIC_DEBUG): $(STATIC_DEBUG_LIBS)
284 $(CC) $(LDFLAGS) -o $@ $(OBJS) $(STATIC_DEBUG_LIBS) $(LIBS)
285
286 $(TARGET_STATIC_NONDEBUG): $(STATIC_NONDEBUG_LIBS)
287 $(CC) $(LDFLAGS) -o $@ $(OBJS) $(STATIC_NONDEBUG_LIBS) $(LIBS)
288
289 $(TARGET):
290 $(CC) $(LDFLAGS) -o $@ $(OBJS) $(DYNAMIC_LIBS) $(LIBS)
291
292 $(PMEMLOG_PRIV_OBJ):
293 $(MAKE) -C $(LIBSDIR) libpmemlog
294
295 pmemlog_priv.o: $(PMEMLOG_PRIV_OBJ)
296 $(OBJCOPY) --localize-hidden $(addprefix -G, $(LIBPMEMLOG_PRIV)) $< $@
297
298 $(PMEMOBJ_PRIV_OBJ):
299 $(MAKE) -C $(LIBSDIR) libpmemobj
300
301 pmemobj_priv.o: $(PMEMOBJ_PRIV_OBJ)
302 $(OBJCOPY) --localize-hidden $(addprefix -G, $(LIBPMEMOBJ_PRIV)) $< $@
303
304 $(PMEMBLK_PRIV_OBJ):
305 $(MAKE) -C $(LIBSDIR) libpmemblk
306
307 pmemblk_priv.o: $(PMEMBLK_PRIV_OBJ)
308 $(OBJCOPY) --localize-hidden $(addprefix -G, $(LIBPMEMBLK_PRIV)) $< $@
309
310 objdir=.
311
312 %.o: %.c $(MAKEFILE_DEPS)
313 $(call check-cstyle, $<)
314 @mkdir -p .deps
315 $(CC) -MD $(CFLAGS) $(INCS) -c -o $@ $(call coverage-path, $<)
316 $(call check-os, $@, $<)
317 $(create-deps)
318
319 %.htmp: %.h
320 $(call check-cstyle, $<, $@)
321
322 test check pcheck: all
323
324 TESTCONFIG=$(TOP)/src/test/testconfig.sh
325 DIR_SYNC=$(TOP)/src/test/.sync-dir
326
327 $(TESTCONFIG):
328
329 sync-remotes: all $(SYNC_FILE)
330
331 $(SYNC_FILE): $(TARGET) $(TESTCONFIG)
332 ifeq ($(SCP_TO_REMOTE_NODES), y)
333 cp $(TARGET) $(DIR_SYNC)
334 @touch $(SYNC_FILE)
335 endif
336
337 sparse:
338 $(if $(TARGET), $(sparse-c))
339
340 .PHONY: all clean clobber install uninstall test check pcheck
341
342 -include .deps/*.P