Merge bitcoin-core/secp256k1#1679: cmake: Use PUBLIC_HEADER target property in installation logic
6f67151ee2cmake: Use `PUBLIC_HEADER` target property (Hennadii Stepanov)c32715b2a0cmake, move-only: Move module option processing to `src/CMakeLists.txt` (Hennadii Stepanov) Pull request description: This PR updates the installation logic to the idiomatic approach. ACKs for top commit: theuni: utACK6f67151ee2Tree-SHA512: b305c6ef15e8334a570823af4482dc097c09a1eec6472098bd2767bc2ad99c3c9e4b1b650087768160e682792ae8da15086bf5397b1d0f5fde4208b489781698
This commit is contained in:
@@ -52,40 +52,6 @@ option(SECP256K1_ENABLE_MODULE_SCHNORRSIG "Enable schnorrsig module." ON)
|
|||||||
option(SECP256K1_ENABLE_MODULE_MUSIG "Enable musig module." ON)
|
option(SECP256K1_ENABLE_MODULE_MUSIG "Enable musig module." ON)
|
||||||
option(SECP256K1_ENABLE_MODULE_ELLSWIFT "Enable ElligatorSwift module." ON)
|
option(SECP256K1_ENABLE_MODULE_ELLSWIFT "Enable ElligatorSwift module." ON)
|
||||||
|
|
||||||
# Processing must be done in a topological sorting of the dependency graph
|
|
||||||
# (dependent module first).
|
|
||||||
if(SECP256K1_ENABLE_MODULE_ELLSWIFT)
|
|
||||||
add_compile_definitions(ENABLE_MODULE_ELLSWIFT=1)
|
|
||||||
endif()
|
|
||||||
|
|
||||||
if(SECP256K1_ENABLE_MODULE_MUSIG)
|
|
||||||
if(DEFINED SECP256K1_ENABLE_MODULE_SCHNORRSIG AND NOT SECP256K1_ENABLE_MODULE_SCHNORRSIG)
|
|
||||||
message(FATAL_ERROR "Module dependency error: You have disabled the schnorrsig module explicitly, but it is required by the musig module.")
|
|
||||||
endif()
|
|
||||||
set(SECP256K1_ENABLE_MODULE_SCHNORRSIG ON)
|
|
||||||
add_compile_definitions(ENABLE_MODULE_MUSIG=1)
|
|
||||||
endif()
|
|
||||||
|
|
||||||
if(SECP256K1_ENABLE_MODULE_SCHNORRSIG)
|
|
||||||
if(DEFINED SECP256K1_ENABLE_MODULE_EXTRAKEYS AND NOT SECP256K1_ENABLE_MODULE_EXTRAKEYS)
|
|
||||||
message(FATAL_ERROR "Module dependency error: You have disabled the extrakeys module explicitly, but it is required by the schnorrsig module.")
|
|
||||||
endif()
|
|
||||||
set(SECP256K1_ENABLE_MODULE_EXTRAKEYS ON)
|
|
||||||
add_compile_definitions(ENABLE_MODULE_SCHNORRSIG=1)
|
|
||||||
endif()
|
|
||||||
|
|
||||||
if(SECP256K1_ENABLE_MODULE_EXTRAKEYS)
|
|
||||||
add_compile_definitions(ENABLE_MODULE_EXTRAKEYS=1)
|
|
||||||
endif()
|
|
||||||
|
|
||||||
if(SECP256K1_ENABLE_MODULE_RECOVERY)
|
|
||||||
add_compile_definitions(ENABLE_MODULE_RECOVERY=1)
|
|
||||||
endif()
|
|
||||||
|
|
||||||
if(SECP256K1_ENABLE_MODULE_ECDH)
|
|
||||||
add_compile_definitions(ENABLE_MODULE_ECDH=1)
|
|
||||||
endif()
|
|
||||||
|
|
||||||
option(SECP256K1_USE_EXTERNAL_DEFAULT_CALLBACKS "Enable external default callback functions." OFF)
|
option(SECP256K1_USE_EXTERNAL_DEFAULT_CALLBACKS "Enable external default callback functions." OFF)
|
||||||
if(SECP256K1_USE_EXTERNAL_DEFAULT_CALLBACKS)
|
if(SECP256K1_USE_EXTERNAL_DEFAULT_CALLBACKS)
|
||||||
add_compile_definitions(USE_EXTERNAL_DEFAULT_CALLBACKS=1)
|
add_compile_definitions(USE_EXTERNAL_DEFAULT_CALLBACKS=1)
|
||||||
|
|||||||
@@ -1,5 +1,49 @@
|
|||||||
# Must be included before CMAKE_INSTALL_INCLUDEDIR is used.
|
add_library(secp256k1)
|
||||||
include(GNUInstallDirs)
|
|
||||||
|
set_property(TARGET secp256k1 PROPERTY PUBLIC_HEADER
|
||||||
|
${PROJECT_SOURCE_DIR}/include/secp256k1.h
|
||||||
|
${PROJECT_SOURCE_DIR}/include/secp256k1_preallocated.h
|
||||||
|
)
|
||||||
|
|
||||||
|
# Processing must be done in a topological sorting of the dependency graph
|
||||||
|
# (dependent module first).
|
||||||
|
if(SECP256K1_ENABLE_MODULE_ELLSWIFT)
|
||||||
|
add_compile_definitions(ENABLE_MODULE_ELLSWIFT=1)
|
||||||
|
set_property(TARGET secp256k1 APPEND PROPERTY PUBLIC_HEADER ${PROJECT_SOURCE_DIR}/include/secp256k1_ellswift.h)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
if(SECP256K1_ENABLE_MODULE_MUSIG)
|
||||||
|
if(DEFINED SECP256K1_ENABLE_MODULE_SCHNORRSIG AND NOT SECP256K1_ENABLE_MODULE_SCHNORRSIG)
|
||||||
|
message(FATAL_ERROR "Module dependency error: You have disabled the schnorrsig module explicitly, but it is required by the musig module.")
|
||||||
|
endif()
|
||||||
|
set(SECP256K1_ENABLE_MODULE_SCHNORRSIG ON)
|
||||||
|
add_compile_definitions(ENABLE_MODULE_MUSIG=1)
|
||||||
|
set_property(TARGET secp256k1 APPEND PROPERTY PUBLIC_HEADER ${PROJECT_SOURCE_DIR}/include/secp256k1_musig.h)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
if(SECP256K1_ENABLE_MODULE_SCHNORRSIG)
|
||||||
|
if(DEFINED SECP256K1_ENABLE_MODULE_EXTRAKEYS AND NOT SECP256K1_ENABLE_MODULE_EXTRAKEYS)
|
||||||
|
message(FATAL_ERROR "Module dependency error: You have disabled the extrakeys module explicitly, but it is required by the schnorrsig module.")
|
||||||
|
endif()
|
||||||
|
set(SECP256K1_ENABLE_MODULE_EXTRAKEYS ON)
|
||||||
|
add_compile_definitions(ENABLE_MODULE_SCHNORRSIG=1)
|
||||||
|
set_property(TARGET secp256k1 APPEND PROPERTY PUBLIC_HEADER ${PROJECT_SOURCE_DIR}/include/secp256k1_schnorrsig.h)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
if(SECP256K1_ENABLE_MODULE_EXTRAKEYS)
|
||||||
|
add_compile_definitions(ENABLE_MODULE_EXTRAKEYS=1)
|
||||||
|
set_property(TARGET secp256k1 APPEND PROPERTY PUBLIC_HEADER ${PROJECT_SOURCE_DIR}/include/secp256k1_extrakeys.h)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
if(SECP256K1_ENABLE_MODULE_RECOVERY)
|
||||||
|
add_compile_definitions(ENABLE_MODULE_RECOVERY=1)
|
||||||
|
set_property(TARGET secp256k1 APPEND PROPERTY PUBLIC_HEADER ${PROJECT_SOURCE_DIR}/include/secp256k1_recovery.h)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
if(SECP256K1_ENABLE_MODULE_ECDH)
|
||||||
|
add_compile_definitions(ENABLE_MODULE_ECDH=1)
|
||||||
|
set_property(TARGET secp256k1 APPEND PROPERTY PUBLIC_HEADER ${PROJECT_SOURCE_DIR}/include/secp256k1_ecdh.h)
|
||||||
|
endif()
|
||||||
|
|
||||||
add_library(secp256k1_precomputed OBJECT EXCLUDE_FROM_ALL
|
add_library(secp256k1_precomputed OBJECT EXCLUDE_FROM_ALL
|
||||||
precomputed_ecmult.c
|
precomputed_ecmult.c
|
||||||
@@ -8,7 +52,7 @@ add_library(secp256k1_precomputed OBJECT EXCLUDE_FROM_ALL
|
|||||||
|
|
||||||
# Add objects explicitly rather than linking to the object libs to keep them
|
# Add objects explicitly rather than linking to the object libs to keep them
|
||||||
# from being exported.
|
# from being exported.
|
||||||
add_library(secp256k1 secp256k1.c $<TARGET_OBJECTS:secp256k1_precomputed>)
|
target_sources(secp256k1 PRIVATE secp256k1.c $<TARGET_OBJECTS:secp256k1_precomputed>)
|
||||||
|
|
||||||
add_library(secp256k1_asm INTERFACE)
|
add_library(secp256k1_asm INTERFACE)
|
||||||
if(SECP256K1_ASM STREQUAL "arm32")
|
if(SECP256K1_ASM STREQUAL "arm32")
|
||||||
@@ -34,7 +78,6 @@ set_target_properties(secp256k1_precomputed PROPERTIES POSITION_INDEPENDENT_CODE
|
|||||||
target_include_directories(secp256k1 INTERFACE
|
target_include_directories(secp256k1 INTERFACE
|
||||||
# Add the include path for parent projects so that they don't have to manually add it.
|
# Add the include path for parent projects so that they don't have to manually add it.
|
||||||
$<BUILD_INTERFACE:$<$<NOT:$<BOOL:${PROJECT_IS_TOP_LEVEL}>>:${PROJECT_SOURCE_DIR}/include>>
|
$<BUILD_INTERFACE:$<$<NOT:$<BOOL:${PROJECT_IS_TOP_LEVEL}>>:${PROJECT_SOURCE_DIR}/include>>
|
||||||
$<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>
|
|
||||||
)
|
)
|
||||||
|
|
||||||
# This emulates Libtool to make sure Libtool and CMake agree on the ABI version,
|
# This emulates Libtool to make sure Libtool and CMake agree on the ABI version,
|
||||||
@@ -102,36 +145,16 @@ if(SECP256K1_BUILD_CTIME_TESTS)
|
|||||||
endif()
|
endif()
|
||||||
|
|
||||||
if(SECP256K1_INSTALL)
|
if(SECP256K1_INSTALL)
|
||||||
|
include(GNUInstallDirs)
|
||||||
|
target_include_directories(secp256k1 INTERFACE
|
||||||
|
$<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>
|
||||||
|
)
|
||||||
install(TARGETS secp256k1
|
install(TARGETS secp256k1
|
||||||
EXPORT ${PROJECT_NAME}-targets
|
EXPORT ${PROJECT_NAME}-targets
|
||||||
RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
|
RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
|
||||||
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
|
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
|
||||||
ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
|
ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
|
||||||
)
|
PUBLIC_HEADER DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}
|
||||||
set(${PROJECT_NAME}_headers
|
|
||||||
"${PROJECT_SOURCE_DIR}/include/secp256k1.h"
|
|
||||||
"${PROJECT_SOURCE_DIR}/include/secp256k1_preallocated.h"
|
|
||||||
)
|
|
||||||
if(SECP256K1_ENABLE_MODULE_ECDH)
|
|
||||||
list(APPEND ${PROJECT_NAME}_headers "${PROJECT_SOURCE_DIR}/include/secp256k1_ecdh.h")
|
|
||||||
endif()
|
|
||||||
if(SECP256K1_ENABLE_MODULE_RECOVERY)
|
|
||||||
list(APPEND ${PROJECT_NAME}_headers "${PROJECT_SOURCE_DIR}/include/secp256k1_recovery.h")
|
|
||||||
endif()
|
|
||||||
if(SECP256K1_ENABLE_MODULE_EXTRAKEYS)
|
|
||||||
list(APPEND ${PROJECT_NAME}_headers "${PROJECT_SOURCE_DIR}/include/secp256k1_extrakeys.h")
|
|
||||||
endif()
|
|
||||||
if(SECP256K1_ENABLE_MODULE_SCHNORRSIG)
|
|
||||||
list(APPEND ${PROJECT_NAME}_headers "${PROJECT_SOURCE_DIR}/include/secp256k1_schnorrsig.h")
|
|
||||||
endif()
|
|
||||||
if(SECP256K1_ENABLE_MODULE_MUSIG)
|
|
||||||
list(APPEND ${PROJECT_NAME}_headers "${PROJECT_SOURCE_DIR}/include/secp256k1_musig.h")
|
|
||||||
endif()
|
|
||||||
if(SECP256K1_ENABLE_MODULE_ELLSWIFT)
|
|
||||||
list(APPEND ${PROJECT_NAME}_headers "${PROJECT_SOURCE_DIR}/include/secp256k1_ellswift.h")
|
|
||||||
endif()
|
|
||||||
install(FILES ${${PROJECT_NAME}_headers}
|
|
||||||
DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}
|
|
||||||
)
|
)
|
||||||
|
|
||||||
install(EXPORT ${PROJECT_NAME}-targets
|
install(EXPORT ${PROJECT_NAME}-targets
|
||||||
|
|||||||
Reference in New Issue
Block a user