mirror of
https://github.com/bitcoin/bitcoin.git
synced 2025-08-26 18:01:08 +02:00
Nix patches cmake to remove the root directory `/` from `CMAKE_SYSTEM_PREFIX_PATH`:428b49b28e/pkgs/by-name/cm/cmake/001-search-path.diff (L10)
Without this, and when using the toolchain for depends builds, cmake's `find_path()` and `find_package()` do not know where to find dependencies, causing issues like: https://github.com/bitcoin/bitcoin/issues/32428 Adding this path back via CMAKE_PREFIX_PATH is harmless on other systems, and fixes the toolchain for Nix users. We append the `/` dir a maximum of once, as the toolchain may be called repeatedly during builds. Co-authored-by: Russell Yanofsky <russ@yanofsky.org> Co-authored-by: josibake <josibake@protonmail.com> Github-Pull: #32798 Rebased-From:e27a94596f
182 lines
6.0 KiB
CMake
182 lines
6.0 KiB
CMake
# Copyright (c) 2023-present The Bitcoin Core developers
|
|
# Distributed under the MIT software license, see the accompanying
|
|
# file COPYING or https://opensource.org/license/mit/.
|
|
|
|
# This file is expected to be highly volatile and may still change substantially.
|
|
|
|
# If CMAKE_SYSTEM_NAME is set within a toolchain file, CMake will also
|
|
# set CMAKE_CROSSCOMPILING to TRUE, even if CMAKE_SYSTEM_NAME matches
|
|
# CMAKE_HOST_SYSTEM_NAME. To avoid potential misconfiguration of CMake,
|
|
# it is best not to touch CMAKE_SYSTEM_NAME unless cross-compiling is
|
|
# intended.
|
|
if(@depends_crosscompiling@)
|
|
set(CMAKE_SYSTEM_NAME @host_system_name@)
|
|
set(CMAKE_SYSTEM_VERSION @host_system_version@)
|
|
set(CMAKE_SYSTEM_PROCESSOR @host_arch@)
|
|
|
|
set(CMAKE_C_COMPILER_TARGET @host@)
|
|
set(CMAKE_CXX_COMPILER_TARGET @host@)
|
|
set(CMAKE_OBJCXX_COMPILER_TARGET @host@)
|
|
endif()
|
|
|
|
if(NOT DEFINED CMAKE_C_FLAGS_INIT)
|
|
set(CMAKE_C_FLAGS_INIT "@CFLAGS@")
|
|
endif()
|
|
if(NOT DEFINED CMAKE_C_FLAGS_RELWITHDEBINFO_INIT)
|
|
set(CMAKE_C_FLAGS_RELWITHDEBINFO_INIT "@CFLAGS_RELEASE@")
|
|
endif()
|
|
if(NOT DEFINED CMAKE_C_FLAGS_DEBUG_INIT)
|
|
set(CMAKE_C_FLAGS_DEBUG_INIT "@CFLAGS_DEBUG@")
|
|
endif()
|
|
|
|
if(NOT DEFINED CMAKE_C_COMPILER)
|
|
set(CMAKE_C_COMPILER @CC@)
|
|
endif()
|
|
|
|
if(NOT DEFINED CMAKE_CXX_FLAGS_INIT)
|
|
set(CMAKE_CXX_FLAGS_INIT "@CXXFLAGS@")
|
|
set(CMAKE_OBJCXX_FLAGS_INIT "@CXXFLAGS@")
|
|
endif()
|
|
if(NOT DEFINED CMAKE_CXX_FLAGS_RELWITHDEBINFO_INIT)
|
|
set(CMAKE_CXX_FLAGS_RELWITHDEBINFO_INIT "@CXXFLAGS_RELEASE@")
|
|
set(CMAKE_OBJCXX_FLAGS_RELWITHDEBINFO_INIT "@CXXFLAGS_RELEASE@")
|
|
endif()
|
|
if(NOT DEFINED CMAKE_CXX_FLAGS_DEBUG_INIT)
|
|
set(CMAKE_CXX_FLAGS_DEBUG_INIT "@CXXFLAGS_DEBUG@")
|
|
set(CMAKE_OBJCXX_FLAGS_DEBUG_INIT "@CXXFLAGS_DEBUG@")
|
|
endif()
|
|
|
|
if(NOT DEFINED CMAKE_CXX_COMPILER)
|
|
set(CMAKE_CXX_COMPILER @CXX@)
|
|
set(CMAKE_OBJCXX_COMPILER ${CMAKE_CXX_COMPILER})
|
|
endif()
|
|
|
|
# The DEPENDS_COMPILE_DEFINITIONS* variables are to be treated as lists.
|
|
set(DEPENDS_COMPILE_DEFINITIONS @CPPFLAGS@)
|
|
set(DEPENDS_COMPILE_DEFINITIONS_RELWITHDEBINFO @CPPFLAGS_RELEASE@)
|
|
set(DEPENDS_COMPILE_DEFINITIONS_DEBUG @CPPFLAGS_DEBUG@)
|
|
|
|
if(NOT DEFINED CMAKE_EXE_LINKER_FLAGS_INIT)
|
|
set(CMAKE_EXE_LINKER_FLAGS_INIT "@LDFLAGS@")
|
|
endif()
|
|
if(NOT DEFINED CMAKE_SHARED_LINKER_FLAGS_INIT)
|
|
set(CMAKE_SHARED_LINKER_FLAGS_INIT "@LDFLAGS@")
|
|
endif()
|
|
if(NOT DEFINED CMAKE_EXE_LINKER_FLAGS_RELWITHDEBINFO_INIT)
|
|
set(CMAKE_EXE_LINKER_FLAGS_RELWITHDEBINFO_INIT "@LDFLAGS_RELEASE@")
|
|
endif()
|
|
if(NOT DEFINED CMAKE_SHARED_LINKER_FLAGS_RELWITHDEBINFO_INIT)
|
|
set(CMAKE_SHARED_LINKER_FLAGS_RELWITHDEBINFO_INIT "@LDFLAGS_RELEASE@")
|
|
endif()
|
|
if(NOT DEFINED CMAKE_EXE_LINKER_FLAGS_DEBUG_INIT)
|
|
set(CMAKE_EXE_LINKER_FLAGS_DEBUG_INIT "@LDFLAGS_DEBUG@")
|
|
endif()
|
|
if(NOT DEFINED CMAKE_SHARED_LINKER_FLAGS_DEBUG_INIT)
|
|
set(CMAKE_SHARED_LINKER_FLAGS_DEBUG_INIT "@LDFLAGS_DEBUG@")
|
|
endif()
|
|
|
|
set(CMAKE_AR "@AR@")
|
|
set(CMAKE_RANLIB "@RANLIB@")
|
|
set(CMAKE_STRIP "@STRIP@")
|
|
set(CMAKE_OBJCOPY "@OBJCOPY@")
|
|
set(CMAKE_OBJDUMP "@OBJDUMP@")
|
|
|
|
# Using our own built dependencies should not be
|
|
# affected by a potentially random environment.
|
|
set(CMAKE_FIND_USE_CMAKE_ENVIRONMENT_PATH OFF)
|
|
|
|
set(CMAKE_FIND_ROOT_PATH "${CMAKE_CURRENT_LIST_DIR}")
|
|
set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
|
|
set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
|
|
set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
|
|
set(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE ONLY)
|
|
set(QT_TRANSLATIONS_DIR "${CMAKE_CURRENT_LIST_DIR}/translations")
|
|
|
|
# The following is only necessary when using cmake from Nix or NixOS, because
|
|
# Nix patches cmake to remove the root directory `/` from
|
|
# CMAKE_SYSTEM_PREFIX_PATH. Adding it back is harmless on other platforms and
|
|
# necessary on Nix because without it cmake find_path, find_package, etc
|
|
# functions do not know where to look in CMAKE_FIND_ROOT_PATH for dependencies
|
|
# (https://github.com/bitcoin/bitcoin/issues/32428).
|
|
#
|
|
# TODO: longer term, it may be possible to use a dependency provider, which
|
|
# would bring the find_package calls completely under our control, making this
|
|
# patch unnecessary.
|
|
#
|
|
# Make sure we only append once, as this file may be called repeatedly.
|
|
if(NOT "/" IN_LIST CMAKE_PREFIX_PATH)
|
|
list(APPEND CMAKE_PREFIX_PATH "/")
|
|
endif()
|
|
|
|
if(CMAKE_SYSTEM_NAME STREQUAL "Darwin" AND NOT CMAKE_HOST_APPLE)
|
|
# The find_package(Qt ...) function internally uses find_library()
|
|
# calls for all dependencies to ensure their availability.
|
|
# In turn, the find_library() inspects the well-known locations
|
|
# on the file system; therefore, a hint is required.
|
|
set(CMAKE_FRAMEWORK_PATH "@OSX_SDK@/System/Library/Frameworks")
|
|
endif()
|
|
|
|
# Set configuration options for the main build system.
|
|
set(qt_packages @qt_packages@)
|
|
if("${qt_packages}" STREQUAL "")
|
|
set(BUILD_GUI OFF CACHE BOOL "")
|
|
else()
|
|
set(BUILD_GUI ON CACHE BOOL "")
|
|
endif()
|
|
|
|
set(qrencode_packages @qrencode_packages@)
|
|
if("${qrencode_packages}" STREQUAL "")
|
|
set(WITH_QRENCODE OFF CACHE BOOL "")
|
|
else()
|
|
set(WITH_QRENCODE ON CACHE BOOL "")
|
|
endif()
|
|
|
|
set(zmq_packages @zmq_packages@)
|
|
if("${zmq_packages}" STREQUAL "")
|
|
set(WITH_ZMQ OFF CACHE BOOL "")
|
|
else()
|
|
set(WITH_ZMQ ON CACHE BOOL "")
|
|
endif()
|
|
|
|
set(wallet_packages @wallet_packages@)
|
|
if("${wallet_packages}" STREQUAL "")
|
|
set(ENABLE_WALLET OFF CACHE BOOL "")
|
|
else()
|
|
set(ENABLE_WALLET ON CACHE BOOL "")
|
|
endif()
|
|
|
|
set(bdb_packages @bdb_packages@)
|
|
if("${wallet_packages}" STREQUAL "" OR "${bdb_packages}" STREQUAL "")
|
|
set(WITH_BDB OFF CACHE BOOL "")
|
|
else()
|
|
set(WITH_BDB ON CACHE BOOL "")
|
|
endif()
|
|
|
|
set(sqlite_packages @sqlite_packages@)
|
|
if("${wallet_packages}" STREQUAL "" OR "${sqlite_packages}" STREQUAL "")
|
|
set(WITH_SQLITE OFF CACHE BOOL "")
|
|
else()
|
|
set(WITH_SQLITE ON CACHE BOOL "")
|
|
endif()
|
|
|
|
set(usdt_packages @usdt_packages@)
|
|
if("${usdt_packages}" STREQUAL "")
|
|
set(WITH_USDT OFF CACHE BOOL "")
|
|
else()
|
|
set(WITH_USDT ON CACHE BOOL "")
|
|
endif()
|
|
|
|
if("@no_harden@")
|
|
set(ENABLE_HARDENING OFF CACHE BOOL "")
|
|
else()
|
|
set(ENABLE_HARDENING ON CACHE BOOL "")
|
|
endif()
|
|
|
|
if("@multiprocess@" STREQUAL "1")
|
|
set(WITH_MULTIPROCESS ON CACHE BOOL "")
|
|
set(Libmultiprocess_ROOT "${CMAKE_CURRENT_LIST_DIR}" CACHE PATH "")
|
|
set(LibmultiprocessNative_ROOT "${CMAKE_CURRENT_LIST_DIR}/native" CACHE PATH "")
|
|
else()
|
|
set(WITH_MULTIPROCESS OFF CACHE BOOL "")
|
|
endif()
|