Skip to content

Commit 0d01c22

Browse files
committed
build: Generate toolchain.cmake in depends
1 parent 91a7992 commit 0d01c22

File tree

3 files changed

+224
-2
lines changed

3 files changed

+224
-2
lines changed

depends/Makefile

Lines changed: 49 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -184,6 +184,7 @@ meta_depends = Makefile config.guess config.sub funcs.mk builders/default.mk hos
184184
include funcs.mk
185185

186186
final_build_id_long+=$(shell $(build_SHA256SUM) config.site.in)
187+
final_build_id_long+=$(shell $(build_SHA256SUM) toolchain.cmake.in)
187188
final_build_id+=$(shell echo -n "$(final_build_id_long)" | $(build_SHA256SUM) | cut -c-$(HASH_LENGTH))
188189
$(host_prefix)/.stamp_$(final_build_id): $(native_packages) $(packages)
189190
rm -rf $(@D)
@@ -249,6 +250,52 @@ $(host_prefix)/share/config.site : config.site.in $(host_prefix)/.stamp_$(final_
249250
$< > $@
250251
touch $@
251252

253+
ifeq ($(host),$(build))
254+
crosscompiling=FALSE
255+
else
256+
crosscompiling=TRUE
257+
endif
258+
259+
$(host_prefix)/toolchain.cmake : toolchain.cmake.in $(host_prefix)/.stamp_$(final_build_id)
260+
@mkdir -p $(@D)
261+
sed -e 's|@depends_crosscompiling@|$(crosscompiling)|' \
262+
-e 's|@host_system_name@|$($(host_os)_cmake_system_name)|' \
263+
-e 's|@host_system_version@|$($(host_os)_cmake_system_version)|' \
264+
-e 's|@host_arch@|$(host_arch)|' \
265+
-e 's|@CC@|$(host_CC)|' \
266+
-e 's|@CXX@|$(host_CXX)|' \
267+
-e 's|@OSX_SDK@|$(OSX_SDK)|' \
268+
-e 's|@AR@|$(host_AR)|' \
269+
-e 's|@RANLIB@|$(host_RANLIB)|' \
270+
-e 's|@STRIP@|$(host_STRIP)|' \
271+
-e 's|@OBJCOPY@|$(host_OBJCOPY)|' \
272+
-e 's|@OBJDUMP@|$(host_OBJDUMP)|' \
273+
-e 's|@depends_prefix@|$(host_prefix)|' \
274+
-e 's|@CFLAGS@|$(strip $(host_CFLAGS))|' \
275+
-e 's|@CFLAGS_RELEASE@|$(strip $(host_release_CFLAGS))|' \
276+
-e 's|@CFLAGS_DEBUG@|$(strip $(host_debug_CFLAGS))|' \
277+
-e 's|@CXXFLAGS@|$(strip $(host_CXXFLAGS))|' \
278+
-e 's|@CXXFLAGS_RELEASE@|$(strip $(host_release_CXXFLAGS))|' \
279+
-e 's|@CXXFLAGS_DEBUG@|$(strip $(host_debug_CXXFLAGS))|' \
280+
-e 's|@CPPFLAGS@|$(strip $(host_CPPFLAGS))|' \
281+
-e 's|@CPPFLAGS_RELEASE@|$(strip $(host_release_CPPFLAGS))|' \
282+
-e 's|@CPPFLAGS_DEBUG@|$(strip $(host_debug_CPPFLAGS))|' \
283+
-e 's|@LDFLAGS@|$(strip $(host_LDFLAGS))|' \
284+
-e 's|@LDFLAGS_RELEASE@|$(strip $(host_release_LDFLAGS))|' \
285+
-e 's|@LDFLAGS_DEBUG@|$(strip $(host_debug_LDFLAGS))|' \
286+
-e 's|@qt_packages@|$(qt_packages_)|' \
287+
-e 's|@qrencode_packages@|$(qrencode_packages_)|' \
288+
-e 's|@zmq_packages@|$(zmq_packages_)|' \
289+
-e 's|@wallet_packages@|$(wallet_packages_)|' \
290+
-e 's|@bdb_packages@|$(bdb_packages_)|' \
291+
-e 's|@sqlite_packages@|$(sqlite_packages_)|' \
292+
-e 's|@upnp_packages@|$(upnp_packages_)|' \
293+
-e 's|@natpmp_packages@|$(natpmp_packages_)|' \
294+
-e 's|@usdt_packages@|$(usdt_packages_)|' \
295+
-e 's|@no_harden@|$(NO_HARDEN)|' \
296+
-e 's|@multiprocess@|$(MULTIPROCESS)|' \
297+
$< > $@
298+
touch $@
252299

253300
define check_or_remove_cached
254301
mkdir -p $(BASE_CACHE)/$(host)/$(package) && cd $(BASE_CACHE)/$(host)/$(package); \
@@ -270,6 +317,7 @@ check-sources:
270317
@$(foreach package,$(all_packages),$(call check_or_remove_sources,$(package));)
271318

272319
$(host_prefix)/share/config.site: check-packages
320+
$(host_prefix)/toolchain.cmake: check-packages
273321

274322
check-packages: check-sources
275323

@@ -279,7 +327,7 @@ clean-all: clean
279327
clean:
280328
@rm -rf $(WORK_PATH) $(BASE_CACHE) $(BUILD) *.log
281329

282-
install: check-packages $(host_prefix)/share/config.site
330+
install: check-packages $(host_prefix)/share/config.site $(host_prefix)/toolchain.cmake
283331

284332

285333
download-one: check-sources $(all_sources)

depends/funcs.mk

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -171,7 +171,7 @@ $(1)_autoconf += LDFLAGS="$$($(1)_ldflags)"
171171
endif
172172

173173
# We hardcode the library install path to "lib" to match the PKG_CONFIG_PATH
174-
# setting in depends/config.site.in, which also hardcodes "lib".
174+
# setting in depends/toolchain.cmake.in, which also hardcodes "lib".
175175
# Without this setting, CMake by default would use the OS library
176176
# directory, which might be "lib64" or something else, not "lib", on multiarch systems.
177177
$(1)_cmake=env CC="$$($(1)_cc)" \

depends/toolchain.cmake.in

Lines changed: 174 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,174 @@
1+
# Copyright (c) 2023-present The Bitcoin Core developers
2+
# Distributed under the MIT software license, see the accompanying
3+
# file COPYING or https://opensource.org/license/mit/.
4+
5+
# This file is expected to be highly volatile and may still change substantially.
6+
7+
# If CMAKE_SYSTEM_NAME is set within a toolchain file, CMake will also
8+
# set CMAKE_CROSSCOMPILING to TRUE, even if CMAKE_SYSTEM_NAME matches
9+
# CMAKE_HOST_SYSTEM_NAME. To avoid potential misconfiguration of CMake,
10+
# it is best not to touch CMAKE_SYSTEM_NAME unless cross-compiling is
11+
# intended.
12+
if(@depends_crosscompiling@)
13+
set(CMAKE_SYSTEM_NAME @host_system_name@)
14+
set(CMAKE_SYSTEM_VERSION @host_system_version@)
15+
set(CMAKE_SYSTEM_PROCESSOR @host_arch@)
16+
endif()
17+
18+
if(NOT DEFINED CMAKE_C_FLAGS_INIT)
19+
set(CMAKE_C_FLAGS_INIT "@CFLAGS@")
20+
endif()
21+
if(NOT DEFINED CMAKE_C_FLAGS_RELWITHDEBINFO_INIT)
22+
set(CMAKE_C_FLAGS_RELWITHDEBINFO_INIT "@CFLAGS_RELEASE@")
23+
endif()
24+
if(NOT DEFINED CMAKE_C_FLAGS_DEBUG_INIT)
25+
set(CMAKE_C_FLAGS_DEBUG_INIT "@CFLAGS_DEBUG@")
26+
endif()
27+
28+
if(NOT DEFINED CMAKE_C_COMPILER)
29+
set(CMAKE_C_COMPILER @CC@)
30+
endif()
31+
32+
if(NOT DEFINED CMAKE_CXX_FLAGS_INIT)
33+
set(CMAKE_CXX_FLAGS_INIT "@CXXFLAGS@")
34+
set(CMAKE_OBJCXX_FLAGS_INIT "@CXXFLAGS@")
35+
endif()
36+
if(NOT DEFINED CMAKE_CXX_FLAGS_RELWITHDEBINFO_INIT)
37+
set(CMAKE_CXX_FLAGS_RELWITHDEBINFO_INIT "@CXXFLAGS_RELEASE@")
38+
set(CMAKE_OBJCXX_FLAGS_RELWITHDEBINFO_INIT "@CXXFLAGS_RELEASE@")
39+
endif()
40+
if(NOT DEFINED CMAKE_CXX_FLAGS_DEBUG_INIT)
41+
set(CMAKE_CXX_FLAGS_DEBUG_INIT "@CXXFLAGS_DEBUG@")
42+
set(CMAKE_OBJCXX_FLAGS_DEBUG_INIT "@CXXFLAGS_DEBUG@")
43+
endif()
44+
45+
if(NOT DEFINED CMAKE_CXX_COMPILER)
46+
set(CMAKE_CXX_COMPILER @CXX@)
47+
set(CMAKE_OBJCXX_COMPILER ${CMAKE_CXX_COMPILER})
48+
endif()
49+
50+
# The DEPENDS_COMPILE_DEFINITIONS* variables are to be treated as lists.
51+
set(DEPENDS_COMPILE_DEFINITIONS @CPPFLAGS@)
52+
set(DEPENDS_COMPILE_DEFINITIONS_RELWITHDEBINFO @CPPFLAGS_RELEASE@)
53+
set(DEPENDS_COMPILE_DEFINITIONS_DEBUG @CPPFLAGS_DEBUG@)
54+
55+
if(NOT DEFINED CMAKE_EXE_LINKER_FLAGS_INIT)
56+
set(CMAKE_EXE_LINKER_FLAGS_INIT "@LDFLAGS@")
57+
endif()
58+
if(NOT DEFINED CMAKE_EXE_LINKER_FLAGS_RELWITHDEBINFO_INIT)
59+
set(CMAKE_EXE_LINKER_FLAGS_RELWITHDEBINFO_INIT "@LDFLAGS_RELEASE@")
60+
endif()
61+
if(NOT DEFINED CMAKE_EXE_LINKER_FLAGS_DEBUG_INIT)
62+
set(CMAKE_EXE_LINKER_FLAGS_DEBUG_INIT "@LDFLAGS_DEBUG@")
63+
endif()
64+
65+
set(CMAKE_AR "@AR@")
66+
set(CMAKE_RANLIB "@RANLIB@")
67+
set(CMAKE_STRIP "@STRIP@")
68+
set(CMAKE_OBJCOPY "@OBJCOPY@")
69+
set(CMAKE_OBJDUMP "@OBJDUMP@")
70+
71+
# Using our own built dependencies should not be
72+
# affected by a potentially random environment.
73+
set(CMAKE_FIND_USE_CMAKE_ENVIRONMENT_PATH OFF)
74+
75+
set(CMAKE_FIND_ROOT_PATH "@depends_prefix@")
76+
set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
77+
set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
78+
set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
79+
set(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE ONLY)
80+
set(QT_TRANSLATIONS_DIR "@depends_prefix@/translations")
81+
82+
if(CMAKE_SYSTEM_NAME STREQUAL "Darwin" AND NOT CMAKE_HOST_APPLE)
83+
# The find_package(Qt ...) function internally uses find_library()
84+
# calls for all dependencies to ensure their availability.
85+
# In turn, the find_library() inspects the well-known locations
86+
# on the file system; therefore, a hint is required.
87+
set(CMAKE_FRAMEWORK_PATH "@OSX_SDK@/System/Library/Frameworks")
88+
endif()
89+
90+
91+
# Customize pkg-config behaviour.
92+
cmake_path(APPEND CMAKE_FIND_ROOT_PATH "lib" "pkgconfig" OUTPUT_VARIABLE pkg_config_path)
93+
set(ENV{PKG_CONFIG_PATH} ${pkg_config_path})
94+
set(ENV{PKG_CONFIG_LIBDIR} ${pkg_config_path})
95+
unset(pkg_config_path)
96+
set(PKG_CONFIG_ARGN --static)
97+
98+
99+
# Set configuration options for the main build system.
100+
set(qt_packages @qt_packages@)
101+
if("${qt_packages}" STREQUAL "")
102+
set(BUILD_GUI OFF CACHE BOOL "")
103+
else()
104+
set(BUILD_GUI ON CACHE BOOL "")
105+
endif()
106+
107+
set(qrencode_packages @qrencode_packages@)
108+
if("${qrencode_packages}" STREQUAL "")
109+
set(WITH_QRENCODE OFF CACHE BOOL "")
110+
else()
111+
set(WITH_QRENCODE ON CACHE BOOL "")
112+
endif()
113+
114+
set(zmq_packages @zmq_packages@)
115+
if("${zmq_packages}" STREQUAL "")
116+
set(WITH_ZMQ OFF CACHE BOOL "")
117+
else()
118+
set(WITH_ZMQ ON CACHE BOOL "")
119+
endif()
120+
121+
set(wallet_packages @wallet_packages@)
122+
if("${wallet_packages}" STREQUAL "")
123+
set(ENABLE_WALLET OFF CACHE BOOL "")
124+
else()
125+
set(ENABLE_WALLET ON CACHE BOOL "")
126+
endif()
127+
128+
set(bdb_packages @bdb_packages@)
129+
if("${wallet_packages}" STREQUAL "" OR "${bdb_packages}" STREQUAL "")
130+
set(WITH_BDB OFF CACHE BOOL "")
131+
else()
132+
set(WITH_BDB ON CACHE BOOL "")
133+
endif()
134+
135+
set(sqlite_packages @sqlite_packages@)
136+
if("${wallet_packages}" STREQUAL "" OR "${sqlite_packages}" STREQUAL "")
137+
set(WITH_SQLITE OFF CACHE BOOL "")
138+
else()
139+
set(WITH_SQLITE ON CACHE BOOL "")
140+
endif()
141+
142+
set(upnp_packages @upnp_packages@)
143+
if("${upnp_packages}" STREQUAL "")
144+
set(WITH_MINIUPNPC OFF CACHE BOOL "")
145+
else()
146+
set(WITH_MINIUPNPC ON CACHE BOOL "")
147+
endif()
148+
149+
set(natpmp_packages @natpmp_packages@)
150+
if("${natpmp_packages}" STREQUAL "")
151+
set(WITH_NATPMP OFF CACHE BOOL "")
152+
else()
153+
set(WITH_NATPMP ON CACHE BOOL "")
154+
endif()
155+
156+
set(usdt_packages @usdt_packages@)
157+
if("${usdt_packages}" STREQUAL "")
158+
set(WITH_USDT OFF CACHE BOOL "")
159+
else()
160+
set(WITH_USDT ON CACHE BOOL "")
161+
endif()
162+
163+
if("@no_harden@")
164+
set(ENABLE_HARDENING OFF CACHE BOOL "")
165+
else()
166+
set(ENABLE_HARDENING ON CACHE BOOL "")
167+
endif()
168+
169+
if("@multiprocess@" STREQUAL "1")
170+
set(WITH_MULTIPROCESS ON CACHE BOOL "")
171+
set(LibmultiprocessNative_DIR "${CMAKE_FIND_ROOT_PATH}/native/lib/cmake/Libmultiprocess" CACHE PATH "")
172+
else()
173+
set(WITH_MULTIPROCESS OFF CACHE BOOL "")
174+
endif()

0 commit comments

Comments
 (0)