aboutsummaryrefslogtreecommitdiff
path: root/configure.ac
diff options
context:
space:
mode:
Diffstat (limited to 'configure.ac')
-rw-r--r--configure.ac259
1 files changed, 259 insertions, 0 deletions
diff --git a/configure.ac b/configure.ac
new file mode 100644
index 0000000000..2da5709834
--- /dev/null
+++ b/configure.ac
@@ -0,0 +1,259 @@
+AC_PREREQ([2.60])
+AC_INIT([libsecp256k1],[0.1])
+AC_CONFIG_AUX_DIR([build-aux])
+AC_CONFIG_MACRO_DIR([build-aux/m4])
+AC_CANONICAL_HOST
+AH_TOP([#ifndef LIBSECP256K1_CONFIG_H])
+AH_TOP([#define LIBSECP256K1_CONFIG_H])
+AH_BOTTOM([#endif //LIBSECP256K1_CONFIG_H])
+AM_INIT_AUTOMAKE([foreign])
+LT_INIT
+
+dnl make the compilation flags quiet unless V=1 is used
+m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([yes])])
+
+PKG_PROG_PKG_CONFIG
+
+AC_PATH_TOOL(AR, ar)
+AC_PATH_TOOL(RANLIB, ranlib)
+AC_PATH_TOOL(STRIP, strip)
+
+AC_PROG_CC_C99
+if test x"$ac_cv_prog_cc_c99" == x"no"; then
+ AC_MSG_ERROR([c99 compiler support required])
+fi
+
+case $host in
+ *mingw*)
+ use_pkgconfig=no
+ ;;
+ *)
+ use_pkgconfig=yes
+ ;;
+esac
+
+case $host_os in
+ darwin*)
+ CPPFLAGS="$CPPFLAGS -I/opt/local/include"
+ LDFLAGS="$LDFLAGS -L/opt/local/lib"
+ ;;
+esac
+
+CFLAGS="$CFLAGS -W"
+
+warn_CFLAGS="-Wall -Wextra -Wcast-align -Wnested-externs -Wshadow -Wstrict-prototypes -Wno-unused-function"
+saved_CFLAGS="$CFLAGS"
+CFLAGS="$CFLAGS $warn_CFLAGS"
+AC_MSG_CHECKING([if ${CC} supports ${warn_CFLAGS}])
+AC_COMPILE_IFELSE([AC_LANG_SOURCE([[char foo;]])],
+ [ AC_MSG_RESULT([yes]) ],
+ [ AC_MSG_RESULT([no])
+ CFLAGS="$saved_CFLAGS"
+ ])
+
+
+AC_ARG_ENABLE(benchmark,
+ AS_HELP_STRING([--enable-benchmark],[compile benchmark (default is yes)]),
+ [use_benchmark=$enableval],
+ [use_benchmark=yes])
+
+AC_ARG_ENABLE(tests,
+ AS_HELP_STRING([--enable-tests],[compile tests (default is yes)]),
+ [use_tests=$enableval],
+ [use_tests=yes])
+
+AC_ARG_ENABLE(endomorphism,
+ AS_HELP_STRING([--enable-endomorphism],[enable endomorphism (default is no)]),
+ [use_endomorphism=$enableval],
+ [use_endomorphism=no])
+
+AC_ARG_WITH([field], [AS_HELP_STRING([--with-field=gmp|64bit|64bit_asm|32bit|auto],
+[Specify Field Implementation. Default is auto])],[req_field=$withval], [req_field=auto])
+
+AC_ARG_WITH([bignum], [AS_HELP_STRING([--with-bignum=gmp|auto],
+[Specify Bignum Implementation. Default is auto])],[req_bignum=$withval], [req_bignum=auto])
+
+AC_ARG_WITH([scalar], [AS_HELP_STRING([--with-scalar=64bit|32bit|auto],
+[Specify scalar implementation. Default is auto])],[req_scalar=$withval], [req_scalar=auto])
+
+AC_CHECK_TYPES([__int128])
+
+AC_CHECK_DECL(__builtin_expect,AC_DEFINE(HAVE_BUILTIN_EXPECT,1,[Define this symbol if __builtin_expect is available]),,)
+
+if test x"$req_field" = x"auto"; then
+ SECP_64BIT_ASM_CHECK
+ if test x"$has_64bit_asm" = x"yes"; then
+ set_field=64bit_asm
+ fi
+
+ if test x"$set_field" = x; then
+ SECP_INT128_CHECK
+ if test x"$has_int128" = x"yes"; then
+ set_field=64bit
+ fi
+ fi
+
+ if test x"$set_field" = x; then
+ SECP_GMP_CHECK
+ if test x"$has_gmp" = x"yes"; then
+ set_field=gmp
+ fi
+ fi
+
+ if test x"$set_field" = x; then
+ set_field=32bit
+ fi
+else
+ set_field=$req_field
+ case $set_field in
+ 64bit_asm)
+ SECP_64BIT_ASM_CHECK
+ ;;
+ 64bit)
+ SECP_INT128_CHECK
+ ;;
+ gmp)
+ SECP_GMP_CHECK
+ ;;
+ 32bit)
+ ;;
+ *)
+ AC_MSG_ERROR([invalid field implementation selection])
+ ;;
+ esac
+fi
+
+if test x"$req_scalar" = x"auto"; then
+ if test x"$set_scalar" = x; then
+ SECP_INT128_CHECK
+ if test x"$has_int128" = x"yes"; then
+ set_scalar=64bit
+ fi
+ fi
+ if test x"$set_scalar" = x; then
+ set_scalar=32bit
+ fi
+else
+ set_scalar=$req_scalar
+ case $set_scalar in
+ 64bit)
+ SECP_INT128_CHECK
+ ;;
+ 32bit)
+ ;;
+ *)
+ AC_MSG_ERROR([invalid scalar implementation selected])
+ ;;
+ esac
+fi
+
+if test x"$req_bignum" = x"auto"; then
+ SECP_GMP_CHECK
+ if test x"$has_gmp" = x"yes"; then
+ set_bignum=gmp
+ fi
+
+ if test x"$set_bignum" = x; then
+ AC_MSG_ERROR([no working bignum implementation found])
+ fi
+else
+ set_bignum=$req_bignum
+ case $set_bignum in
+ gmp)
+ SECP_GMP_CHECK
+ ;;
+ openssl)
+ SECP_OPENSSL_CHECK
+ ;;
+ *)
+ AC_MSG_ERROR([invalid bignum implementation selection])
+ ;;
+ esac
+fi
+
+# select field implementation
+case $set_field in
+64bit_asm)
+ AC_DEFINE(USE_FIELD_5X52_ASM, 1, [Define this symbol to use the assembly version for the 5x52 field implementation])
+ AC_DEFINE(USE_FIELD_5X52, 1, [Define this symbol to use the FIELD_5X52 implementation])
+ ;;
+64bit)
+ AC_DEFINE(USE_FIELD_5X52_INT128, 1, [Define this symbol to use the __int128 version for the 5x52 field implementation])
+ AC_DEFINE(USE_FIELD_5X52, 1, [Define this symbol to use the FIELD_5X52 implementation])
+ ;;
+gmp)
+ AC_DEFINE(HAVE_LIBGMP,1,[Define this symbol if libgmp is installed])
+ AC_DEFINE(USE_FIELD_GMP, 1, [Define this symbol to use the FIELD_GMP implementation])
+ ;;
+32bit)
+ AC_DEFINE(USE_FIELD_10X26, 1, [Define this symbol to use the FIELD_10X26 implementation])
+ ;;
+*)
+ AC_MSG_ERROR([invalid field implementation])
+ ;;
+esac
+
+# select bignum implementation
+case $set_bignum in
+gmp)
+ AC_DEFINE(HAVE_LIBGMP,1,[Define this symbol if libgmp is installed])
+ AC_DEFINE(USE_NUM_GMP, 1, [Define this symbol to use the gmp implementation])
+ AC_DEFINE(USE_FIELD_INV_NUM, 1, [Define this symbol to use the USE_FIELD_INV_NUM implementation])
+ ;;
+*)
+ AC_MSG_ERROR([invalid bignum implementation])
+ ;;
+esac
+
+#select scalar implementation
+case $set_scalar in
+64bit)
+ AC_DEFINE(USE_SCALAR_4X64, 1, [Define this symbol to use the 4x64 scalar implementation])
+ ;;
+32bit)
+ AC_DEFINE(USE_SCALAR_8X32, 1, [Define this symbol to use the 8x32 scalar implementation])
+ ;;
+*)
+ AC_MSG_ERROR([invalid scalar implementation])
+ ;;
+esac
+
+if test x"$use_tests" = x"yes"; then
+ SECP_OPENSSL_CHECK
+ if test x"$has_openssl_ec" == x"yes"; then
+ AC_DEFINE(ENABLE_OPENSSL_TESTS, 1, [Define this symbol if OpenSSL EC functions are available])
+ SECP_TEST_INCLUDES="$SSL_CFLAGS $CRYPTO_CFLAGS"
+ SECP_TEST_LIBS="$CRYPTO_LIBS"
+
+ case $host in
+ *mingw*)
+ SECP_TEST_LIBS="$SECP_TEST_LIBS -lgdi32"
+ ;;
+ esac
+
+ fi
+fi
+
+if test x"$set_field" = x"gmp" || test x"$set_bignum" = x"gmp"; then
+ SECP_LIBS="$SECP_LIBS $GMP_LIBS"
+fi
+
+if test x"$use_endomorphism" = x"yes"; then
+ AC_DEFINE(USE_ENDOMORPHISM, 1, [Define this symbol to use endomorphism])
+fi
+
+AC_MSG_NOTICE([Using field implementation: $set_field])
+AC_MSG_NOTICE([Using bignum implementation: $set_bignum])
+AC_MSG_NOTICE([Using scalar implementation: $set_scalar])
+
+AC_CONFIG_HEADERS([src/libsecp256k1-config.h])
+AC_CONFIG_FILES([Makefile libsecp256k1.pc])
+AC_SUBST(SECP_INCLUDES)
+AC_SUBST(SECP_LIBS)
+AC_SUBST(SECP_TEST_LIBS)
+AC_SUBST(SECP_TEST_INCLUDES)
+AC_SUBST(YASM_BINFMT)
+AM_CONDITIONAL([USE_ASM], [test x"$set_field" == x"64bit_asm"])
+AM_CONDITIONAL([USE_TESTS], [test x"$use_tests" != x"no"])
+AM_CONDITIONAL([USE_BENCHMARK], [test x"$use_benchmark" != x"no"])
+AC_OUTPUT