diff --git a/CMakeLists.txt b/CMakeLists.txt index 12a758967..5f668d695 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -50,12 +50,27 @@ endif() project(monero) -option (USE_CCACHE "Use ccache if a usable instance is found" ON) -if (USE_CCACHE) - include(FindCcache) # Has to be included after the project() macro, to be able to read the CXX variable. +option (USE_COMPILER_CACHE "Use compiler cache if a usable instance is found (sccache/ccache)" ON) +if (USE_COMPILER_CACHE) + find_program(SCCACHE sccache) + find_program(CCACHE ccache) + if (SCCACHE) + message(STATUS "Using sccache: ${SCCACHE}") + set(CMAKE_C_COMPILER_LAUNCHER "${SCCACHE}") + set(CMAKE_CXX_COMPILER_LAUNCHER "${SCCACHE}") + # Remove this line and uncomment the one below when FCMP++ Rust libraries are merged. + # set(ENV{RUSTC_WRAPPER} "${SCCACHE}") + elseif (CCACHE) + message(STATUS "Using ccache: ${CCACHE}") + set(CMAKE_C_COMPILER_LAUNCHER "${CCACHE}") + set(CMAKE_CXX_COMPILER_LAUNCHER "${CCACHE}") + else() + message(STATUS "No compiler cache found") + endif() else() - message(STATUS "ccache deselected") + message(STATUS "Compiler cache deselected") endif() + option (USE_COMPILATION_TIME_PROFILER "Use compilation time profiler (for CLang >= 9 only)" OFF) if (USE_COMPILATION_TIME_PROFILER) if (NOT "${CMAKE_CXX_COMPILER_ID}" MATCHES "Clang") diff --git a/cmake/FindCcache.cmake b/cmake/FindCcache.cmake deleted file mode 100644 index 8bbf6cb84..000000000 --- a/cmake/FindCcache.cmake +++ /dev/null @@ -1,67 +0,0 @@ -# Copyright (c) 2014-2024, The Monero Project -# -# All rights reserved. -# -# Redistribution and use in source and binary forms, with or without modification, are -# permitted provided that the following conditions are met: -# -# 1. Redistributions of source code must retain the above copyright notice, this list of -# conditions and the following disclaimer. -# -# 2. Redistributions in binary form must reproduce the above copyright notice, this list -# of conditions and the following disclaimer in the documentation and/or other -# materials provided with the distribution. -# -# 3. Neither the name of the copyright holder nor the names of its contributors may be -# used to endorse or promote products derived from this software without specific -# prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY -# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF -# MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL -# THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS -# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, -# STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF -# THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# - Try to find readline include dirs and libraries -# -# Automatically finds ccache build accelerator, if it's found in PATH. -# -# Usage of this module as follows: -# -# project(monero) -# include(FindCcache) # Include AFTER the project() macro to be able to reach the CMAKE_CXX_COMPILER variable -# -# Properties modified by this module: -# -# GLOBAL PROPERTY RULE_LAUNCH_COMPILE set to ccache, when ccache found -# GLOBAL PROPERTY RULE_LAUNCH_LINK set to ccache, when ccache found - -find_program(CCACHE_FOUND ccache) -if (CCACHE_FOUND) - # Try to compile a test program with ccache, in order to verify if it really works. (needed on exotic setups) - set(TEST_PROJECT "${CMAKE_BINARY_DIR}/${CMAKE_FILES_DIRECTORY}/CMakeTmp") - file(WRITE "${TEST_PROJECT}/CMakeLists.txt" [=[ -cmake_minimum_required(VERSION 3.10) -project(test) -option (CCACHE "") -file(WRITE "${CMAKE_SOURCE_DIR}/test.cpp" "int main() { return 0; }") -set_property(GLOBAL PROPERTY RULE_LAUNCH_COMPILE "${CCACHE}") -set_property(GLOBAL PROPERTY RULE_LAUNCH_LINK "${CCACHE}") -add_executable(main test.cpp) -]=]) - try_compile(RET "${TEST_PROJECT}/build" "${TEST_PROJECT}" "test" CMAKE_FLAGS -DCCACHE="${CCACHE_FOUND}") - unset(TEST_PROJECT) - if (${RET}) - # Success - message(STATUS "Found usable ccache: ${CCACHE_FOUND}") - set_property(GLOBAL PROPERTY RULE_LAUNCH_COMPILE "${CCACHE_FOUND}") - set_property(GLOBAL PROPERTY RULE_LAUNCH_LINK "${CCACHE_FOUND}") - else() - message(STATUS "Found ccache ${CCACHE_FOUND}, but is UNUSABLE! Return code: ${RET}") - endif() -else() - message(STATUS "ccache NOT found! Please install it for faster rebuilds.") -endif() diff --git a/contrib/guix/libexec/build.sh b/contrib/guix/libexec/build.sh index ede665b5f..9688366c8 100644 --- a/contrib/guix/libexec/build.sh +++ b/contrib/guix/libexec/build.sh @@ -336,7 +336,7 @@ mkdir -p "$DISTSRC" esac # Turn off unused default options - CMAKEFLAGS+=" -DUSE_CCACHE=OFF -DBUILD_DOCUMENTATION=OFF" + CMAKEFLAGS+=" -DUSE_COMPILER_CACHE=OFF -DBUILD_DOCUMENTATION=OFF" # Configure this DISTSRC for $HOST # shellcheck disable=SC2086 diff --git a/utils/health/clang-build-time-analyzer-run.sh b/utils/health/clang-build-time-analyzer-run.sh index 9d37a353b..d9a1c92ea 100755 --- a/utils/health/clang-build-time-analyzer-run.sh +++ b/utils/health/clang-build-time-analyzer-run.sh @@ -56,7 +56,7 @@ mkdir -p "$DIR_BUILD" && cd "$DIR_BUILD" cmake ../.. \ -DCMAKE_C_COMPILER=clang \ -DCMAKE_CXX_COMPILER=clang++ \ --DUSE_CCACHE=OFF \ +-DUSE_COMPILER_CACHE=OFF \ -DUSE_COMPILATION_TIME_PROFILER=ON \ -DBUILD_SHARED_LIBS=ON \ -DBUILD_TESTS=ON diff --git a/utils/health/clang-include-what-you-use-run.sh b/utils/health/clang-include-what-you-use-run.sh index 5ea19737c..d72e7a773 100755 --- a/utils/health/clang-include-what-you-use-run.sh +++ b/utils/health/clang-include-what-you-use-run.sh @@ -56,7 +56,7 @@ UWYU_COMMAND="$PROG;-Xiwyu;any;-Xiwyu;iwyu;-Xiwyu;args" # Copy-pasted from the u cmake ../.. \ -DCMAKE_C_COMPILER=clang \ -DCMAKE_CXX_COMPILER=clang++ \ --DUSE_CCACHE=ON \ +-DUSE_COMPILER_CACHE=ON \ -DCMAKE_C_INCLUDE_WHAT_YOU_USE="$UWYU_COMMAND" \ -DCMAKE_CXX_INCLUDE_WHAT_YOU_USE="$UWYU_COMMAND" \ -DBUILD_SHARED_LIBS=ON \ diff --git a/utils/health/clang-tidy-run-common.sh b/utils/health/clang-tidy-run-common.sh index e7724843b..692a1362a 100755 --- a/utils/health/clang-tidy-run-common.sh +++ b/utils/health/clang-tidy-run-common.sh @@ -45,7 +45,7 @@ function tidy_for_language() { cmake ../.. \ -DCMAKE_C_COMPILER=clang \ -DCMAKE_CXX_COMPILER=clang++ \ - -DUSE_CCACHE=ON \ + -DUSE_COMPILER_CACHE=ON \ -DUSE_CLANG_TIDY_${LANG}=ON \ -DBUILD_SHARED_LIBS=ON \ -DBUILD_TESTS=ON