mirror of
https://github.com/bitcoin/bitcoin.git
synced 2025-04-12 06:10:37 +02:00
Merge bitcoin/bitcoin#31884: cmake: Make implicit libbitcoinkernel
dependencies explicit
3b42e05aa9e38ba00d52b2338375b4caf032f041 cmake: Make implicit `libbitcoinkernel` dependencies explicit (Hennadii Stepanov) 3fd64efb437e10194ffd0e6d9b6b4664bcf1a0de cmake: Avoid using `OBJECT` libraries (Hennadii Stepanov) Pull request description: This PR fixes two regressions introduced in https://github.com/bitcoin/bitcoin/pull/30911. For example, on the master branch @ 28dec6c5f8bd35ef4e6cb8d7aa3f21b6879acf98: - first regression: ``` $ cmake -B build -G "Ninja" -DBUILD_UTIL_CHAINSTATE=ON -DBUILD_SHARED_LIBS=OFF -DCMAKE_INSTALL_PREFIX=/home/hebasto/INSTALL $ cmake --build build -j $(nproc) -t libbitcoinkernel $ cmake --install build --component libbitcoinkernel - Install configuration: "RelWithDebInfo" CMake Error at build/src/kernel/cmake_install.cmake:46 (file): file INSTALL cannot find "/home/hebasto/dev/bitcoin/build/src/crypto/libbitcoin_crypto.a": No such file or directory. Call Stack (most recent call first): build/src/cmake_install.cmake:172 (include) build/cmake_install.cmake:57 (include) ``` - second regression: ``` $ cmake -B build -G "Unix Makefiles" -DBUILD_UTIL_CHAINSTATE=ON -DBUILD_SHARED_LIBS=OFF -DCMAKE_INSTALL_PREFIX=/home/hebasto/INSTALL $ cmake --build build -j $(nproc) -t libbitcoinkernel ... gmake[3]: *** No rule to make target 'src/CMakeFiles/bitcoin_clientversion.dir/clientversion.cpp.o', needed by 'src/kernel/libbitcoinkernel.a'. Stop. gmake[2]: *** [CMakeFiles/Makefile2:1360: src/kernel/CMakeFiles/bitcoinkernel.dir/all] Error 2 gmake[1]: *** [CMakeFiles/Makefile2:1367: src/kernel/CMakeFiles/bitcoinkernel.dir/rule] Error 2 gmake: *** [Makefile:647: bitcoinkernel] Error 2 ``` With this PR: ``` $ cmake -B build -G "Ninja" -DBUILD_UTIL_CHAINSTATE=ON -DBUILD_SHARED_LIBS=OFF -DCMAKE_INSTALL_PREFIX=/home/hebasto/INSTALL $ cmake --build build -j $(nproc) -t libbitcoinkernel $ cmake --install build --component libbitcoinkernel ``` and ``` $ cmake -B build -G "Unix Makefiles" -DBUILD_UTIL_CHAINSTATE=ON -DBUILD_SHARED_LIBS=OFF -DCMAKE_INSTALL_PREFIX=/home/hebasto/INSTALL $ cmake --build build -j $(nproc) -t libbitcoinkernel $ cmake --install build --component libbitcoinkernel ``` --- **A note for reviewers:** An alternative approach would be to disable the `OPTIMIZE_DEPENDENCIES` property for the `bitcoinkernel` target. However, I contend that this PR is preferable because (1) it preserves parallel builds for the `libbitcoinkernel` target, and (2) the resulting code has one less workaround for a CMake bug. ACKs for top commit: TheCharlatan: ACK 3b42e05aa9e38ba00d52b2338375b4caf032f041 theuni: utACK 3b42e05aa9e38ba00d52b2338375b4caf032f041 Tree-SHA512: 73e9da845688a02e5d61770b7cfd5e1a17440182eb524c7329a47df8f1daa6fe0f9cbde5274832bf43f52e17de86473881dc876dee4276c9c06b173b1b78b7a2
This commit is contained in:
commit
eb51963d87
@ -13,7 +13,7 @@ add_custom_target(generate_build_info
|
||||
COMMENT "Generating bitcoin-build-info.h"
|
||||
VERBATIM
|
||||
)
|
||||
add_library(bitcoin_clientversion OBJECT EXCLUDE_FROM_ALL
|
||||
add_library(bitcoin_clientversion STATIC EXCLUDE_FROM_ALL
|
||||
clientversion.cpp
|
||||
)
|
||||
target_link_libraries(bitcoin_clientversion
|
||||
|
@ -102,6 +102,10 @@ set_target_properties(bitcoinkernel PROPERTIES
|
||||
CXX_VISIBILITY_PRESET default
|
||||
)
|
||||
|
||||
# Add a convenience libbitcoinkernel target as a synonym for bitcoinkernel.
|
||||
add_custom_target(libbitcoinkernel)
|
||||
add_dependencies(libbitcoinkernel bitcoinkernel)
|
||||
|
||||
# When building the static library, install all static libraries the
|
||||
# bitcoinkernel depends on.
|
||||
if(NOT BUILD_SHARED_LIBS)
|
||||
@ -110,6 +114,7 @@ if(NOT BUILD_SHARED_LIBS)
|
||||
get_target_property(linked_libraries ${target} LINK_LIBRARIES)
|
||||
foreach(dep ${linked_libraries})
|
||||
if(TARGET ${dep})
|
||||
add_dependencies(libbitcoinkernel ${dep})
|
||||
get_target_property(dep_type ${dep} TYPE)
|
||||
if(dep_type STREQUAL "STATIC_LIBRARY")
|
||||
list(APPEND ${libs_out} ${dep})
|
||||
@ -132,10 +137,6 @@ endif()
|
||||
configure_file(${PROJECT_SOURCE_DIR}/libbitcoinkernel.pc.in ${PROJECT_BINARY_DIR}/libbitcoinkernel.pc @ONLY)
|
||||
install(FILES ${PROJECT_BINARY_DIR}/libbitcoinkernel.pc DESTINATION "${CMAKE_INSTALL_LIBDIR}/pkgconfig" COMPONENT libbitcoinkernel)
|
||||
|
||||
# Add a convenience libbitcoinkernel target as a synonym for bitcoinkernel.
|
||||
add_custom_target(libbitcoinkernel)
|
||||
add_dependencies(libbitcoinkernel bitcoinkernel)
|
||||
|
||||
install(TARGETS bitcoinkernel
|
||||
RUNTIME
|
||||
DESTINATION ${CMAKE_INSTALL_BINDIR}
|
||||
|
@ -36,9 +36,6 @@ add_library(bitcoin_util STATIC EXCLUDE_FROM_ALL
|
||||
../sync.cpp
|
||||
)
|
||||
|
||||
# Workaround for https://gitlab.kitware.com/cmake/cmake/-/issues/24058
|
||||
set_target_properties(bitcoin_util PROPERTIES OPTIMIZE_DEPENDENCIES OFF)
|
||||
|
||||
target_link_libraries(bitcoin_util
|
||||
PRIVATE
|
||||
core_interface
|
||||
|
Loading…
x
Reference in New Issue
Block a user