blob: 02d4f5367f92e6eb4fbb1008ae87bb9e001777c4 [file] [log] [blame]
Jason Evansb7924f52009-06-23 19:01:18 -07001dnl Process this file with autoconf to produce a configure script.
2AC_INIT([Makefile.in])
3
Jason Evansf3340ca2009-06-30 16:17:05 -07004dnl ============================================================================
5dnl Custom macro definitions.
6
7dnl JE_CFLAGS_APPEND(cflag)
8AC_DEFUN([JE_CFLAGS_APPEND],
9[
10AC_MSG_CHECKING([whether compiler supports $1])
11TCFLAGS="${CFLAGS}"
12if test "x${CFLAGS}" = "x" ; then
13 CFLAGS="$1"
14else
15 CFLAGS="${CFLAGS} $1"
16fi
Jason Evans6684cac2012-03-05 12:15:36 -080017AC_COMPILE_IFELSE([AC_LANG_PROGRAM(
Jason Evansf3340ca2009-06-30 16:17:05 -070018[[
19]], [[
20 return 0;
21]])],
22 AC_MSG_RESULT([yes]),
23 AC_MSG_RESULT([no])
24 [CFLAGS="${TCFLAGS}"]
25)
26])
27
28dnl JE_COMPILABLE(label, hcode, mcode, rvar)
Jason Evans4c2faa82012-03-13 11:09:23 -070029dnl
Jason Evansf3e139a2012-03-19 09:54:20 -070030dnl Use AC_LINK_IFELSE() rather than AC_COMPILE_IFELSE() so that linker errors
Jason Evans4c2faa82012-03-13 11:09:23 -070031dnl cause failure.
Jason Evansf3340ca2009-06-30 16:17:05 -070032AC_DEFUN([JE_COMPILABLE],
33[
Jason Evans6684cac2012-03-05 12:15:36 -080034AC_CACHE_CHECK([whether $1 is compilable],
35 [$4],
Jason Evansf3e139a2012-03-19 09:54:20 -070036 [AC_LINK_IFELSE([AC_LANG_PROGRAM([$2],
37 [$3])],
38 [$4=yes],
39 [$4=no])])
Jason Evansf3340ca2009-06-30 16:17:05 -070040])
41
42dnl ============================================================================
43
Jason Evansf576c632011-11-01 22:27:41 -070044dnl Library revision.
45rev=1
46AC_SUBST([rev])
47
Jason Evansb7924f52009-06-23 19:01:18 -070048srcroot=$srcdir
49if test "x${srcroot}" = "x." ; then
50 srcroot=""
51else
52 srcroot="${srcroot}/"
53fi
54AC_SUBST([srcroot])
55abs_srcroot="`cd \"${srcdir}\"; pwd`/"
56AC_SUBST([abs_srcroot])
57
58objroot=""
59AC_SUBST([objroot])
60abs_objroot="`pwd`/"
61AC_SUBST([abs_objroot])
62
63dnl Munge install path variables.
64if test "x$prefix" = "xNONE" ; then
65 prefix="/usr/local"
66fi
67if test "x$exec_prefix" = "xNONE" ; then
68 exec_prefix=$prefix
69fi
70PREFIX=$prefix
71AC_SUBST([PREFIX])
72BINDIR=`eval echo $bindir`
73BINDIR=`eval echo $BINDIR`
74AC_SUBST([BINDIR])
75INCLUDEDIR=`eval echo $includedir`
76INCLUDEDIR=`eval echo $INCLUDEDIR`
77AC_SUBST([INCLUDEDIR])
78LIBDIR=`eval echo $libdir`
79LIBDIR=`eval echo $LIBDIR`
80AC_SUBST([LIBDIR])
81DATADIR=`eval echo $datadir`
82DATADIR=`eval echo $DATADIR`
83AC_SUBST([DATADIR])
84MANDIR=`eval echo $mandir`
85MANDIR=`eval echo $MANDIR`
86AC_SUBST([MANDIR])
87
Jason Evansaee7fd22010-11-24 22:00:02 -080088dnl Support for building documentation.
89AC_PATH_PROG([XSLTPROC], [xsltproc], , [$PATH])
Jason Evans7091b412012-03-19 09:36:44 -070090if test -d "/usr/share/xml/docbook/stylesheet/docbook-xsl" ; then
91 DEFAULT_XSLROOT="/usr/share/xml/docbook/stylesheet/docbook-xsl"
92elif test -d "/usr/share/sgml/docbook/xsl-stylesheets" ; then
93 DEFAULT_XSLROOT="/usr/share/sgml/docbook/xsl-stylesheets"
94else
95 dnl Documentation building will fail if this default gets used.
96 DEFAULT_XSLROOT=""
97fi
Jason Evansaee7fd22010-11-24 22:00:02 -080098AC_ARG_WITH([xslroot],
Jason Evans7091b412012-03-19 09:36:44 -070099 [AS_HELP_STRING([--with-xslroot=<path>], [XSL stylesheet root path])], [
Jason Evansaee7fd22010-11-24 22:00:02 -0800100if test "x$with_xslroot" = "xno" ; then
Jason Evans7091b412012-03-19 09:36:44 -0700101 XSLROOT="${DEFAULT_XSLROOT}"
Jason Evansaee7fd22010-11-24 22:00:02 -0800102else
103 XSLROOT="${with_xslroot}"
Jason Evans7091b412012-03-19 09:36:44 -0700104fi
105],
106 XSLROOT="${DEFAULT_XSLROOT}"
Jason Evansaee7fd22010-11-24 22:00:02 -0800107)
108AC_SUBST([XSLROOT])
109
Jason Evansf3340ca2009-06-30 16:17:05 -0700110dnl If CFLAGS isn't defined, set CFLAGS to something reasonable. Otherwise,
111dnl just prevent autoconf from molesting CFLAGS.
Jason Evansb7924f52009-06-23 19:01:18 -0700112CFLAGS=$CFLAGS
113AC_PROG_CC
114if test "x$CFLAGS" = "x" ; then
115 no_CFLAGS="yes"
Jason Evanscfeccd32010-03-03 15:48:20 -0800116 if test "x$GCC" = "xyes" ; then
117 JE_CFLAGS_APPEND([-std=gnu99])
118 JE_CFLAGS_APPEND([-Wall])
119 JE_CFLAGS_APPEND([-pipe])
120 JE_CFLAGS_APPEND([-g3])
121 fi
Jason Evansb7924f52009-06-23 19:01:18 -0700122fi
123dnl Append EXTRA_CFLAGS to CFLAGS, if defined.
124if test "x$EXTRA_CFLAGS" != "x" ; then
Jason Evansf3340ca2009-06-30 16:17:05 -0700125 JE_CFLAGS_APPEND([$EXTRA_CFLAGS])
Jason Evansb7924f52009-06-23 19:01:18 -0700126fi
127AC_PROG_CPP
128
Jason Evansb7924f52009-06-23 19:01:18 -0700129AC_CHECK_SIZEOF([void *])
130if test "x${ac_cv_sizeof_void_p}" = "x8" ; then
Jason Evans94ad2b52009-12-29 00:09:15 -0800131 LG_SIZEOF_PTR=3
Jason Evansb7924f52009-06-23 19:01:18 -0700132elif test "x${ac_cv_sizeof_void_p}" = "x4" ; then
Jason Evans94ad2b52009-12-29 00:09:15 -0800133 LG_SIZEOF_PTR=2
Jason Evansb7924f52009-06-23 19:01:18 -0700134else
135 AC_MSG_ERROR([Unsupported pointer size: ${ac_cv_sizeof_void_p}])
136fi
Jason Evans94ad2b52009-12-29 00:09:15 -0800137AC_DEFINE_UNQUOTED([LG_SIZEOF_PTR], [$LG_SIZEOF_PTR])
138
139AC_CHECK_SIZEOF([int])
140if test "x${ac_cv_sizeof_int}" = "x8" ; then
141 LG_SIZEOF_INT=3
142elif test "x${ac_cv_sizeof_int}" = "x4" ; then
143 LG_SIZEOF_INT=2
144else
145 AC_MSG_ERROR([Unsupported int size: ${ac_cv_sizeof_int}])
146fi
147AC_DEFINE_UNQUOTED([LG_SIZEOF_INT], [$LG_SIZEOF_INT])
Jason Evansb7924f52009-06-23 19:01:18 -0700148
Jason Evans84c8eef2011-03-16 10:30:13 -0700149AC_CHECK_SIZEOF([long])
150if test "x${ac_cv_sizeof_long}" = "x8" ; then
151 LG_SIZEOF_LONG=3
152elif test "x${ac_cv_sizeof_long}" = "x4" ; then
153 LG_SIZEOF_LONG=2
154else
155 AC_MSG_ERROR([Unsupported long size: ${ac_cv_sizeof_long}])
156fi
157AC_DEFINE_UNQUOTED([LG_SIZEOF_LONG], [$LG_SIZEOF_LONG])
158
Jason Evansd81e4bd2012-03-06 14:57:45 -0800159AC_CHECK_SIZEOF([intmax_t])
160if test "x${ac_cv_sizeof_intmax_t}" = "x16" ; then
161 LG_SIZEOF_INTMAX_T=4
162elif test "x${ac_cv_sizeof_intmax_t}" = "x8" ; then
163 LG_SIZEOF_INTMAX_T=3
164elif test "x${ac_cv_sizeof_intmax_t}" = "x4" ; then
165 LG_SIZEOF_INTMAX_T=2
166else
167 AC_MSG_ERROR([Unsupported intmax_t size: ${ac_cv_sizeof_long}])
168fi
169AC_DEFINE_UNQUOTED([LG_SIZEOF_INTMAX_T], [$LG_SIZEOF_INTMAX_T])
170
Jason Evansb7924f52009-06-23 19:01:18 -0700171AC_CANONICAL_HOST
172dnl CPU-specific settings.
173CPU_SPINWAIT=""
174case "${host_cpu}" in
175 i[[345]]86)
176 ;;
177 i686)
Jason Evansf3340ca2009-06-30 16:17:05 -0700178 JE_COMPILABLE([__asm__], [], [[__asm__ volatile("pause"); return 0;]],
Jason Evans6684cac2012-03-05 12:15:36 -0800179 [je_cv_asm])
180 if test "x${je_cv_asm}" = "xyes" ; then
Jason Evansf3340ca2009-06-30 16:17:05 -0700181 CPU_SPINWAIT='__asm__ volatile("pause")'
182 fi
Jason Evansb7924f52009-06-23 19:01:18 -0700183 ;;
184 x86_64)
Jason Evansf3340ca2009-06-30 16:17:05 -0700185 JE_COMPILABLE([__asm__ syntax], [],
Jason Evans6684cac2012-03-05 12:15:36 -0800186 [[__asm__ volatile("pause"); return 0;]], [je_cv_asm])
187 if test "x${je_cv_asm}" = "xyes" ; then
Jason Evansf3340ca2009-06-30 16:17:05 -0700188 CPU_SPINWAIT='__asm__ volatile("pause")'
189 fi
Jason Evansb7924f52009-06-23 19:01:18 -0700190 ;;
191 *)
192 ;;
193esac
194AC_DEFINE_UNQUOTED([CPU_SPINWAIT], [$CPU_SPINWAIT])
195
Antony Dovgal2bd3cbc2011-10-13 09:33:33 +0400196LD_PRELOAD_VAR="LD_PRELOAD"
Jason Evansf576c632011-11-01 22:27:41 -0700197so="so"
Antony Dovgal2bd3cbc2011-10-13 09:33:33 +0400198
Jason Evans7372b152012-02-10 20:22:09 -0800199dnl Heap profiling uses the log(3) function.
200LIBS="$LIBS -lm"
201
Jason Evansb7924f52009-06-23 19:01:18 -0700202dnl Platform-specific settings. abi and RPATH can probably be determined
203dnl programmatically, but doing so is error-prone, which makes it generally
204dnl not worth the trouble.
205dnl
206dnl Define cpp macros in CPPFLAGS, rather than doing AC_DEFINE(macro), since the
207dnl definitions need to be seen before any headers are included, which is a pain
208dnl to make happen otherwise.
209case "${host}" in
210 *-*-darwin*)
211 CFLAGS="$CFLAGS -fno-common -no-cpp-precomp"
212 abi="macho"
Jason Evanse24c7af2012-03-19 10:21:17 -0700213 AC_DEFINE([JEMALLOC_PURGE_MADVISE_FREE], [ ])
Jason Evansb7924f52009-06-23 19:01:18 -0700214 RPATH=""
Antony Dovgal2bd3cbc2011-10-13 09:33:33 +0400215 LD_PRELOAD_VAR="DYLD_INSERT_LIBRARIES"
Jason Evansf576c632011-11-01 22:27:41 -0700216 so="dylib"
Jason Evansb7924f52009-06-23 19:01:18 -0700217 ;;
218 *-*-freebsd*)
219 CFLAGS="$CFLAGS"
220 abi="elf"
Jason Evanse24c7af2012-03-19 10:21:17 -0700221 AC_DEFINE([JEMALLOC_PURGE_MADVISE_FREE], [ ])
Jason Evansb7924f52009-06-23 19:01:18 -0700222 RPATH="-Wl,-rpath,"
223 ;;
224 *-*-linux*)
225 CFLAGS="$CFLAGS"
226 CPPFLAGS="$CPPFLAGS -D_GNU_SOURCE"
227 abi="elf"
Jason Evanse24c7af2012-03-19 10:21:17 -0700228 AC_DEFINE([JEMALLOC_PURGE_MADVISE_DONTNEED], [ ])
Jason Evansb7924f52009-06-23 19:01:18 -0700229 RPATH="-Wl,-rpath,"
230 ;;
231 *-*-netbsd*)
232 AC_MSG_CHECKING([ABI])
233 AC_COMPILE_IFELSE([AC_LANG_PROGRAM(
234[[#ifdef __ELF__
235/* ELF */
236#else
237#error aout
238#endif
239]])],
240 [CFLAGS="$CFLAGS"; abi="elf"],
241 [abi="aout"])
242 AC_MSG_RESULT([$abi])
Jason Evanse24c7af2012-03-19 10:21:17 -0700243 AC_DEFINE([JEMALLOC_PURGE_MADVISE_FREE], [ ])
Jason Evansb7924f52009-06-23 19:01:18 -0700244 RPATH="-Wl,-rpath,"
245 ;;
246 *-*-solaris2*)
247 CFLAGS="$CFLAGS"
248 abi="elf"
249 RPATH="-Wl,-R,"
250 dnl Solaris needs this for sigwait().
251 CPPFLAGS="$CPPFLAGS -D_POSIX_PTHREAD_SEMANTICS"
252 LIBS="$LIBS -lposix4 -lsocket -lnsl"
253 ;;
Antony Dovgal2bd3cbc2011-10-13 09:33:33 +0400254 *-ibm-aix*)
255 if "$LG_SIZEOF_PTR" = "8"; then
256 dnl 64bit AIX
257 LD_PRELOAD_VAR="LDR_PRELOAD64"
258 else
259 dnl 32bit AIX
260 LD_PRELOAD_VAR="LDR_PRELOAD"
261 fi
262 abi="xcoff"
263 RPATH="-Wl,-rpath,"
264 ;;
Jason Evansb7924f52009-06-23 19:01:18 -0700265 *)
266 AC_MSG_RESULT([Unsupported operating system: ${host}])
267 abi="elf"
268 RPATH="-Wl,-rpath,"
269 ;;
270esac
271AC_SUBST([abi])
272AC_SUBST([RPATH])
Antony Dovgal2bd3cbc2011-10-13 09:33:33 +0400273AC_SUBST([LD_PRELOAD_VAR])
Jason Evansf576c632011-11-01 22:27:41 -0700274AC_SUBST([so])
Jason Evansb7924f52009-06-23 19:01:18 -0700275
Jason Evansfa5d2452011-03-15 10:25:59 -0700276JE_COMPILABLE([__attribute__ syntax],
277 [static __attribute__((unused)) void foo(void){}],
278 [],
Jason Evans6684cac2012-03-05 12:15:36 -0800279 [je_cv_attribute])
280if test "x${je_cv_attribute}" = "xyes" ; then
Jason Evansfa5d2452011-03-15 10:25:59 -0700281 AC_DEFINE([JEMALLOC_HAVE_ATTR], [ ])
282 if test "x${GCC}" = "xyes" -a "x${abi}" = "xelf"; then
283 JE_CFLAGS_APPEND([-fvisibility=hidden])
284 fi
285fi
286
Jason Evanscfdc8cf2010-11-30 16:50:58 -0800287JE_COMPILABLE([mremap(...MREMAP_FIXED...)], [
288#define _GNU_SOURCE
289#include <sys/mman.h>
290], [
291void *p = mremap((void *)0, 0, 0, MREMAP_MAYMOVE|MREMAP_FIXED, (void *)0);
Jason Evans6684cac2012-03-05 12:15:36 -0800292], [je_cv_mremap_fixed])
293if test "x${je_cv_mremap_fixed}" = "xyes" ; then
Jason Evanse24c7af2012-03-19 10:21:17 -0700294 AC_DEFINE([JEMALLOC_MREMAP_FIXED], [ ])
Jason Evanscfdc8cf2010-11-30 16:50:58 -0800295fi
296
Jason Evansb7924f52009-06-23 19:01:18 -0700297dnl Support optional additions to rpath.
298AC_ARG_WITH([rpath],
Jason Evans90895cf2009-12-29 00:09:15 -0800299 [AS_HELP_STRING([--with-rpath=<rpath>], [Colon-separated rpath (ELF systems only)])],
Jason Evansb7924f52009-06-23 19:01:18 -0700300if test "x$with_rpath" = "xno" ; then
301 RPATH_EXTRA=
302else
303 RPATH_EXTRA="`echo $with_rpath | tr \":\" \" \"`"
304fi,
305 RPATH_EXTRA=
306)
307AC_SUBST([RPATH_EXTRA])
308
309dnl Disable rules that do automatic regeneration of configure output by default.
310AC_ARG_ENABLE([autogen],
Jason Evans78d815c2010-01-17 14:06:20 -0800311 [AS_HELP_STRING([--enable-autogen], [Automatically regenerate configure output])],
Jason Evansb7924f52009-06-23 19:01:18 -0700312if test "x$enable_autogen" = "xno" ; then
313 enable_autogen="0"
314else
315 enable_autogen="1"
316fi
317,
318enable_autogen="0"
319)
320AC_SUBST([enable_autogen])
321
322AC_PROG_INSTALL
323AC_PROG_RANLIB
324AC_PATH_PROG([AR], [ar], , [$PATH])
325AC_PATH_PROG([LD], [ld], , [$PATH])
326AC_PATH_PROG([AUTOCONF], [autoconf], , [$PATH])
327
Jason Evans0a0bbf62012-03-13 12:55:21 -0700328public_syms="malloc_conf malloc_message malloc calloc posix_memalign aligned_alloc realloc free malloc_usable_size malloc_stats_print mallctl mallctlnametomib mallctlbymib"
Jason Evans7e77eaf2012-03-02 17:47:37 -0800329
330dnl Check for allocator-related functions that should be wrapped.
331AC_CHECK_FUNC([memalign],
Jason Evanse24c7af2012-03-19 10:21:17 -0700332 [AC_DEFINE([JEMALLOC_OVERRIDE_MEMALIGN], [ ])
Jason Evans7e77eaf2012-03-02 17:47:37 -0800333 public_syms="${public_syms} memalign"])
334AC_CHECK_FUNC([valloc],
Jason Evanse24c7af2012-03-19 10:21:17 -0700335 [AC_DEFINE([JEMALLOC_OVERRIDE_VALLOC], [ ])
Jason Evans7e77eaf2012-03-02 17:47:37 -0800336 public_syms="${public_syms} valloc"])
337
338dnl Support the experimental API by default.
339AC_ARG_ENABLE([experimental],
340 [AS_HELP_STRING([--disable-experimental],
341 [Disable support for the experimental API])],
342[if test "x$enable_experimental" = "xno" ; then
343 enable_experimental="0"
344else
345 enable_experimental="1"
346fi
347],
348[enable_experimental="1"]
349)
350if test "x$enable_experimental" = "x1" ; then
351 AC_DEFINE([JEMALLOC_EXPERIMENTAL], [ ])
352 public_syms="${public_syms} allocm dallocm nallocm rallocm sallocm"
353fi
354AC_SUBST([enable_experimental])
355
Jason Evans0a5489e2012-03-01 17:19:20 -0800356dnl Perform no name mangling by default.
357AC_ARG_WITH([mangling],
358 [AS_HELP_STRING([--with-mangling=<map>], [Mangle symbols in <map>])],
359 [mangling_map="$with_mangling"], [mangling_map=""])
360for nm in `echo ${mangling_map} |tr ',' ' '` ; do
Jason Evans08fc3b22012-03-12 15:07:53 -0700361 k="`echo ${nm} |tr ':' ' ' |awk '{print $1}'`"
362 n="je_${k}"
Jason Evans0a5489e2012-03-01 17:19:20 -0800363 m=`echo ${nm} |tr ':' ' ' |awk '{print $2}'`
364 AC_DEFINE_UNQUOTED([${n}], [${m}])
Jason Evans08fc3b22012-03-12 15:07:53 -0700365 dnl Remove key from public_syms so that it isn't redefined later.
366 public_syms=`for sym in ${public_syms}; do echo "${sym}"; done |grep -v "^${k}\$" |tr '\n' ' '`
Jason Evans0a5489e2012-03-01 17:19:20 -0800367done
368
Jason Evans90895cf2009-12-29 00:09:15 -0800369dnl Do not prefix public APIs by default.
370AC_ARG_WITH([jemalloc_prefix],
371 [AS_HELP_STRING([--with-jemalloc-prefix=<prefix>], [Prefix to prepend to all public APIs])],
Jason Evansb0fd5012010-01-17 01:49:20 -0800372 [JEMALLOC_PREFIX="$with_jemalloc_prefix"],
Jason Evans2dbecf12010-09-05 10:35:13 -0700373 [if test "x$abi" != "xmacho" ; then
374 JEMALLOC_PREFIX=""
375else
376 JEMALLOC_PREFIX="je_"
377fi]
Jason Evans90895cf2009-12-29 00:09:15 -0800378)
379if test "x$JEMALLOC_PREFIX" != "x" ; then
Jason Evanse7339702010-10-23 18:37:06 -0700380 JEMALLOC_CPREFIX=`echo ${JEMALLOC_PREFIX} | tr "a-z" "A-Z"`
381 AC_DEFINE_UNQUOTED([JEMALLOC_PREFIX], ["$JEMALLOC_PREFIX"])
382 AC_DEFINE_UNQUOTED([JEMALLOC_CPREFIX], ["$JEMALLOC_CPREFIX"])
Jason Evans90895cf2009-12-29 00:09:15 -0800383fi
Jason Evans0a5489e2012-03-01 17:19:20 -0800384dnl Generate macros to rename public symbols. All public symbols are prefixed
385dnl with je_ in the source code, so these macro definitions are needed even if
386dnl --with-jemalloc-prefix wasn't specified.
Jason Evans7e77eaf2012-03-02 17:47:37 -0800387for stem in ${public_syms}; do
Jason Evans0a5489e2012-03-01 17:19:20 -0800388 n="je_${stem}"
389 m="${JEMALLOC_PREFIX}${stem}"
390 AC_DEFINE_UNQUOTED([${n}], [${m}])
391done
Jason Evans90895cf2009-12-29 00:09:15 -0800392
Jason Evans746e77a2011-07-30 16:40:52 -0700393dnl Do not mangle library-private APIs by default.
394AC_ARG_WITH([private_namespace],
395 [AS_HELP_STRING([--with-private-namespace=<prefix>], [Prefix to prepend to all library-private APIs])],
396 [JEMALLOC_PRIVATE_NAMESPACE="$with_private_namespace"],
397 [JEMALLOC_PRIVATE_NAMESPACE=""]
398)
399AC_DEFINE_UNQUOTED([JEMALLOC_PRIVATE_NAMESPACE], ["$JEMALLOC_PRIVATE_NAMESPACE"])
400if test "x$JEMALLOC_PRIVATE_NAMESPACE" != "x" ; then
401 AC_DEFINE_UNQUOTED([JEMALLOC_N(string_that_no_one_should_want_to_use_as_a_jemalloc_private_namespace_prefix)], [${JEMALLOC_PRIVATE_NAMESPACE}##string_that_no_one_should_want_to_use_as_a_jemalloc_private_namespace_prefix])
402else
403 AC_DEFINE_UNQUOTED([JEMALLOC_N(string_that_no_one_should_want_to_use_as_a_jemalloc_private_namespace_prefix)], [string_that_no_one_should_want_to_use_as_a_jemalloc_private_namespace_prefix])
404fi
405
Jason Evansb0fd5012010-01-17 01:49:20 -0800406dnl Do not add suffix to installed files by default.
407AC_ARG_WITH([install_suffix],
408 [AS_HELP_STRING([--with-install-suffix=<suffix>], [Suffix to append to all installed files])],
409 [INSTALL_SUFFIX="$with_install_suffix"],
410 [INSTALL_SUFFIX=]
411)
412install_suffix="$INSTALL_SUFFIX"
413AC_SUBST([install_suffix])
414
Jason Evansaee7fd22010-11-24 22:00:02 -0800415cfgoutputs_in="${srcroot}Makefile.in"
416cfgoutputs_in="${cfgoutputs_in} ${srcroot}doc/html.xsl.in"
417cfgoutputs_in="${cfgoutputs_in} ${srcroot}doc/manpages.xsl.in"
418cfgoutputs_in="${cfgoutputs_in} ${srcroot}doc/jemalloc.xml.in"
Jason Evans0656ec02010-04-07 23:37:35 -0700419cfgoutputs_in="${cfgoutputs_in} ${srcroot}include/jemalloc/jemalloc.h.in"
420cfgoutputs_in="${cfgoutputs_in} ${srcroot}include/jemalloc/internal/jemalloc_internal.h.in"
Jason Evans9f3b0a72010-10-07 09:53:26 -0700421cfgoutputs_in="${cfgoutputs_in} ${srcroot}test/jemalloc_test.h.in"
Jason Evansb0fd5012010-01-17 01:49:20 -0800422
Jason Evansaee7fd22010-11-24 22:00:02 -0800423cfgoutputs_out="Makefile"
424cfgoutputs_out="${cfgoutputs_out} doc/html.xsl"
425cfgoutputs_out="${cfgoutputs_out} doc/manpages.xsl"
426cfgoutputs_out="${cfgoutputs_out} doc/jemalloc${install_suffix}.xml"
Jason Evans376b1522010-02-11 14:45:59 -0800427cfgoutputs_out="${cfgoutputs_out} include/jemalloc/jemalloc${install_suffix}.h"
428cfgoutputs_out="${cfgoutputs_out} include/jemalloc/internal/jemalloc_internal.h"
Jason Evans9f3b0a72010-10-07 09:53:26 -0700429cfgoutputs_out="${cfgoutputs_out} test/jemalloc_test.h"
Jason Evansb0fd5012010-01-17 01:49:20 -0800430
Jason Evansaee7fd22010-11-24 22:00:02 -0800431cfgoutputs_tup="Makefile"
432cfgoutputs_tup="${cfgoutputs_tup} doc/html.xsl:doc/html.xsl.in"
433cfgoutputs_tup="${cfgoutputs_tup} doc/manpages.xsl:doc/manpages.xsl.in"
434cfgoutputs_tup="${cfgoutputs_tup} doc/jemalloc${install_suffix}.xml:doc/jemalloc.xml.in"
Jason Evans376b1522010-02-11 14:45:59 -0800435cfgoutputs_tup="${cfgoutputs_tup} include/jemalloc/jemalloc${install_suffix}.h:include/jemalloc/jemalloc.h.in"
436cfgoutputs_tup="${cfgoutputs_tup} include/jemalloc/internal/jemalloc_internal.h"
Jason Evans9f3b0a72010-10-07 09:53:26 -0700437cfgoutputs_tup="${cfgoutputs_tup} test/jemalloc_test.h:test/jemalloc_test.h.in"
Jason Evansb0fd5012010-01-17 01:49:20 -0800438
Jason Evans0656ec02010-04-07 23:37:35 -0700439cfghdrs_in="${srcroot}include/jemalloc/jemalloc_defs.h.in"
Jason Evansb1726102012-02-28 16:50:47 -0800440cfghdrs_in="${cfghdrs_in} ${srcroot}include/jemalloc/internal/size_classes.sh"
Jason Evansb0fd5012010-01-17 01:49:20 -0800441
Jason Evans376b1522010-02-11 14:45:59 -0800442cfghdrs_out="include/jemalloc/jemalloc_defs${install_suffix}.h"
Jason Evansb1726102012-02-28 16:50:47 -0800443cfghdrs_out="${cfghdrs_out} include/jemalloc/internal/size_classes.h"
Jason Evansb0fd5012010-01-17 01:49:20 -0800444
Jason Evans376b1522010-02-11 14:45:59 -0800445cfghdrs_tup="include/jemalloc/jemalloc_defs${install_suffix}.h:include/jemalloc/jemalloc_defs.h.in"
Jason Evansb0fd5012010-01-17 01:49:20 -0800446
Jason Evans355b4382010-09-20 19:20:48 -0700447dnl Do not silence irrelevant compiler warnings by default, since enabling this
448dnl option incurs a performance penalty.
449AC_ARG_ENABLE([cc-silence],
450 [AS_HELP_STRING([--enable-cc-silence],
451 [Silence irrelevant compiler warnings])],
452[if test "x$enable_cc_silence" = "xno" ; then
453 enable_cc_silence="0"
454else
455 enable_cc_silence="1"
456fi
457],
458[enable_cc_silence="0"]
459)
460if test "x$enable_cc_silence" = "x1" ; then
Jason Evanse24c7af2012-03-19 10:21:17 -0700461 AC_DEFINE([JEMALLOC_CC_SILENCE], [ ])
Jason Evans355b4382010-09-20 19:20:48 -0700462fi
463
Jason Evansb7924f52009-06-23 19:01:18 -0700464dnl Do not compile with debugging by default.
465AC_ARG_ENABLE([debug],
466 [AS_HELP_STRING([--enable-debug], [Build debugging code])],
467[if test "x$enable_debug" = "xno" ; then
468 enable_debug="0"
469else
470 enable_debug="1"
471fi
472],
473[enable_debug="0"]
474)
475if test "x$enable_debug" = "x1" ; then
476 AC_DEFINE([JEMALLOC_DEBUG], [ ])
Jason Evans2dbecf12010-09-05 10:35:13 -0700477 AC_DEFINE([JEMALLOC_IVSALLOC], [ ])
Jason Evansb7924f52009-06-23 19:01:18 -0700478fi
479AC_SUBST([enable_debug])
480
481dnl Only optimize if not debugging.
482if test "x$enable_debug" = "x0" -a "x$no_CFLAGS" = "xyes" ; then
483 dnl Make sure that an optimization flag was not specified in EXTRA_CFLAGS.
Jason Evansf3340ca2009-06-30 16:17:05 -0700484 optimize="no"
485 echo "$EXTRA_CFLAGS" | grep "\-O" >/dev/null || optimize="yes"
486 if test "x${optimize}" = "xyes" ; then
487 if test "x$GCC" = "xyes" ; then
488 JE_CFLAGS_APPEND([-O3])
489 JE_CFLAGS_APPEND([-funroll-loops])
Jason Evansf3340ca2009-06-30 16:17:05 -0700490 else
491 JE_CFLAGS_APPEND([-O])
492 fi
Jason Evansb7924f52009-06-23 19:01:18 -0700493 fi
494fi
495
Jason Evansd073a322012-02-28 20:41:16 -0800496dnl Enable statistics calculation by default.
Jason Evansb7924f52009-06-23 19:01:18 -0700497AC_ARG_ENABLE([stats],
Jason Evans777c1912012-02-28 20:49:22 -0800498 [AS_HELP_STRING([--disable-stats],
499 [Disable statistics calculation/reporting])],
Jason Evansb7924f52009-06-23 19:01:18 -0700500[if test "x$enable_stats" = "xno" ; then
501 enable_stats="0"
502else
503 enable_stats="1"
504fi
505],
Jason Evansd073a322012-02-28 20:41:16 -0800506[enable_stats="1"]
Jason Evansb7924f52009-06-23 19:01:18 -0700507)
508if test "x$enable_stats" = "x1" ; then
509 AC_DEFINE([JEMALLOC_STATS], [ ])
510fi
511AC_SUBST([enable_stats])
512
Jason Evans6109fe02010-02-10 10:37:56 -0800513dnl Do not enable profiling by default.
514AC_ARG_ENABLE([prof],
515 [AS_HELP_STRING([--enable-prof], [Enable allocation profiling])],
516[if test "x$enable_prof" = "xno" ; then
517 enable_prof="0"
518else
519 enable_prof="1"
520fi
521],
522[enable_prof="0"]
523)
Jason Evans77f350b2011-03-15 22:23:12 -0700524if test "x$enable_prof" = "x1" ; then
525 backtrace_method=""
Jason Evansb27805b2010-02-10 18:15:53 -0800526else
Jason Evans77f350b2011-03-15 22:23:12 -0700527 backtrace_method="N/A"
Jason Evansb27805b2010-02-10 18:15:53 -0800528fi
Jason Evans77f350b2011-03-15 22:23:12 -0700529
Jason Evans6109fe02010-02-10 10:37:56 -0800530AC_ARG_ENABLE([prof-libunwind],
531 [AS_HELP_STRING([--enable-prof-libunwind], [Use libunwind for backtracing])],
532[if test "x$enable_prof_libunwind" = "xno" ; then
533 enable_prof_libunwind="0"
534else
535 enable_prof_libunwind="1"
536fi
537],
538[enable_prof_libunwind="0"]
539)
Jason Evansca6bd4f2010-03-02 14:12:58 -0800540AC_ARG_WITH([static_libunwind],
541 [AS_HELP_STRING([--with-static-libunwind=<libunwind.a>],
542 [Path to static libunwind library; use rather than dynamically linking])],
543if test "x$with_static_libunwind" = "xno" ; then
544 LUNWIND="-lunwind"
545else
546 if test ! -f "$with_static_libunwind" ; then
547 AC_MSG_ERROR([Static libunwind not found: $with_static_libunwind])
548 fi
549 LUNWIND="$with_static_libunwind"
550fi,
551 LUNWIND="-lunwind"
552)
Jason Evans77f350b2011-03-15 22:23:12 -0700553if test "x$backtrace_method" = "x" -a "x$enable_prof_libunwind" = "x1" ; then
554 AC_CHECK_HEADERS([libunwind.h], , [enable_prof_libunwind="0"])
555 if test "x$LUNWIND" = "x-lunwind" ; then
556 AC_CHECK_LIB([unwind], [backtrace], [LIBS="$LIBS $LUNWIND"],
557 [enable_prof_libunwind="0"])
558 else
559 LIBS="$LIBS $LUNWIND"
560 fi
561 if test "x${enable_prof_libunwind}" = "x1" ; then
562 backtrace_method="libunwind"
563 AC_DEFINE([JEMALLOC_PROF_LIBUNWIND], [ ])
564 fi
565fi
566
567AC_ARG_ENABLE([prof-libgcc],
568 [AS_HELP_STRING([--disable-prof-libgcc],
569 [Do not use libgcc for backtracing])],
570[if test "x$enable_prof_libgcc" = "xno" ; then
571 enable_prof_libgcc="0"
572else
573 enable_prof_libgcc="1"
574fi
575],
576[enable_prof_libgcc="1"]
577)
578if test "x$backtrace_method" = "x" -a "x$enable_prof_libgcc" = "x1" \
579 -a "x$GCC" = "xyes" ; then
580 AC_CHECK_HEADERS([unwind.h], , [enable_prof_libgcc="0"])
581 AC_CHECK_LIB([gcc], [_Unwind_Backtrace], [LIBS="$LIBS -lgcc"], [enable_prof_libgcc="0"])
582 dnl The following is conservative, in that it only has entries for CPUs on
583 dnl which jemalloc has been tested.
584 AC_MSG_CHECKING([libgcc-based backtracing reliability on ${host_cpu}])
585 case "${host_cpu}" in
586 i[[3456]]86)
587 AC_MSG_RESULT([unreliable])
588 enable_prof_libgcc="0";
589 ;;
590 x86_64)
591 AC_MSG_RESULT([reliable])
592 ;;
593 *)
594 AC_MSG_RESULT([unreliable])
595 enable_prof_libgcc="0";
596 ;;
597 esac
598 if test "x${enable_prof_libgcc}" = "x1" ; then
599 backtrace_method="libgcc"
600 AC_DEFINE([JEMALLOC_PROF_LIBGCC], [ ])
601 fi
602else
603 enable_prof_libgcc="0"
604fi
605
606AC_ARG_ENABLE([prof-gcc],
607 [AS_HELP_STRING([--disable-prof-gcc],
608 [Do not use gcc intrinsics for backtracing])],
609[if test "x$enable_prof_gcc" = "xno" ; then
610 enable_prof_gcc="0"
611else
612 enable_prof_gcc="1"
613fi
614],
615[enable_prof_gcc="1"]
616)
617if test "x$backtrace_method" = "x" -a "x$enable_prof_gcc" = "x1" \
618 -a "x$GCC" = "xyes" ; then
619 backtrace_method="gcc intrinsics"
620 AC_DEFINE([JEMALLOC_PROF_GCC], [ ])
621else
622 enable_prof_gcc="0"
623fi
624
625if test "x$backtrace_method" = "x" ; then
626 backtrace_method="none (disabling profiling)"
627 enable_prof="0"
628fi
629AC_MSG_CHECKING([configured backtracing method])
630AC_MSG_RESULT([$backtrace_method])
Jason Evans2dbecf12010-09-05 10:35:13 -0700631if test "x$enable_prof" = "x1" ; then
Jason Evans2dbecf12010-09-05 10:35:13 -0700632 AC_DEFINE([JEMALLOC_PROF], [ ])
Jason Evans2dbecf12010-09-05 10:35:13 -0700633fi
634AC_SUBST([enable_prof])
Jason Evans2dbecf12010-09-05 10:35:13 -0700635
Jason Evans84cbbcb2009-12-29 00:09:15 -0800636dnl Enable thread-specific caching by default.
637AC_ARG_ENABLE([tcache],
638 [AS_HELP_STRING([--disable-tcache], [Disable per thread caches])],
639[if test "x$enable_tcache" = "xno" ; then
640 enable_tcache="0"
Jason Evansb7924f52009-06-23 19:01:18 -0700641else
Jason Evans84cbbcb2009-12-29 00:09:15 -0800642 enable_tcache="1"
Jason Evansb7924f52009-06-23 19:01:18 -0700643fi
644],
Jason Evans84cbbcb2009-12-29 00:09:15 -0800645[enable_tcache="1"]
Jason Evansb7924f52009-06-23 19:01:18 -0700646)
Jason Evans2dbecf12010-09-05 10:35:13 -0700647if test "x$enable_tcache" = "x1" ; then
648 AC_DEFINE([JEMALLOC_TCACHE], [ ])
649fi
650AC_SUBST([enable_tcache])
Jason Evansb7924f52009-06-23 19:01:18 -0700651
Jason Evansb7924f52009-06-23 19:01:18 -0700652dnl Do not enable allocation from DSS by default.
653AC_ARG_ENABLE([dss],
654 [AS_HELP_STRING([--enable-dss], [Enable allocation from DSS])],
655[if test "x$enable_dss" = "xno" ; then
656 enable_dss="0"
657else
658 enable_dss="1"
659fi
660],
661[enable_dss="0"]
662)
663if test "x$enable_dss" = "x1" ; then
664 AC_DEFINE([JEMALLOC_DSS], [ ])
665fi
666AC_SUBST([enable_dss])
667
Jason Evans777c1912012-02-28 20:49:22 -0800668dnl Support the junk/zero filling option by default.
Jason Evansb7924f52009-06-23 19:01:18 -0700669AC_ARG_ENABLE([fill],
Jason Evans777c1912012-02-28 20:49:22 -0800670 [AS_HELP_STRING([--disable-fill], [Disable support for junk/zero filling])],
Jason Evansb7924f52009-06-23 19:01:18 -0700671[if test "x$enable_fill" = "xno" ; then
672 enable_fill="0"
673else
674 enable_fill="1"
675fi
676],
Jason Evans777c1912012-02-28 20:49:22 -0800677[enable_fill="1"]
Jason Evansb7924f52009-06-23 19:01:18 -0700678)
679if test "x$enable_fill" = "x1" ; then
680 AC_DEFINE([JEMALLOC_FILL], [ ])
681fi
682AC_SUBST([enable_fill])
683
684dnl Do not support the xmalloc option by default.
685AC_ARG_ENABLE([xmalloc],
686 [AS_HELP_STRING([--enable-xmalloc], [Support xmalloc option])],
687[if test "x$enable_xmalloc" = "xno" ; then
688 enable_xmalloc="0"
689else
690 enable_xmalloc="1"
691fi
692],
693[enable_xmalloc="0"]
694)
695if test "x$enable_xmalloc" = "x1" ; then
696 AC_DEFINE([JEMALLOC_XMALLOC], [ ])
697fi
698AC_SUBST([enable_xmalloc])
699
Jason Evans6684cac2012-03-05 12:15:36 -0800700AC_CACHE_CHECK([STATIC_PAGE_SHIFT],
701 [je_cv_static_page_shift],
702 AC_RUN_IFELSE([AC_LANG_PROGRAM(
Jason Evansb7924f52009-06-23 19:01:18 -0700703[[#include <stdio.h>
704#include <unistd.h>
705#include <strings.h>
Jason Evans6684cac2012-03-05 12:15:36 -0800706]],
707[[
Jason Evansb7924f52009-06-23 19:01:18 -0700708 long result;
709 FILE *f;
710
711 result = sysconf(_SC_PAGESIZE);
712 if (result == -1) {
713 return 1;
714 }
715 f = fopen("conftest.out", "w");
716 if (f == NULL) {
717 return 1;
718 }
719 fprintf(f, "%u\n", ffs((int)result) - 1);
720 close(f);
721
722 return 0;
723]])],
Jason Evans6684cac2012-03-05 12:15:36 -0800724 [je_cv_static_page_shift=`cat conftest.out`],
725 [je_cv_static_page_shift=undefined]))
726
727if test "x$je_cv_static_page_shift" != "xundefined"; then
728 AC_DEFINE_UNQUOTED([STATIC_PAGE_SHIFT], [$je_cv_static_page_shift])
729else
730 AC_MSG_ERROR([cannot determine value for STATIC_PAGE_SHIFT])
731fi
Jason Evansb7924f52009-06-23 19:01:18 -0700732
733dnl ============================================================================
734dnl jemalloc configuration.
735dnl
Jason Evansa40bc7a2010-03-02 13:01:16 -0800736
737dnl Set VERSION if source directory has an embedded git repository.
Jason Evans955851f2011-03-31 22:38:51 -0700738if test -d "${srcroot}.git" ; then
Jason Evans79d660d2010-09-17 17:38:24 -0700739 git describe --long --abbrev=40 > ${srcroot}VERSION
Jason Evansa40bc7a2010-03-02 13:01:16 -0800740fi
Jason Evansb7924f52009-06-23 19:01:18 -0700741jemalloc_version=`cat ${srcroot}VERSION`
Jason Evansa40bc7a2010-03-02 13:01:16 -0800742jemalloc_version_major=`echo ${jemalloc_version} | tr ".g-" " " | awk '{print [$]1}'`
743jemalloc_version_minor=`echo ${jemalloc_version} | tr ".g-" " " | awk '{print [$]2}'`
744jemalloc_version_bugfix=`echo ${jemalloc_version} | tr ".g-" " " | awk '{print [$]3}'`
745jemalloc_version_nrev=`echo ${jemalloc_version} | tr ".g-" " " | awk '{print [$]4}'`
746jemalloc_version_gid=`echo ${jemalloc_version} | tr ".g-" " " | awk '{print [$]5}'`
Jason Evansb7924f52009-06-23 19:01:18 -0700747AC_SUBST([jemalloc_version])
Jason Evansa40bc7a2010-03-02 13:01:16 -0800748AC_SUBST([jemalloc_version_major])
749AC_SUBST([jemalloc_version_minor])
750AC_SUBST([jemalloc_version_bugfix])
751AC_SUBST([jemalloc_version_nrev])
752AC_SUBST([jemalloc_version_gid])
Jason Evansb7924f52009-06-23 19:01:18 -0700753
754dnl ============================================================================
755dnl Configure pthreads.
756
757AC_CHECK_HEADERS([pthread.h], , [AC_MSG_ERROR([pthread.h is missing])])
Jason Evans39006f92012-03-16 16:57:02 -0700758dnl Some systems may embed pthreads functionality in libc; check for libpthread
759dnl first, but try libc too before failing.
Jason Evansb7924f52009-06-23 19:01:18 -0700760AC_CHECK_LIB([pthread], [pthread_create], [LIBS="$LIBS -lpthread"],
Jason Evans39006f92012-03-16 16:57:02 -0700761 [AC_SEARCH_LIBS([pthread_create], , ,
762 AC_MSG_ERROR([libpthread is missing]))])
Jason Evansb7924f52009-06-23 19:01:18 -0700763
764CPPFLAGS="$CPPFLAGS -D_REENTRANT"
765
Jason Evans0fee70d2012-02-13 12:36:11 -0800766dnl Disable lazy locking by default.
Jason Evansb7924f52009-06-23 19:01:18 -0700767AC_ARG_ENABLE([lazy_lock],
Jason Evans0fee70d2012-02-13 12:36:11 -0800768 [AS_HELP_STRING([--enable-lazy-lock],
769 [Enable lazy locking (only lock when multi-threaded)])],
Jason Evansb7924f52009-06-23 19:01:18 -0700770[if test "x$enable_lazy_lock" = "xno" ; then
771 enable_lazy_lock="0"
772else
773 enable_lazy_lock="1"
774fi
775],
Jason Evans0fee70d2012-02-13 12:36:11 -0800776[enable_lazy_lock="0"]
Jason Evansb7924f52009-06-23 19:01:18 -0700777)
778if test "x$enable_lazy_lock" = "x1" ; then
779 AC_CHECK_HEADERS([dlfcn.h], , [AC_MSG_ERROR([dlfcn.h is missing])])
Jason Evans650285d2012-03-19 10:25:27 -0700780 AC_CHECK_FUNC([dlsym], [],
781 [AC_CHECK_LIB([dl], [dlsym], [LIBS="$LIBS -ldl"],
782 [AC_MSG_ERROR([libdl is missing])])
783 ])
Jason Evansb7924f52009-06-23 19:01:18 -0700784 AC_DEFINE([JEMALLOC_LAZY_LOCK], [ ])
785fi
786AC_SUBST([enable_lazy_lock])
787
Jason Evans78d815c2010-01-17 14:06:20 -0800788AC_ARG_ENABLE([tls],
789 [AS_HELP_STRING([--disable-tls], [Disable thread-local storage (__thread keyword)])],
790if test "x$enable_tls" = "xno" ; then
791 enable_tls="0"
792else
793 enable_tls="1"
794fi
795,
796enable_tls="1"
797)
798if test "x${enable_tls}" = "x1" ; then
799AC_MSG_CHECKING([for TLS])
Jason Evans6684cac2012-03-05 12:15:36 -0800800AC_COMPILE_IFELSE([AC_LANG_PROGRAM(
Jason Evans78d815c2010-01-17 14:06:20 -0800801[[
802 __thread int x;
803]], [[
804 x = 42;
805
806 return 0;
807]])],
808 AC_MSG_RESULT([yes]),
809 AC_MSG_RESULT([no])
810 enable_tls="0")
811fi
Jason Evansb267d0f2010-08-13 15:42:29 -0700812AC_SUBST([enable_tls])
Jason Evanse24c7af2012-03-19 10:21:17 -0700813if test "x${enable_tls}" = "x1" ; then
814 AC_DEFINE_UNQUOTED([JEMALLOC_TLS], [ ])
Jason Evans78d815c2010-01-17 14:06:20 -0800815fi
816
Jason Evans2dbecf12010-09-05 10:35:13 -0700817dnl ============================================================================
Jason Evans84c8eef2011-03-16 10:30:13 -0700818dnl Check for ffsl(3), and fail if not found. This function exists on all
819dnl platforms that jemalloc currently has a chance of functioning on without
820dnl modification.
Jason Evans4c2faa82012-03-13 11:09:23 -0700821JE_COMPILABLE([a program using ffsl], [
822#include <string.h>
823], [
824 {
825 int rv = ffsl(0x08);
826 }
827], [je_cv_function_ffsl])
Jason Evans6684cac2012-03-05 12:15:36 -0800828if test "x${je_cv_function_ffsl}" != "xyes" ; then
829 AC_MSG_ERROR([Cannot build without ffsl(3)])
830fi
Jason Evans84c8eef2011-03-16 10:30:13 -0700831
832dnl ============================================================================
Jason Evans763baa62011-03-18 19:10:31 -0700833dnl Check for atomic(3) operations as provided on Darwin.
834
835JE_COMPILABLE([Darwin OSAtomic*()], [
836#include <libkern/OSAtomic.h>
837#include <inttypes.h>
838], [
839 {
840 int32_t x32 = 0;
841 volatile int32_t *x32p = &x32;
842 OSAtomicAdd32(1, x32p);
843 }
844 {
845 int64_t x64 = 0;
846 volatile int64_t *x64p = &x64;
847 OSAtomicAdd64(1, x64p);
848 }
Jason Evans6684cac2012-03-05 12:15:36 -0800849], [je_cv_osatomic])
850if test "x${je_cv_osatomic}" = "xyes" ; then
Jason Evanse24c7af2012-03-19 10:21:17 -0700851 AC_DEFINE([JEMALLOC_OSATOMIC], [ ])
Jason Evans763baa62011-03-18 19:10:31 -0700852fi
853
854dnl ============================================================================
Jason Evans893a0ed2011-03-18 19:30:18 -0700855dnl Check for spinlock(3) operations as provided on Darwin.
856
857JE_COMPILABLE([Darwin OSSpin*()], [
858#include <libkern/OSAtomic.h>
859#include <inttypes.h>
860], [
861 OSSpinLock lock = 0;
862 OSSpinLockLock(&lock);
863 OSSpinLockUnlock(&lock);
Jason Evans6684cac2012-03-05 12:15:36 -0800864], [je_cv_osspin])
865if test "x${je_cv_osspin}" = "xyes" ; then
Jason Evanse24c7af2012-03-19 10:21:17 -0700866 AC_DEFINE([JEMALLOC_OSSPIN], [ ])
Jason Evans893a0ed2011-03-18 19:30:18 -0700867fi
868
869dnl ============================================================================
Jason Evans2dbecf12010-09-05 10:35:13 -0700870dnl Darwin-related configuration.
Jason Evans78d815c2010-01-17 14:06:20 -0800871
Jason Evans2dbecf12010-09-05 10:35:13 -0700872if test "x${abi}" = "xmacho" ; then
Jason Evanse24c7af2012-03-19 10:21:17 -0700873 AC_DEFINE([JEMALLOC_IVSALLOC], [ ])
874 AC_DEFINE([JEMALLOC_ZONE], [ ])
Jason Evans6109fe02010-02-10 10:37:56 -0800875
Jason Evans2dbecf12010-09-05 10:35:13 -0700876 dnl The szone version jumped from 3 to 6 between the OS X 10.5.x and 10.6
877 dnl releases. malloc_zone_t and malloc_introspection_t have new fields in
878 dnl 10.6, which is the only source-level indication of the change.
879 AC_MSG_CHECKING([malloc zone version])
Mike Hommey154829d2012-03-20 18:01:38 +0100880 AC_DEFUN([JE_ZONE_PROGRAM],
881 [AC_LANG_PROGRAM(
882 [#include <malloc/malloc.h>],
883 [static foo[[sizeof($1) $2 sizeof(void *) * $3 ? 1 : -1]]]
884 )])
Jason Evans2dbecf12010-09-05 10:35:13 -0700885
Mike Hommey154829d2012-03-20 18:01:38 +0100886 AC_COMPILE_IFELSE([JE_ZONE_PROGRAM(malloc_zone_t,==,14)],[JEMALLOC_ZONE_VERSION=3],[
887 AC_COMPILE_IFELSE([JE_ZONE_PROGRAM(malloc_zone_t,==,15)],[JEMALLOC_ZONE_VERSION=5],[
888 AC_COMPILE_IFELSE([JE_ZONE_PROGRAM(malloc_zone_t,==,16)],[
889 AC_COMPILE_IFELSE([JE_ZONE_PROGRAM(malloc_introspection_t,==,9)],[JEMALLOC_ZONE_VERSION=6],[
890 AC_COMPILE_IFELSE([JE_ZONE_PROGRAM(malloc_introspection_t,==,13)],[JEMALLOC_ZONE_VERSION=7],[JEMALLOC_ZONE_VERSION=]
891 )])],[
892 AC_COMPILE_IFELSE([JE_ZONE_PROGRAM(malloc_zone_t,==,17)],[JEMALLOC_ZONE_VERSION=8],[
893 AC_COMPILE_IFELSE([JE_ZONE_PROGRAM(malloc_zone_t,>,17)],[JEMALLOC_ZONE_VERSION=9],[JEMALLOC_ZONE_VERSION=]
894 )])])])])
895 if test "x${JEMALLOC_ZONE_VERSION}" = "x"; then
896 AC_MSG_RESULT([unsupported])
897 AC_MSG_ERROR([Unsupported malloc zone version])
898 fi
899 if test "${JEMALLOC_ZONE_VERSION}" = 9; then
900 JEMALLOC_ZONE_VERSION=8
901 AC_MSG_RESULT([> 8])
902 else
903 AC_MSG_RESULT([$JEMALLOC_ZONE_VERSION])
904 fi
905 AC_DEFINE_UNQUOTED(JEMALLOC_ZONE_VERSION, [$JEMALLOC_ZONE_VERSION])
Jason Evansb27805b2010-02-10 18:15:53 -0800906fi
907
Jason Evansb7924f52009-06-23 19:01:18 -0700908dnl ============================================================================
909dnl Check for typedefs, structures, and compiler characteristics.
910AC_HEADER_STDBOOL
911
Jason Evansb1726102012-02-28 16:50:47 -0800912AC_CONFIG_COMMANDS([include/jemalloc/internal/size_classes.h], [
913 mkdir -p "include/jemalloc/internal"
914 "${srcdir}/include/jemalloc/internal/size_classes.sh" > "${objroot}include/jemalloc/internal/size_classes.h"
915])
916
Jason Evansb7924f52009-06-23 19:01:18 -0700917dnl Process .in files.
Jason Evansb0fd5012010-01-17 01:49:20 -0800918AC_SUBST([cfghdrs_in])
919AC_SUBST([cfghdrs_out])
Jason Evans0656ec02010-04-07 23:37:35 -0700920AC_CONFIG_HEADERS([$cfghdrs_tup])
Jason Evansb7924f52009-06-23 19:01:18 -0700921
922dnl ============================================================================
923dnl Generate outputs.
Antony Dovgal2bd3cbc2011-10-13 09:33:33 +0400924AC_CONFIG_FILES([$cfgoutputs_tup config.stamp bin/jemalloc.sh])
Jason Evansb0fd5012010-01-17 01:49:20 -0800925AC_SUBST([cfgoutputs_in])
926AC_SUBST([cfgoutputs_out])
Jason Evansb7924f52009-06-23 19:01:18 -0700927AC_OUTPUT
928
929dnl ============================================================================
930dnl Print out the results of configuration.
931AC_MSG_RESULT([===============================================================================])
Jason Evansf576c632011-11-01 22:27:41 -0700932AC_MSG_RESULT([jemalloc version : ${jemalloc_version}])
933AC_MSG_RESULT([library revision : ${rev}])
Jason Evansb7924f52009-06-23 19:01:18 -0700934AC_MSG_RESULT([])
935AC_MSG_RESULT([CC : ${CC}])
936AC_MSG_RESULT([CPPFLAGS : ${CPPFLAGS}])
937AC_MSG_RESULT([CFLAGS : ${CFLAGS}])
938AC_MSG_RESULT([LDFLAGS : ${LDFLAGS}])
939AC_MSG_RESULT([LIBS : ${LIBS}])
940AC_MSG_RESULT([RPATH_EXTRA : ${RPATH_EXTRA}])
941AC_MSG_RESULT([])
Jason Evansaee7fd22010-11-24 22:00:02 -0800942AC_MSG_RESULT([XSLTPROC : ${XSLTPROC}])
943AC_MSG_RESULT([XSLROOT : ${XSLROOT}])
944AC_MSG_RESULT([])
Jason Evansb7924f52009-06-23 19:01:18 -0700945AC_MSG_RESULT([PREFIX : ${PREFIX}])
946AC_MSG_RESULT([BINDIR : ${BINDIR}])
Jason Evans662a0172009-07-01 19:24:31 -0700947AC_MSG_RESULT([INCLUDEDIR : ${INCLUDEDIR}])
948AC_MSG_RESULT([LIBDIR : ${LIBDIR}])
Jason Evansb7924f52009-06-23 19:01:18 -0700949AC_MSG_RESULT([DATADIR : ${DATADIR}])
950AC_MSG_RESULT([MANDIR : ${MANDIR}])
951AC_MSG_RESULT([])
952AC_MSG_RESULT([srcroot : ${srcroot}])
953AC_MSG_RESULT([abs_srcroot : ${abs_srcroot}])
954AC_MSG_RESULT([objroot : ${objroot}])
955AC_MSG_RESULT([abs_objroot : ${abs_objroot}])
956AC_MSG_RESULT([])
Jason Evans90895cf2009-12-29 00:09:15 -0800957AC_MSG_RESULT([JEMALLOC_PREFIX : ${JEMALLOC_PREFIX}])
Jason Evans746e77a2011-07-30 16:40:52 -0700958AC_MSG_RESULT([JEMALLOC_PRIVATE_NAMESPACE])
959AC_MSG_RESULT([ : ${JEMALLOC_PRIVATE_NAMESPACE}])
Jason Evansb0fd5012010-01-17 01:49:20 -0800960AC_MSG_RESULT([install_suffix : ${install_suffix}])
Jason Evansb7924f52009-06-23 19:01:18 -0700961AC_MSG_RESULT([autogen : ${enable_autogen}])
Jason Evans7e77eaf2012-03-02 17:47:37 -0800962AC_MSG_RESULT([experimental : ${enable_experimental}])
Jason Evans355b4382010-09-20 19:20:48 -0700963AC_MSG_RESULT([cc-silence : ${enable_cc_silence}])
Jason Evansb7924f52009-06-23 19:01:18 -0700964AC_MSG_RESULT([debug : ${enable_debug}])
965AC_MSG_RESULT([stats : ${enable_stats}])
Jason Evans6109fe02010-02-10 10:37:56 -0800966AC_MSG_RESULT([prof : ${enable_prof}])
967AC_MSG_RESULT([prof-libunwind : ${enable_prof_libunwind}])
Jason Evans77f350b2011-03-15 22:23:12 -0700968AC_MSG_RESULT([prof-libgcc : ${enable_prof_libgcc}])
969AC_MSG_RESULT([prof-gcc : ${enable_prof_gcc}])
Jason Evans84cbbcb2009-12-29 00:09:15 -0800970AC_MSG_RESULT([tcache : ${enable_tcache}])
Jason Evansb7924f52009-06-23 19:01:18 -0700971AC_MSG_RESULT([fill : ${enable_fill}])
972AC_MSG_RESULT([xmalloc : ${enable_xmalloc}])
Jason Evansb7924f52009-06-23 19:01:18 -0700973AC_MSG_RESULT([dss : ${enable_dss}])
Jason Evansb7924f52009-06-23 19:01:18 -0700974AC_MSG_RESULT([lazy_lock : ${enable_lazy_lock}])
Jason Evans2dbecf12010-09-05 10:35:13 -0700975AC_MSG_RESULT([tls : ${enable_tls}])
Jason Evansb7924f52009-06-23 19:01:18 -0700976AC_MSG_RESULT([===============================================================================])