Allow override for unaligned reads in SpookyHashV2
[folly.git] / folly / configure.ac
index 0a2b10a9fa591794038b501369aad995dd386fb5..a60af3c5b5c5715ea4807deb3fd07695cf564c60 100644 (file)
@@ -107,13 +107,14 @@ AC_CHECK_LIB(ssl,
 
 # check for boost libs
 AX_BOOST_BASE([1.51.0], [], [AC_MSG_ERROR(
-              [Please install boost >= 1.51.0 (context, thread, program_options, regex, and system)])])
+              [Please install boost >= 1.51.0 (context, thread, program_options, regex, system and chrono)])])
 AX_BOOST_CONTEXT
 AX_BOOST_PROGRAM_OPTIONS
 AX_BOOST_THREAD
 AX_BOOST_REGEX
 AX_BOOST_SYSTEM
 AX_BOOST_FILESYSTEM
+AX_BOOST_CHRONO
 
 # Check for python interpreter
 AM_PATH_PYTHON
@@ -231,6 +232,26 @@ if test "$folly_cv_lib_libcpp" = yes; then
   AC_DEFINE([USE_LIBCPP], [1], [Define to 1 if we are using libc++.])
 fi
 
+AC_CACHE_CHECK(
+  [for c++11 atomic support without GNU Atomic library],
+  [folly_cv_lib_libatomic],
+  [AC_LINK_IFELSE(
+    [AC_LANG_SOURCE[
+      #include <atomic>
+      int main() {
+        struct Test { int val; };
+        std::atomic<Test> s;
+        s.is_lock_free();
+      }
+    ]],
+    [folly_cv_lib_libatomic=yes],
+    [folly_cv_lib_libatomic=no])])
+
+if test "$folly_cv_lib_libatomic" = no; then
+  AC_HAVE_LIBRARY([atomic],[],[AC_MSG_ERROR(
+                  [Please install the GNU Atomic library])])
+fi
+
 AC_CACHE_CHECK(
   [for usable std::is_trivially_copyable],
   [folly_cv_decl_std_is_trivially_copyable],
@@ -296,6 +317,26 @@ if test "$folly_cv_prog_cc_weak_symbols" = yes; then
             [Define to 1 if the linker supports weak symbols.])
 fi
 
+# Figure out whether the architecture supports unaligned reads
+AC_CACHE_CHECK(
+  [for unaligned reads support],
+  [folly_cv_prog_cc_unaligned_reads],
+  [AC_RUN_IFELSE(
+    [AC_LANG_SOURCE[
+      int main(int argc, char** argv) {
+        char buf[64] = {0};
+        unsigned long *ptr = (unsigned long *)(buf + 1);
+        *ptr = 0xdeadbeef;
+        return (*ptr & 0xff) == 0xef ? 0 : 1;
+      }
+    ]],
+    [folly_cv_prog_cc_unaligned_reads=yes],
+    [folly_cv_prog_cc_unaligned_reads=no])])
+
+if test "$folly_cv_prog_cc_unaligned_reads" = "yes"; then
+  AC_DEFINE([HAVE_UNALIGNED_READS], [1], [Define to 1 if the architecture allows unaligned reads])
+fi
+
 AC_CACHE_CHECK(
   [for vsnprintf reporting bad format strings],
   [folly_cv_prog_vsnprintf_bad_format],
@@ -426,6 +467,7 @@ AC_CHECK_HEADER([lz4.h], AC_CHECK_LIB([lz4], [LZ4_decompress_safe]))
 AC_CHECK_HEADER([snappy.h], AC_CHECK_LIB([snappy], [main]))
 AC_CHECK_HEADER([zlib.h], AC_CHECK_LIB([z], [main]))
 AC_CHECK_HEADER([lzma.h], AC_CHECK_LIB([lzma], [main]))
+AC_CHECK_HEADER([zstd.h], AC_CHECK_LIB([zstd], [main]))
 
 # Include directory that contains "folly" so #include <folly/Foo.h> works
 AM_CPPFLAGS='-I$(top_srcdir)/..'
@@ -433,6 +475,7 @@ AM_CPPFLAGS="$AM_CPPFLAGS $BOOST_CPPFLAGS"
 AM_LDFLAGS="$AM_LDFLAGS $BOOST_CONTEXT_LIB $BOOST_PROGRAM_OPTIONS_LIB"
 AM_LDFLAGS="$AM_LDFLAGS $BOOST_THREAD_LIB $BOOST_FILESYSTEM_LIB"
 AM_LDFLAGS="$AM_LDFLAGS $BOOST_SYSTEM_LIB $BOOST_REGEX_LIB -lpthread"
+AM_LDFLAGS="$AM_LDFLAGS $BOOST_CHRONO_LIB"
 
 AC_SUBST([AM_CPPFLAGS])
 AC_SUBST([AM_LDFLAGS])