blob: a6a08db08b4191139fc2594cb86464839bea5444 [file] [log] [blame]
Jason Evansb7924f52009-06-23 19:01:18 -07001dnl Process this file with autoconf to produce a configure script.
Jason Evans2b31cf52017-06-29 13:56:22 -07002AC_PREREQ(2.68)
Jason Evansb7924f52009-06-23 19:01:18 -07003AC_INIT([Makefile.in])
4
Jason Evans3a923192015-11-12 11:23:39 -08005AC_CONFIG_AUX_DIR([build-aux])
6
Jason Evansf3340ca2009-06-30 16:17:05 -07007dnl ============================================================================
8dnl Custom macro definitions.
9
Jason Evans194d6f92016-12-16 07:18:55 -080010dnl JE_CONCAT_VVV(r, a, b)
Tamir Duberstein96f14682017-07-06 14:50:55 -040011dnl
Jason Evans194d6f92016-12-16 07:18:55 -080012dnl Set $r to the concatenation of $a and $b, with a space separating them iff
Qi Wangf0b146a2018-04-11 10:21:13 -070013dnl both $a and $b are non-empty.
Jason Evans194d6f92016-12-16 07:18:55 -080014AC_DEFUN([JE_CONCAT_VVV],
15if test "x[$]{$2}" = "x" -o "x[$]{$3}" = "x" ; then
16 $1="[$]{$2}[$]{$3}"
17else
18 $1="[$]{$2} [$]{$3}"
19fi
20)
21
22dnl JE_APPEND_VS(a, b)
Tamir Duberstein96f14682017-07-06 14:50:55 -040023dnl
Jason Evans194d6f92016-12-16 07:18:55 -080024dnl Set $a to the concatenation of $a and b, with a space separating them iff
25dnl both $a and b are non-empty.
26AC_DEFUN([JE_APPEND_VS],
27 T_APPEND_V=$2
28 JE_CONCAT_VVV($1, $1, T_APPEND_V)
29)
30
31CONFIGURE_CFLAGS=
32SPECIFIED_CFLAGS="${CFLAGS}"
33dnl JE_CFLAGS_ADD(cflag)
Tamir Duberstein96f14682017-07-06 14:50:55 -040034dnl
Jason Evans194d6f92016-12-16 07:18:55 -080035dnl CFLAGS is the concatenation of CONFIGURE_CFLAGS and SPECIFIED_CFLAGS
36dnl (ignoring EXTRA_CFLAGS, which does not impact configure tests. This macro
37dnl appends to CONFIGURE_CFLAGS and regenerates CFLAGS.
38AC_DEFUN([JE_CFLAGS_ADD],
Jason Evansf3340ca2009-06-30 16:17:05 -070039[
40AC_MSG_CHECKING([whether compiler supports $1])
Jason Evans194d6f92016-12-16 07:18:55 -080041T_CONFIGURE_CFLAGS="${CONFIGURE_CFLAGS}"
42JE_APPEND_VS(CONFIGURE_CFLAGS, $1)
43JE_CONCAT_VVV(CFLAGS, CONFIGURE_CFLAGS, SPECIFIED_CFLAGS)
Jason Evans6684cac2012-03-05 12:15:36 -080044AC_COMPILE_IFELSE([AC_LANG_PROGRAM(
Jason Evansf3340ca2009-06-30 16:17:05 -070045[[
46]], [[
47 return 0;
48]])],
Jason Evans194d6f92016-12-16 07:18:55 -080049 [je_cv_cflags_added=$1]
Jason Evansf3340ca2009-06-30 16:17:05 -070050 AC_MSG_RESULT([yes]),
Jason Evans194d6f92016-12-16 07:18:55 -080051 [je_cv_cflags_added=]
Jason Evansf3340ca2009-06-30 16:17:05 -070052 AC_MSG_RESULT([no])
Jason Evans194d6f92016-12-16 07:18:55 -080053 [CONFIGURE_CFLAGS="${T_CONFIGURE_CFLAGS}"]
Jason Evansf3340ca2009-06-30 16:17:05 -070054)
Jason Evans194d6f92016-12-16 07:18:55 -080055JE_CONCAT_VVV(CFLAGS, CONFIGURE_CFLAGS, SPECIFIED_CFLAGS)
Jason Evansf3340ca2009-06-30 16:17:05 -070056])
57
Jason Evans194d6f92016-12-16 07:18:55 -080058dnl JE_CFLAGS_SAVE()
59dnl JE_CFLAGS_RESTORE()
Tamir Duberstein96f14682017-07-06 14:50:55 -040060dnl
Jason Evans194d6f92016-12-16 07:18:55 -080061dnl Save/restore CFLAGS. Nesting is not supported.
62AC_DEFUN([JE_CFLAGS_SAVE],
63SAVED_CONFIGURE_CFLAGS="${CONFIGURE_CFLAGS}"
64)
65AC_DEFUN([JE_CFLAGS_RESTORE],
66CONFIGURE_CFLAGS="${SAVED_CONFIGURE_CFLAGS}"
67JE_CONCAT_VVV(CFLAGS, CONFIGURE_CFLAGS, SPECIFIED_CFLAGS)
68)
69
70CONFIGURE_CXXFLAGS=
71SPECIFIED_CXXFLAGS="${CXXFLAGS}"
72dnl JE_CXXFLAGS_ADD(cxxflag)
73AC_DEFUN([JE_CXXFLAGS_ADD],
Dave Watson23191522016-10-23 15:56:30 -070074[
75AC_MSG_CHECKING([whether compiler supports $1])
Jason Evans194d6f92016-12-16 07:18:55 -080076T_CONFIGURE_CXXFLAGS="${CONFIGURE_CXXFLAGS}"
77JE_APPEND_VS(CONFIGURE_CXXFLAGS, $1)
78JE_CONCAT_VVV(CXXFLAGS, CONFIGURE_CXXFLAGS, SPECIFIED_CXXFLAGS)
Nehal J Wani78a87e42017-12-31 06:52:33 -060079AC_LANG_PUSH([C++])
Dave Watson23191522016-10-23 15:56:30 -070080AC_COMPILE_IFELSE([AC_LANG_PROGRAM(
81[[
82]], [[
83 return 0;
84]])],
Jason Evans194d6f92016-12-16 07:18:55 -080085 [je_cv_cxxflags_added=$1]
Dave Watson23191522016-10-23 15:56:30 -070086 AC_MSG_RESULT([yes]),
Jason Evans194d6f92016-12-16 07:18:55 -080087 [je_cv_cxxflags_added=]
Dave Watson23191522016-10-23 15:56:30 -070088 AC_MSG_RESULT([no])
Jason Evans194d6f92016-12-16 07:18:55 -080089 [CONFIGURE_CXXFLAGS="${T_CONFIGURE_CXXFLAGS}"]
Dave Watson23191522016-10-23 15:56:30 -070090)
Nehal J Wani78a87e42017-12-31 06:52:33 -060091AC_LANG_POP([C++])
Jason Evans194d6f92016-12-16 07:18:55 -080092JE_CONCAT_VVV(CXXFLAGS, CONFIGURE_CXXFLAGS, SPECIFIED_CXXFLAGS)
Dave Watson23191522016-10-23 15:56:30 -070093])
94
Jason Evansf3340ca2009-06-30 16:17:05 -070095dnl JE_COMPILABLE(label, hcode, mcode, rvar)
Tamir Duberstein96f14682017-07-06 14:50:55 -040096dnl
Jason Evansf3e139a2012-03-19 09:54:20 -070097dnl Use AC_LINK_IFELSE() rather than AC_COMPILE_IFELSE() so that linker errors
Jason Evans4c2faa82012-03-13 11:09:23 -070098dnl cause failure.
Jason Evansf3340ca2009-06-30 16:17:05 -070099AC_DEFUN([JE_COMPILABLE],
100[
Jason Evans6684cac2012-03-05 12:15:36 -0800101AC_CACHE_CHECK([whether $1 is compilable],
102 [$4],
Jason Evansf3e139a2012-03-19 09:54:20 -0700103 [AC_LINK_IFELSE([AC_LANG_PROGRAM([$2],
104 [$3])],
105 [$4=yes],
106 [$4=no])])
Jason Evansf3340ca2009-06-30 16:17:05 -0700107])
108
109dnl ============================================================================
110
Jason Evans41f2e692015-01-25 20:15:13 -0800111CONFIG=`echo ${ac_configure_args} | sed -e 's#'"'"'\([^ ]*\)'"'"'#\1#g'`
Jason Evansbec6a8d2015-01-22 17:55:58 -0800112AC_SUBST([CONFIG])
113
Jason Evansf576c632011-11-01 22:27:41 -0700114dnl Library revision.
Jason Evans9790b962014-04-14 22:32:31 -0700115rev=2
Jason Evansf576c632011-11-01 22:27:41 -0700116AC_SUBST([rev])
117
Jason Evansb7924f52009-06-23 19:01:18 -0700118srcroot=$srcdir
119if test "x${srcroot}" = "x." ; then
120 srcroot=""
121else
122 srcroot="${srcroot}/"
123fi
124AC_SUBST([srcroot])
125abs_srcroot="`cd \"${srcdir}\"; pwd`/"
126AC_SUBST([abs_srcroot])
127
128objroot=""
129AC_SUBST([objroot])
130abs_objroot="`pwd`/"
131AC_SUBST([abs_objroot])
132
133dnl Munge install path variables.
134if test "x$prefix" = "xNONE" ; then
135 prefix="/usr/local"
136fi
137if test "x$exec_prefix" = "xNONE" ; then
138 exec_prefix=$prefix
139fi
140PREFIX=$prefix
141AC_SUBST([PREFIX])
142BINDIR=`eval echo $bindir`
143BINDIR=`eval echo $BINDIR`
144AC_SUBST([BINDIR])
145INCLUDEDIR=`eval echo $includedir`
146INCLUDEDIR=`eval echo $INCLUDEDIR`
147AC_SUBST([INCLUDEDIR])
148LIBDIR=`eval echo $libdir`
149LIBDIR=`eval echo $LIBDIR`
150AC_SUBST([LIBDIR])
151DATADIR=`eval echo $datadir`
152DATADIR=`eval echo $DATADIR`
153AC_SUBST([DATADIR])
154MANDIR=`eval echo $mandir`
155MANDIR=`eval echo $MANDIR`
156AC_SUBST([MANDIR])
157
Jason Evansaee7fd22010-11-24 22:00:02 -0800158dnl Support for building documentation.
Jason Evans7329a4f2013-01-22 10:53:29 -0800159AC_PATH_PROG([XSLTPROC], [xsltproc], [false], [$PATH])
Jason Evans7091b412012-03-19 09:36:44 -0700160if test -d "/usr/share/xml/docbook/stylesheet/docbook-xsl" ; then
161 DEFAULT_XSLROOT="/usr/share/xml/docbook/stylesheet/docbook-xsl"
162elif test -d "/usr/share/sgml/docbook/xsl-stylesheets" ; then
163 DEFAULT_XSLROOT="/usr/share/sgml/docbook/xsl-stylesheets"
164else
165 dnl Documentation building will fail if this default gets used.
166 DEFAULT_XSLROOT=""
167fi
Jason Evansaee7fd22010-11-24 22:00:02 -0800168AC_ARG_WITH([xslroot],
Jason Evans7091b412012-03-19 09:36:44 -0700169 [AS_HELP_STRING([--with-xslroot=<path>], [XSL stylesheet root path])], [
Jason Evansaee7fd22010-11-24 22:00:02 -0800170if test "x$with_xslroot" = "xno" ; then
Jason Evans7091b412012-03-19 09:36:44 -0700171 XSLROOT="${DEFAULT_XSLROOT}"
Jason Evansaee7fd22010-11-24 22:00:02 -0800172else
173 XSLROOT="${with_xslroot}"
Jason Evans7091b412012-03-19 09:36:44 -0700174fi
175],
176 XSLROOT="${DEFAULT_XSLROOT}"
Jason Evansaee7fd22010-11-24 22:00:02 -0800177)
178AC_SUBST([XSLROOT])
179
Jason Evansf3340ca2009-06-30 16:17:05 -0700180dnl If CFLAGS isn't defined, set CFLAGS to something reasonable. Otherwise,
181dnl just prevent autoconf from molesting CFLAGS.
Jason Evansb7924f52009-06-23 19:01:18 -0700182CFLAGS=$CFLAGS
183AC_PROG_CC
Elliot Ronaghanaec07532016-06-14 15:26:07 -0700184
Mike Hommeyfd97b1d2012-04-30 12:38:31 +0200185if test "x$GCC" != "xyes" ; then
186 AC_CACHE_CHECK([whether compiler is MSVC],
187 [je_cv_msvc],
188 [AC_COMPILE_IFELSE([AC_LANG_PROGRAM([],
189 [
190#ifndef _MSC_VER
191 int fail[-1];
192#endif
193])],
194 [je_cv_msvc=yes],
195 [je_cv_msvc=no])])
196fi
197
Elliot Ronaghanccd64162016-06-14 13:18:08 -0700198dnl check if a cray prgenv wrapper compiler is being used
199je_cv_cray_prgenv_wrapper=""
200if test "x${PE_ENV}" != "x" ; then
201 case "${CC}" in
202 CC|cc)
203 je_cv_cray_prgenv_wrapper="yes"
204 ;;
205 *)
206 ;;
207 esac
208fi
209
Elliot Ronaghanaec07532016-06-14 15:26:07 -0700210AC_CACHE_CHECK([whether compiler is cray],
211 [je_cv_cray],
212 [AC_COMPILE_IFELSE([AC_LANG_PROGRAM([],
213 [
214#ifndef _CRAYC
215 int fail[-1];
216#endif
217])],
218 [je_cv_cray=yes],
219 [je_cv_cray=no])])
220
221if test "x${je_cv_cray}" = "xyes" ; then
222 AC_CACHE_CHECK([whether cray compiler version is 8.4],
223 [je_cv_cray_84],
224 [AC_COMPILE_IFELSE([AC_LANG_PROGRAM([],
225 [
226#if !(_RELEASE_MAJOR == 8 && _RELEASE_MINOR == 4)
227 int fail[-1];
228#endif
229])],
230 [je_cv_cray_84=yes],
231 [je_cv_cray_84=no])])
232fi
233
Jason Evans194d6f92016-12-16 07:18:55 -0800234if test "x$GCC" = "xyes" ; then
235 JE_CFLAGS_ADD([-std=gnu11])
236 if test "x$je_cv_cflags_added" = "x-std=gnu11" ; then
237 AC_DEFINE_UNQUOTED([JEMALLOC_HAS_RESTRICT])
238 else
239 JE_CFLAGS_ADD([-std=gnu99])
240 if test "x$je_cv_cflags_added" = "x-std=gnu99" ; then
Jason Evans99b0fbb2014-02-24 16:08:38 -0800241 AC_DEFINE_UNQUOTED([JEMALLOC_HAS_RESTRICT])
242 fi
Jason Evanscfeccd32010-03-03 15:48:20 -0800243 fi
Jason Evans194d6f92016-12-16 07:18:55 -0800244 JE_CFLAGS_ADD([-Wall])
Jason Evans194d6f92016-12-16 07:18:55 -0800245 JE_CFLAGS_ADD([-Wshorten-64-to-32])
246 JE_CFLAGS_ADD([-Wsign-compare])
David Goldblatt425253e2017-04-21 13:47:49 -0700247 JE_CFLAGS_ADD([-Wundef])
David Goldblatta9f77322017-07-21 13:34:45 -0700248 JE_CFLAGS_ADD([-Wno-format-zero-length])
Jason Evans194d6f92016-12-16 07:18:55 -0800249 JE_CFLAGS_ADD([-pipe])
250 JE_CFLAGS_ADD([-g3])
251elif test "x$je_cv_msvc" = "xyes" ; then
252 CC="$CC -nologo"
253 JE_CFLAGS_ADD([-Zi])
254 JE_CFLAGS_ADD([-MT])
255 JE_CFLAGS_ADD([-W3])
256 JE_CFLAGS_ADD([-FS])
257 JE_APPEND_VS(CPPFLAGS, -I${srcdir}/include/msvc_compat)
258fi
259if test "x$je_cv_cray" = "xyes" ; then
260 dnl cray compiler 8.4 has an inlining bug
261 if test "x$je_cv_cray_84" = "xyes" ; then
262 JE_CFLAGS_ADD([-hipa2])
263 JE_CFLAGS_ADD([-hnognu])
264 fi
Jason Evans0f633962017-04-24 11:47:10 -0700265 dnl ignore unreachable code warning
266 JE_CFLAGS_ADD([-hnomessage=128])
267 dnl ignore redefinition of "malloc", "free", etc warning
268 JE_CFLAGS_ADD([-hnomessage=1357])
Jason Evansb7924f52009-06-23 19:01:18 -0700269fi
Jason Evans194d6f92016-12-16 07:18:55 -0800270AC_SUBST([CONFIGURE_CFLAGS])
271AC_SUBST([SPECIFIED_CFLAGS])
Jason Evansaf0e28f2016-10-29 22:14:55 -0700272AC_SUBST([EXTRA_CFLAGS])
Jason Evansb7924f52009-06-23 19:01:18 -0700273AC_PROG_CPP
274
Dave Watson23191522016-10-23 15:56:30 -0700275AC_ARG_ENABLE([cxx],
276 [AS_HELP_STRING([--disable-cxx], [Disable C++ integration])],
277if test "x$enable_cxx" = "xno" ; then
278 enable_cxx="0"
279else
280 enable_cxx="1"
281fi
282,
283enable_cxx="1"
284)
285if test "x$enable_cxx" = "x1" ; then
Dave Watson23191522016-10-23 15:56:30 -0700286 dnl Require at least c++14, which is the first version to support sized
287 dnl deallocation. C++ support is not compiled otherwise.
288 m4_include([m4/ax_cxx_compile_stdcxx.m4])
289 AX_CXX_COMPILE_STDCXX([14], [noext], [optional])
290 if test "x${HAVE_CXX14}" = "x1" ; then
Jason Evans194d6f92016-12-16 07:18:55 -0800291 JE_CXXFLAGS_ADD([-Wall])
292 JE_CXXFLAGS_ADD([-g3])
Dave Watson23191522016-10-23 15:56:30 -0700293
294 SAVED_LIBS="${LIBS}"
Jason Evans194d6f92016-12-16 07:18:55 -0800295 JE_APPEND_VS(LIBS, -lstdc++)
Dave Watson23191522016-10-23 15:56:30 -0700296 JE_COMPILABLE([libstdc++ linkage], [
297#include <stdlib.h>
298], [[
299 int *arr = (int *)malloc(sizeof(int) * 42);
300 if (arr == NULL)
Jason Evansf4086432017-01-19 18:15:45 -0800301 return 1;
Dave Watson23191522016-10-23 15:56:30 -0700302]], [je_cv_libstdcxx])
303 if test "x${je_cv_libstdcxx}" = "xno" ; then
304 LIBS="${SAVED_LIBS}"
305 fi
306 else
307 enable_cxx="0"
308 fi
309fi
310AC_SUBST([enable_cxx])
Jason Evans194d6f92016-12-16 07:18:55 -0800311AC_SUBST([CONFIGURE_CXXFLAGS])
312AC_SUBST([SPECIFIED_CXXFLAGS])
Dave Watson23191522016-10-23 15:56:30 -0700313AC_SUBST([EXTRA_CXXFLAGS])
314
Jason Evansdf3f2702014-03-30 16:27:08 -0700315AC_C_BIGENDIAN([ac_cv_big_endian=1], [ac_cv_big_endian=0])
316if test "x${ac_cv_big_endian}" = "x1" ; then
317 AC_DEFINE_UNQUOTED([JEMALLOC_BIG_ENDIAN], [ ])
318fi
319
Mike Hommeyff2e9992014-05-29 16:33:02 +0900320if test "x${je_cv_msvc}" = "xyes" -a "x${ac_cv_header_inttypes_h}" = "xno"; then
Jason Evans194d6f92016-12-16 07:18:55 -0800321 JE_APPEND_VS(CPPFLAGS, -I${srcdir}/include/msvc_compat/C99)
Mike Hommeyff2e9992014-05-29 16:33:02 +0900322fi
323
rustyx46e0b232016-01-30 13:37:26 +0100324if test "x${je_cv_msvc}" = "xyes" ; then
325 LG_SIZEOF_PTR=LG_SIZEOF_PTR_WIN
326 AC_MSG_RESULT([Using a predefined value for sizeof(void *): 4 for 32-bit, 8 for 64-bit])
Jason Evansb7924f52009-06-23 19:01:18 -0700327else
rustyx46e0b232016-01-30 13:37:26 +0100328 AC_CHECK_SIZEOF([void *])
329 if test "x${ac_cv_sizeof_void_p}" = "x8" ; then
330 LG_SIZEOF_PTR=3
331 elif test "x${ac_cv_sizeof_void_p}" = "x4" ; then
332 LG_SIZEOF_PTR=2
333 else
334 AC_MSG_ERROR([Unsupported pointer size: ${ac_cv_sizeof_void_p}])
335 fi
Jason Evansb7924f52009-06-23 19:01:18 -0700336fi
Jason Evans94ad2b52009-12-29 00:09:15 -0800337AC_DEFINE_UNQUOTED([LG_SIZEOF_PTR], [$LG_SIZEOF_PTR])
338
339AC_CHECK_SIZEOF([int])
340if test "x${ac_cv_sizeof_int}" = "x8" ; then
341 LG_SIZEOF_INT=3
342elif test "x${ac_cv_sizeof_int}" = "x4" ; then
343 LG_SIZEOF_INT=2
344else
345 AC_MSG_ERROR([Unsupported int size: ${ac_cv_sizeof_int}])
346fi
347AC_DEFINE_UNQUOTED([LG_SIZEOF_INT], [$LG_SIZEOF_INT])
Jason Evansb7924f52009-06-23 19:01:18 -0700348
Jason Evans84c8eef2011-03-16 10:30:13 -0700349AC_CHECK_SIZEOF([long])
350if test "x${ac_cv_sizeof_long}" = "x8" ; then
351 LG_SIZEOF_LONG=3
352elif test "x${ac_cv_sizeof_long}" = "x4" ; then
353 LG_SIZEOF_LONG=2
354else
355 AC_MSG_ERROR([Unsupported long size: ${ac_cv_sizeof_long}])
356fi
357AC_DEFINE_UNQUOTED([LG_SIZEOF_LONG], [$LG_SIZEOF_LONG])
358
Jason Evansecae1232016-02-20 23:41:33 -0800359AC_CHECK_SIZEOF([long long])
360if test "x${ac_cv_sizeof_long_long}" = "x8" ; then
361 LG_SIZEOF_LONG_LONG=3
362elif test "x${ac_cv_sizeof_long_long}" = "x4" ; then
363 LG_SIZEOF_LONG_LONG=2
364else
365 AC_MSG_ERROR([Unsupported long long size: ${ac_cv_sizeof_long_long}])
366fi
367AC_DEFINE_UNQUOTED([LG_SIZEOF_LONG_LONG], [$LG_SIZEOF_LONG_LONG])
368
Jason Evansd81e4bd2012-03-06 14:57:45 -0800369AC_CHECK_SIZEOF([intmax_t])
370if test "x${ac_cv_sizeof_intmax_t}" = "x16" ; then
371 LG_SIZEOF_INTMAX_T=4
372elif test "x${ac_cv_sizeof_intmax_t}" = "x8" ; then
373 LG_SIZEOF_INTMAX_T=3
374elif test "x${ac_cv_sizeof_intmax_t}" = "x4" ; then
375 LG_SIZEOF_INTMAX_T=2
376else
Mike Hommey14103d32012-04-20 08:38:39 +0200377 AC_MSG_ERROR([Unsupported intmax_t size: ${ac_cv_sizeof_intmax_t}])
Jason Evansd81e4bd2012-03-06 14:57:45 -0800378fi
379AC_DEFINE_UNQUOTED([LG_SIZEOF_INTMAX_T], [$LG_SIZEOF_INTMAX_T])
380
Jason Evansb7924f52009-06-23 19:01:18 -0700381AC_CANONICAL_HOST
382dnl CPU-specific settings.
383CPU_SPINWAIT=""
384case "${host_cpu}" in
Jason Evanscb657e32014-02-25 11:21:41 -0800385 i686|x86_64)
David Goldblatt1245faa2017-10-03 18:03:02 -0700386 HAVE_CPU_SPINWAIT=1
rustyx90c72692016-01-30 13:41:09 +0100387 if test "x${je_cv_msvc}" = "xyes" ; then
388 AC_CACHE_VAL([je_cv_pause_msvc],
389 [JE_COMPILABLE([pause instruction MSVC], [],
390 [[_mm_pause(); return 0;]],
391 [je_cv_pause_msvc])])
392 if test "x${je_cv_pause_msvc}" = "xyes" ; then
393 CPU_SPINWAIT='_mm_pause()'
394 fi
395 else
396 AC_CACHE_VAL([je_cv_pause],
397 [JE_COMPILABLE([pause instruction], [],
398 [[__asm__ volatile("pause"); return 0;]],
399 [je_cv_pause])])
400 if test "x${je_cv_pause}" = "xyes" ; then
401 CPU_SPINWAIT='__asm__ volatile("pause")'
402 fi
Jason Evansf3340ca2009-06-30 16:17:05 -0700403 fi
Jason Evans80061b62013-12-09 13:21:08 -0800404 ;;
Jason Evansb7924f52009-06-23 19:01:18 -0700405 *)
David Goldblatt1245faa2017-10-03 18:03:02 -0700406 HAVE_CPU_SPINWAIT=0
Jason Evansb7924f52009-06-23 19:01:18 -0700407 ;;
408esac
David Goldblatt1245faa2017-10-03 18:03:02 -0700409AC_DEFINE_UNQUOTED([HAVE_CPU_SPINWAIT], [$HAVE_CPU_SPINWAIT])
Jason Evansb7924f52009-06-23 19:01:18 -0700410AC_DEFINE_UNQUOTED([CPU_SPINWAIT], [$CPU_SPINWAIT])
411
Christoph Muellner63712b42018-05-03 16:52:03 +0200412AC_ARG_WITH([lg_vaddr],
413 [AS_HELP_STRING([--with-lg-vaddr=<lg-vaddr>], [Number of significant virtual address bits])],
414 [LG_VADDR="$with_lg_vaddr"], [LG_VADDR="detect"])
415
Jason Evansf5cf9b12017-02-06 13:17:12 -0800416case "${host_cpu}" in
417 aarch64)
Christoph Muellner63712b42018-05-03 16:52:03 +0200418 if test "x$LG_VADDR" = "xdetect"; then
419 AC_MSG_CHECKING([number of significant virtual address bits])
420 if test "x${LG_SIZEOF_PTR}" = "x2" ; then
421 #aarch64 ILP32
422 LG_VADDR=32
423 else
424 #aarch64 LP64
425 LG_VADDR=48
426 fi
427 AC_MSG_RESULT([$LG_VADDR])
Christoph Muellner6df90602018-04-28 20:47:45 +0200428 fi
Jason Evansf5cf9b12017-02-06 13:17:12 -0800429 ;;
430 x86_64)
Christoph Muellner63712b42018-05-03 16:52:03 +0200431 if test "x$LG_VADDR" = "xdetect"; then
432 AC_CACHE_CHECK([number of significant virtual address bits],
433 [je_cv_lg_vaddr],
434 AC_RUN_IFELSE([AC_LANG_PROGRAM(
Jason Evansf5cf9b12017-02-06 13:17:12 -0800435[[
436#include <stdio.h>
437#ifdef _WIN32
438#include <limits.h>
439#include <intrin.h>
440typedef unsigned __int32 uint32_t;
441#else
442#include <stdint.h>
443#endif
444]], [[
445 uint32_t r[[4]];
446 uint32_t eax_in = 0x80000008U;
447#ifdef _WIN32
448 __cpuid((int *)r, (int)eax_in);
449#else
450 asm volatile ("cpuid"
451 : "=a" (r[[0]]), "=b" (r[[1]]), "=c" (r[[2]]), "=d" (r[[3]])
452 : "a" (eax_in), "c" (0)
453 );
454#endif
455 uint32_t eax_out = r[[0]];
456 uint32_t vaddr = ((eax_out & 0x0000ff00U) >> 8);
457 FILE *f = fopen("conftest.out", "w");
458 if (f == NULL) {
459 return 1;
460 }
Jason Evansbda12bd2017-03-20 17:37:02 -0700461 if (vaddr > (sizeof(void *) << 3)) {
462 vaddr = sizeof(void *) << 3;
463 }
Jason Evansf5cf9b12017-02-06 13:17:12 -0800464 fprintf(f, "%u", vaddr);
465 fclose(f);
466 return 0;
467]])],
468 [je_cv_lg_vaddr=`cat conftest.out`],
469 [je_cv_lg_vaddr=error],
470 [je_cv_lg_vaddr=57]))
Christoph Muellner63712b42018-05-03 16:52:03 +0200471 if test "x${je_cv_lg_vaddr}" != "x" ; then
472 LG_VADDR="${je_cv_lg_vaddr}"
473 fi
474 if test "x${LG_VADDR}" != "xerror" ; then
475 AC_DEFINE_UNQUOTED([LG_VADDR], [$LG_VADDR])
476 else
477 AC_MSG_ERROR([cannot determine number of significant virtual address bits])
478 fi
Jason Evansf5cf9b12017-02-06 13:17:12 -0800479 fi
480 ;;
481 *)
Christoph Muellner63712b42018-05-03 16:52:03 +0200482 if test "x$LG_VADDR" = "xdetect"; then
483 AC_MSG_CHECKING([number of significant virtual address bits])
484 if test "x${LG_SIZEOF_PTR}" = "x3" ; then
485 LG_VADDR=64
486 elif test "x${LG_SIZEOF_PTR}" = "x2" ; then
487 LG_VADDR=32
488 elif test "x${LG_SIZEOF_PTR}" = "xLG_SIZEOF_PTR_WIN" ; then
489 LG_VADDR="(1U << (LG_SIZEOF_PTR_WIN+3))"
490 else
491 AC_MSG_ERROR([Unsupported lg(pointer size): ${LG_SIZEOF_PTR}])
492 fi
493 AC_MSG_RESULT([$LG_VADDR])
Jason Evansf5cf9b12017-02-06 13:17:12 -0800494 fi
Jason Evansf5cf9b12017-02-06 13:17:12 -0800495 ;;
496esac
497AC_DEFINE_UNQUOTED([LG_VADDR], [$LG_VADDR])
498
Antony Dovgal2bd3cbc2011-10-13 09:33:33 +0400499LD_PRELOAD_VAR="LD_PRELOAD"
Jason Evansf576c632011-11-01 22:27:41 -0700500so="so"
Mike Hommeyfd97b1d2012-04-30 12:38:31 +0200501importlib="${so}"
Mike Hommey7cdea392012-04-30 12:38:27 +0200502o="$ac_objext"
Mike Hommey5bee66d2012-04-16 16:30:24 +0200503a="a"
Mike Hommey7cdea392012-04-30 12:38:27 +0200504exe="$ac_exeext"
Mike Hommeya19e87f2012-04-21 21:27:46 -0700505libprefix="lib"
Jason Evansc44fa922016-10-27 17:10:56 -0700506link_whole_archive="0"
Mike Hommeyfa08da72012-04-16 16:30:25 +0200507DSO_LDFLAGS='-shared -Wl,-soname,$(@F)'
508RPATH='-Wl,-rpath,$(1)'
Mike Hommey7cdea392012-04-30 12:38:27 +0200509SOREV="${so}.${rev}"
Mike Hommey188da7c2012-04-18 18:29:41 +0200510PIC_CFLAGS='-fPIC -DPIC'
Mike Hommeyfd97b1d2012-04-30 12:38:31 +0200511CTARGET='-o $@'
512LDTARGET='-o $@'
Elliot Ronaghanccd64162016-06-14 13:18:08 -0700513TEST_LD_MODE=
Mike Hommeyfd97b1d2012-04-30 12:38:31 +0200514EXTRA_LDFLAGS=
Jason Evans80ddf492013-08-20 11:48:19 +0100515ARFLAGS='crus'
516AROUT=' $@'
Mike Hommey79c4bca2012-05-02 21:30:51 +0200517CC_MM=1
Jason Evans7372b152012-02-10 20:22:09 -0800518
Elliot Ronaghanccd64162016-06-14 13:18:08 -0700519if test "x$je_cv_cray_prgenv_wrapper" = "xyes" ; then
520 TEST_LD_MODE='-dynamic'
521fi
522
Elliot Ronaghan3ef67932016-06-14 15:26:29 -0700523if test "x${je_cv_cray}" = "xyes" ; then
524 CC_MM=
525fi
526
Jory A. Prattad505e02013-08-11 09:44:59 -0500527AN_MAKEVAR([AR], [AC_PROG_AR])
528AN_PROGRAM([ar], [AC_PROG_AR])
529AC_DEFUN([AC_PROG_AR], [AC_CHECK_TOOL(AR, ar, :)])
530AC_PROG_AR
531
Tamir Duberstein24766cc2017-07-06 15:04:17 -0400532AN_MAKEVAR([NM], [AC_PROG_NM])
533AN_PROGRAM([nm], [AC_PROG_NM])
534AC_DEFUN([AC_PROG_NM], [AC_CHECK_TOOL(NM, nm, :)])
535AC_PROG_NM
536
Jason Evans909f0482017-05-04 11:20:43 -0700537AC_PROG_AWK
538
Jason Evansb7924f52009-06-23 19:01:18 -0700539dnl Platform-specific settings. abi and RPATH can probably be determined
540dnl programmatically, but doing so is error-prone, which makes it generally
541dnl not worth the trouble.
Tamir Duberstein96f14682017-07-06 14:50:55 -0400542dnl
Jason Evansb7924f52009-06-23 19:01:18 -0700543dnl Define cpp macros in CPPFLAGS, rather than doing AC_DEFINE(macro), since the
544dnl definitions need to be seen before any headers are included, which is a pain
545dnl to make happen otherwise.
Jason Evansb9ab04a2017-04-26 16:26:12 -0700546default_retain="0"
Jason Evansd059b9d2015-07-24 18:21:42 -0700547maps_coalesce="1"
Tamir Duberstein24766cc2017-07-06 15:04:17 -0400548DUMP_SYMS="${NM} -a"
Jason Evans909f0482017-05-04 11:20:43 -0700549SYM_PREFIX=""
Jason Evansb7924f52009-06-23 19:01:18 -0700550case "${host}" in
Valerii Hiora5921ba72014-05-16 16:28:20 +0300551 *-*-darwin* | *-*-ios*)
Jason Evansb7924f52009-06-23 19:01:18 -0700552 abi="macho"
553 RPATH=""
Antony Dovgal2bd3cbc2011-10-13 09:33:33 +0400554 LD_PRELOAD_VAR="DYLD_INSERT_LIBRARIES"
Jason Evansf576c632011-11-01 22:27:41 -0700555 so="dylib"
Mike Hommeyfd97b1d2012-04-30 12:38:31 +0200556 importlib="${so}"
Jason Evansb80581d2012-03-23 16:17:43 -0700557 force_tls="0"
Jason Evansf1f2b452015-05-01 08:57:41 -0700558 DSO_LDFLAGS='-shared -Wl,-install_name,$(LIBDIR)/$(@F)'
Mike Hommey7cdea392012-04-30 12:38:27 +0200559 SOREV="${rev}.${so}"
Jason Evans66688532013-12-03 21:49:36 -0800560 sbrk_deprecated="1"
Jason Evans909f0482017-05-04 11:20:43 -0700561 SYM_PREFIX="_"
Jason Evansb7924f52009-06-23 19:01:18 -0700562 ;;
563 *-*-freebsd*)
Jason Evansb7924f52009-06-23 19:01:18 -0700564 abi="elf"
Jason Evansc2f970c2016-05-05 17:45:02 -0700565 AC_DEFINE([JEMALLOC_SYSCTL_VM_OVERCOMMIT], [ ])
Jason Evansfd4fcef2012-03-23 17:40:58 -0700566 force_lazy_lock="1"
Jason Evansb7924f52009-06-23 19:01:18 -0700567 ;;
Michael Neumann1aa25a32014-08-05 03:06:02 +0200568 *-*-dragonfly*)
Michael Neumann1aa25a32014-08-05 03:06:02 +0200569 abi="elf"
Michael Neumann1aa25a32014-08-05 03:06:02 +0200570 ;;
Sébastien Marieb80fbcb2015-04-07 12:21:19 +0200571 *-*-openbsd*)
Sébastien Marieb80fbcb2015-04-07 12:21:19 +0200572 abi="elf"
Sébastien Marieb80fbcb2015-04-07 12:21:19 +0200573 force_tls="0"
574 ;;
575 *-*-bitrig*)
Sébastien Marie77d597e2015-01-25 10:18:32 +0100576 abi="elf"
Sébastien Marie77d597e2015-01-25 10:18:32 +0100577 ;;
Jason Evans32d69e92016-11-10 15:35:29 -0800578 *-*-linux-android)
579 dnl syscall(2) and secure_getenv(3) are exposed by _GNU_SOURCE.
Jason Evans194d6f92016-12-16 07:18:55 -0800580 JE_APPEND_VS(CPPFLAGS, -D_GNU_SOURCE)
Jason Evans32d69e92016-11-10 15:35:29 -0800581 abi="elf"
Qi Wangf4f814c2017-10-05 16:32:28 -0700582 AC_DEFINE([JEMALLOC_PURGE_MADVISE_DONTNEED_ZEROS], [ ])
Jason Evans32d69e92016-11-10 15:35:29 -0800583 AC_DEFINE([JEMALLOC_HAS_ALLOCA_H])
584 AC_DEFINE([JEMALLOC_PROC_SYS_VM_OVERCOMMIT_MEMORY], [ ])
Jason Evans32d69e92016-11-10 15:35:29 -0800585 AC_DEFINE([JEMALLOC_THREADED_INIT], [ ])
David Goldblattd4ac7582017-01-25 09:54:27 -0800586 AC_DEFINE([JEMALLOC_C11_ATOMICS])
Jason Evans32d69e92016-11-10 15:35:29 -0800587 force_tls="0"
Jason Evans7d86c922017-04-24 09:14:31 -0700588 if test "${LG_SIZEOF_PTR}" = "3"; then
Jason Evansb9ab04a2017-04-26 16:26:12 -0700589 default_retain="1"
Jason Evansa01f9932017-04-17 15:54:53 -0700590 fi
Jason Evans32d69e92016-11-10 15:35:29 -0800591 ;;
Faidon Liambotis8da69b62017-08-07 21:51:09 +0300592 *-*-linux*)
Jason Evans83ebf2f2016-11-02 19:50:44 -0700593 dnl syscall(2) and secure_getenv(3) are exposed by _GNU_SOURCE.
Jason Evans194d6f92016-12-16 07:18:55 -0800594 JE_APPEND_VS(CPPFLAGS, -D_GNU_SOURCE)
Jason Evansb7924f52009-06-23 19:01:18 -0700595 abi="elf"
Qi Wangf4f814c2017-10-05 16:32:28 -0700596 AC_DEFINE([JEMALLOC_PURGE_MADVISE_DONTNEED_ZEROS], [ ])
Garrett Cooper13e4e242012-12-02 17:58:40 -0800597 AC_DEFINE([JEMALLOC_HAS_ALLOCA_H])
Jason Evansc2f970c2016-05-05 17:45:02 -0700598 AC_DEFINE([JEMALLOC_PROC_SYS_VM_OVERCOMMIT_MEMORY], [ ])
Jason Evans02b23122012-04-05 11:06:23 -0700599 AC_DEFINE([JEMALLOC_THREADED_INIT], [ ])
Jason Evansae93d6b2015-07-10 14:33:00 -0700600 AC_DEFINE([JEMALLOC_USE_CXX_THROW], [ ])
Jason Evans7d86c922017-04-24 09:14:31 -0700601 if test "${LG_SIZEOF_PTR}" = "3"; then
Jason Evansb9ab04a2017-04-26 16:26:12 -0700602 default_retain="1"
Jason Evansa01f9932017-04-17 15:54:53 -0700603 fi
Jason Evansb7924f52009-06-23 19:01:18 -0700604 ;;
Faidon Liambotis8da69b62017-08-07 21:51:09 +0300605 *-*-kfreebsd*)
606 dnl syscall(2) and secure_getenv(3) are exposed by _GNU_SOURCE.
607 JE_APPEND_VS(CPPFLAGS, -D_GNU_SOURCE)
608 abi="elf"
609 AC_DEFINE([JEMALLOC_HAS_ALLOCA_H])
610 AC_DEFINE([JEMALLOC_SYSCTL_VM_OVERCOMMIT], [ ])
611 AC_DEFINE([JEMALLOC_THREADED_INIT], [ ])
612 AC_DEFINE([JEMALLOC_USE_CXX_THROW], [ ])
613 ;;
Jason Evansb7924f52009-06-23 19:01:18 -0700614 *-*-netbsd*)
615 AC_MSG_CHECKING([ABI])
616 AC_COMPILE_IFELSE([AC_LANG_PROGRAM(
617[[#ifdef __ELF__
618/* ELF */
619#else
620#error aout
621#endif
622]])],
Jason Evanse0164bc2016-10-07 08:47:16 -0700623 [abi="elf"],
Jason Evansb7924f52009-06-23 19:01:18 -0700624 [abi="aout"])
625 AC_MSG_RESULT([$abi])
Jason Evansb7924f52009-06-23 19:01:18 -0700626 ;;
627 *-*-solaris2*)
Jason Evansb7924f52009-06-23 19:01:18 -0700628 abi="elf"
Mike Hommeyfa08da72012-04-16 16:30:25 +0200629 RPATH='-Wl,-R,$(1)'
Jason Evansb7924f52009-06-23 19:01:18 -0700630 dnl Solaris needs this for sigwait().
Jason Evans194d6f92016-12-16 07:18:55 -0800631 JE_APPEND_VS(CPPFLAGS, -D_POSIX_PTHREAD_SEMANTICS)
632 JE_APPEND_VS(LIBS, -lposix4 -lsocket -lnsl)
Jason Evansb7924f52009-06-23 19:01:18 -0700633 ;;
Antony Dovgal2bd3cbc2011-10-13 09:33:33 +0400634 *-ibm-aix*)
Jason Evans7d86c922017-04-24 09:14:31 -0700635 if test "${LG_SIZEOF_PTR}" = "3"; then
Antony Dovgal2bd3cbc2011-10-13 09:33:33 +0400636 dnl 64bit AIX
637 LD_PRELOAD_VAR="LDR_PRELOAD64"
638 else
639 dnl 32bit AIX
640 LD_PRELOAD_VAR="LDR_PRELOAD"
641 fi
642 abi="xcoff"
Antony Dovgal2bd3cbc2011-10-13 09:33:33 +0400643 ;;
Dave Rigby70bdee02014-09-22 15:53:16 +0100644 *-*-mingw* | *-*-cygwin*)
Mike Hommeya19e87f2012-04-21 21:27:46 -0700645 abi="pecoff"
646 force_tls="0"
Jason Evansd059b9d2015-07-24 18:21:42 -0700647 maps_coalesce="0"
Mike Hommeya19e87f2012-04-21 21:27:46 -0700648 RPATH=""
649 so="dll"
Mike Hommeyfd97b1d2012-04-30 12:38:31 +0200650 if test "x$je_cv_msvc" = "xyes" ; then
651 importlib="lib"
652 DSO_LDFLAGS="-LD"
653 EXTRA_LDFLAGS="-link -DEBUG"
654 CTARGET='-Fo$@'
655 LDTARGET='-Fe$@'
Jory A. Prattad505e02013-08-11 09:44:59 -0500656 AR='lib'
657 ARFLAGS='-nologo -out:'
Jason Evans80ddf492013-08-20 11:48:19 +0100658 AROUT='$@'
Mike Hommey79c4bca2012-05-02 21:30:51 +0200659 CC_MM=
Mike Hommeyfd97b1d2012-04-30 12:38:31 +0200660 else
661 importlib="${so}"
662 DSO_LDFLAGS="-shared"
Jason Evansc44fa922016-10-27 17:10:56 -0700663 link_whole_archive="1"
Mike Hommeyfd97b1d2012-04-30 12:38:31 +0200664 fi
Tamir Dubersteina545f182017-07-06 15:14:48 -0400665 case "${host}" in
666 *-*-cygwin*)
667 DUMP_SYMS="dumpbin /SYMBOLS"
668 ;;
669 *)
670 ;;
671 esac
Mike Hommeya19e87f2012-04-21 21:27:46 -0700672 a="lib"
673 libprefix=""
Mike Hommey7cdea392012-04-30 12:38:27 +0200674 SOREV="${so}"
Mike Hommeya19e87f2012-04-21 21:27:46 -0700675 PIC_CFLAGS=""
676 ;;
Jason Evansb7924f52009-06-23 19:01:18 -0700677 *)
678 AC_MSG_RESULT([Unsupported operating system: ${host}])
679 abi="elf"
Jason Evansb7924f52009-06-23 19:01:18 -0700680 ;;
681esac
Mike Hommeyaffe0092014-05-28 08:10:12 +0900682
683JEMALLOC_USABLE_SIZE_CONST=const
684AC_CHECK_HEADERS([malloc.h], [
685 AC_MSG_CHECKING([whether malloc_usable_size definition can use const argument])
686 AC_COMPILE_IFELSE([AC_LANG_PROGRAM(
687 [#include <malloc.h>
688 #include <stddef.h>
689 size_t malloc_usable_size(const void *ptr);
690 ],
691 [])],[
692 AC_MSG_RESULT([yes])
693 ],[
694 JEMALLOC_USABLE_SIZE_CONST=
695 AC_MSG_RESULT([no])
696 ])
697])
Jason Evans247d1242012-10-09 16:20:10 -0700698AC_DEFINE_UNQUOTED([JEMALLOC_USABLE_SIZE_CONST], [$JEMALLOC_USABLE_SIZE_CONST])
Jason Evansb7924f52009-06-23 19:01:18 -0700699AC_SUBST([abi])
700AC_SUBST([RPATH])
Antony Dovgal2bd3cbc2011-10-13 09:33:33 +0400701AC_SUBST([LD_PRELOAD_VAR])
Jason Evansf576c632011-11-01 22:27:41 -0700702AC_SUBST([so])
Mike Hommeyfd97b1d2012-04-30 12:38:31 +0200703AC_SUBST([importlib])
Mike Hommey5bee66d2012-04-16 16:30:24 +0200704AC_SUBST([o])
705AC_SUBST([a])
706AC_SUBST([exe])
Mike Hommeya19e87f2012-04-21 21:27:46 -0700707AC_SUBST([libprefix])
Jason Evansc44fa922016-10-27 17:10:56 -0700708AC_SUBST([link_whole_archive])
Mike Hommeyfa08da72012-04-16 16:30:25 +0200709AC_SUBST([DSO_LDFLAGS])
Mike Hommeyfd97b1d2012-04-30 12:38:31 +0200710AC_SUBST([EXTRA_LDFLAGS])
Mike Hommey85221d52012-04-18 18:29:40 +0200711AC_SUBST([SOREV])
Mike Hommey188da7c2012-04-18 18:29:41 +0200712AC_SUBST([PIC_CFLAGS])
Mike Hommeyfd97b1d2012-04-30 12:38:31 +0200713AC_SUBST([CTARGET])
714AC_SUBST([LDTARGET])
Elliot Ronaghanccd64162016-06-14 13:18:08 -0700715AC_SUBST([TEST_LD_MODE])
Mike Hommeyfd97b1d2012-04-30 12:38:31 +0200716AC_SUBST([MKLIB])
Jason Evans80ddf492013-08-20 11:48:19 +0100717AC_SUBST([ARFLAGS])
718AC_SUBST([AROUT])
Jason Evans909f0482017-05-04 11:20:43 -0700719AC_SUBST([DUMP_SYMS])
Mike Hommey79c4bca2012-05-02 21:30:51 +0200720AC_SUBST([CC_MM])
Mike Hommeyfd97b1d2012-04-30 12:38:31 +0200721
Jason Evansd76cfec2016-10-27 21:23:48 -0700722dnl Determine whether libm must be linked to use e.g. log(3).
723AC_SEARCH_LIBS([log], [m], , [AC_MSG_ERROR([Missing math functions])])
724if test "x$ac_cv_search_log" != "xnone required" ; then
725 LM="$ac_cv_search_log"
726else
727 LM=
728fi
729AC_SUBST(LM)
730
Jason Evansfa5d2452011-03-15 10:25:59 -0700731JE_COMPILABLE([__attribute__ syntax],
732 [static __attribute__((unused)) void foo(void){}],
733 [],
Jason Evans6684cac2012-03-05 12:15:36 -0800734 [je_cv_attribute])
735if test "x${je_cv_attribute}" = "xyes" ; then
Jason Evansfa5d2452011-03-15 10:25:59 -0700736 AC_DEFINE([JEMALLOC_HAVE_ATTR], [ ])
737 if test "x${GCC}" = "xyes" -a "x${abi}" = "xelf"; then
Jason Evans194d6f92016-12-16 07:18:55 -0800738 JE_CFLAGS_ADD([-fvisibility=hidden])
739 JE_CXXFLAGS_ADD([-fvisibility=hidden])
Jason Evansfa5d2452011-03-15 10:25:59 -0700740 fi
741fi
Jason Evans3cc1f1a2012-04-03 22:30:05 -0700742dnl Check for tls_model attribute support (clang 3.0 still lacks support).
Jason Evans194d6f92016-12-16 07:18:55 -0800743JE_CFLAGS_SAVE()
744JE_CFLAGS_ADD([-Werror])
745JE_CFLAGS_ADD([-herror_on_warning])
Jason Evans3cc1f1a2012-04-03 22:30:05 -0700746JE_COMPILABLE([tls_model attribute], [],
747 [static __thread int
Daniel Micayf1cf3ea2014-09-16 04:42:33 -0400748 __attribute__((tls_model("initial-exec"), unused)) foo;
Jason Evans3cc1f1a2012-04-03 22:30:05 -0700749 foo = 0;],
750 [je_cv_tls_model])
Jason Evans194d6f92016-12-16 07:18:55 -0800751JE_CFLAGS_RESTORE()
David Goldblatta62e42b2018-04-17 12:52:22 -0700752dnl (Setting of JEMALLOC_TLS_MODEL is done later, after we've checked for
753dnl --disable-initial-exec-tls)
754
Jason Evans0b8f0bc2015-07-10 16:41:12 -0700755dnl Check for alloc_size attribute support.
Jason Evans194d6f92016-12-16 07:18:55 -0800756JE_CFLAGS_SAVE()
757JE_CFLAGS_ADD([-Werror])
758JE_CFLAGS_ADD([-herror_on_warning])
Jason Evans92d72ee2015-07-10 16:45:32 -0700759JE_COMPILABLE([alloc_size attribute], [#include <stdlib.h>],
760 [void *foo(size_t size) __attribute__((alloc_size(1)));],
Jason Evans0b8f0bc2015-07-10 16:41:12 -0700761 [je_cv_alloc_size])
Jason Evans194d6f92016-12-16 07:18:55 -0800762JE_CFLAGS_RESTORE()
Jason Evans0b8f0bc2015-07-10 16:41:12 -0700763if test "x${je_cv_alloc_size}" = "xyes" ; then
764 AC_DEFINE([JEMALLOC_HAVE_ATTR_ALLOC_SIZE], [ ])
765fi
Jason Evanse42c3092015-07-22 15:44:47 -0700766dnl Check for format(gnu_printf, ...) attribute support.
Jason Evans194d6f92016-12-16 07:18:55 -0800767JE_CFLAGS_SAVE()
768JE_CFLAGS_ADD([-Werror])
769JE_CFLAGS_ADD([-herror_on_warning])
Jason Evanse42c3092015-07-22 15:44:47 -0700770JE_COMPILABLE([format(gnu_printf, ...) attribute], [#include <stdlib.h>],
771 [void *foo(const char *format, ...) __attribute__((format(gnu_printf, 1, 2)));],
772 [je_cv_format_gnu_printf])
Jason Evans194d6f92016-12-16 07:18:55 -0800773JE_CFLAGS_RESTORE()
Jason Evanse42c3092015-07-22 15:44:47 -0700774if test "x${je_cv_format_gnu_printf}" = "xyes" ; then
775 AC_DEFINE([JEMALLOC_HAVE_ATTR_FORMAT_GNU_PRINTF], [ ])
776fi
777dnl Check for format(printf, ...) attribute support.
Jason Evans194d6f92016-12-16 07:18:55 -0800778JE_CFLAGS_SAVE()
779JE_CFLAGS_ADD([-Werror])
780JE_CFLAGS_ADD([-herror_on_warning])
Jason Evanse42c3092015-07-22 15:44:47 -0700781JE_COMPILABLE([format(printf, ...) attribute], [#include <stdlib.h>],
782 [void *foo(const char *format, ...) __attribute__((format(printf, 1, 2)));],
783 [je_cv_format_printf])
Jason Evans194d6f92016-12-16 07:18:55 -0800784JE_CFLAGS_RESTORE()
Jason Evanse42c3092015-07-22 15:44:47 -0700785if test "x${je_cv_format_printf}" = "xyes" ; then
786 AC_DEFINE([JEMALLOC_HAVE_ATTR_FORMAT_PRINTF], [ ])
787fi
Jason Evansfa5d2452011-03-15 10:25:59 -0700788
Jason Evansb7924f52009-06-23 19:01:18 -0700789dnl Support optional additions to rpath.
790AC_ARG_WITH([rpath],
Jason Evans90895cf2009-12-29 00:09:15 -0800791 [AS_HELP_STRING([--with-rpath=<rpath>], [Colon-separated rpath (ELF systems only)])],
Jason Evansb7924f52009-06-23 19:01:18 -0700792if test "x$with_rpath" = "xno" ; then
793 RPATH_EXTRA=
794else
795 RPATH_EXTRA="`echo $with_rpath | tr \":\" \" \"`"
796fi,
797 RPATH_EXTRA=
798)
799AC_SUBST([RPATH_EXTRA])
800
801dnl Disable rules that do automatic regeneration of configure output by default.
802AC_ARG_ENABLE([autogen],
Jason Evans78d815c2010-01-17 14:06:20 -0800803 [AS_HELP_STRING([--enable-autogen], [Automatically regenerate configure output])],
Jason Evansb7924f52009-06-23 19:01:18 -0700804if test "x$enable_autogen" = "xno" ; then
805 enable_autogen="0"
806else
807 enable_autogen="1"
808fi
809,
810enable_autogen="0"
811)
812AC_SUBST([enable_autogen])
813
814AC_PROG_INSTALL
815AC_PROG_RANLIB
Jason Evans7329a4f2013-01-22 10:53:29 -0800816AC_PATH_PROG([LD], [ld], [false], [$PATH])
817AC_PATH_PROG([AUTOCONF], [autoconf], [false], [$PATH])
Jason Evansb7924f52009-06-23 19:01:18 -0700818
Jason Evans0a5489e2012-03-01 17:19:20 -0800819dnl Perform no name mangling by default.
820AC_ARG_WITH([mangling],
821 [AS_HELP_STRING([--with-mangling=<map>], [Mangle symbols in <map>])],
822 [mangling_map="$with_mangling"], [mangling_map=""])
Jason Evans0a5489e2012-03-01 17:19:20 -0800823
Jason Evans90895cf2009-12-29 00:09:15 -0800824dnl Do not prefix public APIs by default.
825AC_ARG_WITH([jemalloc_prefix],
826 [AS_HELP_STRING([--with-jemalloc-prefix=<prefix>], [Prefix to prepend to all public APIs])],
Jason Evansb0fd5012010-01-17 01:49:20 -0800827 [JEMALLOC_PREFIX="$with_jemalloc_prefix"],
Mike Hommey7cdea392012-04-30 12:38:27 +0200828 [if test "x$abi" != "xmacho" -a "x$abi" != "xpecoff"; then
Jason Evans2dbecf12010-09-05 10:35:13 -0700829 JEMALLOC_PREFIX=""
830else
831 JEMALLOC_PREFIX="je_"
832fi]
Jason Evans90895cf2009-12-29 00:09:15 -0800833)
David Goldblatt425253e2017-04-21 13:47:49 -0700834if test "x$JEMALLOC_PREFIX" = "x" ; then
835 AC_DEFINE([JEMALLOC_IS_MALLOC])
836else
Jason Evanse7339702010-10-23 18:37:06 -0700837 JEMALLOC_CPREFIX=`echo ${JEMALLOC_PREFIX} | tr "a-z" "A-Z"`
838 AC_DEFINE_UNQUOTED([JEMALLOC_PREFIX], ["$JEMALLOC_PREFIX"])
839 AC_DEFINE_UNQUOTED([JEMALLOC_CPREFIX], ["$JEMALLOC_CPREFIX"])
Jason Evans90895cf2009-12-29 00:09:15 -0800840fi
Jason Evansff8062a2017-05-30 14:26:02 -0700841AC_SUBST([JEMALLOC_PREFIX])
Jason Evans241abc62015-06-23 18:47:07 -0700842AC_SUBST([JEMALLOC_CPREFIX])
Jason Evans90895cf2009-12-29 00:09:15 -0800843
Mike Hommey99066602012-11-19 10:55:26 +0100844AC_ARG_WITH([export],
845 [AS_HELP_STRING([--without-export], [disable exporting jemalloc public APIs])],
846 [if test "x$with_export" = "xno"; then
Jason Evans2625c892013-01-22 16:46:27 -0800847 AC_DEFINE([JEMALLOC_EXPORT],[])
Mike Hommey99066602012-11-19 10:55:26 +0100848fi]
849)
850
Jason Evans909f0482017-05-04 11:20:43 -0700851public_syms="aligned_alloc calloc dallocx free mallctl mallctlbymib mallctlnametomib malloc malloc_conf malloc_message malloc_stats_print malloc_usable_size mallocx nallocx posix_memalign rallocx realloc sallocx sdallocx xallocx"
852dnl Check for additional platform-specific public API functions.
853AC_CHECK_FUNC([memalign],
854 [AC_DEFINE([JEMALLOC_OVERRIDE_MEMALIGN], [ ])
855 public_syms="${public_syms} memalign"])
856AC_CHECK_FUNC([valloc],
857 [AC_DEFINE([JEMALLOC_OVERRIDE_VALLOC], [ ])
858 public_syms="${public_syms} valloc"])
859
860dnl Check for allocator-related functions that should be wrapped.
861wrap_syms=
862if test "x${JEMALLOC_PREFIX}" = "x" ; then
863 AC_CHECK_FUNC([__libc_calloc],
864 [AC_DEFINE([JEMALLOC_OVERRIDE___LIBC_CALLOC], [ ])
865 wrap_syms="${wrap_syms} __libc_calloc"])
866 AC_CHECK_FUNC([__libc_free],
867 [AC_DEFINE([JEMALLOC_OVERRIDE___LIBC_FREE], [ ])
868 wrap_syms="${wrap_syms} __libc_free"])
869 AC_CHECK_FUNC([__libc_malloc],
870 [AC_DEFINE([JEMALLOC_OVERRIDE___LIBC_MALLOC], [ ])
871 wrap_syms="${wrap_syms} __libc_malloc"])
872 AC_CHECK_FUNC([__libc_memalign],
873 [AC_DEFINE([JEMALLOC_OVERRIDE___LIBC_MEMALIGN], [ ])
874 wrap_syms="${wrap_syms} __libc_memalign"])
875 AC_CHECK_FUNC([__libc_realloc],
876 [AC_DEFINE([JEMALLOC_OVERRIDE___LIBC_REALLOC], [ ])
877 wrap_syms="${wrap_syms} __libc_realloc"])
878 AC_CHECK_FUNC([__libc_valloc],
879 [AC_DEFINE([JEMALLOC_OVERRIDE___LIBC_VALLOC], [ ])
880 wrap_syms="${wrap_syms} __libc_valloc"])
881 AC_CHECK_FUNC([__posix_memalign],
882 [AC_DEFINE([JEMALLOC_OVERRIDE___POSIX_MEMALIGN], [ ])
883 wrap_syms="${wrap_syms} __posix_memalign"])
884fi
885
886case "${host}" in
887 *-*-mingw* | *-*-cygwin*)
888 wrap_syms="${wrap_syms} tls_callback"
889 ;;
890 *)
891 ;;
892esac
893
Jason Evans86abd0d2013-11-30 15:25:42 -0800894dnl Mangle library-private APIs.
Jason Evans746e77a2011-07-30 16:40:52 -0700895AC_ARG_WITH([private_namespace],
896 [AS_HELP_STRING([--with-private-namespace=<prefix>], [Prefix to prepend to all library-private APIs])],
Jason Evans86abd0d2013-11-30 15:25:42 -0800897 [JEMALLOC_PRIVATE_NAMESPACE="${with_private_namespace}je_"],
898 [JEMALLOC_PRIVATE_NAMESPACE="je_"]
Jason Evans746e77a2011-07-30 16:40:52 -0700899)
Jason Evans86abd0d2013-11-30 15:25:42 -0800900AC_DEFINE_UNQUOTED([JEMALLOC_PRIVATE_NAMESPACE], [$JEMALLOC_PRIVATE_NAMESPACE])
901private_namespace="$JEMALLOC_PRIVATE_NAMESPACE"
902AC_SUBST([private_namespace])
Jason Evans746e77a2011-07-30 16:40:52 -0700903
Jason Evansb0fd5012010-01-17 01:49:20 -0800904dnl Do not add suffix to installed files by default.
905AC_ARG_WITH([install_suffix],
906 [AS_HELP_STRING([--with-install-suffix=<suffix>], [Suffix to append to all installed files])],
907 [INSTALL_SUFFIX="$with_install_suffix"],
908 [INSTALL_SUFFIX=]
909)
910install_suffix="$INSTALL_SUFFIX"
911AC_SUBST([install_suffix])
912
Jason Evansf8290092016-02-07 14:23:22 -0800913dnl Specify default malloc_conf.
914AC_ARG_WITH([malloc_conf],
915 [AS_HELP_STRING([--with-malloc-conf=<malloc_conf>], [config.malloc_conf options string])],
916 [JEMALLOC_CONFIG_MALLOC_CONF="$with_malloc_conf"],
917 [JEMALLOC_CONFIG_MALLOC_CONF=""]
918)
919config_malloc_conf="$JEMALLOC_CONFIG_MALLOC_CONF"
920AC_DEFINE_UNQUOTED([JEMALLOC_CONFIG_MALLOC_CONF], ["$config_malloc_conf"])
921
Jason Evans86abd0d2013-11-30 15:25:42 -0800922dnl Substitute @je_@ in jemalloc_protos.h.in, primarily to make generation of
923dnl jemalloc_protos_jet.h easy.
924je_="je_"
925AC_SUBST([je_])
926
Mike Hommeycf6032d2014-07-30 18:16:13 +0900927cfgoutputs_in="Makefile.in"
Nick White913e9a82014-09-19 22:01:23 +0100928cfgoutputs_in="${cfgoutputs_in} jemalloc.pc.in"
Mike Hommeycf6032d2014-07-30 18:16:13 +0900929cfgoutputs_in="${cfgoutputs_in} doc/html.xsl.in"
930cfgoutputs_in="${cfgoutputs_in} doc/manpages.xsl.in"
931cfgoutputs_in="${cfgoutputs_in} doc/jemalloc.xml.in"
932cfgoutputs_in="${cfgoutputs_in} include/jemalloc/jemalloc_macros.h.in"
933cfgoutputs_in="${cfgoutputs_in} include/jemalloc/jemalloc_protos.h.in"
Jason Evans82e88d12014-09-07 19:55:03 -0700934cfgoutputs_in="${cfgoutputs_in} include/jemalloc/jemalloc_typedefs.h.in"
David Goldblatt743d9402017-04-10 18:17:55 -0700935cfgoutputs_in="${cfgoutputs_in} include/jemalloc/internal/jemalloc_preamble.h.in"
Mike Hommeycf6032d2014-07-30 18:16:13 +0900936cfgoutputs_in="${cfgoutputs_in} test/test.sh.in"
937cfgoutputs_in="${cfgoutputs_in} test/include/test/jemalloc_test.h.in"
Jason Evansb0fd5012010-01-17 01:49:20 -0800938
Jason Evansaee7fd22010-11-24 22:00:02 -0800939cfgoutputs_out="Makefile"
Nick White913e9a82014-09-19 22:01:23 +0100940cfgoutputs_out="${cfgoutputs_out} jemalloc.pc"
Jason Evansaee7fd22010-11-24 22:00:02 -0800941cfgoutputs_out="${cfgoutputs_out} doc/html.xsl"
942cfgoutputs_out="${cfgoutputs_out} doc/manpages.xsl"
Jason Evans86abd0d2013-11-30 15:25:42 -0800943cfgoutputs_out="${cfgoutputs_out} doc/jemalloc.xml"
944cfgoutputs_out="${cfgoutputs_out} include/jemalloc/jemalloc_macros.h"
945cfgoutputs_out="${cfgoutputs_out} include/jemalloc/jemalloc_protos.h"
Jason Evans82e88d12014-09-07 19:55:03 -0700946cfgoutputs_out="${cfgoutputs_out} include/jemalloc/jemalloc_typedefs.h"
David Goldblatt743d9402017-04-10 18:17:55 -0700947cfgoutputs_out="${cfgoutputs_out} include/jemalloc/internal/jemalloc_preamble.h"
Jason Evans86abd0d2013-11-30 15:25:42 -0800948cfgoutputs_out="${cfgoutputs_out} test/test.sh"
949cfgoutputs_out="${cfgoutputs_out} test/include/test/jemalloc_test.h"
Jason Evansb0fd5012010-01-17 01:49:20 -0800950
Jason Evansaee7fd22010-11-24 22:00:02 -0800951cfgoutputs_tup="Makefile"
Nick White913e9a82014-09-19 22:01:23 +0100952cfgoutputs_tup="${cfgoutputs_tup} jemalloc.pc:jemalloc.pc.in"
Jason Evansaee7fd22010-11-24 22:00:02 -0800953cfgoutputs_tup="${cfgoutputs_tup} doc/html.xsl:doc/html.xsl.in"
954cfgoutputs_tup="${cfgoutputs_tup} doc/manpages.xsl:doc/manpages.xsl.in"
Jason Evans86abd0d2013-11-30 15:25:42 -0800955cfgoutputs_tup="${cfgoutputs_tup} doc/jemalloc.xml:doc/jemalloc.xml.in"
956cfgoutputs_tup="${cfgoutputs_tup} include/jemalloc/jemalloc_macros.h:include/jemalloc/jemalloc_macros.h.in"
957cfgoutputs_tup="${cfgoutputs_tup} include/jemalloc/jemalloc_protos.h:include/jemalloc/jemalloc_protos.h.in"
Jason Evans82e88d12014-09-07 19:55:03 -0700958cfgoutputs_tup="${cfgoutputs_tup} include/jemalloc/jemalloc_typedefs.h:include/jemalloc/jemalloc_typedefs.h.in"
David Goldblatt743d9402017-04-10 18:17:55 -0700959cfgoutputs_tup="${cfgoutputs_tup} include/jemalloc/internal/jemalloc_preamble.h"
Jason Evans86abd0d2013-11-30 15:25:42 -0800960cfgoutputs_tup="${cfgoutputs_tup} test/test.sh:test/test.sh.in"
961cfgoutputs_tup="${cfgoutputs_tup} test/include/test/jemalloc_test.h:test/include/test/jemalloc_test.h.in"
Jason Evansb0fd5012010-01-17 01:49:20 -0800962
Mike Hommeycf6032d2014-07-30 18:16:13 +0900963cfghdrs_in="include/jemalloc/jemalloc_defs.h.in"
964cfghdrs_in="${cfghdrs_in} include/jemalloc/internal/jemalloc_internal_defs.h.in"
Jason Evans909f0482017-05-04 11:20:43 -0700965cfghdrs_in="${cfghdrs_in} include/jemalloc/internal/private_symbols.sh"
Mike Hommeycf6032d2014-07-30 18:16:13 +0900966cfghdrs_in="${cfghdrs_in} include/jemalloc/internal/private_namespace.sh"
Mike Hommeycf6032d2014-07-30 18:16:13 +0900967cfghdrs_in="${cfghdrs_in} include/jemalloc/internal/public_namespace.sh"
968cfghdrs_in="${cfghdrs_in} include/jemalloc/internal/public_unnamespace.sh"
969cfghdrs_in="${cfghdrs_in} include/jemalloc/internal/size_classes.sh"
970cfghdrs_in="${cfghdrs_in} include/jemalloc/jemalloc_rename.sh"
971cfghdrs_in="${cfghdrs_in} include/jemalloc/jemalloc_mangle.sh"
972cfghdrs_in="${cfghdrs_in} include/jemalloc/jemalloc.sh"
973cfghdrs_in="${cfghdrs_in} test/include/test/jemalloc_test_defs.h.in"
Jason Evansb0fd5012010-01-17 01:49:20 -0800974
Jason Evans86abd0d2013-11-30 15:25:42 -0800975cfghdrs_out="include/jemalloc/jemalloc_defs.h"
976cfghdrs_out="${cfghdrs_out} include/jemalloc/jemalloc${install_suffix}.h"
Jason Evans909f0482017-05-04 11:20:43 -0700977cfghdrs_out="${cfghdrs_out} include/jemalloc/internal/private_symbols.awk"
978cfghdrs_out="${cfghdrs_out} include/jemalloc/internal/private_symbols_jet.awk"
Jason Evansf234dc52014-01-16 17:38:01 -0800979cfghdrs_out="${cfghdrs_out} include/jemalloc/internal/public_symbols.txt"
Jason Evans86abd0d2013-11-30 15:25:42 -0800980cfghdrs_out="${cfghdrs_out} include/jemalloc/internal/public_namespace.h"
981cfghdrs_out="${cfghdrs_out} include/jemalloc/internal/public_unnamespace.h"
Jason Evansb1726102012-02-28 16:50:47 -0800982cfghdrs_out="${cfghdrs_out} include/jemalloc/internal/size_classes.h"
Jason Evansf234dc52014-01-16 17:38:01 -0800983cfghdrs_out="${cfghdrs_out} include/jemalloc/jemalloc_protos_jet.h"
984cfghdrs_out="${cfghdrs_out} include/jemalloc/jemalloc_rename.h"
985cfghdrs_out="${cfghdrs_out} include/jemalloc/jemalloc_mangle.h"
986cfghdrs_out="${cfghdrs_out} include/jemalloc/jemalloc_mangle_jet.h"
987cfghdrs_out="${cfghdrs_out} include/jemalloc/internal/jemalloc_internal_defs.h"
Jason Evans80061b62013-12-09 13:21:08 -0800988cfghdrs_out="${cfghdrs_out} test/include/test/jemalloc_test_defs.h"
Jason Evansb0fd5012010-01-17 01:49:20 -0800989
Jason Evans86abd0d2013-11-30 15:25:42 -0800990cfghdrs_tup="include/jemalloc/jemalloc_defs.h:include/jemalloc/jemalloc_defs.h.in"
Mike Hommeycf6032d2014-07-30 18:16:13 +0900991cfghdrs_tup="${cfghdrs_tup} include/jemalloc/internal/jemalloc_internal_defs.h:include/jemalloc/internal/jemalloc_internal_defs.h.in"
992cfghdrs_tup="${cfghdrs_tup} test/include/test/jemalloc_test_defs.h:test/include/test/jemalloc_test_defs.h.in"
Jason Evansb0fd5012010-01-17 01:49:20 -0800993
Jason Evansb7924f52009-06-23 19:01:18 -0700994dnl Do not compile with debugging by default.
995AC_ARG_ENABLE([debug],
Jason Evanse0a08a12015-03-18 21:06:58 -0700996 [AS_HELP_STRING([--enable-debug],
Jason Evans3823eff2017-04-21 11:00:36 -0700997 [Build debugging code])],
Jason Evansb7924f52009-06-23 19:01:18 -0700998[if test "x$enable_debug" = "xno" ; then
999 enable_debug="0"
1000else
1001 enable_debug="1"
1002fi
1003],
1004[enable_debug="0"]
1005)
Jason Evans02e5dcf2015-02-15 20:12:06 -08001006if test "x$enable_debug" = "x1" ; then
1007 AC_DEFINE([JEMALLOC_DEBUG], [ ])
1008fi
Jason Evanse0a08a12015-03-18 21:06:58 -07001009if test "x$enable_debug" = "x1" ; then
1010 AC_DEFINE([JEMALLOC_DEBUG], [ ])
Jason Evanse0a08a12015-03-18 21:06:58 -07001011fi
Jason Evansb7924f52009-06-23 19:01:18 -07001012AC_SUBST([enable_debug])
1013
1014dnl Only optimize if not debugging.
Jason Evans194d6f92016-12-16 07:18:55 -08001015if test "x$enable_debug" = "x0" ; then
1016 if test "x$GCC" = "xyes" ; then
1017 JE_CFLAGS_ADD([-O3])
1018 JE_CXXFLAGS_ADD([-O3])
1019 JE_CFLAGS_ADD([-funroll-loops])
1020 elif test "x$je_cv_msvc" = "xyes" ; then
1021 JE_CFLAGS_ADD([-O2])
1022 JE_CXXFLAGS_ADD([-O2])
1023 else
1024 JE_CFLAGS_ADD([-O])
1025 JE_CXXFLAGS_ADD([-O])
Jason Evansb7924f52009-06-23 19:01:18 -07001026 fi
1027fi
1028
Jason Evansd073a322012-02-28 20:41:16 -08001029dnl Enable statistics calculation by default.
Jason Evansb7924f52009-06-23 19:01:18 -07001030AC_ARG_ENABLE([stats],
Jason Evans777c1912012-02-28 20:49:22 -08001031 [AS_HELP_STRING([--disable-stats],
1032 [Disable statistics calculation/reporting])],
Jason Evansb7924f52009-06-23 19:01:18 -07001033[if test "x$enable_stats" = "xno" ; then
1034 enable_stats="0"
1035else
1036 enable_stats="1"
1037fi
1038],
Jason Evansd073a322012-02-28 20:41:16 -08001039[enable_stats="1"]
Jason Evansb7924f52009-06-23 19:01:18 -07001040)
1041if test "x$enable_stats" = "x1" ; then
1042 AC_DEFINE([JEMALLOC_STATS], [ ])
1043fi
1044AC_SUBST([enable_stats])
1045
Jason Evans6109fe02010-02-10 10:37:56 -08001046dnl Do not enable profiling by default.
1047AC_ARG_ENABLE([prof],
1048 [AS_HELP_STRING([--enable-prof], [Enable allocation profiling])],
1049[if test "x$enable_prof" = "xno" ; then
1050 enable_prof="0"
1051else
1052 enable_prof="1"
1053fi
1054],
1055[enable_prof="0"]
1056)
Jason Evans77f350b2011-03-15 22:23:12 -07001057if test "x$enable_prof" = "x1" ; then
1058 backtrace_method=""
Jason Evansb27805b2010-02-10 18:15:53 -08001059else
Jason Evans77f350b2011-03-15 22:23:12 -07001060 backtrace_method="N/A"
Jason Evansb27805b2010-02-10 18:15:53 -08001061fi
Jason Evans77f350b2011-03-15 22:23:12 -07001062
Jason Evans6109fe02010-02-10 10:37:56 -08001063AC_ARG_ENABLE([prof-libunwind],
1064 [AS_HELP_STRING([--enable-prof-libunwind], [Use libunwind for backtracing])],
1065[if test "x$enable_prof_libunwind" = "xno" ; then
1066 enable_prof_libunwind="0"
1067else
1068 enable_prof_libunwind="1"
1069fi
1070],
1071[enable_prof_libunwind="0"]
1072)
Jason Evansca6bd4f2010-03-02 14:12:58 -08001073AC_ARG_WITH([static_libunwind],
1074 [AS_HELP_STRING([--with-static-libunwind=<libunwind.a>],
1075 [Path to static libunwind library; use rather than dynamically linking])],
1076if test "x$with_static_libunwind" = "xno" ; then
1077 LUNWIND="-lunwind"
1078else
1079 if test ! -f "$with_static_libunwind" ; then
1080 AC_MSG_ERROR([Static libunwind not found: $with_static_libunwind])
1081 fi
1082 LUNWIND="$with_static_libunwind"
1083fi,
1084 LUNWIND="-lunwind"
1085)
Jason Evans77f350b2011-03-15 22:23:12 -07001086if test "x$backtrace_method" = "x" -a "x$enable_prof_libunwind" = "x1" ; then
1087 AC_CHECK_HEADERS([libunwind.h], , [enable_prof_libunwind="0"])
1088 if test "x$LUNWIND" = "x-lunwind" ; then
Jason Evans194d6f92016-12-16 07:18:55 -08001089 AC_CHECK_LIB([unwind], [unw_backtrace], [JE_APPEND_VS(LIBS, $LUNWIND)],
Jason Evans77f350b2011-03-15 22:23:12 -07001090 [enable_prof_libunwind="0"])
1091 else
Jason Evans194d6f92016-12-16 07:18:55 -08001092 JE_APPEND_VS(LIBS, $LUNWIND)
Jason Evans77f350b2011-03-15 22:23:12 -07001093 fi
1094 if test "x${enable_prof_libunwind}" = "x1" ; then
1095 backtrace_method="libunwind"
1096 AC_DEFINE([JEMALLOC_PROF_LIBUNWIND], [ ])
1097 fi
1098fi
1099
1100AC_ARG_ENABLE([prof-libgcc],
1101 [AS_HELP_STRING([--disable-prof-libgcc],
1102 [Do not use libgcc for backtracing])],
1103[if test "x$enable_prof_libgcc" = "xno" ; then
1104 enable_prof_libgcc="0"
1105else
1106 enable_prof_libgcc="1"
1107fi
1108],
1109[enable_prof_libgcc="1"]
1110)
1111if test "x$backtrace_method" = "x" -a "x$enable_prof_libgcc" = "x1" \
1112 -a "x$GCC" = "xyes" ; then
1113 AC_CHECK_HEADERS([unwind.h], , [enable_prof_libgcc="0"])
Jason Evans664ef652017-02-18 00:02:23 -08001114 if test "x${enable_prof_libgcc}" = "x1" ; then
1115 AC_CHECK_LIB([gcc], [_Unwind_Backtrace], [JE_APPEND_VS(LIBS, -lgcc)], [enable_prof_libgcc="0"])
1116 fi
Jason Evans77f350b2011-03-15 22:23:12 -07001117 if test "x${enable_prof_libgcc}" = "x1" ; then
1118 backtrace_method="libgcc"
1119 AC_DEFINE([JEMALLOC_PROF_LIBGCC], [ ])
1120 fi
1121else
1122 enable_prof_libgcc="0"
1123fi
1124
1125AC_ARG_ENABLE([prof-gcc],
1126 [AS_HELP_STRING([--disable-prof-gcc],
1127 [Do not use gcc intrinsics for backtracing])],
1128[if test "x$enable_prof_gcc" = "xno" ; then
1129 enable_prof_gcc="0"
1130else
1131 enable_prof_gcc="1"
1132fi
1133],
1134[enable_prof_gcc="1"]
1135)
1136if test "x$backtrace_method" = "x" -a "x$enable_prof_gcc" = "x1" \
1137 -a "x$GCC" = "xyes" ; then
Jason Evans194d6f92016-12-16 07:18:55 -08001138 JE_CFLAGS_ADD([-fno-omit-frame-pointer])
Jason Evans77f350b2011-03-15 22:23:12 -07001139 backtrace_method="gcc intrinsics"
1140 AC_DEFINE([JEMALLOC_PROF_GCC], [ ])
1141else
1142 enable_prof_gcc="0"
1143fi
1144
1145if test "x$backtrace_method" = "x" ; then
1146 backtrace_method="none (disabling profiling)"
1147 enable_prof="0"
1148fi
1149AC_MSG_CHECKING([configured backtracing method])
1150AC_MSG_RESULT([$backtrace_method])
Jason Evans2dbecf12010-09-05 10:35:13 -07001151if test "x$enable_prof" = "x1" ; then
Jason Evansd76cfec2016-10-27 21:23:48 -07001152 dnl Heap profiling uses the log(3) function.
Jason Evans194d6f92016-12-16 07:18:55 -08001153 JE_APPEND_VS(LIBS, $LM)
Jason Evansd37d5ad2013-12-05 23:01:50 -08001154
Jason Evans2dbecf12010-09-05 10:35:13 -07001155 AC_DEFINE([JEMALLOC_PROF], [ ])
Jason Evans2dbecf12010-09-05 10:35:13 -07001156fi
1157AC_SUBST([enable_prof])
Jason Evans2dbecf12010-09-05 10:35:13 -07001158
Jason Evansd059b9d2015-07-24 18:21:42 -07001159dnl Indicate whether adjacent virtual memory mappings automatically coalesce
1160dnl (and fragment on demand).
1161if test "x${maps_coalesce}" = "x1" ; then
1162 AC_DEFINE([JEMALLOC_MAPS_COALESCE], [ ])
1163fi
1164
Jason Evansc86c8f42017-04-27 15:51:35 -07001165dnl Indicate whether to retain memory (rather than using munmap()) by default.
Jason Evansb9ab04a2017-04-26 16:26:12 -07001166if test "x$default_retain" = "x1" ; then
1167 AC_DEFINE([JEMALLOC_RETAIN], [ ])
Jason Evans59ae2762012-04-16 17:52:27 -07001168fi
Jason Evans59ae2762012-04-16 17:52:27 -07001169
Jason Evans4d434ad2014-04-15 12:09:48 -07001170dnl Enable allocation from DSS if supported by the OS.
1171have_dss="1"
Mike Hommey83c324a2012-04-12 10:13:03 +02001172dnl Check whether the BSD/SUSv1 sbrk() exists. If not, disable DSS support.
1173AC_CHECK_FUNC([sbrk], [have_sbrk="1"], [have_sbrk="0"])
1174if test "x$have_sbrk" = "x1" ; then
Steven Stewart-Gallus79230fe2014-06-19 16:11:43 -07001175 if test "x$sbrk_deprecated" = "x1" ; then
Jason Evans66688532013-12-03 21:49:36 -08001176 AC_MSG_RESULT([Disabling dss allocation because sbrk is deprecated])
Jason Evans4d434ad2014-04-15 12:09:48 -07001177 have_dss="0"
Jason Evans66688532013-12-03 21:49:36 -08001178 fi
Mike Hommey83c324a2012-04-12 10:13:03 +02001179else
Jason Evans4d434ad2014-04-15 12:09:48 -07001180 have_dss="0"
Mike Hommey83c324a2012-04-12 10:13:03 +02001181fi
1182
Jason Evans4d434ad2014-04-15 12:09:48 -07001183if test "x$have_dss" = "x1" ; then
Jason Evansb7924f52009-06-23 19:01:18 -07001184 AC_DEFINE([JEMALLOC_DSS], [ ])
1185fi
Jason Evansb7924f52009-06-23 19:01:18 -07001186
Jason Evans777c1912012-02-28 20:49:22 -08001187dnl Support the junk/zero filling option by default.
Jason Evansb7924f52009-06-23 19:01:18 -07001188AC_ARG_ENABLE([fill],
Jason Evans17c021c2016-04-05 18:18:15 -07001189 [AS_HELP_STRING([--disable-fill], [Disable support for junk/zero filling])],
Jason Evansb7924f52009-06-23 19:01:18 -07001190[if test "x$enable_fill" = "xno" ; then
1191 enable_fill="0"
1192else
1193 enable_fill="1"
1194fi
1195],
Jason Evans777c1912012-02-28 20:49:22 -08001196[enable_fill="1"]
Jason Evansb7924f52009-06-23 19:01:18 -07001197)
1198if test "x$enable_fill" = "x1" ; then
1199 AC_DEFINE([JEMALLOC_FILL], [ ])
1200fi
1201AC_SUBST([enable_fill])
1202
Jason Evansb1476112012-04-05 13:36:17 -07001203dnl Disable utrace(2)-based tracing by default.
1204AC_ARG_ENABLE([utrace],
1205 [AS_HELP_STRING([--enable-utrace], [Enable utrace(2)-based tracing])],
1206[if test "x$enable_utrace" = "xno" ; then
1207 enable_utrace="0"
1208else
1209 enable_utrace="1"
1210fi
1211],
1212[enable_utrace="0"]
1213)
1214JE_COMPILABLE([utrace(2)], [
1215#include <sys/types.h>
1216#include <sys/param.h>
1217#include <sys/time.h>
1218#include <sys/uio.h>
1219#include <sys/ktrace.h>
1220], [
1221 utrace((void *)0, 0);
1222], [je_cv_utrace])
1223if test "x${je_cv_utrace}" = "xno" ; then
1224 enable_utrace="0"
1225fi
1226if test "x$enable_utrace" = "x1" ; then
1227 AC_DEFINE([JEMALLOC_UTRACE], [ ])
1228fi
1229AC_SUBST([enable_utrace])
1230
Jason Evansb7924f52009-06-23 19:01:18 -07001231dnl Do not support the xmalloc option by default.
1232AC_ARG_ENABLE([xmalloc],
1233 [AS_HELP_STRING([--enable-xmalloc], [Support xmalloc option])],
1234[if test "x$enable_xmalloc" = "xno" ; then
1235 enable_xmalloc="0"
1236else
1237 enable_xmalloc="1"
1238fi
1239],
1240[enable_xmalloc="0"]
1241)
1242if test "x$enable_xmalloc" = "x1" ; then
1243 AC_DEFINE([JEMALLOC_XMALLOC], [ ])
1244fi
1245AC_SUBST([enable_xmalloc])
1246
Jason Evans8a03cf02015-05-04 09:58:36 -07001247dnl Support cache-oblivious allocation alignment by default.
1248AC_ARG_ENABLE([cache-oblivious],
1249 [AS_HELP_STRING([--disable-cache-oblivious],
1250 [Disable support for cache-oblivious allocation alignment])],
1251[if test "x$enable_cache_oblivious" = "xno" ; then
1252 enable_cache_oblivious="0"
1253else
1254 enable_cache_oblivious="1"
1255fi
1256],
1257[enable_cache_oblivious="1"]
1258)
1259if test "x$enable_cache_oblivious" = "x1" ; then
1260 AC_DEFINE([JEMALLOC_CACHE_OBLIVIOUS], [ ])
1261fi
1262AC_SUBST([enable_cache_oblivious])
1263
David T. Goldblatt9761b442017-07-19 16:36:46 -07001264dnl Do not log by default.
1265AC_ARG_ENABLE([log],
1266 [AS_HELP_STRING([--enable-log], [Support debug logging])],
1267[if test "x$enable_log" = "xno" ; then
1268 enable_log="0"
1269else
1270 enable_log="1"
1271fi
1272],
1273[enable_log="0"]
1274)
1275if test "x$enable_log" = "x1" ; then
1276 AC_DEFINE([JEMALLOC_LOG], [ ])
1277fi
1278AC_SUBST([enable_log])
Elliot Ronaghan1167e9e2016-06-17 13:28:39 -07001279
1280
1281JE_COMPILABLE([a program using __builtin_unreachable], [
1282void foo (void) {
1283 __builtin_unreachable();
1284}
1285], [
1286 {
1287 foo();
1288 }
1289], [je_cv_gcc_builtin_unreachable])
Elliot Ronaghanc096ccf2016-07-12 15:52:18 -07001290if test "x${je_cv_gcc_builtin_unreachable}" = "xyes" ; then
Elliot Ronaghan1167e9e2016-06-17 13:28:39 -07001291 AC_DEFINE([JEMALLOC_INTERNAL_UNREACHABLE], [__builtin_unreachable])
1292else
1293 AC_DEFINE([JEMALLOC_INTERNAL_UNREACHABLE], [abort])
1294fi
1295
Mike Hommey8f50ec82014-06-04 12:12:55 +09001296dnl ============================================================================
1297dnl Check for __builtin_ffsl(), then ffsl(3), and fail if neither are found.
1298dnl One of those two functions should (theoretically) exist on all platforms
1299dnl that jemalloc currently has a chance of functioning on without modification.
Jason Evansecae1232016-02-20 23:41:33 -08001300dnl We additionally assume ffs[ll]() or __builtin_ffs[ll]() are defined if
Mike Hommey8f50ec82014-06-04 12:12:55 +09001301dnl ffsl() or __builtin_ffsl() are defined, respectively.
1302JE_COMPILABLE([a program using __builtin_ffsl], [
1303#include <stdio.h>
1304#include <strings.h>
1305#include <string.h>
1306], [
1307 {
1308 int rv = __builtin_ffsl(0x08);
1309 printf("%d\n", rv);
1310 }
1311], [je_cv_gcc_builtin_ffsl])
Steven Stewart-Gallus79230fe2014-06-19 16:11:43 -07001312if test "x${je_cv_gcc_builtin_ffsl}" = "xyes" ; then
Jason Evansecae1232016-02-20 23:41:33 -08001313 AC_DEFINE([JEMALLOC_INTERNAL_FFSLL], [__builtin_ffsll])
Mike Hommey8f50ec82014-06-04 12:12:55 +09001314 AC_DEFINE([JEMALLOC_INTERNAL_FFSL], [__builtin_ffsl])
1315 AC_DEFINE([JEMALLOC_INTERNAL_FFS], [__builtin_ffs])
1316else
1317 JE_COMPILABLE([a program using ffsl], [
1318 #include <stdio.h>
1319 #include <strings.h>
1320 #include <string.h>
1321 ], [
1322 {
1323 int rv = ffsl(0x08);
1324 printf("%d\n", rv);
1325 }
1326 ], [je_cv_function_ffsl])
Steven Stewart-Gallus79230fe2014-06-19 16:11:43 -07001327 if test "x${je_cv_function_ffsl}" = "xyes" ; then
Jason Evansecae1232016-02-20 23:41:33 -08001328 AC_DEFINE([JEMALLOC_INTERNAL_FFSLL], [ffsll])
Mike Hommey8f50ec82014-06-04 12:12:55 +09001329 AC_DEFINE([JEMALLOC_INTERNAL_FFSL], [ffsl])
1330 AC_DEFINE([JEMALLOC_INTERNAL_FFS], [ffs])
1331 else
1332 AC_MSG_ERROR([Cannot build without ffsl(3) or __builtin_ffsl()])
1333 fi
1334fi
1335
Jason Evansfc0b3b72014-10-09 17:54:06 -07001336AC_ARG_WITH([lg_quantum],
1337 [AS_HELP_STRING([--with-lg-quantum=<lg-quantum>],
1338 [Base 2 log of minimum allocation alignment])],
Jason Evans81e54752014-10-10 22:34:25 -07001339 [LG_QUANTA="$with_lg_quantum"],
1340 [LG_QUANTA="3 4"])
1341if test "x$with_lg_quantum" != "x" ; then
1342 AC_DEFINE_UNQUOTED([LG_QUANTUM], [$with_lg_quantum])
1343fi
Jason Evansfc0b3b72014-10-09 17:54:06 -07001344
1345AC_ARG_WITH([lg_page],
1346 [AS_HELP_STRING([--with-lg-page=<lg-page>], [Base 2 log of system page size])],
1347 [LG_PAGE="$with_lg_page"], [LG_PAGE="detect"])
Jason Evansb0808d52015-02-03 12:39:31 -08001348if test "x$LG_PAGE" = "xdetect"; then
Jason Evansfc0b3b72014-10-09 17:54:06 -07001349 AC_CACHE_CHECK([LG_PAGE],
1350 [je_cv_lg_page],
Jason Evans6684cac2012-03-05 12:15:36 -08001351 AC_RUN_IFELSE([AC_LANG_PROGRAM(
Mike Hommeya19e87f2012-04-21 21:27:46 -07001352[[
Mike Hommeyfd97b1d2012-04-30 12:38:31 +02001353#include <strings.h>
Mike Hommeya19e87f2012-04-21 21:27:46 -07001354#ifdef _WIN32
1355#include <windows.h>
1356#else
Jason Evansb7924f52009-06-23 19:01:18 -07001357#include <unistd.h>
Mike Hommeya19e87f2012-04-21 21:27:46 -07001358#endif
1359#include <stdio.h>
Jason Evans6684cac2012-03-05 12:15:36 -08001360]],
1361[[
Garrett Cooper72c1e592012-12-02 17:57:28 -08001362 int result;
Jason Evansb7924f52009-06-23 19:01:18 -07001363 FILE *f;
1364
Mike Hommeya19e87f2012-04-21 21:27:46 -07001365#ifdef _WIN32
1366 SYSTEM_INFO si;
1367 GetSystemInfo(&si);
1368 result = si.dwPageSize;
1369#else
Jason Evansb7924f52009-06-23 19:01:18 -07001370 result = sysconf(_SC_PAGESIZE);
Mike Hommeya19e87f2012-04-21 21:27:46 -07001371#endif
Jason Evansb7924f52009-06-23 19:01:18 -07001372 if (result == -1) {
1373 return 1;
1374 }
Mike Hommey8f50ec82014-06-04 12:12:55 +09001375 result = JEMALLOC_INTERNAL_FFSL(result) - 1;
Mike Hommeya19e87f2012-04-21 21:27:46 -07001376
Jason Evansb7924f52009-06-23 19:01:18 -07001377 f = fopen("conftest.out", "w");
1378 if (f == NULL) {
1379 return 1;
1380 }
rustyxbc498632016-01-30 13:38:33 +01001381 fprintf(f, "%d", result);
Jason Evans3cc1f1a2012-04-03 22:30:05 -07001382 fclose(f);
Jason Evansb7924f52009-06-23 19:01:18 -07001383
1384 return 0;
1385]])],
Jason Evansfc0b3b72014-10-09 17:54:06 -07001386 [je_cv_lg_page=`cat conftest.out`],
1387 [je_cv_lg_page=undefined],
1388 [je_cv_lg_page=12]))
Jason Evans6684cac2012-03-05 12:15:36 -08001389fi
Jason Evansfc0b3b72014-10-09 17:54:06 -07001390if test "x${je_cv_lg_page}" != "x" ; then
1391 LG_PAGE="${je_cv_lg_page}"
1392fi
1393if test "x${LG_PAGE}" != "xundefined" ; then
1394 AC_DEFINE_UNQUOTED([LG_PAGE], [$LG_PAGE])
1395else
1396 AC_MSG_ERROR([cannot determine value for LG_PAGE])
1397fi
1398
Jason Evansc1baa0a2016-11-17 13:36:17 -08001399AC_ARG_WITH([lg_hugepage],
1400 [AS_HELP_STRING([--with-lg-hugepage=<lg-hugepage>],
charsyama8c9e9c2017-03-01 20:58:38 +09001401 [Base 2 log of system huge page size])],
Jason Evansc1baa0a2016-11-17 13:36:17 -08001402 [je_cv_lg_hugepage="${with_lg_hugepage}"],
1403 [je_cv_lg_hugepage=""])
1404if test "x${je_cv_lg_hugepage}" = "x" ; then
1405 dnl Look in /proc/meminfo (Linux-specific) for information on the default huge
1406 dnl page size, if any. The relevant line looks like:
1407 dnl
1408 dnl Hugepagesize: 2048 kB
1409 if test -e "/proc/meminfo" ; then
1410 hpsk=[`cat /proc/meminfo 2>/dev/null | \
1411 grep -e '^Hugepagesize:[[:space:]]\+[0-9]\+[[:space:]]kB$' | \
1412 awk '{print $2}'`]
1413 if test "x${hpsk}" != "x" ; then
1414 je_cv_lg_hugepage=10
1415 while test "${hpsk}" -gt 1 ; do
1416 hpsk="$((hpsk / 2))"
1417 je_cv_lg_hugepage="$((je_cv_lg_hugepage + 1))"
1418 done
1419 fi
1420 fi
1421
1422 dnl Set default if unable to automatically configure.
1423 if test "x${je_cv_lg_hugepage}" = "x" ; then
1424 je_cv_lg_hugepage=21
1425 fi
1426fi
Jason Evansc99e5702017-06-23 12:35:17 -07001427if test "x${LG_PAGE}" != "xundefined" -a \
1428 "${je_cv_lg_hugepage}" -lt "${LG_PAGE}" ; then
1429 AC_MSG_ERROR([Huge page size (2^${je_cv_lg_hugepage}) must be at least page size (2^${LG_PAGE})])
1430fi
Jason Evansc1baa0a2016-11-17 13:36:17 -08001431AC_DEFINE_UNQUOTED([LG_HUGEPAGE], [${je_cv_lg_hugepage}])
1432
Jason Evansfc0b3b72014-10-09 17:54:06 -07001433AC_ARG_WITH([lg_page_sizes],
1434 [AS_HELP_STRING([--with-lg-page-sizes=<lg-page-sizes>],
1435 [Base 2 logs of system page sizes to support])],
1436 [LG_PAGE_SIZES="$with_lg_page_sizes"], [LG_PAGE_SIZES="$LG_PAGE"])
1437
Jason Evansb7924f52009-06-23 19:01:18 -07001438dnl ============================================================================
1439dnl jemalloc configuration.
Tamir Duberstein96f14682017-07-06 14:50:55 -04001440dnl
Jason Evansa40bc7a2010-03-02 13:01:16 -08001441
Jason Evans434ea642016-03-14 20:19:11 -07001442AC_ARG_WITH([version],
1443 [AS_HELP_STRING([--with-version=<major>.<minor>.<bugfix>-<nrev>-g<gid>],
1444 [Version string])],
1445 [
1446 echo "${with_version}" | grep ['^[0-9]\+\.[0-9]\+\.[0-9]\+-[0-9]\+-g[0-9a-f]\+$'] 2>&1 1>/dev/null
Jason Evans31baedb2017-05-03 10:07:39 -07001447 if test $? -eq 0 ; then
1448 echo "$with_version" > "${objroot}VERSION"
1449 else
1450 echo "${with_version}" | grep ['^VERSION$'] 2>&1 1>/dev/null
1451 if test $? -ne 0 ; then
1452 AC_MSG_ERROR([${with_version} does not match <major>.<minor>.<bugfix>-<nrev>-g<gid> or VERSION])
1453 fi
Jason Evansa5a658a2014-09-02 15:07:07 -07001454 fi
Jason Evans434ea642016-03-14 20:19:11 -07001455 ], [
1456 dnl Set VERSION if source directory is inside a git repository.
1457 if test "x`test ! \"${srcroot}\" && cd \"${srcroot}\"; git rev-parse --is-inside-work-tree 2>/dev/null`" = "xtrue" ; then
1458 dnl Pattern globs aren't powerful enough to match both single- and
1459 dnl double-digit version numbers, so iterate over patterns to support up
1460 dnl to version 99.99.99 without any accidental matches.
1461 for pattern in ['[0-9].[0-9].[0-9]' '[0-9].[0-9].[0-9][0-9]' \
1462 '[0-9].[0-9][0-9].[0-9]' '[0-9].[0-9][0-9].[0-9][0-9]' \
1463 '[0-9][0-9].[0-9].[0-9]' '[0-9][0-9].[0-9].[0-9][0-9]' \
1464 '[0-9][0-9].[0-9][0-9].[0-9]' \
1465 '[0-9][0-9].[0-9][0-9].[0-9][0-9]']; do
1466 (test ! "${srcroot}" && cd "${srcroot}"; git describe --long --abbrev=40 --match="${pattern}") > "${objroot}VERSION.tmp" 2>/dev/null
1467 if test $? -eq 0 ; then
1468 mv "${objroot}VERSION.tmp" "${objroot}VERSION"
1469 break
1470 fi
1471 done
1472 fi
1473 rm -f "${objroot}VERSION.tmp"
1474 ])
1475
Dan McGregorf8880312014-12-23 16:10:08 -06001476if test ! -e "${objroot}VERSION" ; then
1477 if test ! -e "${srcroot}VERSION" ; then
1478 AC_MSG_RESULT(
1479 [Missing VERSION file, and unable to generate it; creating bogus VERSION])
1480 echo "0.0.0-0-g0000000000000000000000000000000000000000" > "${objroot}VERSION"
1481 else
1482 cp ${srcroot}VERSION ${objroot}VERSION
1483 fi
Jason Evansa5a658a2014-09-02 15:07:07 -07001484fi
Dan McGregorf8880312014-12-23 16:10:08 -06001485jemalloc_version=`cat "${objroot}VERSION"`
Jason Evansa40bc7a2010-03-02 13:01:16 -08001486jemalloc_version_major=`echo ${jemalloc_version} | tr ".g-" " " | awk '{print [$]1}'`
1487jemalloc_version_minor=`echo ${jemalloc_version} | tr ".g-" " " | awk '{print [$]2}'`
1488jemalloc_version_bugfix=`echo ${jemalloc_version} | tr ".g-" " " | awk '{print [$]3}'`
1489jemalloc_version_nrev=`echo ${jemalloc_version} | tr ".g-" " " | awk '{print [$]4}'`
1490jemalloc_version_gid=`echo ${jemalloc_version} | tr ".g-" " " | awk '{print [$]5}'`
Jason Evansb7924f52009-06-23 19:01:18 -07001491AC_SUBST([jemalloc_version])
Jason Evansa40bc7a2010-03-02 13:01:16 -08001492AC_SUBST([jemalloc_version_major])
1493AC_SUBST([jemalloc_version_minor])
1494AC_SUBST([jemalloc_version_bugfix])
1495AC_SUBST([jemalloc_version_nrev])
1496AC_SUBST([jemalloc_version_gid])
Jason Evansb7924f52009-06-23 19:01:18 -07001497
1498dnl ============================================================================
1499dnl Configure pthreads.
1500
Mike Hommeya19e87f2012-04-21 21:27:46 -07001501if test "x$abi" != "xpecoff" ; then
Qi Wangb693c782017-03-17 12:42:33 -07001502 AC_DEFINE([JEMALLOC_HAVE_PTHREAD], [ ])
Mike Hommeya19e87f2012-04-21 21:27:46 -07001503 AC_CHECK_HEADERS([pthread.h], , [AC_MSG_ERROR([pthread.h is missing])])
1504 dnl Some systems may embed pthreads functionality in libc; check for libpthread
1505 dnl first, but try libc too before failing.
Jason Evans194d6f92016-12-16 07:18:55 -08001506 AC_CHECK_LIB([pthread], [pthread_create], [JE_APPEND_VS(LIBS, -lpthread)],
Mike Hommeya19e87f2012-04-21 21:27:46 -07001507 [AC_SEARCH_LIBS([pthread_create], , ,
1508 AC_MSG_ERROR([libpthread is missing]))])
Qi Wangb693c782017-03-17 12:42:33 -07001509 wrap_syms="${wrap_syms} pthread_create"
Jason Evans13685ab2017-06-08 22:07:21 -07001510 have_pthread="1"
Qi Wangb693c782017-03-17 12:42:33 -07001511 dnl Check if we have dlsym support.
1512 have_dlsym="1"
1513 AC_CHECK_HEADERS([dlfcn.h],
1514 AC_CHECK_FUNC([dlsym], [],
1515 [AC_CHECK_LIB([dl], [dlsym], [LIBS="$LIBS -ldl"], [have_dlsym="0"])]),
1516 [have_dlsym="0"])
1517 if test "x$have_dlsym" = "x1" ; then
1518 AC_DEFINE([JEMALLOC_HAVE_DLSYM], [ ])
1519 fi
Jason Evans5234be22016-11-17 15:14:57 -08001520 JE_COMPILABLE([pthread_atfork(3)], [
1521#include <pthread.h>
1522], [
1523 pthread_atfork((void *)0, (void *)0, (void *)0);
1524], [je_cv_pthread_atfork])
1525 if test "x${je_cv_pthread_atfork}" = "xyes" ; then
1526 AC_DEFINE([JEMALLOC_HAVE_PTHREAD_ATFORK], [ ])
1527 fi
Qi Wanga3f49772017-06-23 09:58:35 -07001528 dnl Check if pthread_setname_np is available with the expected API.
1529 JE_COMPILABLE([pthread_setname_np(3)], [
1530#include <pthread.h>
1531], [
1532 pthread_setname_np(pthread_self(), "setname_test");
1533], [je_cv_pthread_setname_np])
1534 if test "x${je_cv_pthread_setname_np}" = "xyes" ; then
1535 AC_DEFINE([JEMALLOC_HAVE_PTHREAD_SETNAME_NP], [ ])
1536 fi
Mike Hommeya19e87f2012-04-21 21:27:46 -07001537fi
Jason Evansb7924f52009-06-23 19:01:18 -07001538
Jason Evans4a068642017-02-27 17:35:19 -08001539JE_APPEND_VS(CPPFLAGS, -D_REENTRANT)
Jason Evansb7924f52009-06-23 19:01:18 -07001540
Jason Evansc1e9cf42016-05-03 21:28:20 -07001541dnl Check whether clock_gettime(2) is in libc or librt.
1542AC_SEARCH_LIBS([clock_gettime], [rt])
Jason Evans345c1b02015-09-15 14:59:56 -07001543
Elliot Ronaghanae331472016-06-14 14:20:28 -07001544dnl Cray wrapper compiler often adds `-lrt` when using `-static`. Check with
1545dnl `-dynamic` as well in case a user tries to dynamically link in jemalloc
1546if test "x$je_cv_cray_prgenv_wrapper" = "xyes" ; then
1547 if test "$ac_cv_search_clock_gettime" != "-lrt"; then
Jason Evans194d6f92016-12-16 07:18:55 -08001548 JE_CFLAGS_SAVE()
Elliot Ronaghanae331472016-06-14 14:20:28 -07001549
1550 unset ac_cv_search_clock_gettime
Jason Evans194d6f92016-12-16 07:18:55 -08001551 JE_CFLAGS_ADD([-dynamic])
Elliot Ronaghanae331472016-06-14 14:20:28 -07001552 AC_SEARCH_LIBS([clock_gettime], [rt])
1553
Jason Evans194d6f92016-12-16 07:18:55 -08001554 JE_CFLAGS_RESTORE()
Elliot Ronaghanae331472016-06-14 14:20:28 -07001555 fi
1556fi
1557
Jason Evans6c803212016-10-29 22:55:08 -07001558dnl check for CLOCK_MONOTONIC_COARSE (Linux-specific).
1559JE_COMPILABLE([clock_gettime(CLOCK_MONOTONIC_COARSE, ...)], [
Jason Evanse0164bc2016-10-07 08:47:16 -07001560#include <time.h>
1561], [
1562 struct timespec ts;
1563
Jason Evans6c803212016-10-29 22:55:08 -07001564 clock_gettime(CLOCK_MONOTONIC_COARSE, &ts);
1565], [je_cv_clock_monotonic_coarse])
1566if test "x${je_cv_clock_monotonic_coarse}" = "xyes" ; then
1567 AC_DEFINE([JEMALLOC_HAVE_CLOCK_MONOTONIC_COARSE])
Jason Evanse0164bc2016-10-07 08:47:16 -07001568fi
1569
1570dnl check for CLOCK_MONOTONIC.
1571JE_COMPILABLE([clock_gettime(CLOCK_MONOTONIC, ...)], [
1572#include <unistd.h>
1573#include <time.h>
1574], [
1575 struct timespec ts;
1576
1577 clock_gettime(CLOCK_MONOTONIC, &ts);
1578#if !defined(_POSIX_MONOTONIC_CLOCK) || _POSIX_MONOTONIC_CLOCK < 0
1579# error _POSIX_MONOTONIC_CLOCK missing/invalid
1580#endif
1581], [je_cv_clock_monotonic])
1582if test "x${je_cv_clock_monotonic}" = "xyes" ; then
1583 AC_DEFINE([JEMALLOC_HAVE_CLOCK_MONOTONIC])
1584fi
1585
1586dnl Check for mach_absolute_time().
1587JE_COMPILABLE([mach_absolute_time()], [
1588#include <mach/mach_time.h>
1589], [
1590 mach_absolute_time();
1591], [je_cv_mach_absolute_time])
1592if test "x${je_cv_mach_absolute_time}" = "xyes" ; then
1593 AC_DEFINE([JEMALLOC_HAVE_MACH_ABSOLUTE_TIME])
1594fi
1595
Jason Evansacb7b1f2016-12-03 16:47:36 -08001596dnl Use syscall(2) (if available) by default.
1597AC_ARG_ENABLE([syscall],
1598 [AS_HELP_STRING([--disable-syscall], [Disable use of syscall(2)])],
1599[if test "x$enable_syscall" = "xno" ; then
1600 enable_syscall="0"
1601else
1602 enable_syscall="1"
1603fi
1604],
1605[enable_syscall="1"]
1606)
1607if test "x$enable_syscall" = "x1" ; then
1608 dnl Check if syscall(2) is usable. Treat warnings as errors, so that e.g. OS
1609 dnl X 10.12's deprecation warning prevents use.
Jason Evans194d6f92016-12-16 07:18:55 -08001610 JE_CFLAGS_SAVE()
1611 JE_CFLAGS_ADD([-Werror])
Jason Evansacb7b1f2016-12-03 16:47:36 -08001612 JE_COMPILABLE([syscall(2)], [
Jason Evansd82f2b32016-11-02 19:18:33 -07001613#include <sys/syscall.h>
1614#include <unistd.h>
1615], [
1616 syscall(SYS_write, 2, "hello", 5);
1617],
Jason Evansacb7b1f2016-12-03 16:47:36 -08001618 [je_cv_syscall])
Jason Evans194d6f92016-12-16 07:18:55 -08001619 JE_CFLAGS_RESTORE()
Jason Evansacb7b1f2016-12-03 16:47:36 -08001620 if test "x$je_cv_syscall" = "xyes" ; then
1621 AC_DEFINE([JEMALLOC_USE_SYSCALL], [ ])
1622 fi
Jason Evansd82f2b32016-11-02 19:18:33 -07001623fi
1624
Daniel Micayb74041f2014-12-09 17:41:34 -05001625dnl Check if the GNU-specific secure_getenv function exists.
1626AC_CHECK_FUNC([secure_getenv],
1627 [have_secure_getenv="1"],
1628 [have_secure_getenv="0"]
1629 )
1630if test "x$have_secure_getenv" = "x1" ; then
1631 AC_DEFINE([JEMALLOC_HAVE_SECURE_GETENV], [ ])
1632fi
1633
Qi Wangec532e22017-02-02 17:02:05 -08001634dnl Check if the GNU-specific sched_getcpu function exists.
1635AC_CHECK_FUNC([sched_getcpu],
1636 [have_sched_getcpu="1"],
1637 [have_sched_getcpu="0"]
1638 )
1639if test "x$have_sched_getcpu" = "x1" ; then
1640 AC_DEFINE([JEMALLOC_HAVE_SCHED_GETCPU], [ ])
1641fi
1642
Qi Wangb693c782017-03-17 12:42:33 -07001643dnl Check if the GNU-specific sched_setaffinity function exists.
1644AC_CHECK_FUNC([sched_setaffinity],
1645 [have_sched_setaffinity="1"],
1646 [have_sched_setaffinity="0"]
1647 )
1648if test "x$have_sched_setaffinity" = "x1" ; then
1649 AC_DEFINE([JEMALLOC_HAVE_SCHED_SETAFFINITY], [ ])
1650fi
1651
Daniel Micayb74041f2014-12-09 17:41:34 -05001652dnl Check if the Solaris/BSD issetugid function exists.
1653AC_CHECK_FUNC([issetugid],
1654 [have_issetugid="1"],
1655 [have_issetugid="0"]
1656 )
1657if test "x$have_issetugid" = "x1" ; then
1658 AC_DEFINE([JEMALLOC_HAVE_ISSETUGID], [ ])
1659fi
1660
Jason Evanscd9a1342012-03-21 18:33:03 -07001661dnl Check whether the BSD-specific _malloc_thread_cleanup() exists. If so, use
1662dnl it rather than pthreads TSD cleanup functions to support cleanup during
1663dnl thread exit, in order to avoid pthreads library recursion during
1664dnl bootstrapping.
Jason Evanscd9a1342012-03-21 18:33:03 -07001665AC_CHECK_FUNC([_malloc_thread_cleanup],
1666 [have__malloc_thread_cleanup="1"],
1667 [have__malloc_thread_cleanup="0"]
1668 )
1669if test "x$have__malloc_thread_cleanup" = "x1" ; then
1670 AC_DEFINE([JEMALLOC_MALLOC_THREAD_CLEANUP], [ ])
Jason Evans909f0482017-05-04 11:20:43 -07001671 wrap_syms="${wrap_syms} _malloc_thread_cleanup"
Jason Evanscd9a1342012-03-21 18:33:03 -07001672 force_tls="1"
1673fi
1674
Jason Evans41b6afb2012-02-02 22:04:57 -08001675dnl Check whether the BSD-specific _pthread_mutex_init_calloc_cb() exists. If
1676dnl so, mutex initialization causes allocation, and we need to implement this
1677dnl callback function in order to prevent recursive allocation.
1678AC_CHECK_FUNC([_pthread_mutex_init_calloc_cb],
1679 [have__pthread_mutex_init_calloc_cb="1"],
1680 [have__pthread_mutex_init_calloc_cb="0"]
1681 )
1682if test "x$have__pthread_mutex_init_calloc_cb" = "x1" ; then
1683 AC_DEFINE([JEMALLOC_MUTEX_INIT_CB])
Jason Evans909f0482017-05-04 11:20:43 -07001684 wrap_syms="${wrap_syms} _malloc_prefork _malloc_postfork"
Jason Evans41b6afb2012-02-02 22:04:57 -08001685fi
1686
Jason Evans0fee70d2012-02-13 12:36:11 -08001687dnl Disable lazy locking by default.
Jason Evansb7924f52009-06-23 19:01:18 -07001688AC_ARG_ENABLE([lazy_lock],
Jason Evans0fee70d2012-02-13 12:36:11 -08001689 [AS_HELP_STRING([--enable-lazy-lock],
1690 [Enable lazy locking (only lock when multi-threaded)])],
Jason Evansb7924f52009-06-23 19:01:18 -07001691[if test "x$enable_lazy_lock" = "xno" ; then
1692 enable_lazy_lock="0"
1693else
1694 enable_lazy_lock="1"
1695fi
1696],
Mike Hommeyac5db022015-08-11 14:01:59 +09001697[enable_lazy_lock=""]
Jason Evansb7924f52009-06-23 19:01:18 -07001698)
Jason Evanseee1ca62016-11-02 08:54:07 -07001699if test "x${enable_lazy_lock}" = "x" ; then
1700 if test "x${force_lazy_lock}" = "x1" ; then
1701 AC_MSG_RESULT([Forcing lazy-lock to avoid allocator/threading bootstrap issues])
1702 enable_lazy_lock="1"
1703 else
1704 enable_lazy_lock="0"
1705 fi
1706fi
1707if test "x${enable_lazy_lock}" = "x1" -a "x${abi}" = "xpecoff" ; then
1708 AC_MSG_RESULT([Forcing no lazy-lock because thread creation monitoring is unimplemented])
1709 enable_lazy_lock="0"
Jason Evansfd4fcef2012-03-23 17:40:58 -07001710fi
Jason Evansb7924f52009-06-23 19:01:18 -07001711if test "x$enable_lazy_lock" = "x1" ; then
Qi Wangb693c782017-03-17 12:42:33 -07001712 if test "x$have_dlsym" = "x1" ; then
1713 AC_DEFINE([JEMALLOC_LAZY_LOCK], [ ])
1714 else
1715 AC_MSG_ERROR([Missing dlsym support: lazy-lock cannot be enabled.])
Mike Hommeya19e87f2012-04-21 21:27:46 -07001716 fi
Jason Evansb7924f52009-06-23 19:01:18 -07001717fi
1718AC_SUBST([enable_lazy_lock])
1719
Jason Evansb2a84532017-04-21 10:07:01 -07001720dnl Automatically configure TLS.
1721if test "x${force_tls}" = "x1" ; then
1722 enable_tls="1"
1723elif test "x${force_tls}" = "x0" ; then
Jason Evans78d815c2010-01-17 14:06:20 -08001724 enable_tls="0"
1725else
1726 enable_tls="1"
1727fi
Jason Evans78d815c2010-01-17 14:06:20 -08001728if test "x${enable_tls}" = "x1" ; then
1729AC_MSG_CHECKING([for TLS])
Jason Evans6684cac2012-03-05 12:15:36 -08001730AC_COMPILE_IFELSE([AC_LANG_PROGRAM(
Jason Evans78d815c2010-01-17 14:06:20 -08001731[[
1732 __thread int x;
1733]], [[
1734 x = 42;
1735
1736 return 0;
1737]])],
1738 AC_MSG_RESULT([yes]),
1739 AC_MSG_RESULT([no])
1740 enable_tls="0")
Mike Hommeyac5db022015-08-11 14:01:59 +09001741else
1742 enable_tls="0"
Jason Evans78d815c2010-01-17 14:06:20 -08001743fi
Jason Evansb267d0f2010-08-13 15:42:29 -07001744AC_SUBST([enable_tls])
Jason Evanse24c7af2012-03-19 10:21:17 -07001745if test "x${enable_tls}" = "x1" ; then
1746 AC_DEFINE_UNQUOTED([JEMALLOC_TLS], [ ])
Jason Evans78d815c2010-01-17 14:06:20 -08001747fi
1748
Jason Evans2dbecf12010-09-05 10:35:13 -07001749dnl ============================================================================
Chih-hung Hsieh59cd80e2014-12-05 17:42:41 -08001750dnl Check for C11 atomics.
1751
1752JE_COMPILABLE([C11 atomics], [
1753#include <stdint.h>
1754#if (__STDC_VERSION__ >= 201112L) && !defined(__STDC_NO_ATOMICS__)
1755#include <stdatomic.h>
1756#else
1757#error Atomics not available
1758#endif
1759], [
1760 uint64_t *p = (uint64_t *)0;
1761 uint64_t x = 1;
1762 volatile atomic_uint_least64_t *a = (volatile atomic_uint_least64_t *)p;
1763 uint64_t r = atomic_fetch_add(a, x) + x;
Jason Evansf4086432017-01-19 18:15:45 -08001764 return r == 0;
David Goldblattd4ac7582017-01-25 09:54:27 -08001765], [je_cv_c11_atomics])
1766if test "x${je_cv_c11_atomics}" = "xyes" ; then
1767 AC_DEFINE([JEMALLOC_C11_ATOMICS])
Chih-hung Hsieh59cd80e2014-12-05 17:42:41 -08001768fi
1769
1770dnl ============================================================================
David Goldblattd4ac7582017-01-25 09:54:27 -08001771dnl Check for GCC-style __atomic atomics.
Jason Evansb57d3ec2012-04-17 13:17:54 -07001772
David Goldblattd4ac7582017-01-25 09:54:27 -08001773JE_COMPILABLE([GCC __atomic atomics], [
Jason Evansb57d3ec2012-04-17 13:17:54 -07001774], [
David Goldblattd4ac7582017-01-25 09:54:27 -08001775 int x = 0;
1776 int val = 1;
1777 int y = __atomic_fetch_add(&x, val, __ATOMIC_RELAXED);
1778 int after_add = x;
1779 return after_add == 1;
1780], [je_cv_gcc_atomic_atomics])
1781if test "x${je_cv_gcc_atomic_atomics}" = "xyes" ; then
1782 AC_DEFINE([JEMALLOC_GCC_ATOMIC_ATOMICS])
1783fi
1784
1785dnl ============================================================================
1786dnl Check for GCC-style __sync atomics.
1787
1788JE_COMPILABLE([GCC __sync atomics], [
1789], [
1790 int x = 0;
1791 int before_add = __sync_fetch_and_add(&x, 1);
1792 int after_add = x;
1793 return (before_add == 0) && (after_add == 1);
1794], [je_cv_gcc_sync_atomics])
1795if test "x${je_cv_gcc_sync_atomics}" = "xyes" ; then
1796 AC_DEFINE([JEMALLOC_GCC_SYNC_ATOMICS])
Jason Evansb57d3ec2012-04-17 13:17:54 -07001797fi
1798
1799dnl ============================================================================
Jason Evans763baa62011-03-18 19:10:31 -07001800dnl Check for atomic(3) operations as provided on Darwin.
David Goldblattd4ac7582017-01-25 09:54:27 -08001801dnl We need this not for the atomic operations (which are provided above), but
1802dnl rather for the OSSpinLock type it exposes.
Jason Evans763baa62011-03-18 19:10:31 -07001803
1804JE_COMPILABLE([Darwin OSAtomic*()], [
1805#include <libkern/OSAtomic.h>
1806#include <inttypes.h>
1807], [
1808 {
1809 int32_t x32 = 0;
1810 volatile int32_t *x32p = &x32;
1811 OSAtomicAdd32(1, x32p);
1812 }
1813 {
1814 int64_t x64 = 0;
1815 volatile int64_t *x64p = &x64;
1816 OSAtomicAdd64(1, x64p);
1817 }
Jason Evans6684cac2012-03-05 12:15:36 -08001818], [je_cv_osatomic])
1819if test "x${je_cv_osatomic}" = "xyes" ; then
Jason Evanse24c7af2012-03-19 10:21:17 -07001820 AC_DEFINE([JEMALLOC_OSATOMIC], [ ])
Jason Evans763baa62011-03-18 19:10:31 -07001821fi
1822
1823dnl ============================================================================
Richard Diamond994fad92014-06-03 02:39:18 -05001824dnl Check for madvise(2).
1825
1826JE_COMPILABLE([madvise(2)], [
1827#include <sys/mman.h>
1828], [
Jason Evansa64123c2016-11-17 10:24:51 -08001829 madvise((void *)0, 0, 0);
Richard Diamond994fad92014-06-03 02:39:18 -05001830], [je_cv_madvise])
1831if test "x${je_cv_madvise}" = "xyes" ; then
Jason Evansc1baa0a2016-11-17 13:36:17 -08001832 AC_DEFINE([JEMALLOC_HAVE_MADVISE], [ ])
1833
Jason Evansa64123c2016-11-17 10:24:51 -08001834 dnl Check for madvise(..., MADV_FREE).
1835 JE_COMPILABLE([madvise(..., MADV_FREE)], [
1836#include <sys/mman.h>
1837], [
1838 madvise((void *)0, 0, MADV_FREE);
1839], [je_cv_madv_free])
1840 if test "x${je_cv_madv_free}" = "xyes" ; then
1841 AC_DEFINE([JEMALLOC_PURGE_MADVISE_FREE], [ ])
Qi Wang31ab38b2017-10-05 16:28:55 -07001842 elif test "x${je_cv_madvise}" = "xyes" ; then
1843 case "${host_cpu}" in i686|x86_64)
1844 case "${host}" in *-*-linux*)
1845 AC_DEFINE([JEMALLOC_PURGE_MADVISE_FREE], [ ])
1846 AC_DEFINE([JEMALLOC_DEFINE_MADVISE_FREE], [ ])
1847 ;;
1848 esac
1849 ;;
1850 esac
Jason Evansa64123c2016-11-17 10:24:51 -08001851 fi
1852
1853 dnl Check for madvise(..., MADV_DONTNEED).
1854 JE_COMPILABLE([madvise(..., MADV_DONTNEED)], [
1855#include <sys/mman.h>
1856], [
1857 madvise((void *)0, 0, MADV_DONTNEED);
1858], [je_cv_madv_dontneed])
1859 if test "x${je_cv_madv_dontneed}" = "xyes" ; then
1860 AC_DEFINE([JEMALLOC_PURGE_MADVISE_DONTNEED], [ ])
1861 fi
1862
David Goldblattccd09052017-09-18 15:03:52 -07001863 dnl Check for madvise(..., MADV_DO[NT]DUMP).
1864 JE_COMPILABLE([madvise(..., MADV_DO[[NT]]DUMP)], [
1865#include <sys/mman.h>
1866], [
1867 madvise((void *)0, 0, MADV_DONTDUMP);
1868 madvise((void *)0, 0, MADV_DODUMP);
1869], [je_cv_madv_dontdump])
1870 if test "x${je_cv_madv_dontdump}" = "xyes" ; then
1871 AC_DEFINE([JEMALLOC_MADVISE_DONTDUMP], [ ])
1872 fi
1873
Jason Evansc1baa0a2016-11-17 13:36:17 -08001874 dnl Check for madvise(..., MADV_[NO]HUGEPAGE).
1875 JE_COMPILABLE([madvise(..., MADV_[[NO]]HUGEPAGE)], [
1876#include <sys/mman.h>
1877], [
1878 madvise((void *)0, 0, MADV_HUGEPAGE);
1879 madvise((void *)0, 0, MADV_NOHUGEPAGE);
1880], [je_cv_thp])
marxin433c2ed2018-01-02 10:29:19 +01001881case "${host_cpu}" in
1882 arm*)
1883 ;;
1884 *)
Qi Wang8fdd9a52017-08-10 13:14:26 -07001885 if test "x${je_cv_thp}" = "xyes" ; then
1886 AC_DEFINE([JEMALLOC_HAVE_MADVISE_HUGE], [ ])
1887 fi
marxin433c2ed2018-01-02 10:29:19 +01001888 ;;
1889esac
Richard Diamond994fad92014-06-03 02:39:18 -05001890fi
1891
1892dnl ============================================================================
Mike Hommeyc1e567b2012-03-26 17:03:41 +02001893dnl Check whether __sync_{add,sub}_and_fetch() are available despite
1894dnl __GCC_HAVE_SYNC_COMPARE_AND_SWAP_n macros being undefined.
1895
1896AC_DEFUN([JE_SYNC_COMPARE_AND_SWAP_CHECK],[
1897 AC_CACHE_CHECK([whether to force $1-bit __sync_{add,sub}_and_fetch()],
1898 [je_cv_sync_compare_and_swap_$2],
Mike Hommey2cfe6d62012-03-27 15:03:07 +02001899 [AC_LINK_IFELSE([AC_LANG_PROGRAM([
1900 #include <stdint.h>
1901 ],
1902 [
1903 #ifndef __GCC_HAVE_SYNC_COMPARE_AND_SWAP_$2
1904 {
1905 uint$1_t x$1 = 0;
1906 __sync_add_and_fetch(&x$1, 42);
1907 __sync_sub_and_fetch(&x$1, 1);
1908 }
1909 #else
1910 #error __GCC_HAVE_SYNC_COMPARE_AND_SWAP_$2 is defined, no need to force
1911 #endif
1912 ])],
Mike Hommeyc1e567b2012-03-26 17:03:41 +02001913 [je_cv_sync_compare_and_swap_$2=yes],
1914 [je_cv_sync_compare_and_swap_$2=no])])
1915
1916 if test "x${je_cv_sync_compare_and_swap_$2}" = "xyes" ; then
1917 AC_DEFINE([JE_FORCE_SYNC_COMPARE_AND_SWAP_$2], [ ])
1918 fi
1919])
1920
Jason Evansb57d3ec2012-04-17 13:17:54 -07001921if test "x${je_cv_atomic9}" != "xyes" -a "x${je_cv_osatomic}" != "xyes" ; then
Mike Hommeyc1e567b2012-03-26 17:03:41 +02001922 JE_SYNC_COMPARE_AND_SWAP_CHECK(32, 4)
1923 JE_SYNC_COMPARE_AND_SWAP_CHECK(64, 8)
1924fi
1925
1926dnl ============================================================================
Jason Evansd04047c2014-05-28 16:11:55 -07001927dnl Check for __builtin_clz() and __builtin_clzl().
1928
1929AC_CACHE_CHECK([for __builtin_clz],
1930 [je_cv_builtin_clz],
1931 [AC_LINK_IFELSE([AC_LANG_PROGRAM([],
1932 [
1933 {
1934 unsigned x = 0;
1935 int y = __builtin_clz(x);
1936 }
1937 {
1938 unsigned long x = 0;
1939 int y = __builtin_clzl(x);
1940 }
1941 ])],
1942 [je_cv_builtin_clz=yes],
1943 [je_cv_builtin_clz=no])])
1944
1945if test "x${je_cv_builtin_clz}" = "xyes" ; then
1946 AC_DEFINE([JEMALLOC_HAVE_BUILTIN_CLZ], [ ])
1947fi
1948
1949dnl ============================================================================
Jason Evans795f6682016-11-02 18:09:45 -07001950dnl Check for os_unfair_lock operations as provided on Darwin.
1951
Jason Evans4066b4e2016-11-16 10:40:00 -08001952JE_COMPILABLE([Darwin os_unfair_lock_*()], [
Jason Evans795f6682016-11-02 18:09:45 -07001953#include <os/lock.h>
John Szakmeistereb29d7e2016-11-23 15:32:35 -05001954#include <AvailabilityMacros.h>
Jason Evans795f6682016-11-02 18:09:45 -07001955], [
John Szakmeistereb29d7e2016-11-23 15:32:35 -05001956 #if MAC_OS_X_VERSION_MIN_REQUIRED < 101200
1957 #error "os_unfair_lock is not supported"
1958 #else
Jason Evans795f6682016-11-02 18:09:45 -07001959 os_unfair_lock lock = OS_UNFAIR_LOCK_INIT;
1960 os_unfair_lock_lock(&lock);
1961 os_unfair_lock_unlock(&lock);
John Szakmeistereb29d7e2016-11-23 15:32:35 -05001962 #endif
Jason Evans795f6682016-11-02 18:09:45 -07001963], [je_cv_os_unfair_lock])
1964if test "x${je_cv_os_unfair_lock}" = "xyes" ; then
1965 AC_DEFINE([JEMALLOC_OS_UNFAIR_LOCK], [ ])
1966fi
1967
1968dnl ============================================================================
Jason Evans893a0ed2011-03-18 19:30:18 -07001969dnl Check for spinlock(3) operations as provided on Darwin.
1970
1971JE_COMPILABLE([Darwin OSSpin*()], [
1972#include <libkern/OSAtomic.h>
1973#include <inttypes.h>
1974], [
1975 OSSpinLock lock = 0;
1976 OSSpinLockLock(&lock);
1977 OSSpinLockUnlock(&lock);
Jason Evans6684cac2012-03-05 12:15:36 -08001978], [je_cv_osspin])
1979if test "x${je_cv_osspin}" = "xyes" ; then
Jason Evanse24c7af2012-03-19 10:21:17 -07001980 AC_DEFINE([JEMALLOC_OSSPIN], [ ])
Jason Evans893a0ed2011-03-18 19:30:18 -07001981fi
1982
1983dnl ============================================================================
Jason Evans2dbecf12010-09-05 10:35:13 -07001984dnl Darwin-related configuration.
Jason Evans78d815c2010-01-17 14:06:20 -08001985
Mike Hommeyd0357f72012-11-26 18:52:41 +01001986AC_ARG_ENABLE([zone-allocator],
1987 [AS_HELP_STRING([--disable-zone-allocator],
1988 [Disable zone allocator for Darwin])],
1989[if test "x$enable_zone_allocator" = "xno" ; then
1990 enable_zone_allocator="0"
1991else
1992 enable_zone_allocator="1"
1993fi
1994],
1995[if test "x${abi}" = "xmacho"; then
1996 enable_zone_allocator="1"
1997fi
1998]
1999)
2000AC_SUBST([enable_zone_allocator])
2001
2002if test "x${enable_zone_allocator}" = "x1" ; then
2003 if test "x${abi}" != "xmacho"; then
2004 AC_MSG_ERROR([--enable-zone-allocator is only supported on Darwin])
2005 fi
Jason Evanse24c7af2012-03-19 10:21:17 -07002006 AC_DEFINE([JEMALLOC_ZONE], [ ])
Jason Evansb27805b2010-02-10 18:15:53 -08002007fi
2008
Jason Evansb7924f52009-06-23 19:01:18 -07002009dnl ============================================================================
David Goldblatta62e42b2018-04-17 12:52:22 -07002010dnl Use initial-exec TLS by default.
2011AC_ARG_ENABLE([initial-exec-tls],
2012 [AS_HELP_STRING([--disable-initial-exec-tls],
2013 [Disable the initial-exec tls model])],
2014[if test "x$enable_initial_exec_tls" = "xno" ; then
2015 enable_initial_exec_tls="0"
2016else
2017 enable_initial_exec_tls="1"
2018fi
2019],
2020[enable_initial_exec_tls="1"]
2021)
2022AC_SUBST([enable_initial_exec_tls])
2023
2024if test "x${je_cv_tls_model}" = "xyes" -a \
2025 "x${enable_initial_exec_tls}" = "x1" ; then
2026 AC_DEFINE([JEMALLOC_TLS_MODEL],
2027 [__attribute__((tls_model("initial-exec")))])
2028else
2029 AC_DEFINE([JEMALLOC_TLS_MODEL], [ ])
2030fi
2031
2032dnl ============================================================================
Jason Evans13685ab2017-06-08 22:07:21 -07002033dnl Enable background threads if possible.
2034
2035if test "x${have_pthread}" = "x1" -a "x${have_dlsym}" = "x1" \
2036 -a "x${je_cv_os_unfair_lock}" != "xyes" \
2037 -a "x${je_cv_osspin}" != "xyes" ; then
2038 AC_DEFINE([JEMALLOC_BACKGROUND_THREAD])
2039fi
2040
2041dnl ============================================================================
Sara Golemon3e24afa2014-08-18 13:06:39 -07002042dnl Check for glibc malloc hooks
2043
2044JE_COMPILABLE([glibc malloc hook], [
2045#include <stddef.h>
2046
2047extern void (* __free_hook)(void *ptr);
2048extern void *(* __malloc_hook)(size_t size);
2049extern void *(* __realloc_hook)(void *ptr, size_t size);
2050], [
2051 void *ptr = 0L;
2052 if (__malloc_hook) ptr = __malloc_hook(1);
2053 if (__realloc_hook) ptr = __realloc_hook(ptr, 2);
2054 if (__free_hook && ptr) __free_hook(ptr);
2055], [je_cv_glibc_malloc_hook])
2056if test "x${je_cv_glibc_malloc_hook}" = "xyes" ; then
Jason Evans909f0482017-05-04 11:20:43 -07002057 if test "x${JEMALLOC_PREFIX}" = "x" ; then
2058 AC_DEFINE([JEMALLOC_GLIBC_MALLOC_HOOK], [ ])
2059 wrap_syms="${wrap_syms} __free_hook __malloc_hook __realloc_hook"
2060 fi
Sara Golemon3e24afa2014-08-18 13:06:39 -07002061fi
2062
2063JE_COMPILABLE([glibc memalign hook], [
2064#include <stddef.h>
2065
2066extern void *(* __memalign_hook)(size_t alignment, size_t size);
2067], [
2068 void *ptr = 0L;
2069 if (__memalign_hook) ptr = __memalign_hook(16, 7);
2070], [je_cv_glibc_memalign_hook])
2071if test "x${je_cv_glibc_memalign_hook}" = "xyes" ; then
Jason Evans909f0482017-05-04 11:20:43 -07002072 if test "x${JEMALLOC_PREFIX}" = "x" ; then
2073 AC_DEFINE([JEMALLOC_GLIBC_MEMALIGN_HOOK], [ ])
2074 wrap_syms="${wrap_syms} __memalign_hook"
2075 fi
Sara Golemon3e24afa2014-08-18 13:06:39 -07002076fi
2077
Eric Wong4dcf04b2014-08-31 03:57:06 +00002078JE_COMPILABLE([pthreads adaptive mutexes], [
2079#include <pthread.h>
2080], [
2081 pthread_mutexattr_t attr;
2082 pthread_mutexattr_init(&attr);
2083 pthread_mutexattr_settype(&attr, PTHREAD_MUTEX_ADAPTIVE_NP);
2084 pthread_mutexattr_destroy(&attr);
2085], [je_cv_pthread_mutex_adaptive_np])
2086if test "x${je_cv_pthread_mutex_adaptive_np}" = "xyes" ; then
2087 AC_DEFINE([JEMALLOC_HAVE_PTHREAD_MUTEX_ADAPTIVE_NP], [ ])
2088fi
2089
Christopher Ferrisf78d4ca2017-09-22 12:24:50 -07002090JE_CFLAGS_SAVE()
2091JE_CFLAGS_ADD([-D_GNU_SOURCE])
2092JE_CFLAGS_ADD([-Werror])
2093JE_CFLAGS_ADD([-herror_on_warning])
2094JE_COMPILABLE([strerror_r returns char with gnu source], [
2095#include <errno.h>
2096#include <stdio.h>
2097#include <stdlib.h>
2098#include <string.h>
2099], [
2100 char *buffer = (char *) malloc(100);
2101 char *error = strerror_r(EINVAL, buffer, 100);
2102 printf("%s\n", error);
2103], [je_cv_strerror_r_returns_char_with_gnu_source])
2104JE_CFLAGS_RESTORE()
2105if test "x${je_cv_strerror_r_returns_char_with_gnu_source}" = "xyes" ; then
2106 AC_DEFINE([JEMALLOC_STRERROR_R_RETURNS_CHAR_WITH_GNU_SOURCE], [ ])
2107fi
2108
Sara Golemon3e24afa2014-08-18 13:06:39 -07002109dnl ============================================================================
Jason Evansb7924f52009-06-23 19:01:18 -07002110dnl Check for typedefs, structures, and compiler characteristics.
2111AC_HEADER_STDBOOL
2112
Jason Evans748dfac2013-12-06 18:27:33 -08002113dnl ============================================================================
2114dnl Define commands that generate output files.
2115
Jason Evansf234dc52014-01-16 17:38:01 -08002116AC_CONFIG_COMMANDS([include/jemalloc/internal/public_symbols.txt], [
2117 f="${objroot}include/jemalloc/internal/public_symbols.txt"
2118 mkdir -p "${objroot}include/jemalloc/internal"
2119 cp /dev/null "${f}"
2120 for nm in `echo ${mangling_map} |tr ',' ' '` ; do
2121 n=`echo ${nm} |tr ':' ' ' |awk '{print $[]1}'`
2122 m=`echo ${nm} |tr ':' ' ' |awk '{print $[]2}'`
2123 echo "${n}:${m}" >> "${f}"
2124 dnl Remove name from public_syms so that it isn't redefined later.
2125 public_syms=`for sym in ${public_syms}; do echo "${sym}"; done |grep -v "^${n}\$" |tr '\n' ' '`
2126 done
2127 for sym in ${public_syms} ; do
2128 n="${sym}"
2129 m="${JEMALLOC_PREFIX}${sym}"
2130 echo "${n}:${m}" >> "${f}"
2131 done
2132], [
2133 srcdir="${srcdir}"
2134 objroot="${objroot}"
2135 mangling_map="${mangling_map}"
2136 public_syms="${public_syms}"
2137 JEMALLOC_PREFIX="${JEMALLOC_PREFIX}"
Jason Evans86abd0d2013-11-30 15:25:42 -08002138])
Jason Evans909f0482017-05-04 11:20:43 -07002139AC_CONFIG_COMMANDS([include/jemalloc/internal/private_symbols.awk], [
2140 f="${objroot}include/jemalloc/internal/private_symbols.awk"
2141 mkdir -p "${objroot}include/jemalloc/internal"
2142 export_syms=`for sym in ${public_syms}; do echo "${JEMALLOC_PREFIX}${sym}"; done; for sym in ${wrap_syms}; do echo "${sym}"; done;`
2143 "${srcdir}/include/jemalloc/internal/private_symbols.sh" "${SYM_PREFIX}" ${export_syms} > "${objroot}include/jemalloc/internal/private_symbols.awk"
2144], [
2145 srcdir="${srcdir}"
2146 objroot="${objroot}"
2147 public_syms="${public_syms}"
2148 wrap_syms="${wrap_syms}"
2149 SYM_PREFIX="${SYM_PREFIX}"
2150 JEMALLOC_PREFIX="${JEMALLOC_PREFIX}"
2151])
2152AC_CONFIG_COMMANDS([include/jemalloc/internal/private_symbols_jet.awk], [
2153 f="${objroot}include/jemalloc/internal/private_symbols_jet.awk"
2154 mkdir -p "${objroot}include/jemalloc/internal"
2155 export_syms=`for sym in ${public_syms}; do echo "jet_${sym}"; done; for sym in ${wrap_syms}; do echo "${sym}"; done;`
2156 "${srcdir}/include/jemalloc/internal/private_symbols.sh" "${SYM_PREFIX}" ${export_syms} > "${objroot}include/jemalloc/internal/private_symbols_jet.awk"
2157], [
2158 srcdir="${srcdir}"
2159 objroot="${objroot}"
2160 public_syms="${public_syms}"
2161 wrap_syms="${wrap_syms}"
2162 SYM_PREFIX="${SYM_PREFIX}"
2163])
Jason Evans86abd0d2013-11-30 15:25:42 -08002164AC_CONFIG_COMMANDS([include/jemalloc/internal/public_namespace.h], [
2165 mkdir -p "${objroot}include/jemalloc/internal"
Jason Evansf234dc52014-01-16 17:38:01 -08002166 "${srcdir}/include/jemalloc/internal/public_namespace.sh" "${objroot}include/jemalloc/internal/public_symbols.txt" > "${objroot}include/jemalloc/internal/public_namespace.h"
2167], [
2168 srcdir="${srcdir}"
2169 objroot="${objroot}"
Jason Evans86abd0d2013-11-30 15:25:42 -08002170])
2171AC_CONFIG_COMMANDS([include/jemalloc/internal/public_unnamespace.h], [
2172 mkdir -p "${objroot}include/jemalloc/internal"
Jason Evansf234dc52014-01-16 17:38:01 -08002173 "${srcdir}/include/jemalloc/internal/public_unnamespace.sh" "${objroot}include/jemalloc/internal/public_symbols.txt" > "${objroot}include/jemalloc/internal/public_unnamespace.h"
2174], [
2175 srcdir="${srcdir}"
2176 objroot="${objroot}"
Jason Evans86abd0d2013-11-30 15:25:42 -08002177])
Jason Evansb1726102012-02-28 16:50:47 -08002178AC_CONFIG_COMMANDS([include/jemalloc/internal/size_classes.h], [
Jason Evans86abd0d2013-11-30 15:25:42 -08002179 mkdir -p "${objroot}include/jemalloc/internal"
Jason Evansaf76f0e2017-04-21 15:35:54 -07002180 "${SHELL}" "${srcdir}/include/jemalloc/internal/size_classes.sh" "${LG_QUANTA}" 3 "${LG_PAGE_SIZES}" 2 > "${objroot}include/jemalloc/internal/size_classes.h"
Jason Evansf234dc52014-01-16 17:38:01 -08002181], [
Jason Evans6d919292015-09-15 10:42:36 -07002182 SHELL="${SHELL}"
Jason Evansf234dc52014-01-16 17:38:01 -08002183 srcdir="${srcdir}"
2184 objroot="${objroot}"
Jason Evans81e54752014-10-10 22:34:25 -07002185 LG_QUANTA="${LG_QUANTA}"
Jason Evans81e54752014-10-10 22:34:25 -07002186 LG_PAGE_SIZES="${LG_PAGE_SIZES}"
Jason Evansb1726102012-02-28 16:50:47 -08002187])
Jason Evans86abd0d2013-11-30 15:25:42 -08002188AC_CONFIG_COMMANDS([include/jemalloc/jemalloc_protos_jet.h], [
2189 mkdir -p "${objroot}include/jemalloc"
2190 cat "${srcdir}/include/jemalloc/jemalloc_protos.h.in" | sed -e 's/@je_@/jet_/g' > "${objroot}include/jemalloc/jemalloc_protos_jet.h"
Jason Evansf234dc52014-01-16 17:38:01 -08002191], [
2192 srcdir="${srcdir}"
2193 objroot="${objroot}"
2194])
2195AC_CONFIG_COMMANDS([include/jemalloc/jemalloc_rename.h], [
2196 mkdir -p "${objroot}include/jemalloc"
2197 "${srcdir}/include/jemalloc/jemalloc_rename.sh" "${objroot}include/jemalloc/internal/public_symbols.txt" > "${objroot}include/jemalloc/jemalloc_rename.h"
2198], [
2199 srcdir="${srcdir}"
2200 objroot="${objroot}"
2201])
2202AC_CONFIG_COMMANDS([include/jemalloc/jemalloc_mangle.h], [
2203 mkdir -p "${objroot}include/jemalloc"
2204 "${srcdir}/include/jemalloc/jemalloc_mangle.sh" "${objroot}include/jemalloc/internal/public_symbols.txt" je_ > "${objroot}include/jemalloc/jemalloc_mangle.h"
2205], [
2206 srcdir="${srcdir}"
2207 objroot="${objroot}"
2208])
2209AC_CONFIG_COMMANDS([include/jemalloc/jemalloc_mangle_jet.h], [
2210 mkdir -p "${objroot}include/jemalloc"
2211 "${srcdir}/include/jemalloc/jemalloc_mangle.sh" "${objroot}include/jemalloc/internal/public_symbols.txt" jet_ > "${objroot}include/jemalloc/jemalloc_mangle_jet.h"
2212], [
2213 srcdir="${srcdir}"
2214 objroot="${objroot}"
Jason Evans86abd0d2013-11-30 15:25:42 -08002215])
2216AC_CONFIG_COMMANDS([include/jemalloc/jemalloc.h], [
2217 mkdir -p "${objroot}include/jemalloc"
2218 "${srcdir}/include/jemalloc/jemalloc.sh" "${objroot}" > "${objroot}include/jemalloc/jemalloc${install_suffix}.h"
Jason Evansf234dc52014-01-16 17:38:01 -08002219], [
2220 srcdir="${srcdir}"
2221 objroot="${objroot}"
2222 install_suffix="${install_suffix}"
Jason Evans86abd0d2013-11-30 15:25:42 -08002223])
Jason Evansb1726102012-02-28 16:50:47 -08002224
Jason Evansb7924f52009-06-23 19:01:18 -07002225dnl Process .in files.
Jason Evansb0fd5012010-01-17 01:49:20 -08002226AC_SUBST([cfghdrs_in])
2227AC_SUBST([cfghdrs_out])
Jason Evans0656ec02010-04-07 23:37:35 -07002228AC_CONFIG_HEADERS([$cfghdrs_tup])
Jason Evansb7924f52009-06-23 19:01:18 -07002229
2230dnl ============================================================================
2231dnl Generate outputs.
Jason Evans748dfac2013-12-06 18:27:33 -08002232
Jason Evans70417202015-05-01 12:31:12 -07002233AC_CONFIG_FILES([$cfgoutputs_tup config.stamp bin/jemalloc-config bin/jemalloc.sh bin/jeprof])
Jason Evansb0fd5012010-01-17 01:49:20 -08002234AC_SUBST([cfgoutputs_in])
2235AC_SUBST([cfgoutputs_out])
Jason Evansb7924f52009-06-23 19:01:18 -07002236AC_OUTPUT
2237
2238dnl ============================================================================
2239dnl Print out the results of configuration.
2240AC_MSG_RESULT([===============================================================================])
Jason Evansf576c632011-11-01 22:27:41 -07002241AC_MSG_RESULT([jemalloc version : ${jemalloc_version}])
2242AC_MSG_RESULT([library revision : ${rev}])
Jason Evansb7924f52009-06-23 19:01:18 -07002243AC_MSG_RESULT([])
Jason Evansbec6a8d2015-01-22 17:55:58 -08002244AC_MSG_RESULT([CONFIG : ${CONFIG}])
Jason Evansb7924f52009-06-23 19:01:18 -07002245AC_MSG_RESULT([CC : ${CC}])
Jason Evans194d6f92016-12-16 07:18:55 -08002246AC_MSG_RESULT([CONFIGURE_CFLAGS : ${CONFIGURE_CFLAGS}])
2247AC_MSG_RESULT([SPECIFIED_CFLAGS : ${SPECIFIED_CFLAGS}])
Jason Evansaf0e28f2016-10-29 22:14:55 -07002248AC_MSG_RESULT([EXTRA_CFLAGS : ${EXTRA_CFLAGS}])
Jason Evansbec6a8d2015-01-22 17:55:58 -08002249AC_MSG_RESULT([CPPFLAGS : ${CPPFLAGS}])
Dave Watson23191522016-10-23 15:56:30 -07002250AC_MSG_RESULT([CXX : ${CXX}])
Jason Evans194d6f92016-12-16 07:18:55 -08002251AC_MSG_RESULT([CONFIGURE_CXXFLAGS : ${CONFIGURE_CXXFLAGS}])
2252AC_MSG_RESULT([SPECIFIED_CXXFLAGS : ${SPECIFIED_CXXFLAGS}])
Dave Watson23191522016-10-23 15:56:30 -07002253AC_MSG_RESULT([EXTRA_CXXFLAGS : ${EXTRA_CXXFLAGS}])
Jason Evansb7924f52009-06-23 19:01:18 -07002254AC_MSG_RESULT([LDFLAGS : ${LDFLAGS}])
Jason Evans748dfac2013-12-06 18:27:33 -08002255AC_MSG_RESULT([EXTRA_LDFLAGS : ${EXTRA_LDFLAGS}])
Dave Watson23191522016-10-23 15:56:30 -07002256AC_MSG_RESULT([DSO_LDFLAGS : ${DSO_LDFLAGS}])
Jason Evansb7924f52009-06-23 19:01:18 -07002257AC_MSG_RESULT([LIBS : ${LIBS}])
2258AC_MSG_RESULT([RPATH_EXTRA : ${RPATH_EXTRA}])
2259AC_MSG_RESULT([])
Jason Evansaee7fd22010-11-24 22:00:02 -08002260AC_MSG_RESULT([XSLTPROC : ${XSLTPROC}])
2261AC_MSG_RESULT([XSLROOT : ${XSLROOT}])
2262AC_MSG_RESULT([])
Jason Evansb7924f52009-06-23 19:01:18 -07002263AC_MSG_RESULT([PREFIX : ${PREFIX}])
2264AC_MSG_RESULT([BINDIR : ${BINDIR}])
Jason Evansbec6a8d2015-01-22 17:55:58 -08002265AC_MSG_RESULT([DATADIR : ${DATADIR}])
Jason Evans662a0172009-07-01 19:24:31 -07002266AC_MSG_RESULT([INCLUDEDIR : ${INCLUDEDIR}])
2267AC_MSG_RESULT([LIBDIR : ${LIBDIR}])
Jason Evansb7924f52009-06-23 19:01:18 -07002268AC_MSG_RESULT([MANDIR : ${MANDIR}])
2269AC_MSG_RESULT([])
2270AC_MSG_RESULT([srcroot : ${srcroot}])
2271AC_MSG_RESULT([abs_srcroot : ${abs_srcroot}])
2272AC_MSG_RESULT([objroot : ${objroot}])
2273AC_MSG_RESULT([abs_objroot : ${abs_objroot}])
2274AC_MSG_RESULT([])
Jason Evans90895cf2009-12-29 00:09:15 -08002275AC_MSG_RESULT([JEMALLOC_PREFIX : ${JEMALLOC_PREFIX}])
Jason Evans746e77a2011-07-30 16:40:52 -07002276AC_MSG_RESULT([JEMALLOC_PRIVATE_NAMESPACE])
2277AC_MSG_RESULT([ : ${JEMALLOC_PRIVATE_NAMESPACE}])
Jason Evansb0fd5012010-01-17 01:49:20 -08002278AC_MSG_RESULT([install_suffix : ${install_suffix}])
Jason Evansf8290092016-02-07 14:23:22 -08002279AC_MSG_RESULT([malloc_conf : ${config_malloc_conf}])
Jason Evansb7924f52009-06-23 19:01:18 -07002280AC_MSG_RESULT([autogen : ${enable_autogen}])
2281AC_MSG_RESULT([debug : ${enable_debug}])
2282AC_MSG_RESULT([stats : ${enable_stats}])
Jason Evans6109fe02010-02-10 10:37:56 -08002283AC_MSG_RESULT([prof : ${enable_prof}])
2284AC_MSG_RESULT([prof-libunwind : ${enable_prof_libunwind}])
Jason Evans77f350b2011-03-15 22:23:12 -07002285AC_MSG_RESULT([prof-libgcc : ${enable_prof_libgcc}])
2286AC_MSG_RESULT([prof-gcc : ${enable_prof_gcc}])
Jason Evansb7924f52009-06-23 19:01:18 -07002287AC_MSG_RESULT([fill : ${enable_fill}])
Jason Evansb1476112012-04-05 13:36:17 -07002288AC_MSG_RESULT([utrace : ${enable_utrace}])
Jason Evans122449b2012-04-06 00:35:09 -07002289AC_MSG_RESULT([xmalloc : ${enable_xmalloc}])
David T. Goldblatt9761b442017-07-19 16:36:46 -07002290AC_MSG_RESULT([log : ${enable_log}])
Jason Evansb7924f52009-06-23 19:01:18 -07002291AC_MSG_RESULT([lazy_lock : ${enable_lazy_lock}])
Jason Evans8a03cf02015-05-04 09:58:36 -07002292AC_MSG_RESULT([cache-oblivious : ${enable_cache_oblivious}])
Dave Watson23191522016-10-23 15:56:30 -07002293AC_MSG_RESULT([cxx : ${enable_cxx}])
Jason Evansb7924f52009-06-23 19:01:18 -07002294AC_MSG_RESULT([===============================================================================])