1 # SPDX-License-Identifier: BSD-3-Clause
2 # Copyright 2014-2020, Intel Corporation
4 # src/tools/Makefile.inc -- Makefile include for all tools
7 TOP := $(dir $(lastword $(MAKEFILE_LIST)))../..
9 include $(TOP)/src/common.inc
14 INCS += -I$(TOP)/src/include
19 CFLAGS += -Wmissing-prototypes
20 CFLAGS += -Wpointer-arith
21 CFLAGS += -Wsign-conversion
22 CFLAGS += -Wsign-compare
24 ifeq ($(WCONVERSION_AVAILABLE), y)
25 CFLAGS += -Wconversion
30 CFLAGS += -DSRCVERSION='"$(SRCVERSION)"'
32 ifeq ($(OS_DIMM),ndctl)
33 CFLAGS += -DSDS_ENABLED
37 CFLAGS += -Wunused-macros
38 CFLAGS += -Wmissing-field-initializers
41 ifeq ($(WUNREACHABLE_CODE_RETURN_AVAILABLE), y)
42 CFLAGS += -Wunreachable-code-return
45 ifeq ($(WMISSING_VARIABLE_DECLARATIONS_AVAILABLE), y)
46 CFLAGS += -Wmissing-variable-declarations
49 ifeq ($(WFLOAT_EQUAL_AVAILABLE), y)
50 CFLAGS += -Wfloat-equal
53 ifeq ($(WSWITCH_DEFAULT_AVAILABLE), y)
54 CFLAGS += -Wswitch-default
57 ifeq ($(WCAST_FUNCTION_TYPE_AVAILABLE), y)
58 CFLAGS += -Wcast-function-type
62 CFLAGS += -ggdb $(EXTRA_CFLAGS_DEBUG)
64 CFLAGS += -O2 -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2 $(EXTRA_CFLAGS_RELEASE)
68 CFLAGS += -DVALGRIND_ENABLED=0
69 CXXFLAGS += -DVALGRIND_ENABLED=0
72 ifeq ($(FAULT_INJECTION),1)
73 CFLAGS += -DFAULT_INJECTION=1
74 CXXFLAGS += -DFAULT_INJECTION=1
78 CFLAGS += -fsanitize=$(SANITIZE)
79 LDFLAGS += -fsanitize=$(SANITIZE)
83 CFLAGS += $(EXTRA_CFLAGS)
85 LDFLAGS += -Wl,-z,relro -Wl,--warn-common -Wl,--fatal-warnings $(EXTRA_LDFLAGS)
87 LDFLAGS += -L$(TOP)/src/debug
89 LDFLAGS += -L$(TOP)/src/nondebug
91 TARGET_DIR=$(DESTDIR)$(bindir)
93 BASH_COMP_DESTDIR = $(DESTDIR)$(bashcompdir)
96 TARGET_STATIC_NONDEBUG=$(TARGET).static-nondebug
98 TARGET_STATIC_DEBUG=$(TARGET).static-debug
101 LIBSDIR_DEBUG=$(LIBSDIR)/debug
102 LIBSDIR_NONDEBUG=$(LIBSDIR)/nondebug
105 LIBSDIR_PRIV=$(LIBSDIR_DEBUG)
107 LIBSDIR_PRIV=$(LIBSDIR_NONDEBUG)
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
116 ifeq ($(LIBRT_NEEDED), y)
120 ifeq ($(TOOLS_COMMON), y)
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
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)
141 ifeq ($(LIBPMEMPOOL), y)
143 DYNAMIC_LIBS += -lpmempool
144 STATIC_DEBUG_LIBS += $(LIBSDIR_DEBUG)/libpmempool.a
145 STATIC_NONDEBUG_LIBS += $(LIBSDIR_NONDEBUG)/libpmempool.a
148 ifeq ($(LIBPMEMBLK), y)
150 DYNAMIC_LIBS += -lpmemblk
151 STATIC_DEBUG_LIBS += $(LIBSDIR_DEBUG)/libpmemblk.a
152 STATIC_NONDEBUG_LIBS += $(LIBSDIR_NONDEBUG)/libpmemblk.a
155 ifeq ($(LIBPMEMLOG), y)
157 DYNAMIC_LIBS += -lpmemlog
158 STATIC_DEBUG_LIBS += $(LIBSDIR_DEBUG)/libpmemlog.a
159 STATIC_NONDEBUG_LIBS += $(LIBSDIR_NONDEBUG)/libpmemlog.a
162 ifeq ($(LIBPMEMOBJ), y)
164 DYNAMIC_LIBS += -lpmemobj
165 STATIC_DEBUG_LIBS += $(LIBSDIR_DEBUG)/libpmemobj.a
166 STATIC_NONDEBUG_LIBS += $(LIBSDIR_NONDEBUG)/libpmemobj.a
170 DYNAMIC_LIBS += -lpmem
171 STATIC_DEBUG_LIBS += $(LIBSDIR_DEBUG)/libpmem.a
172 STATIC_NONDEBUG_LIBS += $(LIBSDIR_NONDEBUG)/libpmem.a
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)
183 # If any of these libraries is required, we need to link libpthread
184 ifneq ($(LIBPMEMCORE)$(LIBPMEMCOMMON)$(LIBPMEM)$(LIBPMEM2)$(LIBPMEMPOOL)$(LIBPMEMBLK)$(LIBPMEMLOG)$(LIBPMEMOBJ),)
188 # If any of these libraries is required, we need to link libdl
189 ifneq ($(LIBPMEMCOMMON)$(LIBPMEMPOOL)$(LIBPMEMOBJ),)
193 ifeq ($(TOOLS_COMMON), y)
194 vpath %.c $(TOP)/src/tools/pmempool
196 OBJS += common.o output.o
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)
208 ifneq ($(LIBPMEMLOG_PRIV),)
209 OBJS += pmemlog_priv.o
212 ifneq ($(LIBPMEMOBJ_PRIV),)
213 OBJS += pmemobj_priv.o
216 ifneq ($(LIBPMEMBLK_PRIV),)
217 OBJS += pmemblk_priv.o
221 ifneq ($(filter 1 2, $(CSTYLEON)),)
222 TMP_HEADERS := $(addsuffix tmp, $(HEADERS))
227 CFLAGS += $(GCOV_CFLAGS)
228 LDFLAGS += $(GCOV_LDFLAGS)
232 MAKEFILE_DEPS=$(TOP)/src/tools/Makefile.inc $(TOP)/src/common.inc
235 all: $(TARGET) $(TARGET_STATIC_NONDEBUG) $(TARGET_STATIC_DEBUG)
243 $(RM) $(OBJS) $(CLEAN_FILES) $(SYNC_FILE) $(TMP_HEADERS)
248 $(RM) $(TARGET_STATIC_NONDEBUG)
249 $(RM) $(TARGET_STATIC_DEBUG)
254 ifeq ($(INSTALL_TARGET),y)
256 install -d $(TARGET_DIR)
257 install -p -m 0755 $(TARGET) $(TARGET_DIR)
259 ifneq ($(BASH_COMP_FILES),)
260 install -d $(BASH_COMP_DESTDIR)
261 install -p -m 0644 $(BASH_COMP_FILES) $(BASH_COMP_DESTDIR)
266 ifeq ($(INSTALL_TARGET),y)
268 $(RM) $(TARGET_DIR)/$(TARGET)
270 ifneq ($(BASH_COMP_FILES),)
271 $(RM) $(BASH_COMP_DESTDIR)/$(BASH_COMP_FILES)
281 $(TARGET) $(TARGET_STATIC_DEBUG) $(TARGET_STATIC_NONDEBUG): $(TMP_HEADERS) $(OBJS) $(MAKEFILE_DEPS)
283 $(TARGET_STATIC_DEBUG): $(STATIC_DEBUG_LIBS)
284 $(CC) $(LDFLAGS) -o $@ $(OBJS) $(STATIC_DEBUG_LIBS) $(LIBS)
286 $(TARGET_STATIC_NONDEBUG): $(STATIC_NONDEBUG_LIBS)
287 $(CC) $(LDFLAGS) -o $@ $(OBJS) $(STATIC_NONDEBUG_LIBS) $(LIBS)
290 $(CC) $(LDFLAGS) -o $@ $(OBJS) $(DYNAMIC_LIBS) $(LIBS)
293 $(MAKE) -C $(LIBSDIR) libpmemlog
295 pmemlog_priv.o: $(PMEMLOG_PRIV_OBJ)
296 $(OBJCOPY) --localize-hidden $(addprefix -G, $(LIBPMEMLOG_PRIV)) $< $@
299 $(MAKE) -C $(LIBSDIR) libpmemobj
301 pmemobj_priv.o: $(PMEMOBJ_PRIV_OBJ)
302 $(OBJCOPY) --localize-hidden $(addprefix -G, $(LIBPMEMOBJ_PRIV)) $< $@
305 $(MAKE) -C $(LIBSDIR) libpmemblk
307 pmemblk_priv.o: $(PMEMBLK_PRIV_OBJ)
308 $(OBJCOPY) --localize-hidden $(addprefix -G, $(LIBPMEMBLK_PRIV)) $< $@
312 %.o: %.c $(MAKEFILE_DEPS)
313 $(call check-cstyle, $<)
315 $(CC) -MD $(CFLAGS) $(INCS) -c -o $@ $(call coverage-path, $<)
316 $(call check-os, $@, $<)
320 $(call check-cstyle, $<, $@)
322 test check pcheck: all
324 TESTCONFIG=$(TOP)/src/test/testconfig.sh
325 DIR_SYNC=$(TOP)/src/test/.sync-dir
329 sync-remotes: all $(SYNC_FILE)
331 $(SYNC_FILE): $(TARGET) $(TESTCONFIG)
332 ifeq ($(SCP_TO_REMOTE_NODES), y)
333 cp $(TARGET) $(DIR_SYNC)
338 $(if $(TARGET), $(sparse-c))
340 .PHONY: all clean clobber install uninstall test check pcheck