From 71109f67b5b422cb8cdfcfff31b216e46746f4f1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pawe=C5=82=20Bylica?= Date: Wed, 23 Sep 2015 15:05:09 +0200 Subject: [PATCH 1/4] Initial cmake build script. --- CMakeLists.txt | 37 +++++++++++++++++++++++++++++++++++++ 1 file changed, 37 insertions(+) create mode 100644 CMakeLists.txt diff --git a/CMakeLists.txt b/CMakeLists.txt new file mode 100644 index 0000000000..ef4daf1d7a --- /dev/null +++ b/CMakeLists.txt @@ -0,0 +1,37 @@ +cmake_minimum_required(VERSION 3.2) + +project(secp256k1 LANGUAGES C) + +find_path(GMP_INCLUDE_DIR NAMES gmp.h) +find_library(GMP_LIBRARY NAMES gmp libgmp) +message(STATUS "GMP library: " ${GMP_LIBRARY}) + + +add_library(secp256k1 SHARED ${SOURCES} src/secp256k1.c) +target_include_directories(secp256k1 PUBLIC . ./src PRIVATE ${GMP_INCLUDE_DIR}) +target_compile_definitions(secp256k1 + PUBLIC -DUSE_NUM_GMP=1 -DUSE_FIELD_5X52=1 -DUSE_FIELD_INV_NUM=1 -DUSE_SCALAR_4X64=1 -DUSE_SCALAR_INV_NUM=1 -DHAVE___INT128=1 -DVERIFY=1 + PRIVATE -DENABLE_MODULE_ECDH -DENABLE_MODULE_RECOVERY -DENABLE_MODULE_SCHNORR +) +target_link_libraries(secp256k1 PUBLIC ${GMP_LIBRARIES}) + +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) From 0430dd544d7d70739b3238a3be72b598e296d6ca Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pawe=C5=82=20Bylica?= Date: Wed, 30 Sep 2015 11:04:56 +0200 Subject: [PATCH 2/4] Drop GMP dependency. --- CMakeLists.txt | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index ef4daf1d7a..9ae07468d0 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -2,18 +2,13 @@ cmake_minimum_required(VERSION 3.2) project(secp256k1 LANGUAGES C) -find_path(GMP_INCLUDE_DIR NAMES gmp.h) -find_library(GMP_LIBRARY NAMES gmp libgmp) -message(STATUS "GMP library: " ${GMP_LIBRARY}) - add_library(secp256k1 SHARED ${SOURCES} src/secp256k1.c) target_include_directories(secp256k1 PUBLIC . ./src PRIVATE ${GMP_INCLUDE_DIR}) target_compile_definitions(secp256k1 - PUBLIC -DUSE_NUM_GMP=1 -DUSE_FIELD_5X52=1 -DUSE_FIELD_INV_NUM=1 -DUSE_SCALAR_4X64=1 -DUSE_SCALAR_INV_NUM=1 -DHAVE___INT128=1 -DVERIFY=1 + 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 ) -target_link_libraries(secp256k1 PUBLIC ${GMP_LIBRARIES}) add_executable(tests src/tests.c) target_link_libraries(tests secp256k1) From 22d4944f2e05a16bdc8f4dcf1ccbb5767bf29adf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pawe=C5=82=20Bylica?= Date: Thu, 5 Apr 2018 18:43:44 +0200 Subject: [PATCH 3/4] Updage CMake --- CMakeLists.txt | 68 ++++++++++++++++++++++++++-------------------- src/CMakeLists.txt | 28 +++++++++++++++++++ 2 files changed, 67 insertions(+), 29 deletions(-) create mode 100644 src/CMakeLists.txt diff --git a/CMakeLists.txt b/CMakeLists.txt index 9ae07468d0..ee5c2f9107 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,32 +1,42 @@ -cmake_minimum_required(VERSION 3.2) +cmake_minimum_required(VERSION 3.5) project(secp256k1 LANGUAGES C) - -add_library(secp256k1 SHARED ${SOURCES} src/secp256k1.c) -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) +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() From 37640dee9c1aad8d9ce6f0d4a51369f952945b33 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pawe=C5=82=20Bylica?= Date: Thu, 5 Apr 2018 18:51:09 +0200 Subject: [PATCH 4/4] Travis for CMake --- .travis.yml | 54 ++++++++++++++++++++++++++++++----------------------- 1 file changed, 31 insertions(+), 23 deletions(-) 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 +