1*1208bc7eSAndroid Build Coastguard Workerdnl Process this file with autoconf to produce a configure script. 2*1208bc7eSAndroid Build Coastguard WorkerAC_PREREQ(2.68) 3*1208bc7eSAndroid Build Coastguard WorkerAC_INIT([Makefile.in]) 4*1208bc7eSAndroid Build Coastguard Worker 5*1208bc7eSAndroid Build Coastguard WorkerAC_CONFIG_AUX_DIR([build-aux]) 6*1208bc7eSAndroid Build Coastguard Worker 7*1208bc7eSAndroid Build Coastguard Workerdnl ============================================================================ 8*1208bc7eSAndroid Build Coastguard Workerdnl Custom macro definitions. 9*1208bc7eSAndroid Build Coastguard Worker 10*1208bc7eSAndroid Build Coastguard Workerdnl JE_CONCAT_VVV(r, a, b) 11*1208bc7eSAndroid Build Coastguard Workerdnl 12*1208bc7eSAndroid Build Coastguard Workerdnl Set $r to the concatenation of $a and $b, with a space separating them iff 13*1208bc7eSAndroid Build Coastguard Workerdnl both $a and $b are non-empty. 14*1208bc7eSAndroid Build Coastguard WorkerAC_DEFUN([JE_CONCAT_VVV], 15*1208bc7eSAndroid Build Coastguard Workerif test "x[$]{$2}" = "x" -o "x[$]{$3}" = "x" ; then 16*1208bc7eSAndroid Build Coastguard Worker $1="[$]{$2}[$]{$3}" 17*1208bc7eSAndroid Build Coastguard Workerelse 18*1208bc7eSAndroid Build Coastguard Worker $1="[$]{$2} [$]{$3}" 19*1208bc7eSAndroid Build Coastguard Workerfi 20*1208bc7eSAndroid Build Coastguard Worker) 21*1208bc7eSAndroid Build Coastguard Worker 22*1208bc7eSAndroid Build Coastguard Workerdnl JE_APPEND_VS(a, b) 23*1208bc7eSAndroid Build Coastguard Workerdnl 24*1208bc7eSAndroid Build Coastguard Workerdnl Set $a to the concatenation of $a and b, with a space separating them iff 25*1208bc7eSAndroid Build Coastguard Workerdnl both $a and b are non-empty. 26*1208bc7eSAndroid Build Coastguard WorkerAC_DEFUN([JE_APPEND_VS], 27*1208bc7eSAndroid Build Coastguard Worker T_APPEND_V=$2 28*1208bc7eSAndroid Build Coastguard Worker JE_CONCAT_VVV($1, $1, T_APPEND_V) 29*1208bc7eSAndroid Build Coastguard Worker) 30*1208bc7eSAndroid Build Coastguard Worker 31*1208bc7eSAndroid Build Coastguard WorkerCONFIGURE_CFLAGS= 32*1208bc7eSAndroid Build Coastguard WorkerSPECIFIED_CFLAGS="${CFLAGS}" 33*1208bc7eSAndroid Build Coastguard Workerdnl JE_CFLAGS_ADD(cflag) 34*1208bc7eSAndroid Build Coastguard Workerdnl 35*1208bc7eSAndroid Build Coastguard Workerdnl CFLAGS is the concatenation of CONFIGURE_CFLAGS and SPECIFIED_CFLAGS 36*1208bc7eSAndroid Build Coastguard Workerdnl (ignoring EXTRA_CFLAGS, which does not impact configure tests. This macro 37*1208bc7eSAndroid Build Coastguard Workerdnl appends to CONFIGURE_CFLAGS and regenerates CFLAGS. 38*1208bc7eSAndroid Build Coastguard WorkerAC_DEFUN([JE_CFLAGS_ADD], 39*1208bc7eSAndroid Build Coastguard Worker[ 40*1208bc7eSAndroid Build Coastguard WorkerAC_MSG_CHECKING([whether compiler supports $1]) 41*1208bc7eSAndroid Build Coastguard WorkerT_CONFIGURE_CFLAGS="${CONFIGURE_CFLAGS}" 42*1208bc7eSAndroid Build Coastguard WorkerJE_APPEND_VS(CONFIGURE_CFLAGS, $1) 43*1208bc7eSAndroid Build Coastguard WorkerJE_CONCAT_VVV(CFLAGS, CONFIGURE_CFLAGS, SPECIFIED_CFLAGS) 44*1208bc7eSAndroid Build Coastguard WorkerAC_COMPILE_IFELSE([AC_LANG_PROGRAM( 45*1208bc7eSAndroid Build Coastguard Worker[[ 46*1208bc7eSAndroid Build Coastguard Worker]], [[ 47*1208bc7eSAndroid Build Coastguard Worker return 0; 48*1208bc7eSAndroid Build Coastguard Worker]])], 49*1208bc7eSAndroid Build Coastguard Worker [je_cv_cflags_added=$1] 50*1208bc7eSAndroid Build Coastguard Worker AC_MSG_RESULT([yes]), 51*1208bc7eSAndroid Build Coastguard Worker [je_cv_cflags_added=] 52*1208bc7eSAndroid Build Coastguard Worker AC_MSG_RESULT([no]) 53*1208bc7eSAndroid Build Coastguard Worker [CONFIGURE_CFLAGS="${T_CONFIGURE_CFLAGS}"] 54*1208bc7eSAndroid Build Coastguard Worker) 55*1208bc7eSAndroid Build Coastguard WorkerJE_CONCAT_VVV(CFLAGS, CONFIGURE_CFLAGS, SPECIFIED_CFLAGS) 56*1208bc7eSAndroid Build Coastguard Worker]) 57*1208bc7eSAndroid Build Coastguard Worker 58*1208bc7eSAndroid Build Coastguard Workerdnl JE_CFLAGS_SAVE() 59*1208bc7eSAndroid Build Coastguard Workerdnl JE_CFLAGS_RESTORE() 60*1208bc7eSAndroid Build Coastguard Workerdnl 61*1208bc7eSAndroid Build Coastguard Workerdnl Save/restore CFLAGS. Nesting is not supported. 62*1208bc7eSAndroid Build Coastguard WorkerAC_DEFUN([JE_CFLAGS_SAVE], 63*1208bc7eSAndroid Build Coastguard WorkerSAVED_CONFIGURE_CFLAGS="${CONFIGURE_CFLAGS}" 64*1208bc7eSAndroid Build Coastguard Worker) 65*1208bc7eSAndroid Build Coastguard WorkerAC_DEFUN([JE_CFLAGS_RESTORE], 66*1208bc7eSAndroid Build Coastguard WorkerCONFIGURE_CFLAGS="${SAVED_CONFIGURE_CFLAGS}" 67*1208bc7eSAndroid Build Coastguard WorkerJE_CONCAT_VVV(CFLAGS, CONFIGURE_CFLAGS, SPECIFIED_CFLAGS) 68*1208bc7eSAndroid Build Coastguard Worker) 69*1208bc7eSAndroid Build Coastguard Worker 70*1208bc7eSAndroid Build Coastguard WorkerCONFIGURE_CXXFLAGS= 71*1208bc7eSAndroid Build Coastguard WorkerSPECIFIED_CXXFLAGS="${CXXFLAGS}" 72*1208bc7eSAndroid Build Coastguard Workerdnl JE_CXXFLAGS_ADD(cxxflag) 73*1208bc7eSAndroid Build Coastguard WorkerAC_DEFUN([JE_CXXFLAGS_ADD], 74*1208bc7eSAndroid Build Coastguard Worker[ 75*1208bc7eSAndroid Build Coastguard WorkerAC_MSG_CHECKING([whether compiler supports $1]) 76*1208bc7eSAndroid Build Coastguard WorkerT_CONFIGURE_CXXFLAGS="${CONFIGURE_CXXFLAGS}" 77*1208bc7eSAndroid Build Coastguard WorkerJE_APPEND_VS(CONFIGURE_CXXFLAGS, $1) 78*1208bc7eSAndroid Build Coastguard WorkerJE_CONCAT_VVV(CXXFLAGS, CONFIGURE_CXXFLAGS, SPECIFIED_CXXFLAGS) 79*1208bc7eSAndroid Build Coastguard WorkerAC_LANG_PUSH([C++]) 80*1208bc7eSAndroid Build Coastguard WorkerAC_COMPILE_IFELSE([AC_LANG_PROGRAM( 81*1208bc7eSAndroid Build Coastguard Worker[[ 82*1208bc7eSAndroid Build Coastguard Worker]], [[ 83*1208bc7eSAndroid Build Coastguard Worker return 0; 84*1208bc7eSAndroid Build Coastguard Worker]])], 85*1208bc7eSAndroid Build Coastguard Worker [je_cv_cxxflags_added=$1] 86*1208bc7eSAndroid Build Coastguard Worker AC_MSG_RESULT([yes]), 87*1208bc7eSAndroid Build Coastguard Worker [je_cv_cxxflags_added=] 88*1208bc7eSAndroid Build Coastguard Worker AC_MSG_RESULT([no]) 89*1208bc7eSAndroid Build Coastguard Worker [CONFIGURE_CXXFLAGS="${T_CONFIGURE_CXXFLAGS}"] 90*1208bc7eSAndroid Build Coastguard Worker) 91*1208bc7eSAndroid Build Coastguard WorkerAC_LANG_POP([C++]) 92*1208bc7eSAndroid Build Coastguard WorkerJE_CONCAT_VVV(CXXFLAGS, CONFIGURE_CXXFLAGS, SPECIFIED_CXXFLAGS) 93*1208bc7eSAndroid Build Coastguard Worker]) 94*1208bc7eSAndroid Build Coastguard Worker 95*1208bc7eSAndroid Build Coastguard Workerdnl JE_COMPILABLE(label, hcode, mcode, rvar) 96*1208bc7eSAndroid Build Coastguard Workerdnl 97*1208bc7eSAndroid Build Coastguard Workerdnl Use AC_LINK_IFELSE() rather than AC_COMPILE_IFELSE() so that linker errors 98*1208bc7eSAndroid Build Coastguard Workerdnl cause failure. 99*1208bc7eSAndroid Build Coastguard WorkerAC_DEFUN([JE_COMPILABLE], 100*1208bc7eSAndroid Build Coastguard Worker[ 101*1208bc7eSAndroid Build Coastguard WorkerAC_CACHE_CHECK([whether $1 is compilable], 102*1208bc7eSAndroid Build Coastguard Worker [$4], 103*1208bc7eSAndroid Build Coastguard Worker [AC_LINK_IFELSE([AC_LANG_PROGRAM([$2], 104*1208bc7eSAndroid Build Coastguard Worker [$3])], 105*1208bc7eSAndroid Build Coastguard Worker [$4=yes], 106*1208bc7eSAndroid Build Coastguard Worker [$4=no])]) 107*1208bc7eSAndroid Build Coastguard Worker]) 108*1208bc7eSAndroid Build Coastguard Worker 109*1208bc7eSAndroid Build Coastguard Workerdnl ============================================================================ 110*1208bc7eSAndroid Build Coastguard Worker 111*1208bc7eSAndroid Build Coastguard WorkerCONFIG=`echo ${ac_configure_args} | sed -e 's#'"'"'\([^ ]*\)'"'"'#\1#g'` 112*1208bc7eSAndroid Build Coastguard WorkerAC_SUBST([CONFIG]) 113*1208bc7eSAndroid Build Coastguard Worker 114*1208bc7eSAndroid Build Coastguard Workerdnl Library revision. 115*1208bc7eSAndroid Build Coastguard Workerrev=2 116*1208bc7eSAndroid Build Coastguard WorkerAC_SUBST([rev]) 117*1208bc7eSAndroid Build Coastguard Worker 118*1208bc7eSAndroid Build Coastguard Workersrcroot=$srcdir 119*1208bc7eSAndroid Build Coastguard Workerif test "x${srcroot}" = "x." ; then 120*1208bc7eSAndroid Build Coastguard Worker srcroot="" 121*1208bc7eSAndroid Build Coastguard Workerelse 122*1208bc7eSAndroid Build Coastguard Worker srcroot="${srcroot}/" 123*1208bc7eSAndroid Build Coastguard Workerfi 124*1208bc7eSAndroid Build Coastguard WorkerAC_SUBST([srcroot]) 125*1208bc7eSAndroid Build Coastguard Workerabs_srcroot="`cd \"${srcdir}\"; pwd`/" 126*1208bc7eSAndroid Build Coastguard WorkerAC_SUBST([abs_srcroot]) 127*1208bc7eSAndroid Build Coastguard Worker 128*1208bc7eSAndroid Build Coastguard Workerobjroot="" 129*1208bc7eSAndroid Build Coastguard WorkerAC_SUBST([objroot]) 130*1208bc7eSAndroid Build Coastguard Workerabs_objroot="`pwd`/" 131*1208bc7eSAndroid Build Coastguard WorkerAC_SUBST([abs_objroot]) 132*1208bc7eSAndroid Build Coastguard Worker 133*1208bc7eSAndroid Build Coastguard Workerdnl Munge install path variables. 134*1208bc7eSAndroid Build Coastguard Workerif test "x$prefix" = "xNONE" ; then 135*1208bc7eSAndroid Build Coastguard Worker prefix="/usr/local" 136*1208bc7eSAndroid Build Coastguard Workerfi 137*1208bc7eSAndroid Build Coastguard Workerif test "x$exec_prefix" = "xNONE" ; then 138*1208bc7eSAndroid Build Coastguard Worker exec_prefix=$prefix 139*1208bc7eSAndroid Build Coastguard Workerfi 140*1208bc7eSAndroid Build Coastguard WorkerPREFIX=$prefix 141*1208bc7eSAndroid Build Coastguard WorkerAC_SUBST([PREFIX]) 142*1208bc7eSAndroid Build Coastguard WorkerBINDIR=`eval echo $bindir` 143*1208bc7eSAndroid Build Coastguard WorkerBINDIR=`eval echo $BINDIR` 144*1208bc7eSAndroid Build Coastguard WorkerAC_SUBST([BINDIR]) 145*1208bc7eSAndroid Build Coastguard WorkerINCLUDEDIR=`eval echo $includedir` 146*1208bc7eSAndroid Build Coastguard WorkerINCLUDEDIR=`eval echo $INCLUDEDIR` 147*1208bc7eSAndroid Build Coastguard WorkerAC_SUBST([INCLUDEDIR]) 148*1208bc7eSAndroid Build Coastguard WorkerLIBDIR=`eval echo $libdir` 149*1208bc7eSAndroid Build Coastguard WorkerLIBDIR=`eval echo $LIBDIR` 150*1208bc7eSAndroid Build Coastguard WorkerAC_SUBST([LIBDIR]) 151*1208bc7eSAndroid Build Coastguard WorkerDATADIR=`eval echo $datadir` 152*1208bc7eSAndroid Build Coastguard WorkerDATADIR=`eval echo $DATADIR` 153*1208bc7eSAndroid Build Coastguard WorkerAC_SUBST([DATADIR]) 154*1208bc7eSAndroid Build Coastguard WorkerMANDIR=`eval echo $mandir` 155*1208bc7eSAndroid Build Coastguard WorkerMANDIR=`eval echo $MANDIR` 156*1208bc7eSAndroid Build Coastguard WorkerAC_SUBST([MANDIR]) 157*1208bc7eSAndroid Build Coastguard Worker 158*1208bc7eSAndroid Build Coastguard Workerdnl Support for building documentation. 159*1208bc7eSAndroid Build Coastguard WorkerAC_PATH_PROG([XSLTPROC], [xsltproc], [false], [$PATH]) 160*1208bc7eSAndroid Build Coastguard Workerif test -d "/usr/share/xml/docbook/stylesheet/docbook-xsl" ; then 161*1208bc7eSAndroid Build Coastguard Worker DEFAULT_XSLROOT="/usr/share/xml/docbook/stylesheet/docbook-xsl" 162*1208bc7eSAndroid Build Coastguard Workerelif test -d "/usr/share/sgml/docbook/xsl-stylesheets" ; then 163*1208bc7eSAndroid Build Coastguard Worker DEFAULT_XSLROOT="/usr/share/sgml/docbook/xsl-stylesheets" 164*1208bc7eSAndroid Build Coastguard Workerelse 165*1208bc7eSAndroid Build Coastguard Worker dnl Documentation building will fail if this default gets used. 166*1208bc7eSAndroid Build Coastguard Worker DEFAULT_XSLROOT="" 167*1208bc7eSAndroid Build Coastguard Workerfi 168*1208bc7eSAndroid Build Coastguard WorkerAC_ARG_WITH([xslroot], 169*1208bc7eSAndroid Build Coastguard Worker [AS_HELP_STRING([--with-xslroot=<path>], [XSL stylesheet root path])], [ 170*1208bc7eSAndroid Build Coastguard Workerif test "x$with_xslroot" = "xno" ; then 171*1208bc7eSAndroid Build Coastguard Worker XSLROOT="${DEFAULT_XSLROOT}" 172*1208bc7eSAndroid Build Coastguard Workerelse 173*1208bc7eSAndroid Build Coastguard Worker XSLROOT="${with_xslroot}" 174*1208bc7eSAndroid Build Coastguard Workerfi 175*1208bc7eSAndroid Build Coastguard Worker], 176*1208bc7eSAndroid Build Coastguard Worker XSLROOT="${DEFAULT_XSLROOT}" 177*1208bc7eSAndroid Build Coastguard Worker) 178*1208bc7eSAndroid Build Coastguard WorkerAC_SUBST([XSLROOT]) 179*1208bc7eSAndroid Build Coastguard Worker 180*1208bc7eSAndroid Build Coastguard Workerdnl If CFLAGS isn't defined, set CFLAGS to something reasonable. Otherwise, 181*1208bc7eSAndroid Build Coastguard Workerdnl just prevent autoconf from molesting CFLAGS. 182*1208bc7eSAndroid Build Coastguard WorkerCFLAGS=$CFLAGS 183*1208bc7eSAndroid Build Coastguard WorkerAC_PROG_CC 184*1208bc7eSAndroid Build Coastguard Worker 185*1208bc7eSAndroid Build Coastguard Workerif test "x$GCC" != "xyes" ; then 186*1208bc7eSAndroid Build Coastguard Worker AC_CACHE_CHECK([whether compiler is MSVC], 187*1208bc7eSAndroid Build Coastguard Worker [je_cv_msvc], 188*1208bc7eSAndroid Build Coastguard Worker [AC_COMPILE_IFELSE([AC_LANG_PROGRAM([], 189*1208bc7eSAndroid Build Coastguard Worker [ 190*1208bc7eSAndroid Build Coastguard Worker#ifndef _MSC_VER 191*1208bc7eSAndroid Build Coastguard Worker int fail[-1]; 192*1208bc7eSAndroid Build Coastguard Worker#endif 193*1208bc7eSAndroid Build Coastguard Worker])], 194*1208bc7eSAndroid Build Coastguard Worker [je_cv_msvc=yes], 195*1208bc7eSAndroid Build Coastguard Worker [je_cv_msvc=no])]) 196*1208bc7eSAndroid Build Coastguard Workerfi 197*1208bc7eSAndroid Build Coastguard Worker 198*1208bc7eSAndroid Build Coastguard Workerdnl check if a cray prgenv wrapper compiler is being used 199*1208bc7eSAndroid Build Coastguard Workerje_cv_cray_prgenv_wrapper="" 200*1208bc7eSAndroid Build Coastguard Workerif test "x${PE_ENV}" != "x" ; then 201*1208bc7eSAndroid Build Coastguard Worker case "${CC}" in 202*1208bc7eSAndroid Build Coastguard Worker CC|cc) 203*1208bc7eSAndroid Build Coastguard Worker je_cv_cray_prgenv_wrapper="yes" 204*1208bc7eSAndroid Build Coastguard Worker ;; 205*1208bc7eSAndroid Build Coastguard Worker *) 206*1208bc7eSAndroid Build Coastguard Worker ;; 207*1208bc7eSAndroid Build Coastguard Worker esac 208*1208bc7eSAndroid Build Coastguard Workerfi 209*1208bc7eSAndroid Build Coastguard Worker 210*1208bc7eSAndroid Build Coastguard WorkerAC_CACHE_CHECK([whether compiler is cray], 211*1208bc7eSAndroid Build Coastguard Worker [je_cv_cray], 212*1208bc7eSAndroid Build Coastguard Worker [AC_COMPILE_IFELSE([AC_LANG_PROGRAM([], 213*1208bc7eSAndroid Build Coastguard Worker [ 214*1208bc7eSAndroid Build Coastguard Worker#ifndef _CRAYC 215*1208bc7eSAndroid Build Coastguard Worker int fail[-1]; 216*1208bc7eSAndroid Build Coastguard Worker#endif 217*1208bc7eSAndroid Build Coastguard Worker])], 218*1208bc7eSAndroid Build Coastguard Worker [je_cv_cray=yes], 219*1208bc7eSAndroid Build Coastguard Worker [je_cv_cray=no])]) 220*1208bc7eSAndroid Build Coastguard Worker 221*1208bc7eSAndroid Build Coastguard Workerif test "x${je_cv_cray}" = "xyes" ; then 222*1208bc7eSAndroid Build Coastguard Worker AC_CACHE_CHECK([whether cray compiler version is 8.4], 223*1208bc7eSAndroid Build Coastguard Worker [je_cv_cray_84], 224*1208bc7eSAndroid Build Coastguard Worker [AC_COMPILE_IFELSE([AC_LANG_PROGRAM([], 225*1208bc7eSAndroid Build Coastguard Worker [ 226*1208bc7eSAndroid Build Coastguard Worker#if !(_RELEASE_MAJOR == 8 && _RELEASE_MINOR == 4) 227*1208bc7eSAndroid Build Coastguard Worker int fail[-1]; 228*1208bc7eSAndroid Build Coastguard Worker#endif 229*1208bc7eSAndroid Build Coastguard Worker])], 230*1208bc7eSAndroid Build Coastguard Worker [je_cv_cray_84=yes], 231*1208bc7eSAndroid Build Coastguard Worker [je_cv_cray_84=no])]) 232*1208bc7eSAndroid Build Coastguard Workerfi 233*1208bc7eSAndroid Build Coastguard Worker 234*1208bc7eSAndroid Build Coastguard Workerif test "x$GCC" = "xyes" ; then 235*1208bc7eSAndroid Build Coastguard Worker JE_CFLAGS_ADD([-std=gnu11]) 236*1208bc7eSAndroid Build Coastguard Worker if test "x$je_cv_cflags_added" = "x-std=gnu11" ; then 237*1208bc7eSAndroid Build Coastguard Worker AC_DEFINE_UNQUOTED([JEMALLOC_HAS_RESTRICT]) 238*1208bc7eSAndroid Build Coastguard Worker else 239*1208bc7eSAndroid Build Coastguard Worker JE_CFLAGS_ADD([-std=gnu99]) 240*1208bc7eSAndroid Build Coastguard Worker if test "x$je_cv_cflags_added" = "x-std=gnu99" ; then 241*1208bc7eSAndroid Build Coastguard Worker AC_DEFINE_UNQUOTED([JEMALLOC_HAS_RESTRICT]) 242*1208bc7eSAndroid Build Coastguard Worker fi 243*1208bc7eSAndroid Build Coastguard Worker fi 244*1208bc7eSAndroid Build Coastguard Worker JE_CFLAGS_ADD([-Wall]) 245*1208bc7eSAndroid Build Coastguard Worker JE_CFLAGS_ADD([-Wshorten-64-to-32]) 246*1208bc7eSAndroid Build Coastguard Worker JE_CFLAGS_ADD([-Wsign-compare]) 247*1208bc7eSAndroid Build Coastguard Worker JE_CFLAGS_ADD([-Wundef]) 248*1208bc7eSAndroid Build Coastguard Worker JE_CFLAGS_ADD([-Wno-format-zero-length]) 249*1208bc7eSAndroid Build Coastguard Worker JE_CFLAGS_ADD([-pipe]) 250*1208bc7eSAndroid Build Coastguard Worker JE_CFLAGS_ADD([-g3]) 251*1208bc7eSAndroid Build Coastguard Workerelif test "x$je_cv_msvc" = "xyes" ; then 252*1208bc7eSAndroid Build Coastguard Worker CC="$CC -nologo" 253*1208bc7eSAndroid Build Coastguard Worker JE_CFLAGS_ADD([-Zi]) 254*1208bc7eSAndroid Build Coastguard Worker JE_CFLAGS_ADD([-MT]) 255*1208bc7eSAndroid Build Coastguard Worker JE_CFLAGS_ADD([-W3]) 256*1208bc7eSAndroid Build Coastguard Worker JE_CFLAGS_ADD([-FS]) 257*1208bc7eSAndroid Build Coastguard Worker JE_APPEND_VS(CPPFLAGS, -I${srcdir}/include/msvc_compat) 258*1208bc7eSAndroid Build Coastguard Workerfi 259*1208bc7eSAndroid Build Coastguard Workerif test "x$je_cv_cray" = "xyes" ; then 260*1208bc7eSAndroid Build Coastguard Worker dnl cray compiler 8.4 has an inlining bug 261*1208bc7eSAndroid Build Coastguard Worker if test "x$je_cv_cray_84" = "xyes" ; then 262*1208bc7eSAndroid Build Coastguard Worker JE_CFLAGS_ADD([-hipa2]) 263*1208bc7eSAndroid Build Coastguard Worker JE_CFLAGS_ADD([-hnognu]) 264*1208bc7eSAndroid Build Coastguard Worker fi 265*1208bc7eSAndroid Build Coastguard Worker dnl ignore unreachable code warning 266*1208bc7eSAndroid Build Coastguard Worker JE_CFLAGS_ADD([-hnomessage=128]) 267*1208bc7eSAndroid Build Coastguard Worker dnl ignore redefinition of "malloc", "free", etc warning 268*1208bc7eSAndroid Build Coastguard Worker JE_CFLAGS_ADD([-hnomessage=1357]) 269*1208bc7eSAndroid Build Coastguard Workerfi 270*1208bc7eSAndroid Build Coastguard WorkerAC_SUBST([CONFIGURE_CFLAGS]) 271*1208bc7eSAndroid Build Coastguard WorkerAC_SUBST([SPECIFIED_CFLAGS]) 272*1208bc7eSAndroid Build Coastguard WorkerAC_SUBST([EXTRA_CFLAGS]) 273*1208bc7eSAndroid Build Coastguard WorkerAC_PROG_CPP 274*1208bc7eSAndroid Build Coastguard Worker 275*1208bc7eSAndroid Build Coastguard WorkerAC_ARG_ENABLE([cxx], 276*1208bc7eSAndroid Build Coastguard Worker [AS_HELP_STRING([--disable-cxx], [Disable C++ integration])], 277*1208bc7eSAndroid Build Coastguard Workerif test "x$enable_cxx" = "xno" ; then 278*1208bc7eSAndroid Build Coastguard Worker enable_cxx="0" 279*1208bc7eSAndroid Build Coastguard Workerelse 280*1208bc7eSAndroid Build Coastguard Worker enable_cxx="1" 281*1208bc7eSAndroid Build Coastguard Workerfi 282*1208bc7eSAndroid Build Coastguard Worker, 283*1208bc7eSAndroid Build Coastguard Workerenable_cxx="1" 284*1208bc7eSAndroid Build Coastguard Worker) 285*1208bc7eSAndroid Build Coastguard Workerif test "x$enable_cxx" = "x1" ; then 286*1208bc7eSAndroid Build Coastguard Worker dnl Require at least c++14, which is the first version to support sized 287*1208bc7eSAndroid Build Coastguard Worker dnl deallocation. C++ support is not compiled otherwise. 288*1208bc7eSAndroid Build Coastguard Worker m4_include([m4/ax_cxx_compile_stdcxx.m4]) 289*1208bc7eSAndroid Build Coastguard Worker AX_CXX_COMPILE_STDCXX([14], [noext], [optional]) 290*1208bc7eSAndroid Build Coastguard Worker if test "x${HAVE_CXX14}" = "x1" ; then 291*1208bc7eSAndroid Build Coastguard Worker JE_CXXFLAGS_ADD([-Wall]) 292*1208bc7eSAndroid Build Coastguard Worker JE_CXXFLAGS_ADD([-g3]) 293*1208bc7eSAndroid Build Coastguard Worker 294*1208bc7eSAndroid Build Coastguard Worker SAVED_LIBS="${LIBS}" 295*1208bc7eSAndroid Build Coastguard Worker JE_APPEND_VS(LIBS, -lstdc++) 296*1208bc7eSAndroid Build Coastguard Worker JE_COMPILABLE([libstdc++ linkage], [ 297*1208bc7eSAndroid Build Coastguard Worker#include <stdlib.h> 298*1208bc7eSAndroid Build Coastguard Worker], [[ 299*1208bc7eSAndroid Build Coastguard Worker int *arr = (int *)malloc(sizeof(int) * 42); 300*1208bc7eSAndroid Build Coastguard Worker if (arr == NULL) 301*1208bc7eSAndroid Build Coastguard Worker return 1; 302*1208bc7eSAndroid Build Coastguard Worker]], [je_cv_libstdcxx]) 303*1208bc7eSAndroid Build Coastguard Worker if test "x${je_cv_libstdcxx}" = "xno" ; then 304*1208bc7eSAndroid Build Coastguard Worker LIBS="${SAVED_LIBS}" 305*1208bc7eSAndroid Build Coastguard Worker fi 306*1208bc7eSAndroid Build Coastguard Worker else 307*1208bc7eSAndroid Build Coastguard Worker enable_cxx="0" 308*1208bc7eSAndroid Build Coastguard Worker fi 309*1208bc7eSAndroid Build Coastguard Workerfi 310*1208bc7eSAndroid Build Coastguard WorkerAC_SUBST([enable_cxx]) 311*1208bc7eSAndroid Build Coastguard WorkerAC_SUBST([CONFIGURE_CXXFLAGS]) 312*1208bc7eSAndroid Build Coastguard WorkerAC_SUBST([SPECIFIED_CXXFLAGS]) 313*1208bc7eSAndroid Build Coastguard WorkerAC_SUBST([EXTRA_CXXFLAGS]) 314*1208bc7eSAndroid Build Coastguard Worker 315*1208bc7eSAndroid Build Coastguard WorkerAC_C_BIGENDIAN([ac_cv_big_endian=1], [ac_cv_big_endian=0]) 316*1208bc7eSAndroid Build Coastguard Workerif test "x${ac_cv_big_endian}" = "x1" ; then 317*1208bc7eSAndroid Build Coastguard Worker AC_DEFINE_UNQUOTED([JEMALLOC_BIG_ENDIAN], [ ]) 318*1208bc7eSAndroid Build Coastguard Workerfi 319*1208bc7eSAndroid Build Coastguard Worker 320*1208bc7eSAndroid Build Coastguard Workerif test "x${je_cv_msvc}" = "xyes" -a "x${ac_cv_header_inttypes_h}" = "xno"; then 321*1208bc7eSAndroid Build Coastguard Worker JE_APPEND_VS(CPPFLAGS, -I${srcdir}/include/msvc_compat/C99) 322*1208bc7eSAndroid Build Coastguard Workerfi 323*1208bc7eSAndroid Build Coastguard Worker 324*1208bc7eSAndroid Build Coastguard Workerif test "x${je_cv_msvc}" = "xyes" ; then 325*1208bc7eSAndroid Build Coastguard Worker LG_SIZEOF_PTR=LG_SIZEOF_PTR_WIN 326*1208bc7eSAndroid Build Coastguard Worker AC_MSG_RESULT([Using a predefined value for sizeof(void *): 4 for 32-bit, 8 for 64-bit]) 327*1208bc7eSAndroid Build Coastguard Workerelse 328*1208bc7eSAndroid Build Coastguard Worker AC_CHECK_SIZEOF([void *]) 329*1208bc7eSAndroid Build Coastguard Worker if test "x${ac_cv_sizeof_void_p}" = "x8" ; then 330*1208bc7eSAndroid Build Coastguard Worker LG_SIZEOF_PTR=3 331*1208bc7eSAndroid Build Coastguard Worker elif test "x${ac_cv_sizeof_void_p}" = "x4" ; then 332*1208bc7eSAndroid Build Coastguard Worker LG_SIZEOF_PTR=2 333*1208bc7eSAndroid Build Coastguard Worker else 334*1208bc7eSAndroid Build Coastguard Worker AC_MSG_ERROR([Unsupported pointer size: ${ac_cv_sizeof_void_p}]) 335*1208bc7eSAndroid Build Coastguard Worker fi 336*1208bc7eSAndroid Build Coastguard Workerfi 337*1208bc7eSAndroid Build Coastguard WorkerAC_DEFINE_UNQUOTED([LG_SIZEOF_PTR], [$LG_SIZEOF_PTR]) 338*1208bc7eSAndroid Build Coastguard Worker 339*1208bc7eSAndroid Build Coastguard WorkerAC_CHECK_SIZEOF([int]) 340*1208bc7eSAndroid Build Coastguard Workerif test "x${ac_cv_sizeof_int}" = "x8" ; then 341*1208bc7eSAndroid Build Coastguard Worker LG_SIZEOF_INT=3 342*1208bc7eSAndroid Build Coastguard Workerelif test "x${ac_cv_sizeof_int}" = "x4" ; then 343*1208bc7eSAndroid Build Coastguard Worker LG_SIZEOF_INT=2 344*1208bc7eSAndroid Build Coastguard Workerelse 345*1208bc7eSAndroid Build Coastguard Worker AC_MSG_ERROR([Unsupported int size: ${ac_cv_sizeof_int}]) 346*1208bc7eSAndroid Build Coastguard Workerfi 347*1208bc7eSAndroid Build Coastguard WorkerAC_DEFINE_UNQUOTED([LG_SIZEOF_INT], [$LG_SIZEOF_INT]) 348*1208bc7eSAndroid Build Coastguard Worker 349*1208bc7eSAndroid Build Coastguard WorkerAC_CHECK_SIZEOF([long]) 350*1208bc7eSAndroid Build Coastguard Workerif test "x${ac_cv_sizeof_long}" = "x8" ; then 351*1208bc7eSAndroid Build Coastguard Worker LG_SIZEOF_LONG=3 352*1208bc7eSAndroid Build Coastguard Workerelif test "x${ac_cv_sizeof_long}" = "x4" ; then 353*1208bc7eSAndroid Build Coastguard Worker LG_SIZEOF_LONG=2 354*1208bc7eSAndroid Build Coastguard Workerelse 355*1208bc7eSAndroid Build Coastguard Worker AC_MSG_ERROR([Unsupported long size: ${ac_cv_sizeof_long}]) 356*1208bc7eSAndroid Build Coastguard Workerfi 357*1208bc7eSAndroid Build Coastguard WorkerAC_DEFINE_UNQUOTED([LG_SIZEOF_LONG], [$LG_SIZEOF_LONG]) 358*1208bc7eSAndroid Build Coastguard Worker 359*1208bc7eSAndroid Build Coastguard WorkerAC_CHECK_SIZEOF([long long]) 360*1208bc7eSAndroid Build Coastguard Workerif test "x${ac_cv_sizeof_long_long}" = "x8" ; then 361*1208bc7eSAndroid Build Coastguard Worker LG_SIZEOF_LONG_LONG=3 362*1208bc7eSAndroid Build Coastguard Workerelif test "x${ac_cv_sizeof_long_long}" = "x4" ; then 363*1208bc7eSAndroid Build Coastguard Worker LG_SIZEOF_LONG_LONG=2 364*1208bc7eSAndroid Build Coastguard Workerelse 365*1208bc7eSAndroid Build Coastguard Worker AC_MSG_ERROR([Unsupported long long size: ${ac_cv_sizeof_long_long}]) 366*1208bc7eSAndroid Build Coastguard Workerfi 367*1208bc7eSAndroid Build Coastguard WorkerAC_DEFINE_UNQUOTED([LG_SIZEOF_LONG_LONG], [$LG_SIZEOF_LONG_LONG]) 368*1208bc7eSAndroid Build Coastguard Worker 369*1208bc7eSAndroid Build Coastguard WorkerAC_CHECK_SIZEOF([intmax_t]) 370*1208bc7eSAndroid Build Coastguard Workerif test "x${ac_cv_sizeof_intmax_t}" = "x16" ; then 371*1208bc7eSAndroid Build Coastguard Worker LG_SIZEOF_INTMAX_T=4 372*1208bc7eSAndroid Build Coastguard Workerelif test "x${ac_cv_sizeof_intmax_t}" = "x8" ; then 373*1208bc7eSAndroid Build Coastguard Worker LG_SIZEOF_INTMAX_T=3 374*1208bc7eSAndroid Build Coastguard Workerelif test "x${ac_cv_sizeof_intmax_t}" = "x4" ; then 375*1208bc7eSAndroid Build Coastguard Worker LG_SIZEOF_INTMAX_T=2 376*1208bc7eSAndroid Build Coastguard Workerelse 377*1208bc7eSAndroid Build Coastguard Worker AC_MSG_ERROR([Unsupported intmax_t size: ${ac_cv_sizeof_intmax_t}]) 378*1208bc7eSAndroid Build Coastguard Workerfi 379*1208bc7eSAndroid Build Coastguard WorkerAC_DEFINE_UNQUOTED([LG_SIZEOF_INTMAX_T], [$LG_SIZEOF_INTMAX_T]) 380*1208bc7eSAndroid Build Coastguard Worker 381*1208bc7eSAndroid Build Coastguard WorkerAC_CANONICAL_HOST 382*1208bc7eSAndroid Build Coastguard Workerdnl CPU-specific settings. 383*1208bc7eSAndroid Build Coastguard WorkerCPU_SPINWAIT="" 384*1208bc7eSAndroid Build Coastguard Workercase "${host_cpu}" in 385*1208bc7eSAndroid Build Coastguard Worker i686|x86_64) 386*1208bc7eSAndroid Build Coastguard Worker HAVE_CPU_SPINWAIT=1 387*1208bc7eSAndroid Build Coastguard Worker if test "x${je_cv_msvc}" = "xyes" ; then 388*1208bc7eSAndroid Build Coastguard Worker AC_CACHE_VAL([je_cv_pause_msvc], 389*1208bc7eSAndroid Build Coastguard Worker [JE_COMPILABLE([pause instruction MSVC], [], 390*1208bc7eSAndroid Build Coastguard Worker [[_mm_pause(); return 0;]], 391*1208bc7eSAndroid Build Coastguard Worker [je_cv_pause_msvc])]) 392*1208bc7eSAndroid Build Coastguard Worker if test "x${je_cv_pause_msvc}" = "xyes" ; then 393*1208bc7eSAndroid Build Coastguard Worker CPU_SPINWAIT='_mm_pause()' 394*1208bc7eSAndroid Build Coastguard Worker fi 395*1208bc7eSAndroid Build Coastguard Worker else 396*1208bc7eSAndroid Build Coastguard Worker AC_CACHE_VAL([je_cv_pause], 397*1208bc7eSAndroid Build Coastguard Worker [JE_COMPILABLE([pause instruction], [], 398*1208bc7eSAndroid Build Coastguard Worker [[__asm__ volatile("pause"); return 0;]], 399*1208bc7eSAndroid Build Coastguard Worker [je_cv_pause])]) 400*1208bc7eSAndroid Build Coastguard Worker if test "x${je_cv_pause}" = "xyes" ; then 401*1208bc7eSAndroid Build Coastguard Worker CPU_SPINWAIT='__asm__ volatile("pause")' 402*1208bc7eSAndroid Build Coastguard Worker fi 403*1208bc7eSAndroid Build Coastguard Worker fi 404*1208bc7eSAndroid Build Coastguard Worker ;; 405*1208bc7eSAndroid Build Coastguard Worker *) 406*1208bc7eSAndroid Build Coastguard Worker HAVE_CPU_SPINWAIT=0 407*1208bc7eSAndroid Build Coastguard Worker ;; 408*1208bc7eSAndroid Build Coastguard Workeresac 409*1208bc7eSAndroid Build Coastguard WorkerAC_DEFINE_UNQUOTED([HAVE_CPU_SPINWAIT], [$HAVE_CPU_SPINWAIT]) 410*1208bc7eSAndroid Build Coastguard WorkerAC_DEFINE_UNQUOTED([CPU_SPINWAIT], [$CPU_SPINWAIT]) 411*1208bc7eSAndroid Build Coastguard Worker 412*1208bc7eSAndroid Build Coastguard WorkerAC_ARG_WITH([lg_vaddr], 413*1208bc7eSAndroid Build Coastguard Worker [AS_HELP_STRING([--with-lg-vaddr=<lg-vaddr>], [Number of significant virtual address bits])], 414*1208bc7eSAndroid Build Coastguard Worker [LG_VADDR="$with_lg_vaddr"], [LG_VADDR="detect"]) 415*1208bc7eSAndroid Build Coastguard Worker 416*1208bc7eSAndroid Build Coastguard Workercase "${host_cpu}" in 417*1208bc7eSAndroid Build Coastguard Worker aarch64) 418*1208bc7eSAndroid Build Coastguard Worker if test "x$LG_VADDR" = "xdetect"; then 419*1208bc7eSAndroid Build Coastguard Worker AC_MSG_CHECKING([number of significant virtual address bits]) 420*1208bc7eSAndroid Build Coastguard Worker if test "x${LG_SIZEOF_PTR}" = "x2" ; then 421*1208bc7eSAndroid Build Coastguard Worker #aarch64 ILP32 422*1208bc7eSAndroid Build Coastguard Worker LG_VADDR=32 423*1208bc7eSAndroid Build Coastguard Worker else 424*1208bc7eSAndroid Build Coastguard Worker #aarch64 LP64 425*1208bc7eSAndroid Build Coastguard Worker LG_VADDR=48 426*1208bc7eSAndroid Build Coastguard Worker fi 427*1208bc7eSAndroid Build Coastguard Worker AC_MSG_RESULT([$LG_VADDR]) 428*1208bc7eSAndroid Build Coastguard Worker fi 429*1208bc7eSAndroid Build Coastguard Worker ;; 430*1208bc7eSAndroid Build Coastguard Worker x86_64) 431*1208bc7eSAndroid Build Coastguard Worker if test "x$LG_VADDR" = "xdetect"; then 432*1208bc7eSAndroid Build Coastguard Worker AC_CACHE_CHECK([number of significant virtual address bits], 433*1208bc7eSAndroid Build Coastguard Worker [je_cv_lg_vaddr], 434*1208bc7eSAndroid Build Coastguard Worker AC_RUN_IFELSE([AC_LANG_PROGRAM( 435*1208bc7eSAndroid Build Coastguard Worker[[ 436*1208bc7eSAndroid Build Coastguard Worker#include <stdio.h> 437*1208bc7eSAndroid Build Coastguard Worker#ifdef _WIN32 438*1208bc7eSAndroid Build Coastguard Worker#include <limits.h> 439*1208bc7eSAndroid Build Coastguard Worker#include <intrin.h> 440*1208bc7eSAndroid Build Coastguard Workertypedef unsigned __int32 uint32_t; 441*1208bc7eSAndroid Build Coastguard Worker#else 442*1208bc7eSAndroid Build Coastguard Worker#include <stdint.h> 443*1208bc7eSAndroid Build Coastguard Worker#endif 444*1208bc7eSAndroid Build Coastguard Worker]], [[ 445*1208bc7eSAndroid Build Coastguard Worker uint32_t r[[4]]; 446*1208bc7eSAndroid Build Coastguard Worker uint32_t eax_in = 0x80000008U; 447*1208bc7eSAndroid Build Coastguard Worker#ifdef _WIN32 448*1208bc7eSAndroid Build Coastguard Worker __cpuid((int *)r, (int)eax_in); 449*1208bc7eSAndroid Build Coastguard Worker#else 450*1208bc7eSAndroid Build Coastguard Worker asm volatile ("cpuid" 451*1208bc7eSAndroid Build Coastguard Worker : "=a" (r[[0]]), "=b" (r[[1]]), "=c" (r[[2]]), "=d" (r[[3]]) 452*1208bc7eSAndroid Build Coastguard Worker : "a" (eax_in), "c" (0) 453*1208bc7eSAndroid Build Coastguard Worker ); 454*1208bc7eSAndroid Build Coastguard Worker#endif 455*1208bc7eSAndroid Build Coastguard Worker uint32_t eax_out = r[[0]]; 456*1208bc7eSAndroid Build Coastguard Worker uint32_t vaddr = ((eax_out & 0x0000ff00U) >> 8); 457*1208bc7eSAndroid Build Coastguard Worker FILE *f = fopen("conftest.out", "w"); 458*1208bc7eSAndroid Build Coastguard Worker if (f == NULL) { 459*1208bc7eSAndroid Build Coastguard Worker return 1; 460*1208bc7eSAndroid Build Coastguard Worker } 461*1208bc7eSAndroid Build Coastguard Worker if (vaddr > (sizeof(void *) << 3)) { 462*1208bc7eSAndroid Build Coastguard Worker vaddr = sizeof(void *) << 3; 463*1208bc7eSAndroid Build Coastguard Worker } 464*1208bc7eSAndroid Build Coastguard Worker fprintf(f, "%u", vaddr); 465*1208bc7eSAndroid Build Coastguard Worker fclose(f); 466*1208bc7eSAndroid Build Coastguard Worker return 0; 467*1208bc7eSAndroid Build Coastguard Worker]])], 468*1208bc7eSAndroid Build Coastguard Worker [je_cv_lg_vaddr=`cat conftest.out`], 469*1208bc7eSAndroid Build Coastguard Worker [je_cv_lg_vaddr=error], 470*1208bc7eSAndroid Build Coastguard Worker [je_cv_lg_vaddr=57])) 471*1208bc7eSAndroid Build Coastguard Worker if test "x${je_cv_lg_vaddr}" != "x" ; then 472*1208bc7eSAndroid Build Coastguard Worker LG_VADDR="${je_cv_lg_vaddr}" 473*1208bc7eSAndroid Build Coastguard Worker fi 474*1208bc7eSAndroid Build Coastguard Worker if test "x${LG_VADDR}" != "xerror" ; then 475*1208bc7eSAndroid Build Coastguard Worker AC_DEFINE_UNQUOTED([LG_VADDR], [$LG_VADDR]) 476*1208bc7eSAndroid Build Coastguard Worker else 477*1208bc7eSAndroid Build Coastguard Worker AC_MSG_ERROR([cannot determine number of significant virtual address bits]) 478*1208bc7eSAndroid Build Coastguard Worker fi 479*1208bc7eSAndroid Build Coastguard Worker fi 480*1208bc7eSAndroid Build Coastguard Worker ;; 481*1208bc7eSAndroid Build Coastguard Worker *) 482*1208bc7eSAndroid Build Coastguard Worker if test "x$LG_VADDR" = "xdetect"; then 483*1208bc7eSAndroid Build Coastguard Worker AC_MSG_CHECKING([number of significant virtual address bits]) 484*1208bc7eSAndroid Build Coastguard Worker if test "x${LG_SIZEOF_PTR}" = "x3" ; then 485*1208bc7eSAndroid Build Coastguard Worker LG_VADDR=64 486*1208bc7eSAndroid Build Coastguard Worker elif test "x${LG_SIZEOF_PTR}" = "x2" ; then 487*1208bc7eSAndroid Build Coastguard Worker LG_VADDR=32 488*1208bc7eSAndroid Build Coastguard Worker elif test "x${LG_SIZEOF_PTR}" = "xLG_SIZEOF_PTR_WIN" ; then 489*1208bc7eSAndroid Build Coastguard Worker LG_VADDR="(1U << (LG_SIZEOF_PTR_WIN+3))" 490*1208bc7eSAndroid Build Coastguard Worker else 491*1208bc7eSAndroid Build Coastguard Worker AC_MSG_ERROR([Unsupported lg(pointer size): ${LG_SIZEOF_PTR}]) 492*1208bc7eSAndroid Build Coastguard Worker fi 493*1208bc7eSAndroid Build Coastguard Worker AC_MSG_RESULT([$LG_VADDR]) 494*1208bc7eSAndroid Build Coastguard Worker fi 495*1208bc7eSAndroid Build Coastguard Worker ;; 496*1208bc7eSAndroid Build Coastguard Workeresac 497*1208bc7eSAndroid Build Coastguard WorkerAC_DEFINE_UNQUOTED([LG_VADDR], [$LG_VADDR]) 498*1208bc7eSAndroid Build Coastguard Worker 499*1208bc7eSAndroid Build Coastguard WorkerLD_PRELOAD_VAR="LD_PRELOAD" 500*1208bc7eSAndroid Build Coastguard Workerso="so" 501*1208bc7eSAndroid Build Coastguard Workerimportlib="${so}" 502*1208bc7eSAndroid Build Coastguard Workero="$ac_objext" 503*1208bc7eSAndroid Build Coastguard Workera="a" 504*1208bc7eSAndroid Build Coastguard Workerexe="$ac_exeext" 505*1208bc7eSAndroid Build Coastguard Workerlibprefix="lib" 506*1208bc7eSAndroid Build Coastguard Workerlink_whole_archive="0" 507*1208bc7eSAndroid Build Coastguard WorkerDSO_LDFLAGS='-shared -Wl,-soname,$(@F)' 508*1208bc7eSAndroid Build Coastguard WorkerRPATH='-Wl,-rpath,$(1)' 509*1208bc7eSAndroid Build Coastguard WorkerSOREV="${so}.${rev}" 510*1208bc7eSAndroid Build Coastguard WorkerPIC_CFLAGS='-fPIC -DPIC' 511*1208bc7eSAndroid Build Coastguard WorkerCTARGET='-o $@' 512*1208bc7eSAndroid Build Coastguard WorkerLDTARGET='-o $@' 513*1208bc7eSAndroid Build Coastguard WorkerTEST_LD_MODE= 514*1208bc7eSAndroid Build Coastguard WorkerEXTRA_LDFLAGS= 515*1208bc7eSAndroid Build Coastguard WorkerARFLAGS='crus' 516*1208bc7eSAndroid Build Coastguard WorkerAROUT=' $@' 517*1208bc7eSAndroid Build Coastguard WorkerCC_MM=1 518*1208bc7eSAndroid Build Coastguard Worker 519*1208bc7eSAndroid Build Coastguard Workerif test "x$je_cv_cray_prgenv_wrapper" = "xyes" ; then 520*1208bc7eSAndroid Build Coastguard Worker TEST_LD_MODE='-dynamic' 521*1208bc7eSAndroid Build Coastguard Workerfi 522*1208bc7eSAndroid Build Coastguard Worker 523*1208bc7eSAndroid Build Coastguard Workerif test "x${je_cv_cray}" = "xyes" ; then 524*1208bc7eSAndroid Build Coastguard Worker CC_MM= 525*1208bc7eSAndroid Build Coastguard Workerfi 526*1208bc7eSAndroid Build Coastguard Worker 527*1208bc7eSAndroid Build Coastguard WorkerAN_MAKEVAR([AR], [AC_PROG_AR]) 528*1208bc7eSAndroid Build Coastguard WorkerAN_PROGRAM([ar], [AC_PROG_AR]) 529*1208bc7eSAndroid Build Coastguard WorkerAC_DEFUN([AC_PROG_AR], [AC_CHECK_TOOL(AR, ar, :)]) 530*1208bc7eSAndroid Build Coastguard WorkerAC_PROG_AR 531*1208bc7eSAndroid Build Coastguard Worker 532*1208bc7eSAndroid Build Coastguard WorkerAN_MAKEVAR([NM], [AC_PROG_NM]) 533*1208bc7eSAndroid Build Coastguard WorkerAN_PROGRAM([nm], [AC_PROG_NM]) 534*1208bc7eSAndroid Build Coastguard WorkerAC_DEFUN([AC_PROG_NM], [AC_CHECK_TOOL(NM, nm, :)]) 535*1208bc7eSAndroid Build Coastguard WorkerAC_PROG_NM 536*1208bc7eSAndroid Build Coastguard Worker 537*1208bc7eSAndroid Build Coastguard WorkerAC_PROG_AWK 538*1208bc7eSAndroid Build Coastguard Worker 539*1208bc7eSAndroid Build Coastguard Workerdnl Platform-specific settings. abi and RPATH can probably be determined 540*1208bc7eSAndroid Build Coastguard Workerdnl programmatically, but doing so is error-prone, which makes it generally 541*1208bc7eSAndroid Build Coastguard Workerdnl not worth the trouble. 542*1208bc7eSAndroid Build Coastguard Workerdnl 543*1208bc7eSAndroid Build Coastguard Workerdnl Define cpp macros in CPPFLAGS, rather than doing AC_DEFINE(macro), since the 544*1208bc7eSAndroid Build Coastguard Workerdnl definitions need to be seen before any headers are included, which is a pain 545*1208bc7eSAndroid Build Coastguard Workerdnl to make happen otherwise. 546*1208bc7eSAndroid Build Coastguard Workerdefault_retain="0" 547*1208bc7eSAndroid Build Coastguard Workermaps_coalesce="1" 548*1208bc7eSAndroid Build Coastguard WorkerDUMP_SYMS="${NM} -a" 549*1208bc7eSAndroid Build Coastguard WorkerSYM_PREFIX="" 550*1208bc7eSAndroid Build Coastguard Workercase "${host}" in 551*1208bc7eSAndroid Build Coastguard Worker *-*-darwin* | *-*-ios*) 552*1208bc7eSAndroid Build Coastguard Worker abi="macho" 553*1208bc7eSAndroid Build Coastguard Worker RPATH="" 554*1208bc7eSAndroid Build Coastguard Worker LD_PRELOAD_VAR="DYLD_INSERT_LIBRARIES" 555*1208bc7eSAndroid Build Coastguard Worker so="dylib" 556*1208bc7eSAndroid Build Coastguard Worker importlib="${so}" 557*1208bc7eSAndroid Build Coastguard Worker force_tls="0" 558*1208bc7eSAndroid Build Coastguard Worker DSO_LDFLAGS='-shared -Wl,-install_name,$(LIBDIR)/$(@F)' 559*1208bc7eSAndroid Build Coastguard Worker SOREV="${rev}.${so}" 560*1208bc7eSAndroid Build Coastguard Worker sbrk_deprecated="1" 561*1208bc7eSAndroid Build Coastguard Worker SYM_PREFIX="_" 562*1208bc7eSAndroid Build Coastguard Worker ;; 563*1208bc7eSAndroid Build Coastguard Worker *-*-freebsd*) 564*1208bc7eSAndroid Build Coastguard Worker abi="elf" 565*1208bc7eSAndroid Build Coastguard Worker AC_DEFINE([JEMALLOC_SYSCTL_VM_OVERCOMMIT], [ ]) 566*1208bc7eSAndroid Build Coastguard Worker force_lazy_lock="1" 567*1208bc7eSAndroid Build Coastguard Worker ;; 568*1208bc7eSAndroid Build Coastguard Worker *-*-dragonfly*) 569*1208bc7eSAndroid Build Coastguard Worker abi="elf" 570*1208bc7eSAndroid Build Coastguard Worker ;; 571*1208bc7eSAndroid Build Coastguard Worker *-*-openbsd*) 572*1208bc7eSAndroid Build Coastguard Worker abi="elf" 573*1208bc7eSAndroid Build Coastguard Worker force_tls="0" 574*1208bc7eSAndroid Build Coastguard Worker ;; 575*1208bc7eSAndroid Build Coastguard Worker *-*-bitrig*) 576*1208bc7eSAndroid Build Coastguard Worker abi="elf" 577*1208bc7eSAndroid Build Coastguard Worker ;; 578*1208bc7eSAndroid Build Coastguard Worker *-*-linux-android) 579*1208bc7eSAndroid Build Coastguard Worker dnl syscall(2) and secure_getenv(3) are exposed by _GNU_SOURCE. 580*1208bc7eSAndroid Build Coastguard Worker JE_APPEND_VS(CPPFLAGS, -D_GNU_SOURCE) 581*1208bc7eSAndroid Build Coastguard Worker abi="elf" 582*1208bc7eSAndroid Build Coastguard Worker AC_DEFINE([JEMALLOC_PURGE_MADVISE_DONTNEED_ZEROS], [ ]) 583*1208bc7eSAndroid Build Coastguard Worker AC_DEFINE([JEMALLOC_HAS_ALLOCA_H]) 584*1208bc7eSAndroid Build Coastguard Worker AC_DEFINE([JEMALLOC_PROC_SYS_VM_OVERCOMMIT_MEMORY], [ ]) 585*1208bc7eSAndroid Build Coastguard Worker AC_DEFINE([JEMALLOC_THREADED_INIT], [ ]) 586*1208bc7eSAndroid Build Coastguard Worker AC_DEFINE([JEMALLOC_C11_ATOMICS]) 587*1208bc7eSAndroid Build Coastguard Worker force_tls="0" 588*1208bc7eSAndroid Build Coastguard Worker if test "${LG_SIZEOF_PTR}" = "3"; then 589*1208bc7eSAndroid Build Coastguard Worker default_retain="1" 590*1208bc7eSAndroid Build Coastguard Worker fi 591*1208bc7eSAndroid Build Coastguard Worker ;; 592*1208bc7eSAndroid Build Coastguard Worker *-*-linux*) 593*1208bc7eSAndroid Build Coastguard Worker dnl syscall(2) and secure_getenv(3) are exposed by _GNU_SOURCE. 594*1208bc7eSAndroid Build Coastguard Worker JE_APPEND_VS(CPPFLAGS, -D_GNU_SOURCE) 595*1208bc7eSAndroid Build Coastguard Worker abi="elf" 596*1208bc7eSAndroid Build Coastguard Worker AC_DEFINE([JEMALLOC_PURGE_MADVISE_DONTNEED_ZEROS], [ ]) 597*1208bc7eSAndroid Build Coastguard Worker AC_DEFINE([JEMALLOC_HAS_ALLOCA_H]) 598*1208bc7eSAndroid Build Coastguard Worker AC_DEFINE([JEMALLOC_PROC_SYS_VM_OVERCOMMIT_MEMORY], [ ]) 599*1208bc7eSAndroid Build Coastguard Worker AC_DEFINE([JEMALLOC_THREADED_INIT], [ ]) 600*1208bc7eSAndroid Build Coastguard Worker AC_DEFINE([JEMALLOC_USE_CXX_THROW], [ ]) 601*1208bc7eSAndroid Build Coastguard Worker if test "${LG_SIZEOF_PTR}" = "3"; then 602*1208bc7eSAndroid Build Coastguard Worker default_retain="1" 603*1208bc7eSAndroid Build Coastguard Worker fi 604*1208bc7eSAndroid Build Coastguard Worker ;; 605*1208bc7eSAndroid Build Coastguard Worker *-*-kfreebsd*) 606*1208bc7eSAndroid Build Coastguard Worker dnl syscall(2) and secure_getenv(3) are exposed by _GNU_SOURCE. 607*1208bc7eSAndroid Build Coastguard Worker JE_APPEND_VS(CPPFLAGS, -D_GNU_SOURCE) 608*1208bc7eSAndroid Build Coastguard Worker abi="elf" 609*1208bc7eSAndroid Build Coastguard Worker AC_DEFINE([JEMALLOC_HAS_ALLOCA_H]) 610*1208bc7eSAndroid Build Coastguard Worker AC_DEFINE([JEMALLOC_SYSCTL_VM_OVERCOMMIT], [ ]) 611*1208bc7eSAndroid Build Coastguard Worker AC_DEFINE([JEMALLOC_THREADED_INIT], [ ]) 612*1208bc7eSAndroid Build Coastguard Worker AC_DEFINE([JEMALLOC_USE_CXX_THROW], [ ]) 613*1208bc7eSAndroid Build Coastguard Worker ;; 614*1208bc7eSAndroid Build Coastguard Worker *-*-netbsd*) 615*1208bc7eSAndroid Build Coastguard Worker AC_MSG_CHECKING([ABI]) 616*1208bc7eSAndroid Build Coastguard Worker AC_COMPILE_IFELSE([AC_LANG_PROGRAM( 617*1208bc7eSAndroid Build Coastguard Worker[[#ifdef __ELF__ 618*1208bc7eSAndroid Build Coastguard Worker/* ELF */ 619*1208bc7eSAndroid Build Coastguard Worker#else 620*1208bc7eSAndroid Build Coastguard Worker#error aout 621*1208bc7eSAndroid Build Coastguard Worker#endif 622*1208bc7eSAndroid Build Coastguard Worker]])], 623*1208bc7eSAndroid Build Coastguard Worker [abi="elf"], 624*1208bc7eSAndroid Build Coastguard Worker [abi="aout"]) 625*1208bc7eSAndroid Build Coastguard Worker AC_MSG_RESULT([$abi]) 626*1208bc7eSAndroid Build Coastguard Worker ;; 627*1208bc7eSAndroid Build Coastguard Worker *-*-solaris2*) 628*1208bc7eSAndroid Build Coastguard Worker abi="elf" 629*1208bc7eSAndroid Build Coastguard Worker RPATH='-Wl,-R,$(1)' 630*1208bc7eSAndroid Build Coastguard Worker dnl Solaris needs this for sigwait(). 631*1208bc7eSAndroid Build Coastguard Worker JE_APPEND_VS(CPPFLAGS, -D_POSIX_PTHREAD_SEMANTICS) 632*1208bc7eSAndroid Build Coastguard Worker JE_APPEND_VS(LIBS, -lposix4 -lsocket -lnsl) 633*1208bc7eSAndroid Build Coastguard Worker ;; 634*1208bc7eSAndroid Build Coastguard Worker *-ibm-aix*) 635*1208bc7eSAndroid Build Coastguard Worker if test "${LG_SIZEOF_PTR}" = "3"; then 636*1208bc7eSAndroid Build Coastguard Worker dnl 64bit AIX 637*1208bc7eSAndroid Build Coastguard Worker LD_PRELOAD_VAR="LDR_PRELOAD64" 638*1208bc7eSAndroid Build Coastguard Worker else 639*1208bc7eSAndroid Build Coastguard Worker dnl 32bit AIX 640*1208bc7eSAndroid Build Coastguard Worker LD_PRELOAD_VAR="LDR_PRELOAD" 641*1208bc7eSAndroid Build Coastguard Worker fi 642*1208bc7eSAndroid Build Coastguard Worker abi="xcoff" 643*1208bc7eSAndroid Build Coastguard Worker ;; 644*1208bc7eSAndroid Build Coastguard Worker *-*-mingw* | *-*-cygwin*) 645*1208bc7eSAndroid Build Coastguard Worker abi="pecoff" 646*1208bc7eSAndroid Build Coastguard Worker force_tls="0" 647*1208bc7eSAndroid Build Coastguard Worker maps_coalesce="0" 648*1208bc7eSAndroid Build Coastguard Worker RPATH="" 649*1208bc7eSAndroid Build Coastguard Worker so="dll" 650*1208bc7eSAndroid Build Coastguard Worker if test "x$je_cv_msvc" = "xyes" ; then 651*1208bc7eSAndroid Build Coastguard Worker importlib="lib" 652*1208bc7eSAndroid Build Coastguard Worker DSO_LDFLAGS="-LD" 653*1208bc7eSAndroid Build Coastguard Worker EXTRA_LDFLAGS="-link -DEBUG" 654*1208bc7eSAndroid Build Coastguard Worker CTARGET='-Fo$@' 655*1208bc7eSAndroid Build Coastguard Worker LDTARGET='-Fe$@' 656*1208bc7eSAndroid Build Coastguard Worker AR='lib' 657*1208bc7eSAndroid Build Coastguard Worker ARFLAGS='-nologo -out:' 658*1208bc7eSAndroid Build Coastguard Worker AROUT='$@' 659*1208bc7eSAndroid Build Coastguard Worker CC_MM= 660*1208bc7eSAndroid Build Coastguard Worker else 661*1208bc7eSAndroid Build Coastguard Worker importlib="${so}" 662*1208bc7eSAndroid Build Coastguard Worker DSO_LDFLAGS="-shared" 663*1208bc7eSAndroid Build Coastguard Worker link_whole_archive="1" 664*1208bc7eSAndroid Build Coastguard Worker fi 665*1208bc7eSAndroid Build Coastguard Worker case "${host}" in 666*1208bc7eSAndroid Build Coastguard Worker *-*-cygwin*) 667*1208bc7eSAndroid Build Coastguard Worker DUMP_SYMS="dumpbin /SYMBOLS" 668*1208bc7eSAndroid Build Coastguard Worker ;; 669*1208bc7eSAndroid Build Coastguard Worker *) 670*1208bc7eSAndroid Build Coastguard Worker ;; 671*1208bc7eSAndroid Build Coastguard Worker esac 672*1208bc7eSAndroid Build Coastguard Worker a="lib" 673*1208bc7eSAndroid Build Coastguard Worker libprefix="" 674*1208bc7eSAndroid Build Coastguard Worker SOREV="${so}" 675*1208bc7eSAndroid Build Coastguard Worker PIC_CFLAGS="" 676*1208bc7eSAndroid Build Coastguard Worker ;; 677*1208bc7eSAndroid Build Coastguard Worker *) 678*1208bc7eSAndroid Build Coastguard Worker AC_MSG_RESULT([Unsupported operating system: ${host}]) 679*1208bc7eSAndroid Build Coastguard Worker abi="elf" 680*1208bc7eSAndroid Build Coastguard Worker ;; 681*1208bc7eSAndroid Build Coastguard Workeresac 682*1208bc7eSAndroid Build Coastguard Worker 683*1208bc7eSAndroid Build Coastguard WorkerJEMALLOC_USABLE_SIZE_CONST=const 684*1208bc7eSAndroid Build Coastguard WorkerAC_CHECK_HEADERS([malloc.h], [ 685*1208bc7eSAndroid Build Coastguard Worker AC_MSG_CHECKING([whether malloc_usable_size definition can use const argument]) 686*1208bc7eSAndroid Build Coastguard Worker AC_COMPILE_IFELSE([AC_LANG_PROGRAM( 687*1208bc7eSAndroid Build Coastguard Worker [#include <malloc.h> 688*1208bc7eSAndroid Build Coastguard Worker #include <stddef.h> 689*1208bc7eSAndroid Build Coastguard Worker size_t malloc_usable_size(const void *ptr); 690*1208bc7eSAndroid Build Coastguard Worker ], 691*1208bc7eSAndroid Build Coastguard Worker [])],[ 692*1208bc7eSAndroid Build Coastguard Worker AC_MSG_RESULT([yes]) 693*1208bc7eSAndroid Build Coastguard Worker ],[ 694*1208bc7eSAndroid Build Coastguard Worker JEMALLOC_USABLE_SIZE_CONST= 695*1208bc7eSAndroid Build Coastguard Worker AC_MSG_RESULT([no]) 696*1208bc7eSAndroid Build Coastguard Worker ]) 697*1208bc7eSAndroid Build Coastguard Worker]) 698*1208bc7eSAndroid Build Coastguard WorkerAC_DEFINE_UNQUOTED([JEMALLOC_USABLE_SIZE_CONST], [$JEMALLOC_USABLE_SIZE_CONST]) 699*1208bc7eSAndroid Build Coastguard WorkerAC_SUBST([abi]) 700*1208bc7eSAndroid Build Coastguard WorkerAC_SUBST([RPATH]) 701*1208bc7eSAndroid Build Coastguard WorkerAC_SUBST([LD_PRELOAD_VAR]) 702*1208bc7eSAndroid Build Coastguard WorkerAC_SUBST([so]) 703*1208bc7eSAndroid Build Coastguard WorkerAC_SUBST([importlib]) 704*1208bc7eSAndroid Build Coastguard WorkerAC_SUBST([o]) 705*1208bc7eSAndroid Build Coastguard WorkerAC_SUBST([a]) 706*1208bc7eSAndroid Build Coastguard WorkerAC_SUBST([exe]) 707*1208bc7eSAndroid Build Coastguard WorkerAC_SUBST([libprefix]) 708*1208bc7eSAndroid Build Coastguard WorkerAC_SUBST([link_whole_archive]) 709*1208bc7eSAndroid Build Coastguard WorkerAC_SUBST([DSO_LDFLAGS]) 710*1208bc7eSAndroid Build Coastguard WorkerAC_SUBST([EXTRA_LDFLAGS]) 711*1208bc7eSAndroid Build Coastguard WorkerAC_SUBST([SOREV]) 712*1208bc7eSAndroid Build Coastguard WorkerAC_SUBST([PIC_CFLAGS]) 713*1208bc7eSAndroid Build Coastguard WorkerAC_SUBST([CTARGET]) 714*1208bc7eSAndroid Build Coastguard WorkerAC_SUBST([LDTARGET]) 715*1208bc7eSAndroid Build Coastguard WorkerAC_SUBST([TEST_LD_MODE]) 716*1208bc7eSAndroid Build Coastguard WorkerAC_SUBST([MKLIB]) 717*1208bc7eSAndroid Build Coastguard WorkerAC_SUBST([ARFLAGS]) 718*1208bc7eSAndroid Build Coastguard WorkerAC_SUBST([AROUT]) 719*1208bc7eSAndroid Build Coastguard WorkerAC_SUBST([DUMP_SYMS]) 720*1208bc7eSAndroid Build Coastguard WorkerAC_SUBST([CC_MM]) 721*1208bc7eSAndroid Build Coastguard Worker 722*1208bc7eSAndroid Build Coastguard Workerdnl Determine whether libm must be linked to use e.g. log(3). 723*1208bc7eSAndroid Build Coastguard WorkerAC_SEARCH_LIBS([log], [m], , [AC_MSG_ERROR([Missing math functions])]) 724*1208bc7eSAndroid Build Coastguard Workerif test "x$ac_cv_search_log" != "xnone required" ; then 725*1208bc7eSAndroid Build Coastguard Worker LM="$ac_cv_search_log" 726*1208bc7eSAndroid Build Coastguard Workerelse 727*1208bc7eSAndroid Build Coastguard Worker LM= 728*1208bc7eSAndroid Build Coastguard Workerfi 729*1208bc7eSAndroid Build Coastguard WorkerAC_SUBST(LM) 730*1208bc7eSAndroid Build Coastguard Worker 731*1208bc7eSAndroid Build Coastguard WorkerJE_COMPILABLE([__attribute__ syntax], 732*1208bc7eSAndroid Build Coastguard Worker [static __attribute__((unused)) void foo(void){}], 733*1208bc7eSAndroid Build Coastguard Worker [], 734*1208bc7eSAndroid Build Coastguard Worker [je_cv_attribute]) 735*1208bc7eSAndroid Build Coastguard Workerif test "x${je_cv_attribute}" = "xyes" ; then 736*1208bc7eSAndroid Build Coastguard Worker AC_DEFINE([JEMALLOC_HAVE_ATTR], [ ]) 737*1208bc7eSAndroid Build Coastguard Worker if test "x${GCC}" = "xyes" -a "x${abi}" = "xelf"; then 738*1208bc7eSAndroid Build Coastguard Worker JE_CFLAGS_ADD([-fvisibility=hidden]) 739*1208bc7eSAndroid Build Coastguard Worker JE_CXXFLAGS_ADD([-fvisibility=hidden]) 740*1208bc7eSAndroid Build Coastguard Worker fi 741*1208bc7eSAndroid Build Coastguard Workerfi 742*1208bc7eSAndroid Build Coastguard Workerdnl Check for tls_model attribute support (clang 3.0 still lacks support). 743*1208bc7eSAndroid Build Coastguard WorkerJE_CFLAGS_SAVE() 744*1208bc7eSAndroid Build Coastguard WorkerJE_CFLAGS_ADD([-Werror]) 745*1208bc7eSAndroid Build Coastguard WorkerJE_CFLAGS_ADD([-herror_on_warning]) 746*1208bc7eSAndroid Build Coastguard WorkerJE_COMPILABLE([tls_model attribute], [], 747*1208bc7eSAndroid Build Coastguard Worker [static __thread int 748*1208bc7eSAndroid Build Coastguard Worker __attribute__((tls_model("initial-exec"), unused)) foo; 749*1208bc7eSAndroid Build Coastguard Worker foo = 0;], 750*1208bc7eSAndroid Build Coastguard Worker [je_cv_tls_model]) 751*1208bc7eSAndroid Build Coastguard WorkerJE_CFLAGS_RESTORE() 752*1208bc7eSAndroid Build Coastguard Workerdnl (Setting of JEMALLOC_TLS_MODEL is done later, after we've checked for 753*1208bc7eSAndroid Build Coastguard Workerdnl --disable-initial-exec-tls) 754*1208bc7eSAndroid Build Coastguard Worker 755*1208bc7eSAndroid Build Coastguard Workerdnl Check for alloc_size attribute support. 756*1208bc7eSAndroid Build Coastguard WorkerJE_CFLAGS_SAVE() 757*1208bc7eSAndroid Build Coastguard WorkerJE_CFLAGS_ADD([-Werror]) 758*1208bc7eSAndroid Build Coastguard WorkerJE_CFLAGS_ADD([-herror_on_warning]) 759*1208bc7eSAndroid Build Coastguard WorkerJE_COMPILABLE([alloc_size attribute], [#include <stdlib.h>], 760*1208bc7eSAndroid Build Coastguard Worker [void *foo(size_t size) __attribute__((alloc_size(1)));], 761*1208bc7eSAndroid Build Coastguard Worker [je_cv_alloc_size]) 762*1208bc7eSAndroid Build Coastguard WorkerJE_CFLAGS_RESTORE() 763*1208bc7eSAndroid Build Coastguard Workerif test "x${je_cv_alloc_size}" = "xyes" ; then 764*1208bc7eSAndroid Build Coastguard Worker AC_DEFINE([JEMALLOC_HAVE_ATTR_ALLOC_SIZE], [ ]) 765*1208bc7eSAndroid Build Coastguard Workerfi 766*1208bc7eSAndroid Build Coastguard Workerdnl Check for format(gnu_printf, ...) attribute support. 767*1208bc7eSAndroid Build Coastguard WorkerJE_CFLAGS_SAVE() 768*1208bc7eSAndroid Build Coastguard WorkerJE_CFLAGS_ADD([-Werror]) 769*1208bc7eSAndroid Build Coastguard WorkerJE_CFLAGS_ADD([-herror_on_warning]) 770*1208bc7eSAndroid Build Coastguard WorkerJE_COMPILABLE([format(gnu_printf, ...) attribute], [#include <stdlib.h>], 771*1208bc7eSAndroid Build Coastguard Worker [void *foo(const char *format, ...) __attribute__((format(gnu_printf, 1, 2)));], 772*1208bc7eSAndroid Build Coastguard Worker [je_cv_format_gnu_printf]) 773*1208bc7eSAndroid Build Coastguard WorkerJE_CFLAGS_RESTORE() 774*1208bc7eSAndroid Build Coastguard Workerif test "x${je_cv_format_gnu_printf}" = "xyes" ; then 775*1208bc7eSAndroid Build Coastguard Worker AC_DEFINE([JEMALLOC_HAVE_ATTR_FORMAT_GNU_PRINTF], [ ]) 776*1208bc7eSAndroid Build Coastguard Workerfi 777*1208bc7eSAndroid Build Coastguard Workerdnl Check for format(printf, ...) attribute support. 778*1208bc7eSAndroid Build Coastguard WorkerJE_CFLAGS_SAVE() 779*1208bc7eSAndroid Build Coastguard WorkerJE_CFLAGS_ADD([-Werror]) 780*1208bc7eSAndroid Build Coastguard WorkerJE_CFLAGS_ADD([-herror_on_warning]) 781*1208bc7eSAndroid Build Coastguard WorkerJE_COMPILABLE([format(printf, ...) attribute], [#include <stdlib.h>], 782*1208bc7eSAndroid Build Coastguard Worker [void *foo(const char *format, ...) __attribute__((format(printf, 1, 2)));], 783*1208bc7eSAndroid Build Coastguard Worker [je_cv_format_printf]) 784*1208bc7eSAndroid Build Coastguard WorkerJE_CFLAGS_RESTORE() 785*1208bc7eSAndroid Build Coastguard Workerif test "x${je_cv_format_printf}" = "xyes" ; then 786*1208bc7eSAndroid Build Coastguard Worker AC_DEFINE([JEMALLOC_HAVE_ATTR_FORMAT_PRINTF], [ ]) 787*1208bc7eSAndroid Build Coastguard Workerfi 788*1208bc7eSAndroid Build Coastguard Worker 789*1208bc7eSAndroid Build Coastguard Workerdnl Support optional additions to rpath. 790*1208bc7eSAndroid Build Coastguard WorkerAC_ARG_WITH([rpath], 791*1208bc7eSAndroid Build Coastguard Worker [AS_HELP_STRING([--with-rpath=<rpath>], [Colon-separated rpath (ELF systems only)])], 792*1208bc7eSAndroid Build Coastguard Workerif test "x$with_rpath" = "xno" ; then 793*1208bc7eSAndroid Build Coastguard Worker RPATH_EXTRA= 794*1208bc7eSAndroid Build Coastguard Workerelse 795*1208bc7eSAndroid Build Coastguard Worker RPATH_EXTRA="`echo $with_rpath | tr \":\" \" \"`" 796*1208bc7eSAndroid Build Coastguard Workerfi, 797*1208bc7eSAndroid Build Coastguard Worker RPATH_EXTRA= 798*1208bc7eSAndroid Build Coastguard Worker) 799*1208bc7eSAndroid Build Coastguard WorkerAC_SUBST([RPATH_EXTRA]) 800*1208bc7eSAndroid Build Coastguard Worker 801*1208bc7eSAndroid Build Coastguard Workerdnl Disable rules that do automatic regeneration of configure output by default. 802*1208bc7eSAndroid Build Coastguard WorkerAC_ARG_ENABLE([autogen], 803*1208bc7eSAndroid Build Coastguard Worker [AS_HELP_STRING([--enable-autogen], [Automatically regenerate configure output])], 804*1208bc7eSAndroid Build Coastguard Workerif test "x$enable_autogen" = "xno" ; then 805*1208bc7eSAndroid Build Coastguard Worker enable_autogen="0" 806*1208bc7eSAndroid Build Coastguard Workerelse 807*1208bc7eSAndroid Build Coastguard Worker enable_autogen="1" 808*1208bc7eSAndroid Build Coastguard Workerfi 809*1208bc7eSAndroid Build Coastguard Worker, 810*1208bc7eSAndroid Build Coastguard Workerenable_autogen="0" 811*1208bc7eSAndroid Build Coastguard Worker) 812*1208bc7eSAndroid Build Coastguard WorkerAC_SUBST([enable_autogen]) 813*1208bc7eSAndroid Build Coastguard Worker 814*1208bc7eSAndroid Build Coastguard WorkerAC_PROG_INSTALL 815*1208bc7eSAndroid Build Coastguard WorkerAC_PROG_RANLIB 816*1208bc7eSAndroid Build Coastguard WorkerAC_PATH_PROG([LD], [ld], [false], [$PATH]) 817*1208bc7eSAndroid Build Coastguard WorkerAC_PATH_PROG([AUTOCONF], [autoconf], [false], [$PATH]) 818*1208bc7eSAndroid Build Coastguard Worker 819*1208bc7eSAndroid Build Coastguard Workerdnl Perform no name mangling by default. 820*1208bc7eSAndroid Build Coastguard WorkerAC_ARG_WITH([mangling], 821*1208bc7eSAndroid Build Coastguard Worker [AS_HELP_STRING([--with-mangling=<map>], [Mangle symbols in <map>])], 822*1208bc7eSAndroid Build Coastguard Worker [mangling_map="$with_mangling"], [mangling_map=""]) 823*1208bc7eSAndroid Build Coastguard Worker 824*1208bc7eSAndroid Build Coastguard Workerdnl Do not prefix public APIs by default. 825*1208bc7eSAndroid Build Coastguard WorkerAC_ARG_WITH([jemalloc_prefix], 826*1208bc7eSAndroid Build Coastguard Worker [AS_HELP_STRING([--with-jemalloc-prefix=<prefix>], [Prefix to prepend to all public APIs])], 827*1208bc7eSAndroid Build Coastguard Worker [JEMALLOC_PREFIX="$with_jemalloc_prefix"], 828*1208bc7eSAndroid Build Coastguard Worker [if test "x$abi" != "xmacho" -a "x$abi" != "xpecoff"; then 829*1208bc7eSAndroid Build Coastguard Worker JEMALLOC_PREFIX="" 830*1208bc7eSAndroid Build Coastguard Workerelse 831*1208bc7eSAndroid Build Coastguard Worker JEMALLOC_PREFIX="je_" 832*1208bc7eSAndroid Build Coastguard Workerfi] 833*1208bc7eSAndroid Build Coastguard Worker) 834*1208bc7eSAndroid Build Coastguard Workerif test "x$JEMALLOC_PREFIX" = "x" ; then 835*1208bc7eSAndroid Build Coastguard Worker AC_DEFINE([JEMALLOC_IS_MALLOC]) 836*1208bc7eSAndroid Build Coastguard Workerelse 837*1208bc7eSAndroid Build Coastguard Worker JEMALLOC_CPREFIX=`echo ${JEMALLOC_PREFIX} | tr "a-z" "A-Z"` 838*1208bc7eSAndroid Build Coastguard Worker AC_DEFINE_UNQUOTED([JEMALLOC_PREFIX], ["$JEMALLOC_PREFIX"]) 839*1208bc7eSAndroid Build Coastguard Worker AC_DEFINE_UNQUOTED([JEMALLOC_CPREFIX], ["$JEMALLOC_CPREFIX"]) 840*1208bc7eSAndroid Build Coastguard Workerfi 841*1208bc7eSAndroid Build Coastguard WorkerAC_SUBST([JEMALLOC_PREFIX]) 842*1208bc7eSAndroid Build Coastguard WorkerAC_SUBST([JEMALLOC_CPREFIX]) 843*1208bc7eSAndroid Build Coastguard Worker 844*1208bc7eSAndroid Build Coastguard WorkerAC_ARG_WITH([export], 845*1208bc7eSAndroid Build Coastguard Worker [AS_HELP_STRING([--without-export], [disable exporting jemalloc public APIs])], 846*1208bc7eSAndroid Build Coastguard Worker [if test "x$with_export" = "xno"; then 847*1208bc7eSAndroid Build Coastguard Worker AC_DEFINE([JEMALLOC_EXPORT],[]) 848*1208bc7eSAndroid Build Coastguard Workerfi] 849*1208bc7eSAndroid Build Coastguard Worker) 850*1208bc7eSAndroid Build Coastguard Worker 851*1208bc7eSAndroid Build Coastguard Workerpublic_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" 852*1208bc7eSAndroid Build Coastguard Workerdnl Check for additional platform-specific public API functions. 853*1208bc7eSAndroid Build Coastguard WorkerAC_CHECK_FUNC([memalign], 854*1208bc7eSAndroid Build Coastguard Worker [AC_DEFINE([JEMALLOC_OVERRIDE_MEMALIGN], [ ]) 855*1208bc7eSAndroid Build Coastguard Worker public_syms="${public_syms} memalign"]) 856*1208bc7eSAndroid Build Coastguard WorkerAC_CHECK_FUNC([valloc], 857*1208bc7eSAndroid Build Coastguard Worker [AC_DEFINE([JEMALLOC_OVERRIDE_VALLOC], [ ]) 858*1208bc7eSAndroid Build Coastguard Worker public_syms="${public_syms} valloc"]) 859*1208bc7eSAndroid Build Coastguard Worker 860*1208bc7eSAndroid Build Coastguard Workerdnl Check for allocator-related functions that should be wrapped. 861*1208bc7eSAndroid Build Coastguard Workerwrap_syms= 862*1208bc7eSAndroid Build Coastguard Workerif test "x${JEMALLOC_PREFIX}" = "x" ; then 863*1208bc7eSAndroid Build Coastguard Worker AC_CHECK_FUNC([__libc_calloc], 864*1208bc7eSAndroid Build Coastguard Worker [AC_DEFINE([JEMALLOC_OVERRIDE___LIBC_CALLOC], [ ]) 865*1208bc7eSAndroid Build Coastguard Worker wrap_syms="${wrap_syms} __libc_calloc"]) 866*1208bc7eSAndroid Build Coastguard Worker AC_CHECK_FUNC([__libc_free], 867*1208bc7eSAndroid Build Coastguard Worker [AC_DEFINE([JEMALLOC_OVERRIDE___LIBC_FREE], [ ]) 868*1208bc7eSAndroid Build Coastguard Worker wrap_syms="${wrap_syms} __libc_free"]) 869*1208bc7eSAndroid Build Coastguard Worker AC_CHECK_FUNC([__libc_malloc], 870*1208bc7eSAndroid Build Coastguard Worker [AC_DEFINE([JEMALLOC_OVERRIDE___LIBC_MALLOC], [ ]) 871*1208bc7eSAndroid Build Coastguard Worker wrap_syms="${wrap_syms} __libc_malloc"]) 872*1208bc7eSAndroid Build Coastguard Worker AC_CHECK_FUNC([__libc_memalign], 873*1208bc7eSAndroid Build Coastguard Worker [AC_DEFINE([JEMALLOC_OVERRIDE___LIBC_MEMALIGN], [ ]) 874*1208bc7eSAndroid Build Coastguard Worker wrap_syms="${wrap_syms} __libc_memalign"]) 875*1208bc7eSAndroid Build Coastguard Worker AC_CHECK_FUNC([__libc_realloc], 876*1208bc7eSAndroid Build Coastguard Worker [AC_DEFINE([JEMALLOC_OVERRIDE___LIBC_REALLOC], [ ]) 877*1208bc7eSAndroid Build Coastguard Worker wrap_syms="${wrap_syms} __libc_realloc"]) 878*1208bc7eSAndroid Build Coastguard Worker AC_CHECK_FUNC([__libc_valloc], 879*1208bc7eSAndroid Build Coastguard Worker [AC_DEFINE([JEMALLOC_OVERRIDE___LIBC_VALLOC], [ ]) 880*1208bc7eSAndroid Build Coastguard Worker wrap_syms="${wrap_syms} __libc_valloc"]) 881*1208bc7eSAndroid Build Coastguard Worker AC_CHECK_FUNC([__posix_memalign], 882*1208bc7eSAndroid Build Coastguard Worker [AC_DEFINE([JEMALLOC_OVERRIDE___POSIX_MEMALIGN], [ ]) 883*1208bc7eSAndroid Build Coastguard Worker wrap_syms="${wrap_syms} __posix_memalign"]) 884*1208bc7eSAndroid Build Coastguard Workerfi 885*1208bc7eSAndroid Build Coastguard Worker 886*1208bc7eSAndroid Build Coastguard Workercase "${host}" in 887*1208bc7eSAndroid Build Coastguard Worker *-*-mingw* | *-*-cygwin*) 888*1208bc7eSAndroid Build Coastguard Worker wrap_syms="${wrap_syms} tls_callback" 889*1208bc7eSAndroid Build Coastguard Worker ;; 890*1208bc7eSAndroid Build Coastguard Worker *) 891*1208bc7eSAndroid Build Coastguard Worker ;; 892*1208bc7eSAndroid Build Coastguard Workeresac 893*1208bc7eSAndroid Build Coastguard Worker 894*1208bc7eSAndroid Build Coastguard Workerdnl Mangle library-private APIs. 895*1208bc7eSAndroid Build Coastguard WorkerAC_ARG_WITH([private_namespace], 896*1208bc7eSAndroid Build Coastguard Worker [AS_HELP_STRING([--with-private-namespace=<prefix>], [Prefix to prepend to all library-private APIs])], 897*1208bc7eSAndroid Build Coastguard Worker [JEMALLOC_PRIVATE_NAMESPACE="${with_private_namespace}je_"], 898*1208bc7eSAndroid Build Coastguard Worker [JEMALLOC_PRIVATE_NAMESPACE="je_"] 899*1208bc7eSAndroid Build Coastguard Worker) 900*1208bc7eSAndroid Build Coastguard WorkerAC_DEFINE_UNQUOTED([JEMALLOC_PRIVATE_NAMESPACE], [$JEMALLOC_PRIVATE_NAMESPACE]) 901*1208bc7eSAndroid Build Coastguard Workerprivate_namespace="$JEMALLOC_PRIVATE_NAMESPACE" 902*1208bc7eSAndroid Build Coastguard WorkerAC_SUBST([private_namespace]) 903*1208bc7eSAndroid Build Coastguard Worker 904*1208bc7eSAndroid Build Coastguard Workerdnl Do not add suffix to installed files by default. 905*1208bc7eSAndroid Build Coastguard WorkerAC_ARG_WITH([install_suffix], 906*1208bc7eSAndroid Build Coastguard Worker [AS_HELP_STRING([--with-install-suffix=<suffix>], [Suffix to append to all installed files])], 907*1208bc7eSAndroid Build Coastguard Worker [INSTALL_SUFFIX="$with_install_suffix"], 908*1208bc7eSAndroid Build Coastguard Worker [INSTALL_SUFFIX=] 909*1208bc7eSAndroid Build Coastguard Worker) 910*1208bc7eSAndroid Build Coastguard Workerinstall_suffix="$INSTALL_SUFFIX" 911*1208bc7eSAndroid Build Coastguard WorkerAC_SUBST([install_suffix]) 912*1208bc7eSAndroid Build Coastguard Worker 913*1208bc7eSAndroid Build Coastguard Workerdnl Specify default malloc_conf. 914*1208bc7eSAndroid Build Coastguard WorkerAC_ARG_WITH([malloc_conf], 915*1208bc7eSAndroid Build Coastguard Worker [AS_HELP_STRING([--with-malloc-conf=<malloc_conf>], [config.malloc_conf options string])], 916*1208bc7eSAndroid Build Coastguard Worker [JEMALLOC_CONFIG_MALLOC_CONF="$with_malloc_conf"], 917*1208bc7eSAndroid Build Coastguard Worker [JEMALLOC_CONFIG_MALLOC_CONF=""] 918*1208bc7eSAndroid Build Coastguard Worker) 919*1208bc7eSAndroid Build Coastguard Workerconfig_malloc_conf="$JEMALLOC_CONFIG_MALLOC_CONF" 920*1208bc7eSAndroid Build Coastguard WorkerAC_DEFINE_UNQUOTED([JEMALLOC_CONFIG_MALLOC_CONF], ["$config_malloc_conf"]) 921*1208bc7eSAndroid Build Coastguard Worker 922*1208bc7eSAndroid Build Coastguard Workerdnl Substitute @je_@ in jemalloc_protos.h.in, primarily to make generation of 923*1208bc7eSAndroid Build Coastguard Workerdnl jemalloc_protos_jet.h easy. 924*1208bc7eSAndroid Build Coastguard Workerje_="je_" 925*1208bc7eSAndroid Build Coastguard WorkerAC_SUBST([je_]) 926*1208bc7eSAndroid Build Coastguard Worker 927*1208bc7eSAndroid Build Coastguard Workercfgoutputs_in="Makefile.in" 928*1208bc7eSAndroid Build Coastguard Workercfgoutputs_in="${cfgoutputs_in} jemalloc.pc.in" 929*1208bc7eSAndroid Build Coastguard Workercfgoutputs_in="${cfgoutputs_in} doc/html.xsl.in" 930*1208bc7eSAndroid Build Coastguard Workercfgoutputs_in="${cfgoutputs_in} doc/manpages.xsl.in" 931*1208bc7eSAndroid Build Coastguard Workercfgoutputs_in="${cfgoutputs_in} doc/jemalloc.xml.in" 932*1208bc7eSAndroid Build Coastguard Workercfgoutputs_in="${cfgoutputs_in} include/jemalloc/jemalloc_macros.h.in" 933*1208bc7eSAndroid Build Coastguard Workercfgoutputs_in="${cfgoutputs_in} include/jemalloc/jemalloc_protos.h.in" 934*1208bc7eSAndroid Build Coastguard Workercfgoutputs_in="${cfgoutputs_in} include/jemalloc/jemalloc_typedefs.h.in" 935*1208bc7eSAndroid Build Coastguard Workercfgoutputs_in="${cfgoutputs_in} include/jemalloc/internal/jemalloc_preamble.h.in" 936*1208bc7eSAndroid Build Coastguard Workercfgoutputs_in="${cfgoutputs_in} test/test.sh.in" 937*1208bc7eSAndroid Build Coastguard Workercfgoutputs_in="${cfgoutputs_in} test/include/test/jemalloc_test.h.in" 938*1208bc7eSAndroid Build Coastguard Worker 939*1208bc7eSAndroid Build Coastguard Workercfgoutputs_out="Makefile" 940*1208bc7eSAndroid Build Coastguard Workercfgoutputs_out="${cfgoutputs_out} jemalloc.pc" 941*1208bc7eSAndroid Build Coastguard Workercfgoutputs_out="${cfgoutputs_out} doc/html.xsl" 942*1208bc7eSAndroid Build Coastguard Workercfgoutputs_out="${cfgoutputs_out} doc/manpages.xsl" 943*1208bc7eSAndroid Build Coastguard Workercfgoutputs_out="${cfgoutputs_out} doc/jemalloc.xml" 944*1208bc7eSAndroid Build Coastguard Workercfgoutputs_out="${cfgoutputs_out} include/jemalloc/jemalloc_macros.h" 945*1208bc7eSAndroid Build Coastguard Workercfgoutputs_out="${cfgoutputs_out} include/jemalloc/jemalloc_protos.h" 946*1208bc7eSAndroid Build Coastguard Workercfgoutputs_out="${cfgoutputs_out} include/jemalloc/jemalloc_typedefs.h" 947*1208bc7eSAndroid Build Coastguard Workercfgoutputs_out="${cfgoutputs_out} include/jemalloc/internal/jemalloc_preamble.h" 948*1208bc7eSAndroid Build Coastguard Workercfgoutputs_out="${cfgoutputs_out} test/test.sh" 949*1208bc7eSAndroid Build Coastguard Workercfgoutputs_out="${cfgoutputs_out} test/include/test/jemalloc_test.h" 950*1208bc7eSAndroid Build Coastguard Worker 951*1208bc7eSAndroid Build Coastguard Workercfgoutputs_tup="Makefile" 952*1208bc7eSAndroid Build Coastguard Workercfgoutputs_tup="${cfgoutputs_tup} jemalloc.pc:jemalloc.pc.in" 953*1208bc7eSAndroid Build Coastguard Workercfgoutputs_tup="${cfgoutputs_tup} doc/html.xsl:doc/html.xsl.in" 954*1208bc7eSAndroid Build Coastguard Workercfgoutputs_tup="${cfgoutputs_tup} doc/manpages.xsl:doc/manpages.xsl.in" 955*1208bc7eSAndroid Build Coastguard Workercfgoutputs_tup="${cfgoutputs_tup} doc/jemalloc.xml:doc/jemalloc.xml.in" 956*1208bc7eSAndroid Build Coastguard Workercfgoutputs_tup="${cfgoutputs_tup} include/jemalloc/jemalloc_macros.h:include/jemalloc/jemalloc_macros.h.in" 957*1208bc7eSAndroid Build Coastguard Workercfgoutputs_tup="${cfgoutputs_tup} include/jemalloc/jemalloc_protos.h:include/jemalloc/jemalloc_protos.h.in" 958*1208bc7eSAndroid Build Coastguard Workercfgoutputs_tup="${cfgoutputs_tup} include/jemalloc/jemalloc_typedefs.h:include/jemalloc/jemalloc_typedefs.h.in" 959*1208bc7eSAndroid Build Coastguard Workercfgoutputs_tup="${cfgoutputs_tup} include/jemalloc/internal/jemalloc_preamble.h" 960*1208bc7eSAndroid Build Coastguard Workercfgoutputs_tup="${cfgoutputs_tup} test/test.sh:test/test.sh.in" 961*1208bc7eSAndroid Build Coastguard Workercfgoutputs_tup="${cfgoutputs_tup} test/include/test/jemalloc_test.h:test/include/test/jemalloc_test.h.in" 962*1208bc7eSAndroid Build Coastguard Worker 963*1208bc7eSAndroid Build Coastguard Workercfghdrs_in="include/jemalloc/jemalloc_defs.h.in" 964*1208bc7eSAndroid Build Coastguard Workercfghdrs_in="${cfghdrs_in} include/jemalloc/internal/jemalloc_internal_defs.h.in" 965*1208bc7eSAndroid Build Coastguard Workercfghdrs_in="${cfghdrs_in} include/jemalloc/internal/private_symbols.sh" 966*1208bc7eSAndroid Build Coastguard Workercfghdrs_in="${cfghdrs_in} include/jemalloc/internal/private_namespace.sh" 967*1208bc7eSAndroid Build Coastguard Workercfghdrs_in="${cfghdrs_in} include/jemalloc/internal/public_namespace.sh" 968*1208bc7eSAndroid Build Coastguard Workercfghdrs_in="${cfghdrs_in} include/jemalloc/internal/public_unnamespace.sh" 969*1208bc7eSAndroid Build Coastguard Workercfghdrs_in="${cfghdrs_in} include/jemalloc/internal/size_classes.sh" 970*1208bc7eSAndroid Build Coastguard Workercfghdrs_in="${cfghdrs_in} include/jemalloc/jemalloc_rename.sh" 971*1208bc7eSAndroid Build Coastguard Workercfghdrs_in="${cfghdrs_in} include/jemalloc/jemalloc_mangle.sh" 972*1208bc7eSAndroid Build Coastguard Workercfghdrs_in="${cfghdrs_in} include/jemalloc/jemalloc.sh" 973*1208bc7eSAndroid Build Coastguard Workercfghdrs_in="${cfghdrs_in} test/include/test/jemalloc_test_defs.h.in" 974*1208bc7eSAndroid Build Coastguard Worker 975*1208bc7eSAndroid Build Coastguard Workercfghdrs_out="include/jemalloc/jemalloc_defs.h" 976*1208bc7eSAndroid Build Coastguard Workercfghdrs_out="${cfghdrs_out} include/jemalloc/jemalloc${install_suffix}.h" 977*1208bc7eSAndroid Build Coastguard Workercfghdrs_out="${cfghdrs_out} include/jemalloc/internal/private_symbols.awk" 978*1208bc7eSAndroid Build Coastguard Workercfghdrs_out="${cfghdrs_out} include/jemalloc/internal/private_symbols_jet.awk" 979*1208bc7eSAndroid Build Coastguard Workercfghdrs_out="${cfghdrs_out} include/jemalloc/internal/public_symbols.txt" 980*1208bc7eSAndroid Build Coastguard Workercfghdrs_out="${cfghdrs_out} include/jemalloc/internal/public_namespace.h" 981*1208bc7eSAndroid Build Coastguard Workercfghdrs_out="${cfghdrs_out} include/jemalloc/internal/public_unnamespace.h" 982*1208bc7eSAndroid Build Coastguard Workercfghdrs_out="${cfghdrs_out} include/jemalloc/internal/size_classes.h" 983*1208bc7eSAndroid Build Coastguard Workercfghdrs_out="${cfghdrs_out} include/jemalloc/jemalloc_protos_jet.h" 984*1208bc7eSAndroid Build Coastguard Workercfghdrs_out="${cfghdrs_out} include/jemalloc/jemalloc_rename.h" 985*1208bc7eSAndroid Build Coastguard Workercfghdrs_out="${cfghdrs_out} include/jemalloc/jemalloc_mangle.h" 986*1208bc7eSAndroid Build Coastguard Workercfghdrs_out="${cfghdrs_out} include/jemalloc/jemalloc_mangle_jet.h" 987*1208bc7eSAndroid Build Coastguard Workercfghdrs_out="${cfghdrs_out} include/jemalloc/internal/jemalloc_internal_defs.h" 988*1208bc7eSAndroid Build Coastguard Workercfghdrs_out="${cfghdrs_out} test/include/test/jemalloc_test_defs.h" 989*1208bc7eSAndroid Build Coastguard Worker 990*1208bc7eSAndroid Build Coastguard Workercfghdrs_tup="include/jemalloc/jemalloc_defs.h:include/jemalloc/jemalloc_defs.h.in" 991*1208bc7eSAndroid Build Coastguard Workercfghdrs_tup="${cfghdrs_tup} include/jemalloc/internal/jemalloc_internal_defs.h:include/jemalloc/internal/jemalloc_internal_defs.h.in" 992*1208bc7eSAndroid Build Coastguard Workercfghdrs_tup="${cfghdrs_tup} test/include/test/jemalloc_test_defs.h:test/include/test/jemalloc_test_defs.h.in" 993*1208bc7eSAndroid Build Coastguard Worker 994*1208bc7eSAndroid Build Coastguard Workerdnl Do not compile with debugging by default. 995*1208bc7eSAndroid Build Coastguard WorkerAC_ARG_ENABLE([debug], 996*1208bc7eSAndroid Build Coastguard Worker [AS_HELP_STRING([--enable-debug], 997*1208bc7eSAndroid Build Coastguard Worker [Build debugging code])], 998*1208bc7eSAndroid Build Coastguard Worker[if test "x$enable_debug" = "xno" ; then 999*1208bc7eSAndroid Build Coastguard Worker enable_debug="0" 1000*1208bc7eSAndroid Build Coastguard Workerelse 1001*1208bc7eSAndroid Build Coastguard Worker enable_debug="1" 1002*1208bc7eSAndroid Build Coastguard Workerfi 1003*1208bc7eSAndroid Build Coastguard Worker], 1004*1208bc7eSAndroid Build Coastguard Worker[enable_debug="0"] 1005*1208bc7eSAndroid Build Coastguard Worker) 1006*1208bc7eSAndroid Build Coastguard Workerif test "x$enable_debug" = "x1" ; then 1007*1208bc7eSAndroid Build Coastguard Worker AC_DEFINE([JEMALLOC_DEBUG], [ ]) 1008*1208bc7eSAndroid Build Coastguard Workerfi 1009*1208bc7eSAndroid Build Coastguard Workerif test "x$enable_debug" = "x1" ; then 1010*1208bc7eSAndroid Build Coastguard Worker AC_DEFINE([JEMALLOC_DEBUG], [ ]) 1011*1208bc7eSAndroid Build Coastguard Workerfi 1012*1208bc7eSAndroid Build Coastguard WorkerAC_SUBST([enable_debug]) 1013*1208bc7eSAndroid Build Coastguard Worker 1014*1208bc7eSAndroid Build Coastguard Workerdnl Only optimize if not debugging. 1015*1208bc7eSAndroid Build Coastguard Workerif test "x$enable_debug" = "x0" ; then 1016*1208bc7eSAndroid Build Coastguard Worker if test "x$GCC" = "xyes" ; then 1017*1208bc7eSAndroid Build Coastguard Worker JE_CFLAGS_ADD([-O3]) 1018*1208bc7eSAndroid Build Coastguard Worker JE_CXXFLAGS_ADD([-O3]) 1019*1208bc7eSAndroid Build Coastguard Worker JE_CFLAGS_ADD([-funroll-loops]) 1020*1208bc7eSAndroid Build Coastguard Worker elif test "x$je_cv_msvc" = "xyes" ; then 1021*1208bc7eSAndroid Build Coastguard Worker JE_CFLAGS_ADD([-O2]) 1022*1208bc7eSAndroid Build Coastguard Worker JE_CXXFLAGS_ADD([-O2]) 1023*1208bc7eSAndroid Build Coastguard Worker else 1024*1208bc7eSAndroid Build Coastguard Worker JE_CFLAGS_ADD([-O]) 1025*1208bc7eSAndroid Build Coastguard Worker JE_CXXFLAGS_ADD([-O]) 1026*1208bc7eSAndroid Build Coastguard Worker fi 1027*1208bc7eSAndroid Build Coastguard Workerfi 1028*1208bc7eSAndroid Build Coastguard Worker 1029*1208bc7eSAndroid Build Coastguard Workerdnl Enable statistics calculation by default. 1030*1208bc7eSAndroid Build Coastguard WorkerAC_ARG_ENABLE([stats], 1031*1208bc7eSAndroid Build Coastguard Worker [AS_HELP_STRING([--disable-stats], 1032*1208bc7eSAndroid Build Coastguard Worker [Disable statistics calculation/reporting])], 1033*1208bc7eSAndroid Build Coastguard Worker[if test "x$enable_stats" = "xno" ; then 1034*1208bc7eSAndroid Build Coastguard Worker enable_stats="0" 1035*1208bc7eSAndroid Build Coastguard Workerelse 1036*1208bc7eSAndroid Build Coastguard Worker enable_stats="1" 1037*1208bc7eSAndroid Build Coastguard Workerfi 1038*1208bc7eSAndroid Build Coastguard Worker], 1039*1208bc7eSAndroid Build Coastguard Worker[enable_stats="1"] 1040*1208bc7eSAndroid Build Coastguard Worker) 1041*1208bc7eSAndroid Build Coastguard Workerif test "x$enable_stats" = "x1" ; then 1042*1208bc7eSAndroid Build Coastguard Worker AC_DEFINE([JEMALLOC_STATS], [ ]) 1043*1208bc7eSAndroid Build Coastguard Workerfi 1044*1208bc7eSAndroid Build Coastguard WorkerAC_SUBST([enable_stats]) 1045*1208bc7eSAndroid Build Coastguard Worker 1046*1208bc7eSAndroid Build Coastguard Workerdnl Do not enable profiling by default. 1047*1208bc7eSAndroid Build Coastguard WorkerAC_ARG_ENABLE([prof], 1048*1208bc7eSAndroid Build Coastguard Worker [AS_HELP_STRING([--enable-prof], [Enable allocation profiling])], 1049*1208bc7eSAndroid Build Coastguard Worker[if test "x$enable_prof" = "xno" ; then 1050*1208bc7eSAndroid Build Coastguard Worker enable_prof="0" 1051*1208bc7eSAndroid Build Coastguard Workerelse 1052*1208bc7eSAndroid Build Coastguard Worker enable_prof="1" 1053*1208bc7eSAndroid Build Coastguard Workerfi 1054*1208bc7eSAndroid Build Coastguard Worker], 1055*1208bc7eSAndroid Build Coastguard Worker[enable_prof="0"] 1056*1208bc7eSAndroid Build Coastguard Worker) 1057*1208bc7eSAndroid Build Coastguard Workerif test "x$enable_prof" = "x1" ; then 1058*1208bc7eSAndroid Build Coastguard Worker backtrace_method="" 1059*1208bc7eSAndroid Build Coastguard Workerelse 1060*1208bc7eSAndroid Build Coastguard Worker backtrace_method="N/A" 1061*1208bc7eSAndroid Build Coastguard Workerfi 1062*1208bc7eSAndroid Build Coastguard Worker 1063*1208bc7eSAndroid Build Coastguard WorkerAC_ARG_ENABLE([prof-libunwind], 1064*1208bc7eSAndroid Build Coastguard Worker [AS_HELP_STRING([--enable-prof-libunwind], [Use libunwind for backtracing])], 1065*1208bc7eSAndroid Build Coastguard Worker[if test "x$enable_prof_libunwind" = "xno" ; then 1066*1208bc7eSAndroid Build Coastguard Worker enable_prof_libunwind="0" 1067*1208bc7eSAndroid Build Coastguard Workerelse 1068*1208bc7eSAndroid Build Coastguard Worker enable_prof_libunwind="1" 1069*1208bc7eSAndroid Build Coastguard Workerfi 1070*1208bc7eSAndroid Build Coastguard Worker], 1071*1208bc7eSAndroid Build Coastguard Worker[enable_prof_libunwind="0"] 1072*1208bc7eSAndroid Build Coastguard Worker) 1073*1208bc7eSAndroid Build Coastguard WorkerAC_ARG_WITH([static_libunwind], 1074*1208bc7eSAndroid Build Coastguard Worker [AS_HELP_STRING([--with-static-libunwind=<libunwind.a>], 1075*1208bc7eSAndroid Build Coastguard Worker [Path to static libunwind library; use rather than dynamically linking])], 1076*1208bc7eSAndroid Build Coastguard Workerif test "x$with_static_libunwind" = "xno" ; then 1077*1208bc7eSAndroid Build Coastguard Worker LUNWIND="-lunwind" 1078*1208bc7eSAndroid Build Coastguard Workerelse 1079*1208bc7eSAndroid Build Coastguard Worker if test ! -f "$with_static_libunwind" ; then 1080*1208bc7eSAndroid Build Coastguard Worker AC_MSG_ERROR([Static libunwind not found: $with_static_libunwind]) 1081*1208bc7eSAndroid Build Coastguard Worker fi 1082*1208bc7eSAndroid Build Coastguard Worker LUNWIND="$with_static_libunwind" 1083*1208bc7eSAndroid Build Coastguard Workerfi, 1084*1208bc7eSAndroid Build Coastguard Worker LUNWIND="-lunwind" 1085*1208bc7eSAndroid Build Coastguard Worker) 1086*1208bc7eSAndroid Build Coastguard Workerif test "x$backtrace_method" = "x" -a "x$enable_prof_libunwind" = "x1" ; then 1087*1208bc7eSAndroid Build Coastguard Worker AC_CHECK_HEADERS([libunwind.h], , [enable_prof_libunwind="0"]) 1088*1208bc7eSAndroid Build Coastguard Worker if test "x$LUNWIND" = "x-lunwind" ; then 1089*1208bc7eSAndroid Build Coastguard Worker AC_CHECK_LIB([unwind], [unw_backtrace], [JE_APPEND_VS(LIBS, $LUNWIND)], 1090*1208bc7eSAndroid Build Coastguard Worker [enable_prof_libunwind="0"]) 1091*1208bc7eSAndroid Build Coastguard Worker else 1092*1208bc7eSAndroid Build Coastguard Worker JE_APPEND_VS(LIBS, $LUNWIND) 1093*1208bc7eSAndroid Build Coastguard Worker fi 1094*1208bc7eSAndroid Build Coastguard Worker if test "x${enable_prof_libunwind}" = "x1" ; then 1095*1208bc7eSAndroid Build Coastguard Worker backtrace_method="libunwind" 1096*1208bc7eSAndroid Build Coastguard Worker AC_DEFINE([JEMALLOC_PROF_LIBUNWIND], [ ]) 1097*1208bc7eSAndroid Build Coastguard Worker fi 1098*1208bc7eSAndroid Build Coastguard Workerfi 1099*1208bc7eSAndroid Build Coastguard Worker 1100*1208bc7eSAndroid Build Coastguard WorkerAC_ARG_ENABLE([prof-libgcc], 1101*1208bc7eSAndroid Build Coastguard Worker [AS_HELP_STRING([--disable-prof-libgcc], 1102*1208bc7eSAndroid Build Coastguard Worker [Do not use libgcc for backtracing])], 1103*1208bc7eSAndroid Build Coastguard Worker[if test "x$enable_prof_libgcc" = "xno" ; then 1104*1208bc7eSAndroid Build Coastguard Worker enable_prof_libgcc="0" 1105*1208bc7eSAndroid Build Coastguard Workerelse 1106*1208bc7eSAndroid Build Coastguard Worker enable_prof_libgcc="1" 1107*1208bc7eSAndroid Build Coastguard Workerfi 1108*1208bc7eSAndroid Build Coastguard Worker], 1109*1208bc7eSAndroid Build Coastguard Worker[enable_prof_libgcc="1"] 1110*1208bc7eSAndroid Build Coastguard Worker) 1111*1208bc7eSAndroid Build Coastguard Workerif test "x$backtrace_method" = "x" -a "x$enable_prof_libgcc" = "x1" \ 1112*1208bc7eSAndroid Build Coastguard Worker -a "x$GCC" = "xyes" ; then 1113*1208bc7eSAndroid Build Coastguard Worker AC_CHECK_HEADERS([unwind.h], , [enable_prof_libgcc="0"]) 1114*1208bc7eSAndroid Build Coastguard Worker if test "x${enable_prof_libgcc}" = "x1" ; then 1115*1208bc7eSAndroid Build Coastguard Worker AC_CHECK_LIB([gcc], [_Unwind_Backtrace], [JE_APPEND_VS(LIBS, -lgcc)], [enable_prof_libgcc="0"]) 1116*1208bc7eSAndroid Build Coastguard Worker fi 1117*1208bc7eSAndroid Build Coastguard Worker if test "x${enable_prof_libgcc}" = "x1" ; then 1118*1208bc7eSAndroid Build Coastguard Worker backtrace_method="libgcc" 1119*1208bc7eSAndroid Build Coastguard Worker AC_DEFINE([JEMALLOC_PROF_LIBGCC], [ ]) 1120*1208bc7eSAndroid Build Coastguard Worker fi 1121*1208bc7eSAndroid Build Coastguard Workerelse 1122*1208bc7eSAndroid Build Coastguard Worker enable_prof_libgcc="0" 1123*1208bc7eSAndroid Build Coastguard Workerfi 1124*1208bc7eSAndroid Build Coastguard Worker 1125*1208bc7eSAndroid Build Coastguard WorkerAC_ARG_ENABLE([prof-gcc], 1126*1208bc7eSAndroid Build Coastguard Worker [AS_HELP_STRING([--disable-prof-gcc], 1127*1208bc7eSAndroid Build Coastguard Worker [Do not use gcc intrinsics for backtracing])], 1128*1208bc7eSAndroid Build Coastguard Worker[if test "x$enable_prof_gcc" = "xno" ; then 1129*1208bc7eSAndroid Build Coastguard Worker enable_prof_gcc="0" 1130*1208bc7eSAndroid Build Coastguard Workerelse 1131*1208bc7eSAndroid Build Coastguard Worker enable_prof_gcc="1" 1132*1208bc7eSAndroid Build Coastguard Workerfi 1133*1208bc7eSAndroid Build Coastguard Worker], 1134*1208bc7eSAndroid Build Coastguard Worker[enable_prof_gcc="1"] 1135*1208bc7eSAndroid Build Coastguard Worker) 1136*1208bc7eSAndroid Build Coastguard Workerif test "x$backtrace_method" = "x" -a "x$enable_prof_gcc" = "x1" \ 1137*1208bc7eSAndroid Build Coastguard Worker -a "x$GCC" = "xyes" ; then 1138*1208bc7eSAndroid Build Coastguard Worker JE_CFLAGS_ADD([-fno-omit-frame-pointer]) 1139*1208bc7eSAndroid Build Coastguard Worker backtrace_method="gcc intrinsics" 1140*1208bc7eSAndroid Build Coastguard Worker AC_DEFINE([JEMALLOC_PROF_GCC], [ ]) 1141*1208bc7eSAndroid Build Coastguard Workerelse 1142*1208bc7eSAndroid Build Coastguard Worker enable_prof_gcc="0" 1143*1208bc7eSAndroid Build Coastguard Workerfi 1144*1208bc7eSAndroid Build Coastguard Worker 1145*1208bc7eSAndroid Build Coastguard Workerif test "x$backtrace_method" = "x" ; then 1146*1208bc7eSAndroid Build Coastguard Worker backtrace_method="none (disabling profiling)" 1147*1208bc7eSAndroid Build Coastguard Worker enable_prof="0" 1148*1208bc7eSAndroid Build Coastguard Workerfi 1149*1208bc7eSAndroid Build Coastguard WorkerAC_MSG_CHECKING([configured backtracing method]) 1150*1208bc7eSAndroid Build Coastguard WorkerAC_MSG_RESULT([$backtrace_method]) 1151*1208bc7eSAndroid Build Coastguard Workerif test "x$enable_prof" = "x1" ; then 1152*1208bc7eSAndroid Build Coastguard Worker dnl Heap profiling uses the log(3) function. 1153*1208bc7eSAndroid Build Coastguard Worker JE_APPEND_VS(LIBS, $LM) 1154*1208bc7eSAndroid Build Coastguard Worker 1155*1208bc7eSAndroid Build Coastguard Worker AC_DEFINE([JEMALLOC_PROF], [ ]) 1156*1208bc7eSAndroid Build Coastguard Workerfi 1157*1208bc7eSAndroid Build Coastguard WorkerAC_SUBST([enable_prof]) 1158*1208bc7eSAndroid Build Coastguard Worker 1159*1208bc7eSAndroid Build Coastguard Workerdnl Indicate whether adjacent virtual memory mappings automatically coalesce 1160*1208bc7eSAndroid Build Coastguard Workerdnl (and fragment on demand). 1161*1208bc7eSAndroid Build Coastguard Workerif test "x${maps_coalesce}" = "x1" ; then 1162*1208bc7eSAndroid Build Coastguard Worker AC_DEFINE([JEMALLOC_MAPS_COALESCE], [ ]) 1163*1208bc7eSAndroid Build Coastguard Workerfi 1164*1208bc7eSAndroid Build Coastguard Worker 1165*1208bc7eSAndroid Build Coastguard Workerdnl Indicate whether to retain memory (rather than using munmap()) by default. 1166*1208bc7eSAndroid Build Coastguard Workerif test "x$default_retain" = "x1" ; then 1167*1208bc7eSAndroid Build Coastguard Worker AC_DEFINE([JEMALLOC_RETAIN], [ ]) 1168*1208bc7eSAndroid Build Coastguard Workerfi 1169*1208bc7eSAndroid Build Coastguard Worker 1170*1208bc7eSAndroid Build Coastguard Workerdnl Enable allocation from DSS if supported by the OS. 1171*1208bc7eSAndroid Build Coastguard Workerhave_dss="1" 1172*1208bc7eSAndroid Build Coastguard Workerdnl Check whether the BSD/SUSv1 sbrk() exists. If not, disable DSS support. 1173*1208bc7eSAndroid Build Coastguard WorkerAC_CHECK_FUNC([sbrk], [have_sbrk="1"], [have_sbrk="0"]) 1174*1208bc7eSAndroid Build Coastguard Workerif test "x$have_sbrk" = "x1" ; then 1175*1208bc7eSAndroid Build Coastguard Worker if test "x$sbrk_deprecated" = "x1" ; then 1176*1208bc7eSAndroid Build Coastguard Worker AC_MSG_RESULT([Disabling dss allocation because sbrk is deprecated]) 1177*1208bc7eSAndroid Build Coastguard Worker have_dss="0" 1178*1208bc7eSAndroid Build Coastguard Worker fi 1179*1208bc7eSAndroid Build Coastguard Workerelse 1180*1208bc7eSAndroid Build Coastguard Worker have_dss="0" 1181*1208bc7eSAndroid Build Coastguard Workerfi 1182*1208bc7eSAndroid Build Coastguard Worker 1183*1208bc7eSAndroid Build Coastguard Workerif test "x$have_dss" = "x1" ; then 1184*1208bc7eSAndroid Build Coastguard Worker AC_DEFINE([JEMALLOC_DSS], [ ]) 1185*1208bc7eSAndroid Build Coastguard Workerfi 1186*1208bc7eSAndroid Build Coastguard Worker 1187*1208bc7eSAndroid Build Coastguard Workerdnl Support the junk/zero filling option by default. 1188*1208bc7eSAndroid Build Coastguard WorkerAC_ARG_ENABLE([fill], 1189*1208bc7eSAndroid Build Coastguard Worker [AS_HELP_STRING([--disable-fill], [Disable support for junk/zero filling])], 1190*1208bc7eSAndroid Build Coastguard Worker[if test "x$enable_fill" = "xno" ; then 1191*1208bc7eSAndroid Build Coastguard Worker enable_fill="0" 1192*1208bc7eSAndroid Build Coastguard Workerelse 1193*1208bc7eSAndroid Build Coastguard Worker enable_fill="1" 1194*1208bc7eSAndroid Build Coastguard Workerfi 1195*1208bc7eSAndroid Build Coastguard Worker], 1196*1208bc7eSAndroid Build Coastguard Worker[enable_fill="1"] 1197*1208bc7eSAndroid Build Coastguard Worker) 1198*1208bc7eSAndroid Build Coastguard Workerif test "x$enable_fill" = "x1" ; then 1199*1208bc7eSAndroid Build Coastguard Worker AC_DEFINE([JEMALLOC_FILL], [ ]) 1200*1208bc7eSAndroid Build Coastguard Workerfi 1201*1208bc7eSAndroid Build Coastguard WorkerAC_SUBST([enable_fill]) 1202*1208bc7eSAndroid Build Coastguard Worker 1203*1208bc7eSAndroid Build Coastguard Workerdnl Disable utrace(2)-based tracing by default. 1204*1208bc7eSAndroid Build Coastguard WorkerAC_ARG_ENABLE([utrace], 1205*1208bc7eSAndroid Build Coastguard Worker [AS_HELP_STRING([--enable-utrace], [Enable utrace(2)-based tracing])], 1206*1208bc7eSAndroid Build Coastguard Worker[if test "x$enable_utrace" = "xno" ; then 1207*1208bc7eSAndroid Build Coastguard Worker enable_utrace="0" 1208*1208bc7eSAndroid Build Coastguard Workerelse 1209*1208bc7eSAndroid Build Coastguard Worker enable_utrace="1" 1210*1208bc7eSAndroid Build Coastguard Workerfi 1211*1208bc7eSAndroid Build Coastguard Worker], 1212*1208bc7eSAndroid Build Coastguard Worker[enable_utrace="0"] 1213*1208bc7eSAndroid Build Coastguard Worker) 1214*1208bc7eSAndroid Build Coastguard WorkerJE_COMPILABLE([utrace(2)], [ 1215*1208bc7eSAndroid Build Coastguard Worker#include <sys/types.h> 1216*1208bc7eSAndroid Build Coastguard Worker#include <sys/param.h> 1217*1208bc7eSAndroid Build Coastguard Worker#include <sys/time.h> 1218*1208bc7eSAndroid Build Coastguard Worker#include <sys/uio.h> 1219*1208bc7eSAndroid Build Coastguard Worker#include <sys/ktrace.h> 1220*1208bc7eSAndroid Build Coastguard Worker], [ 1221*1208bc7eSAndroid Build Coastguard Worker utrace((void *)0, 0); 1222*1208bc7eSAndroid Build Coastguard Worker], [je_cv_utrace]) 1223*1208bc7eSAndroid Build Coastguard Workerif test "x${je_cv_utrace}" = "xno" ; then 1224*1208bc7eSAndroid Build Coastguard Worker enable_utrace="0" 1225*1208bc7eSAndroid Build Coastguard Workerfi 1226*1208bc7eSAndroid Build Coastguard Workerif test "x$enable_utrace" = "x1" ; then 1227*1208bc7eSAndroid Build Coastguard Worker AC_DEFINE([JEMALLOC_UTRACE], [ ]) 1228*1208bc7eSAndroid Build Coastguard Workerfi 1229*1208bc7eSAndroid Build Coastguard WorkerAC_SUBST([enable_utrace]) 1230*1208bc7eSAndroid Build Coastguard Worker 1231*1208bc7eSAndroid Build Coastguard Workerdnl Do not support the xmalloc option by default. 1232*1208bc7eSAndroid Build Coastguard WorkerAC_ARG_ENABLE([xmalloc], 1233*1208bc7eSAndroid Build Coastguard Worker [AS_HELP_STRING([--enable-xmalloc], [Support xmalloc option])], 1234*1208bc7eSAndroid Build Coastguard Worker[if test "x$enable_xmalloc" = "xno" ; then 1235*1208bc7eSAndroid Build Coastguard Worker enable_xmalloc="0" 1236*1208bc7eSAndroid Build Coastguard Workerelse 1237*1208bc7eSAndroid Build Coastguard Worker enable_xmalloc="1" 1238*1208bc7eSAndroid Build Coastguard Workerfi 1239*1208bc7eSAndroid Build Coastguard Worker], 1240*1208bc7eSAndroid Build Coastguard Worker[enable_xmalloc="0"] 1241*1208bc7eSAndroid Build Coastguard Worker) 1242*1208bc7eSAndroid Build Coastguard Workerif test "x$enable_xmalloc" = "x1" ; then 1243*1208bc7eSAndroid Build Coastguard Worker AC_DEFINE([JEMALLOC_XMALLOC], [ ]) 1244*1208bc7eSAndroid Build Coastguard Workerfi 1245*1208bc7eSAndroid Build Coastguard WorkerAC_SUBST([enable_xmalloc]) 1246*1208bc7eSAndroid Build Coastguard Worker 1247*1208bc7eSAndroid Build Coastguard Workerdnl Support cache-oblivious allocation alignment by default. 1248*1208bc7eSAndroid Build Coastguard WorkerAC_ARG_ENABLE([cache-oblivious], 1249*1208bc7eSAndroid Build Coastguard Worker [AS_HELP_STRING([--disable-cache-oblivious], 1250*1208bc7eSAndroid Build Coastguard Worker [Disable support for cache-oblivious allocation alignment])], 1251*1208bc7eSAndroid Build Coastguard Worker[if test "x$enable_cache_oblivious" = "xno" ; then 1252*1208bc7eSAndroid Build Coastguard Worker enable_cache_oblivious="0" 1253*1208bc7eSAndroid Build Coastguard Workerelse 1254*1208bc7eSAndroid Build Coastguard Worker enable_cache_oblivious="1" 1255*1208bc7eSAndroid Build Coastguard Workerfi 1256*1208bc7eSAndroid Build Coastguard Worker], 1257*1208bc7eSAndroid Build Coastguard Worker[enable_cache_oblivious="1"] 1258*1208bc7eSAndroid Build Coastguard Worker) 1259*1208bc7eSAndroid Build Coastguard Workerif test "x$enable_cache_oblivious" = "x1" ; then 1260*1208bc7eSAndroid Build Coastguard Worker AC_DEFINE([JEMALLOC_CACHE_OBLIVIOUS], [ ]) 1261*1208bc7eSAndroid Build Coastguard Workerfi 1262*1208bc7eSAndroid Build Coastguard WorkerAC_SUBST([enable_cache_oblivious]) 1263*1208bc7eSAndroid Build Coastguard Worker 1264*1208bc7eSAndroid Build Coastguard Workerdnl Do not log by default. 1265*1208bc7eSAndroid Build Coastguard WorkerAC_ARG_ENABLE([log], 1266*1208bc7eSAndroid Build Coastguard Worker [AS_HELP_STRING([--enable-log], [Support debug logging])], 1267*1208bc7eSAndroid Build Coastguard Worker[if test "x$enable_log" = "xno" ; then 1268*1208bc7eSAndroid Build Coastguard Worker enable_log="0" 1269*1208bc7eSAndroid Build Coastguard Workerelse 1270*1208bc7eSAndroid Build Coastguard Worker enable_log="1" 1271*1208bc7eSAndroid Build Coastguard Workerfi 1272*1208bc7eSAndroid Build Coastguard Worker], 1273*1208bc7eSAndroid Build Coastguard Worker[enable_log="0"] 1274*1208bc7eSAndroid Build Coastguard Worker) 1275*1208bc7eSAndroid Build Coastguard Workerif test "x$enable_log" = "x1" ; then 1276*1208bc7eSAndroid Build Coastguard Worker AC_DEFINE([JEMALLOC_LOG], [ ]) 1277*1208bc7eSAndroid Build Coastguard Workerfi 1278*1208bc7eSAndroid Build Coastguard WorkerAC_SUBST([enable_log]) 1279*1208bc7eSAndroid Build Coastguard Worker 1280*1208bc7eSAndroid Build Coastguard Worker 1281*1208bc7eSAndroid Build Coastguard WorkerJE_COMPILABLE([a program using __builtin_unreachable], [ 1282*1208bc7eSAndroid Build Coastguard Workervoid foo (void) { 1283*1208bc7eSAndroid Build Coastguard Worker __builtin_unreachable(); 1284*1208bc7eSAndroid Build Coastguard Worker} 1285*1208bc7eSAndroid Build Coastguard Worker], [ 1286*1208bc7eSAndroid Build Coastguard Worker { 1287*1208bc7eSAndroid Build Coastguard Worker foo(); 1288*1208bc7eSAndroid Build Coastguard Worker } 1289*1208bc7eSAndroid Build Coastguard Worker], [je_cv_gcc_builtin_unreachable]) 1290*1208bc7eSAndroid Build Coastguard Workerif test "x${je_cv_gcc_builtin_unreachable}" = "xyes" ; then 1291*1208bc7eSAndroid Build Coastguard Worker AC_DEFINE([JEMALLOC_INTERNAL_UNREACHABLE], [__builtin_unreachable]) 1292*1208bc7eSAndroid Build Coastguard Workerelse 1293*1208bc7eSAndroid Build Coastguard Worker AC_DEFINE([JEMALLOC_INTERNAL_UNREACHABLE], [abort]) 1294*1208bc7eSAndroid Build Coastguard Workerfi 1295*1208bc7eSAndroid Build Coastguard Worker 1296*1208bc7eSAndroid Build Coastguard Workerdnl ============================================================================ 1297*1208bc7eSAndroid Build Coastguard Workerdnl Check for __builtin_ffsl(), then ffsl(3), and fail if neither are found. 1298*1208bc7eSAndroid Build Coastguard Workerdnl One of those two functions should (theoretically) exist on all platforms 1299*1208bc7eSAndroid Build Coastguard Workerdnl that jemalloc currently has a chance of functioning on without modification. 1300*1208bc7eSAndroid Build Coastguard Workerdnl We additionally assume ffs[ll]() or __builtin_ffs[ll]() are defined if 1301*1208bc7eSAndroid Build Coastguard Workerdnl ffsl() or __builtin_ffsl() are defined, respectively. 1302*1208bc7eSAndroid Build Coastguard WorkerJE_COMPILABLE([a program using __builtin_ffsl], [ 1303*1208bc7eSAndroid Build Coastguard Worker#include <stdio.h> 1304*1208bc7eSAndroid Build Coastguard Worker#include <strings.h> 1305*1208bc7eSAndroid Build Coastguard Worker#include <string.h> 1306*1208bc7eSAndroid Build Coastguard Worker], [ 1307*1208bc7eSAndroid Build Coastguard Worker { 1308*1208bc7eSAndroid Build Coastguard Worker int rv = __builtin_ffsl(0x08); 1309*1208bc7eSAndroid Build Coastguard Worker printf("%d\n", rv); 1310*1208bc7eSAndroid Build Coastguard Worker } 1311*1208bc7eSAndroid Build Coastguard Worker], [je_cv_gcc_builtin_ffsl]) 1312*1208bc7eSAndroid Build Coastguard Workerif test "x${je_cv_gcc_builtin_ffsl}" = "xyes" ; then 1313*1208bc7eSAndroid Build Coastguard Worker AC_DEFINE([JEMALLOC_INTERNAL_FFSLL], [__builtin_ffsll]) 1314*1208bc7eSAndroid Build Coastguard Worker AC_DEFINE([JEMALLOC_INTERNAL_FFSL], [__builtin_ffsl]) 1315*1208bc7eSAndroid Build Coastguard Worker AC_DEFINE([JEMALLOC_INTERNAL_FFS], [__builtin_ffs]) 1316*1208bc7eSAndroid Build Coastguard Workerelse 1317*1208bc7eSAndroid Build Coastguard Worker JE_COMPILABLE([a program using ffsl], [ 1318*1208bc7eSAndroid Build Coastguard Worker #include <stdio.h> 1319*1208bc7eSAndroid Build Coastguard Worker #include <strings.h> 1320*1208bc7eSAndroid Build Coastguard Worker #include <string.h> 1321*1208bc7eSAndroid Build Coastguard Worker ], [ 1322*1208bc7eSAndroid Build Coastguard Worker { 1323*1208bc7eSAndroid Build Coastguard Worker int rv = ffsl(0x08); 1324*1208bc7eSAndroid Build Coastguard Worker printf("%d\n", rv); 1325*1208bc7eSAndroid Build Coastguard Worker } 1326*1208bc7eSAndroid Build Coastguard Worker ], [je_cv_function_ffsl]) 1327*1208bc7eSAndroid Build Coastguard Worker if test "x${je_cv_function_ffsl}" = "xyes" ; then 1328*1208bc7eSAndroid Build Coastguard Worker AC_DEFINE([JEMALLOC_INTERNAL_FFSLL], [ffsll]) 1329*1208bc7eSAndroid Build Coastguard Worker AC_DEFINE([JEMALLOC_INTERNAL_FFSL], [ffsl]) 1330*1208bc7eSAndroid Build Coastguard Worker AC_DEFINE([JEMALLOC_INTERNAL_FFS], [ffs]) 1331*1208bc7eSAndroid Build Coastguard Worker else 1332*1208bc7eSAndroid Build Coastguard Worker AC_MSG_ERROR([Cannot build without ffsl(3) or __builtin_ffsl()]) 1333*1208bc7eSAndroid Build Coastguard Worker fi 1334*1208bc7eSAndroid Build Coastguard Workerfi 1335*1208bc7eSAndroid Build Coastguard Worker 1336*1208bc7eSAndroid Build Coastguard WorkerAC_ARG_WITH([lg_quantum], 1337*1208bc7eSAndroid Build Coastguard Worker [AS_HELP_STRING([--with-lg-quantum=<lg-quantum>], 1338*1208bc7eSAndroid Build Coastguard Worker [Base 2 log of minimum allocation alignment])], 1339*1208bc7eSAndroid Build Coastguard Worker [LG_QUANTA="$with_lg_quantum"], 1340*1208bc7eSAndroid Build Coastguard Worker [LG_QUANTA="3 4"]) 1341*1208bc7eSAndroid Build Coastguard Workerif test "x$with_lg_quantum" != "x" ; then 1342*1208bc7eSAndroid Build Coastguard Worker AC_DEFINE_UNQUOTED([LG_QUANTUM], [$with_lg_quantum]) 1343*1208bc7eSAndroid Build Coastguard Workerfi 1344*1208bc7eSAndroid Build Coastguard Worker 1345*1208bc7eSAndroid Build Coastguard WorkerAC_ARG_WITH([lg_page], 1346*1208bc7eSAndroid Build Coastguard Worker [AS_HELP_STRING([--with-lg-page=<lg-page>], [Base 2 log of system page size])], 1347*1208bc7eSAndroid Build Coastguard Worker [LG_PAGE="$with_lg_page"], [LG_PAGE="detect"]) 1348*1208bc7eSAndroid Build Coastguard Workerif test "x$LG_PAGE" = "xdetect"; then 1349*1208bc7eSAndroid Build Coastguard Worker AC_CACHE_CHECK([LG_PAGE], 1350*1208bc7eSAndroid Build Coastguard Worker [je_cv_lg_page], 1351*1208bc7eSAndroid Build Coastguard Worker AC_RUN_IFELSE([AC_LANG_PROGRAM( 1352*1208bc7eSAndroid Build Coastguard Worker[[ 1353*1208bc7eSAndroid Build Coastguard Worker#include <strings.h> 1354*1208bc7eSAndroid Build Coastguard Worker#ifdef _WIN32 1355*1208bc7eSAndroid Build Coastguard Worker#include <windows.h> 1356*1208bc7eSAndroid Build Coastguard Worker#else 1357*1208bc7eSAndroid Build Coastguard Worker#include <unistd.h> 1358*1208bc7eSAndroid Build Coastguard Worker#endif 1359*1208bc7eSAndroid Build Coastguard Worker#include <stdio.h> 1360*1208bc7eSAndroid Build Coastguard Worker]], 1361*1208bc7eSAndroid Build Coastguard Worker[[ 1362*1208bc7eSAndroid Build Coastguard Worker int result; 1363*1208bc7eSAndroid Build Coastguard Worker FILE *f; 1364*1208bc7eSAndroid Build Coastguard Worker 1365*1208bc7eSAndroid Build Coastguard Worker#ifdef _WIN32 1366*1208bc7eSAndroid Build Coastguard Worker SYSTEM_INFO si; 1367*1208bc7eSAndroid Build Coastguard Worker GetSystemInfo(&si); 1368*1208bc7eSAndroid Build Coastguard Worker result = si.dwPageSize; 1369*1208bc7eSAndroid Build Coastguard Worker#else 1370*1208bc7eSAndroid Build Coastguard Worker result = sysconf(_SC_PAGESIZE); 1371*1208bc7eSAndroid Build Coastguard Worker#endif 1372*1208bc7eSAndroid Build Coastguard Worker if (result == -1) { 1373*1208bc7eSAndroid Build Coastguard Worker return 1; 1374*1208bc7eSAndroid Build Coastguard Worker } 1375*1208bc7eSAndroid Build Coastguard Worker result = JEMALLOC_INTERNAL_FFSL(result) - 1; 1376*1208bc7eSAndroid Build Coastguard Worker 1377*1208bc7eSAndroid Build Coastguard Worker f = fopen("conftest.out", "w"); 1378*1208bc7eSAndroid Build Coastguard Worker if (f == NULL) { 1379*1208bc7eSAndroid Build Coastguard Worker return 1; 1380*1208bc7eSAndroid Build Coastguard Worker } 1381*1208bc7eSAndroid Build Coastguard Worker fprintf(f, "%d", result); 1382*1208bc7eSAndroid Build Coastguard Worker fclose(f); 1383*1208bc7eSAndroid Build Coastguard Worker 1384*1208bc7eSAndroid Build Coastguard Worker return 0; 1385*1208bc7eSAndroid Build Coastguard Worker]])], 1386*1208bc7eSAndroid Build Coastguard Worker [je_cv_lg_page=`cat conftest.out`], 1387*1208bc7eSAndroid Build Coastguard Worker [je_cv_lg_page=undefined], 1388*1208bc7eSAndroid Build Coastguard Worker [je_cv_lg_page=12])) 1389*1208bc7eSAndroid Build Coastguard Workerfi 1390*1208bc7eSAndroid Build Coastguard Workerif test "x${je_cv_lg_page}" != "x" ; then 1391*1208bc7eSAndroid Build Coastguard Worker LG_PAGE="${je_cv_lg_page}" 1392*1208bc7eSAndroid Build Coastguard Workerfi 1393*1208bc7eSAndroid Build Coastguard Workerif test "x${LG_PAGE}" != "xundefined" ; then 1394*1208bc7eSAndroid Build Coastguard Worker AC_DEFINE_UNQUOTED([LG_PAGE], [$LG_PAGE]) 1395*1208bc7eSAndroid Build Coastguard Workerelse 1396*1208bc7eSAndroid Build Coastguard Worker AC_MSG_ERROR([cannot determine value for LG_PAGE]) 1397*1208bc7eSAndroid Build Coastguard Workerfi 1398*1208bc7eSAndroid Build Coastguard Worker 1399*1208bc7eSAndroid Build Coastguard WorkerAC_ARG_WITH([lg_hugepage], 1400*1208bc7eSAndroid Build Coastguard Worker [AS_HELP_STRING([--with-lg-hugepage=<lg-hugepage>], 1401*1208bc7eSAndroid Build Coastguard Worker [Base 2 log of system huge page size])], 1402*1208bc7eSAndroid Build Coastguard Worker [je_cv_lg_hugepage="${with_lg_hugepage}"], 1403*1208bc7eSAndroid Build Coastguard Worker [je_cv_lg_hugepage=""]) 1404*1208bc7eSAndroid Build Coastguard Workerif test "x${je_cv_lg_hugepage}" = "x" ; then 1405*1208bc7eSAndroid Build Coastguard Worker dnl Look in /proc/meminfo (Linux-specific) for information on the default huge 1406*1208bc7eSAndroid Build Coastguard Worker dnl page size, if any. The relevant line looks like: 1407*1208bc7eSAndroid Build Coastguard Worker dnl 1408*1208bc7eSAndroid Build Coastguard Worker dnl Hugepagesize: 2048 kB 1409*1208bc7eSAndroid Build Coastguard Worker if test -e "/proc/meminfo" ; then 1410*1208bc7eSAndroid Build Coastguard Worker hpsk=[`cat /proc/meminfo 2>/dev/null | \ 1411*1208bc7eSAndroid Build Coastguard Worker grep -e '^Hugepagesize:[[:space:]]\+[0-9]\+[[:space:]]kB$' | \ 1412*1208bc7eSAndroid Build Coastguard Worker awk '{print $2}'`] 1413*1208bc7eSAndroid Build Coastguard Worker if test "x${hpsk}" != "x" ; then 1414*1208bc7eSAndroid Build Coastguard Worker je_cv_lg_hugepage=10 1415*1208bc7eSAndroid Build Coastguard Worker while test "${hpsk}" -gt 1 ; do 1416*1208bc7eSAndroid Build Coastguard Worker hpsk="$((hpsk / 2))" 1417*1208bc7eSAndroid Build Coastguard Worker je_cv_lg_hugepage="$((je_cv_lg_hugepage + 1))" 1418*1208bc7eSAndroid Build Coastguard Worker done 1419*1208bc7eSAndroid Build Coastguard Worker fi 1420*1208bc7eSAndroid Build Coastguard Worker fi 1421*1208bc7eSAndroid Build Coastguard Worker 1422*1208bc7eSAndroid Build Coastguard Worker dnl Set default if unable to automatically configure. 1423*1208bc7eSAndroid Build Coastguard Worker if test "x${je_cv_lg_hugepage}" = "x" ; then 1424*1208bc7eSAndroid Build Coastguard Worker je_cv_lg_hugepage=21 1425*1208bc7eSAndroid Build Coastguard Worker fi 1426*1208bc7eSAndroid Build Coastguard Workerfi 1427*1208bc7eSAndroid Build Coastguard Workerif test "x${LG_PAGE}" != "xundefined" -a \ 1428*1208bc7eSAndroid Build Coastguard Worker "${je_cv_lg_hugepage}" -lt "${LG_PAGE}" ; then 1429*1208bc7eSAndroid Build Coastguard Worker AC_MSG_ERROR([Huge page size (2^${je_cv_lg_hugepage}) must be at least page size (2^${LG_PAGE})]) 1430*1208bc7eSAndroid Build Coastguard Workerfi 1431*1208bc7eSAndroid Build Coastguard WorkerAC_DEFINE_UNQUOTED([LG_HUGEPAGE], [${je_cv_lg_hugepage}]) 1432*1208bc7eSAndroid Build Coastguard Worker 1433*1208bc7eSAndroid Build Coastguard WorkerAC_ARG_WITH([lg_page_sizes], 1434*1208bc7eSAndroid Build Coastguard Worker [AS_HELP_STRING([--with-lg-page-sizes=<lg-page-sizes>], 1435*1208bc7eSAndroid Build Coastguard Worker [Base 2 logs of system page sizes to support])], 1436*1208bc7eSAndroid Build Coastguard Worker [LG_PAGE_SIZES="$with_lg_page_sizes"], [LG_PAGE_SIZES="$LG_PAGE"]) 1437*1208bc7eSAndroid Build Coastguard Worker 1438*1208bc7eSAndroid Build Coastguard Workerdnl ============================================================================ 1439*1208bc7eSAndroid Build Coastguard Workerdnl jemalloc configuration. 1440*1208bc7eSAndroid Build Coastguard Workerdnl 1441*1208bc7eSAndroid Build Coastguard Worker 1442*1208bc7eSAndroid Build Coastguard WorkerAC_ARG_WITH([version], 1443*1208bc7eSAndroid Build Coastguard Worker [AS_HELP_STRING([--with-version=<major>.<minor>.<bugfix>-<nrev>-g<gid>], 1444*1208bc7eSAndroid Build Coastguard Worker [Version string])], 1445*1208bc7eSAndroid Build Coastguard Worker [ 1446*1208bc7eSAndroid Build Coastguard Worker echo "${with_version}" | grep ['^[0-9]\+\.[0-9]\+\.[0-9]\+-[0-9]\+-g[0-9a-f]\+$'] 2>&1 1>/dev/null 1447*1208bc7eSAndroid Build Coastguard Worker if test $? -eq 0 ; then 1448*1208bc7eSAndroid Build Coastguard Worker echo "$with_version" > "${objroot}VERSION" 1449*1208bc7eSAndroid Build Coastguard Worker else 1450*1208bc7eSAndroid Build Coastguard Worker echo "${with_version}" | grep ['^VERSION$'] 2>&1 1>/dev/null 1451*1208bc7eSAndroid Build Coastguard Worker if test $? -ne 0 ; then 1452*1208bc7eSAndroid Build Coastguard Worker AC_MSG_ERROR([${with_version} does not match <major>.<minor>.<bugfix>-<nrev>-g<gid> or VERSION]) 1453*1208bc7eSAndroid Build Coastguard Worker fi 1454*1208bc7eSAndroid Build Coastguard Worker fi 1455*1208bc7eSAndroid Build Coastguard Worker ], [ 1456*1208bc7eSAndroid Build Coastguard Worker dnl Set VERSION if source directory is inside a git repository. 1457*1208bc7eSAndroid Build Coastguard Worker if test "x`test ! \"${srcroot}\" && cd \"${srcroot}\"; git rev-parse --is-inside-work-tree 2>/dev/null`" = "xtrue" ; then 1458*1208bc7eSAndroid Build Coastguard Worker dnl Pattern globs aren't powerful enough to match both single- and 1459*1208bc7eSAndroid Build Coastguard Worker dnl double-digit version numbers, so iterate over patterns to support up 1460*1208bc7eSAndroid Build Coastguard Worker dnl to version 99.99.99 without any accidental matches. 1461*1208bc7eSAndroid Build Coastguard Worker for pattern in ['[0-9].[0-9].[0-9]' '[0-9].[0-9].[0-9][0-9]' \ 1462*1208bc7eSAndroid Build Coastguard Worker '[0-9].[0-9][0-9].[0-9]' '[0-9].[0-9][0-9].[0-9][0-9]' \ 1463*1208bc7eSAndroid Build Coastguard Worker '[0-9][0-9].[0-9].[0-9]' '[0-9][0-9].[0-9].[0-9][0-9]' \ 1464*1208bc7eSAndroid Build Coastguard Worker '[0-9][0-9].[0-9][0-9].[0-9]' \ 1465*1208bc7eSAndroid Build Coastguard Worker '[0-9][0-9].[0-9][0-9].[0-9][0-9]']; do 1466*1208bc7eSAndroid Build Coastguard Worker (test ! "${srcroot}" && cd "${srcroot}"; git describe --long --abbrev=40 --match="${pattern}") > "${objroot}VERSION.tmp" 2>/dev/null 1467*1208bc7eSAndroid Build Coastguard Worker if test $? -eq 0 ; then 1468*1208bc7eSAndroid Build Coastguard Worker mv "${objroot}VERSION.tmp" "${objroot}VERSION" 1469*1208bc7eSAndroid Build Coastguard Worker break 1470*1208bc7eSAndroid Build Coastguard Worker fi 1471*1208bc7eSAndroid Build Coastguard Worker done 1472*1208bc7eSAndroid Build Coastguard Worker fi 1473*1208bc7eSAndroid Build Coastguard Worker rm -f "${objroot}VERSION.tmp" 1474*1208bc7eSAndroid Build Coastguard Worker ]) 1475*1208bc7eSAndroid Build Coastguard Worker 1476*1208bc7eSAndroid Build Coastguard Workerif test ! -e "${objroot}VERSION" ; then 1477*1208bc7eSAndroid Build Coastguard Worker if test ! -e "${srcroot}VERSION" ; then 1478*1208bc7eSAndroid Build Coastguard Worker AC_MSG_RESULT( 1479*1208bc7eSAndroid Build Coastguard Worker [Missing VERSION file, and unable to generate it; creating bogus VERSION]) 1480*1208bc7eSAndroid Build Coastguard Worker echo "0.0.0-0-g0000000000000000000000000000000000000000" > "${objroot}VERSION" 1481*1208bc7eSAndroid Build Coastguard Worker else 1482*1208bc7eSAndroid Build Coastguard Worker cp ${srcroot}VERSION ${objroot}VERSION 1483*1208bc7eSAndroid Build Coastguard Worker fi 1484*1208bc7eSAndroid Build Coastguard Workerfi 1485*1208bc7eSAndroid Build Coastguard Workerjemalloc_version=`cat "${objroot}VERSION"` 1486*1208bc7eSAndroid Build Coastguard Workerjemalloc_version_major=`echo ${jemalloc_version} | tr ".g-" " " | awk '{print [$]1}'` 1487*1208bc7eSAndroid Build Coastguard Workerjemalloc_version_minor=`echo ${jemalloc_version} | tr ".g-" " " | awk '{print [$]2}'` 1488*1208bc7eSAndroid Build Coastguard Workerjemalloc_version_bugfix=`echo ${jemalloc_version} | tr ".g-" " " | awk '{print [$]3}'` 1489*1208bc7eSAndroid Build Coastguard Workerjemalloc_version_nrev=`echo ${jemalloc_version} | tr ".g-" " " | awk '{print [$]4}'` 1490*1208bc7eSAndroid Build Coastguard Workerjemalloc_version_gid=`echo ${jemalloc_version} | tr ".g-" " " | awk '{print [$]5}'` 1491*1208bc7eSAndroid Build Coastguard WorkerAC_SUBST([jemalloc_version]) 1492*1208bc7eSAndroid Build Coastguard WorkerAC_SUBST([jemalloc_version_major]) 1493*1208bc7eSAndroid Build Coastguard WorkerAC_SUBST([jemalloc_version_minor]) 1494*1208bc7eSAndroid Build Coastguard WorkerAC_SUBST([jemalloc_version_bugfix]) 1495*1208bc7eSAndroid Build Coastguard WorkerAC_SUBST([jemalloc_version_nrev]) 1496*1208bc7eSAndroid Build Coastguard WorkerAC_SUBST([jemalloc_version_gid]) 1497*1208bc7eSAndroid Build Coastguard Worker 1498*1208bc7eSAndroid Build Coastguard Workerdnl ============================================================================ 1499*1208bc7eSAndroid Build Coastguard Workerdnl Configure pthreads. 1500*1208bc7eSAndroid Build Coastguard Worker 1501*1208bc7eSAndroid Build Coastguard Workerif test "x$abi" != "xpecoff" ; then 1502*1208bc7eSAndroid Build Coastguard Worker AC_DEFINE([JEMALLOC_HAVE_PTHREAD], [ ]) 1503*1208bc7eSAndroid Build Coastguard Worker AC_CHECK_HEADERS([pthread.h], , [AC_MSG_ERROR([pthread.h is missing])]) 1504*1208bc7eSAndroid Build Coastguard Worker dnl Some systems may embed pthreads functionality in libc; check for libpthread 1505*1208bc7eSAndroid Build Coastguard Worker dnl first, but try libc too before failing. 1506*1208bc7eSAndroid Build Coastguard Worker AC_CHECK_LIB([pthread], [pthread_create], [JE_APPEND_VS(LIBS, -lpthread)], 1507*1208bc7eSAndroid Build Coastguard Worker [AC_SEARCH_LIBS([pthread_create], , , 1508*1208bc7eSAndroid Build Coastguard Worker AC_MSG_ERROR([libpthread is missing]))]) 1509*1208bc7eSAndroid Build Coastguard Worker wrap_syms="${wrap_syms} pthread_create" 1510*1208bc7eSAndroid Build Coastguard Worker have_pthread="1" 1511*1208bc7eSAndroid Build Coastguard Worker dnl Check if we have dlsym support. 1512*1208bc7eSAndroid Build Coastguard Worker have_dlsym="1" 1513*1208bc7eSAndroid Build Coastguard Worker AC_CHECK_HEADERS([dlfcn.h], 1514*1208bc7eSAndroid Build Coastguard Worker AC_CHECK_FUNC([dlsym], [], 1515*1208bc7eSAndroid Build Coastguard Worker [AC_CHECK_LIB([dl], [dlsym], [LIBS="$LIBS -ldl"], [have_dlsym="0"])]), 1516*1208bc7eSAndroid Build Coastguard Worker [have_dlsym="0"]) 1517*1208bc7eSAndroid Build Coastguard Worker if test "x$have_dlsym" = "x1" ; then 1518*1208bc7eSAndroid Build Coastguard Worker AC_DEFINE([JEMALLOC_HAVE_DLSYM], [ ]) 1519*1208bc7eSAndroid Build Coastguard Worker fi 1520*1208bc7eSAndroid Build Coastguard Worker JE_COMPILABLE([pthread_atfork(3)], [ 1521*1208bc7eSAndroid Build Coastguard Worker#include <pthread.h> 1522*1208bc7eSAndroid Build Coastguard Worker], [ 1523*1208bc7eSAndroid Build Coastguard Worker pthread_atfork((void *)0, (void *)0, (void *)0); 1524*1208bc7eSAndroid Build Coastguard Worker], [je_cv_pthread_atfork]) 1525*1208bc7eSAndroid Build Coastguard Worker if test "x${je_cv_pthread_atfork}" = "xyes" ; then 1526*1208bc7eSAndroid Build Coastguard Worker AC_DEFINE([JEMALLOC_HAVE_PTHREAD_ATFORK], [ ]) 1527*1208bc7eSAndroid Build Coastguard Worker fi 1528*1208bc7eSAndroid Build Coastguard Worker dnl Check if pthread_setname_np is available with the expected API. 1529*1208bc7eSAndroid Build Coastguard Worker JE_COMPILABLE([pthread_setname_np(3)], [ 1530*1208bc7eSAndroid Build Coastguard Worker#include <pthread.h> 1531*1208bc7eSAndroid Build Coastguard Worker], [ 1532*1208bc7eSAndroid Build Coastguard Worker pthread_setname_np(pthread_self(), "setname_test"); 1533*1208bc7eSAndroid Build Coastguard Worker], [je_cv_pthread_setname_np]) 1534*1208bc7eSAndroid Build Coastguard Worker if test "x${je_cv_pthread_setname_np}" = "xyes" ; then 1535*1208bc7eSAndroid Build Coastguard Worker AC_DEFINE([JEMALLOC_HAVE_PTHREAD_SETNAME_NP], [ ]) 1536*1208bc7eSAndroid Build Coastguard Worker fi 1537*1208bc7eSAndroid Build Coastguard Workerfi 1538*1208bc7eSAndroid Build Coastguard Worker 1539*1208bc7eSAndroid Build Coastguard WorkerJE_APPEND_VS(CPPFLAGS, -D_REENTRANT) 1540*1208bc7eSAndroid Build Coastguard Worker 1541*1208bc7eSAndroid Build Coastguard Workerdnl Check whether clock_gettime(2) is in libc or librt. 1542*1208bc7eSAndroid Build Coastguard WorkerAC_SEARCH_LIBS([clock_gettime], [rt]) 1543*1208bc7eSAndroid Build Coastguard Worker 1544*1208bc7eSAndroid Build Coastguard Workerdnl Cray wrapper compiler often adds `-lrt` when using `-static`. Check with 1545*1208bc7eSAndroid Build Coastguard Workerdnl `-dynamic` as well in case a user tries to dynamically link in jemalloc 1546*1208bc7eSAndroid Build Coastguard Workerif test "x$je_cv_cray_prgenv_wrapper" = "xyes" ; then 1547*1208bc7eSAndroid Build Coastguard Worker if test "$ac_cv_search_clock_gettime" != "-lrt"; then 1548*1208bc7eSAndroid Build Coastguard Worker JE_CFLAGS_SAVE() 1549*1208bc7eSAndroid Build Coastguard Worker 1550*1208bc7eSAndroid Build Coastguard Worker unset ac_cv_search_clock_gettime 1551*1208bc7eSAndroid Build Coastguard Worker JE_CFLAGS_ADD([-dynamic]) 1552*1208bc7eSAndroid Build Coastguard Worker AC_SEARCH_LIBS([clock_gettime], [rt]) 1553*1208bc7eSAndroid Build Coastguard Worker 1554*1208bc7eSAndroid Build Coastguard Worker JE_CFLAGS_RESTORE() 1555*1208bc7eSAndroid Build Coastguard Worker fi 1556*1208bc7eSAndroid Build Coastguard Workerfi 1557*1208bc7eSAndroid Build Coastguard Worker 1558*1208bc7eSAndroid Build Coastguard Workerdnl check for CLOCK_MONOTONIC_COARSE (Linux-specific). 1559*1208bc7eSAndroid Build Coastguard WorkerJE_COMPILABLE([clock_gettime(CLOCK_MONOTONIC_COARSE, ...)], [ 1560*1208bc7eSAndroid Build Coastguard Worker#include <time.h> 1561*1208bc7eSAndroid Build Coastguard Worker], [ 1562*1208bc7eSAndroid Build Coastguard Worker struct timespec ts; 1563*1208bc7eSAndroid Build Coastguard Worker 1564*1208bc7eSAndroid Build Coastguard Worker clock_gettime(CLOCK_MONOTONIC_COARSE, &ts); 1565*1208bc7eSAndroid Build Coastguard Worker], [je_cv_clock_monotonic_coarse]) 1566*1208bc7eSAndroid Build Coastguard Workerif test "x${je_cv_clock_monotonic_coarse}" = "xyes" ; then 1567*1208bc7eSAndroid Build Coastguard Worker AC_DEFINE([JEMALLOC_HAVE_CLOCK_MONOTONIC_COARSE]) 1568*1208bc7eSAndroid Build Coastguard Workerfi 1569*1208bc7eSAndroid Build Coastguard Worker 1570*1208bc7eSAndroid Build Coastguard Workerdnl check for CLOCK_MONOTONIC. 1571*1208bc7eSAndroid Build Coastguard WorkerJE_COMPILABLE([clock_gettime(CLOCK_MONOTONIC, ...)], [ 1572*1208bc7eSAndroid Build Coastguard Worker#include <unistd.h> 1573*1208bc7eSAndroid Build Coastguard Worker#include <time.h> 1574*1208bc7eSAndroid Build Coastguard Worker], [ 1575*1208bc7eSAndroid Build Coastguard Worker struct timespec ts; 1576*1208bc7eSAndroid Build Coastguard Worker 1577*1208bc7eSAndroid Build Coastguard Worker clock_gettime(CLOCK_MONOTONIC, &ts); 1578*1208bc7eSAndroid Build Coastguard Worker#if !defined(_POSIX_MONOTONIC_CLOCK) || _POSIX_MONOTONIC_CLOCK < 0 1579*1208bc7eSAndroid Build Coastguard Worker# error _POSIX_MONOTONIC_CLOCK missing/invalid 1580*1208bc7eSAndroid Build Coastguard Worker#endif 1581*1208bc7eSAndroid Build Coastguard Worker], [je_cv_clock_monotonic]) 1582*1208bc7eSAndroid Build Coastguard Workerif test "x${je_cv_clock_monotonic}" = "xyes" ; then 1583*1208bc7eSAndroid Build Coastguard Worker AC_DEFINE([JEMALLOC_HAVE_CLOCK_MONOTONIC]) 1584*1208bc7eSAndroid Build Coastguard Workerfi 1585*1208bc7eSAndroid Build Coastguard Worker 1586*1208bc7eSAndroid Build Coastguard Workerdnl Check for mach_absolute_time(). 1587*1208bc7eSAndroid Build Coastguard WorkerJE_COMPILABLE([mach_absolute_time()], [ 1588*1208bc7eSAndroid Build Coastguard Worker#include <mach/mach_time.h> 1589*1208bc7eSAndroid Build Coastguard Worker], [ 1590*1208bc7eSAndroid Build Coastguard Worker mach_absolute_time(); 1591*1208bc7eSAndroid Build Coastguard Worker], [je_cv_mach_absolute_time]) 1592*1208bc7eSAndroid Build Coastguard Workerif test "x${je_cv_mach_absolute_time}" = "xyes" ; then 1593*1208bc7eSAndroid Build Coastguard Worker AC_DEFINE([JEMALLOC_HAVE_MACH_ABSOLUTE_TIME]) 1594*1208bc7eSAndroid Build Coastguard Workerfi 1595*1208bc7eSAndroid Build Coastguard Worker 1596*1208bc7eSAndroid Build Coastguard Workerdnl Use syscall(2) (if available) by default. 1597*1208bc7eSAndroid Build Coastguard WorkerAC_ARG_ENABLE([syscall], 1598*1208bc7eSAndroid Build Coastguard Worker [AS_HELP_STRING([--disable-syscall], [Disable use of syscall(2)])], 1599*1208bc7eSAndroid Build Coastguard Worker[if test "x$enable_syscall" = "xno" ; then 1600*1208bc7eSAndroid Build Coastguard Worker enable_syscall="0" 1601*1208bc7eSAndroid Build Coastguard Workerelse 1602*1208bc7eSAndroid Build Coastguard Worker enable_syscall="1" 1603*1208bc7eSAndroid Build Coastguard Workerfi 1604*1208bc7eSAndroid Build Coastguard Worker], 1605*1208bc7eSAndroid Build Coastguard Worker[enable_syscall="1"] 1606*1208bc7eSAndroid Build Coastguard Worker) 1607*1208bc7eSAndroid Build Coastguard Workerif test "x$enable_syscall" = "x1" ; then 1608*1208bc7eSAndroid Build Coastguard Worker dnl Check if syscall(2) is usable. Treat warnings as errors, so that e.g. OS 1609*1208bc7eSAndroid Build Coastguard Worker dnl X 10.12's deprecation warning prevents use. 1610*1208bc7eSAndroid Build Coastguard Worker JE_CFLAGS_SAVE() 1611*1208bc7eSAndroid Build Coastguard Worker JE_CFLAGS_ADD([-Werror]) 1612*1208bc7eSAndroid Build Coastguard Worker JE_COMPILABLE([syscall(2)], [ 1613*1208bc7eSAndroid Build Coastguard Worker#include <sys/syscall.h> 1614*1208bc7eSAndroid Build Coastguard Worker#include <unistd.h> 1615*1208bc7eSAndroid Build Coastguard Worker], [ 1616*1208bc7eSAndroid Build Coastguard Worker syscall(SYS_write, 2, "hello", 5); 1617*1208bc7eSAndroid Build Coastguard Worker], 1618*1208bc7eSAndroid Build Coastguard Worker [je_cv_syscall]) 1619*1208bc7eSAndroid Build Coastguard Worker JE_CFLAGS_RESTORE() 1620*1208bc7eSAndroid Build Coastguard Worker if test "x$je_cv_syscall" = "xyes" ; then 1621*1208bc7eSAndroid Build Coastguard Worker AC_DEFINE([JEMALLOC_USE_SYSCALL], [ ]) 1622*1208bc7eSAndroid Build Coastguard Worker fi 1623*1208bc7eSAndroid Build Coastguard Workerfi 1624*1208bc7eSAndroid Build Coastguard Worker 1625*1208bc7eSAndroid Build Coastguard Workerdnl Check if the GNU-specific secure_getenv function exists. 1626*1208bc7eSAndroid Build Coastguard WorkerAC_CHECK_FUNC([secure_getenv], 1627*1208bc7eSAndroid Build Coastguard Worker [have_secure_getenv="1"], 1628*1208bc7eSAndroid Build Coastguard Worker [have_secure_getenv="0"] 1629*1208bc7eSAndroid Build Coastguard Worker ) 1630*1208bc7eSAndroid Build Coastguard Workerif test "x$have_secure_getenv" = "x1" ; then 1631*1208bc7eSAndroid Build Coastguard Worker AC_DEFINE([JEMALLOC_HAVE_SECURE_GETENV], [ ]) 1632*1208bc7eSAndroid Build Coastguard Workerfi 1633*1208bc7eSAndroid Build Coastguard Worker 1634*1208bc7eSAndroid Build Coastguard Workerdnl Check if the GNU-specific sched_getcpu function exists. 1635*1208bc7eSAndroid Build Coastguard WorkerAC_CHECK_FUNC([sched_getcpu], 1636*1208bc7eSAndroid Build Coastguard Worker [have_sched_getcpu="1"], 1637*1208bc7eSAndroid Build Coastguard Worker [have_sched_getcpu="0"] 1638*1208bc7eSAndroid Build Coastguard Worker ) 1639*1208bc7eSAndroid Build Coastguard Workerif test "x$have_sched_getcpu" = "x1" ; then 1640*1208bc7eSAndroid Build Coastguard Worker AC_DEFINE([JEMALLOC_HAVE_SCHED_GETCPU], [ ]) 1641*1208bc7eSAndroid Build Coastguard Workerfi 1642*1208bc7eSAndroid Build Coastguard Worker 1643*1208bc7eSAndroid Build Coastguard Workerdnl Check if the GNU-specific sched_setaffinity function exists. 1644*1208bc7eSAndroid Build Coastguard WorkerAC_CHECK_FUNC([sched_setaffinity], 1645*1208bc7eSAndroid Build Coastguard Worker [have_sched_setaffinity="1"], 1646*1208bc7eSAndroid Build Coastguard Worker [have_sched_setaffinity="0"] 1647*1208bc7eSAndroid Build Coastguard Worker ) 1648*1208bc7eSAndroid Build Coastguard Workerif test "x$have_sched_setaffinity" = "x1" ; then 1649*1208bc7eSAndroid Build Coastguard Worker AC_DEFINE([JEMALLOC_HAVE_SCHED_SETAFFINITY], [ ]) 1650*1208bc7eSAndroid Build Coastguard Workerfi 1651*1208bc7eSAndroid Build Coastguard Worker 1652*1208bc7eSAndroid Build Coastguard Workerdnl Check if the Solaris/BSD issetugid function exists. 1653*1208bc7eSAndroid Build Coastguard WorkerAC_CHECK_FUNC([issetugid], 1654*1208bc7eSAndroid Build Coastguard Worker [have_issetugid="1"], 1655*1208bc7eSAndroid Build Coastguard Worker [have_issetugid="0"] 1656*1208bc7eSAndroid Build Coastguard Worker ) 1657*1208bc7eSAndroid Build Coastguard Workerif test "x$have_issetugid" = "x1" ; then 1658*1208bc7eSAndroid Build Coastguard Worker AC_DEFINE([JEMALLOC_HAVE_ISSETUGID], [ ]) 1659*1208bc7eSAndroid Build Coastguard Workerfi 1660*1208bc7eSAndroid Build Coastguard Worker 1661*1208bc7eSAndroid Build Coastguard Workerdnl Check whether the BSD-specific _malloc_thread_cleanup() exists. If so, use 1662*1208bc7eSAndroid Build Coastguard Workerdnl it rather than pthreads TSD cleanup functions to support cleanup during 1663*1208bc7eSAndroid Build Coastguard Workerdnl thread exit, in order to avoid pthreads library recursion during 1664*1208bc7eSAndroid Build Coastguard Workerdnl bootstrapping. 1665*1208bc7eSAndroid Build Coastguard WorkerAC_CHECK_FUNC([_malloc_thread_cleanup], 1666*1208bc7eSAndroid Build Coastguard Worker [have__malloc_thread_cleanup="1"], 1667*1208bc7eSAndroid Build Coastguard Worker [have__malloc_thread_cleanup="0"] 1668*1208bc7eSAndroid Build Coastguard Worker ) 1669*1208bc7eSAndroid Build Coastguard Workerif test "x$have__malloc_thread_cleanup" = "x1" ; then 1670*1208bc7eSAndroid Build Coastguard Worker AC_DEFINE([JEMALLOC_MALLOC_THREAD_CLEANUP], [ ]) 1671*1208bc7eSAndroid Build Coastguard Worker wrap_syms="${wrap_syms} _malloc_thread_cleanup" 1672*1208bc7eSAndroid Build Coastguard Worker force_tls="1" 1673*1208bc7eSAndroid Build Coastguard Workerfi 1674*1208bc7eSAndroid Build Coastguard Worker 1675*1208bc7eSAndroid Build Coastguard Workerdnl Check whether the BSD-specific _pthread_mutex_init_calloc_cb() exists. If 1676*1208bc7eSAndroid Build Coastguard Workerdnl so, mutex initialization causes allocation, and we need to implement this 1677*1208bc7eSAndroid Build Coastguard Workerdnl callback function in order to prevent recursive allocation. 1678*1208bc7eSAndroid Build Coastguard WorkerAC_CHECK_FUNC([_pthread_mutex_init_calloc_cb], 1679*1208bc7eSAndroid Build Coastguard Worker [have__pthread_mutex_init_calloc_cb="1"], 1680*1208bc7eSAndroid Build Coastguard Worker [have__pthread_mutex_init_calloc_cb="0"] 1681*1208bc7eSAndroid Build Coastguard Worker ) 1682*1208bc7eSAndroid Build Coastguard Workerif test "x$have__pthread_mutex_init_calloc_cb" = "x1" ; then 1683*1208bc7eSAndroid Build Coastguard Worker AC_DEFINE([JEMALLOC_MUTEX_INIT_CB]) 1684*1208bc7eSAndroid Build Coastguard Worker wrap_syms="${wrap_syms} _malloc_prefork _malloc_postfork" 1685*1208bc7eSAndroid Build Coastguard Workerfi 1686*1208bc7eSAndroid Build Coastguard Worker 1687*1208bc7eSAndroid Build Coastguard Workerdnl Disable lazy locking by default. 1688*1208bc7eSAndroid Build Coastguard WorkerAC_ARG_ENABLE([lazy_lock], 1689*1208bc7eSAndroid Build Coastguard Worker [AS_HELP_STRING([--enable-lazy-lock], 1690*1208bc7eSAndroid Build Coastguard Worker [Enable lazy locking (only lock when multi-threaded)])], 1691*1208bc7eSAndroid Build Coastguard Worker[if test "x$enable_lazy_lock" = "xno" ; then 1692*1208bc7eSAndroid Build Coastguard Worker enable_lazy_lock="0" 1693*1208bc7eSAndroid Build Coastguard Workerelse 1694*1208bc7eSAndroid Build Coastguard Worker enable_lazy_lock="1" 1695*1208bc7eSAndroid Build Coastguard Workerfi 1696*1208bc7eSAndroid Build Coastguard Worker], 1697*1208bc7eSAndroid Build Coastguard Worker[enable_lazy_lock=""] 1698*1208bc7eSAndroid Build Coastguard Worker) 1699*1208bc7eSAndroid Build Coastguard Workerif test "x${enable_lazy_lock}" = "x" ; then 1700*1208bc7eSAndroid Build Coastguard Worker if test "x${force_lazy_lock}" = "x1" ; then 1701*1208bc7eSAndroid Build Coastguard Worker AC_MSG_RESULT([Forcing lazy-lock to avoid allocator/threading bootstrap issues]) 1702*1208bc7eSAndroid Build Coastguard Worker enable_lazy_lock="1" 1703*1208bc7eSAndroid Build Coastguard Worker else 1704*1208bc7eSAndroid Build Coastguard Worker enable_lazy_lock="0" 1705*1208bc7eSAndroid Build Coastguard Worker fi 1706*1208bc7eSAndroid Build Coastguard Workerfi 1707*1208bc7eSAndroid Build Coastguard Workerif test "x${enable_lazy_lock}" = "x1" -a "x${abi}" = "xpecoff" ; then 1708*1208bc7eSAndroid Build Coastguard Worker AC_MSG_RESULT([Forcing no lazy-lock because thread creation monitoring is unimplemented]) 1709*1208bc7eSAndroid Build Coastguard Worker enable_lazy_lock="0" 1710*1208bc7eSAndroid Build Coastguard Workerfi 1711*1208bc7eSAndroid Build Coastguard Workerif test "x$enable_lazy_lock" = "x1" ; then 1712*1208bc7eSAndroid Build Coastguard Worker if test "x$have_dlsym" = "x1" ; then 1713*1208bc7eSAndroid Build Coastguard Worker AC_DEFINE([JEMALLOC_LAZY_LOCK], [ ]) 1714*1208bc7eSAndroid Build Coastguard Worker else 1715*1208bc7eSAndroid Build Coastguard Worker AC_MSG_ERROR([Missing dlsym support: lazy-lock cannot be enabled.]) 1716*1208bc7eSAndroid Build Coastguard Worker fi 1717*1208bc7eSAndroid Build Coastguard Workerfi 1718*1208bc7eSAndroid Build Coastguard WorkerAC_SUBST([enable_lazy_lock]) 1719*1208bc7eSAndroid Build Coastguard Worker 1720*1208bc7eSAndroid Build Coastguard Workerdnl Automatically configure TLS. 1721*1208bc7eSAndroid Build Coastguard Workerif test "x${force_tls}" = "x1" ; then 1722*1208bc7eSAndroid Build Coastguard Worker enable_tls="1" 1723*1208bc7eSAndroid Build Coastguard Workerelif test "x${force_tls}" = "x0" ; then 1724*1208bc7eSAndroid Build Coastguard Worker enable_tls="0" 1725*1208bc7eSAndroid Build Coastguard Workerelse 1726*1208bc7eSAndroid Build Coastguard Worker enable_tls="1" 1727*1208bc7eSAndroid Build Coastguard Workerfi 1728*1208bc7eSAndroid Build Coastguard Workerif test "x${enable_tls}" = "x1" ; then 1729*1208bc7eSAndroid Build Coastguard WorkerAC_MSG_CHECKING([for TLS]) 1730*1208bc7eSAndroid Build Coastguard WorkerAC_COMPILE_IFELSE([AC_LANG_PROGRAM( 1731*1208bc7eSAndroid Build Coastguard Worker[[ 1732*1208bc7eSAndroid Build Coastguard Worker __thread int x; 1733*1208bc7eSAndroid Build Coastguard Worker]], [[ 1734*1208bc7eSAndroid Build Coastguard Worker x = 42; 1735*1208bc7eSAndroid Build Coastguard Worker 1736*1208bc7eSAndroid Build Coastguard Worker return 0; 1737*1208bc7eSAndroid Build Coastguard Worker]])], 1738*1208bc7eSAndroid Build Coastguard Worker AC_MSG_RESULT([yes]), 1739*1208bc7eSAndroid Build Coastguard Worker AC_MSG_RESULT([no]) 1740*1208bc7eSAndroid Build Coastguard Worker enable_tls="0") 1741*1208bc7eSAndroid Build Coastguard Workerelse 1742*1208bc7eSAndroid Build Coastguard Worker enable_tls="0" 1743*1208bc7eSAndroid Build Coastguard Workerfi 1744*1208bc7eSAndroid Build Coastguard WorkerAC_SUBST([enable_tls]) 1745*1208bc7eSAndroid Build Coastguard Workerif test "x${enable_tls}" = "x1" ; then 1746*1208bc7eSAndroid Build Coastguard Worker AC_DEFINE_UNQUOTED([JEMALLOC_TLS], [ ]) 1747*1208bc7eSAndroid Build Coastguard Workerfi 1748*1208bc7eSAndroid Build Coastguard Worker 1749*1208bc7eSAndroid Build Coastguard Workerdnl ============================================================================ 1750*1208bc7eSAndroid Build Coastguard Workerdnl Check for C11 atomics. 1751*1208bc7eSAndroid Build Coastguard Worker 1752*1208bc7eSAndroid Build Coastguard WorkerJE_COMPILABLE([C11 atomics], [ 1753*1208bc7eSAndroid Build Coastguard Worker#include <stdint.h> 1754*1208bc7eSAndroid Build Coastguard Worker#if (__STDC_VERSION__ >= 201112L) && !defined(__STDC_NO_ATOMICS__) 1755*1208bc7eSAndroid Build Coastguard Worker#include <stdatomic.h> 1756*1208bc7eSAndroid Build Coastguard Worker#else 1757*1208bc7eSAndroid Build Coastguard Worker#error Atomics not available 1758*1208bc7eSAndroid Build Coastguard Worker#endif 1759*1208bc7eSAndroid Build Coastguard Worker], [ 1760*1208bc7eSAndroid Build Coastguard Worker uint64_t *p = (uint64_t *)0; 1761*1208bc7eSAndroid Build Coastguard Worker uint64_t x = 1; 1762*1208bc7eSAndroid Build Coastguard Worker volatile atomic_uint_least64_t *a = (volatile atomic_uint_least64_t *)p; 1763*1208bc7eSAndroid Build Coastguard Worker uint64_t r = atomic_fetch_add(a, x) + x; 1764*1208bc7eSAndroid Build Coastguard Worker return r == 0; 1765*1208bc7eSAndroid Build Coastguard Worker], [je_cv_c11_atomics]) 1766*1208bc7eSAndroid Build Coastguard Workerif test "x${je_cv_c11_atomics}" = "xyes" ; then 1767*1208bc7eSAndroid Build Coastguard Worker AC_DEFINE([JEMALLOC_C11_ATOMICS]) 1768*1208bc7eSAndroid Build Coastguard Workerfi 1769*1208bc7eSAndroid Build Coastguard Worker 1770*1208bc7eSAndroid Build Coastguard Workerdnl ============================================================================ 1771*1208bc7eSAndroid Build Coastguard Workerdnl Check for GCC-style __atomic atomics. 1772*1208bc7eSAndroid Build Coastguard Worker 1773*1208bc7eSAndroid Build Coastguard WorkerJE_COMPILABLE([GCC __atomic atomics], [ 1774*1208bc7eSAndroid Build Coastguard Worker], [ 1775*1208bc7eSAndroid Build Coastguard Worker int x = 0; 1776*1208bc7eSAndroid Build Coastguard Worker int val = 1; 1777*1208bc7eSAndroid Build Coastguard Worker int y = __atomic_fetch_add(&x, val, __ATOMIC_RELAXED); 1778*1208bc7eSAndroid Build Coastguard Worker int after_add = x; 1779*1208bc7eSAndroid Build Coastguard Worker return after_add == 1; 1780*1208bc7eSAndroid Build Coastguard Worker], [je_cv_gcc_atomic_atomics]) 1781*1208bc7eSAndroid Build Coastguard Workerif test "x${je_cv_gcc_atomic_atomics}" = "xyes" ; then 1782*1208bc7eSAndroid Build Coastguard Worker AC_DEFINE([JEMALLOC_GCC_ATOMIC_ATOMICS]) 1783*1208bc7eSAndroid Build Coastguard Workerfi 1784*1208bc7eSAndroid Build Coastguard Worker 1785*1208bc7eSAndroid Build Coastguard Workerdnl ============================================================================ 1786*1208bc7eSAndroid Build Coastguard Workerdnl Check for GCC-style __sync atomics. 1787*1208bc7eSAndroid Build Coastguard Worker 1788*1208bc7eSAndroid Build Coastguard WorkerJE_COMPILABLE([GCC __sync atomics], [ 1789*1208bc7eSAndroid Build Coastguard Worker], [ 1790*1208bc7eSAndroid Build Coastguard Worker int x = 0; 1791*1208bc7eSAndroid Build Coastguard Worker int before_add = __sync_fetch_and_add(&x, 1); 1792*1208bc7eSAndroid Build Coastguard Worker int after_add = x; 1793*1208bc7eSAndroid Build Coastguard Worker return (before_add == 0) && (after_add == 1); 1794*1208bc7eSAndroid Build Coastguard Worker], [je_cv_gcc_sync_atomics]) 1795*1208bc7eSAndroid Build Coastguard Workerif test "x${je_cv_gcc_sync_atomics}" = "xyes" ; then 1796*1208bc7eSAndroid Build Coastguard Worker AC_DEFINE([JEMALLOC_GCC_SYNC_ATOMICS]) 1797*1208bc7eSAndroid Build Coastguard Workerfi 1798*1208bc7eSAndroid Build Coastguard Worker 1799*1208bc7eSAndroid Build Coastguard Workerdnl ============================================================================ 1800*1208bc7eSAndroid Build Coastguard Workerdnl Check for atomic(3) operations as provided on Darwin. 1801*1208bc7eSAndroid Build Coastguard Workerdnl We need this not for the atomic operations (which are provided above), but 1802*1208bc7eSAndroid Build Coastguard Workerdnl rather for the OSSpinLock type it exposes. 1803*1208bc7eSAndroid Build Coastguard Worker 1804*1208bc7eSAndroid Build Coastguard WorkerJE_COMPILABLE([Darwin OSAtomic*()], [ 1805*1208bc7eSAndroid Build Coastguard Worker#include <libkern/OSAtomic.h> 1806*1208bc7eSAndroid Build Coastguard Worker#include <inttypes.h> 1807*1208bc7eSAndroid Build Coastguard Worker], [ 1808*1208bc7eSAndroid Build Coastguard Worker { 1809*1208bc7eSAndroid Build Coastguard Worker int32_t x32 = 0; 1810*1208bc7eSAndroid Build Coastguard Worker volatile int32_t *x32p = &x32; 1811*1208bc7eSAndroid Build Coastguard Worker OSAtomicAdd32(1, x32p); 1812*1208bc7eSAndroid Build Coastguard Worker } 1813*1208bc7eSAndroid Build Coastguard Worker { 1814*1208bc7eSAndroid Build Coastguard Worker int64_t x64 = 0; 1815*1208bc7eSAndroid Build Coastguard Worker volatile int64_t *x64p = &x64; 1816*1208bc7eSAndroid Build Coastguard Worker OSAtomicAdd64(1, x64p); 1817*1208bc7eSAndroid Build Coastguard Worker } 1818*1208bc7eSAndroid Build Coastguard Worker], [je_cv_osatomic]) 1819*1208bc7eSAndroid Build Coastguard Workerif test "x${je_cv_osatomic}" = "xyes" ; then 1820*1208bc7eSAndroid Build Coastguard Worker AC_DEFINE([JEMALLOC_OSATOMIC], [ ]) 1821*1208bc7eSAndroid Build Coastguard Workerfi 1822*1208bc7eSAndroid Build Coastguard Worker 1823*1208bc7eSAndroid Build Coastguard Workerdnl ============================================================================ 1824*1208bc7eSAndroid Build Coastguard Workerdnl Check for madvise(2). 1825*1208bc7eSAndroid Build Coastguard Worker 1826*1208bc7eSAndroid Build Coastguard WorkerJE_COMPILABLE([madvise(2)], [ 1827*1208bc7eSAndroid Build Coastguard Worker#include <sys/mman.h> 1828*1208bc7eSAndroid Build Coastguard Worker], [ 1829*1208bc7eSAndroid Build Coastguard Worker madvise((void *)0, 0, 0); 1830*1208bc7eSAndroid Build Coastguard Worker], [je_cv_madvise]) 1831*1208bc7eSAndroid Build Coastguard Workerif test "x${je_cv_madvise}" = "xyes" ; then 1832*1208bc7eSAndroid Build Coastguard Worker AC_DEFINE([JEMALLOC_HAVE_MADVISE], [ ]) 1833*1208bc7eSAndroid Build Coastguard Worker 1834*1208bc7eSAndroid Build Coastguard Worker dnl Check for madvise(..., MADV_FREE). 1835*1208bc7eSAndroid Build Coastguard Worker JE_COMPILABLE([madvise(..., MADV_FREE)], [ 1836*1208bc7eSAndroid Build Coastguard Worker#include <sys/mman.h> 1837*1208bc7eSAndroid Build Coastguard Worker], [ 1838*1208bc7eSAndroid Build Coastguard Worker madvise((void *)0, 0, MADV_FREE); 1839*1208bc7eSAndroid Build Coastguard Worker], [je_cv_madv_free]) 1840*1208bc7eSAndroid Build Coastguard Worker if test "x${je_cv_madv_free}" = "xyes" ; then 1841*1208bc7eSAndroid Build Coastguard Worker AC_DEFINE([JEMALLOC_PURGE_MADVISE_FREE], [ ]) 1842*1208bc7eSAndroid Build Coastguard Worker elif test "x${je_cv_madvise}" = "xyes" ; then 1843*1208bc7eSAndroid Build Coastguard Worker case "${host_cpu}" in i686|x86_64) 1844*1208bc7eSAndroid Build Coastguard Worker case "${host}" in *-*-linux*) 1845*1208bc7eSAndroid Build Coastguard Worker AC_DEFINE([JEMALLOC_PURGE_MADVISE_FREE], [ ]) 1846*1208bc7eSAndroid Build Coastguard Worker AC_DEFINE([JEMALLOC_DEFINE_MADVISE_FREE], [ ]) 1847*1208bc7eSAndroid Build Coastguard Worker ;; 1848*1208bc7eSAndroid Build Coastguard Worker esac 1849*1208bc7eSAndroid Build Coastguard Worker ;; 1850*1208bc7eSAndroid Build Coastguard Worker esac 1851*1208bc7eSAndroid Build Coastguard Worker fi 1852*1208bc7eSAndroid Build Coastguard Worker 1853*1208bc7eSAndroid Build Coastguard Worker dnl Check for madvise(..., MADV_DONTNEED). 1854*1208bc7eSAndroid Build Coastguard Worker JE_COMPILABLE([madvise(..., MADV_DONTNEED)], [ 1855*1208bc7eSAndroid Build Coastguard Worker#include <sys/mman.h> 1856*1208bc7eSAndroid Build Coastguard Worker], [ 1857*1208bc7eSAndroid Build Coastguard Worker madvise((void *)0, 0, MADV_DONTNEED); 1858*1208bc7eSAndroid Build Coastguard Worker], [je_cv_madv_dontneed]) 1859*1208bc7eSAndroid Build Coastguard Worker if test "x${je_cv_madv_dontneed}" = "xyes" ; then 1860*1208bc7eSAndroid Build Coastguard Worker AC_DEFINE([JEMALLOC_PURGE_MADVISE_DONTNEED], [ ]) 1861*1208bc7eSAndroid Build Coastguard Worker fi 1862*1208bc7eSAndroid Build Coastguard Worker 1863*1208bc7eSAndroid Build Coastguard Worker dnl Check for madvise(..., MADV_DO[NT]DUMP). 1864*1208bc7eSAndroid Build Coastguard Worker JE_COMPILABLE([madvise(..., MADV_DO[[NT]]DUMP)], [ 1865*1208bc7eSAndroid Build Coastguard Worker#include <sys/mman.h> 1866*1208bc7eSAndroid Build Coastguard Worker], [ 1867*1208bc7eSAndroid Build Coastguard Worker madvise((void *)0, 0, MADV_DONTDUMP); 1868*1208bc7eSAndroid Build Coastguard Worker madvise((void *)0, 0, MADV_DODUMP); 1869*1208bc7eSAndroid Build Coastguard Worker], [je_cv_madv_dontdump]) 1870*1208bc7eSAndroid Build Coastguard Worker if test "x${je_cv_madv_dontdump}" = "xyes" ; then 1871*1208bc7eSAndroid Build Coastguard Worker AC_DEFINE([JEMALLOC_MADVISE_DONTDUMP], [ ]) 1872*1208bc7eSAndroid Build Coastguard Worker fi 1873*1208bc7eSAndroid Build Coastguard Worker 1874*1208bc7eSAndroid Build Coastguard Worker dnl Check for madvise(..., MADV_[NO]HUGEPAGE). 1875*1208bc7eSAndroid Build Coastguard Worker JE_COMPILABLE([madvise(..., MADV_[[NO]]HUGEPAGE)], [ 1876*1208bc7eSAndroid Build Coastguard Worker#include <sys/mman.h> 1877*1208bc7eSAndroid Build Coastguard Worker], [ 1878*1208bc7eSAndroid Build Coastguard Worker madvise((void *)0, 0, MADV_HUGEPAGE); 1879*1208bc7eSAndroid Build Coastguard Worker madvise((void *)0, 0, MADV_NOHUGEPAGE); 1880*1208bc7eSAndroid Build Coastguard Worker], [je_cv_thp]) 1881*1208bc7eSAndroid Build Coastguard Workercase "${host_cpu}" in 1882*1208bc7eSAndroid Build Coastguard Worker arm*) 1883*1208bc7eSAndroid Build Coastguard Worker ;; 1884*1208bc7eSAndroid Build Coastguard Worker *) 1885*1208bc7eSAndroid Build Coastguard Worker if test "x${je_cv_thp}" = "xyes" ; then 1886*1208bc7eSAndroid Build Coastguard Worker AC_DEFINE([JEMALLOC_HAVE_MADVISE_HUGE], [ ]) 1887*1208bc7eSAndroid Build Coastguard Worker fi 1888*1208bc7eSAndroid Build Coastguard Worker ;; 1889*1208bc7eSAndroid Build Coastguard Workeresac 1890*1208bc7eSAndroid Build Coastguard Workerfi 1891*1208bc7eSAndroid Build Coastguard Worker 1892*1208bc7eSAndroid Build Coastguard Workerdnl ============================================================================ 1893*1208bc7eSAndroid Build Coastguard Workerdnl Check whether __sync_{add,sub}_and_fetch() are available despite 1894*1208bc7eSAndroid Build Coastguard Workerdnl __GCC_HAVE_SYNC_COMPARE_AND_SWAP_n macros being undefined. 1895*1208bc7eSAndroid Build Coastguard Worker 1896*1208bc7eSAndroid Build Coastguard WorkerAC_DEFUN([JE_SYNC_COMPARE_AND_SWAP_CHECK],[ 1897*1208bc7eSAndroid Build Coastguard Worker AC_CACHE_CHECK([whether to force $1-bit __sync_{add,sub}_and_fetch()], 1898*1208bc7eSAndroid Build Coastguard Worker [je_cv_sync_compare_and_swap_$2], 1899*1208bc7eSAndroid Build Coastguard Worker [AC_LINK_IFELSE([AC_LANG_PROGRAM([ 1900*1208bc7eSAndroid Build Coastguard Worker #include <stdint.h> 1901*1208bc7eSAndroid Build Coastguard Worker ], 1902*1208bc7eSAndroid Build Coastguard Worker [ 1903*1208bc7eSAndroid Build Coastguard Worker #ifndef __GCC_HAVE_SYNC_COMPARE_AND_SWAP_$2 1904*1208bc7eSAndroid Build Coastguard Worker { 1905*1208bc7eSAndroid Build Coastguard Worker uint$1_t x$1 = 0; 1906*1208bc7eSAndroid Build Coastguard Worker __sync_add_and_fetch(&x$1, 42); 1907*1208bc7eSAndroid Build Coastguard Worker __sync_sub_and_fetch(&x$1, 1); 1908*1208bc7eSAndroid Build Coastguard Worker } 1909*1208bc7eSAndroid Build Coastguard Worker #else 1910*1208bc7eSAndroid Build Coastguard Worker #error __GCC_HAVE_SYNC_COMPARE_AND_SWAP_$2 is defined, no need to force 1911*1208bc7eSAndroid Build Coastguard Worker #endif 1912*1208bc7eSAndroid Build Coastguard Worker ])], 1913*1208bc7eSAndroid Build Coastguard Worker [je_cv_sync_compare_and_swap_$2=yes], 1914*1208bc7eSAndroid Build Coastguard Worker [je_cv_sync_compare_and_swap_$2=no])]) 1915*1208bc7eSAndroid Build Coastguard Worker 1916*1208bc7eSAndroid Build Coastguard Worker if test "x${je_cv_sync_compare_and_swap_$2}" = "xyes" ; then 1917*1208bc7eSAndroid Build Coastguard Worker AC_DEFINE([JE_FORCE_SYNC_COMPARE_AND_SWAP_$2], [ ]) 1918*1208bc7eSAndroid Build Coastguard Worker fi 1919*1208bc7eSAndroid Build Coastguard Worker]) 1920*1208bc7eSAndroid Build Coastguard Worker 1921*1208bc7eSAndroid Build Coastguard Workerif test "x${je_cv_atomic9}" != "xyes" -a "x${je_cv_osatomic}" != "xyes" ; then 1922*1208bc7eSAndroid Build Coastguard Worker JE_SYNC_COMPARE_AND_SWAP_CHECK(32, 4) 1923*1208bc7eSAndroid Build Coastguard Worker JE_SYNC_COMPARE_AND_SWAP_CHECK(64, 8) 1924*1208bc7eSAndroid Build Coastguard Workerfi 1925*1208bc7eSAndroid Build Coastguard Worker 1926*1208bc7eSAndroid Build Coastguard Workerdnl ============================================================================ 1927*1208bc7eSAndroid Build Coastguard Workerdnl Check for __builtin_clz() and __builtin_clzl(). 1928*1208bc7eSAndroid Build Coastguard Worker 1929*1208bc7eSAndroid Build Coastguard WorkerAC_CACHE_CHECK([for __builtin_clz], 1930*1208bc7eSAndroid Build Coastguard Worker [je_cv_builtin_clz], 1931*1208bc7eSAndroid Build Coastguard Worker [AC_LINK_IFELSE([AC_LANG_PROGRAM([], 1932*1208bc7eSAndroid Build Coastguard Worker [ 1933*1208bc7eSAndroid Build Coastguard Worker { 1934*1208bc7eSAndroid Build Coastguard Worker unsigned x = 0; 1935*1208bc7eSAndroid Build Coastguard Worker int y = __builtin_clz(x); 1936*1208bc7eSAndroid Build Coastguard Worker } 1937*1208bc7eSAndroid Build Coastguard Worker { 1938*1208bc7eSAndroid Build Coastguard Worker unsigned long x = 0; 1939*1208bc7eSAndroid Build Coastguard Worker int y = __builtin_clzl(x); 1940*1208bc7eSAndroid Build Coastguard Worker } 1941*1208bc7eSAndroid Build Coastguard Worker ])], 1942*1208bc7eSAndroid Build Coastguard Worker [je_cv_builtin_clz=yes], 1943*1208bc7eSAndroid Build Coastguard Worker [je_cv_builtin_clz=no])]) 1944*1208bc7eSAndroid Build Coastguard Worker 1945*1208bc7eSAndroid Build Coastguard Workerif test "x${je_cv_builtin_clz}" = "xyes" ; then 1946*1208bc7eSAndroid Build Coastguard Worker AC_DEFINE([JEMALLOC_HAVE_BUILTIN_CLZ], [ ]) 1947*1208bc7eSAndroid Build Coastguard Workerfi 1948*1208bc7eSAndroid Build Coastguard Worker 1949*1208bc7eSAndroid Build Coastguard Workerdnl ============================================================================ 1950*1208bc7eSAndroid Build Coastguard Workerdnl Check for os_unfair_lock operations as provided on Darwin. 1951*1208bc7eSAndroid Build Coastguard Worker 1952*1208bc7eSAndroid Build Coastguard WorkerJE_COMPILABLE([Darwin os_unfair_lock_*()], [ 1953*1208bc7eSAndroid Build Coastguard Worker#include <os/lock.h> 1954*1208bc7eSAndroid Build Coastguard Worker#include <AvailabilityMacros.h> 1955*1208bc7eSAndroid Build Coastguard Worker], [ 1956*1208bc7eSAndroid Build Coastguard Worker #if MAC_OS_X_VERSION_MIN_REQUIRED < 101200 1957*1208bc7eSAndroid Build Coastguard Worker #error "os_unfair_lock is not supported" 1958*1208bc7eSAndroid Build Coastguard Worker #else 1959*1208bc7eSAndroid Build Coastguard Worker os_unfair_lock lock = OS_UNFAIR_LOCK_INIT; 1960*1208bc7eSAndroid Build Coastguard Worker os_unfair_lock_lock(&lock); 1961*1208bc7eSAndroid Build Coastguard Worker os_unfair_lock_unlock(&lock); 1962*1208bc7eSAndroid Build Coastguard Worker #endif 1963*1208bc7eSAndroid Build Coastguard Worker], [je_cv_os_unfair_lock]) 1964*1208bc7eSAndroid Build Coastguard Workerif test "x${je_cv_os_unfair_lock}" = "xyes" ; then 1965*1208bc7eSAndroid Build Coastguard Worker AC_DEFINE([JEMALLOC_OS_UNFAIR_LOCK], [ ]) 1966*1208bc7eSAndroid Build Coastguard Workerfi 1967*1208bc7eSAndroid Build Coastguard Worker 1968*1208bc7eSAndroid Build Coastguard Workerdnl ============================================================================ 1969*1208bc7eSAndroid Build Coastguard Workerdnl Check for spinlock(3) operations as provided on Darwin. 1970*1208bc7eSAndroid Build Coastguard Worker 1971*1208bc7eSAndroid Build Coastguard WorkerJE_COMPILABLE([Darwin OSSpin*()], [ 1972*1208bc7eSAndroid Build Coastguard Worker#include <libkern/OSAtomic.h> 1973*1208bc7eSAndroid Build Coastguard Worker#include <inttypes.h> 1974*1208bc7eSAndroid Build Coastguard Worker], [ 1975*1208bc7eSAndroid Build Coastguard Worker OSSpinLock lock = 0; 1976*1208bc7eSAndroid Build Coastguard Worker OSSpinLockLock(&lock); 1977*1208bc7eSAndroid Build Coastguard Worker OSSpinLockUnlock(&lock); 1978*1208bc7eSAndroid Build Coastguard Worker], [je_cv_osspin]) 1979*1208bc7eSAndroid Build Coastguard Workerif test "x${je_cv_osspin}" = "xyes" ; then 1980*1208bc7eSAndroid Build Coastguard Worker AC_DEFINE([JEMALLOC_OSSPIN], [ ]) 1981*1208bc7eSAndroid Build Coastguard Workerfi 1982*1208bc7eSAndroid Build Coastguard Worker 1983*1208bc7eSAndroid Build Coastguard Workerdnl ============================================================================ 1984*1208bc7eSAndroid Build Coastguard Workerdnl Darwin-related configuration. 1985*1208bc7eSAndroid Build Coastguard Worker 1986*1208bc7eSAndroid Build Coastguard WorkerAC_ARG_ENABLE([zone-allocator], 1987*1208bc7eSAndroid Build Coastguard Worker [AS_HELP_STRING([--disable-zone-allocator], 1988*1208bc7eSAndroid Build Coastguard Worker [Disable zone allocator for Darwin])], 1989*1208bc7eSAndroid Build Coastguard Worker[if test "x$enable_zone_allocator" = "xno" ; then 1990*1208bc7eSAndroid Build Coastguard Worker enable_zone_allocator="0" 1991*1208bc7eSAndroid Build Coastguard Workerelse 1992*1208bc7eSAndroid Build Coastguard Worker enable_zone_allocator="1" 1993*1208bc7eSAndroid Build Coastguard Workerfi 1994*1208bc7eSAndroid Build Coastguard Worker], 1995*1208bc7eSAndroid Build Coastguard Worker[if test "x${abi}" = "xmacho"; then 1996*1208bc7eSAndroid Build Coastguard Worker enable_zone_allocator="1" 1997*1208bc7eSAndroid Build Coastguard Workerfi 1998*1208bc7eSAndroid Build Coastguard Worker] 1999*1208bc7eSAndroid Build Coastguard Worker) 2000*1208bc7eSAndroid Build Coastguard WorkerAC_SUBST([enable_zone_allocator]) 2001*1208bc7eSAndroid Build Coastguard Worker 2002*1208bc7eSAndroid Build Coastguard Workerif test "x${enable_zone_allocator}" = "x1" ; then 2003*1208bc7eSAndroid Build Coastguard Worker if test "x${abi}" != "xmacho"; then 2004*1208bc7eSAndroid Build Coastguard Worker AC_MSG_ERROR([--enable-zone-allocator is only supported on Darwin]) 2005*1208bc7eSAndroid Build Coastguard Worker fi 2006*1208bc7eSAndroid Build Coastguard Worker AC_DEFINE([JEMALLOC_ZONE], [ ]) 2007*1208bc7eSAndroid Build Coastguard Workerfi 2008*1208bc7eSAndroid Build Coastguard Worker 2009*1208bc7eSAndroid Build Coastguard Workerdnl ============================================================================ 2010*1208bc7eSAndroid Build Coastguard Workerdnl Use initial-exec TLS by default. 2011*1208bc7eSAndroid Build Coastguard WorkerAC_ARG_ENABLE([initial-exec-tls], 2012*1208bc7eSAndroid Build Coastguard Worker [AS_HELP_STRING([--disable-initial-exec-tls], 2013*1208bc7eSAndroid Build Coastguard Worker [Disable the initial-exec tls model])], 2014*1208bc7eSAndroid Build Coastguard Worker[if test "x$enable_initial_exec_tls" = "xno" ; then 2015*1208bc7eSAndroid Build Coastguard Worker enable_initial_exec_tls="0" 2016*1208bc7eSAndroid Build Coastguard Workerelse 2017*1208bc7eSAndroid Build Coastguard Worker enable_initial_exec_tls="1" 2018*1208bc7eSAndroid Build Coastguard Workerfi 2019*1208bc7eSAndroid Build Coastguard Worker], 2020*1208bc7eSAndroid Build Coastguard Worker[enable_initial_exec_tls="1"] 2021*1208bc7eSAndroid Build Coastguard Worker) 2022*1208bc7eSAndroid Build Coastguard WorkerAC_SUBST([enable_initial_exec_tls]) 2023*1208bc7eSAndroid Build Coastguard Worker 2024*1208bc7eSAndroid Build Coastguard Workerif test "x${je_cv_tls_model}" = "xyes" -a \ 2025*1208bc7eSAndroid Build Coastguard Worker "x${enable_initial_exec_tls}" = "x1" ; then 2026*1208bc7eSAndroid Build Coastguard Worker AC_DEFINE([JEMALLOC_TLS_MODEL], 2027*1208bc7eSAndroid Build Coastguard Worker [__attribute__((tls_model("initial-exec")))]) 2028*1208bc7eSAndroid Build Coastguard Workerelse 2029*1208bc7eSAndroid Build Coastguard Worker AC_DEFINE([JEMALLOC_TLS_MODEL], [ ]) 2030*1208bc7eSAndroid Build Coastguard Workerfi 2031*1208bc7eSAndroid Build Coastguard Worker 2032*1208bc7eSAndroid Build Coastguard Workerdnl ============================================================================ 2033*1208bc7eSAndroid Build Coastguard Workerdnl Enable background threads if possible. 2034*1208bc7eSAndroid Build Coastguard Worker 2035*1208bc7eSAndroid Build Coastguard Workerif test "x${have_pthread}" = "x1" -a "x${have_dlsym}" = "x1" \ 2036*1208bc7eSAndroid Build Coastguard Worker -a "x${je_cv_os_unfair_lock}" != "xyes" \ 2037*1208bc7eSAndroid Build Coastguard Worker -a "x${je_cv_osspin}" != "xyes" ; then 2038*1208bc7eSAndroid Build Coastguard Worker AC_DEFINE([JEMALLOC_BACKGROUND_THREAD]) 2039*1208bc7eSAndroid Build Coastguard Workerfi 2040*1208bc7eSAndroid Build Coastguard Worker 2041*1208bc7eSAndroid Build Coastguard Workerdnl ============================================================================ 2042*1208bc7eSAndroid Build Coastguard Workerdnl Check for glibc malloc hooks 2043*1208bc7eSAndroid Build Coastguard Worker 2044*1208bc7eSAndroid Build Coastguard WorkerJE_COMPILABLE([glibc malloc hook], [ 2045*1208bc7eSAndroid Build Coastguard Worker#include <stddef.h> 2046*1208bc7eSAndroid Build Coastguard Worker 2047*1208bc7eSAndroid Build Coastguard Workerextern void (* __free_hook)(void *ptr); 2048*1208bc7eSAndroid Build Coastguard Workerextern void *(* __malloc_hook)(size_t size); 2049*1208bc7eSAndroid Build Coastguard Workerextern void *(* __realloc_hook)(void *ptr, size_t size); 2050*1208bc7eSAndroid Build Coastguard Worker], [ 2051*1208bc7eSAndroid Build Coastguard Worker void *ptr = 0L; 2052*1208bc7eSAndroid Build Coastguard Worker if (__malloc_hook) ptr = __malloc_hook(1); 2053*1208bc7eSAndroid Build Coastguard Worker if (__realloc_hook) ptr = __realloc_hook(ptr, 2); 2054*1208bc7eSAndroid Build Coastguard Worker if (__free_hook && ptr) __free_hook(ptr); 2055*1208bc7eSAndroid Build Coastguard Worker], [je_cv_glibc_malloc_hook]) 2056*1208bc7eSAndroid Build Coastguard Workerif test "x${je_cv_glibc_malloc_hook}" = "xyes" ; then 2057*1208bc7eSAndroid Build Coastguard Worker if test "x${JEMALLOC_PREFIX}" = "x" ; then 2058*1208bc7eSAndroid Build Coastguard Worker AC_DEFINE([JEMALLOC_GLIBC_MALLOC_HOOK], [ ]) 2059*1208bc7eSAndroid Build Coastguard Worker wrap_syms="${wrap_syms} __free_hook __malloc_hook __realloc_hook" 2060*1208bc7eSAndroid Build Coastguard Worker fi 2061*1208bc7eSAndroid Build Coastguard Workerfi 2062*1208bc7eSAndroid Build Coastguard Worker 2063*1208bc7eSAndroid Build Coastguard WorkerJE_COMPILABLE([glibc memalign hook], [ 2064*1208bc7eSAndroid Build Coastguard Worker#include <stddef.h> 2065*1208bc7eSAndroid Build Coastguard Worker 2066*1208bc7eSAndroid Build Coastguard Workerextern void *(* __memalign_hook)(size_t alignment, size_t size); 2067*1208bc7eSAndroid Build Coastguard Worker], [ 2068*1208bc7eSAndroid Build Coastguard Worker void *ptr = 0L; 2069*1208bc7eSAndroid Build Coastguard Worker if (__memalign_hook) ptr = __memalign_hook(16, 7); 2070*1208bc7eSAndroid Build Coastguard Worker], [je_cv_glibc_memalign_hook]) 2071*1208bc7eSAndroid Build Coastguard Workerif test "x${je_cv_glibc_memalign_hook}" = "xyes" ; then 2072*1208bc7eSAndroid Build Coastguard Worker if test "x${JEMALLOC_PREFIX}" = "x" ; then 2073*1208bc7eSAndroid Build Coastguard Worker AC_DEFINE([JEMALLOC_GLIBC_MEMALIGN_HOOK], [ ]) 2074*1208bc7eSAndroid Build Coastguard Worker wrap_syms="${wrap_syms} __memalign_hook" 2075*1208bc7eSAndroid Build Coastguard Worker fi 2076*1208bc7eSAndroid Build Coastguard Workerfi 2077*1208bc7eSAndroid Build Coastguard Worker 2078*1208bc7eSAndroid Build Coastguard WorkerJE_COMPILABLE([pthreads adaptive mutexes], [ 2079*1208bc7eSAndroid Build Coastguard Worker#include <pthread.h> 2080*1208bc7eSAndroid Build Coastguard Worker], [ 2081*1208bc7eSAndroid Build Coastguard Worker pthread_mutexattr_t attr; 2082*1208bc7eSAndroid Build Coastguard Worker pthread_mutexattr_init(&attr); 2083*1208bc7eSAndroid Build Coastguard Worker pthread_mutexattr_settype(&attr, PTHREAD_MUTEX_ADAPTIVE_NP); 2084*1208bc7eSAndroid Build Coastguard Worker pthread_mutexattr_destroy(&attr); 2085*1208bc7eSAndroid Build Coastguard Worker], [je_cv_pthread_mutex_adaptive_np]) 2086*1208bc7eSAndroid Build Coastguard Workerif test "x${je_cv_pthread_mutex_adaptive_np}" = "xyes" ; then 2087*1208bc7eSAndroid Build Coastguard Worker AC_DEFINE([JEMALLOC_HAVE_PTHREAD_MUTEX_ADAPTIVE_NP], [ ]) 2088*1208bc7eSAndroid Build Coastguard Workerfi 2089*1208bc7eSAndroid Build Coastguard Worker 2090*1208bc7eSAndroid Build Coastguard WorkerJE_CFLAGS_SAVE() 2091*1208bc7eSAndroid Build Coastguard WorkerJE_CFLAGS_ADD([-D_GNU_SOURCE]) 2092*1208bc7eSAndroid Build Coastguard WorkerJE_CFLAGS_ADD([-Werror]) 2093*1208bc7eSAndroid Build Coastguard WorkerJE_CFLAGS_ADD([-herror_on_warning]) 2094*1208bc7eSAndroid Build Coastguard WorkerJE_COMPILABLE([strerror_r returns char with gnu source], [ 2095*1208bc7eSAndroid Build Coastguard Worker#include <errno.h> 2096*1208bc7eSAndroid Build Coastguard Worker#include <stdio.h> 2097*1208bc7eSAndroid Build Coastguard Worker#include <stdlib.h> 2098*1208bc7eSAndroid Build Coastguard Worker#include <string.h> 2099*1208bc7eSAndroid Build Coastguard Worker], [ 2100*1208bc7eSAndroid Build Coastguard Worker char *buffer = (char *) malloc(100); 2101*1208bc7eSAndroid Build Coastguard Worker char *error = strerror_r(EINVAL, buffer, 100); 2102*1208bc7eSAndroid Build Coastguard Worker printf("%s\n", error); 2103*1208bc7eSAndroid Build Coastguard Worker], [je_cv_strerror_r_returns_char_with_gnu_source]) 2104*1208bc7eSAndroid Build Coastguard WorkerJE_CFLAGS_RESTORE() 2105*1208bc7eSAndroid Build Coastguard Workerif test "x${je_cv_strerror_r_returns_char_with_gnu_source}" = "xyes" ; then 2106*1208bc7eSAndroid Build Coastguard Worker AC_DEFINE([JEMALLOC_STRERROR_R_RETURNS_CHAR_WITH_GNU_SOURCE], [ ]) 2107*1208bc7eSAndroid Build Coastguard Workerfi 2108*1208bc7eSAndroid Build Coastguard Worker 2109*1208bc7eSAndroid Build Coastguard Workerdnl ============================================================================ 2110*1208bc7eSAndroid Build Coastguard Workerdnl Check for typedefs, structures, and compiler characteristics. 2111*1208bc7eSAndroid Build Coastguard WorkerAC_HEADER_STDBOOL 2112*1208bc7eSAndroid Build Coastguard Worker 2113*1208bc7eSAndroid Build Coastguard Workerdnl ============================================================================ 2114*1208bc7eSAndroid Build Coastguard Workerdnl Define commands that generate output files. 2115*1208bc7eSAndroid Build Coastguard Worker 2116*1208bc7eSAndroid Build Coastguard WorkerAC_CONFIG_COMMANDS([include/jemalloc/internal/public_symbols.txt], [ 2117*1208bc7eSAndroid Build Coastguard Worker f="${objroot}include/jemalloc/internal/public_symbols.txt" 2118*1208bc7eSAndroid Build Coastguard Worker mkdir -p "${objroot}include/jemalloc/internal" 2119*1208bc7eSAndroid Build Coastguard Worker cp /dev/null "${f}" 2120*1208bc7eSAndroid Build Coastguard Worker for nm in `echo ${mangling_map} |tr ',' ' '` ; do 2121*1208bc7eSAndroid Build Coastguard Worker n=`echo ${nm} |tr ':' ' ' |awk '{print $[]1}'` 2122*1208bc7eSAndroid Build Coastguard Worker m=`echo ${nm} |tr ':' ' ' |awk '{print $[]2}'` 2123*1208bc7eSAndroid Build Coastguard Worker echo "${n}:${m}" >> "${f}" 2124*1208bc7eSAndroid Build Coastguard Worker dnl Remove name from public_syms so that it isn't redefined later. 2125*1208bc7eSAndroid Build Coastguard Worker public_syms=`for sym in ${public_syms}; do echo "${sym}"; done |grep -v "^${n}\$" |tr '\n' ' '` 2126*1208bc7eSAndroid Build Coastguard Worker done 2127*1208bc7eSAndroid Build Coastguard Worker for sym in ${public_syms} ; do 2128*1208bc7eSAndroid Build Coastguard Worker n="${sym}" 2129*1208bc7eSAndroid Build Coastguard Worker m="${JEMALLOC_PREFIX}${sym}" 2130*1208bc7eSAndroid Build Coastguard Worker echo "${n}:${m}" >> "${f}" 2131*1208bc7eSAndroid Build Coastguard Worker done 2132*1208bc7eSAndroid Build Coastguard Worker], [ 2133*1208bc7eSAndroid Build Coastguard Worker srcdir="${srcdir}" 2134*1208bc7eSAndroid Build Coastguard Worker objroot="${objroot}" 2135*1208bc7eSAndroid Build Coastguard Worker mangling_map="${mangling_map}" 2136*1208bc7eSAndroid Build Coastguard Worker public_syms="${public_syms}" 2137*1208bc7eSAndroid Build Coastguard Worker JEMALLOC_PREFIX="${JEMALLOC_PREFIX}" 2138*1208bc7eSAndroid Build Coastguard Worker]) 2139*1208bc7eSAndroid Build Coastguard WorkerAC_CONFIG_COMMANDS([include/jemalloc/internal/private_symbols.awk], [ 2140*1208bc7eSAndroid Build Coastguard Worker f="${objroot}include/jemalloc/internal/private_symbols.awk" 2141*1208bc7eSAndroid Build Coastguard Worker mkdir -p "${objroot}include/jemalloc/internal" 2142*1208bc7eSAndroid Build Coastguard Worker export_syms=`for sym in ${public_syms}; do echo "${JEMALLOC_PREFIX}${sym}"; done; for sym in ${wrap_syms}; do echo "${sym}"; done;` 2143*1208bc7eSAndroid Build Coastguard Worker "${srcdir}/include/jemalloc/internal/private_symbols.sh" "${SYM_PREFIX}" ${export_syms} > "${objroot}include/jemalloc/internal/private_symbols.awk" 2144*1208bc7eSAndroid Build Coastguard Worker], [ 2145*1208bc7eSAndroid Build Coastguard Worker srcdir="${srcdir}" 2146*1208bc7eSAndroid Build Coastguard Worker objroot="${objroot}" 2147*1208bc7eSAndroid Build Coastguard Worker public_syms="${public_syms}" 2148*1208bc7eSAndroid Build Coastguard Worker wrap_syms="${wrap_syms}" 2149*1208bc7eSAndroid Build Coastguard Worker SYM_PREFIX="${SYM_PREFIX}" 2150*1208bc7eSAndroid Build Coastguard Worker JEMALLOC_PREFIX="${JEMALLOC_PREFIX}" 2151*1208bc7eSAndroid Build Coastguard Worker]) 2152*1208bc7eSAndroid Build Coastguard WorkerAC_CONFIG_COMMANDS([include/jemalloc/internal/private_symbols_jet.awk], [ 2153*1208bc7eSAndroid Build Coastguard Worker f="${objroot}include/jemalloc/internal/private_symbols_jet.awk" 2154*1208bc7eSAndroid Build Coastguard Worker mkdir -p "${objroot}include/jemalloc/internal" 2155*1208bc7eSAndroid Build Coastguard Worker export_syms=`for sym in ${public_syms}; do echo "jet_${sym}"; done; for sym in ${wrap_syms}; do echo "${sym}"; done;` 2156*1208bc7eSAndroid Build Coastguard Worker "${srcdir}/include/jemalloc/internal/private_symbols.sh" "${SYM_PREFIX}" ${export_syms} > "${objroot}include/jemalloc/internal/private_symbols_jet.awk" 2157*1208bc7eSAndroid Build Coastguard Worker], [ 2158*1208bc7eSAndroid Build Coastguard Worker srcdir="${srcdir}" 2159*1208bc7eSAndroid Build Coastguard Worker objroot="${objroot}" 2160*1208bc7eSAndroid Build Coastguard Worker public_syms="${public_syms}" 2161*1208bc7eSAndroid Build Coastguard Worker wrap_syms="${wrap_syms}" 2162*1208bc7eSAndroid Build Coastguard Worker SYM_PREFIX="${SYM_PREFIX}" 2163*1208bc7eSAndroid Build Coastguard Worker]) 2164*1208bc7eSAndroid Build Coastguard WorkerAC_CONFIG_COMMANDS([include/jemalloc/internal/public_namespace.h], [ 2165*1208bc7eSAndroid Build Coastguard Worker mkdir -p "${objroot}include/jemalloc/internal" 2166*1208bc7eSAndroid Build Coastguard Worker "${srcdir}/include/jemalloc/internal/public_namespace.sh" "${objroot}include/jemalloc/internal/public_symbols.txt" > "${objroot}include/jemalloc/internal/public_namespace.h" 2167*1208bc7eSAndroid Build Coastguard Worker], [ 2168*1208bc7eSAndroid Build Coastguard Worker srcdir="${srcdir}" 2169*1208bc7eSAndroid Build Coastguard Worker objroot="${objroot}" 2170*1208bc7eSAndroid Build Coastguard Worker]) 2171*1208bc7eSAndroid Build Coastguard WorkerAC_CONFIG_COMMANDS([include/jemalloc/internal/public_unnamespace.h], [ 2172*1208bc7eSAndroid Build Coastguard Worker mkdir -p "${objroot}include/jemalloc/internal" 2173*1208bc7eSAndroid Build Coastguard Worker "${srcdir}/include/jemalloc/internal/public_unnamespace.sh" "${objroot}include/jemalloc/internal/public_symbols.txt" > "${objroot}include/jemalloc/internal/public_unnamespace.h" 2174*1208bc7eSAndroid Build Coastguard Worker], [ 2175*1208bc7eSAndroid Build Coastguard Worker srcdir="${srcdir}" 2176*1208bc7eSAndroid Build Coastguard Worker objroot="${objroot}" 2177*1208bc7eSAndroid Build Coastguard Worker]) 2178*1208bc7eSAndroid Build Coastguard WorkerAC_CONFIG_COMMANDS([include/jemalloc/internal/size_classes.h], [ 2179*1208bc7eSAndroid Build Coastguard Worker mkdir -p "${objroot}include/jemalloc/internal" 2180*1208bc7eSAndroid Build Coastguard Worker "${SHELL}" "${srcdir}/include/jemalloc/internal/size_classes.sh" "${LG_QUANTA}" 3 "${LG_PAGE_SIZES}" 2 > "${objroot}include/jemalloc/internal/size_classes.h" 2181*1208bc7eSAndroid Build Coastguard Worker], [ 2182*1208bc7eSAndroid Build Coastguard Worker SHELL="${SHELL}" 2183*1208bc7eSAndroid Build Coastguard Worker srcdir="${srcdir}" 2184*1208bc7eSAndroid Build Coastguard Worker objroot="${objroot}" 2185*1208bc7eSAndroid Build Coastguard Worker LG_QUANTA="${LG_QUANTA}" 2186*1208bc7eSAndroid Build Coastguard Worker LG_PAGE_SIZES="${LG_PAGE_SIZES}" 2187*1208bc7eSAndroid Build Coastguard Worker]) 2188*1208bc7eSAndroid Build Coastguard WorkerAC_CONFIG_COMMANDS([include/jemalloc/jemalloc_protos_jet.h], [ 2189*1208bc7eSAndroid Build Coastguard Worker mkdir -p "${objroot}include/jemalloc" 2190*1208bc7eSAndroid Build Coastguard Worker cat "${srcdir}/include/jemalloc/jemalloc_protos.h.in" | sed -e 's/@je_@/jet_/g' > "${objroot}include/jemalloc/jemalloc_protos_jet.h" 2191*1208bc7eSAndroid Build Coastguard Worker], [ 2192*1208bc7eSAndroid Build Coastguard Worker srcdir="${srcdir}" 2193*1208bc7eSAndroid Build Coastguard Worker objroot="${objroot}" 2194*1208bc7eSAndroid Build Coastguard Worker]) 2195*1208bc7eSAndroid Build Coastguard WorkerAC_CONFIG_COMMANDS([include/jemalloc/jemalloc_rename.h], [ 2196*1208bc7eSAndroid Build Coastguard Worker mkdir -p "${objroot}include/jemalloc" 2197*1208bc7eSAndroid Build Coastguard Worker "${srcdir}/include/jemalloc/jemalloc_rename.sh" "${objroot}include/jemalloc/internal/public_symbols.txt" > "${objroot}include/jemalloc/jemalloc_rename.h" 2198*1208bc7eSAndroid Build Coastguard Worker], [ 2199*1208bc7eSAndroid Build Coastguard Worker srcdir="${srcdir}" 2200*1208bc7eSAndroid Build Coastguard Worker objroot="${objroot}" 2201*1208bc7eSAndroid Build Coastguard Worker]) 2202*1208bc7eSAndroid Build Coastguard WorkerAC_CONFIG_COMMANDS([include/jemalloc/jemalloc_mangle.h], [ 2203*1208bc7eSAndroid Build Coastguard Worker mkdir -p "${objroot}include/jemalloc" 2204*1208bc7eSAndroid Build Coastguard Worker "${srcdir}/include/jemalloc/jemalloc_mangle.sh" "${objroot}include/jemalloc/internal/public_symbols.txt" je_ > "${objroot}include/jemalloc/jemalloc_mangle.h" 2205*1208bc7eSAndroid Build Coastguard Worker], [ 2206*1208bc7eSAndroid Build Coastguard Worker srcdir="${srcdir}" 2207*1208bc7eSAndroid Build Coastguard Worker objroot="${objroot}" 2208*1208bc7eSAndroid Build Coastguard Worker]) 2209*1208bc7eSAndroid Build Coastguard WorkerAC_CONFIG_COMMANDS([include/jemalloc/jemalloc_mangle_jet.h], [ 2210*1208bc7eSAndroid Build Coastguard Worker mkdir -p "${objroot}include/jemalloc" 2211*1208bc7eSAndroid Build Coastguard Worker "${srcdir}/include/jemalloc/jemalloc_mangle.sh" "${objroot}include/jemalloc/internal/public_symbols.txt" jet_ > "${objroot}include/jemalloc/jemalloc_mangle_jet.h" 2212*1208bc7eSAndroid Build Coastguard Worker], [ 2213*1208bc7eSAndroid Build Coastguard Worker srcdir="${srcdir}" 2214*1208bc7eSAndroid Build Coastguard Worker objroot="${objroot}" 2215*1208bc7eSAndroid Build Coastguard Worker]) 2216*1208bc7eSAndroid Build Coastguard WorkerAC_CONFIG_COMMANDS([include/jemalloc/jemalloc.h], [ 2217*1208bc7eSAndroid Build Coastguard Worker mkdir -p "${objroot}include/jemalloc" 2218*1208bc7eSAndroid Build Coastguard Worker "${srcdir}/include/jemalloc/jemalloc.sh" "${objroot}" > "${objroot}include/jemalloc/jemalloc${install_suffix}.h" 2219*1208bc7eSAndroid Build Coastguard Worker], [ 2220*1208bc7eSAndroid Build Coastguard Worker srcdir="${srcdir}" 2221*1208bc7eSAndroid Build Coastguard Worker objroot="${objroot}" 2222*1208bc7eSAndroid Build Coastguard Worker install_suffix="${install_suffix}" 2223*1208bc7eSAndroid Build Coastguard Worker]) 2224*1208bc7eSAndroid Build Coastguard Worker 2225*1208bc7eSAndroid Build Coastguard Workerdnl Process .in files. 2226*1208bc7eSAndroid Build Coastguard WorkerAC_SUBST([cfghdrs_in]) 2227*1208bc7eSAndroid Build Coastguard WorkerAC_SUBST([cfghdrs_out]) 2228*1208bc7eSAndroid Build Coastguard WorkerAC_CONFIG_HEADERS([$cfghdrs_tup]) 2229*1208bc7eSAndroid Build Coastguard Worker 2230*1208bc7eSAndroid Build Coastguard Workerdnl ============================================================================ 2231*1208bc7eSAndroid Build Coastguard Workerdnl Generate outputs. 2232*1208bc7eSAndroid Build Coastguard Worker 2233*1208bc7eSAndroid Build Coastguard WorkerAC_CONFIG_FILES([$cfgoutputs_tup config.stamp bin/jemalloc-config bin/jemalloc.sh bin/jeprof]) 2234*1208bc7eSAndroid Build Coastguard WorkerAC_SUBST([cfgoutputs_in]) 2235*1208bc7eSAndroid Build Coastguard WorkerAC_SUBST([cfgoutputs_out]) 2236*1208bc7eSAndroid Build Coastguard WorkerAC_OUTPUT 2237*1208bc7eSAndroid Build Coastguard Worker 2238*1208bc7eSAndroid Build Coastguard Workerdnl ============================================================================ 2239*1208bc7eSAndroid Build Coastguard Workerdnl Print out the results of configuration. 2240*1208bc7eSAndroid Build Coastguard WorkerAC_MSG_RESULT([===============================================================================]) 2241*1208bc7eSAndroid Build Coastguard WorkerAC_MSG_RESULT([jemalloc version : ${jemalloc_version}]) 2242*1208bc7eSAndroid Build Coastguard WorkerAC_MSG_RESULT([library revision : ${rev}]) 2243*1208bc7eSAndroid Build Coastguard WorkerAC_MSG_RESULT([]) 2244*1208bc7eSAndroid Build Coastguard WorkerAC_MSG_RESULT([CONFIG : ${CONFIG}]) 2245*1208bc7eSAndroid Build Coastguard WorkerAC_MSG_RESULT([CC : ${CC}]) 2246*1208bc7eSAndroid Build Coastguard WorkerAC_MSG_RESULT([CONFIGURE_CFLAGS : ${CONFIGURE_CFLAGS}]) 2247*1208bc7eSAndroid Build Coastguard WorkerAC_MSG_RESULT([SPECIFIED_CFLAGS : ${SPECIFIED_CFLAGS}]) 2248*1208bc7eSAndroid Build Coastguard WorkerAC_MSG_RESULT([EXTRA_CFLAGS : ${EXTRA_CFLAGS}]) 2249*1208bc7eSAndroid Build Coastguard WorkerAC_MSG_RESULT([CPPFLAGS : ${CPPFLAGS}]) 2250*1208bc7eSAndroid Build Coastguard WorkerAC_MSG_RESULT([CXX : ${CXX}]) 2251*1208bc7eSAndroid Build Coastguard WorkerAC_MSG_RESULT([CONFIGURE_CXXFLAGS : ${CONFIGURE_CXXFLAGS}]) 2252*1208bc7eSAndroid Build Coastguard WorkerAC_MSG_RESULT([SPECIFIED_CXXFLAGS : ${SPECIFIED_CXXFLAGS}]) 2253*1208bc7eSAndroid Build Coastguard WorkerAC_MSG_RESULT([EXTRA_CXXFLAGS : ${EXTRA_CXXFLAGS}]) 2254*1208bc7eSAndroid Build Coastguard WorkerAC_MSG_RESULT([LDFLAGS : ${LDFLAGS}]) 2255*1208bc7eSAndroid Build Coastguard WorkerAC_MSG_RESULT([EXTRA_LDFLAGS : ${EXTRA_LDFLAGS}]) 2256*1208bc7eSAndroid Build Coastguard WorkerAC_MSG_RESULT([DSO_LDFLAGS : ${DSO_LDFLAGS}]) 2257*1208bc7eSAndroid Build Coastguard WorkerAC_MSG_RESULT([LIBS : ${LIBS}]) 2258*1208bc7eSAndroid Build Coastguard WorkerAC_MSG_RESULT([RPATH_EXTRA : ${RPATH_EXTRA}]) 2259*1208bc7eSAndroid Build Coastguard WorkerAC_MSG_RESULT([]) 2260*1208bc7eSAndroid Build Coastguard WorkerAC_MSG_RESULT([XSLTPROC : ${XSLTPROC}]) 2261*1208bc7eSAndroid Build Coastguard WorkerAC_MSG_RESULT([XSLROOT : ${XSLROOT}]) 2262*1208bc7eSAndroid Build Coastguard WorkerAC_MSG_RESULT([]) 2263*1208bc7eSAndroid Build Coastguard WorkerAC_MSG_RESULT([PREFIX : ${PREFIX}]) 2264*1208bc7eSAndroid Build Coastguard WorkerAC_MSG_RESULT([BINDIR : ${BINDIR}]) 2265*1208bc7eSAndroid Build Coastguard WorkerAC_MSG_RESULT([DATADIR : ${DATADIR}]) 2266*1208bc7eSAndroid Build Coastguard WorkerAC_MSG_RESULT([INCLUDEDIR : ${INCLUDEDIR}]) 2267*1208bc7eSAndroid Build Coastguard WorkerAC_MSG_RESULT([LIBDIR : ${LIBDIR}]) 2268*1208bc7eSAndroid Build Coastguard WorkerAC_MSG_RESULT([MANDIR : ${MANDIR}]) 2269*1208bc7eSAndroid Build Coastguard WorkerAC_MSG_RESULT([]) 2270*1208bc7eSAndroid Build Coastguard WorkerAC_MSG_RESULT([srcroot : ${srcroot}]) 2271*1208bc7eSAndroid Build Coastguard WorkerAC_MSG_RESULT([abs_srcroot : ${abs_srcroot}]) 2272*1208bc7eSAndroid Build Coastguard WorkerAC_MSG_RESULT([objroot : ${objroot}]) 2273*1208bc7eSAndroid Build Coastguard WorkerAC_MSG_RESULT([abs_objroot : ${abs_objroot}]) 2274*1208bc7eSAndroid Build Coastguard WorkerAC_MSG_RESULT([]) 2275*1208bc7eSAndroid Build Coastguard WorkerAC_MSG_RESULT([JEMALLOC_PREFIX : ${JEMALLOC_PREFIX}]) 2276*1208bc7eSAndroid Build Coastguard WorkerAC_MSG_RESULT([JEMALLOC_PRIVATE_NAMESPACE]) 2277*1208bc7eSAndroid Build Coastguard WorkerAC_MSG_RESULT([ : ${JEMALLOC_PRIVATE_NAMESPACE}]) 2278*1208bc7eSAndroid Build Coastguard WorkerAC_MSG_RESULT([install_suffix : ${install_suffix}]) 2279*1208bc7eSAndroid Build Coastguard WorkerAC_MSG_RESULT([malloc_conf : ${config_malloc_conf}]) 2280*1208bc7eSAndroid Build Coastguard WorkerAC_MSG_RESULT([autogen : ${enable_autogen}]) 2281*1208bc7eSAndroid Build Coastguard WorkerAC_MSG_RESULT([debug : ${enable_debug}]) 2282*1208bc7eSAndroid Build Coastguard WorkerAC_MSG_RESULT([stats : ${enable_stats}]) 2283*1208bc7eSAndroid Build Coastguard WorkerAC_MSG_RESULT([prof : ${enable_prof}]) 2284*1208bc7eSAndroid Build Coastguard WorkerAC_MSG_RESULT([prof-libunwind : ${enable_prof_libunwind}]) 2285*1208bc7eSAndroid Build Coastguard WorkerAC_MSG_RESULT([prof-libgcc : ${enable_prof_libgcc}]) 2286*1208bc7eSAndroid Build Coastguard WorkerAC_MSG_RESULT([prof-gcc : ${enable_prof_gcc}]) 2287*1208bc7eSAndroid Build Coastguard WorkerAC_MSG_RESULT([fill : ${enable_fill}]) 2288*1208bc7eSAndroid Build Coastguard WorkerAC_MSG_RESULT([utrace : ${enable_utrace}]) 2289*1208bc7eSAndroid Build Coastguard WorkerAC_MSG_RESULT([xmalloc : ${enable_xmalloc}]) 2290*1208bc7eSAndroid Build Coastguard WorkerAC_MSG_RESULT([log : ${enable_log}]) 2291*1208bc7eSAndroid Build Coastguard WorkerAC_MSG_RESULT([lazy_lock : ${enable_lazy_lock}]) 2292*1208bc7eSAndroid Build Coastguard WorkerAC_MSG_RESULT([cache-oblivious : ${enable_cache_oblivious}]) 2293*1208bc7eSAndroid Build Coastguard WorkerAC_MSG_RESULT([cxx : ${enable_cxx}]) 2294*1208bc7eSAndroid Build Coastguard WorkerAC_MSG_RESULT([===============================================================================]) 2295