configure.ac raw

   1  AC_INIT([minisketch], [0.0.1], [http://github.com/bitcoin-core/minisketch/])
   2  
   3  m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([yes])])
   4  
   5  AC_PREREQ(2.60)
   6  AC_CONFIG_SRCDIR([src/minisketch.cpp])
   7  AC_CONFIG_AUX_DIR([build-aux])
   8  AC_CONFIG_MACRO_DIR([build-aux/m4])
   9  AM_INIT_AUTOMAKE([subdir-objects foreign])
  10  
  11  LT_INIT
  12  LT_LANG([C++])
  13  AC_LANG([C++])
  14  
  15  AC_PATH_PROG(CCACHE,ccache)
  16  
  17  AC_ARG_ENABLE([ccache],
  18    [AS_HELP_STRING([--disable-ccache],
  19    [do not use ccache for building (default is to use if found)])],
  20    [use_ccache=$enableval],
  21    [use_ccache=auto])
  22  
  23  AC_ARG_ENABLE(tests,
  24      AS_HELP_STRING([--enable-tests],[compile tests (default is yes)]),
  25      [use_tests=$enableval],
  26      [use_tests=yes])
  27  
  28  AC_ARG_ENABLE(benchmark,
  29      AS_HELP_STRING([--enable-benchmark],[compile benchmark (default is no)]),
  30      [use_benchmark=$enableval],
  31      [use_benchmark=no])
  32  
  33  m4_define([SUPPORTED_FIELDS], [2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64])
  34  
  35  AC_MSG_CHECKING([which field sizes to build])
  36  AC_ARG_ENABLE([fields], AS_HELP_STRING([--enable-fields=LIST], [Comma-separated list of field sizes to build. Default=all. Available sizes:] m4_translit(m4_defn([SUPPORTED_FIELDS]), [,], [ ])), [], [enable_fields=SUPPORTED_FIELDS])
  37  have_disabled_fields=no
  38  have_enabled_fields=no
  39  m4_foreach([FIELD], [SUPPORTED_FIELDS], [
  40      case ",$enable_fields," in
  41      *,FIELD,*)
  42          have_enabled_fields=yes
  43          ;;
  44      *)
  45          AC_DEFINE(DISABLE_FIELD_[]FIELD, [1],
  46          [Define to 1 to remove support for field size] FIELD [.])
  47          have_disabled_fields=yes
  48          ;;
  49      esac
  50  ])
  51  AC_MSG_RESULT([$enable_fields])
  52  if test "x$have_enabled_fields" = xno; then
  53      AC_MSG_ERROR([No field sizes are enabled.])
  54  fi
  55  
  56  AX_CHECK_COMPILE_FLAG([-Werror],[CXXFLAG_WERROR="-Werror"],[CXXFLAG_WERROR=""])
  57  
  58  AX_CXX_COMPILE_STDCXX([11], [noext], [mandatory])
  59  enable_clmul=
  60  AX_CHECK_COMPILE_FLAG([-mpclmul],[[enable_clmul=yes]],,[[$CXXFLAG_WERROR]],[AC_LANG_PROGRAM([
  61    #include <stdint.h>
  62    #include <x86intrin.h>
  63  ], [
  64    __m128i a = _mm_cvtsi64_si128((uint64_t)7);
  65    __m128i b = _mm_clmulepi64_si128(a, a, 37);
  66    __m128i c = _mm_srli_epi64(b, 41);
  67    __m128i d = _mm_xor_si128(b, c);
  68    uint64_t e = _mm_cvtsi128_si64(d);
  69    return e == 0;
  70  ])])
  71  if test x$enable_clmul = xyes; then
  72    CLMUL_CXXFLAGS="-mpclmul"
  73    AC_DEFINE(HAVE_CLMUL, 1, [Define this symbol if clmul instructions can be used])
  74  fi
  75  
  76  
  77  AC_MSG_CHECKING(for working clz builtins)
  78  AC_COMPILE_IFELSE([AC_LANG_PROGRAM([], [
  79    unsigned a = __builtin_clz(1);
  80    unsigned long b = __builtin_clzl(1);
  81    unsigned long long c = __builtin_clzll(1);
  82    ])],
  83    [
  84      AC_DEFINE(HAVE_CLZ, 1, [Define this symbol if clz builtins are present and working])
  85      AC_MSG_RESULT(yes)
  86    ],[
  87      AC_MSG_RESULT(no)
  88    ]
  89  )
  90  
  91  AX_CHECK_LINK_FLAG([[-Wl,--exclude-libs,ALL]],[LDFLAGS="-Wl,--exclude-libs,ALL $LDFLAGS"])
  92  
  93  case $host in
  94    *mingw*)
  95       dnl -static is interpreted by libtool, where it has a different meaning.
  96       dnl In libtool-speak, it's -all-static.
  97       AX_CHECK_LINK_FLAG([[-static]],[LIBTOOL_APP_LDFLAGS="$LIBTOOL_APP_LDFLAGS -all-static"])
  98       ;;
  99    *)
 100       AX_CHECK_LINK_FLAG([[-static]],[LIBTOOL_APP_LDFLAGS="-static"])
 101       ;;
 102  esac
 103  
 104  AX_CHECK_COMPILE_FLAG([-Wall],[WARN_CXXFLAGS="$WARN_CXXFLAGS -Wall"],,[[$CXXFLAG_WERROR]])
 105  AX_CHECK_COMPILE_FLAG([-Wundef], [WARN_CXXFLAGS="$WARN_CXXFLAGS -Wundef"], [], [$CXXFLAG_WERROR])
 106  AX_CHECK_COMPILE_FLAG([-fvisibility=hidden],[CXXFLAGS="$CXXFLAGS -fvisibility=hidden"],[],[$CXXFLAG_WERROR])
 107  
 108  if test "x$use_ccache" != "xno"; then
 109    AC_MSG_CHECKING(if ccache should be used)
 110    if test x$CCACHE = x; then
 111      if test "x$use_ccache" = "xyes"; then
 112        AC_MSG_ERROR([ccache not found.]);
 113      else
 114        use_ccache=no
 115      fi
 116    else
 117      use_ccache=yes
 118      CXX="$ac_cv_path_CCACHE $CXX"
 119    fi
 120    AC_MSG_RESULT($use_ccache)
 121  fi
 122  
 123  VERIFY_DEFINES=-DMINISKETCH_VERIFY
 124  RELEASE_DEFINES=
 125  
 126  AC_CONFIG_FILES([
 127      Makefile
 128  ])
 129  
 130  AC_SUBST(CLMUL_CXXFLAGS)
 131  AC_SUBST(WARN_CXXFLAGS)
 132  AC_SUBST(NOWARN_CXXFLAGS)
 133  AC_SUBST(VERIFY_DEFINES)
 134  AC_SUBST(RELEASE_DEFINES)
 135  AC_SUBST(LIBTOOL_APP_LDFLAGS)
 136  AM_CONDITIONAL([ENABLE_CLMUL],[test x$enable_clmul = xyes])
 137  AM_CONDITIONAL([USE_BENCHMARK], [test x"$use_benchmark" = x"yes"])
 138  AM_CONDITIONAL([USE_TESTS], [test x"$use_tests" != x"no"])
 139  AC_OUTPUT
 140  
 141  echo
 142  echo "Build Options:"
 143  echo "  with benchmarks         = $use_benchmark"
 144  echo "  with tests              = $use_tests"
 145  echo "  enable clmul fields     = $enable_clmul"
 146  echo "  CXX                     = $CXX"
 147  echo "  CXXFLAGS                = $CXXFLAGS"
 148  echo "  CPPFLAGS                = $CPPFLAGS"
 149  echo "  LDFLAGS                 = $LDFLAGS"
 150  if test "$have_disabled_fields" = "yes"; then
 151  echo
 152  echo "Only compiling in support for field sizes: $enable_fields"
 153  echo "WARNING: this means the library will lack support for other field sizes entirely"
 154  fi
 155