From 5ee5ab399ea0effbf93302f0836be7b828155d31 Mon Sep 17 00:00:00 2001 From: Even Rouault Date: Mon, 2 Dec 2024 04:57:13 +0100 Subject: [PATCH] Do not enable pre-compiled headers when ccache is available and with MSVC, as ccache doesn't support that --- CMakeLists.txt | 12 +++++++++++- src/3d/CMakeLists.txt | 4 +++- src/analysis/CMakeLists.txt | 4 +++- src/app/CMakeLists.txt | 4 +++- src/core/CMakeLists.txt | 4 +++- src/gui/CMakeLists.txt | 4 +++- src/server/CMakeLists.txt | 4 +++- 7 files changed, 29 insertions(+), 7 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index f49f239fee1..d7b5be5f75b 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -151,7 +151,10 @@ if (USE_CCACHE) set(CCACHE_COMPILER_TYPE_GCC_REQUIRED OFF) endif() set(CCACHE_INVOCATION_COMMAND "ccache") - if (ccache_key_value_found_index EQUAL -1 ) + if (MSVC) + # CCache doesn't work yet with precompiled headers (cf https://github.com/ccache/ccache/issues/1383) + # so no need to set specific ccache configuration items + elseif (ccache_key_value_found_index EQUAL -1 ) if (CCACHE_SLOPPINESS_REQUIRED) message(FATAL_ERROR "The use of precompiled headers only works if the ccache 'sloppiness' settings contains 'pch_defines' and 'time_macros'. Consider running 'ccache --set-config sloppiness=${CCACHE_SLOPPINESS_REQUIRED}' to define them") endif() @@ -171,6 +174,13 @@ if (USE_CCACHE) endif(CCACHE_FOUND) endif(USE_CCACHE) +if (USE_CCACHE AND MSVC) + # CCache doesn't work yet with precompiled headers (cf https://github.com/ccache/ccache/issues/1383) + set(USE_PRECOMPILED_HEADERS OFF) +else() + set(USE_PRECOMPILED_HEADERS ON) +endif() + if (IOS) set (DEFAULT_FORCE_STATIC_LIBS TRUE) else() diff --git a/src/3d/CMakeLists.txt b/src/3d/CMakeLists.txt index a90d874afcd..9c2d06f5801 100644 --- a/src/3d/CMakeLists.txt +++ b/src/3d/CMakeLists.txt @@ -239,7 +239,9 @@ set (QGIS_3D_RCCS shaders.qrc ../../resources/3d/textures/textures.qrc) add_library(qgis_3d SHARED ${QGIS_3D_SRCS} ${QGIS_3D_HDRS} ${QGIS_3D_RCCS} ${QGIS_3D_PRIVATE_HDRS}) -target_precompile_headers(qgis_3d PRIVATE $<$:${CMAKE_SOURCE_DIR}/src/core/qgis.h>) +if (USE_PRECOMPILED_HEADERS) + target_precompile_headers(qgis_3d PRIVATE $<$:${CMAKE_SOURCE_DIR}/src/core/qgis.h>) +endif() set_target_properties(qgis_3d PROPERTIES UNITY_BUILD ${ENABLE_UNITY_BUILDS}) diff --git a/src/analysis/CMakeLists.txt b/src/analysis/CMakeLists.txt index 13f228560f1..b4739fe4cb6 100644 --- a/src/analysis/CMakeLists.txt +++ b/src/analysis/CMakeLists.txt @@ -520,7 +520,9 @@ endif() add_library(qgis_analysis ${LIBRARY_TYPE} ${QGIS_ANALYSIS_SRCS} ${QGIS_ANALYSIS_HDRS}) -target_precompile_headers(qgis_analysis PRIVATE $<$:${CMAKE_SOURCE_DIR}/src/core/qgis.h>) +if (USE_PRECOMPILED_HEADERS) + target_precompile_headers(qgis_analysis PRIVATE $<$:${CMAKE_SOURCE_DIR}/src/core/qgis.h>) +endif() set_target_properties(qgis_analysis PROPERTIES UNITY_BUILD ${ENABLE_UNITY_BUILDS}) diff --git a/src/app/CMakeLists.txt b/src/app/CMakeLists.txt index 5643c0ffd13..fa5b9892cd5 100644 --- a/src/app/CMakeLists.txt +++ b/src/app/CMakeLists.txt @@ -611,7 +611,9 @@ target_link_libraries(qgis_app target_compile_definitions(qgis_app PRIVATE "-DQT_NO_FOREACH") -target_precompile_headers(qgis_app PRIVATE $<$:${CMAKE_SOURCE_DIR}/src/core/qgis.h>) +if (USE_PRECOMPILED_HEADERS) + target_precompile_headers(qgis_app PRIVATE $<$:${CMAKE_SOURCE_DIR}/src/core/qgis.h>) +endif() set_target_properties(qgis_app PROPERTIES UNITY_BUILD ${ENABLE_UNITY_BUILDS}) diff --git a/src/core/CMakeLists.txt b/src/core/CMakeLists.txt index 8f987e445fe..f0236b7b879 100644 --- a/src/core/CMakeLists.txt +++ b/src/core/CMakeLists.txt @@ -2339,7 +2339,9 @@ include_directories(${CMAKE_CURRENT_BINARY_DIR}) add_library(qgis_core ${LIBRARY_TYPE} ${QGIS_CORE_SRCS} ${QGIS_CORE_HDRS} ${QGIS_CORE_PRIVATE_HDRS} ${IMAGE_RCCS}) -target_precompile_headers(qgis_core PRIVATE $<$:qgis.h>) +if(USE_PRECOMPILED_HEADERS) + target_precompile_headers(qgis_core PRIVATE $<$:qgis.h>) +endif() set_target_properties(qgis_core PROPERTIES UNITY_BUILD ${ENABLE_UNITY_BUILDS}) diff --git a/src/gui/CMakeLists.txt b/src/gui/CMakeLists.txt index 7e78ca586d8..1809c553919 100644 --- a/src/gui/CMakeLists.txt +++ b/src/gui/CMakeLists.txt @@ -1686,7 +1686,9 @@ add_library(qgis_gui ${LIBRARY_TYPE} # require c++17 target_compile_features(qgis_gui PRIVATE cxx_std_17) -target_precompile_headers(qgis_gui PRIVATE $<$:${CMAKE_SOURCE_DIR}/src/core/qgis.h>) +if (USE_PRECOMPILED_HEADERS) + target_precompile_headers(qgis_gui PRIVATE $<$:${CMAKE_SOURCE_DIR}/src/core/qgis.h>) +endif() set_target_properties(qgis_gui PROPERTIES UNITY_BUILD ${ENABLE_UNITY_BUILDS}) diff --git a/src/server/CMakeLists.txt b/src/server/CMakeLists.txt index f1a07f29983..de9ecf8fde6 100644 --- a/src/server/CMakeLists.txt +++ b/src/server/CMakeLists.txt @@ -86,7 +86,9 @@ endif() add_library(qgis_server SHARED ${QGIS_SERVER_SRCS} ${QGIS_SERVER_HDRS}) -target_precompile_headers(qgis_server PRIVATE $<$:${CMAKE_SOURCE_DIR}/src/core/qgis.h>) +if (USE_PRECOMPILED_HEADERS) + target_precompile_headers(qgis_server PRIVATE $<$:${CMAKE_SOURCE_DIR}/src/core/qgis.h>) +endif() set_target_properties(qgis_server PROPERTIES UNITY_BUILD ${ENABLE_UNITY_BUILDS})