]>
Commit | Line | Data |
---|---|---|
a78e148b | 1 | dnl Process this file with autoconf to produce a configure script. |
2 | AC_INIT([Makefile.in]) | |
3 | ||
4 | dnl ============================================================================ | |
5 | dnl Custom macro definitions. | |
6 | ||
7 | dnl JE_CFLAGS_APPEND(cflag) | |
8 | AC_DEFUN([JE_CFLAGS_APPEND], | |
9 | [ | |
10 | AC_MSG_CHECKING([whether compiler supports $1]) | |
11 | TCFLAGS="${CFLAGS}" | |
12 | if test "x${CFLAGS}" = "x" ; then | |
13 | CFLAGS="$1" | |
14 | else | |
15 | CFLAGS="${CFLAGS} $1" | |
16 | fi | |
17 | AC_RUN_IFELSE([AC_LANG_PROGRAM( | |
18 | [[ | |
19 | ]], [[ | |
20 | return 0; | |
21 | ]])], | |
22 | AC_MSG_RESULT([yes]), | |
23 | AC_MSG_RESULT([no]) | |
24 | [CFLAGS="${TCFLAGS}"] | |
25 | ) | |
26 | ]) | |
27 | ||
28 | dnl JE_COMPILABLE(label, hcode, mcode, rvar) | |
29 | AC_DEFUN([JE_COMPILABLE], | |
30 | [ | |
31 | AC_MSG_CHECKING([whether $1 is compilable]) | |
32 | AC_RUN_IFELSE([AC_LANG_PROGRAM( | |
33 | [$2], [$3])], | |
34 | AC_MSG_RESULT([yes]) | |
35 | [$4="yes"], | |
36 | AC_MSG_RESULT([no]) | |
37 | [$4="no"] | |
38 | ) | |
39 | ]) | |
40 | ||
41 | dnl ============================================================================ | |
42 | ||
43 | srcroot=$srcdir | |
44 | if test "x${srcroot}" = "x." ; then | |
45 | srcroot="" | |
46 | else | |
47 | srcroot="${srcroot}/" | |
48 | fi | |
49 | AC_SUBST([srcroot]) | |
50 | abs_srcroot="`cd \"${srcdir}\"; pwd`/" | |
51 | AC_SUBST([abs_srcroot]) | |
52 | ||
53 | objroot="" | |
54 | AC_SUBST([objroot]) | |
55 | abs_objroot="`pwd`/" | |
56 | AC_SUBST([abs_objroot]) | |
57 | ||
58 | dnl Munge install path variables. | |
59 | if test "x$prefix" = "xNONE" ; then | |
60 | prefix="/usr/local" | |
61 | fi | |
62 | if test "x$exec_prefix" = "xNONE" ; then | |
63 | exec_prefix=$prefix | |
64 | fi | |
65 | PREFIX=$prefix | |
66 | AC_SUBST([PREFIX]) | |
67 | BINDIR=`eval echo $bindir` | |
68 | BINDIR=`eval echo $BINDIR` | |
69 | AC_SUBST([BINDIR]) | |
70 | INCLUDEDIR=`eval echo $includedir` | |
71 | INCLUDEDIR=`eval echo $INCLUDEDIR` | |
72 | AC_SUBST([INCLUDEDIR]) | |
73 | LIBDIR=`eval echo $libdir` | |
74 | LIBDIR=`eval echo $LIBDIR` | |
75 | AC_SUBST([LIBDIR]) | |
76 | DATADIR=`eval echo $datadir` | |
77 | DATADIR=`eval echo $DATADIR` | |
78 | AC_SUBST([DATADIR]) | |
79 | MANDIR=`eval echo $mandir` | |
80 | MANDIR=`eval echo $MANDIR` | |
81 | AC_SUBST([MANDIR]) | |
82 | ||
83 | dnl Support for building documentation. | |
84 | AC_PATH_PROG([XSLTPROC], [xsltproc], , [$PATH]) | |
85 | AC_ARG_WITH([xslroot], | |
86 | [AS_HELP_STRING([--with-xslroot=<path>], [XSL stylesheet root path])], | |
87 | if test "x$with_xslroot" = "xno" ; then | |
88 | XSLROOT="/usr/share/xml/docbook/stylesheet/docbook-xsl" | |
89 | else | |
90 | XSLROOT="${with_xslroot}" | |
91 | fi, | |
92 | XSLROOT="/usr/share/xml/docbook/stylesheet/docbook-xsl" | |
93 | ) | |
94 | AC_SUBST([XSLROOT]) | |
95 | ||
96 | dnl If CFLAGS isn't defined, set CFLAGS to something reasonable. Otherwise, | |
97 | dnl just prevent autoconf from molesting CFLAGS. | |
98 | CFLAGS=$CFLAGS | |
99 | AC_PROG_CC | |
100 | if test "x$CFLAGS" = "x" ; then | |
101 | no_CFLAGS="yes" | |
102 | if test "x$GCC" = "xyes" ; then | |
103 | JE_CFLAGS_APPEND([-std=gnu99]) | |
104 | JE_CFLAGS_APPEND([-Wall]) | |
105 | JE_CFLAGS_APPEND([-pipe]) | |
106 | JE_CFLAGS_APPEND([-g3]) | |
107 | fi | |
108 | fi | |
109 | dnl Append EXTRA_CFLAGS to CFLAGS, if defined. | |
110 | if test "x$EXTRA_CFLAGS" != "x" ; then | |
111 | JE_CFLAGS_APPEND([$EXTRA_CFLAGS]) | |
112 | fi | |
113 | AC_PROG_CPP | |
114 | ||
115 | AC_CHECK_SIZEOF([void *]) | |
116 | if test "x${ac_cv_sizeof_void_p}" = "x8" ; then | |
117 | LG_SIZEOF_PTR=3 | |
118 | elif test "x${ac_cv_sizeof_void_p}" = "x4" ; then | |
119 | LG_SIZEOF_PTR=2 | |
120 | else | |
121 | AC_MSG_ERROR([Unsupported pointer size: ${ac_cv_sizeof_void_p}]) | |
122 | fi | |
123 | AC_DEFINE_UNQUOTED([LG_SIZEOF_PTR], [$LG_SIZEOF_PTR]) | |
124 | ||
125 | AC_CHECK_SIZEOF([int]) | |
126 | if test "x${ac_cv_sizeof_int}" = "x8" ; then | |
127 | LG_SIZEOF_INT=3 | |
128 | elif test "x${ac_cv_sizeof_int}" = "x4" ; then | |
129 | LG_SIZEOF_INT=2 | |
130 | else | |
131 | AC_MSG_ERROR([Unsupported int size: ${ac_cv_sizeof_int}]) | |
132 | fi | |
133 | AC_DEFINE_UNQUOTED([LG_SIZEOF_INT], [$LG_SIZEOF_INT]) | |
134 | ||
135 | AC_CHECK_SIZEOF([long]) | |
136 | if test "x${ac_cv_sizeof_long}" = "x8" ; then | |
137 | LG_SIZEOF_LONG=3 | |
138 | elif test "x${ac_cv_sizeof_long}" = "x4" ; then | |
139 | LG_SIZEOF_LONG=2 | |
140 | else | |
141 | AC_MSG_ERROR([Unsupported long size: ${ac_cv_sizeof_long}]) | |
142 | fi | |
143 | AC_DEFINE_UNQUOTED([LG_SIZEOF_LONG], [$LG_SIZEOF_LONG]) | |
144 | ||
145 | AC_CANONICAL_HOST | |
146 | dnl CPU-specific settings. | |
147 | CPU_SPINWAIT="" | |
148 | case "${host_cpu}" in | |
149 | i[[345]]86) | |
150 | ;; | |
151 | i686) | |
152 | JE_COMPILABLE([__asm__], [], [[__asm__ volatile("pause"); return 0;]], | |
153 | [asm]) | |
154 | if test "x${asm}" = "xyes" ; then | |
155 | CPU_SPINWAIT='__asm__ volatile("pause")' | |
156 | fi | |
157 | ;; | |
158 | x86_64) | |
159 | JE_COMPILABLE([__asm__ syntax], [], | |
160 | [[__asm__ volatile("pause"); return 0;]], [asm]) | |
161 | if test "x${asm}" = "xyes" ; then | |
162 | CPU_SPINWAIT='__asm__ volatile("pause")' | |
163 | fi | |
164 | ;; | |
165 | *) | |
166 | ;; | |
167 | esac | |
168 | AC_DEFINE_UNQUOTED([CPU_SPINWAIT], [$CPU_SPINWAIT]) | |
169 | ||
170 | dnl Platform-specific settings. abi and RPATH can probably be determined | |
171 | dnl programmatically, but doing so is error-prone, which makes it generally | |
172 | dnl not worth the trouble. | |
173 | dnl | |
174 | dnl Define cpp macros in CPPFLAGS, rather than doing AC_DEFINE(macro), since the | |
175 | dnl definitions need to be seen before any headers are included, which is a pain | |
176 | dnl to make happen otherwise. | |
177 | case "${host}" in | |
178 | *-*-darwin*) | |
179 | CFLAGS="$CFLAGS -fno-common -no-cpp-precomp" | |
180 | abi="macho" | |
181 | AC_DEFINE([JEMALLOC_PURGE_MADVISE_FREE]) | |
182 | RPATH="" | |
183 | ;; | |
184 | *-*-freebsd*) | |
185 | CFLAGS="$CFLAGS" | |
186 | abi="elf" | |
187 | AC_DEFINE([JEMALLOC_PURGE_MADVISE_FREE]) | |
188 | RPATH="-Wl,-rpath," | |
189 | ;; | |
190 | *-*-linux*) | |
191 | CFLAGS="$CFLAGS" | |
192 | CPPFLAGS="$CPPFLAGS -D_GNU_SOURCE" | |
193 | abi="elf" | |
194 | AC_DEFINE([JEMALLOC_PURGE_MADVISE_DONTNEED]) | |
195 | RPATH="-Wl,-rpath," | |
196 | ;; | |
197 | *-*-netbsd*) | |
198 | AC_MSG_CHECKING([ABI]) | |
199 | AC_COMPILE_IFELSE([AC_LANG_PROGRAM( | |
200 | [[#ifdef __ELF__ | |
201 | /* ELF */ | |
202 | #else | |
203 | #error aout | |
204 | #endif | |
205 | ]])], | |
206 | [CFLAGS="$CFLAGS"; abi="elf"], | |
207 | [abi="aout"]) | |
208 | AC_MSG_RESULT([$abi]) | |
209 | AC_DEFINE([JEMALLOC_PURGE_MADVISE_FREE]) | |
210 | RPATH="-Wl,-rpath," | |
211 | ;; | |
212 | *-*-solaris2*) | |
213 | CFLAGS="$CFLAGS" | |
214 | abi="elf" | |
215 | RPATH="-Wl,-R," | |
216 | dnl Solaris needs this for sigwait(). | |
217 | CPPFLAGS="$CPPFLAGS -D_POSIX_PTHREAD_SEMANTICS" | |
218 | LIBS="$LIBS -lposix4 -lsocket -lnsl" | |
219 | ;; | |
220 | *) | |
221 | AC_MSG_RESULT([Unsupported operating system: ${host}]) | |
222 | abi="elf" | |
223 | RPATH="-Wl,-rpath," | |
224 | ;; | |
225 | esac | |
226 | AC_SUBST([abi]) | |
227 | AC_SUBST([RPATH]) | |
228 | ||
229 | JE_COMPILABLE([__attribute__ syntax], | |
230 | [static __attribute__((unused)) void foo(void){}], | |
231 | [], | |
232 | [attribute]) | |
233 | if test "x${attribute}" = "xyes" ; then | |
234 | AC_DEFINE([JEMALLOC_HAVE_ATTR], [ ]) | |
235 | if test "x${GCC}" = "xyes" -a "x${abi}" = "xelf"; then | |
236 | JE_CFLAGS_APPEND([-fvisibility=hidden]) | |
237 | fi | |
238 | fi | |
239 | ||
240 | JE_COMPILABLE([mremap(...MREMAP_FIXED...)], [ | |
241 | #define _GNU_SOURCE | |
242 | #include <sys/mman.h> | |
243 | ], [ | |
244 | void *p = mremap((void *)0, 0, 0, MREMAP_MAYMOVE|MREMAP_FIXED, (void *)0); | |
245 | ], [mremap_fixed]) | |
246 | if test "x${mremap_fixed}" = "xyes" ; then | |
247 | AC_DEFINE([JEMALLOC_MREMAP_FIXED]) | |
248 | fi | |
249 | ||
250 | dnl Support optional additions to rpath. | |
251 | AC_ARG_WITH([rpath], | |
252 | [AS_HELP_STRING([--with-rpath=<rpath>], [Colon-separated rpath (ELF systems only)])], | |
253 | if test "x$with_rpath" = "xno" ; then | |
254 | RPATH_EXTRA= | |
255 | else | |
256 | RPATH_EXTRA="`echo $with_rpath | tr \":\" \" \"`" | |
257 | fi, | |
258 | RPATH_EXTRA= | |
259 | ) | |
260 | AC_SUBST([RPATH_EXTRA]) | |
261 | ||
262 | dnl Disable rules that do automatic regeneration of configure output by default. | |
263 | AC_ARG_ENABLE([autogen], | |
264 | [AS_HELP_STRING([--enable-autogen], [Automatically regenerate configure output])], | |
265 | if test "x$enable_autogen" = "xno" ; then | |
266 | enable_autogen="0" | |
267 | else | |
268 | enable_autogen="1" | |
269 | fi | |
270 | , | |
271 | enable_autogen="0" | |
272 | ) | |
273 | AC_SUBST([enable_autogen]) | |
274 | ||
275 | AC_PROG_INSTALL | |
276 | AC_PROG_RANLIB | |
277 | AC_PATH_PROG([AR], [ar], , [$PATH]) | |
278 | AC_PATH_PROG([LD], [ld], , [$PATH]) | |
279 | AC_PATH_PROG([AUTOCONF], [autoconf], , [$PATH]) | |
280 | ||
281 | dnl Do not prefix public APIs by default. | |
282 | AC_ARG_WITH([jemalloc_prefix], | |
283 | [AS_HELP_STRING([--with-jemalloc-prefix=<prefix>], [Prefix to prepend to all public APIs])], | |
284 | [JEMALLOC_PREFIX="$with_jemalloc_prefix"], | |
285 | [if test "x$abi" != "xmacho" ; then | |
286 | JEMALLOC_PREFIX="" | |
287 | else | |
288 | JEMALLOC_PREFIX="je_" | |
289 | fi] | |
290 | ) | |
291 | if test "x$JEMALLOC_PREFIX" != "x" ; then | |
292 | JEMALLOC_CPREFIX=`echo ${JEMALLOC_PREFIX} | tr "a-z" "A-Z"` | |
293 | AC_DEFINE_UNQUOTED([JEMALLOC_PREFIX], ["$JEMALLOC_PREFIX"]) | |
294 | AC_DEFINE_UNQUOTED([JEMALLOC_CPREFIX], ["$JEMALLOC_CPREFIX"]) | |
a78e148b | 295 | AC_DEFINE_UNQUOTED([JEMALLOC_P(string_that_no_one_should_want_to_use_as_a_jemalloc_API_prefix)], [${JEMALLOC_PREFIX}##string_that_no_one_should_want_to_use_as_a_jemalloc_API_prefix]) |
296 | fi | |
297 | ||
1d03c1c9 | 298 | dnl Do not mangle library-private APIs by default. |
299 | AC_ARG_WITH([private_namespace], | |
300 | [AS_HELP_STRING([--with-private-namespace=<prefix>], [Prefix to prepend to all library-private APIs])], | |
301 | [JEMALLOC_PRIVATE_NAMESPACE="$with_private_namespace"], | |
302 | [JEMALLOC_PRIVATE_NAMESPACE=""] | |
303 | ) | |
304 | AC_DEFINE_UNQUOTED([JEMALLOC_PRIVATE_NAMESPACE], ["$JEMALLOC_PRIVATE_NAMESPACE"]) | |
305 | if test "x$JEMALLOC_PRIVATE_NAMESPACE" != "x" ; then | |
306 | AC_DEFINE_UNQUOTED([JEMALLOC_N(string_that_no_one_should_want_to_use_as_a_jemalloc_private_namespace_prefix)], [${JEMALLOC_PRIVATE_NAMESPACE}##string_that_no_one_should_want_to_use_as_a_jemalloc_private_namespace_prefix]) | |
307 | else | |
308 | AC_DEFINE_UNQUOTED([JEMALLOC_N(string_that_no_one_should_want_to_use_as_a_jemalloc_private_namespace_prefix)], [string_that_no_one_should_want_to_use_as_a_jemalloc_private_namespace_prefix]) | |
309 | fi | |
310 | ||
a78e148b | 311 | dnl Do not add suffix to installed files by default. |
312 | AC_ARG_WITH([install_suffix], | |
313 | [AS_HELP_STRING([--with-install-suffix=<suffix>], [Suffix to append to all installed files])], | |
314 | [INSTALL_SUFFIX="$with_install_suffix"], | |
315 | [INSTALL_SUFFIX=] | |
316 | ) | |
317 | install_suffix="$INSTALL_SUFFIX" | |
318 | AC_SUBST([install_suffix]) | |
319 | ||
320 | cfgoutputs_in="${srcroot}Makefile.in" | |
321 | cfgoutputs_in="${cfgoutputs_in} ${srcroot}doc/html.xsl.in" | |
322 | cfgoutputs_in="${cfgoutputs_in} ${srcroot}doc/manpages.xsl.in" | |
323 | cfgoutputs_in="${cfgoutputs_in} ${srcroot}doc/jemalloc.xml.in" | |
324 | cfgoutputs_in="${cfgoutputs_in} ${srcroot}include/jemalloc/jemalloc.h.in" | |
325 | cfgoutputs_in="${cfgoutputs_in} ${srcroot}include/jemalloc/internal/jemalloc_internal.h.in" | |
326 | cfgoutputs_in="${cfgoutputs_in} ${srcroot}test/jemalloc_test.h.in" | |
327 | ||
328 | cfgoutputs_out="Makefile" | |
329 | cfgoutputs_out="${cfgoutputs_out} doc/html.xsl" | |
330 | cfgoutputs_out="${cfgoutputs_out} doc/manpages.xsl" | |
331 | cfgoutputs_out="${cfgoutputs_out} doc/jemalloc${install_suffix}.xml" | |
332 | cfgoutputs_out="${cfgoutputs_out} include/jemalloc/jemalloc${install_suffix}.h" | |
333 | cfgoutputs_out="${cfgoutputs_out} include/jemalloc/internal/jemalloc_internal.h" | |
334 | cfgoutputs_out="${cfgoutputs_out} test/jemalloc_test.h" | |
335 | ||
336 | cfgoutputs_tup="Makefile" | |
337 | cfgoutputs_tup="${cfgoutputs_tup} doc/html.xsl:doc/html.xsl.in" | |
338 | cfgoutputs_tup="${cfgoutputs_tup} doc/manpages.xsl:doc/manpages.xsl.in" | |
339 | cfgoutputs_tup="${cfgoutputs_tup} doc/jemalloc${install_suffix}.xml:doc/jemalloc.xml.in" | |
340 | cfgoutputs_tup="${cfgoutputs_tup} include/jemalloc/jemalloc${install_suffix}.h:include/jemalloc/jemalloc.h.in" | |
341 | cfgoutputs_tup="${cfgoutputs_tup} include/jemalloc/internal/jemalloc_internal.h" | |
342 | cfgoutputs_tup="${cfgoutputs_tup} test/jemalloc_test.h:test/jemalloc_test.h.in" | |
343 | ||
344 | cfghdrs_in="${srcroot}include/jemalloc/jemalloc_defs.h.in" | |
345 | ||
346 | cfghdrs_out="include/jemalloc/jemalloc_defs${install_suffix}.h" | |
347 | ||
348 | cfghdrs_tup="include/jemalloc/jemalloc_defs${install_suffix}.h:include/jemalloc/jemalloc_defs.h.in" | |
349 | ||
350 | dnl Do not silence irrelevant compiler warnings by default, since enabling this | |
351 | dnl option incurs a performance penalty. | |
352 | AC_ARG_ENABLE([cc-silence], | |
353 | [AS_HELP_STRING([--enable-cc-silence], | |
354 | [Silence irrelevant compiler warnings])], | |
355 | [if test "x$enable_cc_silence" = "xno" ; then | |
356 | enable_cc_silence="0" | |
357 | else | |
358 | enable_cc_silence="1" | |
359 | fi | |
360 | ], | |
361 | [enable_cc_silence="0"] | |
362 | ) | |
363 | if test "x$enable_cc_silence" = "x1" ; then | |
364 | AC_DEFINE([JEMALLOC_CC_SILENCE]) | |
365 | fi | |
366 | ||
367 | dnl Do not compile with debugging by default. | |
368 | AC_ARG_ENABLE([debug], | |
369 | [AS_HELP_STRING([--enable-debug], [Build debugging code])], | |
370 | [if test "x$enable_debug" = "xno" ; then | |
371 | enable_debug="0" | |
372 | else | |
373 | enable_debug="1" | |
374 | fi | |
375 | ], | |
376 | [enable_debug="0"] | |
377 | ) | |
378 | if test "x$enable_debug" = "x1" ; then | |
379 | AC_DEFINE([JEMALLOC_DEBUG], [ ]) | |
380 | AC_DEFINE([JEMALLOC_IVSALLOC], [ ]) | |
381 | fi | |
382 | AC_SUBST([enable_debug]) | |
383 | ||
384 | dnl Only optimize if not debugging. | |
385 | if test "x$enable_debug" = "x0" -a "x$no_CFLAGS" = "xyes" ; then | |
386 | dnl Make sure that an optimization flag was not specified in EXTRA_CFLAGS. | |
387 | optimize="no" | |
388 | echo "$EXTRA_CFLAGS" | grep "\-O" >/dev/null || optimize="yes" | |
389 | if test "x${optimize}" = "xyes" ; then | |
390 | if test "x$GCC" = "xyes" ; then | |
391 | JE_CFLAGS_APPEND([-O3]) | |
392 | JE_CFLAGS_APPEND([-funroll-loops]) | |
393 | else | |
394 | JE_CFLAGS_APPEND([-O]) | |
395 | fi | |
396 | fi | |
397 | fi | |
398 | ||
399 | dnl Do not enable statistics calculation by default. | |
400 | AC_ARG_ENABLE([stats], | |
401 | [AS_HELP_STRING([--enable-stats], [Enable statistics calculation/reporting])], | |
402 | [if test "x$enable_stats" = "xno" ; then | |
403 | enable_stats="0" | |
404 | else | |
405 | enable_stats="1" | |
406 | fi | |
407 | ], | |
408 | [enable_stats="0"] | |
409 | ) | |
410 | if test "x$enable_stats" = "x1" ; then | |
411 | AC_DEFINE([JEMALLOC_STATS], [ ]) | |
412 | fi | |
413 | AC_SUBST([enable_stats]) | |
414 | ||
415 | dnl Do not enable profiling by default. | |
416 | AC_ARG_ENABLE([prof], | |
417 | [AS_HELP_STRING([--enable-prof], [Enable allocation profiling])], | |
418 | [if test "x$enable_prof" = "xno" ; then | |
419 | enable_prof="0" | |
420 | else | |
421 | enable_prof="1" | |
422 | fi | |
423 | ], | |
424 | [enable_prof="0"] | |
425 | ) | |
426 | if test "x$enable_prof" = "x1" ; then | |
427 | backtrace_method="" | |
428 | else | |
429 | backtrace_method="N/A" | |
430 | fi | |
431 | ||
432 | AC_ARG_ENABLE([prof-libunwind], | |
433 | [AS_HELP_STRING([--enable-prof-libunwind], [Use libunwind for backtracing])], | |
434 | [if test "x$enable_prof_libunwind" = "xno" ; then | |
435 | enable_prof_libunwind="0" | |
436 | else | |
437 | enable_prof_libunwind="1" | |
438 | fi | |
439 | ], | |
440 | [enable_prof_libunwind="0"] | |
441 | ) | |
442 | AC_ARG_WITH([static_libunwind], | |
443 | [AS_HELP_STRING([--with-static-libunwind=<libunwind.a>], | |
444 | [Path to static libunwind library; use rather than dynamically linking])], | |
445 | if test "x$with_static_libunwind" = "xno" ; then | |
446 | LUNWIND="-lunwind" | |
447 | else | |
448 | if test ! -f "$with_static_libunwind" ; then | |
449 | AC_MSG_ERROR([Static libunwind not found: $with_static_libunwind]) | |
450 | fi | |
451 | LUNWIND="$with_static_libunwind" | |
452 | fi, | |
453 | LUNWIND="-lunwind" | |
454 | ) | |
455 | if test "x$backtrace_method" = "x" -a "x$enable_prof_libunwind" = "x1" ; then | |
456 | AC_CHECK_HEADERS([libunwind.h], , [enable_prof_libunwind="0"]) | |
457 | if test "x$LUNWIND" = "x-lunwind" ; then | |
458 | AC_CHECK_LIB([unwind], [backtrace], [LIBS="$LIBS $LUNWIND"], | |
459 | [enable_prof_libunwind="0"]) | |
460 | else | |
461 | LIBS="$LIBS $LUNWIND" | |
462 | fi | |
463 | if test "x${enable_prof_libunwind}" = "x1" ; then | |
464 | backtrace_method="libunwind" | |
465 | AC_DEFINE([JEMALLOC_PROF_LIBUNWIND], [ ]) | |
466 | fi | |
467 | fi | |
468 | ||
469 | AC_ARG_ENABLE([prof-libgcc], | |
470 | [AS_HELP_STRING([--disable-prof-libgcc], | |
471 | [Do not use libgcc for backtracing])], | |
472 | [if test "x$enable_prof_libgcc" = "xno" ; then | |
473 | enable_prof_libgcc="0" | |
474 | else | |
475 | enable_prof_libgcc="1" | |
476 | fi | |
477 | ], | |
478 | [enable_prof_libgcc="1"] | |
479 | ) | |
480 | if test "x$backtrace_method" = "x" -a "x$enable_prof_libgcc" = "x1" \ | |
481 | -a "x$GCC" = "xyes" ; then | |
482 | AC_CHECK_HEADERS([unwind.h], , [enable_prof_libgcc="0"]) | |
483 | AC_CHECK_LIB([gcc], [_Unwind_Backtrace], [LIBS="$LIBS -lgcc"], [enable_prof_libgcc="0"]) | |
484 | dnl The following is conservative, in that it only has entries for CPUs on | |
485 | dnl which jemalloc has been tested. | |
486 | AC_MSG_CHECKING([libgcc-based backtracing reliability on ${host_cpu}]) | |
487 | case "${host_cpu}" in | |
488 | i[[3456]]86) | |
489 | AC_MSG_RESULT([unreliable]) | |
490 | enable_prof_libgcc="0"; | |
491 | ;; | |
492 | x86_64) | |
493 | AC_MSG_RESULT([reliable]) | |
494 | ;; | |
495 | *) | |
496 | AC_MSG_RESULT([unreliable]) | |
497 | enable_prof_libgcc="0"; | |
498 | ;; | |
499 | esac | |
500 | if test "x${enable_prof_libgcc}" = "x1" ; then | |
501 | backtrace_method="libgcc" | |
502 | AC_DEFINE([JEMALLOC_PROF_LIBGCC], [ ]) | |
503 | fi | |
504 | else | |
505 | enable_prof_libgcc="0" | |
506 | fi | |
507 | ||
508 | AC_ARG_ENABLE([prof-gcc], | |
509 | [AS_HELP_STRING([--disable-prof-gcc], | |
510 | [Do not use gcc intrinsics for backtracing])], | |
511 | [if test "x$enable_prof_gcc" = "xno" ; then | |
512 | enable_prof_gcc="0" | |
513 | else | |
514 | enable_prof_gcc="1" | |
515 | fi | |
516 | ], | |
517 | [enable_prof_gcc="1"] | |
518 | ) | |
519 | if test "x$backtrace_method" = "x" -a "x$enable_prof_gcc" = "x1" \ | |
520 | -a "x$GCC" = "xyes" ; then | |
521 | backtrace_method="gcc intrinsics" | |
522 | AC_DEFINE([JEMALLOC_PROF_GCC], [ ]) | |
523 | else | |
524 | enable_prof_gcc="0" | |
525 | fi | |
526 | ||
527 | if test "x$backtrace_method" = "x" ; then | |
528 | backtrace_method="none (disabling profiling)" | |
529 | enable_prof="0" | |
530 | fi | |
531 | AC_MSG_CHECKING([configured backtracing method]) | |
532 | AC_MSG_RESULT([$backtrace_method]) | |
533 | if test "x$enable_prof" = "x1" ; then | |
534 | LIBS="$LIBS -lm" | |
535 | AC_DEFINE([JEMALLOC_PROF], [ ]) | |
536 | fi | |
537 | AC_SUBST([enable_prof]) | |
538 | ||
539 | dnl Enable tiny allocations by default. | |
540 | AC_ARG_ENABLE([tiny], | |
541 | [AS_HELP_STRING([--disable-tiny], [Disable tiny (sub-quantum) allocations])], | |
542 | [if test "x$enable_tiny" = "xno" ; then | |
543 | enable_tiny="0" | |
544 | else | |
545 | enable_tiny="1" | |
546 | fi | |
547 | ], | |
548 | [enable_tiny="1"] | |
549 | ) | |
550 | if test "x$enable_tiny" = "x1" ; then | |
551 | AC_DEFINE([JEMALLOC_TINY], [ ]) | |
552 | fi | |
553 | AC_SUBST([enable_tiny]) | |
554 | ||
555 | dnl Enable thread-specific caching by default. | |
556 | AC_ARG_ENABLE([tcache], | |
557 | [AS_HELP_STRING([--disable-tcache], [Disable per thread caches])], | |
558 | [if test "x$enable_tcache" = "xno" ; then | |
559 | enable_tcache="0" | |
560 | else | |
561 | enable_tcache="1" | |
562 | fi | |
563 | ], | |
564 | [enable_tcache="1"] | |
565 | ) | |
566 | if test "x$enable_tcache" = "x1" ; then | |
567 | AC_DEFINE([JEMALLOC_TCACHE], [ ]) | |
568 | fi | |
569 | AC_SUBST([enable_tcache]) | |
570 | ||
571 | dnl Do not enable mmap()ped swap files by default. | |
572 | AC_ARG_ENABLE([swap], | |
573 | [AS_HELP_STRING([--enable-swap], [Enable mmap()ped swap files])], | |
574 | [if test "x$enable_swap" = "xno" ; then | |
575 | enable_swap="0" | |
576 | else | |
577 | enable_swap="1" | |
578 | fi | |
579 | ], | |
580 | [enable_swap="0"] | |
581 | ) | |
582 | if test "x$enable_swap" = "x1" ; then | |
583 | AC_DEFINE([JEMALLOC_SWAP], [ ]) | |
584 | fi | |
585 | AC_SUBST([enable_swap]) | |
586 | ||
587 | dnl Do not enable allocation from DSS by default. | |
588 | AC_ARG_ENABLE([dss], | |
589 | [AS_HELP_STRING([--enable-dss], [Enable allocation from DSS])], | |
590 | [if test "x$enable_dss" = "xno" ; then | |
591 | enable_dss="0" | |
592 | else | |
593 | enable_dss="1" | |
594 | fi | |
595 | ], | |
596 | [enable_dss="0"] | |
597 | ) | |
598 | if test "x$enable_dss" = "x1" ; then | |
599 | AC_DEFINE([JEMALLOC_DSS], [ ]) | |
600 | fi | |
601 | AC_SUBST([enable_dss]) | |
602 | ||
603 | dnl Do not support the junk/zero filling option by default. | |
604 | AC_ARG_ENABLE([fill], | |
605 | [AS_HELP_STRING([--enable-fill], [Support junk/zero filling option])], | |
606 | [if test "x$enable_fill" = "xno" ; then | |
607 | enable_fill="0" | |
608 | else | |
609 | enable_fill="1" | |
610 | fi | |
611 | ], | |
612 | [enable_fill="0"] | |
613 | ) | |
614 | if test "x$enable_fill" = "x1" ; then | |
615 | AC_DEFINE([JEMALLOC_FILL], [ ]) | |
616 | fi | |
617 | AC_SUBST([enable_fill]) | |
618 | ||
619 | dnl Do not support the xmalloc option by default. | |
620 | AC_ARG_ENABLE([xmalloc], | |
621 | [AS_HELP_STRING([--enable-xmalloc], [Support xmalloc option])], | |
622 | [if test "x$enable_xmalloc" = "xno" ; then | |
623 | enable_xmalloc="0" | |
624 | else | |
625 | enable_xmalloc="1" | |
626 | fi | |
627 | ], | |
628 | [enable_xmalloc="0"] | |
629 | ) | |
630 | if test "x$enable_xmalloc" = "x1" ; then | |
631 | AC_DEFINE([JEMALLOC_XMALLOC], [ ]) | |
632 | fi | |
633 | AC_SUBST([enable_xmalloc]) | |
634 | ||
635 | dnl Do not support the SYSV option by default. | |
636 | AC_ARG_ENABLE([sysv], | |
637 | [AS_HELP_STRING([--enable-sysv], [Support SYSV semantics option])], | |
638 | [if test "x$enable_sysv" = "xno" ; then | |
639 | enable_sysv="0" | |
640 | else | |
641 | enable_sysv="1" | |
642 | fi | |
643 | ], | |
644 | [enable_sysv="0"] | |
645 | ) | |
646 | if test "x$enable_sysv" = "x1" ; then | |
647 | AC_DEFINE([JEMALLOC_SYSV], [ ]) | |
648 | fi | |
649 | AC_SUBST([enable_sysv]) | |
650 | ||
651 | dnl Do not determine page shift at run time by default. | |
652 | AC_ARG_ENABLE([dynamic_page_shift], | |
653 | [AS_HELP_STRING([--enable-dynamic-page-shift], | |
654 | [Determine page size at run time (don't trust configure result)])], | |
655 | [if test "x$enable_dynamic_page_shift" = "xno" ; then | |
656 | enable_dynamic_page_shift="0" | |
657 | else | |
658 | enable_dynamic_page_shift="1" | |
659 | fi | |
660 | ], | |
661 | [enable_dynamic_page_shift="0"] | |
662 | ) | |
663 | if test "x$enable_dynamic_page_shift" = "x1" ; then | |
664 | AC_DEFINE([DYNAMIC_PAGE_SHIFT], [ ]) | |
665 | fi | |
666 | AC_SUBST([enable_dynamic_page_shift]) | |
667 | ||
668 | AC_MSG_CHECKING([STATIC_PAGE_SHIFT]) | |
669 | AC_RUN_IFELSE([AC_LANG_PROGRAM( | |
670 | [[#include <stdio.h> | |
671 | #include <unistd.h> | |
672 | #include <strings.h> | |
673 | ]], [[ | |
674 | long result; | |
675 | FILE *f; | |
676 | ||
677 | result = sysconf(_SC_PAGESIZE); | |
678 | if (result == -1) { | |
679 | return 1; | |
680 | } | |
681 | f = fopen("conftest.out", "w"); | |
682 | if (f == NULL) { | |
683 | return 1; | |
684 | } | |
685 | fprintf(f, "%u\n", ffs((int)result) - 1); | |
686 | close(f); | |
687 | ||
688 | return 0; | |
689 | ]])], | |
690 | [STATIC_PAGE_SHIFT=`cat conftest.out`] | |
691 | AC_MSG_RESULT([$STATIC_PAGE_SHIFT]) | |
692 | AC_DEFINE_UNQUOTED([STATIC_PAGE_SHIFT], [$STATIC_PAGE_SHIFT]), | |
693 | AC_MSG_RESULT([error])) | |
694 | ||
695 | dnl ============================================================================ | |
696 | dnl jemalloc configuration. | |
697 | dnl | |
698 | ||
699 | dnl Set VERSION if source directory has an embedded git repository. | |
1d03c1c9 | 700 | if test -d "${srcroot}.git" ; then |
a78e148b | 701 | git describe --long --abbrev=40 > ${srcroot}VERSION |
702 | fi | |
703 | jemalloc_version=`cat ${srcroot}VERSION` | |
704 | jemalloc_version_major=`echo ${jemalloc_version} | tr ".g-" " " | awk '{print [$]1}'` | |
705 | jemalloc_version_minor=`echo ${jemalloc_version} | tr ".g-" " " | awk '{print [$]2}'` | |
706 | jemalloc_version_bugfix=`echo ${jemalloc_version} | tr ".g-" " " | awk '{print [$]3}'` | |
707 | jemalloc_version_nrev=`echo ${jemalloc_version} | tr ".g-" " " | awk '{print [$]4}'` | |
708 | jemalloc_version_gid=`echo ${jemalloc_version} | tr ".g-" " " | awk '{print [$]5}'` | |
709 | AC_SUBST([jemalloc_version]) | |
710 | AC_SUBST([jemalloc_version_major]) | |
711 | AC_SUBST([jemalloc_version_minor]) | |
712 | AC_SUBST([jemalloc_version_bugfix]) | |
713 | AC_SUBST([jemalloc_version_nrev]) | |
714 | AC_SUBST([jemalloc_version_gid]) | |
715 | ||
716 | dnl ============================================================================ | |
717 | dnl Configure pthreads. | |
718 | ||
719 | AC_CHECK_HEADERS([pthread.h], , [AC_MSG_ERROR([pthread.h is missing])]) | |
720 | AC_CHECK_LIB([pthread], [pthread_create], [LIBS="$LIBS -lpthread"], | |
721 | [AC_MSG_ERROR([libpthread is missing])]) | |
722 | ||
723 | CPPFLAGS="$CPPFLAGS -D_REENTRANT" | |
724 | ||
725 | dnl Enable lazy locking by default. | |
726 | AC_ARG_ENABLE([lazy_lock], | |
727 | [AS_HELP_STRING([--disable-lazy-lock], | |
728 | [Disable lazy locking (always lock, even when single-threaded)])], | |
729 | [if test "x$enable_lazy_lock" = "xno" ; then | |
730 | enable_lazy_lock="0" | |
731 | else | |
732 | enable_lazy_lock="1" | |
733 | fi | |
734 | ], | |
735 | [enable_lazy_lock="1"] | |
736 | ) | |
737 | if test "x$enable_lazy_lock" = "x1" ; then | |
738 | AC_CHECK_HEADERS([dlfcn.h], , [AC_MSG_ERROR([dlfcn.h is missing])]) | |
739 | AC_CHECK_LIB([dl], [dlopen], [LIBS="$LIBS -ldl"], | |
740 | [AC_MSG_ERROR([libdl is missing])]) | |
741 | AC_DEFINE([JEMALLOC_LAZY_LOCK], [ ]) | |
742 | fi | |
743 | AC_SUBST([enable_lazy_lock]) | |
744 | ||
745 | AC_ARG_ENABLE([tls], | |
746 | [AS_HELP_STRING([--disable-tls], [Disable thread-local storage (__thread keyword)])], | |
747 | if test "x$enable_tls" = "xno" ; then | |
748 | enable_tls="0" | |
749 | else | |
750 | enable_tls="1" | |
751 | fi | |
752 | , | |
753 | enable_tls="1" | |
754 | ) | |
755 | if test "x${enable_tls}" = "x1" ; then | |
756 | AC_MSG_CHECKING([for TLS]) | |
757 | AC_RUN_IFELSE([AC_LANG_PROGRAM( | |
758 | [[ | |
759 | __thread int x; | |
760 | ]], [[ | |
761 | x = 42; | |
762 | ||
763 | return 0; | |
764 | ]])], | |
765 | AC_MSG_RESULT([yes]), | |
766 | AC_MSG_RESULT([no]) | |
767 | enable_tls="0") | |
768 | fi | |
769 | AC_SUBST([enable_tls]) | |
770 | if test "x${enable_tls}" = "x0" ; then | |
771 | AC_DEFINE_UNQUOTED([NO_TLS], [ ]) | |
772 | fi | |
773 | ||
774 | dnl ============================================================================ | |
775 | dnl Check for ffsl(3), and fail if not found. This function exists on all | |
776 | dnl platforms that jemalloc currently has a chance of functioning on without | |
777 | dnl modification. | |
778 | ||
779 | AC_CHECK_FUNC([ffsl], [], | |
780 | [AC_MSG_ERROR([Cannot build without ffsl(3)])]) | |
781 | ||
782 | dnl ============================================================================ | |
783 | dnl Check for atomic(3) operations as provided on Darwin. | |
784 | ||
785 | JE_COMPILABLE([Darwin OSAtomic*()], [ | |
786 | #include <libkern/OSAtomic.h> | |
787 | #include <inttypes.h> | |
788 | ], [ | |
789 | { | |
790 | int32_t x32 = 0; | |
791 | volatile int32_t *x32p = &x32; | |
792 | OSAtomicAdd32(1, x32p); | |
793 | } | |
794 | { | |
795 | int64_t x64 = 0; | |
796 | volatile int64_t *x64p = &x64; | |
797 | OSAtomicAdd64(1, x64p); | |
798 | } | |
799 | ], [osatomic]) | |
800 | if test "x${osatomic}" = "xyes" ; then | |
801 | AC_DEFINE([JEMALLOC_OSATOMIC]) | |
802 | fi | |
803 | ||
804 | dnl ============================================================================ | |
805 | dnl Check for spinlock(3) operations as provided on Darwin. | |
806 | ||
807 | JE_COMPILABLE([Darwin OSSpin*()], [ | |
808 | #include <libkern/OSAtomic.h> | |
809 | #include <inttypes.h> | |
810 | ], [ | |
811 | OSSpinLock lock = 0; | |
812 | OSSpinLockLock(&lock); | |
813 | OSSpinLockUnlock(&lock); | |
814 | ], [osspin]) | |
815 | if test "x${osspin}" = "xyes" ; then | |
816 | AC_DEFINE([JEMALLOC_OSSPIN]) | |
817 | fi | |
818 | ||
819 | dnl ============================================================================ | |
820 | dnl Check for allocator-related functions that should be wrapped. | |
821 | ||
822 | AC_CHECK_FUNC([memalign], | |
823 | [AC_DEFINE([JEMALLOC_OVERRIDE_MEMALIGN])]) | |
824 | AC_CHECK_FUNC([valloc], | |
825 | [AC_DEFINE([JEMALLOC_OVERRIDE_VALLOC])]) | |
826 | ||
827 | dnl ============================================================================ | |
828 | dnl Darwin-related configuration. | |
829 | ||
830 | if test "x${abi}" = "xmacho" ; then | |
831 | AC_DEFINE([JEMALLOC_IVSALLOC]) | |
832 | AC_DEFINE([JEMALLOC_ZONE]) | |
833 | ||
834 | dnl The szone version jumped from 3 to 6 between the OS X 10.5.x and 10.6 | |
835 | dnl releases. malloc_zone_t and malloc_introspection_t have new fields in | |
836 | dnl 10.6, which is the only source-level indication of the change. | |
837 | AC_MSG_CHECKING([malloc zone version]) | |
838 | AC_TRY_COMPILE([#include <stdlib.h> | |
839 | #include <malloc/malloc.h>], [ | |
840 | static malloc_zone_t zone; | |
841 | static struct malloc_introspection_t zone_introspect; | |
842 | ||
843 | zone.size = NULL; | |
844 | zone.malloc = NULL; | |
845 | zone.calloc = NULL; | |
846 | zone.valloc = NULL; | |
847 | zone.free = NULL; | |
848 | zone.realloc = NULL; | |
849 | zone.destroy = NULL; | |
850 | zone.zone_name = "jemalloc_zone"; | |
851 | zone.batch_malloc = NULL; | |
852 | zone.batch_free = NULL; | |
853 | zone.introspect = &zone_introspect; | |
854 | zone.version = 6; | |
855 | zone.memalign = NULL; | |
856 | zone.free_definite_size = NULL; | |
857 | ||
858 | zone_introspect.enumerator = NULL; | |
859 | zone_introspect.good_size = NULL; | |
860 | zone_introspect.check = NULL; | |
861 | zone_introspect.print = NULL; | |
862 | zone_introspect.log = NULL; | |
863 | zone_introspect.force_lock = NULL; | |
864 | zone_introspect.force_unlock = NULL; | |
865 | zone_introspect.statistics = NULL; | |
866 | zone_introspect.zone_locked = NULL; | |
867 | ], [AC_DEFINE_UNQUOTED([JEMALLOC_ZONE_VERSION], [6]) | |
868 | AC_MSG_RESULT([6])], | |
869 | [AC_DEFINE_UNQUOTED([JEMALLOC_ZONE_VERSION], [3]) | |
870 | AC_MSG_RESULT([3])]) | |
871 | fi | |
872 | ||
873 | dnl ============================================================================ | |
874 | dnl Check for typedefs, structures, and compiler characteristics. | |
875 | AC_HEADER_STDBOOL | |
876 | ||
877 | dnl Process .in files. | |
878 | AC_SUBST([cfghdrs_in]) | |
879 | AC_SUBST([cfghdrs_out]) | |
880 | AC_CONFIG_HEADERS([$cfghdrs_tup]) | |
881 | ||
882 | dnl ============================================================================ | |
883 | dnl Generate outputs. | |
884 | AC_CONFIG_FILES([$cfgoutputs_tup config.stamp]) | |
885 | AC_SUBST([cfgoutputs_in]) | |
886 | AC_SUBST([cfgoutputs_out]) | |
887 | AC_OUTPUT | |
888 | ||
889 | dnl ============================================================================ | |
890 | dnl Print out the results of configuration. | |
891 | AC_MSG_RESULT([===============================================================================]) | |
892 | AC_MSG_RESULT([jemalloc version : $jemalloc_version]) | |
893 | AC_MSG_RESULT([]) | |
894 | AC_MSG_RESULT([CC : ${CC}]) | |
895 | AC_MSG_RESULT([CPPFLAGS : ${CPPFLAGS}]) | |
896 | AC_MSG_RESULT([CFLAGS : ${CFLAGS}]) | |
897 | AC_MSG_RESULT([LDFLAGS : ${LDFLAGS}]) | |
898 | AC_MSG_RESULT([LIBS : ${LIBS}]) | |
899 | AC_MSG_RESULT([RPATH_EXTRA : ${RPATH_EXTRA}]) | |
900 | AC_MSG_RESULT([]) | |
901 | AC_MSG_RESULT([XSLTPROC : ${XSLTPROC}]) | |
902 | AC_MSG_RESULT([XSLROOT : ${XSLROOT}]) | |
903 | AC_MSG_RESULT([]) | |
904 | AC_MSG_RESULT([PREFIX : ${PREFIX}]) | |
905 | AC_MSG_RESULT([BINDIR : ${BINDIR}]) | |
906 | AC_MSG_RESULT([INCLUDEDIR : ${INCLUDEDIR}]) | |
907 | AC_MSG_RESULT([LIBDIR : ${LIBDIR}]) | |
908 | AC_MSG_RESULT([DATADIR : ${DATADIR}]) | |
909 | AC_MSG_RESULT([MANDIR : ${MANDIR}]) | |
910 | AC_MSG_RESULT([]) | |
911 | AC_MSG_RESULT([srcroot : ${srcroot}]) | |
912 | AC_MSG_RESULT([abs_srcroot : ${abs_srcroot}]) | |
913 | AC_MSG_RESULT([objroot : ${objroot}]) | |
914 | AC_MSG_RESULT([abs_objroot : ${abs_objroot}]) | |
915 | AC_MSG_RESULT([]) | |
916 | AC_MSG_RESULT([JEMALLOC_PREFIX : ${JEMALLOC_PREFIX}]) | |
1d03c1c9 | 917 | AC_MSG_RESULT([JEMALLOC_PRIVATE_NAMESPACE]) |
918 | AC_MSG_RESULT([ : ${JEMALLOC_PRIVATE_NAMESPACE}]) | |
a78e148b | 919 | AC_MSG_RESULT([install_suffix : ${install_suffix}]) |
920 | AC_MSG_RESULT([autogen : ${enable_autogen}]) | |
921 | AC_MSG_RESULT([cc-silence : ${enable_cc_silence}]) | |
922 | AC_MSG_RESULT([debug : ${enable_debug}]) | |
923 | AC_MSG_RESULT([stats : ${enable_stats}]) | |
924 | AC_MSG_RESULT([prof : ${enable_prof}]) | |
925 | AC_MSG_RESULT([prof-libunwind : ${enable_prof_libunwind}]) | |
926 | AC_MSG_RESULT([prof-libgcc : ${enable_prof_libgcc}]) | |
927 | AC_MSG_RESULT([prof-gcc : ${enable_prof_gcc}]) | |
928 | AC_MSG_RESULT([tiny : ${enable_tiny}]) | |
929 | AC_MSG_RESULT([tcache : ${enable_tcache}]) | |
930 | AC_MSG_RESULT([fill : ${enable_fill}]) | |
931 | AC_MSG_RESULT([xmalloc : ${enable_xmalloc}]) | |
932 | AC_MSG_RESULT([sysv : ${enable_sysv}]) | |
933 | AC_MSG_RESULT([swap : ${enable_swap}]) | |
934 | AC_MSG_RESULT([dss : ${enable_dss}]) | |
935 | AC_MSG_RESULT([dynamic_page_shift : ${enable_dynamic_page_shift}]) | |
936 | AC_MSG_RESULT([lazy_lock : ${enable_lazy_lock}]) | |
937 | AC_MSG_RESULT([tls : ${enable_tls}]) | |
938 | AC_MSG_RESULT([===============================================================================]) |