From eb59a192d9ca3b1a27051cb5f2b3483186fe9928 Mon Sep 17 00:00:00 2001 From: Hennadii Stepanov <32963518+hebasto@users.noreply.github.com> Date: Mon, 28 Jul 2025 10:20:39 +0100 Subject: [PATCH 1/2] cmake, refactor: Encapsulate adding secp256k1 subtree in function --- cmake/secp256k1.cmake | 50 +++++++++++++++++++++++++++++++++++++++++++ src/CMakeLists.txt | 50 ++----------------------------------------- 2 files changed, 52 insertions(+), 48 deletions(-) create mode 100644 cmake/secp256k1.cmake diff --git a/cmake/secp256k1.cmake b/cmake/secp256k1.cmake new file mode 100644 index 00000000000..468e87f3fec --- /dev/null +++ b/cmake/secp256k1.cmake @@ -0,0 +1,50 @@ +# Copyright (c) 2023-present The Bitcoin Core developers +# Distributed under the MIT software license, see the accompanying +# file COPYING or https://opensource.org/license/mit/. + +function(add_secp256k1 subdir) + message("") + message("Configuring secp256k1 subtree...") + set(SECP256K1_DISABLE_SHARED ON CACHE BOOL "" FORCE) + set(SECP256K1_ENABLE_MODULE_ECDH OFF CACHE BOOL "" FORCE) + set(SECP256K1_ENABLE_MODULE_RECOVERY ON CACHE BOOL "" FORCE) + set(SECP256K1_ENABLE_MODULE_MUSIG ON CACHE BOOL "" FORCE) + set(SECP256K1_BUILD_BENCHMARK OFF CACHE BOOL "" FORCE) + set(SECP256K1_BUILD_TESTS ${BUILD_TESTS} CACHE BOOL "" FORCE) + set(SECP256K1_BUILD_EXHAUSTIVE_TESTS ${BUILD_TESTS} CACHE BOOL "" FORCE) + if(NOT BUILD_TESTS) + # Always skip the ctime tests, if we are building no other tests. + # Otherwise, they are built if Valgrind is available. See SECP256K1_VALGRIND. + set(SECP256K1_BUILD_CTIME_TESTS ${BUILD_TESTS} CACHE BOOL "" FORCE) + endif() + set(SECP256K1_BUILD_EXAMPLES OFF CACHE BOOL "" FORCE) + include(GetTargetInterface) + # -fsanitize and related flags apply to both C++ and C, + # so we can pass them down to libsecp256k1 as CFLAGS and LDFLAGS. + get_target_interface(SECP256K1_APPEND_CFLAGS "" sanitize_interface COMPILE_OPTIONS) + string(STRIP "${SECP256K1_APPEND_CFLAGS} ${APPEND_CPPFLAGS}" SECP256K1_APPEND_CFLAGS) + string(STRIP "${SECP256K1_APPEND_CFLAGS} ${APPEND_CFLAGS}" SECP256K1_APPEND_CFLAGS) + set(SECP256K1_APPEND_CFLAGS ${SECP256K1_APPEND_CFLAGS} CACHE STRING "" FORCE) + get_target_interface(SECP256K1_APPEND_LDFLAGS "" sanitize_interface LINK_OPTIONS) + string(STRIP "${SECP256K1_APPEND_LDFLAGS} ${APPEND_LDFLAGS}" SECP256K1_APPEND_LDFLAGS) + set(SECP256K1_APPEND_LDFLAGS ${SECP256K1_APPEND_LDFLAGS} CACHE STRING "" FORCE) + # We want to build libsecp256k1 with the most tested RelWithDebInfo configuration. + enable_language(C) + foreach(config IN LISTS CMAKE_BUILD_TYPE CMAKE_CONFIGURATION_TYPES) + if(config STREQUAL "") + continue() + endif() + string(TOUPPER "${config}" config) + set(CMAKE_C_FLAGS_${config} "${CMAKE_C_FLAGS_RELWITHDEBINFO}") + endforeach() + # If the CFLAGS environment variable is defined during building depends + # and configuring this build system, its content might be duplicated. + if(DEFINED ENV{CFLAGS}) + deduplicate_flags(CMAKE_C_FLAGS) + endif() + set(CMAKE_EXPORT_COMPILE_COMMANDS OFF) + add_subdirectory(${subdir}) + set_target_properties(secp256k1 PROPERTIES + EXCLUDE_FROM_ALL TRUE + ) +endfunction() diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 7f02b9258c0..94cfc60f609 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -23,54 +23,8 @@ if (ENABLE_IPC AND NOT WITH_EXTERNAL_LIBMULTIPROCESS) include(../cmake/libmultiprocess.cmake) add_libmultiprocess(ipc/libmultiprocess) endif() -#============================= -# secp256k1 subtree -#============================= -message("") -message("Configuring secp256k1 subtree...") -set(SECP256K1_DISABLE_SHARED ON CACHE BOOL "" FORCE) -set(SECP256K1_ENABLE_MODULE_ECDH OFF CACHE BOOL "" FORCE) -set(SECP256K1_ENABLE_MODULE_RECOVERY ON CACHE BOOL "" FORCE) -set(SECP256K1_ENABLE_MODULE_MUSIG ON CACHE BOOL "" FORCE) -set(SECP256K1_BUILD_BENCHMARK OFF CACHE BOOL "" FORCE) -set(SECP256K1_BUILD_TESTS ${BUILD_TESTS} CACHE BOOL "" FORCE) -set(SECP256K1_BUILD_EXHAUSTIVE_TESTS ${BUILD_TESTS} CACHE BOOL "" FORCE) -if(NOT BUILD_TESTS) - # Always skip the ctime tests, if we are building no other tests. - # Otherwise, they are built if Valgrind is available. See SECP256K1_VALGRIND. - set(SECP256K1_BUILD_CTIME_TESTS ${BUILD_TESTS} CACHE BOOL "" FORCE) -endif() -set(SECP256K1_BUILD_EXAMPLES OFF CACHE BOOL "" FORCE) -include(GetTargetInterface) -# -fsanitize and related flags apply to both C++ and C, -# so we can pass them down to libsecp256k1 as CFLAGS and LDFLAGS. -get_target_interface(SECP256K1_APPEND_CFLAGS "" sanitize_interface COMPILE_OPTIONS) -string(STRIP "${SECP256K1_APPEND_CFLAGS} ${APPEND_CPPFLAGS}" SECP256K1_APPEND_CFLAGS) -string(STRIP "${SECP256K1_APPEND_CFLAGS} ${APPEND_CFLAGS}" SECP256K1_APPEND_CFLAGS) -set(SECP256K1_APPEND_CFLAGS ${SECP256K1_APPEND_CFLAGS} CACHE STRING "" FORCE) -get_target_interface(SECP256K1_APPEND_LDFLAGS "" sanitize_interface LINK_OPTIONS) -string(STRIP "${SECP256K1_APPEND_LDFLAGS} ${APPEND_LDFLAGS}" SECP256K1_APPEND_LDFLAGS) -set(SECP256K1_APPEND_LDFLAGS ${SECP256K1_APPEND_LDFLAGS} CACHE STRING "" FORCE) -# We want to build libsecp256k1 with the most tested RelWithDebInfo configuration. -enable_language(C) -foreach(config IN LISTS CMAKE_BUILD_TYPE CMAKE_CONFIGURATION_TYPES) - if(config STREQUAL "") - continue() - endif() - string(TOUPPER "${config}" config) - set(CMAKE_C_FLAGS_${config} "${CMAKE_C_FLAGS_RELWITHDEBINFO}") -endforeach() -# If the CFLAGS environment variable is defined during building depends -# and configuring this build system, its content might be duplicated. -if(DEFINED ENV{CFLAGS}) - deduplicate_flags(CMAKE_C_FLAGS) -endif() -set(CMAKE_EXPORT_COMPILE_COMMANDS OFF) -add_subdirectory(secp256k1) -set_target_properties(secp256k1 PROPERTIES - EXCLUDE_FROM_ALL TRUE -) -set(CMAKE_EXPORT_COMPILE_COMMANDS ON) +include(../cmake/secp256k1.cmake) +add_secp256k1(secp256k1) # Set top-level target output locations. if(NOT CMAKE_RUNTIME_OUTPUT_DIRECTORY) From b093a19ae2eff306b8ed6ce74d133e3ec53ef64e Mon Sep 17 00:00:00 2001 From: Hennadii Stepanov <32963518+hebasto@users.noreply.github.com> Date: Wed, 30 Jul 2025 13:47:24 +0100 Subject: [PATCH 2/2] cmake: Proactively avoid use of `SECP256K1_DISABLE_SHARED` The `SECP256K1_DISABLE_SHARED` CMake variable has been removed upstream. This change removes its usage ahead of the next `secp256k1` subtree update to prevent breakage and simplify integration. --- cmake/secp256k1.cmake | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/cmake/secp256k1.cmake b/cmake/secp256k1.cmake index 468e87f3fec..15f1aacb66d 100644 --- a/cmake/secp256k1.cmake +++ b/cmake/secp256k1.cmake @@ -5,7 +5,8 @@ function(add_secp256k1 subdir) message("") message("Configuring secp256k1 subtree...") - set(SECP256K1_DISABLE_SHARED ON CACHE BOOL "" FORCE) + set(BUILD_SHARED_LIBS OFF) + set(CMAKE_EXPORT_COMPILE_COMMANDS OFF) set(SECP256K1_ENABLE_MODULE_ECDH OFF CACHE BOOL "" FORCE) set(SECP256K1_ENABLE_MODULE_RECOVERY ON CACHE BOOL "" FORCE) set(SECP256K1_ENABLE_MODULE_MUSIG ON CACHE BOOL "" FORCE) @@ -42,7 +43,7 @@ function(add_secp256k1 subdir) if(DEFINED ENV{CFLAGS}) deduplicate_flags(CMAKE_C_FLAGS) endif() - set(CMAKE_EXPORT_COMPILE_COMMANDS OFF) + add_subdirectory(${subdir}) set_target_properties(secp256k1 PROPERTIES EXCLUDE_FROM_ALL TRUE