diff --git a/.travis.yml b/.travis.yml index c4154e9a89..747f7cfef5 100644 --- a/.travis.yml +++ b/.travis.yml @@ -14,22 +14,23 @@ env: - FIELD=auto BIGNUM=auto SCALAR=auto ENDOMORPHISM=no STATICPRECOMPUTATION=yes ASM=no BUILD=check EXTRAFLAGS= HOST= ECDH=no RECOVERY=no EXPERIMENTAL=no JNI=no - GUAVA_URL=https://search.maven.org/remotecontent?filepath=com/google/guava/guava/18.0/guava-18.0.jar GUAVA_JAR=src/java/guava/guava-18.0.jar matrix: - - SCALAR=32bit RECOVERY=yes - - SCALAR=32bit FIELD=32bit ECDH=yes EXPERIMENTAL=yes - - SCALAR=64bit - - FIELD=64bit RECOVERY=yes - - FIELD=64bit ENDOMORPHISM=yes - - FIELD=64bit ENDOMORPHISM=yes ECDH=yes EXPERIMENTAL=yes - - FIELD=64bit ASM=x86_64 - - FIELD=64bit ENDOMORPHISM=yes ASM=x86_64 - - FIELD=32bit ENDOMORPHISM=yes - - BIGNUM=no - - BIGNUM=no ENDOMORPHISM=yes RECOVERY=yes EXPERIMENTAL=yes - - BIGNUM=no STATICPRECOMPUTATION=no - - BUILD=distcheck - - EXTRAFLAGS=CPPFLAGS=-DDETERMINISTIC - - EXTRAFLAGS=CFLAGS=-O0 - - BUILD=check-java JNI=yes ECDH=yes EXPERIMENTAL=yes +# - SCALAR=32bit RECOVERY=yes +# - SCALAR=32bit FIELD=32bit ECDH=yes EXPERIMENTAL=yes +# - SCALAR=64bit +# - FIELD=64bit RECOVERY=yes +# - FIELD=64bit ENDOMORPHISM=yes +# - FIELD=64bit ENDOMORPHISM=yes ECDH=yes EXPERIMENTAL=yes +# - FIELD=64bit ASM=x86_64 +# - FIELD=64bit ENDOMORPHISM=yes ASM=x86_64 +# - FIELD=32bit ENDOMORPHISM=yes +# - BIGNUM=no +# - BIGNUM=no ENDOMORPHISM=yes RECOVERY=yes EXPERIMENTAL=yes +# - BIGNUM=no STATICPRECOMPUTATION=no +# - BUILD=distcheck +# - EXTRAFLAGS=CPPFLAGS=-DDETERMINISTIC +# - EXTRAFLAGS=CFLAGS=-O0 +# - BUILD=check-java JNI=yes ECDH=yes EXPERIMENTAL=yes + - CMAKE=yes matrix: fast_finish: true include: @@ -59,11 +60,18 @@ matrix: packages: - gcc-multilib - libgmp-dev:i386 -before_install: mkdir -p `dirname $GUAVA_JAR` -install: if [ ! -f $GUAVA_JAR ]; then wget $GUAVA_URL -O $GUAVA_JAR; fi -before_script: ./autogen.sh -script: - - if [ -n "$HOST" ]; then export USE_HOST="--host=$HOST"; fi - - if [ "x$HOST" = "xi686-linux-gnu" ]; then export CC="$CC -m32"; fi - - ./configure --enable-experimental=$EXPERIMENTAL --enable-endomorphism=$ENDOMORPHISM --with-field=$FIELD --with-bignum=$BIGNUM --with-scalar=$SCALAR --enable-ecmult-static-precomputation=$STATICPRECOMPUTATION --enable-module-ecdh=$ECDH --enable-module-recovery=$RECOVERY --enable-jni=$JNI $EXTRAFLAGS $USE_HOST && make -j2 $BUILD +#before_install: mkdir -p `dirname $GUAVA_JAR` +#install: if [ ! -f $GUAVA_JAR ]; then wget $GUAVA_URL -O $GUAVA_JAR; fi +#before_script: if [ ! "$CMAKE" ]; ./autogen.sh; fi +#script: +# - if [ -n "$HOST" ]; then export USE_HOST="--host=$HOST"; fi +# - if [ "x$HOST" = "xi686-linux-gnu" ]; then export CC="$CC -m32"; fi +# - ./configure --enable-experimental=$EXPERIMENTAL --enable-endomorphism=$ENDOMORPHISM --with-field=$FIELD --with-bignum=$BIGNUM --with-scalar=$SCALAR --enable-ecmult-static-precomputation=$STATICPRECOMPUTATION --enable-module-ecdh=$ECDH --enable-module-recovery=$RECOVERY --enable-jni=$JNI $EXTRAFLAGS $USE_HOST && make -j2 $BUILD os: linux + +script: | + mkdir build + cd build + cmake .. + make + diff --git a/CMakeLists.txt b/CMakeLists.txt new file mode 100644 index 0000000000..ee5c2f9107 --- /dev/null +++ b/CMakeLists.txt @@ -0,0 +1,42 @@ +cmake_minimum_required(VERSION 3.5) + +project(secp256k1 LANGUAGES C) + +set(arch64bit OFF) +if(CMAKE_SIZEOF_VOID_P EQUAL 8) + set(arch64bit ON) +endif() + +option(SECP256K1_USE_FIELD_5X52 "Use 5x52 field implementation instead of 10x26" ${arch64bit}) + +option(SECP256K1_USE_GMP "Use GMP library instead of built-in implementations" OFF) + +add_subdirectory(src) + + +#target_include_directories(secp256k1 PUBLIC . ./src PRIVATE ${GMP_INCLUDE_DIR}) +#target_compile_definitions(secp256k1 +# PUBLIC -DUSE_NUM_NONE=1 -DUSE_FIELD_5X52=1 -DUSE_FIELD_INV_BUILTIN=1 -DUSE_SCALAR_4X64=1 -DUSE_SCALAR_INV_BUILTIN=1 -DHAVE___INT128=1 -DVERIFY=1 +# PRIVATE -DENABLE_MODULE_ECDH -DENABLE_MODULE_RECOVERY -DENABLE_MODULE_SCHNORR +#) +# +#add_executable(tests src/tests.c) +#target_link_libraries(tests secp256k1) +# +#add_executable(bench_ecdh src/bench_ecdh.c) +#target_link_libraries(bench_ecdh secp256k1) +# +#add_executable(bench_internal src/bench_internal.c) +#target_link_libraries(bench_internal secp256k1) +# +#add_executable(bench_recover src/bench_recover.c) +#target_link_libraries(bench_recover secp256k1) +# +#add_executable(bench_schnorr_verify src/bench_schnorr_verify.c) +#target_link_libraries(bench_schnorr_verify secp256k1) +# +#add_executable(bench_sign src/bench_sign.c) +#target_link_libraries(bench_sign secp256k1) +# +#add_executable(bench_verify src/bench_verify.c) +#target_link_libraries(bench_verify secp256k1) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt new file mode 100644 index 0000000000..307c83f073 --- /dev/null +++ b/src/CMakeLists.txt @@ -0,0 +1,28 @@ +include(CheckTypeSize) + +add_library( + secp256k1 + secp256k1.c +) + +target_include_directories(secp256k1 PRIVATE ${PROJECT_SOURCE_DIR}) + +check_type_size(__int128 have_int128 BUILTIN_TYPES_ONLY) +if(have_int128) + target_compile_definitions(secp256k1 PRIVATE HAVE___INT128 USE_SCALAR_4X64) +else() + target_compile_definitions(secp256k1 PRIVATE USE_SCALAR_8X32) +endif() + + +if(SECP256K1_USE_GMP) + target_compile_definitions(secp256k1 PRIVATE USE_NUM_GMP USE_FIELD_INV_NUM USE_SCALAR_INV_NUM) +else() + target_compile_definitions(secp256k1 PRIVATE USE_NUM_NONE USE_FIELD_INV_BUILTIN USE_SCALAR_INV_BUILTIN) +endif() + +if(SECP256K1_USE_FIELD_5X52) + target_compile_definitions(secp256k1 PRIVATE USE_FIELD_5X52) +else() + target_compile_definitions(secp256k1 PRIVATE USE_FIELD_10X26) +endif()