[llvm] [CMake] Configure ccache using command line options (PR #134857)
Kajetan Puchalski via llvm-commits
llvm-commits at lists.llvm.org
Tue Apr 8 07:09:38 PDT 2025
https://github.com/mrkajetanp created https://github.com/llvm/llvm-project/pull/134857
Since ccache 4.8, it is possible to pass configuration options directly to ccache on the command line as opposed to through environment variables.
This is the intended way for CMake to configure ccache, as described on the GitHub wiki for the project:
https://github.com/ccache/ccache/wiki/CMake
This should allow for uniform ccache configuration that does not rely on platform-specific environment setup.
Rework the way ccache is configured by LLVM accordingly.
>From 773575fcf7c4b6bf7c0ff1c2bf98ddaad59d6347 Mon Sep 17 00:00:00 2001
From: Kajetan Puchalski <kajetan.puchalski at arm.com>
Date: Tue, 8 Apr 2025 13:39:58 +0000
Subject: [PATCH] [CMake] Configure ccache using command line options
Since ccache 4.8, it is possible to pass configuration options directly
to ccache on the command line as opposed to through environment
variables.
This is the intended way for CMake to configure ccache, as described on
the GitHub wiki for the project:
https://github.com/ccache/ccache/wiki/CMake
This should allow for uniform ccache configuration that does not rely on
platform-specific environment setup.
Rework the way ccache is configured by LLVM accordingly.
Signed-off-by: Kajetan Puchalski <kajetan.puchalski at arm.com>
---
llvm/CMakeLists.txt | 39 +++++++++++++++++++++++++--------------
1 file changed, 25 insertions(+), 14 deletions(-)
diff --git a/llvm/CMakeLists.txt b/llvm/CMakeLists.txt
index cfd1a086c0fc2..56fc4235eb526 100644
--- a/llvm/CMakeLists.txt
+++ b/llvm/CMakeLists.txt
@@ -271,30 +271,41 @@ set(LLVM_CCACHE_BUILD OFF CACHE BOOL "Set to ON for a ccache enabled build")
if(LLVM_CCACHE_BUILD)
find_program(CCACHE_PROGRAM ccache)
if(CCACHE_PROGRAM)
+ # ccache --version example output: "ccache version 4.9.1\n(..)"
+ execute_process(COMMAND ${CCACHE_PROGRAM} --version OUTPUT_VARIABLE CCACHE_VERSION_STR)
+ string(REGEX MATCH "[0-9]+\.[0-9]+\.?[0-9]*" CCACHE_VERSION "${CCACHE_VERSION_STR}")
+
set(LLVM_CCACHE_MAXSIZE "" CACHE STRING "Size of ccache")
set(LLVM_CCACHE_DIR "" CACHE STRING "Directory to keep ccached data")
- set(LLVM_CCACHE_PARAMS "CCACHE_CPP2=yes CCACHE_HASHDIR=yes"
- CACHE STRING "Parameters to pass through to ccache")
- if(NOT CMAKE_SYSTEM_NAME MATCHES "Windows")
- set(CCACHE_PROGRAM "${LLVM_CCACHE_PARAMS} ${CCACHE_PROGRAM}")
+ # ccache only supports passing options on the command line from version 4.8.0
+ # use a workaround with ad-hoc environment variables for older versions
+ if (CCACHE_VERSION VERSION_LESS "4.8.0")
+ set(LLVM_CCACHE_PARAMS CCACHE_CPP2=yes CCACHE_HASHDIR=yes)
+
+ set(launcher_params ${LLVM_CCACHE_PARAMS})
if (LLVM_CCACHE_MAXSIZE)
- set(CCACHE_PROGRAM "CCACHE_MAXSIZE=${LLVM_CCACHE_MAXSIZE} ${CCACHE_PROGRAM}")
+ set(launcher_params CCACHE_MAXSIZE=${LLVM_CCACHE_MAXSIZE} ${launcher_params})
endif()
if (LLVM_CCACHE_DIR)
- set(CCACHE_PROGRAM "CCACHE_DIR=${LLVM_CCACHE_DIR} ${CCACHE_PROGRAM}")
+ set(launcher_params CCACHE_DIR=${LLVM_CCACHE_DIR} ${launcher_params})
endif()
- set_property(GLOBAL PROPERTY RULE_LAUNCH_COMPILE ${CCACHE_PROGRAM})
+ set(launcher ${launcher_params} ${CCACHE_PROGRAM})
else()
- if(LLVM_CCACHE_MAXSIZE OR LLVM_CCACHE_DIR OR
- NOT LLVM_CCACHE_PARAMS MATCHES "CCACHE_CPP2=yes CCACHE_HASHDIR=yes")
- message(FATAL_ERROR "Ccache configuration through CMake is not supported on Windows. Please use environment variables.")
+ set(LLVM_CCACHE_PARAMS run_second_cpp=true hash_dir=true)
+
+ set(launcher_params ${LLVM_CCACHE_PARAMS})
+ if (LLVM_CCACHE_MAXSIZE)
+ set(launcher_params max_size=${LLVM_CCACHE_MAXSIZE} ${launcher_params})
endif()
- # RULE_LAUNCH_COMPILE should work with Ninja but currently has issues
- # with cmd.exe and some MSVC tools other than cl.exe
- set(CMAKE_C_COMPILER_LAUNCHER ${CCACHE_PROGRAM})
- set(CMAKE_CXX_COMPILER_LAUNCHER ${CCACHE_PROGRAM})
+ if (LLVM_CCACHE_DIR)
+ set(launcher_params cache_dir=${LLVM_CCACHE_DIR} ${launcher_params})
+ endif()
+ set(launcher ${CCACHE_PROGRAM} ${launcher_params})
endif()
+
+ set(CMAKE_C_COMPILER_LAUNCHER ${launcher})
+ set(CMAKE_CXX_COMPILER_LAUNCHER ${launcher})
else()
message(FATAL_ERROR "Unable to find the program ccache. Set LLVM_CCACHE_BUILD to OFF")
endif()
More information about the llvm-commits
mailing list