1 # Clear out all vpaths, then set just one (default vpath) for the main build 2 # directory. 3 vpath 4 vpath % . 5 6 # Clear the default suffixes, so that built-in rules are not used. 7 .SUFFIXES : 8 9 SHELL := /bin/sh 10 11 CC := @CC@ 12 CXX := @CXX@ 13 14 # Configuration parameters. 15 DESTDIR = 16 BINDIR := $(DESTDIR)@BINDIR@ 17 INCLUDEDIR := $(DESTDIR)@INCLUDEDIR@ 18 LIBDIR := $(DESTDIR)@LIBDIR@ 19 DATADIR := $(DESTDIR)@DATADIR@ 20 MANDIR := $(DESTDIR)@MANDIR@ 21 srcroot := @srcroot@ 22 objroot := @objroot@ 23 abs_srcroot := @abs_srcroot@ 24 abs_objroot := @abs_objroot@ 25 26 # Build parameters. 27 CPPFLAGS := @CPPFLAGS@ -I$(objroot)include -I$(srcroot)include 28 CONFIGURE_CFLAGS := @CONFIGURE_CFLAGS@ 29 SPECIFIED_CFLAGS := @SPECIFIED_CFLAGS@ 30 EXTRA_CFLAGS := @EXTRA_CFLAGS@ 31 CFLAGS := $(strip $(CONFIGURE_CFLAGS) $(SPECIFIED_CFLAGS) $(EXTRA_CFLAGS)) 32 CONFIGURE_CXXFLAGS := @CONFIGURE_CXXFLAGS@ 33 SPECIFIED_CXXFLAGS := @SPECIFIED_CXXFLAGS@ 34 EXTRA_CXXFLAGS := @EXTRA_CXXFLAGS@ 35 CXXFLAGS := $(strip $(CONFIGURE_CXXFLAGS) $(SPECIFIED_CXXFLAGS) $(EXTRA_CXXFLAGS)) 36 LDFLAGS := @LDFLAGS@ 37 EXTRA_LDFLAGS := @EXTRA_LDFLAGS@ 38 LIBS := @LIBS@ 39 RPATH_EXTRA := @RPATH_EXTRA@ 40 SO := @so@ 41 IMPORTLIB := @importlib@ 42 O := @o@ 43 A := @a@ 44 EXE := @exe@ 45 LIBPREFIX := @libprefix@ 46 REV := @rev@ 47 install_suffix := @install_suffix@ 48 ABI := @abi@ 49 XSLTPROC := @XSLTPROC@ 50 AUTOCONF := @AUTOCONF@ 51 _RPATH = @RPATH@ 52 RPATH = $(if $(1),$(call _RPATH,$(1))) 53 cfghdrs_in := $(addprefix $(srcroot),@cfghdrs_in@) 54 cfghdrs_out := @cfghdrs_out@ 55 cfgoutputs_in := $(addprefix $(srcroot),@cfgoutputs_in@) 56 cfgoutputs_out := @cfgoutputs_out@ 57 enable_autogen := @enable_autogen@ 58 enable_prof := @enable_prof@ 59 enable_zone_allocator := @enable_zone_allocator@ 60 MALLOC_CONF := @JEMALLOC_CPREFIX@MALLOC_CONF 61 link_whole_archive := @link_whole_archive@ 62 DSO_LDFLAGS = @DSO_LDFLAGS@ 63 SOREV = @SOREV@ 64 PIC_CFLAGS = @PIC_CFLAGS@ 65 CTARGET = @CTARGET@ 66 LDTARGET = @LDTARGET@ 67 TEST_LD_MODE = @TEST_LD_MODE@ 68 MKLIB = @MKLIB@ 69 AR = @AR@ 70 ARFLAGS = @ARFLAGS@ 71 DUMP_SYMS = @DUMP_SYMS@ 72 AWK := @AWK@ 73 CC_MM = @CC_MM@ 74 LM := @LM@ 75 INSTALL = @INSTALL@ 76 77 ifeq (macho, $(ABI)) 78 TEST_LIBRARY_PATH := DYLD_FALLBACK_LIBRARY_PATH="$(objroot)lib" 79 else 80 ifeq (pecoff, $(ABI)) 81 TEST_LIBRARY_PATH := PATH="$(PATH):$(objroot)lib" 82 else 83 TEST_LIBRARY_PATH := 84 endif 85 endif 86 87 LIBJEMALLOC := $(LIBPREFIX)jemalloc$(install_suffix) 88 89 # Lists of files. 90 BINS := $(objroot)bin/jemalloc-config $(objroot)bin/jemalloc.sh $(objroot)bin/jeprof 91 C_HDRS := $(objroot)include/jemalloc/jemalloc$(install_suffix).h 92 C_SRCS := $(srcroot)src/jemalloc.c \ 93 $(srcroot)src/arena.c \ 94 $(srcroot)src/background_thread.c \ 95 $(srcroot)src/base.c \ 96 $(srcroot)src/bin.c \ 97 $(srcroot)src/bitmap.c \ 98 $(srcroot)src/ckh.c \ 99 $(srcroot)src/ctl.c \ 100 $(srcroot)src/div.c \ 101 $(srcroot)src/extent.c \ 102 $(srcroot)src/extent_dss.c \ 103 $(srcroot)src/extent_mmap.c \ 104 $(srcroot)src/hash.c \ 105 $(srcroot)src/hooks.c \ 106 $(srcroot)src/large.c \ 107 $(srcroot)src/log.c \ 108 $(srcroot)src/malloc_io.c \ 109 $(srcroot)src/mutex.c \ 110 $(srcroot)src/mutex_pool.c \ 111 $(srcroot)src/nstime.c \ 112 $(srcroot)src/pages.c \ 113 $(srcroot)src/prng.c \ 114 $(srcroot)src/prof.c \ 115 $(srcroot)src/rtree.c \ 116 $(srcroot)src/stats.c \ 117 $(srcroot)src/sz.c \ 118 $(srcroot)src/tcache.c \ 119 $(srcroot)src/ticker.c \ 120 $(srcroot)src/tsd.c \ 121 $(srcroot)src/witness.c 122 ifeq ($(enable_zone_allocator), 1) 123 C_SRCS += $(srcroot)src/zone.c 124 endif 125 ifeq ($(IMPORTLIB),$(SO)) 126 STATIC_LIBS := $(objroot)lib/$(LIBJEMALLOC).$(A) 127 endif 128 ifdef PIC_CFLAGS 129 STATIC_LIBS += $(objroot)lib/$(LIBJEMALLOC)_pic.$(A) 130 else 131 STATIC_LIBS += $(objroot)lib/$(LIBJEMALLOC)_s.$(A) 132 endif 133 DSOS := $(objroot)lib/$(LIBJEMALLOC).$(SOREV) 134 ifneq ($(SOREV),$(SO)) 135 DSOS += $(objroot)lib/$(LIBJEMALLOC).$(SO) 136 endif 137 ifeq (1, $(link_whole_archive)) 138 LJEMALLOC := -Wl,--whole-archive -L$(objroot)lib -l$(LIBJEMALLOC) -Wl,--no-whole-archive 139 else 140 LJEMALLOC := $(objroot)lib/$(LIBJEMALLOC).$(IMPORTLIB) 141 endif 142 PC := $(objroot)jemalloc.pc 143 MAN3 := $(objroot)doc/jemalloc$(install_suffix).3 144 DOCS_XML := $(objroot)doc/jemalloc$(install_suffix).xml 145 DOCS_HTML := $(DOCS_XML:$(objroot)%.xml=$(objroot)%.html) 146 DOCS_MAN3 := $(DOCS_XML:$(objroot)%.xml=$(objroot)%.3) 147 DOCS := $(DOCS_HTML) $(DOCS_MAN3) 148 C_TESTLIB_SRCS := $(srcroot)test/src/btalloc.c $(srcroot)test/src/btalloc_0.c \ 149 $(srcroot)test/src/btalloc_1.c $(srcroot)test/src/math.c \ 150 $(srcroot)test/src/mtx.c $(srcroot)test/src/mq.c \ 151 $(srcroot)test/src/SFMT.c $(srcroot)test/src/test.c \ 152 $(srcroot)test/src/thd.c $(srcroot)test/src/timer.c 153 ifeq (1, $(link_whole_archive)) 154 C_UTIL_INTEGRATION_SRCS := 155 C_UTIL_CPP_SRCS := 156 else 157 C_UTIL_INTEGRATION_SRCS := $(srcroot)src/nstime.c $(srcroot)src/malloc_io.c 158 C_UTIL_CPP_SRCS := $(srcroot)src/nstime.c $(srcroot)src/malloc_io.c 159 endif 160 TESTS_UNIT := \ 161 $(srcroot)test/unit/a0.c \ 162 $(srcroot)test/unit/arena_reset.c \ 163 $(srcroot)test/unit/atomic.c \ 164 $(srcroot)test/unit/background_thread.c \ 165 $(srcroot)test/unit/background_thread_enable.c \ 166 $(srcroot)test/unit/base.c \ 167 $(srcroot)test/unit/bitmap.c \ 168 $(srcroot)test/unit/ckh.c \ 169 $(srcroot)test/unit/decay.c \ 170 $(srcroot)test/unit/div.c \ 171 $(srcroot)test/unit/emitter.c \ 172 $(srcroot)test/unit/extent_quantize.c \ 173 $(srcroot)test/unit/fork.c \ 174 $(srcroot)test/unit/hash.c \ 175 $(srcroot)test/unit/hooks.c \ 176 $(srcroot)test/unit/junk.c \ 177 $(srcroot)test/unit/junk_alloc.c \ 178 $(srcroot)test/unit/junk_free.c \ 179 $(srcroot)test/unit/log.c \ 180 $(srcroot)test/unit/mallctl.c \ 181 $(srcroot)test/unit/malloc_io.c \ 182 $(srcroot)test/unit/math.c \ 183 $(srcroot)test/unit/mq.c \ 184 $(srcroot)test/unit/mtx.c \ 185 $(srcroot)test/unit/pack.c \ 186 $(srcroot)test/unit/pages.c \ 187 $(srcroot)test/unit/ph.c \ 188 $(srcroot)test/unit/prng.c \ 189 $(srcroot)test/unit/prof_accum.c \ 190 $(srcroot)test/unit/prof_active.c \ 191 $(srcroot)test/unit/prof_gdump.c \ 192 $(srcroot)test/unit/prof_idump.c \ 193 $(srcroot)test/unit/prof_reset.c \ 194 $(srcroot)test/unit/prof_tctx.c \ 195 $(srcroot)test/unit/prof_thread_name.c \ 196 $(srcroot)test/unit/ql.c \ 197 $(srcroot)test/unit/qr.c \ 198 $(srcroot)test/unit/rb.c \ 199 $(srcroot)test/unit/retained.c \ 200 $(srcroot)test/unit/rtree.c \ 201 $(srcroot)test/unit/SFMT.c \ 202 $(srcroot)test/unit/size_classes.c \ 203 $(srcroot)test/unit/slab.c \ 204 $(srcroot)test/unit/smoothstep.c \ 205 $(srcroot)test/unit/spin.c \ 206 $(srcroot)test/unit/stats.c \ 207 $(srcroot)test/unit/stats_print.c \ 208 $(srcroot)test/unit/ticker.c \ 209 $(srcroot)test/unit/nstime.c \ 210 $(srcroot)test/unit/tsd.c \ 211 $(srcroot)test/unit/witness.c \ 212 $(srcroot)test/unit/zero.c 213 ifeq (@enable_prof@, 1) 214 TESTS_UNIT += \ 215 $(srcroot)test/unit/arena_reset_prof.c 216 endif 217 TESTS_INTEGRATION := $(srcroot)test/integration/aligned_alloc.c \ 218 $(srcroot)test/integration/allocated.c \ 219 $(srcroot)test/integration/extent.c \ 220 $(srcroot)test/integration/mallocx.c \ 221 $(srcroot)test/integration/MALLOCX_ARENA.c \ 222 $(srcroot)test/integration/overflow.c \ 223 $(srcroot)test/integration/posix_memalign.c \ 224 $(srcroot)test/integration/rallocx.c \ 225 $(srcroot)test/integration/sdallocx.c \ 226 $(srcroot)test/integration/thread_arena.c \ 227 $(srcroot)test/integration/thread_tcache_enabled.c \ 228 $(srcroot)test/integration/xallocx.c 229 ifeq (@enable_cxx@, 1) 230 CPP_SRCS := $(srcroot)src/jemalloc_cpp.cpp 231 TESTS_INTEGRATION_CPP := $(srcroot)test/integration/cpp/basic.cpp 232 else 233 CPP_SRCS := 234 TESTS_INTEGRATION_CPP := 235 endif 236 TESTS_STRESS := $(srcroot)test/stress/microbench.c 237 238 TESTS := $(TESTS_UNIT) $(TESTS_INTEGRATION) $(TESTS_INTEGRATION_CPP) $(TESTS_STRESS) 239 240 PRIVATE_NAMESPACE_HDRS := $(objroot)include/jemalloc/internal/private_namespace.h $(objroot)include/jemalloc/internal/private_namespace_jet.h 241 PRIVATE_NAMESPACE_GEN_HDRS := $(PRIVATE_NAMESPACE_HDRS:%.h=%.gen.h) 242 C_SYM_OBJS := $(C_SRCS:$(srcroot)%.c=$(objroot)%.sym.$(O)) 243 C_SYMS := $(C_SRCS:$(srcroot)%.c=$(objroot)%.sym) 244 C_OBJS := $(C_SRCS:$(srcroot)%.c=$(objroot)%.$(O)) 245 CPP_OBJS := $(CPP_SRCS:$(srcroot)%.cpp=$(objroot)%.$(O)) 246 C_PIC_OBJS := $(C_SRCS:$(srcroot)%.c=$(objroot)%.pic.$(O)) 247 CPP_PIC_OBJS := $(CPP_SRCS:$(srcroot)%.cpp=$(objroot)%.pic.$(O)) 248 C_JET_SYM_OBJS := $(C_SRCS:$(srcroot)%.c=$(objroot)%.jet.sym.$(O)) 249 C_JET_SYMS := $(C_SRCS:$(srcroot)%.c=$(objroot)%.jet.sym) 250 C_JET_OBJS := $(C_SRCS:$(srcroot)%.c=$(objroot)%.jet.$(O)) 251 C_TESTLIB_UNIT_OBJS := $(C_TESTLIB_SRCS:$(srcroot)%.c=$(objroot)%.unit.$(O)) 252 C_TESTLIB_INTEGRATION_OBJS := $(C_TESTLIB_SRCS:$(srcroot)%.c=$(objroot)%.integration.$(O)) 253 C_UTIL_INTEGRATION_OBJS := $(C_UTIL_INTEGRATION_SRCS:$(srcroot)%.c=$(objroot)%.integration.$(O)) 254 C_TESTLIB_STRESS_OBJS := $(C_TESTLIB_SRCS:$(srcroot)%.c=$(objroot)%.stress.$(O)) 255 C_TESTLIB_OBJS := $(C_TESTLIB_UNIT_OBJS) $(C_TESTLIB_INTEGRATION_OBJS) $(C_UTIL_INTEGRATION_OBJS) $(C_TESTLIB_STRESS_OBJS) 256 257 TESTS_UNIT_OBJS := $(TESTS_UNIT:$(srcroot)%.c=$(objroot)%.$(O)) 258 TESTS_INTEGRATION_OBJS := $(TESTS_INTEGRATION:$(srcroot)%.c=$(objroot)%.$(O)) 259 TESTS_INTEGRATION_CPP_OBJS := $(TESTS_INTEGRATION_CPP:$(srcroot)%.cpp=$(objroot)%.$(O)) 260 TESTS_STRESS_OBJS := $(TESTS_STRESS:$(srcroot)%.c=$(objroot)%.$(O)) 261 TESTS_OBJS := $(TESTS_UNIT_OBJS) $(TESTS_INTEGRATION_OBJS) $(TESTS_STRESS_OBJS) 262 TESTS_CPP_OBJS := $(TESTS_INTEGRATION_CPP_OBJS) 263 264 .PHONY: all dist build_doc_html build_doc_man build_doc 265 .PHONY: install_bin install_include install_lib 266 .PHONY: install_doc_html install_doc_man install_doc install 267 .PHONY: tests check clean distclean relclean 268 269 .SECONDARY : $(PRIVATE_NAMESPACE_GEN_HDRS) $(TESTS_OBJS) $(TESTS_CPP_OBJS) 270 271 # Default target. 272 all: build_lib 273 274 dist: build_doc 275 276 $(objroot)doc/%.html : $(objroot)doc/%.xml $(srcroot)doc/stylesheet.xsl $(objroot)doc/html.xsl 277 $(XSLTPROC) -o $@ $(objroot)doc/html.xsl $< 278 279 $(objroot)doc/%.3 : $(objroot)doc/%.xml $(srcroot)doc/stylesheet.xsl $(objroot)doc/manpages.xsl 280 $(XSLTPROC) -o $@ $(objroot)doc/manpages.xsl $< 281 282 build_doc_html: $(DOCS_HTML) 283 build_doc_man: $(DOCS_MAN3) 284 build_doc: $(DOCS) 285 286 # 287 # Include generated dependency files. 288 # 289 ifdef CC_MM 290 -include $(C_SYM_OBJS:%.$(O)=%.d) 291 -include $(C_OBJS:%.$(O)=%.d) 292 -include $(CPP_OBJS:%.$(O)=%.d) 293 -include $(C_PIC_OBJS:%.$(O)=%.d) 294 -include $(CPP_PIC_OBJS:%.$(O)=%.d) 295 -include $(C_JET_SYM_OBJS:%.$(O)=%.d) 296 -include $(C_JET_OBJS:%.$(O)=%.d) 297 -include $(C_TESTLIB_OBJS:%.$(O)=%.d) 298 -include $(TESTS_OBJS:%.$(O)=%.d) 299 -include $(TESTS_CPP_OBJS:%.$(O)=%.d) 300 endif 301 302 $(C_SYM_OBJS): $(objroot)src/%.sym.$(O): $(srcroot)src/%.c 303 $(C_SYM_OBJS): CPPFLAGS += -DJEMALLOC_NO_PRIVATE_NAMESPACE 304 $(C_SYMS): $(objroot)src/%.sym: $(objroot)src/%.sym.$(O) 305 $(C_OBJS): $(objroot)src/%.$(O): $(srcroot)src/%.c 306 $(CPP_OBJS): $(objroot)src/%.$(O): $(srcroot)src/%.cpp 307 $(C_PIC_OBJS): $(objroot)src/%.pic.$(O): $(srcroot)src/%.c 308 $(C_PIC_OBJS): CFLAGS += $(PIC_CFLAGS) 309 $(CPP_PIC_OBJS): $(objroot)src/%.pic.$(O): $(srcroot)src/%.cpp 310 $(CPP_PIC_OBJS): CXXFLAGS += $(PIC_CFLAGS) 311 $(C_JET_SYM_OBJS): $(objroot)src/%.jet.sym.$(O): $(srcroot)src/%.c 312 $(C_JET_SYM_OBJS): CPPFLAGS += -DJEMALLOC_JET -DJEMALLOC_NO_PRIVATE_NAMESPACE 313 $(C_JET_SYMS): $(objroot)src/%.jet.sym: $(objroot)src/%.jet.sym.$(O) 314 $(C_JET_OBJS): $(objroot)src/%.jet.$(O): $(srcroot)src/%.c 315 $(C_JET_OBJS): CPPFLAGS += -DJEMALLOC_JET 316 $(C_TESTLIB_UNIT_OBJS): $(objroot)test/src/%.unit.$(O): $(srcroot)test/src/%.c 317 $(C_TESTLIB_UNIT_OBJS): CPPFLAGS += -DJEMALLOC_UNIT_TEST 318 $(C_TESTLIB_INTEGRATION_OBJS): $(objroot)test/src/%.integration.$(O): $(srcroot)test/src/%.c 319 $(C_TESTLIB_INTEGRATION_OBJS): CPPFLAGS += -DJEMALLOC_INTEGRATION_TEST 320 $(C_UTIL_INTEGRATION_OBJS): $(objroot)src/%.integration.$(O): $(srcroot)src/%.c 321 $(C_TESTLIB_STRESS_OBJS): $(objroot)test/src/%.stress.$(O): $(srcroot)test/src/%.c 322 $(C_TESTLIB_STRESS_OBJS): CPPFLAGS += -DJEMALLOC_STRESS_TEST -DJEMALLOC_STRESS_TESTLIB 323 $(C_TESTLIB_OBJS): CPPFLAGS += -I$(srcroot)test/include -I$(objroot)test/include 324 $(TESTS_UNIT_OBJS): CPPFLAGS += -DJEMALLOC_UNIT_TEST 325 $(TESTS_INTEGRATION_OBJS): CPPFLAGS += -DJEMALLOC_INTEGRATION_TEST 326 $(TESTS_INTEGRATION_CPP_OBJS): CPPFLAGS += -DJEMALLOC_INTEGRATION_CPP_TEST 327 $(TESTS_STRESS_OBJS): CPPFLAGS += -DJEMALLOC_STRESS_TEST 328 $(TESTS_OBJS): $(objroot)test/%.$(O): $(srcroot)test/%.c 329 $(TESTS_CPP_OBJS): $(objroot)test/%.$(O): $(srcroot)test/%.cpp 330 $(TESTS_OBJS): CPPFLAGS += -I$(srcroot)test/include -I$(objroot)test/include 331 $(TESTS_CPP_OBJS): CPPFLAGS += -I$(srcroot)test/include -I$(objroot)test/include 332 ifneq ($(IMPORTLIB),$(SO)) 333 $(CPP_OBJS) $(C_SYM_OBJS) $(C_OBJS) $(C_JET_SYM_OBJS) $(C_JET_OBJS): CPPFLAGS += -DDLLEXPORT 334 endif 335 336 # Dependencies. 337 ifndef CC_MM 338 HEADER_DIRS = $(srcroot)include/jemalloc/internal \ 339 $(objroot)include/jemalloc $(objroot)include/jemalloc/internal 340 HEADERS = $(filter-out $(PRIVATE_NAMESPACE_HDRS),$(wildcard $(foreach dir,$(HEADER_DIRS),$(dir)/*.h))) 341 $(C_SYM_OBJS) $(C_OBJS) $(CPP_OBJS) $(C_PIC_OBJS) $(CPP_PIC_OBJS) $(C_JET_SYM_OBJS) $(C_JET_OBJS) $(C_TESTLIB_OBJS) $(TESTS_OBJS) $(TESTS_CPP_OBJS): $(HEADERS) 342 $(TESTS_OBJS) $(TESTS_CPP_OBJS): $(objroot)test/include/test/jemalloc_test.h 343 endif 344 345 $(C_OBJS) $(CPP_OBJS) $(C_PIC_OBJS) $(CPP_PIC_OBJS) $(C_TESTLIB_INTEGRATION_OBJS) $(C_UTIL_INTEGRATION_OBJS) $(TESTS_INTEGRATION_OBJS) $(TESTS_INTEGRATION_CPP_OBJS): $(objroot)include/jemalloc/internal/private_namespace.h 346 $(C_JET_OBJS) $(C_TESTLIB_UNIT_OBJS) $(C_TESTLIB_STRESS_OBJS) $(TESTS_UNIT_OBJS) $(TESTS_STRESS_OBJS): $(objroot)include/jemalloc/internal/private_namespace_jet.h 347 348 $(C_SYM_OBJS) $(C_OBJS) $(C_PIC_OBJS) $(C_JET_SYM_OBJS) $(C_JET_OBJS) $(C_TESTLIB_OBJS) $(TESTS_OBJS): %.$(O): 349 @mkdir -p $(@D) 350 $(CC) $(CFLAGS) -c $(CPPFLAGS) $(CTARGET) $< 351 ifdef CC_MM 352 @$(CC) -MM $(CPPFLAGS) -MT $@ -o $(@:%.$(O)=%.d) $< 353 endif 354 355 $(C_SYMS): %.sym: 356 @mkdir -p $(@D) 357 $(DUMP_SYMS) $< | $(AWK) -f $(objroot)include/jemalloc/internal/private_symbols.awk > $@ 358 359 $(C_JET_SYMS): %.sym: 360 @mkdir -p $(@D) 361 $(DUMP_SYMS) $< | $(AWK) -f $(objroot)include/jemalloc/internal/private_symbols_jet.awk > $@ 362 363 $(objroot)include/jemalloc/internal/private_namespace.gen.h: $(C_SYMS) 364 $(SHELL) $(srcroot)include/jemalloc/internal/private_namespace.sh $^ > $@ 365 366 $(objroot)include/jemalloc/internal/private_namespace_jet.gen.h: $(C_JET_SYMS) 367 $(SHELL) $(srcroot)include/jemalloc/internal/private_namespace.sh $^ > $@ 368 369 %.h: %.gen.h 370 @if ! `cmp -s $< $@` ; then echo "cp $< $<"; cp $< $@ ; fi 371 372 $(CPP_OBJS) $(CPP_PIC_OBJS) $(TESTS_CPP_OBJS): %.$(O): 373 @mkdir -p $(@D) 374 $(CXX) $(CXXFLAGS) -c $(CPPFLAGS) $(CTARGET) $< 375 ifdef CC_MM 376 @$(CXX) -MM $(CPPFLAGS) -MT $@ -o $(@:%.$(O)=%.d) $< 377 endif 378 379 ifneq ($(SOREV),$(SO)) 380 %.$(SO) : %.$(SOREV) 381 @mkdir -p $(@D) 382 ln -sf $(<F) $@ 383 endif 384 385 $(objroot)lib/$(LIBJEMALLOC).$(SOREV) : $(if $(PIC_CFLAGS),$(C_PIC_OBJS),$(C_OBJS)) $(if $(PIC_CFLAGS),$(CPP_PIC_OBJS),$(CPP_OBJS)) 386 @mkdir -p $(@D) 387 $(CC) $(DSO_LDFLAGS) $(call RPATH,$(RPATH_EXTRA)) $(LDTARGET) $+ $(LDFLAGS) $(LIBS) $(EXTRA_LDFLAGS) 388 389 $(objroot)lib/$(LIBJEMALLOC)_pic.$(A) : $(C_PIC_OBJS) $(CPP_PIC_OBJS) 390 $(objroot)lib/$(LIBJEMALLOC).$(A) : $(C_OBJS) $(CPP_OBJS) 391 $(objroot)lib/$(LIBJEMALLOC)_s.$(A) : $(C_OBJS) $(CPP_OBJS) 392 393 $(STATIC_LIBS): 394 @mkdir -p $(@D) 395 $(AR) $(ARFLAGS)@AROUT@ $+ 396 397 $(objroot)test/unit/%$(EXE): $(objroot)test/unit/%.$(O) $(C_JET_OBJS) $(C_TESTLIB_UNIT_OBJS) 398 @mkdir -p $(@D) 399 $(CC) $(LDTARGET) $(filter %.$(O),$^) $(call RPATH,$(objroot)lib) $(LDFLAGS) $(filter-out -lm,$(LIBS)) $(LM) $(EXTRA_LDFLAGS) 400 401 $(objroot)test/integration/%$(EXE): $(objroot)test/integration/%.$(O) $(C_TESTLIB_INTEGRATION_OBJS) $(C_UTIL_INTEGRATION_OBJS) $(objroot)lib/$(LIBJEMALLOC).$(IMPORTLIB) 402 @mkdir -p $(@D) 403 $(CC) $(TEST_LD_MODE) $(LDTARGET) $(filter %.$(O),$^) $(call RPATH,$(objroot)lib) $(LJEMALLOC) $(LDFLAGS) $(filter-out -lm,$(filter -lrt -lpthread -lstdc++,$(LIBS))) $(LM) $(EXTRA_LDFLAGS) 404 405 $(objroot)test/integration/cpp/%$(EXE): $(objroot)test/integration/cpp/%.$(O) $(C_TESTLIB_INTEGRATION_OBJS) $(C_UTIL_INTEGRATION_OBJS) $(objroot)lib/$(LIBJEMALLOC).$(IMPORTLIB) 406 @mkdir -p $(@D) 407 $(CXX) $(LDTARGET) $(filter %.$(O),$^) $(call RPATH,$(objroot)lib) $(objroot)lib/$(LIBJEMALLOC).$(IMPORTLIB) $(LDFLAGS) $(filter-out -lm,$(LIBS)) -lm $(EXTRA_LDFLAGS) 408 409 $(objroot)test/stress/%$(EXE): $(objroot)test/stress/%.$(O) $(C_JET_OBJS) $(C_TESTLIB_STRESS_OBJS) $(objroot)lib/$(LIBJEMALLOC).$(IMPORTLIB) 410 @mkdir -p $(@D) 411 $(CC) $(TEST_LD_MODE) $(LDTARGET) $(filter %.$(O),$^) $(call RPATH,$(objroot)lib) $(objroot)lib/$(LIBJEMALLOC).$(IMPORTLIB) $(LDFLAGS) $(filter-out -lm,$(LIBS)) $(LM) $(EXTRA_LDFLAGS) 412 413 build_lib_shared: $(DSOS) 414 build_lib_static: $(STATIC_LIBS) 415 build_lib: build_lib_shared build_lib_static 416 417 install_bin: 418 $(INSTALL) -d $(BINDIR) 419 @for b in $(BINS); do \ 420 echo "$(INSTALL) -m 755 $$b $(BINDIR)"; \ 421 $(INSTALL) -m 755 $$b $(BINDIR); \ 422 done 423 424 install_include: 425 $(INSTALL) -d $(INCLUDEDIR)/jemalloc 426 @for h in $(C_HDRS); do \ 427 echo "$(INSTALL) -m 644 $$h $(INCLUDEDIR)/jemalloc"; \ 428 $(INSTALL) -m 644 $$h $(INCLUDEDIR)/jemalloc; \ 429 done 430 431 install_lib_shared: $(DSOS) 432 $(INSTALL) -d $(LIBDIR) 433 $(INSTALL) -m 755 $(objroot)lib/$(LIBJEMALLOC).$(SOREV) $(LIBDIR) 434 ifneq ($(SOREV),$(SO)) 435 ln -sf $(LIBJEMALLOC).$(SOREV) $(LIBDIR)/$(LIBJEMALLOC).$(SO) 436 endif 437 438 install_lib_static: $(STATIC_LIBS) 439 $(INSTALL) -d $(LIBDIR) 440 @for l in $(STATIC_LIBS); do \ 441 echo "$(INSTALL) -m 755 $$l $(LIBDIR)"; \ 442 $(INSTALL) -m 755 $$l $(LIBDIR); \ 443 done 444 445 install_lib_pc: $(PC) 446 $(INSTALL) -d $(LIBDIR)/pkgconfig 447 @for l in $(PC); do \ 448 echo "$(INSTALL) -m 644 $$l $(LIBDIR)/pkgconfig"; \ 449 $(INSTALL) -m 644 $$l $(LIBDIR)/pkgconfig; \ 450 done 451 452 install_lib: install_lib_shared install_lib_static install_lib_pc 453 454 install_doc_html: 455 $(INSTALL) -d $(DATADIR)/doc/jemalloc$(install_suffix) 456 @for d in $(DOCS_HTML); do \ 457 echo "$(INSTALL) -m 644 $$d $(DATADIR)/doc/jemalloc$(install_suffix)"; \ 458 $(INSTALL) -m 644 $$d $(DATADIR)/doc/jemalloc$(install_suffix); \ 459 done 460 461 install_doc_man: 462 $(INSTALL) -d $(MANDIR)/man3 463 @for d in $(DOCS_MAN3); do \ 464 echo "$(INSTALL) -m 644 $$d $(MANDIR)/man3"; \ 465 $(INSTALL) -m 644 $$d $(MANDIR)/man3; \ 466 done 467 468 install_doc: install_doc_html install_doc_man 469 470 install: install_bin install_include install_lib install_doc 471 472 tests_unit: $(TESTS_UNIT:$(srcroot)%.c=$(objroot)%$(EXE)) 473 tests_integration: $(TESTS_INTEGRATION:$(srcroot)%.c=$(objroot)%$(EXE)) $(TESTS_INTEGRATION_CPP:$(srcroot)%.cpp=$(objroot)%$(EXE)) 474 tests_stress: $(TESTS_STRESS:$(srcroot)%.c=$(objroot)%$(EXE)) 475 tests: tests_unit tests_integration tests_stress 476 477 check_unit_dir: 478 @mkdir -p $(objroot)test/unit 479 check_integration_dir: 480 @mkdir -p $(objroot)test/integration 481 stress_dir: 482 @mkdir -p $(objroot)test/stress 483 check_dir: check_unit_dir check_integration_dir 484 485 check_unit: tests_unit check_unit_dir 486 $(SHELL) $(objroot)test/test.sh $(TESTS_UNIT:$(srcroot)%.c=$(objroot)%) 487 check_integration_prof: tests_integration check_integration_dir 488 ifeq ($(enable_prof), 1) 489 $(MALLOC_CONF)="prof:true" $(SHELL) $(objroot)test/test.sh $(TESTS_INTEGRATION:$(srcroot)%.c=$(objroot)%) $(TESTS_INTEGRATION_CPP:$(srcroot)%.cpp=$(objroot)%) 490 $(MALLOC_CONF)="prof:true,prof_active:false" $(SHELL) $(objroot)test/test.sh $(TESTS_INTEGRATION:$(srcroot)%.c=$(objroot)%) $(TESTS_INTEGRATION_CPP:$(srcroot)%.cpp=$(objroot)%) 491 endif 492 check_integration_decay: tests_integration check_integration_dir 493 $(MALLOC_CONF)="dirty_decay_ms:-1,muzzy_decay_ms:-1" $(SHELL) $(objroot)test/test.sh $(TESTS_INTEGRATION:$(srcroot)%.c=$(objroot)%) $(TESTS_INTEGRATION_CPP:$(srcroot)%.cpp=$(objroot)%) 494 $(MALLOC_CONF)="dirty_decay_ms:0,muzzy_decay_ms:0" $(SHELL) $(objroot)test/test.sh $(TESTS_INTEGRATION:$(srcroot)%.c=$(objroot)%) $(TESTS_INTEGRATION_CPP:$(srcroot)%.cpp=$(objroot)%) 495 check_integration: tests_integration check_integration_dir 496 $(SHELL) $(objroot)test/test.sh $(TESTS_INTEGRATION:$(srcroot)%.c=$(objroot)%) $(TESTS_INTEGRATION_CPP:$(srcroot)%.cpp=$(objroot)%) 497 stress: tests_stress stress_dir 498 $(SHELL) $(objroot)test/test.sh $(TESTS_STRESS:$(srcroot)%.c=$(objroot)%) 499 check: check_unit check_integration check_integration_decay check_integration_prof 500 501 clean: 502 rm -f $(PRIVATE_NAMESPACE_HDRS) 503 rm -f $(PRIVATE_NAMESPACE_GEN_HDRS) 504 rm -f $(C_SYM_OBJS) 505 rm -f $(C_SYMS) 506 rm -f $(C_OBJS) 507 rm -f $(CPP_OBJS) 508 rm -f $(C_PIC_OBJS) 509 rm -f $(CPP_PIC_OBJS) 510 rm -f $(C_JET_SYM_OBJS) 511 rm -f $(C_JET_SYMS) 512 rm -f $(C_JET_OBJS) 513 rm -f $(C_TESTLIB_OBJS) 514 rm -f $(C_SYM_OBJS:%.$(O)=%.d) 515 rm -f $(C_OBJS:%.$(O)=%.d) 516 rm -f $(CPP_OBJS:%.$(O)=%.d) 517 rm -f $(C_PIC_OBJS:%.$(O)=%.d) 518 rm -f $(CPP_PIC_OBJS:%.$(O)=%.d) 519 rm -f $(C_JET_SYM_OBJS:%.$(O)=%.d) 520 rm -f $(C_JET_OBJS:%.$(O)=%.d) 521 rm -f $(C_TESTLIB_OBJS:%.$(O)=%.d) 522 rm -f $(TESTS_OBJS:%.$(O)=%$(EXE)) 523 rm -f $(TESTS_OBJS) 524 rm -f $(TESTS_OBJS:%.$(O)=%.d) 525 rm -f $(TESTS_OBJS:%.$(O)=%.out) 526 rm -f $(TESTS_CPP_OBJS:%.$(O)=%$(EXE)) 527 rm -f $(TESTS_CPP_OBJS) 528 rm -f $(TESTS_CPP_OBJS:%.$(O)=%.d) 529 rm -f $(TESTS_CPP_OBJS:%.$(O)=%.out) 530 rm -f $(DSOS) $(STATIC_LIBS) 531 532 distclean: clean 533 rm -f $(objroot)bin/jemalloc-config 534 rm -f $(objroot)bin/jemalloc.sh 535 rm -f $(objroot)bin/jeprof 536 rm -f $(objroot)config.log 537 rm -f $(objroot)config.status 538 rm -f $(objroot)config.stamp 539 rm -f $(cfghdrs_out) 540 rm -f $(cfgoutputs_out) 541 542 relclean: distclean 543 rm -f $(objroot)configure 544 rm -f $(objroot)VERSION 545 rm -f $(DOCS_HTML) 546 rm -f $(DOCS_MAN3) 547 548 #=============================================================================== 549 # Re-configuration rules. 550 551 ifeq ($(enable_autogen), 1) 552 $(srcroot)configure : $(srcroot)configure.ac 553 cd ./$(srcroot) && $(AUTOCONF) 554 555 $(objroot)config.status : $(srcroot)configure 556 ./$(objroot)config.status --recheck 557 558 $(srcroot)config.stamp.in : $(srcroot)configure.ac 559 echo stamp > $(srcroot)config.stamp.in 560 561 $(objroot)config.stamp : $(cfgoutputs_in) $(cfghdrs_in) $(srcroot)configure 562 ./$(objroot)config.status 563 @touch $@ 564 565 # There must be some action in order for make to re-read Makefile when it is 566 # out of date. 567 $(cfgoutputs_out) $(cfghdrs_out) : $(objroot)config.stamp 568 @true 569 endif 570