Skip to content

Commit eb63b2d

Browse files
gministerijgriffiths
authored andcommitted
cmake: improve cmake for wally
libsec256k1-zkp got its cmake files improved with new directive for including modules This commit changes the cmake files to use those changes and also reorganizes the current set-up for wallycore library
1 parent 05ea265 commit eb63b2d

File tree

6 files changed

+140
-202
lines changed

6 files changed

+140
-202
lines changed

_CMakeLists.txt

Lines changed: 36 additions & 47 deletions
Original file line numberDiff line numberDiff line change
@@ -1,61 +1,50 @@
1-
cmake_minimum_required(VERSION 3.20)
1+
cmake_minimum_required(VERSION 3.18)
22

33
project(
44
libwallycore
55
VERSION 1.1.0
66
DESCRIPTION "A collection of useful primitives for cryptocurrency wallets"
77
LANGUAGES C
88
)
9+
set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
910

1011
option(BUILD_SHARED_LIBS "Build as shared library" OFF)
11-
12+
option(WALLYCORE_ENABLE_TESTS "Build tests" OFF)
13+
option(WALLYCORE_INSTALL "Enable install" OFF)
14+
option(WALLYCORE_COVERAGE "Enable coverage" OFF)
15+
option(WALLYCORE_BUILD_ELEMENTS "Build elements" ON)
1216

1317
include(cmake/utils.cmake)
1418
generate_config_file()
1519
configure_file(src/ccan_config.h ccan_config.h COPYONLY)
1620

17-
include(cmake/libsecp256k1.cmake)
18-
19-
add_subdirectory(src)
20-
21-
22-
### install directives
23-
include(GNUInstallDirs)
24-
include(CMakePackageConfigHelpers)
25-
26-
set(LIB_CMAKE_INSTALL_DIR ${CMAKE_INSTALL_LIBDIR}/cmake/wallycore)
27-
28-
configure_package_config_file(
29-
${CMAKE_SOURCE_DIR}/cmake/wallycore-config.cmake.in
30-
"${CMAKE_CURRENT_BINARY_DIR}/wallycore-config.cmake"
31-
INSTALL_DESTINATION ${LIB_CMAKE_INSTALL_DIR}
32-
PATH_VARS LIB_CMAKE_INSTALL_DIR
33-
)
34-
write_basic_package_version_file(
35-
wallycore-config-version.cmake
36-
VERSION ${PROJECT_VERSION}
37-
COMPATIBILITY SameMajorVersion
38-
)
39-
40-
install(
41-
FILES
42-
"${CMAKE_CURRENT_BINARY_DIR}/wallycore-config.cmake"
43-
"${CMAKE_CURRENT_BINARY_DIR}/wallycore-config-version.cmake"
44-
DESTINATION
45-
${LIB_CMAKE_INSTALL_DIR}
46-
)
47-
install(
48-
TARGETS wallycore
49-
EXPORT "wallycore-target"
50-
COMPONENT wallycore
51-
RUNTIME EXCLUDE_FROM_ALL
52-
OBJECTS EXCLUDE_FROM_ALL
53-
ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
54-
PUBLIC_HEADER DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}
55-
)
56-
install(EXPORT "wallycore-target"
57-
DESTINATION ${LIB_CMAKE_INSTALL_DIR}
58-
NAMESPACE wallycore::
59-
FILE "wallycore-targets.cmake"
60-
)
61-
21+
# libsec256k1-zkp
22+
set(SECP256K1_ENABLE_MODULE_ECDH ON)
23+
set(SECP256K1_ENABLE_MODULE_RECOVERY ON)
24+
set(SECP256K1_ENABLE_MODULE_EXTRAKEYS ON)
25+
set(SECP256K1_ENABLE_MODULE_SCHNORRSIG ON)
26+
set(SECP256K1_ENABLE_MODULE_ELLSWIFT OFF)
27+
set(SECP256K1_ENABLE_MODULE_GENERATOR ON)
28+
set(SECP256K1_ENABLE_MODULE_RANGEPROOF ON)
29+
set(SECP256K1_ENABLE_MODULE_SURJECTIONPROOF ON)
30+
set(SECP256K1_ENABLE_MODULE_WHITELIST ON)
31+
set(SECP256K1_ENABLE_MODULE_MUSIG OFF)
32+
set(SECP256K1_ENABLE_MODULE_ECDSA_ADAPTOR OFF)
33+
set(SECP256K1_ENABLE_MODULE_ECDSA_S2C ON)
34+
set(SECP256K1_ENABLE_MODULE_BPPP OFF)
35+
set(SECP256K1_BUILD_BENCHMARK OFF)
36+
set(SECP256K1_BUILD_TESTS OFF)
37+
set(SECP256K1_BUILD_EXHAUSTIVE_TESTS OFF)
38+
set(SECP256K1_BUILD_CTIME_TESTS OFF)
39+
set(SECP256K1_BUILD_EXAMPLES OFF)
40+
set(SECP256K1_INSTALL ${WALLYCORE_INSTALL})
41+
add_subdirectory(./src/secp256k1/)
42+
43+
add_subdirectory(./src)
44+
45+
if(NOT WALLYCORE_ENABLE_TESTS)
46+
return()
47+
endif()
48+
49+
enable_testing()
50+
add_subdirectory(src/ctest)

_cmake/libsecp256k1-pkgconfig.cmake

Lines changed: 0 additions & 21 deletions
This file was deleted.

_cmake/libsecp256k1.cmake

Lines changed: 0 additions & 116 deletions
This file was deleted.

_cmake/wallycore-config.cmake.in

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -11,14 +11,11 @@ if("libsecp256k1" IN_LIST wallycore_FIND_COMPONENTS)
1111
if(TARGET wallycore::libsecp256k1)
1212
message(FATAL_ERROR "wallycore::libsecp256k1 already defined")
1313
endif()
14-
include(FindPkgConfig REQUIRED)
15-
set(PKG_CONFIG_USE_CMAKE_PREFIX_PATH ON)
16-
pkg_check_modules(libsecp256k1 REQUIRED IMPORTED_TARGET libsecp256k1)
17-
add_library(wallycore::libsecp256k1 ALIAS PkgConfig::libsecp256k1)
14+
find_package(libsecp256k1 CONFIG REQUIRED)
15+
add_library(wallycore::libsecp256k1 ALIAS libsecp256k1::libsecp256k1)
1816
set(wallycore_libsecp256k1_FOUND TRUE)
1917
endif()
2018

2119
set(wallycore_COMPONENT_FOUND TRUE)
2220

23-
2421
check_required_components(wallycore)

src/_CMakeLists.txt

Lines changed: 66 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
1-
2-
# libwallycore
3-
add_library(wallycore)
4-
file(GLOB ccan_srcs RELATIVE ${CMAKE_CURRENT_SOURCE_DIR}
1+
file(
2+
GLOB ccan_srcs
3+
RELATIVE ${CMAKE_CURRENT_SOURCE_DIR}
54
"ccan/ccan/base64/*.[ch]"
65
"ccan/ccan/build_assert/*.h"
76
"ccan/ccan/compiler/*.h"
@@ -12,18 +11,72 @@ file(GLOB ccan_srcs RELATIVE ${CMAKE_CURRENT_SOURCE_DIR}
1211
"ccan/ccan/str/hex/*.[ch]"
1312
"ccan/ccan/tap/*.[ch]"
1413
)
15-
file(GLOB wallycore_srcs RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} "*.[ch]")
16-
file(GLOB wallycore_public_headers RELATIVE ${CMAKE_SOURCE_DIR} "${CMAKE_SOURCE_DIR}/include/*.h")
14+
file(
15+
GLOB wallycore_srcs
16+
RELATIVE ${CMAKE_CURRENT_SOURCE_DIR}
17+
"*.[ch]"
18+
)
19+
file(
20+
GLOB wallycore_public_headers
21+
RELATIVE ${CMAKE_CURRENT_SOURCE_DIR}
22+
"${CMAKE_SOURCE_DIR}/include/*.h"
23+
)
1724

25+
# wallycore
26+
add_library(wallycore)
1827
target_sources(wallycore PRIVATE ${ccan_srcs} ${wallycore_srcs})
1928
set_target_properties(wallycore PROPERTIES PUBLIC_HEADER "${wallycore_public_headers}")
2029
target_include_directories(
2130
wallycore
22-
PUBLIC
23-
$<BUILD_INTERFACE:${CMAKE_SOURCE_DIR}>
24-
$<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>
25-
PRIVATE
26-
${CMAKE_BINARY_DIR}
27-
${CMAKE_CURRENT_SOURCE_DIR}
28-
${CMAKE_CURRENT_SOURCE_DIR}/ccan
31+
PUBLIC $<BUILD_INTERFACE:${CMAKE_SOURCE_DIR}> $<BUILD_INTERFACE:${CMAKE_SOURCE_DIR}/include> $<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>
32+
PRIVATE ${CMAKE_BINARY_DIR} ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/ccan
33+
)
34+
target_link_libraries(wallycore PUBLIC secp256k1)
35+
if(WALLYCORE_ENABLE_COVERAGE AND CMAKE_BUILD_TYPE STREQUAL "Debug")
36+
target_compile_options(wallycore PRIVATE --coverage)
37+
target_link_options(wallycore PUBLIC --coverage)
38+
endif()
39+
40+
if (WALLYCORE_BUILD_ELEMENTS)
41+
target_compile_definitions(wallycore PRIVATE BUILD_ELEMENTS)
42+
endif()
43+
44+
if(NOT WALLYCORE_INSTALL)
45+
return()
46+
endif()
47+
48+
# install directives
49+
include(GNUInstallDirs)
50+
include(CMakePackageConfigHelpers)
51+
52+
set(LIB_CMAKE_INSTALL_DIR ${CMAKE_INSTALL_LIBDIR}/cmake/wallycore)
53+
54+
configure_package_config_file(
55+
${CMAKE_SOURCE_DIR}/cmake/wallycore-config.cmake.in "${CMAKE_CURRENT_BINARY_DIR}/wallycore-config.cmake"
56+
INSTALL_DESTINATION ${LIB_CMAKE_INSTALL_DIR}
57+
PATH_VARS LIB_CMAKE_INSTALL_DIR
58+
)
59+
write_basic_package_version_file(
60+
wallycore-config-version.cmake
61+
VERSION ${PROJECT_VERSION}
62+
COMPATIBILITY SameMajorVersion
63+
)
64+
65+
install(FILES "${CMAKE_CURRENT_BINARY_DIR}/wallycore-config.cmake"
66+
"${CMAKE_CURRENT_BINARY_DIR}/wallycore-config-version.cmake" DESTINATION ${LIB_CMAKE_INSTALL_DIR}
67+
)
68+
install(
69+
TARGETS wallycore
70+
EXPORT "wallycore-target"
71+
COMPONENT wallycore
72+
RUNTIME EXCLUDE_FROM_ALL
73+
OBJECTS EXCLUDE_FROM_ALL
74+
ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
75+
PUBLIC_HEADER DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}
76+
)
77+
install(
78+
EXPORT "wallycore-target"
79+
DESTINATION ${LIB_CMAKE_INSTALL_DIR}
80+
NAMESPACE wallycore::
81+
FILE "wallycore-targets.cmake"
2982
)

src/ctest/_CMakeLists.txt

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
2+
3+
add_executable(test_bech32 test_bech32.c)
4+
target_include_directories(test_bech32 PRIVATE ${CMAKE_BINARY_DIR})
5+
target_link_libraries(test_bech32 PRIVATE wallycore)
6+
add_test(test_bech32 test_bech32)
7+
8+
add_executable(test_clear test_clear.c)
9+
target_include_directories(test_clear PRIVATE ${CMAKE_BINARY_DIR})
10+
target_link_libraries(test_clear PRIVATE wallycore pthread)
11+
add_test(test_clear test_clear)
12+
13+
add_executable(test_coinselection test_coinselection.c)
14+
target_include_directories(test_coinselection PRIVATE ${CMAKE_BINARY_DIR})
15+
target_link_libraries(test_coinselection PRIVATE wallycore)
16+
add_test(test_coinselection test_coinselection)
17+
18+
add_executable(test_descriptor test_descriptor.c)
19+
target_include_directories(test_descriptor PRIVATE ${CMAKE_BINARY_DIR})
20+
target_link_libraries(test_descriptor PRIVATE wallycore)
21+
add_test(test_descriptor test_descriptor)
22+
23+
add_executable(test_elements_tx test_elements_tx.c)
24+
target_include_directories(test_elements_tx PRIVATE ${CMAKE_BINARY_DIR})
25+
target_link_libraries(test_elements_tx PRIVATE wallycore)
26+
add_test(test_elements_tx test_elements_tx)
27+
28+
add_executable(test_psbt test_psbt.c)
29+
target_include_directories(test_psbt PRIVATE ${CMAKE_BINARY_DIR})
30+
target_link_libraries(test_psbt PRIVATE wallycore)
31+
add_test(test_psbt test_psbt)
32+
33+
add_executable(test_psbt_limits test_psbt_limits.c)
34+
target_include_directories(test_psbt_limits PRIVATE ${CMAKE_BINARY_DIR})
35+
target_link_libraries(test_psbt_limits PRIVATE wallycore)
36+
add_test(test_psbt_limits test_psbt_limits)

0 commit comments

Comments
 (0)