/ depends / toolchain.cmake.in
toolchain.cmake.in
  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  
 17    set(CMAKE_C_COMPILER_TARGET @host@)
 18    set(CMAKE_CXX_COMPILER_TARGET @host@)
 19    set(CMAKE_OBJCXX_COMPILER_TARGET @host@)
 20  endif()
 21  
 22  if(NOT DEFINED CMAKE_C_FLAGS_INIT)
 23    set(CMAKE_C_FLAGS_INIT "@CFLAGS@")
 24  endif()
 25  if(NOT DEFINED CMAKE_C_FLAGS_RELWITHDEBINFO_INIT)
 26    set(CMAKE_C_FLAGS_RELWITHDEBINFO_INIT "@CFLAGS_RELEASE@")
 27  endif()
 28  if(NOT DEFINED CMAKE_C_FLAGS_DEBUG_INIT)
 29    set(CMAKE_C_FLAGS_DEBUG_INIT "@CFLAGS_DEBUG@")
 30  endif()
 31  
 32  if(NOT DEFINED CMAKE_C_COMPILER)
 33    set(CMAKE_C_COMPILER @CC@)
 34  endif()
 35  
 36  if(NOT DEFINED CMAKE_CXX_FLAGS_INIT)
 37    set(CMAKE_CXX_FLAGS_INIT "@CXXFLAGS@")
 38    set(CMAKE_OBJCXX_FLAGS_INIT "@CXXFLAGS@")
 39  endif()
 40  if(NOT DEFINED CMAKE_CXX_FLAGS_RELWITHDEBINFO_INIT)
 41    set(CMAKE_CXX_FLAGS_RELWITHDEBINFO_INIT "@CXXFLAGS_RELEASE@")
 42    set(CMAKE_OBJCXX_FLAGS_RELWITHDEBINFO_INIT "@CXXFLAGS_RELEASE@")
 43  endif()
 44  if(NOT DEFINED CMAKE_CXX_FLAGS_DEBUG_INIT)
 45    set(CMAKE_CXX_FLAGS_DEBUG_INIT "@CXXFLAGS_DEBUG@")
 46    set(CMAKE_OBJCXX_FLAGS_DEBUG_INIT "@CXXFLAGS_DEBUG@")
 47  endif()
 48  
 49  if(NOT DEFINED CMAKE_CXX_COMPILER)
 50    set(CMAKE_CXX_COMPILER @CXX@)
 51    set(CMAKE_OBJCXX_COMPILER ${CMAKE_CXX_COMPILER})
 52  endif()
 53  
 54  # The DEPENDS_COMPILE_DEFINITIONS* variables are to be treated as lists.
 55  set(DEPENDS_COMPILE_DEFINITIONS @CPPFLAGS@)
 56  set(DEPENDS_COMPILE_DEFINITIONS_RELWITHDEBINFO @CPPFLAGS_RELEASE@)
 57  set(DEPENDS_COMPILE_DEFINITIONS_DEBUG @CPPFLAGS_DEBUG@)
 58  
 59  if(NOT DEFINED CMAKE_EXE_LINKER_FLAGS_INIT)
 60    set(CMAKE_EXE_LINKER_FLAGS_INIT "@LDFLAGS@")
 61  endif()
 62  if(NOT DEFINED CMAKE_SHARED_LINKER_FLAGS_INIT)
 63    set(CMAKE_SHARED_LINKER_FLAGS_INIT "@LDFLAGS@")
 64  endif()
 65  if(NOT DEFINED CMAKE_EXE_LINKER_FLAGS_RELWITHDEBINFO_INIT)
 66    set(CMAKE_EXE_LINKER_FLAGS_RELWITHDEBINFO_INIT "@LDFLAGS_RELEASE@")
 67  endif()
 68  if(NOT DEFINED CMAKE_SHARED_LINKER_FLAGS_RELWITHDEBINFO_INIT)
 69    set(CMAKE_SHARED_LINKER_FLAGS_RELWITHDEBINFO_INIT "@LDFLAGS_RELEASE@")
 70  endif()
 71  if(NOT DEFINED CMAKE_EXE_LINKER_FLAGS_DEBUG_INIT)
 72    set(CMAKE_EXE_LINKER_FLAGS_DEBUG_INIT "@LDFLAGS_DEBUG@")
 73  endif()
 74  if(NOT DEFINED CMAKE_SHARED_LINKER_FLAGS_DEBUG_INIT)
 75    set(CMAKE_SHARED_LINKER_FLAGS_DEBUG_INIT "@LDFLAGS_DEBUG@")
 76  endif()
 77  
 78  set(CMAKE_AR "@AR@")
 79  set(CMAKE_RANLIB "@RANLIB@")
 80  set(CMAKE_STRIP "@STRIP@")
 81  set(CMAKE_OBJCOPY "@OBJCOPY@")
 82  set(CMAKE_OBJDUMP "@OBJDUMP@")
 83  
 84  # Using our own built dependencies should not be
 85  # affected by a potentially random environment.
 86  set(CMAKE_FIND_USE_CMAKE_ENVIRONMENT_PATH OFF)
 87  
 88  set(CMAKE_FIND_ROOT_PATH "${CMAKE_CURRENT_LIST_DIR}")
 89  set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
 90  set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
 91  set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
 92  set(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE ONLY)
 93  set(QT_TRANSLATIONS_DIR "${CMAKE_CURRENT_LIST_DIR}/translations")
 94  
 95  # The following is only necessary when using cmake from Nix or NixOS, because
 96  # Nix patches cmake to remove the root directory `/` from
 97  # CMAKE_SYSTEM_PREFIX_PATH. Adding it back is harmless on other platforms and
 98  # necessary on Nix because without it cmake find_path, find_package, etc
 99  # functions do not know where to look in CMAKE_FIND_ROOT_PATH for dependencies
100  # (https://github.com/bitcoin/bitcoin/issues/32428).
101  #
102  # TODO: longer term, it may be possible to use a dependency provider, which
103  # would bring the find_package calls completely under our control, making this
104  # patch unnecessary.
105  #
106  # Make sure we only append once, as this file may be called repeatedly.
107  if(NOT "/" IN_LIST CMAKE_PREFIX_PATH)
108    list(APPEND CMAKE_PREFIX_PATH "/")
109  endif()
110  
111  if(CMAKE_SYSTEM_NAME STREQUAL "Darwin" AND NOT CMAKE_HOST_APPLE)
112    # The find_package(Qt ...) function internally uses find_library()
113    # calls for all dependencies to ensure their availability.
114    # In turn, the find_library() inspects the well-known locations
115    # on the file system; therefore, a hint is required.
116    set(CMAKE_FRAMEWORK_PATH "@OSX_SDK@/System/Library/Frameworks")
117  endif()
118  
119  
120  if(CMAKE_SYSTEM_NAME MATCHES "^(Linux|FreeBSD)$")
121    # Customize pkg-config behavior for finding dependencies
122    # of the xcb QPA platform plugin:
123    # 1. Restrict search paths to the depends.
124    # 2. Make output suitable for static linking.
125    cmake_path(APPEND CMAKE_CURRENT_LIST_DIR "lib" "pkgconfig" OUTPUT_VARIABLE pkg_config_path)
126    set(ENV{PKG_CONFIG_PATH} ${pkg_config_path})
127    set(ENV{PKG_CONFIG_LIBDIR} ${pkg_config_path})
128    unset(pkg_config_path)
129    set(PKG_CONFIG_ARGN --static)
130  endif()
131  
132  
133  # Set configuration options for the main build system.
134  # The depends/Makefile can generate values with "not-set"
135  # semantics as empty strings or strings containing only spaces.
136  # Therefore, MATCHES must be used rather than STREQUAL.
137  if("@qt_packages@" MATCHES "^[ ]*$")
138    set(BUILD_GUI OFF CACHE BOOL "")
139  else()
140    set(BUILD_GUI ON CACHE BOOL "")
141    set(Qt6_ROOT "${CMAKE_CURRENT_LIST_DIR}" CACHE PATH "")
142  endif()
143  
144  if("@qrencode_packages@" MATCHES "^[ ]*$")
145    set(WITH_QRENCODE OFF CACHE BOOL "")
146  else()
147    set(WITH_QRENCODE ON CACHE BOOL "")
148  endif()
149  
150  if("@zmq_packages@" MATCHES "^[ ]*$")
151    set(WITH_ZMQ OFF CACHE BOOL "")
152  else()
153    set(WITH_ZMQ ON CACHE BOOL "")
154  endif()
155  
156  if("@wallet_packages@" MATCHES "^[ ]*$")
157    set(ENABLE_WALLET OFF CACHE BOOL "")
158  else()
159    set(ENABLE_WALLET ON CACHE BOOL "")
160  endif()
161  
162  if("@usdt_packages@" MATCHES "^[ ]*$")
163    set(WITH_USDT OFF CACHE BOOL "")
164  else()
165    set(WITH_USDT ON CACHE BOOL "")
166    set(USDT_INCLUDE_DIR "${CMAKE_CURRENT_LIST_DIR}/systemtap/include" CACHE PATH "")
167  endif()
168  
169  set(ipc_packages @ipc_packages@)
170  if("${ipc_packages}" STREQUAL "")
171    set(ENABLE_IPC OFF CACHE BOOL "")
172  else()
173    set(ENABLE_IPC ON CACHE BOOL "")
174    set(MPGEN_EXECUTABLE "${CMAKE_CURRENT_LIST_DIR}/native/bin/mpgen" CACHE FILEPATH "")
175    set(CAPNP_EXECUTABLE "${CMAKE_CURRENT_LIST_DIR}/native/bin/capnp" CACHE FILEPATH "")
176    set(CAPNPC_CXX_EXECUTABLE "${CMAKE_CURRENT_LIST_DIR}/native/bin/capnpc-c++" CACHE FILEPATH "")
177  endif()