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