Skip to content

Commit f70d14c

Browse files
committed
Merge 5416 via sys_libsecp256k1
2 parents 26e1748 + 99dfcb7 commit f70d14c

2 files changed

Lines changed: 44 additions & 0 deletions

File tree

CMakeLists.txt

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -111,6 +111,47 @@ if(WITH_SYSTEM_LEVELDB)
111111
find_package(LevelDB MODULE REQUIRED)
112112
endif() # WITH_SYSTEM_LEVELDB
113113

114+
option(WITH_SYSTEM_LIBSECP256K1 "Build with system libsecp256k1 instead of embedded copy." OFF)
115+
mark_as_advanced(WITH_SYSTEM_LIBSECP256K1)
116+
if(WITH_SYSTEM_LIBSECP256K1)
117+
find_package(PkgConfig REQUIRED)
118+
pkg_check_modules(libsecp256k1 REQUIRED IMPORTED_TARGET libsecp256k1)
119+
add_library(secp256k1 ALIAS PkgConfig::libsecp256k1)
120+
121+
if(NOT (libsecp256k1_HAS_SECP256K1_ELLSWIFT_CREATE AND libsecp256k1_HAS_SECP256K1_XONLY_PUBKEY_PARSE AND libsecp256k1_HAS_SECP256K1_ECDSA_RECOVER AND libsecp256k1_HAS_SECP256K1_SCHNORRSIG_VERIFY))
122+
include(CheckSymbolExists)
123+
include(CMakePushCheckState)
124+
cmake_push_check_state(RESET)
125+
string(APPEND CMAKE_REQUIRED_FLAGS " ${libsecp256k1_CFLAGS_OTHER}")
126+
list(APPEND CMAKE_REQUIRED_INCLUDES ${libsecp256k1_INCLUDE_DIRS})
127+
list(APPEND CMAKE_REQUIRED_LINK_OPTIONS ${libsecp256k1_LDFLAGS})
128+
list(APPEND CMAKE_REQUIRED_LIBRARIES ${libsecp256k1_LIBRARIES})
129+
unset(missing_modules)
130+
macro(check_secp256k1_module module symbol)
131+
string(TOUPPER "${symbol}" VAR)
132+
set(VAR "libsecp256k1_HAS_${VAR}")
133+
unset(${VAR})
134+
check_symbol_exists("${symbol}" "secp256k1_${module}.h" ${VAR})
135+
if(NOT ${VAR})
136+
list(APPEND missing_modules "${module}")
137+
endif()
138+
endmacro()
139+
message(CHECK_START "Checking for required libsecp256k1 modules")
140+
list(APPEND CMAKE_MESSAGE_INDENT " ")
141+
check_secp256k1_module(ellswift secp256k1_ellswift_create)
142+
check_secp256k1_module(extrakeys secp256k1_xonly_pubkey_parse)
143+
check_secp256k1_module(recovery secp256k1_ecdsa_recover)
144+
check_secp256k1_module(schnorrsig secp256k1_schnorrsig_verify)
145+
list(POP_BACK CMAKE_MESSAGE_INDENT)
146+
if(missing_modules)
147+
list(JOIN missing_modules ", " missing_modules)
148+
message(FATAL_ERROR "System-installed libsecp256k1 lacks these required modules: ${missing_modules}.")
149+
endif()
150+
message(CHECK_PASS "all were found")
151+
cmake_pop_check_state()
152+
endif()
153+
endif() # WITH_SYSTEM_LIBSECP256K1
154+
114155
option(ENABLE_WALLET "Enable wallet." ON)
115156
option(WITH_SQLITE "Enable SQLite wallet support." ${ENABLE_WALLET})
116157
if(WITH_SQLITE)

src/CMakeLists.txt

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,8 @@ endif() # WITH_SYSTEM_LEVELDB
2222

2323
include(../cmake/minisketch.cmake)
2424
add_subdirectory(univalue)
25+
26+
if(NOT WITH_SYSTEM_LIBSECP256K1)
2527
#=============================
2628
# secp256k1 subtree
2729
#=============================
@@ -70,6 +72,7 @@ set_target_properties(secp256k1 PROPERTIES
7072
EXCLUDE_FROM_ALL TRUE
7173
)
7274
set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
75+
endif() # WITH_SYSTEM_LIBSECP256K1
7376

7477
# Set top-level target output locations.
7578
if(NOT CMAKE_RUNTIME_OUTPUT_DIRECTORY)

0 commit comments

Comments
 (0)