diff --git a/builds/cmake/CMakeLists.txt b/builds/cmake/CMakeLists.txt index 7bd40d10..a1c20cff 100644 --- a/builds/cmake/CMakeLists.txt +++ b/builds/cmake/CMakeLists.txt @@ -6,8 +6,57 @@ ############################################################################### cmake_minimum_required(VERSION 3.30 FATAL_ERROR) +find_package(Git QUIET) + +set( GIT_COMMIT_HASH "unknown" ) +set( GIT_COMMIT_HEIGHT 0 ) +set( GIT_DIRTY 0 ) +set( GIT_ORIGIN_URL "https://github.com/libbitcoin/libbitcoin-node" ) + +if ( GIT_EXECUTABLE ) + execute_process( + COMMAND ${GIT_EXECUTABLE} rev-parse HEAD + WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} + OUTPUT_VARIABLE GIT_COMMIT_HASH + OUTPUT_STRIP_TRAILING_WHITESPACE + ERROR_QUIET ) + + execute_process( + COMMAND ${GIT_EXECUTABLE} rev-list --count HEAD + WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} + OUTPUT_VARIABLE GIT_COMMIT_HEIGHT + OUTPUT_STRIP_TRAILING_WHITESPACE + ERROR_QUIET ) + + if ( NOT GIT_COMMIT_HEIGHT ) + set( GIT_COMMIT_HEIGHT 0 ) + endif() + + execute_process( + COMMAND ${GIT_EXECUTABLE} remote get-url origin + WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} + OUTPUT_VARIABLE GIT_ORIGIN_URL + OUTPUT_STRIP_TRAILING_WHITESPACE + ERROR_QUIET ) + + execute_process( + COMMAND ${GIT_EXECUTABLE} status --porcelain + WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} + OUTPUT_VARIABLE GIT_STATUS + OUTPUT_STRIP_TRAILING_WHITESPACE + ERROR_QUIET ) + + if ( GIT_STATUS ) + set( GIT_DIRTY 1 ) + endif() +endif() + +set( LIBBITCOIN_VERSION_MAJOR 4 ) +set( LIBBITCOIN_VERSION_MINOR 0 ) +set( LIBBITCOIN_VERSION_PATCH ${GIT_COMMIT_HEIGHT} ) + project( libbitcoin-node - VERSION 4.0.0 + VERSION ${LIBBITCOIN_VERSION_MAJOR}.${LIBBITCOIN_VERSION_MINOR}.${LIBBITCOIN_VERSION_PATCH} DESCRIPTION "Bitcoin Full Node" LANGUAGES C CXX ) @@ -125,6 +174,10 @@ endif() include(CheckLinkerFlag) +#------------------------------------------------------------------------------ +# Configurable file(s). +#------------------------------------------------------------------------------ + #------------------------------------------------------------------------------ # libbitcoin-node library #------------------------------------------------------------------------------ diff --git a/builds/cmake/install-cmake.sh b/builds/cmake/install-cmake.sh index 44038d97..9ecf571f 100755 --- a/builds/cmake/install-cmake.sh +++ b/builds/cmake/install-cmake.sh @@ -16,10 +16,15 @@ # Default: OFF # -Denable-shani= Use Intel/ARM SHA Extensions. # Default: OFF +# -Dwith-ultrafast= Use shrec/UltrafastSecp256k1. +# Default: OFF +# -Dwith-secp256k1= Use bitcoin-core/secp256k1. +# Default: ON # -Dwith-ssl= Use embedded ssl library. # Default: ON # --build-boost Build Boost libraries # --build-secp256k1 Build libsecp256k1 libraries +# --build-ultrafast Build UltrafastSecp256k1 libraries # --build-src-dir= Location for sources. # Default: $(pwd) # --build-obj-dir= Location for intermediate objects. @@ -69,6 +74,13 @@ if [[ -z ${secp256k1_TAG} ]]; then secp256k1_TAG="v0.7.0" fi +if [[ -z ${UltrafastSecp256k1_OWNER} ]]; then + UltrafastSecp256k1_OWNER="pmienk" +fi +if [[ -z ${UltrafastSecp256k1_TAG} ]]; then + UltrafastSecp256k1_TAG="main" +fi + if [[ -z ${libbitcoin_system_OWNER} ]]; then libbitcoin_system_OWNER="libbitcoin" fi @@ -103,26 +115,27 @@ main() for OPTION in "$@"; do case ${OPTION} in - (--build-boost) BUILD_boost="yes";; - (--build-secp256k1) BUILD_secp256k1="yes";; - (--build-src-dir=*) BUILD_SRC_DIR="${OPTION#*=}";; - (--build-obj-dir=*) BUILD_OBJ_DIR="${OPTION#*=}";; - (--build-obj-dir-relative) BUILD_OBJ_DIR_RELATIVE="yes";; - (--build-config=*) BUILD_CONFIG="${OPTION#*=}";; - (--build-link=*) BUILD_LINK="${OPTION#*=}";; - (--build-full-repositories) BUILD_FULL_REPOSITORIES="yes";; - (--build-post-install-clean)BUILD_POST_INSTALL_CLEAN="yes";; - (--build-skip-tests) BUILD_SKIP_TESTS="yes";; - (--build-parallel=*) PARALLEL="${OPTION#*=}";; - (--build-use-local-src) BUILD_USE_LOCAL_SRC="yes";; - (--prefix=*) PREFIX="${OPTION#*=}";; - (--noninteractive) NONINTERACTIVE="yes";; - (--verbose) DISPLAY_VERBOSE="yes";; - (--help|-h) DISPLAY_HELP="yes";; - (-DCMAKE_PREFIX_PATH=*) CMAKE_PREFIX_PATH="${OPTION#*=}";; - (-DCMAKE_INSTALL_PREFIX=*) CMAKE_INSTALL_PREFIX="${OPTION#*=}";; - (-DCMAKE_INCLUDE_PATH=*) CMAKE_INCLUDE_PATH="${OPTION#*=}";; - (-DCMAKE_LIBRARY_PATH=*) CMAKE_LIBRARY_PATH="${OPTION#*=}";; + (--build-boost) BUILD_boost="yes";; + (--build-secp256k1) BUILD_secp256k1="yes";; + (--build-ultrafast) BUILD_ultrafast="yes";; + (--build-src-dir=*) BUILD_SRC_DIR="${OPTION#*=}";; + (--build-obj-dir=*) BUILD_OBJ_DIR="${OPTION#*=}";; + (--build-obj-dir-relative) BUILD_OBJ_DIR_RELATIVE="yes";; + (--build-config=*) BUILD_CONFIG="${OPTION#*=}";; + (--build-link=*) BUILD_LINK="${OPTION#*=}";; + (--build-full-repositories) BUILD_FULL_REPOSITORIES="yes";; + (--build-post-install-clean) BUILD_POST_INSTALL_CLEAN="yes";; + (--build-skip-tests) BUILD_SKIP_TESTS="yes";; + (--build-parallel=*) PARALLEL="${OPTION#*=}";; + (--build-use-local-src) BUILD_USE_LOCAL_SRC="yes";; + (--prefix=*) PREFIX="${OPTION#*=}";; + (--noninteractive) NONINTERACTIVE="yes";; + (--verbose) DISPLAY_VERBOSE="yes";; + (--help|-h) DISPLAY_HELP="yes";; + (-DCMAKE_PREFIX_PATH=*) CMAKE_PREFIX_PATH="${OPTION#*=}";; + (-DCMAKE_INSTALL_PREFIX=*) CMAKE_INSTALL_PREFIX="${OPTION#*=}";; + (-DCMAKE_INCLUDE_PATH=*) CMAKE_INCLUDE_PATH="${OPTION#*=}";; + (-DCMAKE_LIBRARY_PATH=*) CMAKE_LIBRARY_PATH="${OPTION#*=}";; esac done @@ -130,6 +143,7 @@ main() CONFIGURE_OPTIONS=("$@") CONFIGURE_OPTIONS=("${CONFIGURE_OPTIONS[@]/--build-boost/}") CONFIGURE_OPTIONS=("${CONFIGURE_OPTIONS[@]/--build-secp256k1/}") + CONFIGURE_OPTIONS=("${CONFIGURE_OPTIONS[@]/--build-ultrafast/}") CONFIGURE_OPTIONS=("${CONFIGURE_OPTIONS[@]/--build-src-dir=*/}") CONFIGURE_OPTIONS=("${CONFIGURE_OPTIONS[@]/--build-obj-dir=*/}") CONFIGURE_OPTIONS=("${CONFIGURE_OPTIONS[@]/--build-obj-dir-relative/}") @@ -145,6 +159,7 @@ main() CONFIGURE_OPTIONS=("${CONFIGURE_OPTIONS[@]/--verbose/}") CONFIGURE_OPTIONS=("${CONFIGURE_OPTIONS[@]/--help/}") CONFIGURE_OPTIONS=("${CONFIGURE_OPTIONS[@]/-h/}") + CONFIGURE_OPTIONS_CMAKE=("${CONFIGURE_OPTIONS[@]}") msg_verbose "*** ARGUMENTS: ${CONFIGURE_OPTIONS_ORIGINAL[*]}" msg_verbose "*** SANITIZED: ${CONFIGURE_OPTIONS[*]}" @@ -224,6 +239,10 @@ main() exit 1 fi + if [[ "${BUILD_SKIP_TESTS}" == "yes" ]]; then + CONFIGURE_OPTIONS_CMAKE=( "${CONFIGURE_OPTIONS_CMAKE[@]}" "-Dwith-tests=OFF" ) + fi + # --prefix if [[ -z "${PREFIX}" ]]; then # Always set a prefix (required for OSX and lib detection). @@ -248,21 +267,23 @@ main() msg_error "Both PREFIX and CMAKE_INSTALL_PREFIX have been defined differently." help exit 1 - elif [[ -n "${PREFIX}" ]]; then + fi + + if [[ -n "${PREFIX}" ]]; then CMAKE_INSTALL_PREFIX="${PREFIX}" - CONFIGURE_OPTIONS=( "${CONFIGURE_OPTIONS[@]/-DCMAKE_INSTALL_PREFIX=*/}" ) - CONFIGURE_OPTIONS=( "${CONFIGURE_OPTIONS[@]}" "-DCMAKE_INSTALL_PREFIX=${PREFIX}" ) + CONFIGURE_OPTIONS_CMAKE=( "${CONFIGURE_OPTIONS_CMAKE[@]/-DCMAKE_INSTALL_PREFIX=*/}" ) + CONFIGURE_OPTIONS_CMAKE=( "${CONFIGURE_OPTIONS_CMAKE[@]}" "-DCMAKE_INSTALL_PREFIX=${PREFIX}" ) fi if [[ -n "${PREFIX}" ]] && [[ -n "${CMAKE_PREFIX_PATH}" ]] && [[ "${PREFIX}" != "${CMAKE_PREFIX_PATH}" ]]; then CMAKE_PREFIX_PATH="${PREFIX}:${CMAKE_PREFIX_PATH}" - CONFIGURE_OPTIONS=( "${CONFIGURE_OPTIONS[@]/-DCMAKE_PREFIX_PATH=*/}" ) - CONFIGURE_OPTIONS=( "${CONFIGURE_OPTIONS[@]}" "-DCMAKE_PREFIX_PATH=${CMAKE_PREFIX_PATH}" ) + CONFIGURE_OPTIONS_CMAKE=( "${CONFIGURE_OPTIONS_CMAKE[@]/-DCMAKE_PREFIX_PATH=*/}" ) + CONFIGURE_OPTIONS_CMAKE=( "${CONFIGURE_OPTIONS_CMAKE[@]}" "-DCMAKE_PREFIX_PATH=${CMAKE_PREFIX_PATH}" ) elif [[ -n "${PREFIX}" ]]; then CMAKE_INSTALL_PREFIX="${PREFIX}" - CONFIGURE_OPTIONS=( "${CONFIGURE_OPTIONS[@]/-DCMAKE_PREFIX_PATH=*/}" ) - CONFIGURE_OPTIONS=( "${CONFIGURE_OPTIONS[@]}" "-DCMAKE_PREFIX_PATH=${PREFIX}" ) + CONFIGURE_OPTIONS_CMAKE=( "${CONFIGURE_OPTIONS_CMAKE[@]/-DCMAKE_PREFIX_PATH=*/}" ) + CONFIGURE_OPTIONS_CMAKE=( "${CONFIGURE_OPTIONS_CMAKE[@]}" "-DCMAKE_PREFIX_PATH=${PREFIX}" ) fi if [[ -n "${PREFIX}" ]]; then @@ -364,19 +385,19 @@ main() # Specify cmake build if [[ "${BUILD_CONFIG}" == "debug" ]]; then - CONFIGURE_OPTIONS=( "${CONFIGURE_OPTIONS[@]}" "-DCMAKE_BUILD_TYPE=Debug" ) + CONFIGURE_OPTIONS_CMAKE=( "${CONFIGURE_OPTIONS_CMAKE[@]}" "-DCMAKE_BUILD_TYPE=Debug" ) elif [[ "${BUILD_CONFIG}" == "release" ]]; then - CONFIGURE_OPTIONS=( "${CONFIGURE_OPTIONS[@]}" "-DCMAKE_BUILD_TYPE=Release" ) + CONFIGURE_OPTIONS_CMAKE=( "${CONFIGURE_OPTIONS_CMAKE[@]}" "-DCMAKE_BUILD_TYPE=Release" ) fi # translate BUILD_LINK to appropriate arguments if [[ -n "${BUILD_LINK}" ]]; then - CONFIGURE_OPTIONS=( "${CONFIGURE_OPTIONS[@]/-DBUILD_SHARED_LIBS=*}" ) + CONFIGURE_OPTIONS_CMAKE=( "${CONFIGURE_OPTIONS_CMAKE[@]/-DBUILD_SHARED_LIBS=*}" ) if [[ "${BUILD_LINK}" == "dynamic" ]]; then - CONFIGURE_OPTIONS=( "${CONFIGURE_OPTIONS[@]}" "-DBUILD_SHARED_LIBS=ON" ) + CONFIGURE_OPTIONS_CMAKE=( "${CONFIGURE_OPTIONS_CMAKE[@]}" "-DBUILD_SHARED_LIBS=ON" ) else - CONFIGURE_OPTIONS=( "${CONFIGURE_OPTIONS[@]}" "-DBUILD_SHARED_LIBS=OFF" ) + CONFIGURE_OPTIONS_CMAKE=( "${CONFIGURE_OPTIONS_CMAKE[@]}" "-DBUILD_SHARED_LIBS=OFF" ) fi fi @@ -392,13 +413,14 @@ main() with_boost="--with-boost=${PREFIX}" fi + REMAP=() - for argument in "${CONFIGURE_OPTIONS[@]}"; do + for argument in "${CONFIGURE_OPTIONS_CMAKE[@]}"; do if [[ -n "${argument}" ]]; then REMAP+=( "${argument}" ) fi done - CONFIGURE_OPTIONS=( "${REMAP[@]}" ) + CONFIGURE_OPTIONS_CMAKE=( "${REMAP[@]}" ) unset REMAP msg_heading "Configuration" @@ -437,6 +459,25 @@ main() "-DSECP256K1_ENABLE_MODULE_RECOVERY=ON" "-DSECP256K1_ENABLE_MODULE_SCHNORRSIG=ON") + UltrafastSecp256k1_FLAGS=() + + UltrafastSecp256k1_OPTIONS=( + "-DSECP256K1_BUILD_TESTS=OFF" + "-DSECP256K1_BUILD_BENCH=OFF" + "-DSECP256K1_BUILD_EXAMPLES=OFF" + "-DSECP256K1_BUILD_JAVA=OFF" + "-DUFSECP_BUILD_SHARED=OFF" + "-DSECP256K1_BUILD_CABI=ON" + "-DSECP256K1_BUILD_CPU=ON" + "-DSECP256K1_BUILD_SHIM=ON" + "-DSECP256K1_BUILD_CUDA=OFF" + "-DSECP256K1_BUILD_ROCM=OFF" + "-DSECP256K1_BUILD_OPENCL=OFF" + "-DSECP256K1_BUILD_METAL=OFF" + "-DSECP256K1_INSTALL=ON" + "-DSECP256K1_INSTALL_PKGCONFIG=ON" + "-DSECP256K1_USE_ULTRAFAST=ON") + libbitcoin_system_FLAGS=() libbitcoin_system_OPTIONS=( @@ -471,10 +512,22 @@ main() source_github "${secp256k1_OWNER}" "secp256k1" "${secp256k1_TAG}" local SAVE_CPPFLAGS="${CPPFLAGS}" export CPPFLAGS="${CPPFLAGS} ${secp256k1_FLAGS[@]}" - build_cmake "secp256k1" "." "${PARALLEL}" "${secp256k1_OPTIONS[@]}" "${CONFIGURE_OPTIONS[@]}" - install_make "secp256k1" + build_cmake "secp256k1" "." "${PARALLEL}" "${secp256k1_OPTIONS[@]}" "${CONFIGURE_OPTIONS_CMAKE[@]}" + install_cmake "secp256k1" if [[ "${BUILD_POST_INSTALL_CLEAN}" == "yes" ]]; then - clean_make "secp256k1" + clean_cmake "secp256k1" + fi + export CPPFLAGS="${SAVE_CPPFLAGS}" + fi + + if [[ ${BUILD_ultrafast} == "yes" ]]; then + source_github "${UltrafastSecp256k1_OWNER}" "UltrafastSecp256k1" "${UltrafastSecp256k1_TAG}" + local SAVE_CPPFLAGS="${CPPFLAGS}" + export CPPFLAGS="${CPPFLAGS} ${UltrafastSecp256k1_FLAGS[@]}" + build_cmake "UltrafastSecp256k1" "." "${PARALLEL}" "${UltrafastSecp256k1_OPTIONS[@]}" "${CONFIGURE_OPTIONS_CMAKE[@]}" + install_cmake "UltrafastSecp256k1" + if [[ "${BUILD_POST_INSTALL_CLEAN}" == "yes" ]]; then + clean_cmake "UltrafastSecp256k1" fi export CPPFLAGS="${SAVE_CPPFLAGS}" fi @@ -482,43 +535,43 @@ main() source_github "${libbitcoin_system_OWNER}" "libbitcoin-system" "${libbitcoin_system_TAG}" local SAVE_CPPFLAGS="${CPPFLAGS}" export CPPFLAGS="${CPPFLAGS} ${libbitcoin_system_FLAGS[@]}" - build_cmake "libbitcoin-system" "builds/cmake" "${PARALLEL}" "${libbitcoin_system_OPTIONS[@]}" "${CONFIGURE_OPTIONS[@]}" - install_make "libbitcoin-system" + build_cmake "libbitcoin-system" "builds/cmake" "${PARALLEL}" "${libbitcoin_system_OPTIONS[@]}" "${CONFIGURE_OPTIONS_CMAKE[@]}" + install_cmake "libbitcoin-system" if [[ "${BUILD_POST_INSTALL_CLEAN}" == "yes" ]]; then - clean_make "libbitcoin-system" + clean_cmake "libbitcoin-system" fi export CPPFLAGS="${SAVE_CPPFLAGS}" source_github "${libbitcoin_database_OWNER}" "libbitcoin-database" "${libbitcoin_database_TAG}" local SAVE_CPPFLAGS="${CPPFLAGS}" export CPPFLAGS="${CPPFLAGS} ${libbitcoin_database_FLAGS[@]}" - build_cmake "libbitcoin-database" "builds/cmake" "${PARALLEL}" "${libbitcoin_database_OPTIONS[@]}" "${CONFIGURE_OPTIONS[@]}" - install_make "libbitcoin-database" + build_cmake "libbitcoin-database" "builds/cmake" "${PARALLEL}" "${libbitcoin_database_OPTIONS[@]}" "${CONFIGURE_OPTIONS_CMAKE[@]}" + install_cmake "libbitcoin-database" if [[ "${BUILD_POST_INSTALL_CLEAN}" == "yes" ]]; then - clean_make "libbitcoin-database" + clean_cmake "libbitcoin-database" fi export CPPFLAGS="${SAVE_CPPFLAGS}" source_github "${libbitcoin_network_OWNER}" "libbitcoin-network" "${libbitcoin_network_TAG}" local SAVE_CPPFLAGS="${CPPFLAGS}" export CPPFLAGS="${CPPFLAGS} ${libbitcoin_network_FLAGS[@]}" - build_cmake "libbitcoin-network" "builds/cmake" "${PARALLEL}" "${libbitcoin_network_OPTIONS[@]}" "${CONFIGURE_OPTIONS[@]}" - install_make "libbitcoin-network" + build_cmake "libbitcoin-network" "builds/cmake" "${PARALLEL}" "${libbitcoin_network_OPTIONS[@]}" "${CONFIGURE_OPTIONS_CMAKE[@]}" + install_cmake "libbitcoin-network" if [[ "${BUILD_POST_INSTALL_CLEAN}" == "yes" ]]; then - clean_make "libbitcoin-network" + clean_cmake "libbitcoin-network" fi export CPPFLAGS="${SAVE_CPPFLAGS}" source_github "${libbitcoin_node_OWNER}" "libbitcoin-node" "${libbitcoin_node_TAG}" local SAVE_CPPFLAGS="${CPPFLAGS}" export CPPFLAGS="${CPPFLAGS} ${libbitcoin_node_FLAGS[@]}" - build_cmake "libbitcoin-node" "builds/cmake" "${PARALLEL}" "${libbitcoin_node_OPTIONS[@]}" "${CONFIGURE_OPTIONS[@]}" + build_cmake "libbitcoin-node" "builds/cmake" "${PARALLEL}" "${libbitcoin_node_OPTIONS[@]}" "${CONFIGURE_OPTIONS_CMAKE[@]}" if ! [[ "${BUILD_SKIP_TESTS}" == "yes" ]]; then - test_make "libbitcoin-node" "test" "${PARALLEL}" + test_cmake "libbitcoin-node" "${PARALLEL}" fi - install_make "libbitcoin-node" + install_cmake "libbitcoin-node" if [[ "${BUILD_POST_INSTALL_CLEAN}" == "yes" ]]; then - clean_make "libbitcoin-node" + clean_cmake "libbitcoin-node" fi export CPPFLAGS="${SAVE_CPPFLAGS}" @@ -646,117 +699,6 @@ source_github() pop_directory # pop BUILD_SRC_DIR } -install_make() -{ - local PROJECT="$1" - shift - - msg "Preparing to install ${PROJECT}" - - push_directory "${BUILD_SRC_DIR}/${PROJECT}" - - if [[ "${BUILD_OBJ_DIR_RELATIVE}" == "yes" ]]; then - push_directory "${BUILD_OBJ_DIR}" - else - push_directory "${BUILD_OBJ_DIR}/${PROJECT}" - fi - - make install - - if [[ ${OS} == Linux ]] && [[ "${PREFIX}" == "/usr/local" ]]; then - ldconfig - fi - - pop_directory # BUILD_OBJ_DIR - pop_directory # BUILD_SRC_DIR/PROJECT - - msg_success "'${PROJECT}' installation complete." -} - -test_make() -{ - local PROJECT="$1" - local TARGET="$2" - local JOBS="$3" - shift 3 - - msg "Preparing to test ${PROJECT}" - - push_directory "${BUILD_SRC_DIR}/${PROJECT}" - - if [[ "${BUILD_OBJ_DIR_RELATIVE}" == "yes" ]]; then - push_directory "${BUILD_OBJ_DIR}" - else - push_directory "${BUILD_OBJ_DIR}/${PROJECT}" - fi - - disable_exit_on_error - - if [[ ${JOBS} -gt ${SEQUENTIAL} ]]; then - make -j${JOBS} ${TARGET} VERBOSE=1 - else - make ${TARGET} VERBOSE=1 - fi - - local RESULT=$? - - if [[ -e "Testing/Temporary/LastTest.log" ]]; then - msg_warn "begin error log: Testing/Temporary/LastTest.log" - cat "Testing/Temporary/LastTest.log" - msg_warn " end error log: Testing/Temporary/LastTest.log" - fi - - if [[ -e "test.log" ]]; then - msg_warn "begin error log: test.log" - cat "test.log" - msg_warn " end error log: test.log" - fi - - if [[ ${RESULT} -ne 0 ]]; then - msg_error "Encountered error, please see test.log contents above." - exit ${RESULT} - fi - - enable_exit_on_error - - pop_directory # BUILD_OBJ_DIR - pop_directory # BUILD_SRC_DIR/PROJECT - - msg_success "'${PROJECT}' test complete." -} - -clean_make() -{ - local PROJECT="$1" - shift 1 - - msg "Preparing to clean ${PROJECT}" - - push_directory "${BUILD_SRC_DIR}/${PROJECT}" - - if [[ "${BUILD_OBJ_DIR_RELATIVE}" == "yes" ]]; then - push_directory "${BUILD_OBJ_DIR}" - else - push_directory "${BUILD_OBJ_DIR}/${PROJECT}" - fi - - disable_exit_on_error - - make clean - - local RESULT=$? - - if [[ ${RESULT} -ne 0 ]]; then - msg_error "Encountered error, please see test.log contents above." - exit ${RESULT} - fi - - pop_directory # BUILD_OBJ_DIR - pop_directory # BUILD_SRC_DIR/PROJECT - - msg_success "'${PROJECT}' clean complete." -} - build_boost() { local PROJECT="$1" @@ -856,7 +798,7 @@ build_cmake() if [[ "${DISPLAY_VERBOSE}" == "yes" ]]; then VERBOSITY_CMAKE="-DCMAKE_VERBOSE_MAKEFILE=ON" - VERBOSITY_MAKE="VERBOSE=1" + VERBOSITY_MAKE="--verbose" fi msg_heading "Preparing to build ${PROJECT}" @@ -884,9 +826,9 @@ build_cmake() # make if [[ ${JOBS} -gt ${SEQUENTIAL} ]]; then - make -j${JOBS} ${VERBOSITY_MAKE} + cmake --build . -j${JOBS} ${VERBOSITY_MAKE} else - make + cmake --build . ${VERBOSITY_MAKE} fi pop_directory # BUILD_OBJ_DIR @@ -894,10 +836,118 @@ build_cmake() msg_success "'${PROJECT}' built successfully." } + +clean_cmake() +{ + local PROJECT="$1" + shift 1 + + msg "Preparing to clean ${PROJECT}" + + push_directory "${BUILD_SRC_DIR}/${PROJECT}" + + if [[ "${BUILD_OBJ_DIR_RELATIVE}" == "yes" ]]; then + push_directory "${BUILD_OBJ_DIR}" + else + push_directory "${BUILD_OBJ_DIR}/${PROJECT}" + fi + + disable_exit_on_error + + cmake --build . --target clean + + local RESULT=$? + + if [[ ${RESULT} -ne 0 ]]; then + msg_error "Encountered error, please see test.log contents above." + exit ${RESULT} + fi + + pop_directory # BUILD_OBJ_DIR + pop_directory # BUILD_SRC_DIR/PROJECT + + msg_success "'${PROJECT}' clean complete." +} + +install_cmake() +{ + local PROJECT="$1" + shift + + msg "Preparing to install ${PROJECT}" + + push_directory "${BUILD_SRC_DIR}/${PROJECT}" + + if [[ "${BUILD_OBJ_DIR_RELATIVE}" == "yes" ]]; then + push_directory "${BUILD_OBJ_DIR}" + else + push_directory "${BUILD_OBJ_DIR}/${PROJECT}" + fi + + cmake --install . + + if [[ ${OS} == Linux ]] && [[ "${PREFIX}" == "/usr/local" ]]; then + ldconfig + fi + + pop_directory # BUILD_OBJ_DIR + pop_directory # BUILD_SRC_DIR/PROJECT + + msg_success "'${PROJECT}' installation complete." +} + +test_cmake() +{ + local PROJECT="$1" + local JOBS="$2" + shift 2 + + msg "Preparing to test ${PROJECT}" + + push_directory "${BUILD_SRC_DIR}/${PROJECT}" + + if [[ "${BUILD_OBJ_DIR_RELATIVE}" == "yes" ]]; then + push_directory "${BUILD_OBJ_DIR}" + else + push_directory "${BUILD_OBJ_DIR}/${PROJECT}" + fi + + disable_exit_on_error + + ctest --test-dir . + + local RESULT=$? + + if [[ -e "Testing/Temporary/LastTest.log" ]]; then + msg_warn "begin error log: Testing/Temporary/LastTest.log" + cat "Testing/Temporary/LastTest.log" + msg_warn " end error log: Testing/Temporary/LastTest.log" + fi + + if [[ -e "test.log" ]]; then + msg_warn "begin error log: test.log" + cat "test.log" + msg_warn " end error log: test.log" + fi + + if [[ ${RESULT} -ne 0 ]]; then + msg_error "Encountered error, please see test.log contents above." + exit ${RESULT} + fi + + enable_exit_on_error + + pop_directory # BUILD_OBJ_DIR + pop_directory # BUILD_SRC_DIR/PROJECT + + msg_success "'${PROJECT}' test complete." +} + display_build_variables() { msg "BUILD_boost : ${BUILD_boost}" msg "BUILD_secp256k1 : ${BUILD_secp256k1}" + msg "BUILD_ultrafast : ${BUILD_ultrafast}" msg "BUILD_SRC_DIR : ${BUILD_SRC_DIR}" msg "BUILD_OBJ_DIR : ${BUILD_OBJ_DIR}" msg "BUILD_OBJ_DIR_RELATIVE : ${BUILD_OBJ_DIR_RELATIVE}" @@ -942,6 +992,9 @@ display_constants() msg "secp256k1_OWNER : ${secp256k1_OWNER}" msg "secp256k1_TAG : ${secp256k1_TAG}" + msg "UltrafastSecp256k1_OWNER : ${UltrafastSecp256k1_OWNER}" + msg "UltrafastSecp256k1_TAG : ${UltrafastSecp256k1_TAG}" + msg "libbitcoin_system_OWNER : ${libbitcoin_system_OWNER}" msg "libbitcoin_system_TAG : ${libbitcoin_system_TAG}" @@ -968,10 +1021,15 @@ help() msg " Default: OFF" msg "-Denable-shani= Use Intel/ARM SHA Extensions." msg " Default: OFF" + msg "-Dwith-ultrafast= Use shrec/UltrafastSecp256k1." + msg " Default: OFF" + msg "-Dwith-secp256k1= Use bitcoin-core/secp256k1." + msg " Default: ON" msg "-Dwith-ssl= Use embedded ssl library." msg " Default: ON" msg "--build-boost Build Boost libraries" msg "--build-secp256k1 Build libsecp256k1 libraries" + msg "--build-ultrafast Build UltrafastSecp256k1 libraries" msg "--build-src-dir= Location for sources." msg " Default: $(pwd)" msg "--build-obj-dir= Location for intermediate objects." diff --git a/builds/cmake/install-presets.sh b/builds/cmake/install-presets.sh index c54b910e..a9dea148 100755 --- a/builds/cmake/install-presets.sh +++ b/builds/cmake/install-presets.sh @@ -16,10 +16,15 @@ # Default: OFF # -Denable-shani= Use Intel/ARM SHA Extensions. # Default: OFF +# -Dwith-ultrafast= Use shrec/UltrafastSecp256k1. +# Default: OFF +# -Dwith-secp256k1= Use bitcoin-core/secp256k1. +# Default: ON # -Dwith-ssl= Use embedded ssl library. # Default: ON # --build-boost Build Boost libraries # --build-secp256k1 Build libsecp256k1 libraries +# --build-ultrafast Build UltrafastSecp256k1 libraries # --build-preset= Specifies preset configuration to build. # --build-src-dir= Location for sources. # Default: $(pwd) @@ -59,6 +64,13 @@ if [[ -z ${secp256k1_TAG} ]]; then secp256k1_TAG="v0.7.0" fi +if [[ -z ${UltrafastSecp256k1_OWNER} ]]; then + UltrafastSecp256k1_OWNER="pmienk" +fi +if [[ -z ${UltrafastSecp256k1_TAG} ]]; then + UltrafastSecp256k1_TAG="main" +fi + if [[ -z ${libbitcoin_system_OWNER} ]]; then libbitcoin_system_OWNER="libbitcoin" fi @@ -93,22 +105,23 @@ main() for OPTION in "$@"; do case ${OPTION} in - (--build-boost) BUILD_boost="yes";; - (--build-secp256k1) BUILD_secp256k1="yes";; - (--build-preset=*) BUILD_PRESET="${OPTION#*=}";; - (--build-src-dir=*) BUILD_SRC_DIR="${OPTION#*=}";; - (--build-full-repositories) BUILD_FULL_REPOSITORIES="yes";; - (--build-post-install-clean)BUILD_POST_INSTALL_CLEAN="yes";; - (--build-skip-tests) BUILD_SKIP_TESTS="yes";; - (--build-parallel=*) PARALLEL="${OPTION#*=}";; - (--build-use-local-src) BUILD_USE_LOCAL_SRC="yes";; - (--noninteractive) NONINTERACTIVE="yes";; - (--verbose) DISPLAY_VERBOSE="yes";; - (--help|-h) DISPLAY_HELP="yes";; - (-DCMAKE_PREFIX_PATH=*) CMAKE_PREFIX_PATH="${OPTION#*=}";; - (-DCMAKE_INSTALL_PREFIX=*) CMAKE_INSTALL_PREFIX="${OPTION#*=}";; - (-DCMAKE_INCLUDE_PATH=*) CMAKE_INCLUDE_PATH="${OPTION#*=}";; - (-DCMAKE_LIBRARY_PATH=*) CMAKE_LIBRARY_PATH="${OPTION#*=}";; + (--build-boost) BUILD_boost="yes";; + (--build-secp256k1) BUILD_secp256k1="yes";; + (--build-ultrafast) BUILD_ultrafast="yes";; + (--build-preset=*) BUILD_PRESET="${OPTION#*=}";; + (--build-src-dir=*) BUILD_SRC_DIR="${OPTION#*=}";; + (--build-full-repositories) BUILD_FULL_REPOSITORIES="yes";; + (--build-post-install-clean) BUILD_POST_INSTALL_CLEAN="yes";; + (--build-skip-tests) BUILD_SKIP_TESTS="yes";; + (--build-parallel=*) PARALLEL="${OPTION#*=}";; + (--build-use-local-src) BUILD_USE_LOCAL_SRC="yes";; + (--noninteractive) NONINTERACTIVE="yes";; + (--verbose) DISPLAY_VERBOSE="yes";; + (--help|-h) DISPLAY_HELP="yes";; + (-DCMAKE_PREFIX_PATH=*) CMAKE_PREFIX_PATH="${OPTION#*=}";; + (-DCMAKE_INSTALL_PREFIX=*) CMAKE_INSTALL_PREFIX="${OPTION#*=}";; + (-DCMAKE_INCLUDE_PATH=*) CMAKE_INCLUDE_PATH="${OPTION#*=}";; + (-DCMAKE_LIBRARY_PATH=*) CMAKE_LIBRARY_PATH="${OPTION#*=}";; esac done @@ -116,6 +129,7 @@ main() CONFIGURE_OPTIONS=("$@") CONFIGURE_OPTIONS=("${CONFIGURE_OPTIONS[@]/--build-boost/}") CONFIGURE_OPTIONS=("${CONFIGURE_OPTIONS[@]/--build-secp256k1/}") + CONFIGURE_OPTIONS=("${CONFIGURE_OPTIONS[@]/--build-ultrafast/}") CONFIGURE_OPTIONS=("${CONFIGURE_OPTIONS[@]/--build-preset=*/}") CONFIGURE_OPTIONS=("${CONFIGURE_OPTIONS[@]/--build-src-dir=*/}") CONFIGURE_OPTIONS=("${CONFIGURE_OPTIONS[@]/--build-full-repositories/}") @@ -127,6 +141,7 @@ main() CONFIGURE_OPTIONS=("${CONFIGURE_OPTIONS[@]/--verbose/}") CONFIGURE_OPTIONS=("${CONFIGURE_OPTIONS[@]/--help/}") CONFIGURE_OPTIONS=("${CONFIGURE_OPTIONS[@]/-h/}") + CONFIGURE_OPTIONS_CMAKE=("${CONFIGURE_OPTIONS[@]}") msg_verbose "*** ARGUMENTS: ${CONFIGURE_OPTIONS_ORIGINAL[*]}" msg_verbose "*** SANITIZED: ${CONFIGURE_OPTIONS[*]}" @@ -240,6 +255,10 @@ main() exit 1 fi + if [[ "${BUILD_SKIP_TESTS}" == "yes" ]]; then + CONFIGURE_OPTIONS_CMAKE=( "${CONFIGURE_OPTIONS_CMAKE[@]}" "-Dwith-tests=OFF" ) + fi + # --prefix if [[ -z "${PREFIX}" ]]; then # Always set a prefix (required for OSX and lib detection). @@ -264,21 +283,23 @@ main() msg_error "Both PREFIX and CMAKE_INSTALL_PREFIX have been defined differently." help exit 1 - elif [[ -n "${PREFIX}" ]]; then + fi + + if [[ -n "${PREFIX}" ]]; then CMAKE_INSTALL_PREFIX="${PREFIX}" - CONFIGURE_OPTIONS=( "${CONFIGURE_OPTIONS[@]/-DCMAKE_INSTALL_PREFIX=*/}" ) - CONFIGURE_OPTIONS=( "${CONFIGURE_OPTIONS[@]}" "-DCMAKE_INSTALL_PREFIX=${PREFIX}" ) + CONFIGURE_OPTIONS_CMAKE=( "${CONFIGURE_OPTIONS_CMAKE[@]/-DCMAKE_INSTALL_PREFIX=*/}" ) + CONFIGURE_OPTIONS_CMAKE=( "${CONFIGURE_OPTIONS_CMAKE[@]}" "-DCMAKE_INSTALL_PREFIX=${PREFIX}" ) fi if [[ -n "${PREFIX}" ]] && [[ -n "${CMAKE_PREFIX_PATH}" ]] && [[ "${PREFIX}" != "${CMAKE_PREFIX_PATH}" ]]; then CMAKE_PREFIX_PATH="${PREFIX}:${CMAKE_PREFIX_PATH}" - CONFIGURE_OPTIONS=( "${CONFIGURE_OPTIONS[@]/-DCMAKE_PREFIX_PATH=*/}" ) - CONFIGURE_OPTIONS=( "${CONFIGURE_OPTIONS[@]}" "-DCMAKE_PREFIX_PATH=${CMAKE_PREFIX_PATH}" ) + CONFIGURE_OPTIONS_CMAKE=( "${CONFIGURE_OPTIONS_CMAKE[@]/-DCMAKE_PREFIX_PATH=*/}" ) + CONFIGURE_OPTIONS_CMAKE=( "${CONFIGURE_OPTIONS_CMAKE[@]}" "-DCMAKE_PREFIX_PATH=${CMAKE_PREFIX_PATH}" ) elif [[ -n "${PREFIX}" ]]; then CMAKE_INSTALL_PREFIX="${PREFIX}" - CONFIGURE_OPTIONS=( "${CONFIGURE_OPTIONS[@]/-DCMAKE_PREFIX_PATH=*/}" ) - CONFIGURE_OPTIONS=( "${CONFIGURE_OPTIONS[@]}" "-DCMAKE_PREFIX_PATH=${PREFIX}" ) + CONFIGURE_OPTIONS_CMAKE=( "${CONFIGURE_OPTIONS_CMAKE[@]/-DCMAKE_PREFIX_PATH=*/}" ) + CONFIGURE_OPTIONS_CMAKE=( "${CONFIGURE_OPTIONS_CMAKE[@]}" "-DCMAKE_PREFIX_PATH=${PREFIX}" ) fi if [[ -n "${PREFIX}" ]]; then @@ -380,19 +401,19 @@ main() # Specify cmake build if [[ "${BUILD_CONFIG}" == "debug" ]]; then - CONFIGURE_OPTIONS=( "${CONFIGURE_OPTIONS[@]}" "-DCMAKE_BUILD_TYPE=Debug" ) + CONFIGURE_OPTIONS_CMAKE=( "${CONFIGURE_OPTIONS_CMAKE[@]}" "-DCMAKE_BUILD_TYPE=Debug" ) elif [[ "${BUILD_CONFIG}" == "release" ]]; then - CONFIGURE_OPTIONS=( "${CONFIGURE_OPTIONS[@]}" "-DCMAKE_BUILD_TYPE=Release" ) + CONFIGURE_OPTIONS_CMAKE=( "${CONFIGURE_OPTIONS_CMAKE[@]}" "-DCMAKE_BUILD_TYPE=Release" ) fi # translate BUILD_LINK to appropriate arguments if [[ -n "${BUILD_LINK}" ]]; then - CONFIGURE_OPTIONS=( "${CONFIGURE_OPTIONS[@]/-DBUILD_SHARED_LIBS=*}" ) + CONFIGURE_OPTIONS_CMAKE=( "${CONFIGURE_OPTIONS_CMAKE[@]/-DBUILD_SHARED_LIBS=*}" ) if [[ "${BUILD_LINK}" == "dynamic" ]]; then - CONFIGURE_OPTIONS=( "${CONFIGURE_OPTIONS[@]}" "-DBUILD_SHARED_LIBS=ON" ) + CONFIGURE_OPTIONS_CMAKE=( "${CONFIGURE_OPTIONS_CMAKE[@]}" "-DBUILD_SHARED_LIBS=ON" ) else - CONFIGURE_OPTIONS=( "${CONFIGURE_OPTIONS[@]}" "-DBUILD_SHARED_LIBS=OFF" ) + CONFIGURE_OPTIONS_CMAKE=( "${CONFIGURE_OPTIONS_CMAKE[@]}" "-DBUILD_SHARED_LIBS=OFF" ) fi fi @@ -408,13 +429,14 @@ main() with_boost="--with-boost=${PREFIX}" fi + REMAP=() - for argument in "${CONFIGURE_OPTIONS[@]}"; do + for argument in "${CONFIGURE_OPTIONS_CMAKE[@]}"; do if [[ -n "${argument}" ]]; then REMAP+=( "${argument}" ) fi done - CONFIGURE_OPTIONS=( "${REMAP[@]}" ) + CONFIGURE_OPTIONS_CMAKE=( "${REMAP[@]}" ) unset REMAP msg_heading "Configuration" @@ -453,6 +475,25 @@ main() "-DSECP256K1_ENABLE_MODULE_RECOVERY=ON" "-DSECP256K1_ENABLE_MODULE_SCHNORRSIG=ON") + UltrafastSecp256k1_FLAGS=() + + UltrafastSecp256k1_OPTIONS=( + "-DSECP256K1_BUILD_TESTS=OFF" + "-DSECP256K1_BUILD_BENCH=OFF" + "-DSECP256K1_BUILD_EXAMPLES=OFF" + "-DSECP256K1_BUILD_JAVA=OFF" + "-DUFSECP_BUILD_SHARED=OFF" + "-DSECP256K1_BUILD_CABI=ON" + "-DSECP256K1_BUILD_CPU=ON" + "-DSECP256K1_BUILD_SHIM=ON" + "-DSECP256K1_BUILD_CUDA=OFF" + "-DSECP256K1_BUILD_ROCM=OFF" + "-DSECP256K1_BUILD_OPENCL=OFF" + "-DSECP256K1_BUILD_METAL=OFF" + "-DSECP256K1_INSTALL=ON" + "-DSECP256K1_INSTALL_PKGCONFIG=ON" + "-DSECP256K1_USE_ULTRAFAST=ON") + libbitcoin_system_FLAGS=() libbitcoin_system_OPTIONS=( @@ -487,10 +528,22 @@ main() source_github "${secp256k1_OWNER}" "secp256k1" "${secp256k1_TAG}" local SAVE_CPPFLAGS="${CPPFLAGS}" export CPPFLAGS="${CPPFLAGS} ${secp256k1_FLAGS[@]}" - build_cmake "secp256k1" "." "${PARALLEL}" "${secp256k1_OPTIONS[@]}" "${CONFIGURE_OPTIONS[@]}" - install_make "secp256k1" + build_cmake "secp256k1" "." "${PARALLEL}" "${secp256k1_OPTIONS[@]}" "${CONFIGURE_OPTIONS_CMAKE[@]}" + install_cmake "secp256k1" if [[ "${BUILD_POST_INSTALL_CLEAN}" == "yes" ]]; then - clean_make "secp256k1" + clean_cmake "secp256k1" + fi + export CPPFLAGS="${SAVE_CPPFLAGS}" + fi + + if [[ ${BUILD_ultrafast} == "yes" ]]; then + source_github "${UltrafastSecp256k1_OWNER}" "UltrafastSecp256k1" "${UltrafastSecp256k1_TAG}" + local SAVE_CPPFLAGS="${CPPFLAGS}" + export CPPFLAGS="${CPPFLAGS} ${UltrafastSecp256k1_FLAGS[@]}" + build_cmake "UltrafastSecp256k1" "." "${PARALLEL}" "${UltrafastSecp256k1_OPTIONS[@]}" "${CONFIGURE_OPTIONS_CMAKE[@]}" + install_cmake "UltrafastSecp256k1" + if [[ "${BUILD_POST_INSTALL_CLEAN}" == "yes" ]]; then + clean_cmake "UltrafastSecp256k1" fi export CPPFLAGS="${SAVE_CPPFLAGS}" fi @@ -498,43 +551,43 @@ main() source_github "${libbitcoin_system_OWNER}" "libbitcoin-system" "${libbitcoin_system_TAG}" local SAVE_CPPFLAGS="${CPPFLAGS}" export CPPFLAGS="${CPPFLAGS} ${libbitcoin_system_FLAGS[@]}" - build_preset "libbitcoin-system" "builds/cmake" "${PARALLEL}" "${libbitcoin_system_OPTIONS[@]}" "${CONFIGURE_OPTIONS[@]}" - install_make "libbitcoin-system" + build_preset "libbitcoin-system" "builds/cmake" "${PARALLEL}" "${libbitcoin_system_OPTIONS[@]}" "${CONFIGURE_OPTIONS_CMAKE[@]}" + install_cmake "libbitcoin-system" if [[ "${BUILD_POST_INSTALL_CLEAN}" == "yes" ]]; then - clean_make "libbitcoin-system" + clean_cmake "libbitcoin-system" fi export CPPFLAGS="${SAVE_CPPFLAGS}" source_github "${libbitcoin_database_OWNER}" "libbitcoin-database" "${libbitcoin_database_TAG}" local SAVE_CPPFLAGS="${CPPFLAGS}" export CPPFLAGS="${CPPFLAGS} ${libbitcoin_database_FLAGS[@]}" - build_preset "libbitcoin-database" "builds/cmake" "${PARALLEL}" "${libbitcoin_database_OPTIONS[@]}" "${CONFIGURE_OPTIONS[@]}" - install_make "libbitcoin-database" + build_preset "libbitcoin-database" "builds/cmake" "${PARALLEL}" "${libbitcoin_database_OPTIONS[@]}" "${CONFIGURE_OPTIONS_CMAKE[@]}" + install_cmake "libbitcoin-database" if [[ "${BUILD_POST_INSTALL_CLEAN}" == "yes" ]]; then - clean_make "libbitcoin-database" + clean_cmake "libbitcoin-database" fi export CPPFLAGS="${SAVE_CPPFLAGS}" source_github "${libbitcoin_network_OWNER}" "libbitcoin-network" "${libbitcoin_network_TAG}" local SAVE_CPPFLAGS="${CPPFLAGS}" export CPPFLAGS="${CPPFLAGS} ${libbitcoin_network_FLAGS[@]}" - build_preset "libbitcoin-network" "builds/cmake" "${PARALLEL}" "${libbitcoin_network_OPTIONS[@]}" "${CONFIGURE_OPTIONS[@]}" - install_make "libbitcoin-network" + build_preset "libbitcoin-network" "builds/cmake" "${PARALLEL}" "${libbitcoin_network_OPTIONS[@]}" "${CONFIGURE_OPTIONS_CMAKE[@]}" + install_cmake "libbitcoin-network" if [[ "${BUILD_POST_INSTALL_CLEAN}" == "yes" ]]; then - clean_make "libbitcoin-network" + clean_cmake "libbitcoin-network" fi export CPPFLAGS="${SAVE_CPPFLAGS}" source_github "${libbitcoin_node_OWNER}" "libbitcoin-node" "${libbitcoin_node_TAG}" local SAVE_CPPFLAGS="${CPPFLAGS}" export CPPFLAGS="${CPPFLAGS} ${libbitcoin_node_FLAGS[@]}" - build_preset "libbitcoin-node" "builds/cmake" "${PARALLEL}" "${libbitcoin_node_OPTIONS[@]}" "${CONFIGURE_OPTIONS[@]}" + build_preset "libbitcoin-node" "builds/cmake" "${PARALLEL}" "${libbitcoin_node_OPTIONS[@]}" "${CONFIGURE_OPTIONS_CMAKE[@]}" if ! [[ "${BUILD_SKIP_TESTS}" == "yes" ]]; then - test_make "libbitcoin-node" "test" "${PARALLEL}" + test_cmake "libbitcoin-node" "test" "${PARALLEL}" fi - install_make "libbitcoin-node" + install_cmake "libbitcoin-node" if [[ "${BUILD_POST_INSTALL_CLEAN}" == "yes" ]]; then - clean_make "libbitcoin-node" + clean_cmake "libbitcoin-node" fi export CPPFLAGS="${SAVE_CPPFLAGS}" @@ -662,117 +715,6 @@ source_github() pop_directory # pop BUILD_SRC_DIR } -install_make() -{ - local PROJECT="$1" - shift - - msg "Preparing to install ${PROJECT}" - - push_directory "${BUILD_SRC_DIR}/${PROJECT}" - - if [[ "${BUILD_OBJ_DIR_RELATIVE}" == "yes" ]]; then - push_directory "${BUILD_OBJ_DIR}" - else - push_directory "${BUILD_OBJ_DIR}/${PROJECT}" - fi - - make install - - if [[ ${OS} == Linux ]] && [[ "${PREFIX}" == "/usr/local" ]]; then - ldconfig - fi - - pop_directory # BUILD_OBJ_DIR - pop_directory # BUILD_SRC_DIR/PROJECT - - msg_success "'${PROJECT}' installation complete." -} - -test_make() -{ - local PROJECT="$1" - local TARGET="$2" - local JOBS="$3" - shift 3 - - msg "Preparing to test ${PROJECT}" - - push_directory "${BUILD_SRC_DIR}/${PROJECT}" - - if [[ "${BUILD_OBJ_DIR_RELATIVE}" == "yes" ]]; then - push_directory "${BUILD_OBJ_DIR}" - else - push_directory "${BUILD_OBJ_DIR}/${PROJECT}" - fi - - disable_exit_on_error - - if [[ ${JOBS} -gt ${SEQUENTIAL} ]]; then - make -j${JOBS} ${TARGET} VERBOSE=1 - else - make ${TARGET} VERBOSE=1 - fi - - local RESULT=$? - - if [[ -e "Testing/Temporary/LastTest.log" ]]; then - msg_warn "begin error log: Testing/Temporary/LastTest.log" - cat "Testing/Temporary/LastTest.log" - msg_warn " end error log: Testing/Temporary/LastTest.log" - fi - - if [[ -e "test.log" ]]; then - msg_warn "begin error log: test.log" - cat "test.log" - msg_warn " end error log: test.log" - fi - - if [[ ${RESULT} -ne 0 ]]; then - msg_error "Encountered error, please see test.log contents above." - exit ${RESULT} - fi - - enable_exit_on_error - - pop_directory # BUILD_OBJ_DIR - pop_directory # BUILD_SRC_DIR/PROJECT - - msg_success "'${PROJECT}' test complete." -} - -clean_make() -{ - local PROJECT="$1" - shift 1 - - msg "Preparing to clean ${PROJECT}" - - push_directory "${BUILD_SRC_DIR}/${PROJECT}" - - if [[ "${BUILD_OBJ_DIR_RELATIVE}" == "yes" ]]; then - push_directory "${BUILD_OBJ_DIR}" - else - push_directory "${BUILD_OBJ_DIR}/${PROJECT}" - fi - - disable_exit_on_error - - make clean - - local RESULT=$? - - if [[ ${RESULT} -ne 0 ]]; then - msg_error "Encountered error, please see test.log contents above." - exit ${RESULT} - fi - - pop_directory # BUILD_OBJ_DIR - pop_directory # BUILD_SRC_DIR/PROJECT - - msg_success "'${PROJECT}' clean complete." -} - build_boost() { local PROJECT="$1" @@ -872,7 +814,7 @@ build_cmake() if [[ "${DISPLAY_VERBOSE}" == "yes" ]]; then VERBOSITY_CMAKE="-DCMAKE_VERBOSE_MAKEFILE=ON" - VERBOSITY_MAKE="VERBOSE=1" + VERBOSITY_MAKE="--verbose" fi msg_heading "Preparing to build ${PROJECT}" @@ -900,9 +842,9 @@ build_cmake() # make if [[ ${JOBS} -gt ${SEQUENTIAL} ]]; then - make -j${JOBS} ${VERBOSITY_MAKE} + cmake --build . -j${JOBS} ${VERBOSITY_MAKE} else - make + cmake --build . ${VERBOSITY_MAKE} fi pop_directory # BUILD_OBJ_DIR @@ -910,6 +852,7 @@ build_cmake() msg_success "'${PROJECT}' built successfully." } + build_preset() { local PROJECT="$1" @@ -960,10 +903,118 @@ build_preset() msg_success "'${PROJECT}' built successfully." } + +clean_cmake() +{ + local PROJECT="$1" + shift 1 + + msg "Preparing to clean ${PROJECT}" + + push_directory "${BUILD_SRC_DIR}/${PROJECT}" + + if [[ "${BUILD_OBJ_DIR_RELATIVE}" == "yes" ]]; then + push_directory "${BUILD_OBJ_DIR}" + else + push_directory "${BUILD_OBJ_DIR}/${PROJECT}" + fi + + disable_exit_on_error + + cmake --build . --target clean + + local RESULT=$? + + if [[ ${RESULT} -ne 0 ]]; then + msg_error "Encountered error, please see test.log contents above." + exit ${RESULT} + fi + + pop_directory # BUILD_OBJ_DIR + pop_directory # BUILD_SRC_DIR/PROJECT + + msg_success "'${PROJECT}' clean complete." +} + +install_cmake() +{ + local PROJECT="$1" + shift + + msg "Preparing to install ${PROJECT}" + + push_directory "${BUILD_SRC_DIR}/${PROJECT}" + + if [[ "${BUILD_OBJ_DIR_RELATIVE}" == "yes" ]]; then + push_directory "${BUILD_OBJ_DIR}" + else + push_directory "${BUILD_OBJ_DIR}/${PROJECT}" + fi + + cmake --install . + + if [[ ${OS} == Linux ]] && [[ "${PREFIX}" == "/usr/local" ]]; then + ldconfig + fi + + pop_directory # BUILD_OBJ_DIR + pop_directory # BUILD_SRC_DIR/PROJECT + + msg_success "'${PROJECT}' installation complete." +} + +test_cmake() +{ + local PROJECT="$1" + local JOBS="$2" + shift 2 + + msg "Preparing to test ${PROJECT}" + + push_directory "${BUILD_SRC_DIR}/${PROJECT}" + + if [[ "${BUILD_OBJ_DIR_RELATIVE}" == "yes" ]]; then + push_directory "${BUILD_OBJ_DIR}" + else + push_directory "${BUILD_OBJ_DIR}/${PROJECT}" + fi + + disable_exit_on_error + + ctest --test-dir . + + local RESULT=$? + + if [[ -e "Testing/Temporary/LastTest.log" ]]; then + msg_warn "begin error log: Testing/Temporary/LastTest.log" + cat "Testing/Temporary/LastTest.log" + msg_warn " end error log: Testing/Temporary/LastTest.log" + fi + + if [[ -e "test.log" ]]; then + msg_warn "begin error log: test.log" + cat "test.log" + msg_warn " end error log: test.log" + fi + + if [[ ${RESULT} -ne 0 ]]; then + msg_error "Encountered error, please see test.log contents above." + exit ${RESULT} + fi + + enable_exit_on_error + + pop_directory # BUILD_OBJ_DIR + pop_directory # BUILD_SRC_DIR/PROJECT + + msg_success "'${PROJECT}' test complete." +} + display_build_variables() { msg "BUILD_boost : ${BUILD_boost}" msg "BUILD_secp256k1 : ${BUILD_secp256k1}" + msg "BUILD_ultrafast : ${BUILD_ultrafast}" msg "BUILD_PRESET : ${BUILD_PRESET}" msg "BUILD_SRC_DIR : ${BUILD_SRC_DIR}" msg "BUILD_OBJ_DIR : ${BUILD_OBJ_DIR}" @@ -1009,6 +1060,9 @@ display_constants() msg "secp256k1_OWNER : ${secp256k1_OWNER}" msg "secp256k1_TAG : ${secp256k1_TAG}" + msg "UltrafastSecp256k1_OWNER : ${UltrafastSecp256k1_OWNER}" + msg "UltrafastSecp256k1_TAG : ${UltrafastSecp256k1_TAG}" + msg "libbitcoin_system_OWNER : ${libbitcoin_system_OWNER}" msg "libbitcoin_system_TAG : ${libbitcoin_system_TAG}" @@ -1035,10 +1089,15 @@ help() msg " Default: OFF" msg "-Denable-shani= Use Intel/ARM SHA Extensions." msg " Default: OFF" + msg "-Dwith-ultrafast= Use shrec/UltrafastSecp256k1." + msg " Default: OFF" + msg "-Dwith-secp256k1= Use bitcoin-core/secp256k1." + msg " Default: ON" msg "-Dwith-ssl= Use embedded ssl library." msg " Default: ON" msg "--build-boost Build Boost libraries" msg "--build-secp256k1 Build libsecp256k1 libraries" + msg "--build-ultrafast Build UltrafastSecp256k1 libraries" msg "--build-preset= Specifies preset configuration to build." msg "--build-src-dir= Location for sources." msg " Default: $(pwd)" diff --git a/builds/gnu/install-gnu.sh b/builds/gnu/install-gnu.sh index 63eb0ff6..dba90083 100755 --- a/builds/gnu/install-gnu.sh +++ b/builds/gnu/install-gnu.sh @@ -16,10 +16,15 @@ # Default: --disable-sse41 # ---shani Use Intel/ARM SHA Extensions. # Default: --disable-shani +# ---ultrafast Use shrec/UltrafastSecp256k1. +# Default: --without-ultrafast +# ---secp256k1 Use bitcoin-core/secp256k1. +# Default: --with-secp256k1 # ---ssl Use embedded ssl library. # Default: --with-ssl # --build-boost Build Boost libraries # --build-secp256k1 Build libsecp256k1 libraries +# --build-ultrafast Build UltrafastSecp256k1 libraries # --build-src-dir= Location for sources. # Default: $(pwd) # --build-obj-dir= Location for intermediate objects. @@ -69,6 +74,13 @@ if [[ -z ${secp256k1_TAG} ]]; then secp256k1_TAG="v0.7.0" fi +if [[ -z ${UltrafastSecp256k1_OWNER} ]]; then + UltrafastSecp256k1_OWNER="pmienk" +fi +if [[ -z ${UltrafastSecp256k1_TAG} ]]; then + UltrafastSecp256k1_TAG="main" +fi + if [[ -z ${libbitcoin_system_OWNER} ]]; then libbitcoin_system_OWNER="libbitcoin" fi @@ -103,22 +115,23 @@ main() for OPTION in "$@"; do case ${OPTION} in - (--build-boost) BUILD_boost="yes";; - (--build-secp256k1) BUILD_secp256k1="yes";; - (--build-src-dir=*) BUILD_SRC_DIR="${OPTION#*=}";; - (--build-obj-dir=*) BUILD_OBJ_DIR="${OPTION#*=}";; - (--build-obj-dir-relative) BUILD_OBJ_DIR_RELATIVE="yes";; - (--build-config=*) BUILD_CONFIG="${OPTION#*=}";; - (--build-link=*) BUILD_LINK="${OPTION#*=}";; - (--build-full-repositories) BUILD_FULL_REPOSITORIES="yes";; - (--build-post-install-clean)BUILD_POST_INSTALL_CLEAN="yes";; - (--build-skip-tests) BUILD_SKIP_TESTS="yes";; - (--build-parallel=*) PARALLEL="${OPTION#*=}";; - (--build-use-local-src) BUILD_USE_LOCAL_SRC="yes";; - (--prefix=*) PREFIX="${OPTION#*=}";; - (--noninteractive) NONINTERACTIVE="yes";; - (--verbose) DISPLAY_VERBOSE="yes";; - (--help|-h) DISPLAY_HELP="yes";; + (--build-boost) BUILD_boost="yes";; + (--build-secp256k1) BUILD_secp256k1="yes";; + (--build-ultrafast) BUILD_ultrafast="yes";; + (--build-src-dir=*) BUILD_SRC_DIR="${OPTION#*=}";; + (--build-obj-dir=*) BUILD_OBJ_DIR="${OPTION#*=}";; + (--build-obj-dir-relative) BUILD_OBJ_DIR_RELATIVE="yes";; + (--build-config=*) BUILD_CONFIG="${OPTION#*=}";; + (--build-link=*) BUILD_LINK="${OPTION#*=}";; + (--build-full-repositories) BUILD_FULL_REPOSITORIES="yes";; + (--build-post-install-clean) BUILD_POST_INSTALL_CLEAN="yes";; + (--build-skip-tests) BUILD_SKIP_TESTS="yes";; + (--build-parallel=*) PARALLEL="${OPTION#*=}";; + (--build-use-local-src) BUILD_USE_LOCAL_SRC="yes";; + (--prefix=*) PREFIX="${OPTION#*=}";; + (--noninteractive) NONINTERACTIVE="yes";; + (--verbose) DISPLAY_VERBOSE="yes";; + (--help|-h) DISPLAY_HELP="yes";; esac done @@ -126,6 +139,7 @@ main() CONFIGURE_OPTIONS=("$@") CONFIGURE_OPTIONS=("${CONFIGURE_OPTIONS[@]/--build-boost/}") CONFIGURE_OPTIONS=("${CONFIGURE_OPTIONS[@]/--build-secp256k1/}") + CONFIGURE_OPTIONS=("${CONFIGURE_OPTIONS[@]/--build-ultrafast/}") CONFIGURE_OPTIONS=("${CONFIGURE_OPTIONS[@]/--build-src-dir=*/}") CONFIGURE_OPTIONS=("${CONFIGURE_OPTIONS[@]/--build-obj-dir=*/}") CONFIGURE_OPTIONS=("${CONFIGURE_OPTIONS[@]/--build-obj-dir-relative/}") @@ -141,6 +155,8 @@ main() CONFIGURE_OPTIONS=("${CONFIGURE_OPTIONS[@]/--verbose/}") CONFIGURE_OPTIONS=("${CONFIGURE_OPTIONS[@]/--help/}") CONFIGURE_OPTIONS=("${CONFIGURE_OPTIONS[@]/-h/}") + CONFIGURE_OPTIONS_CMAKE=() + CONFIGURE_OPTIONS_GNU=("${CONFIGURE_OPTIONS[@]}") msg_verbose "*** ARGUMENTS: ${CONFIGURE_OPTIONS_ORIGINAL[*]}" msg_verbose "*** SANITIZED: ${CONFIGURE_OPTIONS[*]}" @@ -220,6 +236,11 @@ main() exit 1 fi + if [[ "${BUILD_SKIP_TESTS}" == "yes" ]]; then + CONFIGURE_OPTIONS_CMAKE=( "${CONFIGURE_OPTIONS_CMAKE[@]}" "-Dwith-tests=OFF" ) + CONFIGURE_OPTIONS_GNU=( "${CONFIGURE_OPTIONS_GNU[@]}" "--without-tests" ) + fi + # --prefix if [[ -z "${PREFIX}" ]]; then # Always set a prefix (required for OSX and lib detection). @@ -240,8 +261,31 @@ main() fi fi + if [[ -n "${PREFIX}" ]] && [[ -n "${CMAKE_INSTALL_PREFIX}" ]]; then + msg_error "Both PREFIX and CMAKE_INSTALL_PREFIX have been defined differently." + help + exit 1 + fi + if [[ -n "${PREFIX}" ]]; then - CONFIGURE_OPTIONS=( "${CONFIGURE_OPTIONS[@]}" "--prefix=${PREFIX}" ) + CMAKE_INSTALL_PREFIX="${PREFIX}" + CONFIGURE_OPTIONS_CMAKE=( "${CONFIGURE_OPTIONS_CMAKE[@]/-DCMAKE_INSTALL_PREFIX=*/}" ) + CONFIGURE_OPTIONS_CMAKE=( "${CONFIGURE_OPTIONS_CMAKE[@]}" "-DCMAKE_INSTALL_PREFIX=${PREFIX}" ) + fi + + if [[ -n "${PREFIX}" ]] && [[ -n "${CMAKE_PREFIX_PATH}" ]] && + [[ "${PREFIX}" != "${CMAKE_PREFIX_PATH}" ]]; then + CMAKE_PREFIX_PATH="${PREFIX}:${CMAKE_PREFIX_PATH}" + CONFIGURE_OPTIONS_CMAKE=( "${CONFIGURE_OPTIONS_CMAKE[@]/-DCMAKE_PREFIX_PATH=*/}" ) + CONFIGURE_OPTIONS_CMAKE=( "${CONFIGURE_OPTIONS_CMAKE[@]}" "-DCMAKE_PREFIX_PATH=${CMAKE_PREFIX_PATH}" ) + elif [[ -n "${PREFIX}" ]]; then + CMAKE_INSTALL_PREFIX="${PREFIX}" + CONFIGURE_OPTIONS_CMAKE=( "${CONFIGURE_OPTIONS_CMAKE[@]/-DCMAKE_PREFIX_PATH=*/}" ) + CONFIGURE_OPTIONS_CMAKE=( "${CONFIGURE_OPTIONS_CMAKE[@]}" "-DCMAKE_PREFIX_PATH=${PREFIX}" ) + fi + + if [[ -n "${PREFIX}" ]]; then + CONFIGURE_OPTIONS_GNU=( "${CONFIGURE_OPTIONS_GNU[@]}" "--prefix=${PREFIX}" ) fi if [[ -n "${PREFIX}" ]]; then @@ -343,22 +387,36 @@ main() # Specify or remove --enable-ndebug for gnu toolchain on release if [[ "${BUILD_CONFIG}" == "debug" ]]; then - CONFIGURE_OPTIONS=("${CONFIGURE_OPTIONS[@]/--enable-ndebug/}") + CONFIGURE_OPTIONS_GNU=("${CONFIGURE_OPTIONS_GNU[@]/--enable-ndebug/}") + elif [[ "${BUILD_CONFIG}" == "release" ]]; then + CONFIGURE_OPTIONS=( "${CONFIGURE_OPTIONS_GNU[@]}" "--enable-ndebug" ) + fi + + # Specify cmake build + if [[ "${BUILD_CONFIG}" == "debug" ]]; then + CONFIGURE_OPTIONS_CMAKE=( "${CONFIGURE_OPTIONS_CMAKE[@]}" "-DCMAKE_BUILD_TYPE=Debug" ) elif [[ "${BUILD_CONFIG}" == "release" ]]; then - CONFIGURE_OPTIONS=( "${CONFIGURE_OPTIONS[@]}" "--enable-ndebug" ) + CONFIGURE_OPTIONS_CMAKE=( "${CONFIGURE_OPTIONS_CMAKE[@]}" "-DCMAKE_BUILD_TYPE=Release" ) fi # translate BUILD_LINK to appropriate arguments if [[ -n "${BUILD_LINK}" ]]; then - CONFIGURE_OPTIONS=( "${CONFIGURE_OPTIONS[@]/--disable-shared=*}" ) - CONFIGURE_OPTIONS=( "${CONFIGURE_OPTIONS[@]/--enable-shared=*}" ) - CONFIGURE_OPTIONS=( "${CONFIGURE_OPTIONS[@]/--disable-static=*}" ) - CONFIGURE_OPTIONS=( "${CONFIGURE_OPTIONS[@]/--enable-static=*}" ) + CONFIGURE_OPTIONS_GNU=( "${CONFIGURE_OPTIONS_GNU[@]/--disable-shared=*}" ) + CONFIGURE_OPTIONS_GNU=( "${CONFIGURE_OPTIONS_GNU[@]/--enable-shared=*}" ) + CONFIGURE_OPTIONS_GNU=( "${CONFIGURE_OPTIONS_GNU[@]/--disable-static=*}" ) + CONFIGURE_OPTIONS_GNU=( "${CONFIGURE_OPTIONS_GNU[@]/--enable-static=*}" ) + + if [[ "${BUILD_LINK}" == "dynamic" ]]; then + CONFIGURE_OPTIONS_GNU=( "${CONFIGURE_OPTIONS_GNU[@]}" "--enable-shared" "--disable-static" ) + else + CONFIGURE_OPTIONS_GNU=( "${CONFIGURE_OPTIONS_GNU[@]}" "--disable-shared" "--enable-static" ) + fi + CONFIGURE_OPTIONS_CMAKE=( "${CONFIGURE_OPTIONS_CMAKE[@]/-DBUILD_SHARED_LIBS=*}" ) if [[ "${BUILD_LINK}" == "dynamic" ]]; then - CONFIGURE_OPTIONS=( "${CONFIGURE_OPTIONS[@]}" "--enable-shared" "--disable-static" ) + CONFIGURE_OPTIONS_CMAKE=( "${CONFIGURE_OPTIONS_CMAKE[@]}" "-DBUILD_SHARED_LIBS=ON" ) else - CONFIGURE_OPTIONS=( "${CONFIGURE_OPTIONS[@]}" "--disable-shared" "--enable-static" ) + CONFIGURE_OPTIONS_CMAKE=( "${CONFIGURE_OPTIONS_CMAKE[@]}" "-DBUILD_SHARED_LIBS=OFF" ) fi fi @@ -374,13 +432,23 @@ main() with_boost="--with-boost=${PREFIX}" fi + REMAP=() - for argument in "${CONFIGURE_OPTIONS[@]}"; do + for argument in "${CONFIGURE_OPTIONS_CMAKE[@]}"; do if [[ -n "${argument}" ]]; then REMAP+=( "${argument}" ) fi done - CONFIGURE_OPTIONS=( "${REMAP[@]}" ) + CONFIGURE_OPTIONS_CMAKE=( "${REMAP[@]}" ) + unset REMAP + + REMAP=() + for argument in "${CONFIGURE_OPTIONS_GNU[@]}"; do + if [[ -n "${argument}" ]]; then + REMAP+=( "${argument}" ) + fi + done + CONFIGURE_OPTIONS_GNU=( "${REMAP[@]}" ) unset REMAP msg_heading "Configuration" @@ -419,6 +487,25 @@ main() "--enable-module-recovery" "--enable-module-schnorrsig") + UltrafastSecp256k1_FLAGS=() + + UltrafastSecp256k1_OPTIONS=( + "-DSECP256K1_BUILD_TESTS=OFF" + "-DSECP256K1_BUILD_BENCH=OFF" + "-DSECP256K1_BUILD_EXAMPLES=OFF" + "-DSECP256K1_BUILD_JAVA=OFF" + "-DUFSECP_BUILD_SHARED=OFF" + "-DSECP256K1_BUILD_CABI=ON" + "-DSECP256K1_BUILD_CPU=ON" + "-DSECP256K1_BUILD_SHIM=ON" + "-DSECP256K1_BUILD_CUDA=OFF" + "-DSECP256K1_BUILD_ROCM=OFF" + "-DSECP256K1_BUILD_OPENCL=OFF" + "-DSECP256K1_BUILD_METAL=OFF" + "-DSECP256K1_INSTALL=ON" + "-DSECP256K1_INSTALL_PKGCONFIG=ON" + "-DSECP256K1_USE_ULTRAFAST=ON") + libbitcoin_system_FLAGS=() libbitcoin_system_OPTIONS=( @@ -460,10 +547,22 @@ main() source_github "${secp256k1_OWNER}" "secp256k1" "${secp256k1_TAG}" local SAVE_CPPFLAGS="${CPPFLAGS}" export CPPFLAGS="${CPPFLAGS} ${secp256k1_FLAGS[@]}" - build_gnu "secp256k1" "." "${PARALLEL}" "${secp256k1_OPTIONS[@]}" "${CONFIGURE_OPTIONS[@]}" - install_make "secp256k1" + build_gnu "secp256k1" "." "${PARALLEL}" "${secp256k1_OPTIONS[@]}" "${CONFIGURE_OPTIONS_GNU[@]}" + install_gnu "secp256k1" + if [[ "${BUILD_POST_INSTALL_CLEAN}" == "yes" ]]; then + clean_gnu "secp256k1" + fi + export CPPFLAGS="${SAVE_CPPFLAGS}" + fi + + if [[ ${BUILD_ultrafast} == "yes" ]]; then + source_github "${UltrafastSecp256k1_OWNER}" "UltrafastSecp256k1" "${UltrafastSecp256k1_TAG}" + local SAVE_CPPFLAGS="${CPPFLAGS}" + export CPPFLAGS="${CPPFLAGS} ${UltrafastSecp256k1_FLAGS[@]}" + build_cmake "UltrafastSecp256k1" "." "${PARALLEL}" "${UltrafastSecp256k1_OPTIONS[@]}" "${CONFIGURE_OPTIONS_CMAKE[@]}" + install_cmake "UltrafastSecp256k1" if [[ "${BUILD_POST_INSTALL_CLEAN}" == "yes" ]]; then - clean_make "secp256k1" + clean_cmake "UltrafastSecp256k1" fi export CPPFLAGS="${SAVE_CPPFLAGS}" fi @@ -471,43 +570,43 @@ main() source_github "${libbitcoin_system_OWNER}" "libbitcoin-system" "${libbitcoin_system_TAG}" local SAVE_CPPFLAGS="${CPPFLAGS}" export CPPFLAGS="${CPPFLAGS} ${libbitcoin_system_FLAGS[@]}" - build_gnu "libbitcoin-system" "." "${PARALLEL}" "${libbitcoin_system_OPTIONS[@]}" "${CONFIGURE_OPTIONS[@]}" - install_make "libbitcoin-system" + build_gnu "libbitcoin-system" "." "${PARALLEL}" "${libbitcoin_system_OPTIONS[@]}" "${CONFIGURE_OPTIONS_GNU[@]}" + install_gnu "libbitcoin-system" if [[ "${BUILD_POST_INSTALL_CLEAN}" == "yes" ]]; then - clean_make "libbitcoin-system" + clean_gnu "libbitcoin-system" fi export CPPFLAGS="${SAVE_CPPFLAGS}" source_github "${libbitcoin_database_OWNER}" "libbitcoin-database" "${libbitcoin_database_TAG}" local SAVE_CPPFLAGS="${CPPFLAGS}" export CPPFLAGS="${CPPFLAGS} ${libbitcoin_database_FLAGS[@]}" - build_gnu "libbitcoin-database" "." "${PARALLEL}" "${libbitcoin_database_OPTIONS[@]}" "${CONFIGURE_OPTIONS[@]}" - install_make "libbitcoin-database" + build_gnu "libbitcoin-database" "." "${PARALLEL}" "${libbitcoin_database_OPTIONS[@]}" "${CONFIGURE_OPTIONS_GNU[@]}" + install_gnu "libbitcoin-database" if [[ "${BUILD_POST_INSTALL_CLEAN}" == "yes" ]]; then - clean_make "libbitcoin-database" + clean_gnu "libbitcoin-database" fi export CPPFLAGS="${SAVE_CPPFLAGS}" source_github "${libbitcoin_network_OWNER}" "libbitcoin-network" "${libbitcoin_network_TAG}" local SAVE_CPPFLAGS="${CPPFLAGS}" export CPPFLAGS="${CPPFLAGS} ${libbitcoin_network_FLAGS[@]}" - build_gnu "libbitcoin-network" "." "${PARALLEL}" "${libbitcoin_network_OPTIONS[@]}" "${CONFIGURE_OPTIONS[@]}" - install_make "libbitcoin-network" + build_gnu "libbitcoin-network" "." "${PARALLEL}" "${libbitcoin_network_OPTIONS[@]}" "${CONFIGURE_OPTIONS_GNU[@]}" + install_gnu "libbitcoin-network" if [[ "${BUILD_POST_INSTALL_CLEAN}" == "yes" ]]; then - clean_make "libbitcoin-network" + clean_gnu "libbitcoin-network" fi export CPPFLAGS="${SAVE_CPPFLAGS}" source_github "${libbitcoin_node_OWNER}" "libbitcoin-node" "${libbitcoin_node_TAG}" local SAVE_CPPFLAGS="${CPPFLAGS}" export CPPFLAGS="${CPPFLAGS} ${libbitcoin_node_FLAGS[@]}" - build_gnu "libbitcoin-node" "." "${PARALLEL}" "${libbitcoin_node_OPTIONS[@]}" "${CONFIGURE_OPTIONS[@]}" + build_gnu "libbitcoin-node" "." "${PARALLEL}" "${libbitcoin_node_OPTIONS[@]}" "${CONFIGURE_OPTIONS_GNU[@]}" if ! [[ "${BUILD_SKIP_TESTS}" == "yes" ]]; then - test_make "libbitcoin-node" "check" "${PARALLEL}" + test_gnu "libbitcoin-node" "${PARALLEL}" fi - install_make "libbitcoin-node" + install_gnu "libbitcoin-node" if [[ "${BUILD_POST_INSTALL_CLEAN}" == "yes" ]]; then - clean_make "libbitcoin-node" + clean_gnu "libbitcoin-node" fi export CPPFLAGS="${SAVE_CPPFLAGS}" @@ -635,117 +734,6 @@ source_github() pop_directory # pop BUILD_SRC_DIR } -install_make() -{ - local PROJECT="$1" - shift - - msg "Preparing to install ${PROJECT}" - - push_directory "${BUILD_SRC_DIR}/${PROJECT}" - - if [[ "${BUILD_OBJ_DIR_RELATIVE}" == "yes" ]]; then - push_directory "${BUILD_OBJ_DIR}" - else - push_directory "${BUILD_OBJ_DIR}/${PROJECT}" - fi - - make install - - if [[ ${OS} == Linux ]] && [[ "${PREFIX}" == "/usr/local" ]]; then - ldconfig - fi - - pop_directory # BUILD_OBJ_DIR - pop_directory # BUILD_SRC_DIR/PROJECT - - msg_success "'${PROJECT}' installation complete." -} - -test_make() -{ - local PROJECT="$1" - local TARGET="$2" - local JOBS="$3" - shift 3 - - msg "Preparing to test ${PROJECT}" - - push_directory "${BUILD_SRC_DIR}/${PROJECT}" - - if [[ "${BUILD_OBJ_DIR_RELATIVE}" == "yes" ]]; then - push_directory "${BUILD_OBJ_DIR}" - else - push_directory "${BUILD_OBJ_DIR}/${PROJECT}" - fi - - disable_exit_on_error - - if [[ ${JOBS} -gt ${SEQUENTIAL} ]]; then - make -j${JOBS} ${TARGET} VERBOSE=1 - else - make ${TARGET} VERBOSE=1 - fi - - local RESULT=$? - - if [[ -e "test-suite.log" ]]; then - msg_warn "begin error log: test-suite.log" - cat "test-suite.log" - msg_warn " end error log: test-suite.log" - fi - - if [[ -e "test.log" ]]; then - msg_warn "begin error log: test.log" - cat "test.log" - msg_warn " end error log: test.log" - fi - - if [[ ${RESULT} -ne 0 ]]; then - msg_error "Encountered error, please see test.log contents above." - exit ${RESULT} - fi - - enable_exit_on_error - - pop_directory # BUILD_OBJ_DIR - pop_directory # BUILD_SRC_DIR/PROJECT - - msg_success "'${PROJECT}' test complete." -} - -clean_make() -{ - local PROJECT="$1" - shift 1 - - msg "Preparing to clean ${PROJECT}" - - push_directory "${BUILD_SRC_DIR}/${PROJECT}" - - if [[ "${BUILD_OBJ_DIR_RELATIVE}" == "yes" ]]; then - push_directory "${BUILD_OBJ_DIR}" - else - push_directory "${BUILD_OBJ_DIR}/${PROJECT}" - fi - - disable_exit_on_error - - make clean - - local RESULT=$? - - if [[ ${RESULT} -ne 0 ]]; then - msg_error "Encountered error, please see test.log contents above." - exit ${RESULT} - fi - - pop_directory # BUILD_OBJ_DIR - pop_directory # BUILD_SRC_DIR/PROJECT - - msg_success "'${PROJECT}' clean complete." -} - build_boost() { local PROJECT="$1" @@ -888,10 +876,279 @@ build_gnu() msg_success "'${PROJECT}' built successfully." } + +build_cmake() +{ + local PROJECT="$1" + local RELATIVE_PATH="$2" + local JOBS="$3" + shift 3 + + local VERBOSITY_CMAKE="" + local VERBOSITY_MAKE="" + + if [[ "${DISPLAY_VERBOSE}" == "yes" ]]; then + VERBOSITY_CMAKE="-DCMAKE_VERBOSE_MAKEFILE=ON" + VERBOSITY_MAKE="--verbose" + fi + + msg_heading "Preparing to build ${PROJECT}" + + + # directory rationalization + push_directory "${BUILD_SRC_DIR}/${PROJECT}" + push_directory "${RELATIVE_PATH}" + local BUILD_PATH="$(pwd)" + pop_directory + + if [[ "${BUILD_OBJ_DIR_RELATIVE}" == "yes" ]]; then + create_directory_force "${BUILD_OBJ_DIR}" + push_directory "${BUILD_OBJ_DIR}" + else + push_directory "${BUILD_OBJ_DIR}" + create_directory_force "${PROJECT}" + pop_directory + push_directory "${BUILD_OBJ_DIR}/${PROJECT}" + fi + + display_configure_options "$@" + + cmake ${VERBOSITY_CMAKE} -LA "$@" "${BUILD_SRC_DIR}/${PROJECT}/${RELATIVE_PATH}" + + # make + if [[ ${JOBS} -gt ${SEQUENTIAL} ]]; then + cmake --build . -j${JOBS} ${VERBOSITY_MAKE} + else + cmake --build . ${VERBOSITY_MAKE} + fi + + pop_directory # BUILD_OBJ_DIR + pop_directory # BUILD_SRC_DIR/PROJECT + msg_success "'${PROJECT}' built successfully." +} + + +clean_cmake() +{ + local PROJECT="$1" + shift 1 + + msg "Preparing to clean ${PROJECT}" + + push_directory "${BUILD_SRC_DIR}/${PROJECT}" + + if [[ "${BUILD_OBJ_DIR_RELATIVE}" == "yes" ]]; then + push_directory "${BUILD_OBJ_DIR}" + else + push_directory "${BUILD_OBJ_DIR}/${PROJECT}" + fi + + disable_exit_on_error + + cmake --build . --target clean + + local RESULT=$? + + if [[ ${RESULT} -ne 0 ]]; then + msg_error "Encountered error, please see test.log contents above." + exit ${RESULT} + fi + + pop_directory # BUILD_OBJ_DIR + pop_directory # BUILD_SRC_DIR/PROJECT + + msg_success "'${PROJECT}' clean complete." +} + +install_cmake() +{ + local PROJECT="$1" + shift + + msg "Preparing to install ${PROJECT}" + + push_directory "${BUILD_SRC_DIR}/${PROJECT}" + + if [[ "${BUILD_OBJ_DIR_RELATIVE}" == "yes" ]]; then + push_directory "${BUILD_OBJ_DIR}" + else + push_directory "${BUILD_OBJ_DIR}/${PROJECT}" + fi + + cmake --install . + + if [[ ${OS} == Linux ]] && [[ "${PREFIX}" == "/usr/local" ]]; then + ldconfig + fi + + pop_directory # BUILD_OBJ_DIR + pop_directory # BUILD_SRC_DIR/PROJECT + + msg_success "'${PROJECT}' installation complete." +} + +test_cmake() +{ + local PROJECT="$1" + local JOBS="$2" + shift 2 + + msg "Preparing to test ${PROJECT}" + + push_directory "${BUILD_SRC_DIR}/${PROJECT}" + + if [[ "${BUILD_OBJ_DIR_RELATIVE}" == "yes" ]]; then + push_directory "${BUILD_OBJ_DIR}" + else + push_directory "${BUILD_OBJ_DIR}/${PROJECT}" + fi + + disable_exit_on_error + + ctest --test-dir . + + local RESULT=$? + + if [[ -e "test-suite.log" ]]; then + msg_warn "begin error log: test-suite.log" + cat "test-suite.log" + msg_warn " end error log: test-suite.log" + fi + + if [[ -e "test.log" ]]; then + msg_warn "begin error log: test.log" + cat "test.log" + msg_warn " end error log: test.log" + fi + + if [[ ${RESULT} -ne 0 ]]; then + msg_error "Encountered error, please see test.log contents above." + exit ${RESULT} + fi + + enable_exit_on_error + + pop_directory # BUILD_OBJ_DIR + pop_directory # BUILD_SRC_DIR/PROJECT + + msg_success "'${PROJECT}' test complete." +} + +clean_gnu() +{ + local PROJECT="$1" + shift 1 + + msg "Preparing to clean ${PROJECT}" + + push_directory "${BUILD_SRC_DIR}/${PROJECT}" + + if [[ "${BUILD_OBJ_DIR_RELATIVE}" == "yes" ]]; then + push_directory "${BUILD_OBJ_DIR}" + else + push_directory "${BUILD_OBJ_DIR}/${PROJECT}" + fi + + disable_exit_on_error + + make clean + + local RESULT=$? + + if [[ ${RESULT} -ne 0 ]]; then + msg_error "Encountered error, please see test.log contents above." + exit ${RESULT} + fi + + pop_directory # BUILD_OBJ_DIR + pop_directory # BUILD_SRC_DIR/PROJECT + + msg_success "'${PROJECT}' clean complete." +} + +install_gnu() +{ + local PROJECT="$1" + shift + + msg "Preparing to install ${PROJECT}" + + push_directory "${BUILD_SRC_DIR}/${PROJECT}" + + if [[ "${BUILD_OBJ_DIR_RELATIVE}" == "yes" ]]; then + push_directory "${BUILD_OBJ_DIR}" + else + push_directory "${BUILD_OBJ_DIR}/${PROJECT}" + fi + + make install + + if [[ ${OS} == Linux ]] && [[ "${PREFIX}" == "/usr/local" ]]; then + ldconfig + fi + + pop_directory # BUILD_OBJ_DIR + pop_directory # BUILD_SRC_DIR/PROJECT + + msg_success "'${PROJECT}' installation complete." +} + +test_gnu() +{ + local PROJECT="$1" + local JOBS="$2" + shift 2 + + msg "Preparing to test ${PROJECT}" + + push_directory "${BUILD_SRC_DIR}/${PROJECT}" + + if [[ "${BUILD_OBJ_DIR_RELATIVE}" == "yes" ]]; then + push_directory "${BUILD_OBJ_DIR}" + else + push_directory "${BUILD_OBJ_DIR}/${PROJECT}" + fi + + disable_exit_on_error + + if [[ ${JOBS} -gt ${SEQUENTIAL} ]]; then + make -j${JOBS} check VERBOSE=1 + else + make check VERBOSE=1 + fi + + local RESULT=$? + + if [[ -e "test-suite.log" ]]; then + msg_warn "begin error log: test-suite.log" + cat "test-suite.log" + msg_warn " end error log: test-suite.log" + fi + + if [[ -e "test.log" ]]; then + msg_warn "begin error log: test.log" + cat "test.log" + msg_warn " end error log: test.log" + fi + + if [[ ${RESULT} -ne 0 ]]; then + msg_error "Encountered error, please see test.log contents above." + exit ${RESULT} + fi + + enable_exit_on_error + + pop_directory # BUILD_OBJ_DIR + pop_directory # BUILD_SRC_DIR/PROJECT + + msg_success "'${PROJECT}' test complete." +} + display_build_variables() { msg "BUILD_boost : ${BUILD_boost}" msg "BUILD_secp256k1 : ${BUILD_secp256k1}" + msg "BUILD_ultrafast : ${BUILD_ultrafast}" msg "BUILD_SRC_DIR : ${BUILD_SRC_DIR}" msg "BUILD_OBJ_DIR : ${BUILD_OBJ_DIR}" msg "BUILD_OBJ_DIR_RELATIVE : ${BUILD_OBJ_DIR_RELATIVE}" @@ -922,6 +1179,10 @@ display_toolchain_variables() msg "PKG_CONFIG_PATH : ${PKG_CONFIG_PATH}" msg "LDLIBS : ${LDLIBS}" msg "BOOST_ROOT : ${BOOST_ROOT}" + msg "CMAKE_PREFIX_PATH : ${CMAKE_PREFIX_PATH}" + msg "CMAKE_INSTALL_PREFIX : ${CMAKE_INSTALL_PREFIX}" + msg "CMAKE_INCLUDE_PATH : ${CMAKE_INCLUDE_PATH}" + msg "CMAKE_LIBRARY_PATH : ${CMAKE_LIBRARY_PATH}" } display_constants() @@ -932,6 +1193,9 @@ display_constants() msg "secp256k1_OWNER : ${secp256k1_OWNER}" msg "secp256k1_TAG : ${secp256k1_TAG}" + msg "UltrafastSecp256k1_OWNER : ${UltrafastSecp256k1_OWNER}" + msg "UltrafastSecp256k1_TAG : ${UltrafastSecp256k1_TAG}" + msg "libbitcoin_system_OWNER : ${libbitcoin_system_OWNER}" msg "libbitcoin_system_TAG : ${libbitcoin_system_TAG}" @@ -958,10 +1222,15 @@ help() msg " Default: --disable-sse41" msg "---shani Use Intel/ARM SHA Extensions." msg " Default: --disable-shani" + msg "---ultrafast Use shrec/UltrafastSecp256k1." + msg " Default: --without-ultrafast" + msg "---secp256k1 Use bitcoin-core/secp256k1." + msg " Default: --with-secp256k1" msg "---ssl Use embedded ssl library." msg " Default: --with-ssl" msg "--build-boost Build Boost libraries" msg "--build-secp256k1 Build libsecp256k1 libraries" + msg "--build-ultrafast Build UltrafastSecp256k1 libraries" msg "--build-src-dir= Location for sources." msg " Default: $(pwd)" msg "--build-obj-dir= Location for intermediate objects." diff --git a/builds/msvc/vs2022/libbitcoin-node-test/libbitcoin-node-test.vcxproj b/builds/msvc/vs2022/libbitcoin-node-test/libbitcoin-node-test.vcxproj index ba0f259f..7b68a69b 100644 --- a/builds/msvc/vs2022/libbitcoin-node-test/libbitcoin-node-test.vcxproj +++ b/builds/msvc/vs2022/libbitcoin-node-test/libbitcoin-node-test.vcxproj @@ -13,60 +13,28 @@ libbitcoin-node-test - - DebugDEXE - Win32 - - - ReleaseDEXE - Win32 - - + DebugDEXE - x64 + ARM - + ReleaseDEXE - x64 - - - DebugLEXE - Win32 - - - ReleaseLEXE - Win32 + ARM - + DebugLEXE - x64 + ARM - + ReleaseLEXE - x64 - - - DebugSEXE - Win32 - - - ReleaseSEXE - Win32 + ARM - + DebugSEXE - x64 - - - ReleaseSEXE - x64 - - - DebugDEXE ARM - - ReleaseDEXE + + ReleaseSEXE ARM @@ -77,14 +45,6 @@ ReleaseDEXE ARM64 - - DebugLEXE - ARM - - - ReleaseLEXE - ARM - DebugLEXE ARM64 @@ -93,14 +53,6 @@ ReleaseLEXE ARM64 - - DebugSEXE - ARM - - - ReleaseSEXE - ARM - DebugSEXE ARM64 @@ -109,6 +61,54 @@ ReleaseSEXE ARM64 + + DebugDEXE + Win32 + + + ReleaseDEXE + Win32 + + + DebugLEXE + Win32 + + + ReleaseLEXE + Win32 + + + DebugSEXE + Win32 + + + ReleaseSEXE + Win32 + + + DebugDEXE + x64 + + + ReleaseDEXE + x64 + + + DebugLEXE + x64 + + + ReleaseLEXE + x64 + + + DebugSEXE + x64 + + + ReleaseSEXE + x64 + @@ -117,6 +117,7 @@ + @@ -138,9 +139,7 @@ - - $(IntDir)test_test.obj - + @@ -148,6 +147,8 @@ + + @@ -158,14 +159,14 @@ + - - This project references NuGet package(s) that are missing on this computer. Enable NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}. + This project references NuGet package(s) that are missing on this computer. Enable NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The Missing file is {0}. @@ -174,10 +175,10 @@ + - diff --git a/builds/msvc/vs2022/libbitcoin-node.sln b/builds/msvc/vs2022/libbitcoin-node.sln index 70b4d374..f94a45f0 100644 --- a/builds/msvc/vs2022/libbitcoin-node.sln +++ b/builds/msvc/vs2022/libbitcoin-node.sln @@ -9,48 +9,48 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libbitcoin-node-test", "lib EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution - StaticDebug|Win32 = StaticDebug|Win32 - StaticDebug|x64 = StaticDebug|x64 - StaticRelease|Win32 = StaticRelease|Win32 - StaticRelease|x64 = StaticRelease|x64 StaticDebug|ARM = StaticDebug|ARM - StaticDebug|ARM64 = StaticDebug|ARM64 StaticRelease|ARM = StaticRelease|ARM + StaticDebug|ARM64 = StaticDebug|ARM64 StaticRelease|ARM64 = StaticRelease|ARM64 + StaticDebug|Win32 = StaticDebug|Win32 + StaticRelease|Win32 = StaticRelease|Win32 + StaticDebug|x64 = StaticDebug|x64 + StaticRelease|x64 = StaticRelease|x64 EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution - {5FFB5F52-0772-4404-BB2F-39BE5F82A158}.StaticDebug|Win32.ActiveCfg = DebugLIB|Win32 - {5FFB5F52-0772-4404-BB2F-39BE5F82A158}.StaticDebug|Win32.Build.0 = DebugLIB|Win32 - {5FFB5F52-0772-4404-BB2F-39BE5F82A158}.StaticDebug|x64.ActiveCfg = DebugLIB|x64 - {5FFB5F52-0772-4404-BB2F-39BE5F82A158}.StaticDebug|x64.Build.0 = DebugLIB|x64 - {5FFB5F52-0772-4404-BB2F-39BE5F82A158}.StaticRelease|Win32.ActiveCfg = ReleaseLIB|Win32 - {5FFB5F52-0772-4404-BB2F-39BE5F82A158}.StaticRelease|Win32.Build.0 = ReleaseLIB|Win32 - {5FFB5F52-0772-4404-BB2F-39BE5F82A158}.StaticRelease|x64.ActiveCfg = ReleaseLIB|x64 - {5FFB5F52-0772-4404-BB2F-39BE5F82A158}.StaticRelease|x64.Build.0 = ReleaseLIB|x64 {5FFB5F52-0772-4404-BB2F-39BE5F82A158}.StaticDebug|ARM.ActiveCfg = DebugLIB|ARM {5FFB5F52-0772-4404-BB2F-39BE5F82A158}.StaticDebug|ARM.Build.0 = DebugLIB|ARM - {5FFB5F52-0772-4404-BB2F-39BE5F82A158}.StaticDebug|ARM64.ActiveCfg = DebugLIB|ARM64 - {5FFB5F52-0772-4404-BB2F-39BE5F82A158}.StaticDebug|ARM64.Build.0 = DebugLIB|ARM64 {5FFB5F52-0772-4404-BB2F-39BE5F82A158}.StaticRelease|ARM.ActiveCfg = ReleaseLIB|ARM {5FFB5F52-0772-4404-BB2F-39BE5F82A158}.StaticRelease|ARM.Build.0 = ReleaseLIB|ARM + {5FFB5F52-0772-4404-BB2F-39BE5F82A158}.StaticDebug|ARM64.ActiveCfg = DebugLIB|ARM64 + {5FFB5F52-0772-4404-BB2F-39BE5F82A158}.StaticDebug|ARM64.Build.0 = DebugLIB|ARM64 {5FFB5F52-0772-4404-BB2F-39BE5F82A158}.StaticRelease|ARM64.ActiveCfg = ReleaseLIB|ARM64 {5FFB5F52-0772-4404-BB2F-39BE5F82A158}.StaticRelease|ARM64.Build.0 = ReleaseLIB|ARM64 - {4BD50864-D3BC-4F64-AEBB-DDEB8A622FA8}.StaticDebug|Win32.ActiveCfg = DebugSEXE|Win32 - {4BD50864-D3BC-4F64-AEBB-DDEB8A622FA8}.StaticDebug|Win32.Build.0 = DebugSEXE|Win32 - {4BD50864-D3BC-4F64-AEBB-DDEB8A622FA8}.StaticDebug|x64.ActiveCfg = DebugSEXE|x64 - {4BD50864-D3BC-4F64-AEBB-DDEB8A622FA8}.StaticDebug|x64.Build.0 = DebugSEXE|x64 - {4BD50864-D3BC-4F64-AEBB-DDEB8A622FA8}.StaticRelease|Win32.ActiveCfg = ReleaseSEXE|Win32 - {4BD50864-D3BC-4F64-AEBB-DDEB8A622FA8}.StaticRelease|Win32.Build.0 = ReleaseSEXE|Win32 - {4BD50864-D3BC-4F64-AEBB-DDEB8A622FA8}.StaticRelease|x64.ActiveCfg = ReleaseSEXE|x64 - {4BD50864-D3BC-4F64-AEBB-DDEB8A622FA8}.StaticRelease|x64.Build.0 = ReleaseSEXE|x64 + {5FFB5F52-0772-4404-BB2F-39BE5F82A158}.StaticDebug|Win32.ActiveCfg = DebugLIB|Win32 + {5FFB5F52-0772-4404-BB2F-39BE5F82A158}.StaticDebug|Win32.Build.0 = DebugLIB|Win32 + {5FFB5F52-0772-4404-BB2F-39BE5F82A158}.StaticRelease|Win32.ActiveCfg = ReleaseLIB|Win32 + {5FFB5F52-0772-4404-BB2F-39BE5F82A158}.StaticRelease|Win32.Build.0 = ReleaseLIB|Win32 + {5FFB5F52-0772-4404-BB2F-39BE5F82A158}.StaticDebug|x64.ActiveCfg = DebugLIB|x64 + {5FFB5F52-0772-4404-BB2F-39BE5F82A158}.StaticDebug|x64.Build.0 = DebugLIB|x64 + {5FFB5F52-0772-4404-BB2F-39BE5F82A158}.StaticRelease|x64.ActiveCfg = ReleaseLIB|x64 + {5FFB5F52-0772-4404-BB2F-39BE5F82A158}.StaticRelease|x64.Build.0 = ReleaseLIB|x64 {4BD50864-D3BC-4F64-AEBB-DDEB8A622FA8}.StaticDebug|ARM.ActiveCfg = DebugSEXE|ARM {4BD50864-D3BC-4F64-AEBB-DDEB8A622FA8}.StaticDebug|ARM.Build.0 = DebugSEXE|ARM - {4BD50864-D3BC-4F64-AEBB-DDEB8A622FA8}.StaticDebug|ARM64.ActiveCfg = DebugSEXE|ARM64 - {4BD50864-D3BC-4F64-AEBB-DDEB8A622FA8}.StaticDebug|ARM64.Build.0 = DebugSEXE|ARM64 {4BD50864-D3BC-4F64-AEBB-DDEB8A622FA8}.StaticRelease|ARM.ActiveCfg = ReleaseSEXE|ARM {4BD50864-D3BC-4F64-AEBB-DDEB8A622FA8}.StaticRelease|ARM.Build.0 = ReleaseSEXE|ARM + {4BD50864-D3BC-4F64-AEBB-DDEB8A622FA8}.StaticDebug|ARM64.ActiveCfg = DebugSEXE|ARM64 + {4BD50864-D3BC-4F64-AEBB-DDEB8A622FA8}.StaticDebug|ARM64.Build.0 = DebugSEXE|ARM64 {4BD50864-D3BC-4F64-AEBB-DDEB8A622FA8}.StaticRelease|ARM64.ActiveCfg = ReleaseSEXE|ARM64 {4BD50864-D3BC-4F64-AEBB-DDEB8A622FA8}.StaticRelease|ARM64.Build.0 = ReleaseSEXE|ARM64 + {4BD50864-D3BC-4F64-AEBB-DDEB8A622FA8}.StaticDebug|Win32.ActiveCfg = DebugSEXE|Win32 + {4BD50864-D3BC-4F64-AEBB-DDEB8A622FA8}.StaticDebug|Win32.Build.0 = DebugSEXE|Win32 + {4BD50864-D3BC-4F64-AEBB-DDEB8A622FA8}.StaticRelease|Win32.ActiveCfg = ReleaseSEXE|Win32 + {4BD50864-D3BC-4F64-AEBB-DDEB8A622FA8}.StaticRelease|Win32.Build.0 = ReleaseSEXE|Win32 + {4BD50864-D3BC-4F64-AEBB-DDEB8A622FA8}.StaticDebug|x64.ActiveCfg = DebugSEXE|x64 + {4BD50864-D3BC-4F64-AEBB-DDEB8A622FA8}.StaticDebug|x64.Build.0 = DebugSEXE|x64 + {4BD50864-D3BC-4F64-AEBB-DDEB8A622FA8}.StaticRelease|x64.ActiveCfg = ReleaseSEXE|x64 + {4BD50864-D3BC-4F64-AEBB-DDEB8A622FA8}.StaticRelease|x64.Build.0 = ReleaseSEXE|x64 EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE diff --git a/builds/msvc/vs2022/libbitcoin-node/libbitcoin-node.vcxproj b/builds/msvc/vs2022/libbitcoin-node/libbitcoin-node.vcxproj index 884cf244..35cd6195 100644 --- a/builds/msvc/vs2022/libbitcoin-node/libbitcoin-node.vcxproj +++ b/builds/msvc/vs2022/libbitcoin-node/libbitcoin-node.vcxproj @@ -12,60 +12,28 @@ libbitcoin-node - - DebugDLL - Win32 - - - ReleaseDLL - Win32 - - + DebugDLL - x64 + ARM - + ReleaseDLL - x64 - - - DebugLTCG - Win32 - - - ReleaseLTCG - Win32 + ARM - + DebugLTCG - x64 + ARM - + ReleaseLTCG - x64 - - - DebugLIB - Win32 - - - ReleaseLIB - Win32 + ARM - + DebugLIB - x64 - - - ReleaseLIB - x64 - - - DebugDLL ARM - - ReleaseDLL + + ReleaseLIB ARM @@ -76,14 +44,6 @@ ReleaseDLL ARM64 - - DebugLTCG - ARM - - - ReleaseLTCG - ARM - DebugLTCG ARM64 @@ -92,14 +52,6 @@ ReleaseLTCG ARM64 - - DebugLIB - ARM - - - ReleaseLIB - ARM - DebugLIB ARM64 @@ -108,6 +60,54 @@ ReleaseLIB ARM64 + + DebugDLL + Win32 + + + ReleaseDLL + Win32 + + + DebugLTCG + Win32 + + + ReleaseLTCG + Win32 + + + DebugLIB + Win32 + + + ReleaseLIB + Win32 + + + DebugDLL + x64 + + + ReleaseDLL + x64 + + + DebugLTCG + x64 + + + ReleaseLTCG + x64 + + + DebugLIB + x64 + + + ReleaseLIB + x64 + StaticLibrary @@ -120,6 +120,7 @@ + @@ -163,6 +164,7 @@ + @@ -216,7 +218,6 @@ - @@ -224,7 +225,7 @@ - + @@ -242,7 +243,7 @@ - This project references NuGet package(s) that are missing on this computer. Enable NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}. + This project references NuGet package(s) that are missing on this computer. Enable NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The Missing file is {0}. diff --git a/builds/msvc/vs2022/libbitcoin-node/libbitcoin-node.vcxproj.filters b/builds/msvc/vs2022/libbitcoin-node/libbitcoin-node.vcxproj.filters index 5b8a5dde..c90a2adb 100644 --- a/builds/msvc/vs2022/libbitcoin-node/libbitcoin-node.vcxproj.filters +++ b/builds/msvc/vs2022/libbitcoin-node/libbitcoin-node.vcxproj.filters @@ -8,58 +8,58 @@ - {5FFB5F52-0772-4404-0000-000000000006} + {5FFB5F52-0772-4404-0000-000000000000} - {5FFB5F52-0772-4404-0000-000000000007} + {5FFB5F52-0772-4404-0000-000000000001} - {5FFB5F52-0772-4404-0000-000000000008} + {5FFB5F52-0772-4404-0000-000000000002} - {5FFB5F52-0772-4404-0000-000000000009} + {5FFB5F52-0772-4404-0000-000000000003} - {5FFB5F52-0772-4404-0000-00000000000A} + {5FFB5F52-0772-4404-0000-000000000004} - {5FFB5F52-0772-4404-0000-00000000000B} + {5FFB5F52-0772-4404-0000-000000000005} - {5FFB5F52-0772-4404-0000-00000000000F} + {5FFB5F52-0772-4404-0000-000000000006} - {5FFB5F52-0772-4404-0000-000000000001} + {5FFB5F52-0772-4404-0000-000000000007} - {5FFB5F52-0772-4404-0000-00000000000C} + {5FFB5F52-0772-4404-0000-000000000008} - {5FFB5F52-0772-4404-0000-00000000000D} + {5FFB5F52-0772-4404-0000-000000000009} - {5FFB5F52-0772-4404-0000-00000000000E} + {5FFB5F52-0772-4404-0000-00000000000A} - {5FFB5F52-0772-4404-0000-000000000002} + {5FFB5F52-0772-4404-0000-00000000000B} - {5FFB5F52-0772-4404-0000-000000000000} + {5FFB5F52-0772-4404-0000-00000000000C} - {5FFB5F52-0772-4404-0000-000000000001} + {5FFB5F52-0772-4404-0000-00000000000D} - {5FFB5F52-0772-4404-0000-000000000002} + {5FFB5F52-0772-4404-0000-00000000000E} - {5FFB5F52-0772-4404-0000-000000000003} + {5FFB5F52-0772-4404-0000-00000000000F} - {5FFB5F52-0772-4404-0000-000000000004} + {5FFB5F52-0772-4404-0000-000000000001} - {5FFB5F52-0772-4404-0000-000000000005} + {5FFB5F52-0772-4404-0000-000000000002} @@ -185,6 +185,9 @@ + + resource + include\bitcoin @@ -344,9 +347,6 @@ include\bitcoin\node - - resource - @@ -361,7 +361,7 @@ - + resource diff --git a/builds/msvc/vs2026/libbitcoin-node-test/libbitcoin-node-test.vcxproj b/builds/msvc/vs2026/libbitcoin-node-test/libbitcoin-node-test.vcxproj index a13ce22f..ed4cd5df 100644 --- a/builds/msvc/vs2026/libbitcoin-node-test/libbitcoin-node-test.vcxproj +++ b/builds/msvc/vs2026/libbitcoin-node-test/libbitcoin-node-test.vcxproj @@ -13,60 +13,28 @@ libbitcoin-node-test - - DebugDEXE - Win32 - - - ReleaseDEXE - Win32 - - + DebugDEXE - x64 + ARM - + ReleaseDEXE - x64 - - - DebugLEXE - Win32 - - - ReleaseLEXE - Win32 + ARM - + DebugLEXE - x64 + ARM - + ReleaseLEXE - x64 - - - DebugSEXE - Win32 - - - ReleaseSEXE - Win32 + ARM - + DebugSEXE - x64 - - - ReleaseSEXE - x64 - - - DebugDEXE ARM - - ReleaseDEXE + + ReleaseSEXE ARM @@ -77,14 +45,6 @@ ReleaseDEXE ARM64 - - DebugLEXE - ARM - - - ReleaseLEXE - ARM - DebugLEXE ARM64 @@ -93,14 +53,6 @@ ReleaseLEXE ARM64 - - DebugSEXE - ARM - - - ReleaseSEXE - ARM - DebugSEXE ARM64 @@ -109,6 +61,54 @@ ReleaseSEXE ARM64 + + DebugDEXE + Win32 + + + ReleaseDEXE + Win32 + + + DebugLEXE + Win32 + + + ReleaseLEXE + Win32 + + + DebugSEXE + Win32 + + + ReleaseSEXE + Win32 + + + DebugDEXE + x64 + + + ReleaseDEXE + x64 + + + DebugLEXE + x64 + + + ReleaseLEXE + x64 + + + DebugSEXE + x64 + + + ReleaseSEXE + x64 + @@ -117,6 +117,7 @@ + @@ -138,9 +139,7 @@ - - $(IntDir)test_test.obj - + @@ -148,6 +147,8 @@ + + @@ -158,14 +159,14 @@ + - - This project references NuGet package(s) that are missing on this computer. Enable NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}. + This project references NuGet package(s) that are missing on this computer. Enable NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The Missing file is {0}. @@ -174,10 +175,10 @@ + - @@ -187,4 +188,4 @@ - \ No newline at end of file + diff --git a/builds/msvc/vs2026/libbitcoin-node.sln b/builds/msvc/vs2026/libbitcoin-node.sln index 70b4d374..f94a45f0 100644 --- a/builds/msvc/vs2026/libbitcoin-node.sln +++ b/builds/msvc/vs2026/libbitcoin-node.sln @@ -9,48 +9,48 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libbitcoin-node-test", "lib EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution - StaticDebug|Win32 = StaticDebug|Win32 - StaticDebug|x64 = StaticDebug|x64 - StaticRelease|Win32 = StaticRelease|Win32 - StaticRelease|x64 = StaticRelease|x64 StaticDebug|ARM = StaticDebug|ARM - StaticDebug|ARM64 = StaticDebug|ARM64 StaticRelease|ARM = StaticRelease|ARM + StaticDebug|ARM64 = StaticDebug|ARM64 StaticRelease|ARM64 = StaticRelease|ARM64 + StaticDebug|Win32 = StaticDebug|Win32 + StaticRelease|Win32 = StaticRelease|Win32 + StaticDebug|x64 = StaticDebug|x64 + StaticRelease|x64 = StaticRelease|x64 EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution - {5FFB5F52-0772-4404-BB2F-39BE5F82A158}.StaticDebug|Win32.ActiveCfg = DebugLIB|Win32 - {5FFB5F52-0772-4404-BB2F-39BE5F82A158}.StaticDebug|Win32.Build.0 = DebugLIB|Win32 - {5FFB5F52-0772-4404-BB2F-39BE5F82A158}.StaticDebug|x64.ActiveCfg = DebugLIB|x64 - {5FFB5F52-0772-4404-BB2F-39BE5F82A158}.StaticDebug|x64.Build.0 = DebugLIB|x64 - {5FFB5F52-0772-4404-BB2F-39BE5F82A158}.StaticRelease|Win32.ActiveCfg = ReleaseLIB|Win32 - {5FFB5F52-0772-4404-BB2F-39BE5F82A158}.StaticRelease|Win32.Build.0 = ReleaseLIB|Win32 - {5FFB5F52-0772-4404-BB2F-39BE5F82A158}.StaticRelease|x64.ActiveCfg = ReleaseLIB|x64 - {5FFB5F52-0772-4404-BB2F-39BE5F82A158}.StaticRelease|x64.Build.0 = ReleaseLIB|x64 {5FFB5F52-0772-4404-BB2F-39BE5F82A158}.StaticDebug|ARM.ActiveCfg = DebugLIB|ARM {5FFB5F52-0772-4404-BB2F-39BE5F82A158}.StaticDebug|ARM.Build.0 = DebugLIB|ARM - {5FFB5F52-0772-4404-BB2F-39BE5F82A158}.StaticDebug|ARM64.ActiveCfg = DebugLIB|ARM64 - {5FFB5F52-0772-4404-BB2F-39BE5F82A158}.StaticDebug|ARM64.Build.0 = DebugLIB|ARM64 {5FFB5F52-0772-4404-BB2F-39BE5F82A158}.StaticRelease|ARM.ActiveCfg = ReleaseLIB|ARM {5FFB5F52-0772-4404-BB2F-39BE5F82A158}.StaticRelease|ARM.Build.0 = ReleaseLIB|ARM + {5FFB5F52-0772-4404-BB2F-39BE5F82A158}.StaticDebug|ARM64.ActiveCfg = DebugLIB|ARM64 + {5FFB5F52-0772-4404-BB2F-39BE5F82A158}.StaticDebug|ARM64.Build.0 = DebugLIB|ARM64 {5FFB5F52-0772-4404-BB2F-39BE5F82A158}.StaticRelease|ARM64.ActiveCfg = ReleaseLIB|ARM64 {5FFB5F52-0772-4404-BB2F-39BE5F82A158}.StaticRelease|ARM64.Build.0 = ReleaseLIB|ARM64 - {4BD50864-D3BC-4F64-AEBB-DDEB8A622FA8}.StaticDebug|Win32.ActiveCfg = DebugSEXE|Win32 - {4BD50864-D3BC-4F64-AEBB-DDEB8A622FA8}.StaticDebug|Win32.Build.0 = DebugSEXE|Win32 - {4BD50864-D3BC-4F64-AEBB-DDEB8A622FA8}.StaticDebug|x64.ActiveCfg = DebugSEXE|x64 - {4BD50864-D3BC-4F64-AEBB-DDEB8A622FA8}.StaticDebug|x64.Build.0 = DebugSEXE|x64 - {4BD50864-D3BC-4F64-AEBB-DDEB8A622FA8}.StaticRelease|Win32.ActiveCfg = ReleaseSEXE|Win32 - {4BD50864-D3BC-4F64-AEBB-DDEB8A622FA8}.StaticRelease|Win32.Build.0 = ReleaseSEXE|Win32 - {4BD50864-D3BC-4F64-AEBB-DDEB8A622FA8}.StaticRelease|x64.ActiveCfg = ReleaseSEXE|x64 - {4BD50864-D3BC-4F64-AEBB-DDEB8A622FA8}.StaticRelease|x64.Build.0 = ReleaseSEXE|x64 + {5FFB5F52-0772-4404-BB2F-39BE5F82A158}.StaticDebug|Win32.ActiveCfg = DebugLIB|Win32 + {5FFB5F52-0772-4404-BB2F-39BE5F82A158}.StaticDebug|Win32.Build.0 = DebugLIB|Win32 + {5FFB5F52-0772-4404-BB2F-39BE5F82A158}.StaticRelease|Win32.ActiveCfg = ReleaseLIB|Win32 + {5FFB5F52-0772-4404-BB2F-39BE5F82A158}.StaticRelease|Win32.Build.0 = ReleaseLIB|Win32 + {5FFB5F52-0772-4404-BB2F-39BE5F82A158}.StaticDebug|x64.ActiveCfg = DebugLIB|x64 + {5FFB5F52-0772-4404-BB2F-39BE5F82A158}.StaticDebug|x64.Build.0 = DebugLIB|x64 + {5FFB5F52-0772-4404-BB2F-39BE5F82A158}.StaticRelease|x64.ActiveCfg = ReleaseLIB|x64 + {5FFB5F52-0772-4404-BB2F-39BE5F82A158}.StaticRelease|x64.Build.0 = ReleaseLIB|x64 {4BD50864-D3BC-4F64-AEBB-DDEB8A622FA8}.StaticDebug|ARM.ActiveCfg = DebugSEXE|ARM {4BD50864-D3BC-4F64-AEBB-DDEB8A622FA8}.StaticDebug|ARM.Build.0 = DebugSEXE|ARM - {4BD50864-D3BC-4F64-AEBB-DDEB8A622FA8}.StaticDebug|ARM64.ActiveCfg = DebugSEXE|ARM64 - {4BD50864-D3BC-4F64-AEBB-DDEB8A622FA8}.StaticDebug|ARM64.Build.0 = DebugSEXE|ARM64 {4BD50864-D3BC-4F64-AEBB-DDEB8A622FA8}.StaticRelease|ARM.ActiveCfg = ReleaseSEXE|ARM {4BD50864-D3BC-4F64-AEBB-DDEB8A622FA8}.StaticRelease|ARM.Build.0 = ReleaseSEXE|ARM + {4BD50864-D3BC-4F64-AEBB-DDEB8A622FA8}.StaticDebug|ARM64.ActiveCfg = DebugSEXE|ARM64 + {4BD50864-D3BC-4F64-AEBB-DDEB8A622FA8}.StaticDebug|ARM64.Build.0 = DebugSEXE|ARM64 {4BD50864-D3BC-4F64-AEBB-DDEB8A622FA8}.StaticRelease|ARM64.ActiveCfg = ReleaseSEXE|ARM64 {4BD50864-D3BC-4F64-AEBB-DDEB8A622FA8}.StaticRelease|ARM64.Build.0 = ReleaseSEXE|ARM64 + {4BD50864-D3BC-4F64-AEBB-DDEB8A622FA8}.StaticDebug|Win32.ActiveCfg = DebugSEXE|Win32 + {4BD50864-D3BC-4F64-AEBB-DDEB8A622FA8}.StaticDebug|Win32.Build.0 = DebugSEXE|Win32 + {4BD50864-D3BC-4F64-AEBB-DDEB8A622FA8}.StaticRelease|Win32.ActiveCfg = ReleaseSEXE|Win32 + {4BD50864-D3BC-4F64-AEBB-DDEB8A622FA8}.StaticRelease|Win32.Build.0 = ReleaseSEXE|Win32 + {4BD50864-D3BC-4F64-AEBB-DDEB8A622FA8}.StaticDebug|x64.ActiveCfg = DebugSEXE|x64 + {4BD50864-D3BC-4F64-AEBB-DDEB8A622FA8}.StaticDebug|x64.Build.0 = DebugSEXE|x64 + {4BD50864-D3BC-4F64-AEBB-DDEB8A622FA8}.StaticRelease|x64.ActiveCfg = ReleaseSEXE|x64 + {4BD50864-D3BC-4F64-AEBB-DDEB8A622FA8}.StaticRelease|x64.Build.0 = ReleaseSEXE|x64 EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE diff --git a/builds/msvc/vs2026/libbitcoin-node/libbitcoin-node.vcxproj b/builds/msvc/vs2026/libbitcoin-node/libbitcoin-node.vcxproj index 3295d926..963aedc9 100644 --- a/builds/msvc/vs2026/libbitcoin-node/libbitcoin-node.vcxproj +++ b/builds/msvc/vs2026/libbitcoin-node/libbitcoin-node.vcxproj @@ -12,60 +12,28 @@ libbitcoin-node - - DebugDLL - Win32 - - - ReleaseDLL - Win32 - - + DebugDLL - x64 + ARM - + ReleaseDLL - x64 - - - DebugLTCG - Win32 - - - ReleaseLTCG - Win32 + ARM - + DebugLTCG - x64 + ARM - + ReleaseLTCG - x64 - - - DebugLIB - Win32 - - - ReleaseLIB - Win32 + ARM - + DebugLIB - x64 - - - ReleaseLIB - x64 - - - DebugDLL ARM - - ReleaseDLL + + ReleaseLIB ARM @@ -76,14 +44,6 @@ ReleaseDLL ARM64 - - DebugLTCG - ARM - - - ReleaseLTCG - ARM - DebugLTCG ARM64 @@ -92,14 +52,6 @@ ReleaseLTCG ARM64 - - DebugLIB - ARM - - - ReleaseLIB - ARM - DebugLIB ARM64 @@ -108,6 +60,54 @@ ReleaseLIB ARM64 + + DebugDLL + Win32 + + + ReleaseDLL + Win32 + + + DebugLTCG + Win32 + + + ReleaseLTCG + Win32 + + + DebugLIB + Win32 + + + ReleaseLIB + Win32 + + + DebugDLL + x64 + + + ReleaseDLL + x64 + + + DebugLTCG + x64 + + + ReleaseLTCG + x64 + + + DebugLIB + x64 + + + ReleaseLIB + x64 + StaticLibrary @@ -120,6 +120,7 @@ + @@ -163,6 +164,7 @@ + @@ -216,7 +218,6 @@ - @@ -224,7 +225,7 @@ - + @@ -242,7 +243,7 @@ - This project references NuGet package(s) that are missing on this computer. Enable NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}. + This project references NuGet package(s) that are missing on this computer. Enable NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The Missing file is {0}. @@ -258,4 +259,4 @@ - \ No newline at end of file + diff --git a/builds/msvc/vs2026/libbitcoin-node/libbitcoin-node.vcxproj.filters b/builds/msvc/vs2026/libbitcoin-node/libbitcoin-node.vcxproj.filters index 5b8a5dde..c90a2adb 100644 --- a/builds/msvc/vs2026/libbitcoin-node/libbitcoin-node.vcxproj.filters +++ b/builds/msvc/vs2026/libbitcoin-node/libbitcoin-node.vcxproj.filters @@ -8,58 +8,58 @@ - {5FFB5F52-0772-4404-0000-000000000006} + {5FFB5F52-0772-4404-0000-000000000000} - {5FFB5F52-0772-4404-0000-000000000007} + {5FFB5F52-0772-4404-0000-000000000001} - {5FFB5F52-0772-4404-0000-000000000008} + {5FFB5F52-0772-4404-0000-000000000002} - {5FFB5F52-0772-4404-0000-000000000009} + {5FFB5F52-0772-4404-0000-000000000003} - {5FFB5F52-0772-4404-0000-00000000000A} + {5FFB5F52-0772-4404-0000-000000000004} - {5FFB5F52-0772-4404-0000-00000000000B} + {5FFB5F52-0772-4404-0000-000000000005} - {5FFB5F52-0772-4404-0000-00000000000F} + {5FFB5F52-0772-4404-0000-000000000006} - {5FFB5F52-0772-4404-0000-000000000001} + {5FFB5F52-0772-4404-0000-000000000007} - {5FFB5F52-0772-4404-0000-00000000000C} + {5FFB5F52-0772-4404-0000-000000000008} - {5FFB5F52-0772-4404-0000-00000000000D} + {5FFB5F52-0772-4404-0000-000000000009} - {5FFB5F52-0772-4404-0000-00000000000E} + {5FFB5F52-0772-4404-0000-00000000000A} - {5FFB5F52-0772-4404-0000-000000000002} + {5FFB5F52-0772-4404-0000-00000000000B} - {5FFB5F52-0772-4404-0000-000000000000} + {5FFB5F52-0772-4404-0000-00000000000C} - {5FFB5F52-0772-4404-0000-000000000001} + {5FFB5F52-0772-4404-0000-00000000000D} - {5FFB5F52-0772-4404-0000-000000000002} + {5FFB5F52-0772-4404-0000-00000000000E} - {5FFB5F52-0772-4404-0000-000000000003} + {5FFB5F52-0772-4404-0000-00000000000F} - {5FFB5F52-0772-4404-0000-000000000004} + {5FFB5F52-0772-4404-0000-000000000001} - {5FFB5F52-0772-4404-0000-000000000005} + {5FFB5F52-0772-4404-0000-000000000002} @@ -185,6 +185,9 @@ + + resource + include\bitcoin @@ -344,9 +347,6 @@ include\bitcoin\node - - resource - @@ -361,7 +361,7 @@ - + resource