Check for __builtin_ffsl before ffsl.
When building with -O0, GCC doesn't use builtins for ffs and ffsl calls, and uses library function calls instead. But the Android NDK doesn't have those functions exported from any library, leading to build failure. However, using __builtin_ffs* uses the builtin inlines.
This commit is contained in:
parent
994fad9bda
commit
1a3eafd1b0
27
configure.ac
27
configure.ac
@ -1109,43 +1109,44 @@ elif test "x${force_tls}" = "x1" ; then
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
dnl ============================================================================
|
dnl ============================================================================
|
||||||
dnl Check for ffsl(3), then __builtin_ffsl(), and fail if neither are found.
|
dnl Check for __builtin_ffsl(), then ffsl(3), and fail if neither are found.
|
||||||
dnl One of those two functions should (theoretically) exist on all platforms
|
dnl One of those two functions should (theoretically) exist on all platforms
|
||||||
dnl that jemalloc currently has a chance of functioning on without modification.
|
dnl that jemalloc currently has a chance of functioning on without modification.
|
||||||
dnl We additionally assume ffs() or __builtin_ffs() are defined if
|
dnl We additionally assume ffs() or __builtin_ffs() are defined if
|
||||||
dnl ffsl() or __builtin_ffsl() are defined, respectively.
|
dnl ffsl() or __builtin_ffsl() are defined, respectively.
|
||||||
JE_COMPILABLE([a program using ffsl], [
|
JE_COMPILABLE([a program using __builtin_ffsl], [
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <strings.h>
|
#include <strings.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
], [
|
], [
|
||||||
{
|
{
|
||||||
int rv = ffsl(0x08);
|
int rv = __builtin_ffsl(0x08);
|
||||||
printf("%d\n", rv);
|
printf("%d\n", rv);
|
||||||
}
|
}
|
||||||
], [je_cv_function_ffsl])
|
], [je_cv_gcc_builtin_ffsl])
|
||||||
if test "x${je_cv_function_ffsl}" == "xyes" ; then
|
if test "x${je_cv_gcc_builtin_ffsl}" == "xyes" ; then
|
||||||
AC_DEFINE([JEMALLOC_INTERNAL_FFSL], [ffsl])
|
AC_DEFINE([JEMALLOC_INTERNAL_FFSL], [__builtin_ffsl])
|
||||||
AC_DEFINE([JEMALLOC_INTERNAL_FFS], [ffs])
|
AC_DEFINE([JEMALLOC_INTERNAL_FFS], [__builtin_ffs])
|
||||||
else
|
else
|
||||||
JE_COMPILABLE([a program using __builtin_ffsl], [
|
JE_COMPILABLE([a program using ffsl], [
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <strings.h>
|
#include <strings.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
], [
|
], [
|
||||||
{
|
{
|
||||||
int rv = __builtin_ffsl(0x08);
|
int rv = ffsl(0x08);
|
||||||
printf("%d\n", rv);
|
printf("%d\n", rv);
|
||||||
}
|
}
|
||||||
], [je_cv_gcc_builtin_ffsl])
|
], [je_cv_function_ffsl])
|
||||||
if test "x${je_cv_gcc_builtin_ffsl}" == "xyes" ; then
|
if test "x${je_cv_function_ffsl}" == "xyes" ; then
|
||||||
AC_DEFINE([JEMALLOC_INTERNAL_FFSL], [__builtin_ffsl])
|
AC_DEFINE([JEMALLOC_INTERNAL_FFSL], [ffsl])
|
||||||
AC_DEFINE([JEMALLOC_INTERNAL_FFS], [__builtin_ffs])
|
AC_DEFINE([JEMALLOC_INTERNAL_FFS], [ffs])
|
||||||
else
|
else
|
||||||
AC_MSG_ERROR([Cannot build without ffsl(3) or __builtin_ffsl()])
|
AC_MSG_ERROR([Cannot build without ffsl(3) or __builtin_ffsl()])
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
|
||||||
dnl ============================================================================
|
dnl ============================================================================
|
||||||
dnl Check for atomic(9) operations as provided on FreeBSD.
|
dnl Check for atomic(9) operations as provided on FreeBSD.
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user