blob: 01ed083cd769decb3ea5f809d961833a5c6b00ff [file] [log] [blame]
Jason Evansb7924f52009-06-23 19:01:18 -07001# Clear out all vpaths, then set just one (default vpath) for the main build
2# directory.
3vpath
4vpath % .
5
6# Clear the default suffixes, so that built-in rules are not used.
7.SUFFIXES :
8
9SHELL := /bin/sh
10
11CC := @CC@
12
13# Configuration parameters.
Jason Evanscfeccd32010-03-03 15:48:20 -080014DESTDIR =
Jason Evansa91f2102010-04-02 13:50:53 -070015BINDIR := $(DESTDIR)@BINDIR@
Jason Evanscfeccd32010-03-03 15:48:20 -080016INCLUDEDIR := $(DESTDIR)@INCLUDEDIR@
17LIBDIR := $(DESTDIR)@LIBDIR@
Jason Evansaee7fd22010-11-24 22:00:02 -080018DATADIR := $(DESTDIR)@DATADIR@
Jason Evanscfeccd32010-03-03 15:48:20 -080019MANDIR := $(DESTDIR)@MANDIR@
Jason Evansb7924f52009-06-23 19:01:18 -070020
21# Build parameters.
Jason Evans376b1522010-02-11 14:45:59 -080022CPPFLAGS := @CPPFLAGS@ -I@srcroot@include -I@objroot@include
Arun Sharmaaf5d6982011-02-15 14:13:38 -080023CFLAGS := @CFLAGS@
Jason Evansb7924f52009-06-23 19:01:18 -070024ifeq (macho, @abi@)
25CFLAGS += -dynamic
26endif
27LDFLAGS := @LDFLAGS@
28LIBS := @LIBS@
29RPATH_EXTRA := @RPATH_EXTRA@
Jason Evansf576c632011-11-01 22:27:41 -070030SO := @so@
Jason Evansb7924f52009-06-23 19:01:18 -070031ifeq (macho, @abi@)
Jason Evans2dbecf12010-09-05 10:35:13 -070032WL_SONAME := dylib_install_name
Jason Evansb7924f52009-06-23 19:01:18 -070033else
Jason Evans2dbecf12010-09-05 10:35:13 -070034WL_SONAME := soname
Jason Evansb7924f52009-06-23 19:01:18 -070035endif
Jason Evansf576c632011-11-01 22:27:41 -070036REV := @rev@
Jason Evans2dbecf12010-09-05 10:35:13 -070037ifeq (macho, @abi@)
38TEST_LIBRARY_PATH := DYLD_FALLBACK_LIBRARY_PATH=@objroot@lib
39else
40TEST_LIBRARY_PATH :=
41endif
Jason Evansb7924f52009-06-23 19:01:18 -070042
Jason Evansb0fd5012010-01-17 01:49:20 -080043# Lists of files.
Antony Dovgal2bd3cbc2011-10-13 09:33:33 +040044BINS := @srcroot@bin/pprof @objroot@bin/jemalloc.sh
Jason Evanscfeccd32010-03-03 15:48:20 -080045CHDRS := @objroot@include/jemalloc/jemalloc@install_suffix@.h \
46 @objroot@include/jemalloc/jemalloc_defs@install_suffix@.h
Jason Evans0657f122011-03-18 17:56:14 -070047CSRCS := @srcroot@src/jemalloc.c @srcroot@src/arena.c @srcroot@src/atomic.c \
48 @srcroot@src/base.c @srcroot@src/bitmap.c @srcroot@src/chunk.c \
49 @srcroot@src/chunk_dss.c @srcroot@src/chunk_mmap.c \
Jason Evans41626272012-02-13 10:56:17 -080050 @srcroot@src/ckh.c @srcroot@src/ctl.c @srcroot@src/extent.c \
51 @srcroot@src/hash.c @srcroot@src/huge.c @srcroot@src/mb.c \
52 @srcroot@src/mutex.c @srcroot@src/prof.c @srcroot@src/rtree.c \
Jason Evansd81e4bd2012-03-06 14:57:45 -080053 @srcroot@src/stats.c @srcroot@src/tcache.c @srcroot@src/util.c
Jason Evans2dbecf12010-09-05 10:35:13 -070054ifeq (macho, @abi@)
55CSRCS += @srcroot@src/zone.c
56endif
Jason Evans41626272012-02-13 10:56:17 -080057STATIC_LIBS := @objroot@lib/libjemalloc@install_suffix@.a
Jason Evans2dbecf12010-09-05 10:35:13 -070058DSOS := @objroot@lib/libjemalloc@install_suffix@.$(SO).$(REV) \
59 @objroot@lib/libjemalloc@install_suffix@.$(SO) \
Jason Evansb0fd5012010-01-17 01:49:20 -080060 @objroot@lib/libjemalloc@install_suffix@_pic.a
61MAN3 := @objroot@doc/jemalloc@install_suffix@.3
Jason Evansaee7fd22010-11-24 22:00:02 -080062DOCS_XML := @objroot@doc/jemalloc@install_suffix@.xml
63DOCS_HTML := $(DOCS_XML:@objroot@%.xml=@srcroot@%.html)
64DOCS_MAN3 := $(DOCS_XML:@objroot@%.xml=@srcroot@%.3)
65DOCS := $(DOCS_HTML) $(DOCS_MAN3)
Jason Evans0a0bbf62012-03-13 12:55:21 -070066CTESTS := @srcroot@test/aligned_alloc.c @srcroot@test/allocated.c \
67 @srcroot@test/bitmap.c @srcroot@test/mremap.c \
68 @srcroot@test/posix_memalign.c @srcroot@test/thread_arena.c
Jason Evans7e77eaf2012-03-02 17:47:37 -080069ifeq (@enable_experimental@, 1)
70CTESTS += @srcroot@test/allocm.c @srcroot@test/rallocm.c
71endif
Jason Evansb7924f52009-06-23 19:01:18 -070072
Jason Evansaee7fd22010-11-24 22:00:02 -080073.PHONY: all dist doc_html doc_man doc
74.PHONY: install_bin install_include install_lib
75.PHONY: install_html install_man install_doc install
76.PHONY: tests check clean distclean relclean
Jason Evansb7924f52009-06-23 19:01:18 -070077
Jason Evans9dcad2d2011-02-13 18:11:54 -080078.SECONDARY : $(CTESTS:@srcroot@%.c=@objroot@%.o)
79
Jason Evansb7924f52009-06-23 19:01:18 -070080# Default target.
Jason Evans7b398ac2012-03-02 16:38:37 -080081all: build
Jason Evansb7924f52009-06-23 19:01:18 -070082
Jason Evans7b398ac2012-03-02 16:38:37 -080083dist: build_doc
Jason Evansaee7fd22010-11-24 22:00:02 -080084
85@srcroot@doc/%.html : @objroot@doc/%.xml @srcroot@doc/stylesheet.xsl @objroot@doc/html.xsl
86 @XSLTPROC@ -o $@ @objroot@doc/html.xsl $<
87
88@srcroot@doc/%.3 : @objroot@doc/%.xml @srcroot@doc/stylesheet.xsl @objroot@doc/manpages.xsl
89 @XSLTPROC@ -o $@ @objroot@doc/manpages.xsl $<
90
Jason Evans7b398ac2012-03-02 16:38:37 -080091build_doc_html: $(DOCS_HTML)
92build_doc_man: $(DOCS_MAN3)
93build_doc: $(DOCS)
Jason Evansaee7fd22010-11-24 22:00:02 -080094
Jason Evanse476f8a2010-01-16 09:53:50 -080095#
96# Include generated dependency files.
97#
98-include $(CSRCS:@srcroot@%.c=@objroot@%.d)
Jason Evans1b177682011-03-15 09:40:07 -070099-include $(CSRCS:@srcroot@%.c=@objroot@%.pic.d)
Jason Evans0657f122011-03-18 17:56:14 -0700100-include $(CTESTS:@srcroot@%.c=@objroot@%.d)
Jason Evanse476f8a2010-01-16 09:53:50 -0800101
Jason Evanscc00a152009-06-25 18:06:48 -0700102@objroot@src/%.o: @srcroot@src/%.c
Jason Evans376b1522010-02-11 14:45:59 -0800103 @mkdir -p $(@D)
Jason Evans79a78692010-01-03 16:17:55 -0800104 $(CC) $(CFLAGS) -c $(CPPFLAGS) -o $@ $<
105 @$(SHELL) -ec "$(CC) -MM $(CPPFLAGS) $< | sed \"s/\($(subst /,\/,$(notdir $(basename $@)))\)\.o\([ :]*\)/$(subst /,\/,$(strip $(dir $@)))\1.o \2/g\" > $(@:%.o=%.d)"
Jason Evansb7924f52009-06-23 19:01:18 -0700106
Arun Sharmaaf5d6982011-02-15 14:13:38 -0800107@objroot@src/%.pic.o: @srcroot@src/%.c
108 @mkdir -p $(@D)
109 $(CC) $(CFLAGS) -fPIC -DPIC -c $(CPPFLAGS) -o $@ $<
Jason Evans1b177682011-03-15 09:40:07 -0700110 @$(SHELL) -ec "$(CC) -MM $(CPPFLAGS) $< | sed \"s/\($(subst /,\/,$(notdir $(basename $(basename $@))))\)\.o\([ :]*\)/$(subst /,\/,$(strip $(dir $@)))\1.pic.o \2/g\" > $(@:%.o=%.d)"
Arun Sharmaaf5d6982011-02-15 14:13:38 -0800111
Jason Evans2dbecf12010-09-05 10:35:13 -0700112%.$(SO) : %.$(SO).$(REV)
Jason Evansb7924f52009-06-23 19:01:18 -0700113 @mkdir -p $(@D)
Jason Evans0656ec02010-04-07 23:37:35 -0700114 ln -sf $(<F) $@
115
Arun Sharmaaf5d6982011-02-15 14:13:38 -0800116@objroot@lib/libjemalloc@install_suffix@.$(SO).$(REV) : $(CSRCS:@srcroot@%.c=@objroot@%.pic.o)
Jason Evans0656ec02010-04-07 23:37:35 -0700117 @mkdir -p $(@D)
Jason Evans2dbecf12010-09-05 10:35:13 -0700118 $(CC) -shared -Wl,-$(WL_SONAME),$(@F) $(RPATH_EXTRA:%=@RPATH@%) -o $@ $+ $(LDFLAGS) $(LIBS)
Jason Evans0656ec02010-04-07 23:37:35 -0700119
Arun Sharmaaf5d6982011-02-15 14:13:38 -0800120@objroot@lib/libjemalloc@install_suffix@_pic.a : $(CSRCS:@srcroot@%.c=@objroot@%.pic.o)
121 @mkdir -p $(@D)
122 ar crus $@ $+
123
124@objroot@lib/libjemalloc@install_suffix@.a : $(CSRCS:@srcroot@%.c=@objroot@%.o)
Jason Evans0656ec02010-04-07 23:37:35 -0700125 @mkdir -p $(@D)
126 ar crus $@ $+
Jason Evansb7924f52009-06-23 19:01:18 -0700127
Jason Evansb267d0f2010-08-13 15:42:29 -0700128@objroot@test/%.o: @srcroot@test/%.c
129 @mkdir -p $(@D)
Jason Evans9f3b0a72010-10-07 09:53:26 -0700130 $(CC) $(CFLAGS) -c $(CPPFLAGS) -I@objroot@test -o $@ $<
131 @$(SHELL) -ec "$(CC) -MM $(CPPFLAGS) -I@objroot@test $< | sed \"s/\($(subst /,\/,$(notdir $(basename $@)))\)\.o\([ :]*\)/$(subst /,\/,$(strip $(dir $@)))\1.o \2/g\" > $(@:%.o=%.d)"
Jason Evansb267d0f2010-08-13 15:42:29 -0700132
Jason Evans84c8eef2011-03-16 10:30:13 -0700133# Automatic dependency generation misses #include "*.c".
134@objroot@test/bitmap.o : @objroot@src/bitmap.o
135
Jason Evansb267d0f2010-08-13 15:42:29 -0700136@objroot@test/%: @objroot@test/%.o \
Jason Evans2dbecf12010-09-05 10:35:13 -0700137 @objroot@lib/libjemalloc@install_suffix@.$(SO)
Jason Evansb267d0f2010-08-13 15:42:29 -0700138 @mkdir -p $(@D)
Jason Evans2dbecf12010-09-05 10:35:13 -0700139ifneq (@RPATH@, )
Nathan McSween408ade62011-04-28 19:43:06 +0000140 $(CC) -o $@ $< @RPATH@@objroot@lib -L@objroot@lib -ljemalloc@install_suffix@ -lpthread
Jason Evans2dbecf12010-09-05 10:35:13 -0700141else
Nathan McSween408ade62011-04-28 19:43:06 +0000142 $(CC) -o $@ $< -L@objroot@lib -ljemalloc@install_suffix@ -lpthread
Jason Evans2dbecf12010-09-05 10:35:13 -0700143endif
Jason Evansb267d0f2010-08-13 15:42:29 -0700144
Jason Evans7b398ac2012-03-02 16:38:37 -0800145build_lib_shared: $(DSOS)
146build_lib_static: $(STATIC_LIBS)
147build: build_lib_shared build_lib_static
148
Jason Evansa91f2102010-04-02 13:50:53 -0700149install_bin:
150 install -d $(BINDIR)
151 @for b in $(BINS); do \
152 echo "install -m 755 $$b $(BINDIR)"; \
153 install -m 755 $$b $(BINDIR); \
154done
155
Jason Evanscfeccd32010-03-03 15:48:20 -0800156install_include:
Jason Evans376b1522010-02-11 14:45:59 -0800157 install -d $(INCLUDEDIR)/jemalloc
Jason Evansb7924f52009-06-23 19:01:18 -0700158 @for h in $(CHDRS); do \
Jason Evans376b1522010-02-11 14:45:59 -0800159 echo "install -m 644 $$h $(INCLUDEDIR)/jemalloc"; \
160 install -m 644 $$h $(INCLUDEDIR)/jemalloc; \
Jason Evansb7924f52009-06-23 19:01:18 -0700161done
Jason Evanscfeccd32010-03-03 15:48:20 -0800162
Jason Evans7b398ac2012-03-02 16:38:37 -0800163install_lib_shared: $(DSOS)
Jason Evansb7924f52009-06-23 19:01:18 -0700164 install -d $(LIBDIR)
Jason Evans2dbecf12010-09-05 10:35:13 -0700165 install -m 755 @objroot@lib/libjemalloc@install_suffix@.$(SO).$(REV) $(LIBDIR)
166 ln -sf libjemalloc@install_suffix@.$(SO).$(REV) $(LIBDIR)/libjemalloc@install_suffix@.$(SO)
Jason Evans7b398ac2012-03-02 16:38:37 -0800167
168install_lib_static: $(DSOS) $(STATIC_LIBS)
169 install -d $(LIBDIR)
Jason Evansb0fd5012010-01-17 01:49:20 -0800170 install -m 755 @objroot@lib/libjemalloc@install_suffix@_pic.a $(LIBDIR)
Arun Sharmaaf5d6982011-02-15 14:13:38 -0800171 install -m 755 @objroot@lib/libjemalloc@install_suffix@.a $(LIBDIR)
Jason Evanscfeccd32010-03-03 15:48:20 -0800172
Jason Evans7b398ac2012-03-02 16:38:37 -0800173install_lib: install_lib_shared install_lib_static
174
175install_doc_html:
Jason Evansaee7fd22010-11-24 22:00:02 -0800176 install -d $(DATADIR)/doc/jemalloc@install_suffix@
177 @for d in $(DOCS_HTML); do \
178 echo "install -m 644 $$d $(DATADIR)/doc/jemalloc@install_suffix@"; \
179 install -m 644 $$d $(DATADIR)/doc/jemalloc@install_suffix@; \
Jason Evansb7924f52009-06-23 19:01:18 -0700180done
181
Jason Evans7b398ac2012-03-02 16:38:37 -0800182install_doc_man:
Jason Evansaee7fd22010-11-24 22:00:02 -0800183 install -d $(MANDIR)/man3
184 @for d in $(DOCS_MAN3); do \
185 echo "install -m 644 $$d $(MANDIR)/man3"; \
186 install -m 644 $$d $(MANDIR)/man3; \
187done
188
Jason Evans7b398ac2012-03-02 16:38:37 -0800189install_doc: install_doc_html install_doc_man
Jason Evansaee7fd22010-11-24 22:00:02 -0800190
191install: install_bin install_include install_lib install_doc
Jason Evanscfeccd32010-03-03 15:48:20 -0800192
Jason Evansb267d0f2010-08-13 15:42:29 -0700193tests: $(CTESTS:@srcroot@%.c=@objroot@%)
194
195check: tests
196 @mkdir -p @objroot@test
197 @$(SHELL) -c 'total=0; \
198 failures=0; \
199 echo "========================================="; \
200 for t in $(CTESTS:@srcroot@%.c=@objroot@%); do \
201 total=`expr $$total + 1`; \
202 /bin/echo -n "$${t} ... "; \
Jason Evans2dbecf12010-09-05 10:35:13 -0700203 $(TEST_LIBRARY_PATH) $${t} @abs_srcroot@ @abs_objroot@ \
Jason Evansb267d0f2010-08-13 15:42:29 -0700204 > @objroot@$${t}.out 2>&1; \
205 if test -e "@srcroot@$${t}.exp"; then \
206 diff -u @srcroot@$${t}.exp \
207 @objroot@$${t}.out >/dev/null 2>&1; \
208 fail=$$?; \
209 if test "$${fail}" -eq "1" ; then \
210 failures=`expr $${failures} + 1`; \
211 echo "*** FAIL ***"; \
212 else \
213 echo "pass"; \
214 fi; \
215 else \
216 echo "*** FAIL *** (.exp file is missing)"; \
217 failures=`expr $${failures} + 1`; \
218 fi; \
219 done; \
220 echo "========================================="; \
221 echo "Failures: $${failures}/$${total}"'
Jason Evansb7924f52009-06-23 19:01:18 -0700222
223clean:
Jason Evans79a78692010-01-03 16:17:55 -0800224 rm -f $(CSRCS:@srcroot@%.c=@objroot@%.o)
Arun Sharmaaf5d6982011-02-15 14:13:38 -0800225 rm -f $(CSRCS:@srcroot@%.c=@objroot@%.pic.o)
Jason Evans79a78692010-01-03 16:17:55 -0800226 rm -f $(CSRCS:@srcroot@%.c=@objroot@%.d)
Arun Sharmaaf5d6982011-02-15 14:13:38 -0800227 rm -f $(CSRCS:@srcroot@%.c=@objroot@%.pic.d)
Jason Evansb267d0f2010-08-13 15:42:29 -0700228 rm -f $(CTESTS:@srcroot@%.c=@objroot@%)
229 rm -f $(CTESTS:@srcroot@%.c=@objroot@%.o)
230 rm -f $(CTESTS:@srcroot@%.c=@objroot@%.d)
231 rm -f $(CTESTS:@srcroot@%.c=@objroot@%.out)
Arun Sharmaaf5d6982011-02-15 14:13:38 -0800232 rm -f $(DSOS) $(STATIC_LIBS)
Jason Evansb7924f52009-06-23 19:01:18 -0700233
234distclean: clean
Jason Evans6d68ed62010-04-13 22:01:55 -0700235 rm -rf @objroot@autom4te.cache
Jason Evansb7924f52009-06-23 19:01:18 -0700236 rm -f @objroot@config.log
237 rm -f @objroot@config.status
Jason Evans2dbecf12010-09-05 10:35:13 -0700238 rm -f @objroot@config.stamp
Jason Evansb0fd5012010-01-17 01:49:20 -0800239 rm -f @cfghdrs_out@
240 rm -f @cfgoutputs_out@
Jason Evansb7924f52009-06-23 19:01:18 -0700241
242relclean: distclean
Jason Evansb7924f52009-06-23 19:01:18 -0700243 rm -f @objroot@configure
Jason Evansa40bc7a2010-03-02 13:01:16 -0800244 rm -f @srcroot@VERSION
Jason Evansaee7fd22010-11-24 22:00:02 -0800245 rm -f $(DOCS_HTML)
246 rm -f $(DOCS_MAN3)
Jason Evansb7924f52009-06-23 19:01:18 -0700247
248#===============================================================================
249# Re-configuration rules.
250
251ifeq (@enable_autogen@, 1)
252@srcroot@configure : @srcroot@configure.ac
253 cd ./@srcroot@ && @AUTOCONF@
254
255@objroot@config.status : @srcroot@configure
256 ./@objroot@config.status --recheck
257
Jason Evans0656ec02010-04-07 23:37:35 -0700258@srcroot@config.stamp.in : @srcroot@configure.ac
259 echo stamp > @srcroot@config.stamp.in
Jason Evansb7924f52009-06-23 19:01:18 -0700260
Jason Evans0656ec02010-04-07 23:37:35 -0700261@objroot@config.stamp : @cfgoutputs_in@ @cfghdrs_in@ @srcroot@configure
Jason Evansb7924f52009-06-23 19:01:18 -0700262 ./@objroot@config.status
263 @touch $@
264
265# There must be some action in order for make to re-read Makefile when it is
266# out of date.
Jason Evans0656ec02010-04-07 23:37:35 -0700267@cfgoutputs_out@ @cfghdrs_out@ : @objroot@config.stamp
Jason Evansb7924f52009-06-23 19:01:18 -0700268 @true
269endif