]> Git Repo - secp256k1.git/blame - configure.ac
Merge #214: Improve signing API documentation & specification
[secp256k1.git] / configure.ac
CommitLineData
78cd96b1
CF
1AC_PREREQ([2.60])
2AC_INIT([libsecp256k1],[0.1])
6fac238f 3AC_CONFIG_AUX_DIR([build-aux])
4AC_CONFIG_MACRO_DIR([build-aux/m4])
78cd96b1
CF
5AC_CANONICAL_HOST
6AH_TOP([#ifndef LIBSECP256K1_CONFIG_H])
7AH_TOP([#define LIBSECP256K1_CONFIG_H])
f735446c 8AH_BOTTOM([#endif /*LIBSECP256K1_CONFIG_H*/])
5190079e 9AM_INIT_AUTOMAKE([foreign subdir-objects])
78cd96b1
CF
10LT_INIT
11
53628757
CF
12dnl make the compilation flags quiet unless V=1 is used
13m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([yes])])
14
78cd96b1
CF
15PKG_PROG_PKG_CONFIG
16
3ab1178d
CF
17AC_PATH_TOOL(AR, ar)
18AC_PATH_TOOL(RANLIB, ranlib)
19AC_PATH_TOOL(STRIP, strip)
20
056ad310 21if test "x$CFLAGS" = "x"; then
c88e2b8c
PW
22 CFLAGS="-O3 -g"
23fi
24
f735446c
GM
25AC_PROG_CC_C89
26if test x"$ac_cv_prog_cc_c89" = x"no"; then
27 AC_MSG_ERROR([c89 compiler support required])
78cd96b1
CF
28fi
29
30case $host in
31 *mingw*)
32 use_pkgconfig=no
33 ;;
34 *)
35 use_pkgconfig=yes
36 ;;
37esac
38
a86f241d 39case $host_os in
e2274c58
CF
40 *darwin*)
41 if test x$cross_compiling != xyes; then
42 AC_PATH_PROG([BREW],brew,)
43 if test x$BREW != x; then
44 dnl These Homebrew packages may be keg-only, meaning that they won't be found
45 dnl in expected paths because they may conflict with system files. Ask
46 dnl Homebrew where each one is located, then adjust paths accordingly.
47
48 openssl_prefix=`$BREW --prefix openssl 2>/dev/null`
49 gmp_prefix=`$BREW --prefix gmp 2>/dev/null`
50 if test x$openssl_prefix != x; then
51 PKG_CONFIG_PATH="$openssl_prefix/lib/pkgconfig:$PKG_CONFIG_PATH"
52 export PKG_CONFIG_PATH
53 fi
54 if test x$gmp_prefix != x; then
55 GMP_CPPFLAGS="-I$gmp_prefix/include"
56 GMP_LIBS="-L$gmp_prefix/lib"
57 fi
58 else
59 AC_PATH_PROG([PORT],port,)
60 dnl if homebrew isn't installed and macports is, add the macports default paths
61 dnl as a last resort.
62 if test x$PORT != x; then
63 CPPFLAGS="$CPPFLAGS -isystem /opt/local/include"
64 LDFLAGS="$LDFLAGS -L/opt/local/lib"
65 fi
66 fi
67 fi
68 ;;
a86f241d
PD
69esac
70
a099073a
GM
71CFLAGS="$CFLAGS -W"
72
f735446c 73warn_CFLAGS="-std=c89 -pedantic -Wall -Wextra -Wcast-align -Wnested-externs -Wshadow -Wstrict-prototypes -Wno-unused-function -Wno-long-long"
a099073a
GM
74saved_CFLAGS="$CFLAGS"
75CFLAGS="$CFLAGS $warn_CFLAGS"
76AC_MSG_CHECKING([if ${CC} supports ${warn_CFLAGS}])
77AC_COMPILE_IFELSE([AC_LANG_SOURCE([[char foo;]])],
78 [ AC_MSG_RESULT([yes]) ],
79 [ AC_MSG_RESULT([no])
80 CFLAGS="$saved_CFLAGS"
81 ])
82
83
78cd96b1 84AC_ARG_ENABLE(benchmark,
8336040f 85 AS_HELP_STRING([--enable-benchmark],[compile benchmark (default is no)]),
78cd96b1 86 [use_benchmark=$enableval],
8336040f 87 [use_benchmark=no])
78cd96b1
CF
88
89AC_ARG_ENABLE(tests,
90 AS_HELP_STRING([--enable-tests],[compile tests (default is yes)]),
91 [use_tests=$enableval],
92 [use_tests=yes])
93
94AC_ARG_ENABLE(endomorphism,
0e9baf6f 95 AS_HELP_STRING([--enable-endomorphism],[enable endomorphism (default is no)]),
78cd96b1 96 [use_endomorphism=$enableval],
0e9baf6f 97 [use_endomorphism=no])
78cd96b1 98
7277fd76 99AC_ARG_WITH([field], [AS_HELP_STRING([--with-field=64bit|32bit|auto],
0e9baf6f 100[Specify Field Implementation. Default is auto])],[req_field=$withval], [req_field=auto])
78cd96b1 101
1ba4a60a 102AC_ARG_WITH([bignum], [AS_HELP_STRING([--with-bignum=gmp|no|auto],
78cd96b1
CF
103[Specify Bignum Implementation. Default is auto])],[req_bignum=$withval], [req_bignum=auto])
104
1d52a8b1
PW
105AC_ARG_WITH([scalar], [AS_HELP_STRING([--with-scalar=64bit|32bit|auto],
106[Specify scalar implementation. Default is auto])],[req_scalar=$withval], [req_scalar=auto])
107
1ba4a60a
PW
108AC_ARG_WITH([asm], [AS_HELP_STRING([--with-asm=x86_64|no|auto]
109[Specify assembly optimizations to use. Default is auto])],[req_asm=$withval], [req_asm=auto])
110
78cd96b1
CF
111AC_CHECK_TYPES([__int128])
112
1f46b006
CF
113AC_MSG_CHECKING([for __builtin_expect])
114AC_COMPILE_IFELSE([AC_LANG_SOURCE([[void myfunc() {__builtin_expect(0,0);}]])],
115 [ AC_MSG_RESULT([yes]);AC_DEFINE(HAVE_BUILTIN_EXPECT,1,[Define this symbol if __builtin_expect is available]) ],
116 [ AC_MSG_RESULT([no])
117 ])
1c7fa133 118
1ba4a60a 119if test x"$req_asm" = x"auto"; then
0e9baf6f
CF
120 SECP_64BIT_ASM_CHECK
121 if test x"$has_64bit_asm" = x"yes"; then
1ba4a60a
PW
122 set_asm=x86_64
123 fi
124 if test x"$set_asm" = x; then
125 set_asm=no
78cd96b1 126 fi
1ba4a60a
PW
127else
128 set_asm=$req_asm
129 case $set_asm in
130 x86_64)
131 SECP_64BIT_ASM_CHECK
132 if test x"$has_64bit_asm" != x"yes"; then
133 AC_MSG_ERROR([x86_64 assembly optimization requested but not available])
134 fi
135 ;;
136 no)
137 ;;
138 *)
139 AC_MSG_ERROR([invalid assembly optimization selection])
140 ;;
141 esac
142fi
78cd96b1 143
1ba4a60a
PW
144if test x"$req_field" = x"auto"; then
145 if test x"set_asm" = x"x86_64"; then
146 set_field=64bit
147 fi
78cd96b1
CF
148 if test x"$set_field" = x; then
149 SECP_INT128_CHECK
150 if test x"$has_int128" = x"yes"; then
0e9baf6f 151 set_field=64bit
78cd96b1
CF
152 fi
153 fi
78cd96b1 154 if test x"$set_field" = x; then
0e9baf6f 155 set_field=32bit
78cd96b1
CF
156 fi
157else
158 set_field=$req_field
159 case $set_field in
0e9baf6f 160 64bit)
1ba4a60a
PW
161 if test x"$set_asm" != x"x86_64"; then
162 SECP_INT128_CHECK
163 if test x"$has_int128" != x"yes"; then
164 AC_MSG_ERROR([64bit field explicitly requested but neither __int128 support or x86_64 assembly available])
165 fi
166 fi
78cd96b1 167 ;;
0e9baf6f 168 32bit)
78cd96b1
CF
169 ;;
170 *)
171 AC_MSG_ERROR([invalid field implementation selection])
172 ;;
173 esac
174fi
175
1d52a8b1 176if test x"$req_scalar" = x"auto"; then
1ba4a60a
PW
177 SECP_INT128_CHECK
178 if test x"$has_int128" = x"yes"; then
179 set_scalar=64bit
1d52a8b1
PW
180 fi
181 if test x"$set_scalar" = x; then
182 set_scalar=32bit
183 fi
184else
185 set_scalar=$req_scalar
186 case $set_scalar in
187 64bit)
188 SECP_INT128_CHECK
1ba4a60a
PW
189 if test x"$has_int128" != x"yes"; then
190 AC_MSG_ERROR([64bit scalar explicitly requested but __int128 support not available])
191 fi
1d52a8b1
PW
192 ;;
193 32bit)
194 ;;
195 *)
196 AC_MSG_ERROR([invalid scalar implementation selected])
197 ;;
198 esac
199fi
200
78cd96b1
CF
201if test x"$req_bignum" = x"auto"; then
202 SECP_GMP_CHECK
203 if test x"$has_gmp" = x"yes"; then
204 set_bignum=gmp
205 fi
206
78cd96b1 207 if test x"$set_bignum" = x; then
1ba4a60a 208 set_bignum=no
78cd96b1
CF
209 fi
210else
211 set_bignum=$req_bignum
212 case $set_bignum in
213 gmp)
214 SECP_GMP_CHECK
1ba4a60a
PW
215 if test x"$has_gmp" != x"yes"; then
216 AC_MSG_ERROR([gmp bignum explicitly requested but libgmp not available])
217 fi
78cd96b1 218 ;;
1ba4a60a 219 no)
78cd96b1
CF
220 ;;
221 *)
222 AC_MSG_ERROR([invalid bignum implementation selection])
223 ;;
224 esac
225fi
226
1ba4a60a
PW
227# select assembly optimization
228case $set_asm in
229x86_64)
230 AC_DEFINE(USE_ASM_X86_64, 1, [Define this symbol to enable x86_64 assembly optimizations])
231 ;;
232no)
233 ;;
234*)
235 AC_MSG_ERROR([invalid assembly optimizations])
236 ;;
237esac
238
78cd96b1
CF
239# select field implementation
240case $set_field in
0e9baf6f 24164bit)
78cd96b1
CF
242 AC_DEFINE(USE_FIELD_5X52, 1, [Define this symbol to use the FIELD_5X52 implementation])
243 ;;
0e9baf6f 24432bit)
78cd96b1
CF
245 AC_DEFINE(USE_FIELD_10X26, 1, [Define this symbol to use the FIELD_10X26 implementation])
246 ;;
247*)
248 AC_MSG_ERROR([invalid field implementation])
249 ;;
250esac
251
252# select bignum implementation
253case $set_bignum in
254gmp)
597128d3
PW
255 AC_DEFINE(HAVE_LIBGMP, 1, [Define this symbol if libgmp is installed])
256 AC_DEFINE(USE_NUM_GMP, 1, [Define this symbol to use the gmp implementation for num])
d1502eb4
PW
257 AC_DEFINE(USE_FIELD_INV_NUM, 1, [Define this symbol to use the num-based field inverse implementation])
258 AC_DEFINE(USE_SCALAR_INV_NUM, 1, [Define this symbol to use the num-based scalar inverse implementation])
78cd96b1 259 ;;
1ba4a60a 260no)
597128d3
PW
261 AC_DEFINE(USE_NUM_NONE, 1, [Define this symbol to use no num implementation])
262 AC_DEFINE(USE_FIELD_INV_BUILTIN, 1, [Define this symbol to use the native field inverse implementation])
263 AC_DEFINE(USE_SCALAR_INV_BUILTIN, 1, [Define this symbol to use the native scalar inverse implementation])
264 ;;
78cd96b1
CF
265*)
266 AC_MSG_ERROR([invalid bignum implementation])
267 ;;
268esac
269
1d52a8b1
PW
270#select scalar implementation
271case $set_scalar in
27264bit)
273 AC_DEFINE(USE_SCALAR_4X64, 1, [Define this symbol to use the 4x64 scalar implementation])
274 ;;
27532bit)
276 AC_DEFINE(USE_SCALAR_8X32, 1, [Define this symbol to use the 8x32 scalar implementation])
277 ;;
278*)
279 AC_MSG_ERROR([invalid scalar implementation])
280 ;;
281esac
282
78cd96b1
CF
283if test x"$use_tests" = x"yes"; then
284 SECP_OPENSSL_CHECK
28ade27d 285 if test x"$has_openssl_ec" = x"yes"; then
78cd96b1
CF
286 AC_DEFINE(ENABLE_OPENSSL_TESTS, 1, [Define this symbol if OpenSSL EC functions are available])
287 SECP_TEST_INCLUDES="$SSL_CFLAGS $CRYPTO_CFLAGS"
288 SECP_TEST_LIBS="$CRYPTO_LIBS"
289
290 case $host in
291 *mingw*)
292 SECP_TEST_LIBS="$SECP_TEST_LIBS -lgdi32"
293 ;;
294 esac
295
296 fi
297fi
298
7277fd76 299if test x"$set_bignum" = x"gmp"; then
78cd96b1 300 SECP_LIBS="$SECP_LIBS $GMP_LIBS"
e2274c58 301 SECP_INCLUDES="$SECP_INCLUDES $GMP_CPPFLAGS"
78cd96b1
CF
302fi
303
304if test x"$use_endomorphism" = x"yes"; then
c35ff1ea 305 AC_DEFINE(USE_ENDOMORPHISM, 1, [Define this symbol to use endomorphism optimization])
78cd96b1
CF
306fi
307
1ba4a60a 308AC_MSG_NOTICE([Using assembly optimizations: $set_asm])
78cd96b1
CF
309AC_MSG_NOTICE([Using field implementation: $set_field])
310AC_MSG_NOTICE([Using bignum implementation: $set_bignum])
1d52a8b1 311AC_MSG_NOTICE([Using scalar implementation: $set_scalar])
1ba4a60a 312AC_MSG_NOTICE([Using endomorphism optimizations: $use_endomorphism])
78cd96b1
CF
313
314AC_CONFIG_HEADERS([src/libsecp256k1-config.h])
c7ee71f7 315AC_CONFIG_FILES([Makefile libsecp256k1.pc])
78cd96b1
CF
316AC_SUBST(SECP_INCLUDES)
317AC_SUBST(SECP_LIBS)
318AC_SUBST(SECP_TEST_LIBS)
319AC_SUBST(SECP_TEST_INCLUDES)
78cd96b1 320AM_CONDITIONAL([USE_TESTS], [test x"$use_tests" != x"no"])
8336040f 321AM_CONDITIONAL([USE_BENCHMARK], [test x"$use_benchmark" = x"yes"])
e2274c58
CF
322
323dnl make sure nothing new is exported so that we don't break the cache
324PKGCONFIG_PATH_TEMP="$PKG_CONFIG_PATH"
325unset PKG_CONFIG_PATH
326PKG_CONFIG_PATH="$PKGCONFIG_PATH_TEMP"
327
78cd96b1 328AC_OUTPUT
This page took 0.062154 seconds and 4 git commands to generate.