Skip to content

Commit 85dd633

Browse files
committed
build: add BITCOIN_TARGET option to build from depends
This enables cross-compilation and building from depends.
1 parent 8019ff9 commit 85dd633

File tree

1 file changed

+27
-6
lines changed

1 file changed

+27
-6
lines changed

CMakeLists.txt

Lines changed: 27 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -6,22 +6,43 @@ project(py-bitcoinkernel
66
set(CMAKE_INSTALL_PREFIX "${CMAKE_BINARY_DIR}")
77

88
include(ExternalProject)
9+
include(GNUInstallDirs)
10+
11+
set(BITCOIN_TARGET "" CACHE STRING "Host triple for cross compilation, enables depends build if set")
912

1013
add_library(bitcoinkernel SHARED IMPORTED)
1114
if(DEFINED ENV{BITCOINKERNEL_LIB})
1215
message(STATUS "Using bitcoinkernel library from BITCOINKERNEL_LIB: $ENV{BITCOINKERNEL_LIB}")
1316
set(BITCOINKERNEL_PATH "$ENV{BITCOINKERNEL_LIB}")
1417
else()
15-
message(STATUS "Building bitcoinkernel from source in depend/bitcoin/")
16-
message(STATUS "Using toolchain for host: ${HOST_TUPLE}")
18+
set(BITCOIN_SOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/depend/bitcoin")
19+
message(STATUS "Building bitcoinkernel from source in ${BITCOIN_SOURCE_DIR}")
20+
21+
if(NOT EXISTS "${BITCOIN_SOURCE_DIR}/CMakeLists.txt")
22+
message(FATAL_ERROR "Bitcoin source not found in ${BITCOIN_SOURCE_DIR}. Please ensure the submodule is initialized.")
23+
endif()
1724

18-
if(NOT EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/depend/bitcoin/CMakeLists.txt")
19-
message(FATAL_ERROR "Bitcoin source not found in depend/bitcoin/. Please ensure the submodule is initialized.")
25+
if(BITCOIN_TARGET)
26+
set(DEPENDS_DIR "${BITCOIN_SOURCE_DIR}/depends")
27+
message(STATUS "Building Bitcoin Core dependencies for target: ${BITCOIN_TARGET}")
28+
ExternalProject_Add(bitcoin_depends
29+
SOURCE_DIR "${DEPENDS_DIR}"
30+
CONFIGURE_COMMAND ""
31+
BUILD_COMMAND make -C "${DEPENDS_DIR}"
32+
NO_QT=1 NO_QR=1 NO_ZMQ=1 NO_WALLET=1 NO_USDT=1
33+
NO_LIBEVENT=1 NO_SQLITE=1 NO_BDB=1
34+
HOST=${BITCOIN_TARGET} -j${CMAKE_BUILD_PARALLEL_LEVEL}
35+
BUILD_IN_SOURCE 1
36+
INSTALL_COMMAND ""
37+
)
38+
set(TOOLCHAIN_ARG "--toolchain" "${DEPENDS_DIR}/${BITCOIN_TARGET}/toolchain.cmake")
39+
set(BITCOIN_DEPENDS_ARG DEPENDS bitcoin_depends)
2040
endif()
2141

2242
ExternalProject_Add(bitcoin_core
23-
SOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/depend/bitcoin"
24-
CMAKE_ARGS
43+
${BITCOIN_DEPENDS_ARG}
44+
SOURCE_DIR "${BITCOIN_SOURCE_DIR}"
45+
CONFIGURE_COMMAND ${CMAKE_COMMAND} ${TOOLCHAIN_ARG} <SOURCE_DIR>
2546
-DCMAKE_INSTALL_PREFIX=<INSTALL_DIR>
2647
-DCMAKE_INSTALL_LIBDIR=${CMAKE_INSTALL_LIBDIR}
2748
-DCMAKE_OSX_ARCHITECTURES=${CMAKE_OSX_ARCHITECTURES}

0 commit comments

Comments
 (0)