Skip to content

Commit 8019ff9

Browse files
committed
build: make depend/bitcoin/ an ExternalProject
This isolates the build system, and allows a future commit to let the bitcoin_core build system use a different toolchain (using depends) from the py-bitcoinkernel toolchain.
1 parent 3b29781 commit 8019ff9

File tree

1 file changed

+49
-38
lines changed

1 file changed

+49
-38
lines changed

CMakeLists.txt

Lines changed: 49 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -5,18 +5,12 @@ project(py-bitcoinkernel
55
# Set install prefix to be relative to the build directory
66
set(CMAKE_INSTALL_PREFIX "${CMAKE_BINARY_DIR}")
77

8+
include(ExternalProject)
9+
10+
add_library(bitcoinkernel SHARED IMPORTED)
811
if(DEFINED ENV{BITCOINKERNEL_LIB})
912
message(STATUS "Using bitcoinkernel library from BITCOINKERNEL_LIB: $ENV{BITCOINKERNEL_LIB}")
10-
add_library(bitcoinkernel SHARED IMPORTED)
11-
set_target_properties(bitcoinkernel PROPERTIES
12-
IMPORTED_LOCATION "$ENV{BITCOINKERNEL_LIB}"
13-
)
14-
15-
# Install the imported library to _libs
16-
install(FILES "$ENV{BITCOINKERNEL_LIB}"
17-
DESTINATION "_libs"
18-
COMPONENT Kernel
19-
)
13+
set(BITCOINKERNEL_PATH "$ENV{BITCOINKERNEL_LIB}")
2014
else()
2115
message(STATUS "Building bitcoinkernel from source in depend/bitcoin/")
2216
message(STATUS "Using toolchain for host: ${HOST_TUPLE}")
@@ -25,34 +19,51 @@ else()
2519
message(FATAL_ERROR "Bitcoin source not found in depend/bitcoin/. Please ensure the submodule is initialized.")
2620
endif()
2721

28-
# Configure Bitcoin build options
29-
set(BUILD_SHARED_LIBS ON)
30-
set(BUILD_KERNEL_LIB ON)
31-
set(BUILD_BENCH OFF)
32-
set(BUILD_CLI OFF)
33-
set(BUILD_DAEMON OFF)
34-
set(BUILD_FOR_FUZZING OFF)
35-
set(BUILD_FUZZ_BINARY OFF)
36-
set(BUILD_GUI OFF)
37-
set(BUILD_KERNEL_TEST OFF)
38-
set(BUILD_TESTS OFF)
39-
set(BUILD_TX OFF)
40-
set(BUILD_UTIL OFF)
41-
set(BUILD_UTIL_CHAINSTATE OFF)
42-
set(BUILD_WALLET_TOOL OFF)
43-
set(ENABLE_WALLET OFF)
44-
set(WITH_SQLITE OFF)
45-
46-
add_subdirectory(depend/bitcoin EXCLUDE_FROM_ALL)
47-
48-
# Make bitcoinkernel part of the default build
49-
set_target_properties(bitcoinkernel PROPERTIES
50-
EXCLUDE_FROM_ALL FALSE
22+
ExternalProject_Add(bitcoin_core
23+
SOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/depend/bitcoin"
24+
CMAKE_ARGS
25+
-DCMAKE_INSTALL_PREFIX=<INSTALL_DIR>
26+
-DCMAKE_INSTALL_LIBDIR=${CMAKE_INSTALL_LIBDIR}
27+
-DCMAKE_OSX_ARCHITECTURES=${CMAKE_OSX_ARCHITECTURES}
28+
-DCMAKE_OSX_DEPLOYMENT_TARGET=${CMAKE_OSX_DEPLOYMENT_TARGET}
29+
-DBUILD_SHARED_LIBS=ON
30+
-DBUILD_KERNEL_LIB=ON
31+
-DBUILD_BENCH=OFF
32+
-DBUILD_CLI=OFF
33+
-DBUILD_DAEMON=OFF
34+
-DBUILD_FOR_FUZZING=OFF
35+
-DBUILD_FUZZ_BINARY=OFF
36+
-DBUILD_GUI=OFF
37+
-DBUILD_KERNEL_TEST=OFF
38+
-DBUILD_TESTS=OFF
39+
-DBUILD_TX=OFF
40+
-DBUILD_UTIL=OFF
41+
-DBUILD_UTIL_CHAINSTATE=OFF
42+
-DBUILD_WALLET_TOOL=OFF
43+
-DENABLE_WALLET=OFF
44+
-DWITH_SQLITE=OFF
45+
BUILD_COMMAND ${CMAKE_COMMAND} --build <BINARY_DIR> --target bitcoinkernel
46+
INSTALL_COMMAND
47+
${CMAKE_COMMAND} --install <BINARY_DIR> --strip --component Kernel
5148
)
5249

53-
install(TARGETS bitcoinkernel
54-
COMPONENT Kernel
55-
LIBRARY DESTINATION "_libs"
56-
RUNTIME DESTINATION "_libs"
57-
)
50+
# Create imported target for bitcoinkernel
51+
add_dependencies(bitcoinkernel bitcoin_core)
52+
53+
ExternalProject_Get_Property(bitcoin_core INSTALL_DIR)
54+
set(RELATIVE_INSTALL_PATH "${CMAKE_INSTALL_LIBDIR}/libbitcoinkernel${CMAKE_SHARED_LIBRARY_SUFFIX}")
55+
if(BITCOIN_TARGET MATCHES ".*mingw.*" OR BITCOIN_TARGET MATCHES ".*windows.*")
56+
set(RELATIVE_INSTALL_PATH "bin/libbitcoinkernel.dll")
57+
endif()
58+
set(BITCOINKERNEL_PATH "${INSTALL_DIR}/${RELATIVE_INSTALL_PATH}")
59+
5860
endif()
61+
62+
set_target_properties(bitcoinkernel PROPERTIES
63+
IMPORTED_LOCATION "${BITCOINKERNEL_PATH}"
64+
)
65+
66+
install(FILES "${BITCOINKERNEL_PATH}"
67+
DESTINATION "_libs"
68+
COMPONENT Kernel
69+
)

0 commit comments

Comments
 (0)