diff --git a/cmake/modules/InstallationHelper.cmake b/cmake/modules/InstallationHelper.cmake --- a/cmake/modules/InstallationHelper.cmake +++ b/cmake/modules/InstallationHelper.cmake @@ -8,6 +8,9 @@ RUNTIME DESTINATION "${CMAKE_INSTALL_BINDIR}" COMPONENT ${PROJECT_NAME} + ARCHIVE + DESTINATION "${CMAKE_INSTALL_LIBDIR}" + COMPONENT ${PROJECT_NAME} LIBRARY DESTINATION "${CMAKE_INSTALL_LIBDIR}" COMPONENT ${PROJECT_NAME} diff --git a/contrib/gitian-descriptors/gitian-linux.yml b/contrib/gitian-descriptors/gitian-linux.yml --- a/contrib/gitian-descriptors/gitian-linux.yml +++ b/contrib/gitian-descriptors/gitian-linux.yml @@ -54,6 +54,8 @@ CMAKE_TOOLCHAIN_FILE[arm-linux-gnueabihf]=LinuxARM.cmake CMAKE_TOOLCHAIN_FILE[aarch64-linux-gnu]=LinuxAArch64.cmake + INSTALL_COMPONENTS="bitcoind bitcoin-qt bitcoin-seeder" + FAKETIME_HOST_PROGS="" FAKETIME_PROGS="date ar ranlib nm" HOST_CFLAGS="-O2 -g" @@ -164,7 +166,10 @@ ninja ninja check-security ninja check-symbols - ninja install + + for _component in ${INSTALL_COMPONENTS}; do + cmake -DCOMPONENT=${_component} -P cmake_install.cmake + done cd installed find ${DISTNAME}/bin -type f -executable -exec ../contrib/devtools/split-debug.sh {} {} {}.dbg \; diff --git a/contrib/gitian-descriptors/gitian-osx.yml b/contrib/gitian-descriptors/gitian-osx.yml --- a/contrib/gitian-descriptors/gitian-osx.yml +++ b/contrib/gitian-descriptors/gitian-osx.yml @@ -49,6 +49,8 @@ declare -A CMAKE_TOOLCHAIN_FILE CMAKE_TOOLCHAIN_FILE[x86_64-apple-darwin14]=OSX.cmake + INSTALL_COMPONENTS="bitcoind bitcoin-qt bitcoin-seeder" + FAKETIME_HOST_PROGS="" FAKETIME_PROGS="ar ranlib date dmg genisoimage" @@ -160,7 +162,10 @@ -DGENISOIMAGE_EXECUTABLE="${WRAP_DIR}/genisoimage" ninja - ninja install + + for _component in ${INSTALL_COMPONENTS}; do + cmake -DCOMPONENT=${_component} -P cmake_install.cmake + done export PYTHONPATH="${BASEPREFIX}/${i}/native/lib/python3/dist-packages:${PYTHONPATH}" ninja osx-deploydir diff --git a/contrib/gitian-descriptors/gitian-win.yml b/contrib/gitian-descriptors/gitian-win.yml --- a/contrib/gitian-descriptors/gitian-win.yml +++ b/contrib/gitian-descriptors/gitian-win.yml @@ -43,6 +43,8 @@ CMAKE_TOOLCHAIN_FILE[i686-w64-mingw32]=Win32.cmake CMAKE_TOOLCHAIN_FILE[x86_64-w64-mingw32]=Win64.cmake + INSTALL_COMPONENTS="bitcoind bitcoin-qt" + FAKETIME_HOST_PROGS="ar ranlib nm windres strip objcopy" FAKETIME_PROGS="date makensis zip" HOST_CFLAGS="-O2 -g" @@ -186,7 +188,11 @@ ninja ninja check-security - ninja install + + for _component in ${INSTALL_COMPONENTS}; do + cmake -DCOMPONENT=${_component} -P cmake_install.cmake + done + ninja package cp -f bitcoin-abc-*-setup-unsigned.exe ${OUTDIR}/ diff --git a/src/secp256k1/.travis.yml b/src/secp256k1/.travis.yml --- a/src/secp256k1/.travis.yml +++ b/src/secp256k1/.travis.yml @@ -21,7 +21,8 @@ - ENDOMORPHISM=no - STATICPRECOMPUTATION=yes - ASM=no - - BUILD=check + - AUTOTOOLS_TARGET=check + - CMAKE_TARGET=check-secp256k1 - AUTOTOOLS_EXTRA_FLAGS= - CMAKE_EXTRA_FLAGS= - HOST= @@ -43,10 +44,10 @@ - BIGNUM=no - BIGNUM=no ENDOMORPHISM=yes RECOVERY=yes EXPERIMENTAL=yes - BIGNUM=no STATICPRECOMPUTATION=no - - BUILD=distcheck + - AUTOTOOLS_TARGET=distcheck CMAKE_TARGET=install - AUTOTOOLS_EXTRA_FLAGS=CPPFLAGS=-DDETERMINISTIC CMAKE_EXTRA_FLAGS=-DCMAKE_C_FLAGS=-DDETERMINISTIC - AUTOTOOLS_EXTRA_FLAGS=CFLAGS=-O0 CMAKE_EXTRA_FLAGS=-DCMAKE_C_FLAGS=-O0 - - BUILD=check-java JNI=yes ECDH=yes EXPERIMENTAL=yes + - AUTOTOOLS_TARGET=check-java CMAKE_TARGET=check-secp256k1-java JNI=yes ECDH=yes EXPERIMENTAL=yes - SCHNORR=no jobs: fast_finish: true diff --git a/src/secp256k1/CMakeLists.txt b/src/secp256k1/CMakeLists.txt --- a/src/secp256k1/CMakeLists.txt +++ b/src/secp256k1/CMakeLists.txt @@ -1,7 +1,7 @@ # Copyright (c) 2017 The Bitcoin developers cmake_minimum_required(VERSION 3.13) -project(secp256k1 LANGUAGES C) +project(secp256k1 LANGUAGES C VERSION 0.1.0) # Add path for custom modules when building as a standalone project list(APPEND CMAKE_MODULE_PATH ${CMAKE_SOURCE_DIR}/cmake/modules) @@ -37,6 +37,11 @@ add_library(secp256k1 src/secp256k1.c) target_include_directories(secp256k1 PUBLIC include) +set(SECP256K1_PUBLIC_HEADERS + include/secp256k1.h + include/secp256k1_preallocated.h +) + option(SECP256K1_ENABLE_BIGNUM "Use the GMP bignum implementation" OFF) if(SECP256K1_ENABLE_BIGNUM) # We need to link in GMP @@ -147,6 +152,7 @@ if(SECP256K1_ENABLE_MODULE_ECDH) set(ENABLE_MODULE_ECDH 1) add_secp256k1_bench(ecdh src/bench_ecdh.c) + list(APPEND SECP256K1_PUBLIC_HEADERS include/secp256k1_ecdh.h) endif() # MultiSet module @@ -154,6 +160,7 @@ if(SECP256K1_ENABLE_MODULE_MULTISET) set(ENABLE_MODULE_MULTISET 1) add_secp256k1_bench(multiset src/bench_multiset.c) + list(APPEND SECP256K1_PUBLIC_HEADERS include/secp256k1_multiset.h) endif() # Recovery module @@ -161,12 +168,14 @@ if(SECP256K1_ENABLE_MODULE_RECOVERY) set(ENABLE_MODULE_RECOVERY 1) add_secp256k1_bench(recover src/bench_recover.c) + list(APPEND SECP256K1_PUBLIC_HEADERS include/secp256k1_recovery.h) endif() # Schnorr module option(SECP256K1_ENABLE_MODULE_SCHNORR "Build libsecp256k1's Schnorr module" ON) if(SECP256K1_ENABLE_MODULE_SCHNORR) set(ENABLE_MODULE_SCHNORR 1) + list(APPEND SECP256K1_PUBLIC_HEADERS include/secp256k1_schnorr.h) endif() # Endomorphism @@ -200,6 +209,14 @@ target_sources(secp256k1 PRIVATE src/ecmult_static_context.h) endif() +include(InstallationHelper) +if(BUILD_SHARED_LIBS) + install_shared_library(secp256k1 PUBLIC_HEADER ${SECP256K1_PUBLIC_HEADERS}) +else() + set_property(TARGET secp256k1 PROPERTY PUBLIC_HEADER ${SECP256K1_PUBLIC_HEADERS}) + install_target(secp256k1) +endif() + # Generate the config configure_file(src/libsecp256k1-config.h.cmake.in src/libsecp256k1-config.h ESCAPE_QUOTES) target_compile_definitions(secp256k1 PRIVATE HAVE_CONFIG_H SECP256K1_BUILD) @@ -220,6 +237,8 @@ src/java/org_bitcoin_Secp256k1Context.c ) + install_shared_library(secp256k1_jni) + target_include_directories(secp256k1_jni PUBLIC ${JNI_INCLUDE_DIRS}) # As per CMake documentation: the POSITION_INDEPENDENT_CODE property is set # when a target is created. It defaults to True for SHARED or MODULE library diff --git a/src/secp256k1/README.md b/src/secp256k1/README.md --- a/src/secp256k1/README.md +++ b/src/secp256k1/README.md @@ -75,4 +75,5 @@ cmake -GNinja .. ninja ninja check-secp256k1 +sudo ninja install # optional ``` diff --git a/src/secp256k1/travis/build_autotools.sh b/src/secp256k1/travis/build_autotools.sh --- a/src/secp256k1/travis/build_autotools.sh +++ b/src/secp256k1/travis/build_autotools.sh @@ -31,6 +31,6 @@ $AUTOTOOLS_EXTRA_FLAGS \ $USE_HOST -make -j2 $BUILD +make -j2 $AUTOTOOLS_TARGET popd diff --git a/src/secp256k1/travis/build_cmake.sh b/src/secp256k1/travis/build_cmake.sh --- a/src/secp256k1/travis/build_cmake.sh +++ b/src/secp256k1/travis/build_cmake.sh @@ -8,7 +8,7 @@ CMAKE_EXTRA_FLAGS="-DCMAKE_C_FLAGS=-m32" fi -mkdir -p buildcmake +mkdir -p buildcmake/install pushd buildcmake # Use the cmake version installed via APT instead of the Travis custom one. @@ -16,6 +16,7 @@ ${CMAKE_COMMAND} --version ${CMAKE_COMMAND} -GNinja .. \ + -DCMAKE_INSTALL_PREFIX=install \ -DSECP256K1_ECMULT_STATIC_PRECOMPUTATION=$STATICPRECOMPUTATION \ -DSECP256K1_ENABLE_MODULE_ECDH=$ECDH \ -DSECP256K1_ENABLE_MODULE_RECOVERY=$RECOVERY \ @@ -28,6 +29,6 @@ -DUSE_SCALAR=$SCALAR \ $CMAKE_EXTRA_FLAGS -ninja check-secp256k1 +ninja $CMAKE_TARGET popd