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