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