a91f210929
Fix divide-by-zero error in pprof. It is possible for sample contexts to currently have no associated objects, but the cumulative statistics are still useful, depending on how the user invokes pprof. Since jemalloc intentionally does not filter such contexts, take care not to divide by 0 when re-scaling for v2 heap sampling. Install pprof as part of 'make install'. Update pprof documentation.
154 lines
4.2 KiB
Makefile
154 lines
4.2 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@
|
|
MANDIR := $(DESTDIR)@MANDIR@
|
|
|
|
# Build parameters.
|
|
CPPFLAGS := @CPPFLAGS@ -I@srcroot@include -I@objroot@include
|
|
CFLAGS := @CFLAGS@ -fPIC -DPIC
|
|
ifeq (macho, @abi@)
|
|
CFLAGS += -dynamic
|
|
endif
|
|
LDFLAGS := @LDFLAGS@
|
|
LIBS := @LIBS@
|
|
RPATH_EXTRA := @RPATH_EXTRA@
|
|
ifeq (macho, @abi@)
|
|
SO := dylib
|
|
else
|
|
SO := so
|
|
endif
|
|
REV := 0
|
|
|
|
# Lists of files.
|
|
BINS := @srcroot@bin/pprof
|
|
CHDRS := @objroot@include/jemalloc/jemalloc@install_suffix@.h \
|
|
@objroot@include/jemalloc/jemalloc_defs@install_suffix@.h
|
|
CSRCS := @srcroot@src/jemalloc.c @srcroot@src/arena.c @srcroot@src/base.c \
|
|
@srcroot@src/chunk.c @srcroot@src/chunk_dss.c \
|
|
@srcroot@src/chunk_mmap.c @srcroot@src/chunk_swap.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/prof.c @srcroot@src/stats.c @srcroot@src/tcache.c
|
|
DSOS := @objroot@lib/libjemalloc@install_suffix@.so.$(REV) \
|
|
@objroot@lib/libjemalloc@install_suffix@.so \
|
|
@objroot@lib/libjemalloc@install_suffix@_pic.a
|
|
MAN3 := @objroot@doc/jemalloc@install_suffix@.3
|
|
|
|
.PHONY: all dist install check clean distclean relclean
|
|
|
|
# Default target.
|
|
all: $(DSOS)
|
|
|
|
#
|
|
# Include generated dependency files.
|
|
#
|
|
-include $(CSRCS:@srcroot@%.c=@objroot@%.d)
|
|
|
|
@objroot@src/%.o: @srcroot@src/%.c
|
|
@mkdir -p $(@D)
|
|
$(CC) $(CFLAGS) -c $(CPPFLAGS) -o $@ $<
|
|
@$(SHELL) -ec "$(CC) -MM $(CPPFLAGS) $< | sed \"s/\($(subst /,\/,$(notdir $(basename $@)))\)\.o\([ :]*\)/$(subst /,\/,$(strip $(dir $@)))\1.o \2/g\" > $(@:%.o=%.d)"
|
|
|
|
$(DSOS): $(CSRCS:@srcroot@%.c=@objroot@%.o)
|
|
@mkdir -p $(@D)
|
|
$(CC) -shared -Wl,-soname,libjemalloc@install_suffix@.so.$(REV) -o $@ $+ $(LDFLAGS) $(LIBS)
|
|
ln -sf libjemalloc@install_suffix@.so.$(REV) lib/libjemalloc@install_suffix@.so
|
|
ar crus @objroot@lib/libjemalloc@install_suffix@_pic.a $+
|
|
|
|
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 $(CHDRS); do \
|
|
echo "install -m 644 $$h $(INCLUDEDIR)/jemalloc"; \
|
|
install -m 644 $$h $(INCLUDEDIR)/jemalloc; \
|
|
done
|
|
|
|
install_lib: $(DSOS)
|
|
install -d $(LIBDIR)
|
|
install -m 755 @objroot@lib/libjemalloc@install_suffix@.so.$(REV) $(LIBDIR)
|
|
ln -sf libjemalloc@install_suffix@.so.$(REV) $(LIBDIR)/libjemalloc@install_suffix@.so
|
|
install -m 755 @objroot@lib/libjemalloc@install_suffix@_pic.a $(LIBDIR)
|
|
|
|
install_man:
|
|
install -d $(MANDIR)/man3
|
|
@for m in $(MAN3); do \
|
|
echo "install -m 644 $$m $(MANDIR)/man3"; \
|
|
install -m 644 $$m $(MANDIR)/man3; \
|
|
done
|
|
|
|
install: install_bin install_include install_lib install_man
|
|
|
|
check:
|
|
|
|
clean:
|
|
rm -f $(CSRCS:@srcroot@%.c=@objroot@%.o)
|
|
rm -f $(CSRCS:@srcroot@%.c=@objroot@%.d)
|
|
rm -f $(DSOS)
|
|
|
|
distclean: clean
|
|
rm -f @objroot@config.log
|
|
rm -f @objroot@config.status
|
|
rm -f @objroot@cfghdrs.stamp
|
|
rm -f @objroot@cfgoutputs.stamp
|
|
rm -f @cfghdrs_out@
|
|
rm -f @cfgoutputs_out@
|
|
|
|
relclean: distclean
|
|
rm -rf @objroot@autom4te.cache
|
|
rm -f @objroot@configure
|
|
rm -f @srcroot@VERSION
|
|
|
|
#===============================================================================
|
|
# Re-configuration rules.
|
|
|
|
ifeq (@enable_autogen@, 1)
|
|
@srcroot@configure : @srcroot@configure.ac
|
|
cd ./@srcroot@ && @AUTOCONF@
|
|
|
|
@objroot@config.status : @srcroot@configure
|
|
./@objroot@config.status --recheck
|
|
|
|
# cfghdrs rules.
|
|
@srcroot@cfghdrs.stamp.in : @srcroot@configure.ac
|
|
echo stamp > @srcroot@cfghdrs.stamp.in
|
|
|
|
@objroot@cfghdrs.stamp : @cfghdrs_in@ @srcroot@configure
|
|
./@objroot@config.status
|
|
@touch $@
|
|
|
|
@cfghdrs@ : @objroot@cfghdrs.stamp
|
|
|
|
# cfgoutputs rules.
|
|
@srcroot@cfgoutputs.stamp.in : @srcroot@configure.ac
|
|
echo stamp > @srcroot@cfgoutputs.stamp.in
|
|
|
|
@objroot@cfgoutputs.stamp : @cfgoutputs_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@ : @objroot@cfgoutputs.stamp
|
|
@true
|
|
endif
|