mirror of
https://github.com/bitcoin/bitcoin.git
synced 2026-03-02 09:46:14 +00:00
Take advantage of the new secp256k1 option to avoid visibility attributes on API functions. While most users of a shared libsecp always want API functions exported so that they can actually be linked against, we always build it statically. When that static lib is linked into a (static or shared) libbitcoinkernel, by default its symbols end up exported there as well. As libsecp is an implementation detail of the kernel (and any future Core lib), its symbols should never be exported.
58 lines
2.6 KiB
CMake
58 lines
2.6 KiB
CMake
# 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/.
|
|
|
|
enable_language(C)
|
|
|
|
function(add_secp256k1 subdir)
|
|
message("")
|
|
message("Configuring secp256k1 subtree...")
|
|
set(BUILD_SHARED_LIBS OFF)
|
|
set(CMAKE_EXPORT_COMPILE_COMMANDS OFF)
|
|
|
|
# Unconditionally prevent secp's symbols from being exported by our libs
|
|
set(CMAKE_C_VISIBILITY_PRESET hidden)
|
|
set(SECP256K1_ENABLE_API_VISIBILITY_ATTRIBUTES OFF 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.
|
|
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()
|
|
|
|
add_subdirectory(${subdir})
|
|
set_target_properties(secp256k1 PROPERTIES
|
|
EXCLUDE_FROM_ALL TRUE
|
|
)
|
|
endfunction()
|