github.com/guiltylotus/go-ethereum@v1.9.7/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="-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 AM_PROG_AS 33 34 case $host_os in 35 *darwin*) 36 if test x$cross_compiling != xyes; then 37 AC_PATH_PROG([BREW],brew,) 38 if test x$BREW != x; then 39 dnl These Homebrew packages may be keg-only, meaning that they won't be found 40 dnl in expected paths because they may conflict with system files. Ask 41 dnl Homebrew where each one is located, then adjust paths accordingly. 42 43 openssl_prefix=`$BREW --prefix openssl 2>/dev/null` 44 gmp_prefix=`$BREW --prefix gmp 2>/dev/null` 45 if test x$openssl_prefix != x; then 46 PKG_CONFIG_PATH="$openssl_prefix/lib/pkgconfig:$PKG_CONFIG_PATH" 47 export PKG_CONFIG_PATH 48 fi 49 if test x$gmp_prefix != x; then 50 GMP_CPPFLAGS="-I$gmp_prefix/include" 51 GMP_LIBS="-L$gmp_prefix/lib" 52 fi 53 else 54 AC_PATH_PROG([PORT],port,) 55 dnl if homebrew isn't installed and macports is, add the macports default paths 56 dnl as a last resort. 57 if test x$PORT != x; then 58 CPPFLAGS="$CPPFLAGS -isystem /opt/local/include" 59 LDFLAGS="$LDFLAGS -L/opt/local/lib" 60 fi 61 fi 62 fi 63 ;; 64 esac 65 66 CFLAGS="$CFLAGS -W" 67 68 warn_CFLAGS="-std=c89 -pedantic -Wall -Wextra -Wcast-align -Wnested-externs -Wshadow -Wstrict-prototypes -Wno-unused-function -Wno-long-long -Wno-overlength-strings" 69 saved_CFLAGS="$CFLAGS" 70 CFLAGS="$CFLAGS $warn_CFLAGS" 71 AC_MSG_CHECKING([if ${CC} supports ${warn_CFLAGS}]) 72 AC_COMPILE_IFELSE([AC_LANG_SOURCE([[char foo;]])], 73 [ AC_MSG_RESULT([yes]) ], 74 [ AC_MSG_RESULT([no]) 75 CFLAGS="$saved_CFLAGS" 76 ]) 77 78 saved_CFLAGS="$CFLAGS" 79 CFLAGS="$CFLAGS -fvisibility=hidden" 80 AC_MSG_CHECKING([if ${CC} supports -fvisibility=hidden]) 81 AC_COMPILE_IFELSE([AC_LANG_SOURCE([[char foo;]])], 82 [ AC_MSG_RESULT([yes]) ], 83 [ AC_MSG_RESULT([no]) 84 CFLAGS="$saved_CFLAGS" 85 ]) 86 87 AC_ARG_ENABLE(benchmark, 88 AS_HELP_STRING([--enable-benchmark],[compile benchmark (default is no)]), 89 [use_benchmark=$enableval], 90 [use_benchmark=no]) 91 92 AC_ARG_ENABLE(coverage, 93 AS_HELP_STRING([--enable-coverage],[enable compiler flags to support kcov coverage analysis]), 94 [enable_coverage=$enableval], 95 [enable_coverage=no]) 96 97 AC_ARG_ENABLE(tests, 98 AS_HELP_STRING([--enable-tests],[compile tests (default is yes)]), 99 [use_tests=$enableval], 100 [use_tests=yes]) 101 102 AC_ARG_ENABLE(openssl_tests, 103 AS_HELP_STRING([--enable-openssl-tests],[enable OpenSSL tests, if OpenSSL is available (default is auto)]), 104 [enable_openssl_tests=$enableval], 105 [enable_openssl_tests=auto]) 106 107 AC_ARG_ENABLE(experimental, 108 AS_HELP_STRING([--enable-experimental],[allow experimental configure options (default is no)]), 109 [use_experimental=$enableval], 110 [use_experimental=no]) 111 112 AC_ARG_ENABLE(exhaustive_tests, 113 AS_HELP_STRING([--enable-exhaustive-tests],[compile exhaustive tests (default is yes)]), 114 [use_exhaustive_tests=$enableval], 115 [use_exhaustive_tests=yes]) 116 117 AC_ARG_ENABLE(endomorphism, 118 AS_HELP_STRING([--enable-endomorphism],[enable endomorphism (default is no)]), 119 [use_endomorphism=$enableval], 120 [use_endomorphism=no]) 121 122 AC_ARG_ENABLE(ecmult_static_precomputation, 123 AS_HELP_STRING([--enable-ecmult-static-precomputation],[enable precomputed ecmult table for signing (default is yes)]), 124 [use_ecmult_static_precomputation=$enableval], 125 [use_ecmult_static_precomputation=auto]) 126 127 AC_ARG_ENABLE(module_ecdh, 128 AS_HELP_STRING([--enable-module-ecdh],[enable ECDH shared secret computation (experimental)]), 129 [enable_module_ecdh=$enableval], 130 [enable_module_ecdh=no]) 131 132 AC_ARG_ENABLE(module_recovery, 133 AS_HELP_STRING([--enable-module-recovery],[enable ECDSA pubkey recovery module (default is no)]), 134 [enable_module_recovery=$enableval], 135 [enable_module_recovery=no]) 136 137 AC_ARG_ENABLE(jni, 138 AS_HELP_STRING([--enable-jni],[enable libsecp256k1_jni (default is auto)]), 139 [use_jni=$enableval], 140 [use_jni=auto]) 141 142 AC_ARG_WITH([field], [AS_HELP_STRING([--with-field=64bit|32bit|auto], 143 [Specify Field Implementation. Default is auto])],[req_field=$withval], [req_field=auto]) 144 145 AC_ARG_WITH([bignum], [AS_HELP_STRING([--with-bignum=gmp|no|auto], 146 [Specify Bignum Implementation. Default is auto])],[req_bignum=$withval], [req_bignum=auto]) 147 148 AC_ARG_WITH([scalar], [AS_HELP_STRING([--with-scalar=64bit|32bit|auto], 149 [Specify scalar implementation. Default is auto])],[req_scalar=$withval], [req_scalar=auto]) 150 151 AC_ARG_WITH([asm], [AS_HELP_STRING([--with-asm=x86_64|arm|no|auto] 152 [Specify assembly optimizations to use. Default is auto (experimental: arm)])],[req_asm=$withval], [req_asm=auto]) 153 154 AC_CHECK_TYPES([__int128]) 155 156 AC_MSG_CHECKING([for __builtin_expect]) 157 AC_COMPILE_IFELSE([AC_LANG_SOURCE([[void myfunc() {__builtin_expect(0,0);}]])], 158 [ AC_MSG_RESULT([yes]);AC_DEFINE(HAVE_BUILTIN_EXPECT,1,[Define this symbol if __builtin_expect is available]) ], 159 [ AC_MSG_RESULT([no]) 160 ]) 161 162 if test x"$enable_coverage" = x"yes"; then 163 AC_DEFINE(COVERAGE, 1, [Define this symbol to compile out all VERIFY code]) 164 CFLAGS="$CFLAGS -O0 --coverage" 165 LDFLAGS="--coverage" 166 else 167 CFLAGS="$CFLAGS -O3" 168 fi 169 170 if test x"$use_ecmult_static_precomputation" != x"no"; then 171 save_cross_compiling=$cross_compiling 172 cross_compiling=no 173 TEMP_CC="$CC" 174 CC="$CC_FOR_BUILD" 175 AC_MSG_CHECKING([native compiler: ${CC_FOR_BUILD}]) 176 AC_RUN_IFELSE( 177 [AC_LANG_PROGRAM([], [return 0])], 178 [working_native_cc=yes], 179 [working_native_cc=no],[dnl]) 180 CC="$TEMP_CC" 181 cross_compiling=$save_cross_compiling 182 183 if test x"$working_native_cc" = x"no"; then 184 set_precomp=no 185 if test x"$use_ecmult_static_precomputation" = x"yes"; then 186 AC_MSG_ERROR([${CC_FOR_BUILD} does not produce working binaries. Please set CC_FOR_BUILD]) 187 else 188 AC_MSG_RESULT([${CC_FOR_BUILD} does not produce working binaries. Please set CC_FOR_BUILD]) 189 fi 190 else 191 AC_MSG_RESULT([ok]) 192 set_precomp=yes 193 fi 194 else 195 set_precomp=no 196 fi 197 198 if test x"$req_asm" = x"auto"; then 199 SECP_64BIT_ASM_CHECK 200 if test x"$has_64bit_asm" = x"yes"; then 201 set_asm=x86_64 202 fi 203 if test x"$set_asm" = x; then 204 set_asm=no 205 fi 206 else 207 set_asm=$req_asm 208 case $set_asm in 209 x86_64) 210 SECP_64BIT_ASM_CHECK 211 if test x"$has_64bit_asm" != x"yes"; then 212 AC_MSG_ERROR([x86_64 assembly optimization requested but not available]) 213 fi 214 ;; 215 arm) 216 ;; 217 no) 218 ;; 219 *) 220 AC_MSG_ERROR([invalid assembly optimization selection]) 221 ;; 222 esac 223 fi 224 225 if test x"$req_field" = x"auto"; then 226 if test x"set_asm" = x"x86_64"; then 227 set_field=64bit 228 fi 229 if test x"$set_field" = x; then 230 SECP_INT128_CHECK 231 if test x"$has_int128" = x"yes"; then 232 set_field=64bit 233 fi 234 fi 235 if test x"$set_field" = x; then 236 set_field=32bit 237 fi 238 else 239 set_field=$req_field 240 case $set_field in 241 64bit) 242 if test x"$set_asm" != x"x86_64"; then 243 SECP_INT128_CHECK 244 if test x"$has_int128" != x"yes"; then 245 AC_MSG_ERROR([64bit field explicitly requested but neither __int128 support or x86_64 assembly available]) 246 fi 247 fi 248 ;; 249 32bit) 250 ;; 251 *) 252 AC_MSG_ERROR([invalid field implementation selection]) 253 ;; 254 esac 255 fi 256 257 if test x"$req_scalar" = x"auto"; then 258 SECP_INT128_CHECK 259 if test x"$has_int128" = x"yes"; then 260 set_scalar=64bit 261 fi 262 if test x"$set_scalar" = x; then 263 set_scalar=32bit 264 fi 265 else 266 set_scalar=$req_scalar 267 case $set_scalar in 268 64bit) 269 SECP_INT128_CHECK 270 if test x"$has_int128" != x"yes"; then 271 AC_MSG_ERROR([64bit scalar explicitly requested but __int128 support not available]) 272 fi 273 ;; 274 32bit) 275 ;; 276 *) 277 AC_MSG_ERROR([invalid scalar implementation selected]) 278 ;; 279 esac 280 fi 281 282 if test x"$req_bignum" = x"auto"; then 283 SECP_GMP_CHECK 284 if test x"$has_gmp" = x"yes"; then 285 set_bignum=gmp 286 fi 287 288 if test x"$set_bignum" = x; then 289 set_bignum=no 290 fi 291 else 292 set_bignum=$req_bignum 293 case $set_bignum in 294 gmp) 295 SECP_GMP_CHECK 296 if test x"$has_gmp" != x"yes"; then 297 AC_MSG_ERROR([gmp bignum explicitly requested but libgmp not available]) 298 fi 299 ;; 300 no) 301 ;; 302 *) 303 AC_MSG_ERROR([invalid bignum implementation selection]) 304 ;; 305 esac 306 fi 307 308 # select assembly optimization 309 use_external_asm=no 310 311 case $set_asm in 312 x86_64) 313 AC_DEFINE(USE_ASM_X86_64, 1, [Define this symbol to enable x86_64 assembly optimizations]) 314 ;; 315 arm) 316 use_external_asm=yes 317 ;; 318 no) 319 ;; 320 *) 321 AC_MSG_ERROR([invalid assembly optimizations]) 322 ;; 323 esac 324 325 # select field implementation 326 case $set_field in 327 64bit) 328 AC_DEFINE(USE_FIELD_5X52, 1, [Define this symbol to use the FIELD_5X52 implementation]) 329 ;; 330 32bit) 331 AC_DEFINE(USE_FIELD_10X26, 1, [Define this symbol to use the FIELD_10X26 implementation]) 332 ;; 333 *) 334 AC_MSG_ERROR([invalid field implementation]) 335 ;; 336 esac 337 338 # select bignum implementation 339 case $set_bignum in 340 gmp) 341 AC_DEFINE(HAVE_LIBGMP, 1, [Define this symbol if libgmp is installed]) 342 AC_DEFINE(USE_NUM_GMP, 1, [Define this symbol to use the gmp implementation for num]) 343 AC_DEFINE(USE_FIELD_INV_NUM, 1, [Define this symbol to use the num-based field inverse implementation]) 344 AC_DEFINE(USE_SCALAR_INV_NUM, 1, [Define this symbol to use the num-based scalar inverse implementation]) 345 ;; 346 no) 347 AC_DEFINE(USE_NUM_NONE, 1, [Define this symbol to use no num implementation]) 348 AC_DEFINE(USE_FIELD_INV_BUILTIN, 1, [Define this symbol to use the native field inverse implementation]) 349 AC_DEFINE(USE_SCALAR_INV_BUILTIN, 1, [Define this symbol to use the native scalar inverse implementation]) 350 ;; 351 *) 352 AC_MSG_ERROR([invalid bignum implementation]) 353 ;; 354 esac 355 356 #select scalar implementation 357 case $set_scalar in 358 64bit) 359 AC_DEFINE(USE_SCALAR_4X64, 1, [Define this symbol to use the 4x64 scalar implementation]) 360 ;; 361 32bit) 362 AC_DEFINE(USE_SCALAR_8X32, 1, [Define this symbol to use the 8x32 scalar implementation]) 363 ;; 364 *) 365 AC_MSG_ERROR([invalid scalar implementation]) 366 ;; 367 esac 368 369 if test x"$use_tests" = x"yes"; then 370 SECP_OPENSSL_CHECK 371 if test x"$has_openssl_ec" = x"yes"; then 372 if test x"$enable_openssl_tests" != x"no"; then 373 AC_DEFINE(ENABLE_OPENSSL_TESTS, 1, [Define this symbol if OpenSSL EC functions are available]) 374 SECP_TEST_INCLUDES="$SSL_CFLAGS $CRYPTO_CFLAGS" 375 SECP_TEST_LIBS="$CRYPTO_LIBS" 376 377 case $host in 378 *mingw*) 379 SECP_TEST_LIBS="$SECP_TEST_LIBS -lgdi32" 380 ;; 381 esac 382 fi 383 else 384 if test x"$enable_openssl_tests" = x"yes"; then 385 AC_MSG_ERROR([OpenSSL tests requested but OpenSSL with EC support is not available]) 386 fi 387 fi 388 else 389 if test x"$enable_openssl_tests" = x"yes"; then 390 AC_MSG_ERROR([OpenSSL tests requested but tests are not enabled]) 391 fi 392 fi 393 394 if test x"$use_jni" != x"no"; then 395 AX_JNI_INCLUDE_DIR 396 have_jni_dependencies=yes 397 if test x"$enable_module_ecdh" = x"no"; then 398 have_jni_dependencies=no 399 fi 400 if test "x$JNI_INCLUDE_DIRS" = "x"; then 401 have_jni_dependencies=no 402 fi 403 if test "x$have_jni_dependencies" = "xno"; then 404 if test x"$use_jni" = x"yes"; then 405 AC_MSG_ERROR([jni support explicitly requested but headers/dependencies were not found. Enable ECDH and try again.]) 406 fi 407 AC_MSG_WARN([jni headers/dependencies not found. jni support disabled]) 408 use_jni=no 409 else 410 use_jni=yes 411 for JNI_INCLUDE_DIR in $JNI_INCLUDE_DIRS; do 412 JNI_INCLUDES="$JNI_INCLUDES -I$JNI_INCLUDE_DIR" 413 done 414 fi 415 fi 416 417 if test x"$set_bignum" = x"gmp"; then 418 SECP_LIBS="$SECP_LIBS $GMP_LIBS" 419 SECP_INCLUDES="$SECP_INCLUDES $GMP_CPPFLAGS" 420 fi 421 422 if test x"$use_endomorphism" = x"yes"; then 423 AC_DEFINE(USE_ENDOMORPHISM, 1, [Define this symbol to use endomorphism optimization]) 424 fi 425 426 if test x"$set_precomp" = x"yes"; then 427 AC_DEFINE(USE_ECMULT_STATIC_PRECOMPUTATION, 1, [Define this symbol to use a statically generated ecmult table]) 428 fi 429 430 if test x"$enable_module_ecdh" = x"yes"; then 431 AC_DEFINE(ENABLE_MODULE_ECDH, 1, [Define this symbol to enable the ECDH module]) 432 fi 433 434 if test x"$enable_module_recovery" = x"yes"; then 435 AC_DEFINE(ENABLE_MODULE_RECOVERY, 1, [Define this symbol to enable the ECDSA pubkey recovery module]) 436 fi 437 438 AC_C_BIGENDIAN() 439 440 if test x"$use_external_asm" = x"yes"; then 441 AC_DEFINE(USE_EXTERNAL_ASM, 1, [Define this symbol if an external (non-inline) assembly implementation is used]) 442 fi 443 444 AC_MSG_NOTICE([Using static precomputation: $set_precomp]) 445 AC_MSG_NOTICE([Using assembly optimizations: $set_asm]) 446 AC_MSG_NOTICE([Using field implementation: $set_field]) 447 AC_MSG_NOTICE([Using bignum implementation: $set_bignum]) 448 AC_MSG_NOTICE([Using scalar implementation: $set_scalar]) 449 AC_MSG_NOTICE([Using endomorphism optimizations: $use_endomorphism]) 450 AC_MSG_NOTICE([Building for coverage analysis: $enable_coverage]) 451 AC_MSG_NOTICE([Building ECDH module: $enable_module_ecdh]) 452 AC_MSG_NOTICE([Building ECDSA pubkey recovery module: $enable_module_recovery]) 453 AC_MSG_NOTICE([Using jni: $use_jni]) 454 455 if test x"$enable_experimental" = x"yes"; then 456 AC_MSG_NOTICE([******]) 457 AC_MSG_NOTICE([WARNING: experimental build]) 458 AC_MSG_NOTICE([Experimental features do not have stable APIs or properties, and may not be safe for production use.]) 459 AC_MSG_NOTICE([Building ECDH module: $enable_module_ecdh]) 460 AC_MSG_NOTICE([******]) 461 else 462 if test x"$enable_module_ecdh" = x"yes"; then 463 AC_MSG_ERROR([ECDH module is experimental. Use --enable-experimental to allow.]) 464 fi 465 if test x"$set_asm" = x"arm"; then 466 AC_MSG_ERROR([ARM assembly optimization is experimental. Use --enable-experimental to allow.]) 467 fi 468 fi 469 470 AC_CONFIG_HEADERS([src/libsecp256k1-config.h]) 471 AC_CONFIG_FILES([Makefile libsecp256k1.pc]) 472 AC_SUBST(JNI_INCLUDES) 473 AC_SUBST(SECP_INCLUDES) 474 AC_SUBST(SECP_LIBS) 475 AC_SUBST(SECP_TEST_LIBS) 476 AC_SUBST(SECP_TEST_INCLUDES) 477 AM_CONDITIONAL([ENABLE_COVERAGE], [test x"$enable_coverage" = x"yes"]) 478 AM_CONDITIONAL([USE_TESTS], [test x"$use_tests" != x"no"]) 479 AM_CONDITIONAL([USE_EXHAUSTIVE_TESTS], [test x"$use_exhaustive_tests" != x"no"]) 480 AM_CONDITIONAL([USE_BENCHMARK], [test x"$use_benchmark" = x"yes"]) 481 AM_CONDITIONAL([USE_ECMULT_STATIC_PRECOMPUTATION], [test x"$set_precomp" = x"yes"]) 482 AM_CONDITIONAL([ENABLE_MODULE_ECDH], [test x"$enable_module_ecdh" = x"yes"]) 483 AM_CONDITIONAL([ENABLE_MODULE_RECOVERY], [test x"$enable_module_recovery" = x"yes"]) 484 AM_CONDITIONAL([USE_JNI], [test x"$use_jni" == x"yes"]) 485 AM_CONDITIONAL([USE_EXTERNAL_ASM], [test x"$use_external_asm" = x"yes"]) 486 AM_CONDITIONAL([USE_ASM_ARM], [test x"$set_asm" = x"arm"]) 487 488 dnl make sure nothing new is exported so that we don't break the cache 489 PKGCONFIG_PATH_TEMP="$PKG_CONFIG_PATH" 490 unset PKG_CONFIG_PATH 491 PKG_CONFIG_PATH="$PKGCONFIG_PATH_TEMP" 492 493 AC_OUTPUT