Refactor ph to support configurable comparison functions. Use a cpp macro code generation form equivalent to the rb macros so that pairing heaps can be used for both run heaps and chunk heaps. Remove per node parent pointers, and instead use leftmost siblings' prev pointers to track parents. Fix multi-pass sibling merging to iterate over intermediate results using a FIFO, rather than a LIFO. Use this fixed sibling merging implementation for both merge phases of the auxiliary twopass algorithm (first merging the aux list, then replacing the root with its merged children). This fixes both degenerate merge behavior and the potential for deep recursion. This regression was introduced by 6bafa6678fc36483e638f1c3a0a9bf79fb89bfc9 (Pairing heap). This resolves #371.
487 lines
17 KiB
Makefile
487 lines
17 KiB
Makefile
# Clear out all vpaths, then set just one (default vpath) for the main build
|
|
# directory.
|
|
vpath
|
|
vpath % .
|
|
|
|
# Clear the default suffixes, so that built-in rules are not used.
|
|
.SUFFIXES :
|
|
|
|
SHELL := /bin/sh
|
|
|
|
CC := @CC@
|
|
|
|
# Configuration parameters.
|
|
DESTDIR =
|
|
BINDIR := $(DESTDIR)@BINDIR@
|
|
INCLUDEDIR := $(DESTDIR)@INCLUDEDIR@
|
|
LIBDIR := $(DESTDIR)@LIBDIR@
|
|
DATADIR := $(DESTDIR)@DATADIR@
|
|
MANDIR := $(DESTDIR)@MANDIR@
|
|
srcroot := @srcroot@
|
|
objroot := @objroot@
|
|
abs_srcroot := @abs_srcroot@
|
|
abs_objroot := @abs_objroot@
|
|
|
|
# Build parameters.
|
|
CPPFLAGS := @CPPFLAGS@ -I$(srcroot)include -I$(objroot)include
|
|
CFLAGS := @CFLAGS@
|
|
LDFLAGS := @LDFLAGS@
|
|
EXTRA_LDFLAGS := @EXTRA_LDFLAGS@
|
|
LIBS := @LIBS@
|
|
TESTLIBS := @TESTLIBS@
|
|
RPATH_EXTRA := @RPATH_EXTRA@
|
|
SO := @so@
|
|
IMPORTLIB := @importlib@
|
|
O := @o@
|
|
A := @a@
|
|
EXE := @exe@
|
|
LIBPREFIX := @libprefix@
|
|
REV := @rev@
|
|
install_suffix := @install_suffix@
|
|
ABI := @abi@
|
|
XSLTPROC := @XSLTPROC@
|
|
AUTOCONF := @AUTOCONF@
|
|
_RPATH = @RPATH@
|
|
RPATH = $(if $(1),$(call _RPATH,$(1)))
|
|
cfghdrs_in := $(addprefix $(srcroot),@cfghdrs_in@)
|
|
cfghdrs_out := @cfghdrs_out@
|
|
cfgoutputs_in := $(addprefix $(srcroot),@cfgoutputs_in@)
|
|
cfgoutputs_out := @cfgoutputs_out@
|
|
enable_autogen := @enable_autogen@
|
|
enable_code_coverage := @enable_code_coverage@
|
|
enable_prof := @enable_prof@
|
|
enable_valgrind := @enable_valgrind@
|
|
enable_zone_allocator := @enable_zone_allocator@
|
|
MALLOC_CONF := @JEMALLOC_CPREFIX@MALLOC_CONF
|
|
DSO_LDFLAGS = @DSO_LDFLAGS@
|
|
SOREV = @SOREV@
|
|
PIC_CFLAGS = @PIC_CFLAGS@
|
|
CTARGET = @CTARGET@
|
|
LDTARGET = @LDTARGET@
|
|
MKLIB = @MKLIB@
|
|
AR = @AR@
|
|
ARFLAGS = @ARFLAGS@
|
|
CC_MM = @CC_MM@
|
|
|
|
ifeq (macho, $(ABI))
|
|
TEST_LIBRARY_PATH := DYLD_FALLBACK_LIBRARY_PATH="$(objroot)lib"
|
|
else
|
|
ifeq (pecoff, $(ABI))
|
|
TEST_LIBRARY_PATH := PATH="$(PATH):$(objroot)lib"
|
|
else
|
|
TEST_LIBRARY_PATH :=
|
|
endif
|
|
endif
|
|
|
|
LIBJEMALLOC := $(LIBPREFIX)jemalloc$(install_suffix)
|
|
|
|
# Lists of files.
|
|
BINS := $(objroot)bin/jemalloc-config $(objroot)bin/jemalloc.sh $(objroot)bin/jeprof
|
|
C_HDRS := $(objroot)include/jemalloc/jemalloc$(install_suffix).h
|
|
C_SRCS := $(srcroot)src/jemalloc.c \
|
|
$(srcroot)src/arena.c \
|
|
$(srcroot)src/atomic.c \
|
|
$(srcroot)src/base.c \
|
|
$(srcroot)src/bitmap.c \
|
|
$(srcroot)src/chunk.c \
|
|
$(srcroot)src/chunk_dss.c \
|
|
$(srcroot)src/chunk_mmap.c \
|
|
$(srcroot)src/ckh.c \
|
|
$(srcroot)src/ctl.c \
|
|
$(srcroot)src/extent.c \
|
|
$(srcroot)src/hash.c \
|
|
$(srcroot)src/huge.c \
|
|
$(srcroot)src/mb.c \
|
|
$(srcroot)src/mutex.c \
|
|
$(srcroot)src/nstime.c \
|
|
$(srcroot)src/pages.c \
|
|
$(srcroot)src/prng.c \
|
|
$(srcroot)src/prof.c \
|
|
$(srcroot)src/quarantine.c \
|
|
$(srcroot)src/rtree.c \
|
|
$(srcroot)src/stats.c \
|
|
$(srcroot)src/tcache.c \
|
|
$(srcroot)src/ticker.c \
|
|
$(srcroot)src/tsd.c \
|
|
$(srcroot)src/util.c
|
|
ifeq ($(enable_valgrind), 1)
|
|
C_SRCS += $(srcroot)src/valgrind.c
|
|
endif
|
|
ifeq ($(enable_zone_allocator), 1)
|
|
C_SRCS += $(srcroot)src/zone.c
|
|
endif
|
|
ifeq ($(IMPORTLIB),$(SO))
|
|
STATIC_LIBS := $(objroot)lib/$(LIBJEMALLOC).$(A)
|
|
endif
|
|
ifdef PIC_CFLAGS
|
|
STATIC_LIBS += $(objroot)lib/$(LIBJEMALLOC)_pic.$(A)
|
|
else
|
|
STATIC_LIBS += $(objroot)lib/$(LIBJEMALLOC)_s.$(A)
|
|
endif
|
|
DSOS := $(objroot)lib/$(LIBJEMALLOC).$(SOREV)
|
|
ifneq ($(SOREV),$(SO))
|
|
DSOS += $(objroot)lib/$(LIBJEMALLOC).$(SO)
|
|
endif
|
|
PC := $(objroot)jemalloc.pc
|
|
MAN3 := $(objroot)doc/jemalloc$(install_suffix).3
|
|
DOCS_XML := $(objroot)doc/jemalloc$(install_suffix).xml
|
|
DOCS_HTML := $(DOCS_XML:$(objroot)%.xml=$(objroot)%.html)
|
|
DOCS_MAN3 := $(DOCS_XML:$(objroot)%.xml=$(objroot)%.3)
|
|
DOCS := $(DOCS_HTML) $(DOCS_MAN3)
|
|
C_TESTLIB_SRCS := $(srcroot)test/src/btalloc.c $(srcroot)test/src/btalloc_0.c \
|
|
$(srcroot)test/src/btalloc_1.c $(srcroot)test/src/math.c \
|
|
$(srcroot)test/src/mtx.c $(srcroot)test/src/mq.c \
|
|
$(srcroot)test/src/SFMT.c $(srcroot)test/src/test.c \
|
|
$(srcroot)test/src/thd.c $(srcroot)test/src/timer.c
|
|
C_UTIL_INTEGRATION_SRCS := $(srcroot)src/nstime.c $(srcroot)src/util.c
|
|
TESTS_UNIT := $(srcroot)test/unit/atomic.c \
|
|
$(srcroot)test/unit/bitmap.c \
|
|
$(srcroot)test/unit/ckh.c \
|
|
$(srcroot)test/unit/decay.c \
|
|
$(srcroot)test/unit/hash.c \
|
|
$(srcroot)test/unit/junk.c \
|
|
$(srcroot)test/unit/junk_alloc.c \
|
|
$(srcroot)test/unit/junk_free.c \
|
|
$(srcroot)test/unit/lg_chunk.c \
|
|
$(srcroot)test/unit/mallctl.c \
|
|
$(srcroot)test/unit/math.c \
|
|
$(srcroot)test/unit/mq.c \
|
|
$(srcroot)test/unit/mtx.c \
|
|
$(srcroot)test/unit/ph.c \
|
|
$(srcroot)test/unit/prng.c \
|
|
$(srcroot)test/unit/prof_accum.c \
|
|
$(srcroot)test/unit/prof_active.c \
|
|
$(srcroot)test/unit/prof_gdump.c \
|
|
$(srcroot)test/unit/prof_idump.c \
|
|
$(srcroot)test/unit/prof_reset.c \
|
|
$(srcroot)test/unit/prof_thread_name.c \
|
|
$(srcroot)test/unit/ql.c \
|
|
$(srcroot)test/unit/qr.c \
|
|
$(srcroot)test/unit/quarantine.c \
|
|
$(srcroot)test/unit/rb.c \
|
|
$(srcroot)test/unit/rtree.c \
|
|
$(srcroot)test/unit/run_quantize.c \
|
|
$(srcroot)test/unit/SFMT.c \
|
|
$(srcroot)test/unit/size_classes.c \
|
|
$(srcroot)test/unit/smoothstep.c \
|
|
$(srcroot)test/unit/stats.c \
|
|
$(srcroot)test/unit/ticker.c \
|
|
$(srcroot)test/unit/nstime.c \
|
|
$(srcroot)test/unit/tsd.c \
|
|
$(srcroot)test/unit/util.c \
|
|
$(srcroot)test/unit/zero.c
|
|
TESTS_INTEGRATION := $(srcroot)test/integration/aligned_alloc.c \
|
|
$(srcroot)test/integration/allocated.c \
|
|
$(srcroot)test/integration/sdallocx.c \
|
|
$(srcroot)test/integration/mallocx.c \
|
|
$(srcroot)test/integration/MALLOCX_ARENA.c \
|
|
$(srcroot)test/integration/overflow.c \
|
|
$(srcroot)test/integration/posix_memalign.c \
|
|
$(srcroot)test/integration/rallocx.c \
|
|
$(srcroot)test/integration/thread_arena.c \
|
|
$(srcroot)test/integration/thread_tcache_enabled.c \
|
|
$(srcroot)test/integration/xallocx.c \
|
|
$(srcroot)test/integration/chunk.c
|
|
TESTS_STRESS := $(srcroot)test/stress/microbench.c
|
|
TESTS := $(TESTS_UNIT) $(TESTS_INTEGRATION) $(TESTS_STRESS)
|
|
|
|
C_OBJS := $(C_SRCS:$(srcroot)%.c=$(objroot)%.$(O))
|
|
C_PIC_OBJS := $(C_SRCS:$(srcroot)%.c=$(objroot)%.pic.$(O))
|
|
C_JET_OBJS := $(C_SRCS:$(srcroot)%.c=$(objroot)%.jet.$(O))
|
|
C_TESTLIB_UNIT_OBJS := $(C_TESTLIB_SRCS:$(srcroot)%.c=$(objroot)%.unit.$(O))
|
|
C_TESTLIB_INTEGRATION_OBJS := $(C_TESTLIB_SRCS:$(srcroot)%.c=$(objroot)%.integration.$(O))
|
|
C_UTIL_INTEGRATION_OBJS := $(C_UTIL_INTEGRATION_SRCS:$(srcroot)%.c=$(objroot)%.integration.$(O))
|
|
C_TESTLIB_STRESS_OBJS := $(C_TESTLIB_SRCS:$(srcroot)%.c=$(objroot)%.stress.$(O))
|
|
C_TESTLIB_OBJS := $(C_TESTLIB_UNIT_OBJS) $(C_TESTLIB_INTEGRATION_OBJS) $(C_UTIL_INTEGRATION_OBJS) $(C_TESTLIB_STRESS_OBJS)
|
|
|
|
TESTS_UNIT_OBJS := $(TESTS_UNIT:$(srcroot)%.c=$(objroot)%.$(O))
|
|
TESTS_INTEGRATION_OBJS := $(TESTS_INTEGRATION:$(srcroot)%.c=$(objroot)%.$(O))
|
|
TESTS_STRESS_OBJS := $(TESTS_STRESS:$(srcroot)%.c=$(objroot)%.$(O))
|
|
TESTS_OBJS := $(TESTS_UNIT_OBJS) $(TESTS_INTEGRATION_OBJS) $(TESTS_STRESS_OBJS)
|
|
|
|
.PHONY: all dist build_doc_html build_doc_man build_doc
|
|
.PHONY: install_bin install_include install_lib
|
|
.PHONY: install_doc_html install_doc_man install_doc install
|
|
.PHONY: tests check clean distclean relclean
|
|
|
|
.SECONDARY : $(TESTS_OBJS)
|
|
|
|
# Default target.
|
|
all: build_lib
|
|
|
|
dist: build_doc
|
|
|
|
$(objroot)doc/%.html : $(objroot)doc/%.xml $(srcroot)doc/stylesheet.xsl $(objroot)doc/html.xsl
|
|
$(XSLTPROC) -o $@ $(objroot)doc/html.xsl $<
|
|
|
|
$(objroot)doc/%.3 : $(objroot)doc/%.xml $(srcroot)doc/stylesheet.xsl $(objroot)doc/manpages.xsl
|
|
$(XSLTPROC) -o $@ $(objroot)doc/manpages.xsl $<
|
|
|
|
build_doc_html: $(DOCS_HTML)
|
|
build_doc_man: $(DOCS_MAN3)
|
|
build_doc: $(DOCS)
|
|
|
|
#
|
|
# Include generated dependency files.
|
|
#
|
|
ifdef CC_MM
|
|
-include $(C_OBJS:%.$(O)=%.d)
|
|
-include $(C_PIC_OBJS:%.$(O)=%.d)
|
|
-include $(C_JET_OBJS:%.$(O)=%.d)
|
|
-include $(C_TESTLIB_OBJS:%.$(O)=%.d)
|
|
-include $(TESTS_OBJS:%.$(O)=%.d)
|
|
endif
|
|
|
|
$(C_OBJS): $(objroot)src/%.$(O): $(srcroot)src/%.c
|
|
$(C_PIC_OBJS): $(objroot)src/%.pic.$(O): $(srcroot)src/%.c
|
|
$(C_PIC_OBJS): CFLAGS += $(PIC_CFLAGS)
|
|
$(C_JET_OBJS): $(objroot)src/%.jet.$(O): $(srcroot)src/%.c
|
|
$(C_JET_OBJS): CFLAGS += -DJEMALLOC_JET
|
|
$(C_TESTLIB_UNIT_OBJS): $(objroot)test/src/%.unit.$(O): $(srcroot)test/src/%.c
|
|
$(C_TESTLIB_UNIT_OBJS): CPPFLAGS += -DJEMALLOC_UNIT_TEST
|
|
$(C_TESTLIB_INTEGRATION_OBJS): $(objroot)test/src/%.integration.$(O): $(srcroot)test/src/%.c
|
|
$(C_TESTLIB_INTEGRATION_OBJS): CPPFLAGS += -DJEMALLOC_INTEGRATION_TEST
|
|
$(C_UTIL_INTEGRATION_OBJS): $(objroot)src/%.integration.$(O): $(srcroot)src/%.c
|
|
$(C_TESTLIB_STRESS_OBJS): $(objroot)test/src/%.stress.$(O): $(srcroot)test/src/%.c
|
|
$(C_TESTLIB_STRESS_OBJS): CPPFLAGS += -DJEMALLOC_STRESS_TEST -DJEMALLOC_STRESS_TESTLIB
|
|
$(C_TESTLIB_OBJS): CPPFLAGS += -I$(srcroot)test/include -I$(objroot)test/include
|
|
$(TESTS_UNIT_OBJS): CPPFLAGS += -DJEMALLOC_UNIT_TEST
|
|
$(TESTS_INTEGRATION_OBJS): CPPFLAGS += -DJEMALLOC_INTEGRATION_TEST
|
|
$(TESTS_STRESS_OBJS): CPPFLAGS += -DJEMALLOC_STRESS_TEST
|
|
$(TESTS_OBJS): $(objroot)test/%.$(O): $(srcroot)test/%.c
|
|
$(TESTS_OBJS): CPPFLAGS += -I$(srcroot)test/include -I$(objroot)test/include
|
|
ifneq ($(IMPORTLIB),$(SO))
|
|
$(C_OBJS) $(C_JET_OBJS): CPPFLAGS += -DDLLEXPORT
|
|
endif
|
|
|
|
ifndef CC_MM
|
|
# Dependencies.
|
|
HEADER_DIRS = $(srcroot)include/jemalloc/internal \
|
|
$(objroot)include/jemalloc $(objroot)include/jemalloc/internal
|
|
HEADERS = $(wildcard $(foreach dir,$(HEADER_DIRS),$(dir)/*.h))
|
|
$(C_OBJS) $(C_PIC_OBJS) $(C_JET_OBJS) $(C_TESTLIB_OBJS) $(TESTS_OBJS): $(HEADERS)
|
|
$(TESTS_OBJS): $(objroot)test/include/test/jemalloc_test.h
|
|
endif
|
|
|
|
$(C_OBJS) $(C_PIC_OBJS) $(C_JET_OBJS) $(C_TESTLIB_OBJS) $(TESTS_OBJS): %.$(O):
|
|
@mkdir -p $(@D)
|
|
$(CC) $(CFLAGS) -c $(CPPFLAGS) $(CTARGET) $<
|
|
ifdef CC_MM
|
|
@$(CC) -MM $(CPPFLAGS) -MT $@ -o $(@:%.$(O)=%.d) $<
|
|
endif
|
|
|
|
ifneq ($(SOREV),$(SO))
|
|
%.$(SO) : %.$(SOREV)
|
|
@mkdir -p $(@D)
|
|
ln -sf $(<F) $@
|
|
endif
|
|
|
|
$(objroot)lib/$(LIBJEMALLOC).$(SOREV) : $(if $(PIC_CFLAGS),$(C_PIC_OBJS),$(C_OBJS))
|
|
@mkdir -p $(@D)
|
|
$(CC) $(DSO_LDFLAGS) $(call RPATH,$(RPATH_EXTRA)) $(LDTARGET) $+ $(LDFLAGS) $(LIBS) $(EXTRA_LDFLAGS)
|
|
|
|
$(objroot)lib/$(LIBJEMALLOC)_pic.$(A) : $(C_PIC_OBJS)
|
|
$(objroot)lib/$(LIBJEMALLOC).$(A) : $(C_OBJS)
|
|
$(objroot)lib/$(LIBJEMALLOC)_s.$(A) : $(C_OBJS)
|
|
|
|
$(STATIC_LIBS):
|
|
@mkdir -p $(@D)
|
|
$(AR) $(ARFLAGS)@AROUT@ $+
|
|
|
|
$(objroot)test/unit/%$(EXE): $(objroot)test/unit/%.$(O) $(TESTS_UNIT_LINK_OBJS) $(C_JET_OBJS) $(C_TESTLIB_UNIT_OBJS)
|
|
@mkdir -p $(@D)
|
|
$(CC) $(LDTARGET) $(filter %.$(O),$^) $(call RPATH,$(objroot)lib) $(LDFLAGS) $(filter-out -lm,$(LIBS)) -lm $(TESTLIBS) $(EXTRA_LDFLAGS)
|
|
|
|
$(objroot)test/integration/%$(EXE): $(objroot)test/integration/%.$(O) $(C_TESTLIB_INTEGRATION_OBJS) $(C_UTIL_INTEGRATION_OBJS) $(objroot)lib/$(LIBJEMALLOC).$(IMPORTLIB)
|
|
@mkdir -p $(@D)
|
|
$(CC) $(LDTARGET) $(filter %.$(O),$^) $(call RPATH,$(objroot)lib) $(objroot)lib/$(LIBJEMALLOC).$(IMPORTLIB) $(LDFLAGS) $(filter-out -lm,$(filter -lpthread,$(LIBS))) -lm $(TESTLIBS) $(EXTRA_LDFLAGS)
|
|
|
|
$(objroot)test/stress/%$(EXE): $(objroot)test/stress/%.$(O) $(C_JET_OBJS) $(C_TESTLIB_STRESS_OBJS) $(objroot)lib/$(LIBJEMALLOC).$(IMPORTLIB)
|
|
@mkdir -p $(@D)
|
|
$(CC) $(LDTARGET) $(filter %.$(O),$^) $(call RPATH,$(objroot)lib) $(objroot)lib/$(LIBJEMALLOC).$(IMPORTLIB) $(LDFLAGS) $(filter-out -lm,$(LIBS)) -lm $(TESTLIBS) $(EXTRA_LDFLAGS)
|
|
|
|
build_lib_shared: $(DSOS)
|
|
build_lib_static: $(STATIC_LIBS)
|
|
build_lib: build_lib_shared build_lib_static
|
|
|
|
install_bin:
|
|
install -d $(BINDIR)
|
|
@for b in $(BINS); do \
|
|
echo "install -m 755 $$b $(BINDIR)"; \
|
|
install -m 755 $$b $(BINDIR); \
|
|
done
|
|
|
|
install_include:
|
|
install -d $(INCLUDEDIR)/jemalloc
|
|
@for h in $(C_HDRS); do \
|
|
echo "install -m 644 $$h $(INCLUDEDIR)/jemalloc"; \
|
|
install -m 644 $$h $(INCLUDEDIR)/jemalloc; \
|
|
done
|
|
|
|
install_lib_shared: $(DSOS)
|
|
install -d $(LIBDIR)
|
|
install -m 755 $(objroot)lib/$(LIBJEMALLOC).$(SOREV) $(LIBDIR)
|
|
ifneq ($(SOREV),$(SO))
|
|
ln -sf $(LIBJEMALLOC).$(SOREV) $(LIBDIR)/$(LIBJEMALLOC).$(SO)
|
|
endif
|
|
|
|
install_lib_static: $(STATIC_LIBS)
|
|
install -d $(LIBDIR)
|
|
@for l in $(STATIC_LIBS); do \
|
|
echo "install -m 755 $$l $(LIBDIR)"; \
|
|
install -m 755 $$l $(LIBDIR); \
|
|
done
|
|
|
|
install_lib_pc: $(PC)
|
|
install -d $(LIBDIR)/pkgconfig
|
|
@for l in $(PC); do \
|
|
echo "install -m 644 $$l $(LIBDIR)/pkgconfig"; \
|
|
install -m 644 $$l $(LIBDIR)/pkgconfig; \
|
|
done
|
|
|
|
install_lib: install_lib_shared install_lib_static install_lib_pc
|
|
|
|
install_doc_html:
|
|
install -d $(DATADIR)/doc/jemalloc$(install_suffix)
|
|
@for d in $(DOCS_HTML); do \
|
|
echo "install -m 644 $$d $(DATADIR)/doc/jemalloc$(install_suffix)"; \
|
|
install -m 644 $$d $(DATADIR)/doc/jemalloc$(install_suffix); \
|
|
done
|
|
|
|
install_doc_man:
|
|
install -d $(MANDIR)/man3
|
|
@for d in $(DOCS_MAN3); do \
|
|
echo "install -m 644 $$d $(MANDIR)/man3"; \
|
|
install -m 644 $$d $(MANDIR)/man3; \
|
|
done
|
|
|
|
install_doc: install_doc_html install_doc_man
|
|
|
|
install: install_bin install_include install_lib install_doc
|
|
|
|
tests_unit: $(TESTS_UNIT:$(srcroot)%.c=$(objroot)%$(EXE))
|
|
tests_integration: $(TESTS_INTEGRATION:$(srcroot)%.c=$(objroot)%$(EXE))
|
|
tests_stress: $(TESTS_STRESS:$(srcroot)%.c=$(objroot)%$(EXE))
|
|
tests: tests_unit tests_integration tests_stress
|
|
|
|
check_unit_dir:
|
|
@mkdir -p $(objroot)test/unit
|
|
check_integration_dir:
|
|
@mkdir -p $(objroot)test/integration
|
|
stress_dir:
|
|
@mkdir -p $(objroot)test/stress
|
|
check_dir: check_unit_dir check_integration_dir
|
|
|
|
check_unit: tests_unit check_unit_dir
|
|
$(MALLOC_CONF)="purge:ratio" $(SHELL) $(objroot)test/test.sh $(TESTS_UNIT:$(srcroot)%.c=$(objroot)%)
|
|
$(MALLOC_CONF)="purge:decay" $(SHELL) $(objroot)test/test.sh $(TESTS_UNIT:$(srcroot)%.c=$(objroot)%)
|
|
check_integration_prof: tests_integration check_integration_dir
|
|
ifeq ($(enable_prof), 1)
|
|
$(MALLOC_CONF)="prof:true" $(SHELL) $(objroot)test/test.sh $(TESTS_INTEGRATION:$(srcroot)%.c=$(objroot)%)
|
|
$(MALLOC_CONF)="prof:true,prof_active:false" $(SHELL) $(objroot)test/test.sh $(TESTS_INTEGRATION:$(srcroot)%.c=$(objroot)%)
|
|
endif
|
|
check_integration_decay: tests_integration check_integration_dir
|
|
$(MALLOC_CONF)="purge:decay,decay_time:-1" $(SHELL) $(objroot)test/test.sh $(TESTS_INTEGRATION:$(srcroot)%.c=$(objroot)%)
|
|
$(MALLOC_CONF)="purge:decay,decay_time:0" $(SHELL) $(objroot)test/test.sh $(TESTS_INTEGRATION:$(srcroot)%.c=$(objroot)%)
|
|
$(MALLOC_CONF)="purge:decay" $(SHELL) $(objroot)test/test.sh $(TESTS_INTEGRATION:$(srcroot)%.c=$(objroot)%)
|
|
check_integration: tests_integration check_integration_dir
|
|
$(SHELL) $(objroot)test/test.sh $(TESTS_INTEGRATION:$(srcroot)%.c=$(objroot)%)
|
|
stress: tests_stress stress_dir
|
|
$(SHELL) $(objroot)test/test.sh $(TESTS_STRESS:$(srcroot)%.c=$(objroot)%)
|
|
check: check_unit check_integration check_integration_decay check_integration_prof
|
|
|
|
ifeq ($(enable_code_coverage), 1)
|
|
coverage_unit: check_unit
|
|
$(SHELL) $(srcroot)coverage.sh $(srcroot)src jet $(C_JET_OBJS)
|
|
$(SHELL) $(srcroot)coverage.sh $(srcroot)test/src unit $(C_TESTLIB_UNIT_OBJS)
|
|
$(SHELL) $(srcroot)coverage.sh $(srcroot)test/unit unit $(TESTS_UNIT_OBJS)
|
|
|
|
coverage_integration: check_integration
|
|
$(SHELL) $(srcroot)coverage.sh $(srcroot)src pic $(C_PIC_OBJS)
|
|
$(SHELL) $(srcroot)coverage.sh $(srcroot)src integration $(C_UTIL_INTEGRATION_OBJS)
|
|
$(SHELL) $(srcroot)coverage.sh $(srcroot)test/src integration $(C_TESTLIB_INTEGRATION_OBJS)
|
|
$(SHELL) $(srcroot)coverage.sh $(srcroot)test/integration integration $(TESTS_INTEGRATION_OBJS)
|
|
|
|
coverage_stress: stress
|
|
$(SHELL) $(srcroot)coverage.sh $(srcroot)src pic $(C_PIC_OBJS)
|
|
$(SHELL) $(srcroot)coverage.sh $(srcroot)src jet $(C_JET_OBJS)
|
|
$(SHELL) $(srcroot)coverage.sh $(srcroot)test/src stress $(C_TESTLIB_STRESS_OBJS)
|
|
$(SHELL) $(srcroot)coverage.sh $(srcroot)test/stress stress $(TESTS_STRESS_OBJS)
|
|
|
|
coverage: check
|
|
$(SHELL) $(srcroot)coverage.sh $(srcroot)src pic $(C_PIC_OBJS)
|
|
$(SHELL) $(srcroot)coverage.sh $(srcroot)src jet $(C_JET_OBJS)
|
|
$(SHELL) $(srcroot)coverage.sh $(srcroot)src integration $(C_UTIL_INTEGRATION_OBJS)
|
|
$(SHELL) $(srcroot)coverage.sh $(srcroot)test/src unit $(C_TESTLIB_UNIT_OBJS)
|
|
$(SHELL) $(srcroot)coverage.sh $(srcroot)test/src integration $(C_TESTLIB_INTEGRATION_OBJS)
|
|
$(SHELL) $(srcroot)coverage.sh $(srcroot)test/src stress $(C_TESTLIB_STRESS_OBJS)
|
|
$(SHELL) $(srcroot)coverage.sh $(srcroot)test/unit unit $(TESTS_UNIT_OBJS) $(TESTS_UNIT_AUX_OBJS)
|
|
$(SHELL) $(srcroot)coverage.sh $(srcroot)test/integration integration $(TESTS_INTEGRATION_OBJS)
|
|
$(SHELL) $(srcroot)coverage.sh $(srcroot)test/stress integration $(TESTS_STRESS_OBJS)
|
|
endif
|
|
|
|
clean:
|
|
rm -f $(C_OBJS)
|
|
rm -f $(C_PIC_OBJS)
|
|
rm -f $(C_JET_OBJS)
|
|
rm -f $(C_TESTLIB_OBJS)
|
|
rm -f $(C_OBJS:%.$(O)=%.d)
|
|
rm -f $(C_OBJS:%.$(O)=%.gcda)
|
|
rm -f $(C_OBJS:%.$(O)=%.gcno)
|
|
rm -f $(C_PIC_OBJS:%.$(O)=%.d)
|
|
rm -f $(C_PIC_OBJS:%.$(O)=%.gcda)
|
|
rm -f $(C_PIC_OBJS:%.$(O)=%.gcno)
|
|
rm -f $(C_JET_OBJS:%.$(O)=%.d)
|
|
rm -f $(C_JET_OBJS:%.$(O)=%.gcda)
|
|
rm -f $(C_JET_OBJS:%.$(O)=%.gcno)
|
|
rm -f $(C_TESTLIB_OBJS:%.$(O)=%.d)
|
|
rm -f $(C_TESTLIB_OBJS:%.$(O)=%.gcda)
|
|
rm -f $(C_TESTLIB_OBJS:%.$(O)=%.gcno)
|
|
rm -f $(TESTS_OBJS:%.$(O)=%$(EXE))
|
|
rm -f $(TESTS_OBJS)
|
|
rm -f $(TESTS_OBJS:%.$(O)=%.d)
|
|
rm -f $(TESTS_OBJS:%.$(O)=%.gcda)
|
|
rm -f $(TESTS_OBJS:%.$(O)=%.gcno)
|
|
rm -f $(TESTS_OBJS:%.$(O)=%.out)
|
|
rm -f $(DSOS) $(STATIC_LIBS)
|
|
rm -f $(objroot)*.gcov.*
|
|
|
|
distclean: clean
|
|
rm -f $(objroot)bin/jemalloc-config
|
|
rm -f $(objroot)bin/jemalloc.sh
|
|
rm -f $(objroot)bin/jeprof
|
|
rm -f $(objroot)config.log
|
|
rm -f $(objroot)config.status
|
|
rm -f $(objroot)config.stamp
|
|
rm -f $(cfghdrs_out)
|
|
rm -f $(cfgoutputs_out)
|
|
|
|
relclean: distclean
|
|
rm -f $(objroot)configure
|
|
rm -f $(objroot)VERSION
|
|
rm -f $(DOCS_HTML)
|
|
rm -f $(DOCS_MAN3)
|
|
|
|
#===============================================================================
|
|
# Re-configuration rules.
|
|
|
|
ifeq ($(enable_autogen), 1)
|
|
$(srcroot)configure : $(srcroot)configure.ac
|
|
cd ./$(srcroot) && $(AUTOCONF)
|
|
|
|
$(objroot)config.status : $(srcroot)configure
|
|
./$(objroot)config.status --recheck
|
|
|
|
$(srcroot)config.stamp.in : $(srcroot)configure.ac
|
|
echo stamp > $(srcroot)config.stamp.in
|
|
|
|
$(objroot)config.stamp : $(cfgoutputs_in) $(cfghdrs_in) $(srcroot)configure
|
|
./$(objroot)config.status
|
|
@touch $@
|
|
|
|
# There must be some action in order for make to re-read Makefile when it is
|
|
# out of date.
|
|
$(cfgoutputs_out) $(cfghdrs_out) : $(objroot)config.stamp
|
|
@true
|
|
endif
|