diff options
author | Eric Wong <normalperson@yhbt.net> | 2013-03-08 10:21:38 +0000 |
---|---|---|
committer | Eric Wong <normalperson@yhbt.net> | 2013-03-08 10:21:38 +0000 |
commit | cce7f3c33207c534f9e5a6c0cb389a97df21235b (patch) | |
tree | 7a1d91bd6cd389a239e06d00c3b4d71e8295b07c | |
parent | 08b8d7f1e5101631f642134718871dd2ef24c1e5 (diff) | |
download | cmogstored-cce7f3c33207c534f9e5a6c0cb389a97df21235b.tar.gz |
Andrey Okunev noted undefined references on the MogileFS mailing list when building cmogstored 1.2.1 on his 32-bit CentOS5 machine.
-rw-r--r-- | Makefile.am | 2 | ||||
-rw-r--r-- | configure.ac | 1 | ||||
-rw-r--r-- | m4/gcc_atomics.m4 | 40 |
3 files changed, 42 insertions, 1 deletions
diff --git a/Makefile.am b/Makefile.am index 6fa520c..4c9f19a 100644 --- a/Makefile.am +++ b/Makefile.am @@ -1,6 +1,6 @@ ACLOCAL_AMFLAGS = -I m4 AM_CPPFLAGS = -I$(top_builddir)/lib -I$(top_srcdir)/lib -AM_CFLAGS = $(WARN_CFLAGS) $(PTHREAD_CFLAGS) +AM_CFLAGS = $(WARN_CFLAGS) $(GCC_ATOMICS_CFLAGS) $(PTHREAD_CFLAGS) AM_LDFLAGS = $(LIBGNU_LIBDEPS) $(LIB_CLOCK_GETTIME) SUBDIRS = lib diff --git a/configure.ac b/configure.ac index 08cab08..adb37f3 100644 --- a/configure.ac +++ b/configure.ac @@ -28,6 +28,7 @@ gl_WARN_ADD([-Werror-implicit-function-declaration]) gl_WARN_ADD([-Werror=declaration-after-statement]) dnl I hate C99 for this :P gl_WARN_ADD([-ggdb3],[CFLAGS]) AX_PTHREAD(true) +CM_GCC_ATOMICS(true) AC_SYS_LARGEFILE AC_C_FLEXIBLE_ARRAY_MEMBER diff --git a/m4/gcc_atomics.m4 b/m4/gcc_atomics.m4 new file mode 100644 index 0000000..b55ffc4 --- /dev/null +++ b/m4/gcc_atomics.m4 @@ -0,0 +1,40 @@ +dnl test for _all_ the GCC atomic builtins we use +dnl we need to test for CMPXCHG in particular since i386-only targets lack it +dnl even though other atomics may be available +AC_DEFUN([CM_GCC_ATOMICS],[ +AC_REQUIRE([AC_CANONICAL_HOST]) +AC_LANG_PUSH([C]) +AS_CASE([$host_cpu], [[i[3456]86]], [ + AC_CACHE_CHECK([for GCC atomic builtins], + [cm_cv_gcc_atomics], [ + AC_TRY_LINK([unsigned long a = 0;], [ + __sync_bool_compare_and_swap(&a, 0, 1); + __sync_add_and_fetch(&a, 1); + __sync_sub_and_fetch(&a, 1) + ], + [cm_cv_gcc_atomics=yes], + [cm_cv_gcc_atomics=no])]) + dnl try not to add -march=i486 unless we are certain it is needed + AS_CASE([$cm_cv_gcc_atomics], [[no]], [ + unset cm_cv_gcc_atomics + save_CFLAGS="$CFLAGS" + CFLAGS="$CFLAGS -march=i486" + AC_CACHE_CHECK([for GCC atomic builtins with -march=i486], + [cm_cv_gcc_atomics], [ + AC_TRY_LINK([unsigned long a = 0;], [ + __sync_bool_compare_and_swap(&a, 0, 1); + __sync_add_and_fetch(&a, 1); + __sync_sub_and_fetch(&a, 1) + ], [ + cm_cv_gcc_atomics=yes + GCC_ATOMICS_CFLAGS=-march=i486 + ], + [cm_cv_gcc_atomics=no])]) + CFLAGS="$save_CFLAGS" + ]) + AS_CASE([$cm_cv_gcc_atomics],[[no]], + [AC_MSG_ERROR([GCC atomic builtins not available])]) +AC_SUBST(GCC_ATOMICS_CFLAGS) +]) +AC_LANG_POP +]) dnl CM_GCC_ATOMICS |