From 8ec856124c7c805d2dfe70f6cc8b495aa08c1615 Mon Sep 17 00:00:00 2001 From: Jarred Sumner Date: Fri, 7 Nov 2025 04:01:10 -0800 Subject: [PATCH] Add ccache back, with fallback for sccache --- CMakeLists.txt | 11 ++++++- cmake/tools/SetupCcache.cmake | 54 +++++++++++++++++++++++++++++++++++ 2 files changed, 64 insertions(+), 1 deletion(-) create mode 100644 cmake/tools/SetupCcache.cmake diff --git a/CMakeLists.txt b/CMakeLists.txt index b53497a1bd..0518bbd930 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -24,7 +24,16 @@ if(CMAKE_HOST_APPLE) include(SetupMacSDK) endif() include(SetupLLVM) -include(SetupSccache) + +find_program(SCCACHE_PROGRAM sccache) +if(SCCACHE_PROGRAM) + include(SetupSccache) +else() + find_program(CCACHE_PROGRAM ccache) + if(CCACHE_PROGRAM) + include(SetupCcache) + endif() +endif() # --- Project --- diff --git a/cmake/tools/SetupCcache.cmake b/cmake/tools/SetupCcache.cmake new file mode 100644 index 0000000000..fc1e64aa96 --- /dev/null +++ b/cmake/tools/SetupCcache.cmake @@ -0,0 +1,54 @@ +optionx(ENABLE_CCACHE BOOL "If ccache should be enabled" DEFAULT ON) + +if(NOT ENABLE_CCACHE OR CACHE_STRATEGY STREQUAL "none") + setenv(CCACHE_DISABLE 1) + return() +endif() + +if (CI AND NOT APPLE) + setenv(CCACHE_DISABLE 1) + return() +endif() + +find_command( + VARIABLE + CCACHE_PROGRAM + COMMAND + ccache + REQUIRED + ${CI} +) + +if(NOT CCACHE_PROGRAM) + return() +endif() + +set(CCACHE_ARGS CMAKE_C_COMPILER_LAUNCHER CMAKE_CXX_COMPILER_LAUNCHER) +foreach(arg ${CCACHE_ARGS}) + setx(${arg} ${CCACHE_PROGRAM}) + list(APPEND CMAKE_ARGS -D${arg}=${${arg}}) +endforeach() + +setenv(CCACHE_DIR ${CACHE_PATH}/ccache) +setenv(CCACHE_BASEDIR ${CWD}) +setenv(CCACHE_NOHASHDIR 1) + +if(CACHE_STRATEGY STREQUAL "read-only") + setenv(CCACHE_READONLY 1) +elseif(CACHE_STRATEGY STREQUAL "write-only") + setenv(CCACHE_RECACHE 1) +endif() + +setenv(CCACHE_FILECLONE 1) +setenv(CCACHE_STATSLOG ${BUILD_PATH}/ccache.log) + +if(CI) + # FIXME: Does not work on Ubuntu 18.04 + # setenv(CCACHE_SLOPPINESS "pch_defines,time_macros,locale,clang_index_store,gcno_cwd,include_file_ctime,include_file_mtime") +else() + setenv(CCACHE_MAXSIZE 100G) + setenv(CCACHE_SLOPPINESS "pch_defines,time_macros,locale,random_seed,clang_index_store,gcno_cwd") +endif() + + +