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()