diff --git a/.gitignore b/.gitignore index e6c91ec28..7eaf3d071 100644 --- a/.gitignore +++ b/.gitignore @@ -1,7 +1,34 @@ -obj/* bench +bench.exe tests +tests.exe *.so *.a -config.mk !.gitignore + +Makefile +configure +.libs/ +Makefile.in +aclocal.m4 +autogen.sh +autom4te.cache/ +config.log +config.status +*.tar.gz +*.la +libtool +.deps/ +.dirstamp +src/build-aux/ +*.lo +*.o +*~ +src/libsecp256k1-config.h +src/libsecp256k1-config.h.in +m4/libtool.m4 +m4/ltoptions.m4 +m4/ltsugar.m4 +m4/ltversion.m4 +m4/lt~obsolete.m4 +src/stamp-h1 diff --git a/Makefile b/Makefile deleted file mode 100644 index ea88584cf..000000000 --- a/Makefile +++ /dev/null @@ -1,49 +0,0 @@ -$(shell CC=$(CC) YASM=$(YASM) ./configure) -include config.mk - -FILES := src/*.h src/impl/*.h - -JAVA_FILES := src/java/org_bitcoin_NativeSecp256k1.h src/java/org_bitcoin_NativeSecp256k1.c - -OBJS := - -ifeq ($(USE_ASM), 1) - OBJS := $(OBJS) obj/field_5x52_asm.o -endif -STD="gnu99" - -default: tests libsecp256k1.a libsecp256k1.so - -clean: - rm -rf obj/*.o bench tests *.a *.so config.mk - -obj/field_5x52_asm.o: src/field_5x52_asm.asm - $(YASM) -f elf64 -o obj/field_5x52_asm.o src/field_5x52_asm.asm - -obj/secp256k1.o: $(FILES) src/secp256k1.c include/secp256k1.h - $(CC) -fPIC -std=$(STD) $(CFLAGS) $(CFLAGS_EXTRA) -DNDEBUG -$(OPTLEVEL) src/secp256k1.c -c -o obj/secp256k1.o - -bench: $(FILES) src/bench.c $(OBJS) - $(CC) -fPIC -std=$(STD) $(CFLAGS) $(CFLAGS_EXTRA) $(CFLAGS_TEST_EXTRA) -DNDEBUG -$(OPTLEVEL) src/bench.c $(OBJS) $(LDFLAGS_EXTRA) $(LDFLAGS_TEST_EXTRA) -o bench - -tests: $(FILES) src/tests.c $(OBJS) - $(CC) -std=$(STD) $(CFLAGS) $(CFLAGS_EXTRA) $(CFLAGS_TEST_EXTRA) -DVERIFY -fstack-protector-all -$(OPTLEVEL) -ggdb3 src/tests.c $(OBJS) $(LDFLAGS_EXTRA) $(LDFLAGS_TEST_EXTRA) -o tests - -coverage: $(FILES) src/tests.c $(OBJS) - rm -rf tests.gcno tests.gcda tests_cov - $(CC) -std=$(STD) $(CFLAGS) $(CFLAGS_EXTRA) $(CFLAGS_TEST_EXTRA) -DVERIFY --coverage -$(OPTLEVEL) -g src/tests.c $(OBJS) $(LDFLAGS_EXTRA) $(LDFLAGS_TEST_EXTRA) -o tests_cov - rm -rf lcov - mkdir -p lcov - cd lcov; lcov --directory ../ --zerocounters - cd lcov; ../tests_cov - cd lcov; lcov --directory ../ --capture --output-file secp256k1.info - cd lcov; genhtml -o . secp256k1.info - -libsecp256k1.a: obj/secp256k1.o $(OBJS) - $(AR) -rs $@ $(OBJS) obj/secp256k1.o - -libsecp256k1.so: obj/secp256k1.o $(OBJS) - $(CC) -std=$(STD) $(LDFLAGS_EXTRA) $(OBJS) obj/secp256k1.o -shared -o libsecp256k1.so - -libjavasecp256k1.so: $(OBJS) obj/secp256k1.o $(JAVA_FILES) - $(CC) -fPIC -std=$(STD) $(CFLAGS) $(CFLAGS_EXTRA) -DNDEBUG -$(OPTLEVEL) -I. src/java/org_bitcoin_NativeSecp256k1.c $(LDFLAGS_EXTRA) $(OBJS) obj/secp256k1.o -shared -o libjavasecp256k1.so diff --git a/Makefile.am b/Makefile.am new file mode 100644 index 000000000..a0bf0b229 --- /dev/null +++ b/Makefile.am @@ -0,0 +1,63 @@ +ACLOCAL_AMFLAGS = -I m4 +INCLUDES = $(SECP_INCLUDES) +lib_LTLIBRARIES = libsecp256k1.la +libsecp256k1_la_SOURCES = src/secp256k1.c +libsecp256k1_la_CPPFLAGS = -I$(top_srcdir)/include $(SECP_INCLUDES) +libsecp256k1_la_LIBADD = $(SECP_LIBS) +include_HEADERS = include/secp256k1.h +noinst_HEADERS = +noinst_HEADERS += src/group.h +noinst_HEADERS += src/num_openssl.h +noinst_HEADERS += src/num_gmp.h +noinst_HEADERS += src/ecdsa.h +noinst_HEADERS += src/ecmult.h +noinst_HEADERS += src/num.h +noinst_HEADERS += src/field_10x26.h +noinst_HEADERS += src/field_5x52.h +noinst_HEADERS += src/java/org_bitcoin_NativeSecp256k1.h +noinst_HEADERS += src/util.h +noinst_HEADERS += src/field_gmp.h +noinst_HEADERS += src/impl/group.h +noinst_HEADERS += src/impl/num_openssl.h +noinst_HEADERS += src/impl/num_gmp.h +noinst_HEADERS += src/impl/ecdsa.h +noinst_HEADERS += src/impl/field_5x52_int128.h +noinst_HEADERS += src/impl/ecmult.h +noinst_HEADERS += src/impl/num.h +noinst_HEADERS += src/impl/field_10x26.h +noinst_HEADERS += src/impl/field_5x52.h +noinst_HEADERS += src/impl/util.h +noinst_HEADERS += src/impl/field_gmp.h +noinst_HEADERS += src/impl/field_5x52_asm.h +noinst_HEADERS += src/impl/field.h +noinst_HEADERS += src/field.h + +if USE_ASM +libsecp256k1_la_SOURCES += src/field_5x52_asm.asm +endif + +noinst_PROGRAMS = +if USE_BENCHMARK +noinst_PROGRAMS += bench +bench_SOURCES = src/bench.c +bench_CPPFLAGS = -DNDEBUG +bench_LDADD = libsecp256k1.la $(SECP_LIBS) +bench_LDFLAGS = -static +endif + +if USE_TESTS +noinst_PROGRAMS += tests +tests_SOURCES = src/tests.c +tests_CPPFLAGS = -DVERIFY $(SECP_TEST_INCLUDES) +tests_LDADD = libsecp256k1.la $(SECP_LIBS) $(SECP_TEST_LIBS) +tests_LDFLAGS = -static +TESTS = tests +endif + +EXTRA_DIST = nasm_lt.sh + +#x86_64 only +if USE_ASM +.asm.lo: + $(LIBTOOL) --mode=compile --tag YASM $(srcdir)/nasm_lt.sh $(YASM) -f elf64 $(YAFLAGS) -I$(srcdir) -I. $< -o $@ +endif diff --git a/configure b/configure deleted file mode 100755 index c3b95c227..000000000 --- a/configure +++ /dev/null @@ -1,173 +0,0 @@ -#!/bin/sh - -if test -f config.mk; then - exit 0 -fi - -if test -z "$CC"; then - CC=cc -fi - -if test -z "$YASM"; then - YASM=yasm -fi - -# test yasm -$YASM -f elf64 -o /tmp/secp256k1-$$.o - </dev/null </dev/null - if [ "$?" = 0 ]; then - HAVE_YASM=1 - fi - rm -rf /tmp/secp256k1-$$-2.o /tmp/secp256k1-$$.o -fi - -# test openssl -HAVE_OPENSSL=0 -$CC $CFLAGS -std=c99 -x c - -o /dev/null -lcrypto 2>/dev/null < -int main() { - BN_CTX *ctx = BN_CTX_new(); - BN_CTX_free(ctx); - return 0; -} -EOF -if [ "$?" = 0 ]; then - HAVE_OPENSSL=1 -fi - -# test openssl/EC -HAVE_OPENSSL_EC=0 -if [ "$HAVE_OPENSSL" = "1" ]; then -$CC $CFLAGS -std=c99 -x c - -o /dev/null -lcrypto 2>/dev/null < -#include -#include -int main() { - EC_KEY *eckey = EC_KEY_new_by_curve_name(NID_secp256k1); - ECDSA_sign(0, NULL, 0, NULL, NULL, eckey); - ECDSA_verify(0, NULL, 0, NULL, 0, eckey); - EC_KEY_free(eckey); - return 0; -} -EOF -if [ "$?" = 0 ]; then - HAVE_OPENSSL_EC=1 -fi -fi - -# test gmp -HAVE_GMP=0 -$CC $CFLAGS -std=c99 -x c - -o /dev/null -lgmp 2>/dev/null < -int main() { - mpz_t n; - mpz_init(n); - mpz_clear(n); - return 0; -} -EOF -if [ "$?" = 0 ]; then - HAVE_GMP=1 -fi - -# test __int128 -HAVE_INT128=0 -$CC $CFLAGS -std=c99 -x c - -o /dev/null 2>/dev/null < -int main() { - __int128 x = 0; - return 0; -} -EOF -if [ "$?" = 0 ]; then - HAVE_INT128=1 -fi - -for arg in "$@"; do - case "$arg" in - --no-yasm) - HAVE_YASM=0 - ;; - --no-gmp) - HAVE_GMP=0 - ;; - --no-openssl) - HAVE_OPENSSL=0 - ;; - --use-endomorphism) - USE_ENDOMORPHISM=1 - ;; - esac -done - -LINK_OPENSSL=0 -LINK_GMP=0 -USE_ASM=0 - -# select field implementation -if [ "$HAVE_YASM" = "1" ]; then - CFLAGS_FIELD="-DUSE_FIELD_5X52 -DUSE_FIELD_5X52_ASM" - USE_ASM=1 -elif [ "$HAVE_INT128" = "1" ]; then - CFLAGS_FIELD="-DUSE_FIELD_5X52 -DUSE_FIELD_5X52_INT128" -elif [ "$HAVE_GMP" = "1" ]; then - CFLAGS_FIELD="-DUSE_FIELD_GMP" - LINK_GMP=1 -else - CFLAGS_FIELD="-DUSE_FIELD_10X26" -fi - -# select num implementation -if [ "$HAVE_GMP" = "1" ]; then - CFLAGS_NUM="-DUSE_NUM_GMP -DUSE_FIELD_INV_NUM" - LINK_GMP=1 -elif [ "$HAVE_OPENSSL" = "1" ]; then - CFLAGS_NUM="-DUSE_NUM_OPENSSL -DUSE_FIELD_INV_BUILTIN" - LINK_OPENSSL=1 -else - echo "No usable num implementation found" >&2 - exit 1 -fi - -CFLAGS_EXTRA="$CFLAGS_FIELD $CFLAGS_NUM" -LDFLAGS_EXTRA="" -if [ "$LINK_GMP" = "1" ]; then - LDFLAGS_EXTRA="-lgmp" -fi -if [ "$LINK_OPENSSL" = "1" ]; then - LDFLAGS_EXTRA="-lcrypto" -else - if [ "$HAVE_OPENSSL_EC" = "1" ]; then - LDFLAGS_TEST_EXTRA="-lcrypto" - fi -fi - -CFLAGS_TEST_EXTRA="" -if [ "$HAVE_OPENSSL_EC" = "1" ]; then - CFLAGS_TEST_EXTRA="-DENABLE_OPENSSL_TESTS" -fi -if [ "$USE_ENDOMORPHISM" = "1" ]; then - CFLAGS_EXTRA="$(CFLAGS_EXTRA) -DUSE_ENDOMORPHISM" -fi -echo "CC=$CC" > config.mk -echo "YASM=$YASM" >>config.mk -echo "CFLAGS_EXTRA=$CFLAGS_EXTRA" >> config.mk -echo "CFLAGS_TEST_EXTRA=$CFLAGS_TEST_EXTRA" >> config.mk -echo "LDFLAGS_EXTRA=$LDFLAGS_EXTRA" >> config.mk -echo "LDFLAGS_TEST_EXTRA=$LDFLAGS_TEST_EXTRA" >> config.mk -echo "USE_ASM=$USE_ASM" >>config.mk -echo "OPTLEVEL=O2" >>config.mk diff --git a/configure.ac b/configure.ac new file mode 100644 index 000000000..99de689ca --- /dev/null +++ b/configure.ac @@ -0,0 +1,279 @@ +AC_PREREQ([2.60]) +AC_INIT([libsecp256k1],[0.1]) +AC_CONFIG_AUX_DIR([src/build-aux]) +AC_CONFIG_MACRO_DIR([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 + +AC_PROG_CC +AC_PROG_CPP +AC_PROG_INSTALL +AC_PROG_SED +PKG_PROG_PKG_CONFIG + +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 + +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 yes)]), + [use_endomorphism=$enableval], + [use_endomorphism=yes]) + +AC_ARG_WITH([fields], [AS_HELP_STRING([--with-fields=gmp|int128|x86_64_asm|fallback|auto], +[Specify Fields Implementation. Default is auto])],[req_field=$withval], [req_field=auto]) + +AC_ARG_WITH([bignum], [AS_HELP_STRING([--with-bignum=gmp|openssl|auto], +[Specify Bignum Implementation. Default is auto])],[req_bignum=$withval], [req_bignum=auto]) + +AC_CHECK_TYPES([__int128]) + +AC_DEFUN([SECP_INT128_CHECK],[ +has_int128=$ac_cv_type___int128 +if test x"$has_int128" != x"yes" && test x"$set_field" = x"int128"; then + AC_MSG_ERROR([$set_field field support explicitly requested but is not compatible with this host]) +fi +]) + +AC_DEFUN([SECP_X86_64_ASM_CHECK],[ +if test x"$host_cpu" == x"x86_64"; then + AC_CHECK_PROG(YASM, yasm, yasm) +else + if test x"$set_field" = x"x86_64_asm"; then + AC_MSG_ERROR([$set_field field support explicitly requested but is not compatible with this host]) + fi +fi +if test x$YASM = x; then + if test x"$set_field" = x"x86_64_asm"; then + AC_MSG_ERROR([$set_field field support explicitly requested but yasm was not found]) + fi + has_x86_64_asm=no +else + has_x86_64_asm=yes +fi +]) + +AC_DEFUN([SECP_OPENSSL_CHECK],[ +if test x"$use_pkgconfig" = x"yes"; then + : #NOP + m4_ifdef([PKG_CHECK_MODULES],[ + PKG_CHECK_MODULES([SSL], [libssl], [has_libssl=yes; AC_DEFINE(HAVE_LIBSSL,1,[Define this symbol if libssl is installed])],[has_libssl=no]) + PKG_CHECK_MODULES([CRYPTO], [libcrypto], [has_libcrypto=yes; AC_DEFINE(HAVE_LIBCRYPTO,1,[Define this symbol if libcrypto is installed])],[has_libcrypto=no]) + : #NOP + ]) +else + AC_CHECK_HEADER(openssl/ssl.h,[AC_CHECK_LIB(ssl, main,[has_libssl=yes; SSL_LIBS=-lssl; AC_DEFINE(HAVE_LIBSSL,1,[Define this symbol if libssl is installed])])]) + AC_CHECK_HEADER(openssl/crypto.h,[AC_CHECK_LIB(crypto, main,[has_libcrypto=yes; CRYPTO_LIBS=-lcrypto; AC_DEFINE(HAVE_LIBCRYPTO,1,[Define this symbol if libcrypto is installed])] +)]) + LIBS= +fi +if test x"$has_libssl" == x"yes" && test x"$has_openssl_ec" = x; then + AC_MSG_CHECKING(for EC functions in libssl) + AC_TRY_COMPILE([ + #include + #include + #include ],[ + EC_KEY *eckey = EC_KEY_new_by_curve_name(714); + ECDSA_sign(0, NULL, 0, NULL, NULL, eckey); + ECDSA_verify(0, NULL, 0, NULL, 0, eckey); + EC_KEY_free(eckey); + ],[has_openssl_ec=yes], [has_openssl_ec=no]) + AC_MSG_RESULT([$has_openssl_ec]) +fi +if test x"$set_bignum" = x"openssl"; then + if test x"$has_libssl" != x"yes"; then + AC_MSG_ERROR([$set_bignum field support explicitly requested but libssl was not found]) + fi + if test x"$has_libcrypto" != x"yes"; then + AC_MSG_ERROR([$set_bignum field support explicitly requested but libcrypto was not found]) + fi +fi +]) + +AC_DEFUN([SECP_GMP_CHECK],[ +if test x"$has_gmp" != x"yes"; then + AC_CHECK_HEADER(gmp.h,[AC_CHECK_LIB(gmp, __gmpz_init,[has_gmp=yes; GMP_LIBS=-lgmp; AC_DEFINE(HAVE_LIBGMP,1,[Define this symbol if libgmp is installed])])]) +fi +if test x"$set_field" = x"gmp" && test x"$has_gmp" != x"yes"; then + AC_MSG_ERROR([$set_field field support explicitly requested but libgmp was not found]) +fi +if test x"$set_bignum" = x"gmp" && test x"$has_gmp" != x"yes"; then + AC_MSG_ERROR([$set_bignum field support explicitly requested but libgmp was not found]) +fi +]) + +if test x"$req_field" = x"auto"; then + SECP_X86_64_ASM_CHECK + if test x"$has_x86_64_asm" = x"yes"; then + set_field=x86_64_asm + fi + + if test x"$set_field" = x; then + SECP_INT128_CHECK + if test x"$has_int128" = x"yes"; then + set_field=int128 + 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=fallback + fi +else + set_field=$req_field + case $set_field in + x86_64_asm) + SECP_X86_64_ASM_CHECK + ;; + int128) + SECP_INT128_CHECK + ;; + gmp) + SECP_GMP_CHECK + ;; + fallback) + ;; + *) + AC_MSG_ERROR([invalid field implementation selection]) + ;; + 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 + SECP_OPENSSL_CHECK + if test x"$has_libssl" = x"yes"; then + set_bignum=openssl + fi + 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 +x86_64_asm) + AC_DEFINE(USE_FIELD_5X52_ASM, 1, [Define this symbol to use the FIELD_5X52_ASM implementation]) + AC_DEFINE(USE_FIELD_5X52, 1, [Define this symbol to use the FIELD_5X52 implementation]) + ;; +int128) + AC_DEFINE(USE_FIELD_5X52_INT128, 1, [Define this symbol to use the FIELD_5X52_INT128 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]) + ;; +fallback) + 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]) + ;; +openssl) + AC_DEFINE(USE_NUM_OPENSSL, 1,[Define this symbol to use the openssl implementation]) + AC_DEFINE(USE_FIELD_INV_BUILTIN, 1, [Define this symbol to use the FIELD_INV_BUILTIN implementation]) + SECP_INCLUDES="$SSL_CFLAGS $CRYPTO_CFLAGS" + SECP_LIBS="$CRYPTO_LIBS" + ;; +*) + AC_MSG_ERROR([invalid bignum 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_CONFIG_HEADERS([src/libsecp256k1-config.h]) +AC_CONFIG_FILES([Makefile]) +AC_SUBST(SECP_INCLUDES) +AC_SUBST(SECP_LIBS) +AC_SUBST(SECP_TEST_LIBS) +AC_SUBST(SECP_TEST_INCLUDES) +AM_CONDITIONAL([USE_ASM], [test x"$set_field" == x"x86_64_asm"]) +AM_CONDITIONAL([USE_TESTS], [test x"$use_tests" != x"no"]) +AM_CONDITIONAL([USE_BENCHMARK], [test x"$use_benchmark" != x"no"]) +AC_OUTPUT diff --git a/m4/.empty b/m4/.empty new file mode 100644 index 000000000..e69de29bb diff --git a/nasm_lt.sh b/nasm_lt.sh new file mode 100755 index 000000000..6cd73294c --- /dev/null +++ b/nasm_lt.sh @@ -0,0 +1,57 @@ +#! /bin/sh +command="" +infile="" +o_opt=no +pic=no +while [ $# -gt 0 ]; do + case "$1" in + -DPIC|-fPIC|-fpic|-Kpic|-KPIC) + if [ "$pic" != "yes" ] ; then + command="$command -DPIC" + pic=yes + fi + ;; + -f|-fbin|-faout|-faoutb|-fcoff|-felf|-felf64|-fas86| \ + -fobj|-fwin32|-fwin64|-frdf|-fieee|-fmacho|-fmacho64) + # it's a file format specifier for nasm. + command="$command $1" + ;; + -f*) + # maybe a code-generation flag for gcc. + ;; + -[Ii]*) + incdir=`echo "$1" | sed 's/^-[Ii]//'` + if [ "x$incdir" = x -a "x$2" != x ] ; then + case "$2" in + -*) ;; + *) incdir="$2"; shift;; + esac + fi + if [ "x$incdir" != x ] ; then + # In the case of NASM, the trailing slash is necessary. + incdir=`echo "$incdir" | sed 's%/*$%/%'` + command="$command -I$incdir" + fi + ;; + -o*) + o_opt=yes + command="$command $1" + ;; + *.asm) + infile=$1 + command="$command $1" + ;; + *) + command="$command $1" + ;; + esac + shift +done +if [ "$o_opt" != yes ] ; then + # By default, NASM creates an output file + # in the same directory as the input file. + outfile="-o `echo $infile | sed -e 's%^.*/%%' -e 's%\.[^.]*$%%'`.o" + command="$command $outfile" +fi +echo $command +exec $command diff --git a/src/field.h b/src/field.h index 7d187d02c..f31bbe14b 100644 --- a/src/field.h +++ b/src/field.h @@ -16,6 +16,10 @@ * normality. */ +#if defined HAVE_CONFIG_H +#include "libsecp256k1-config.h" +#endif + #if defined(USE_FIELD_GMP) #include "field_gmp.h" #elif defined(USE_FIELD_10X26) diff --git a/src/impl/field.h b/src/impl/field.h index c43188adc..e4ce62ee8 100644 --- a/src/impl/field.h +++ b/src/impl/field.h @@ -5,6 +5,10 @@ #ifndef _SECP256K1_FIELD_IMPL_H_ #define _SECP256K1_FIELD_IMPL_H_ +#if defined HAVE_CONFIG_H +#include "libsecp256k1-config.h" +#endif + #if defined(USE_FIELD_GMP) #include "field_gmp.h" #elif defined(USE_FIELD_10X26) diff --git a/src/impl/field_5x52.h b/src/impl/field_5x52.h index 5347189f1..b9b2be20e 100644 --- a/src/impl/field_5x52.h +++ b/src/impl/field_5x52.h @@ -5,6 +5,10 @@ #ifndef _SECP256K1_FIELD_REPR_IMPL_H_ #define _SECP256K1_FIELD_REPR_IMPL_H_ +#if defined HAVE_CONFIG_H +#include "libsecp256k1-config.h" +#endif + #include #include #include "../num.h" diff --git a/src/impl/num.h b/src/impl/num.h index fc6d05c3d..95b124097 100644 --- a/src/impl/num.h +++ b/src/impl/num.h @@ -5,6 +5,10 @@ #ifndef _SECP256K1_NUM_IMPL_H_ #define _SECP256K1_NUM_IMPL_H_ +#if defined HAVE_CONFIG_H +#include "libsecp256k1-config.h" +#endif + #include "../num.h" #if defined(USE_NUM_GMP) diff --git a/src/num.h b/src/num.h index b2e7462bc..596a1226c 100644 --- a/src/num.h +++ b/src/num.h @@ -5,6 +5,10 @@ #ifndef _SECP256K1_NUM_ #define _SECP256K1_NUM_ +#if defined HAVE_CONFIG_H +#include "libsecp256k1-config.h" +#endif + #if defined(USE_NUM_GMP) #include "num_gmp.h" #elif defined(USE_NUM_OPENSSL) diff --git a/src/tests.c b/src/tests.c index af7bbaad0..be34dfadb 100644 --- a/src/tests.c +++ b/src/tests.c @@ -2,6 +2,10 @@ // Distributed under the MIT/X11 software license, see the accompanying // file COPYING or http://www.opensource.org/licenses/mit-license.php. +#if defined HAVE_CONFIG_H +#include "libsecp256k1-config.h" +#endif + #include #include "impl/num.h"