[flang-commits] [flang] 0fcc9ff - [CMake] Support using precompiled headers with ccache in flang (#136856)
via flang-commits
flang-commits at lists.llvm.org
Thu Apr 24 08:09:35 PDT 2025
Author: Kajetan Puchalski
Date: 2025-04-24T16:09:31+01:00
New Revision: 0fcc9ffafd35e4567e6bc90f46b8c75f501dddf9
URL: https://github.com/llvm/llvm-project/commit/0fcc9ffafd35e4567e6bc90f46b8c75f501dddf9
DIFF: https://github.com/llvm/llvm-project/commit/0fcc9ffafd35e4567e6bc90f46b8c75f501dddf9.diff
LOG: [CMake] Support using precompiled headers with ccache in flang (#136856)
In order for precompiled headers to work with ccache, a specific flag
needs to be passed to the compiler and ccache's sloppiness configuration
option needs to be set appropriately.
Due to issues with configuring CMake on certain Windows platforms, set
the required ccache option only on non-Windows systems for the time
being.
-----
Signed-off-by: Kajetan Puchalski <kajetan.puchalski at arm.com>
Added:
Modified:
flang/CMakeLists.txt
llvm/CMakeLists.txt
Removed:
################################################################################
diff --git a/flang/CMakeLists.txt b/flang/CMakeLists.txt
index 76eb13295eb07..ed02fad6a6e66 100644
--- a/flang/CMakeLists.txt
+++ b/flang/CMakeLists.txt
@@ -452,6 +452,10 @@ if (LLVM_COMPILER_IS_GCC_COMPATIBLE)
set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -fno-semantic-interposition")
endif()
+ # GCC requires this flag in order for precompiled headers to work with ccache
+ if (CMAKE_CXX_COMPILER_ID STREQUAL "GNU" AND NOT CMAKE_DISABLE_PRECOMPILE_HEADERS)
+ set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fpch-preprocess")
+ endif()
endif()
# Clang on Darwin enables non-POSIX extensions by default, which allows the
@@ -462,6 +466,11 @@ if (APPLE)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -D_POSIX_C_SOURCE=200809")
endif()
+# Clang requires this flag in order for precompiled headers to work with ccache
+if (CMAKE_CXX_COMPILER_ID MATCHES "Clang" AND NOT CMAKE_DISABLE_PRECOMPILE_HEADERS)
+ set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Xclang -fno-pch-timestamp")
+endif()
+
list(REMOVE_DUPLICATES CMAKE_CXX_FLAGS)
# Determine HOST_LINK_VERSION on Darwin.
diff --git a/llvm/CMakeLists.txt b/llvm/CMakeLists.txt
index 693cb085b8e2f..d47ac3ccffd05 100644
--- a/llvm/CMakeLists.txt
+++ b/llvm/CMakeLists.txt
@@ -273,7 +273,7 @@ if(LLVM_CCACHE_BUILD)
if(CCACHE_PROGRAM)
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"
+ set(LLVM_CCACHE_PARAMS "CCACHE_CPP2=yes CCACHE_HASHDIR=yes CCACHE_SLOPPINESS=pch_defines,time_macros"
CACHE STRING "Parameters to pass through to ccache")
if(NOT CMAKE_SYSTEM_NAME MATCHES "Windows")
@@ -287,7 +287,7 @@ if(LLVM_CCACHE_BUILD)
set_property(GLOBAL PROPERTY RULE_LAUNCH_COMPILE ${CCACHE_PROGRAM})
else()
if(LLVM_CCACHE_MAXSIZE OR LLVM_CCACHE_DIR OR
- NOT LLVM_CCACHE_PARAMS MATCHES "CCACHE_CPP2=yes CCACHE_HASHDIR=yes")
+ NOT LLVM_CCACHE_PARAMS MATCHES "CCACHE_CPP2=yes CCACHE_HASHDIR=yes CCACHE_SLOPPINESS=pch_defines,time_macros")
message(FATAL_ERROR "Ccache configuration through CMake is not supported on Windows. Please use environment variables.")
endif()
# RULE_LAUNCH_COMPILE should work with Ninja but currently has issues
More information about the flang-commits
mailing list