[llvm] [CMake] Configure ccache using command line options (PR #134857)

Kajetan Puchalski via llvm-commits llvm-commits at lists.llvm.org
Wed Apr 9 05:00:40 PDT 2025


================
@@ -271,30 +271,43 @@ 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"
+          CACHE STRING "Parameters to pass through to ccache")
+
+      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}")
----------------
mrkajetanp wrote:

It was, but I had to revert that PR because of some issues. This PR here is re-landing the ccache configuration changes so that we can review and test them on their own. Then I'll submit a PR with the changes required for pch separately.

https://github.com/llvm/llvm-project/pull/134857


More information about the llvm-commits mailing list