solenv/gbuild/LinkTarget.mk             |    2 +-
 solenv/gbuild/PrecompiledHeaders.mk     |   14 ++++++++++----
 solenv/gbuild/platform/com_GCC_class.mk |   20 +++++++++++---------
 solenv/gbuild/platform/com_GCC_defs.mk  |    5 +++++
 solenv/gbuild/platform/com_MSC_class.mk |   12 +++++++-----
 5 files changed, 34 insertions(+), 19 deletions(-)

New commits:
commit 359b53acdb14f1661e35c75d8c17fcac9b59faea
Author:     Luboš Luňák <l.lu...@collabora.com>
AuthorDate: Sat Nov 13 09:32:15 2021 +0100
Commit:     Luboš Luňák <l.lu...@collabora.com>
CommitDate: Sat Nov 13 13:43:39 2021 +0100

    do not rebuild PCHs on icecream/ccache change
    
    We turn -Wunused-macros on or off depending on whether icecream/ccache
    are used, and since now PCHs rebuild on CXXFLAGS changes, a plain
    temporary 'CCACHE_DISABLE=1' caused a rebuild.
    
    Change-Id: I63d539ac037d595f76a39e585011d1fde54f7f20
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/125125
    Tested-by: Jenkins
    Reviewed-by: Luboš Luňák <l.lu...@collabora.com>

diff --git a/solenv/gbuild/LinkTarget.mk b/solenv/gbuild/LinkTarget.mk
index 71be0790b59b..b0b716ace55b 100644
--- a/solenv/gbuild/LinkTarget.mk
+++ b/solenv/gbuild/LinkTarget.mk
@@ -1915,7 +1915,7 @@ $(call gb_LinkTarget_get_pch_reuse_timestamp,$(4)) : 
$(call gb_PrecompiledHeader
        $(call gb_PrecompiledHeader_check_flags,$(4),$(2),\
                $(call gb_PrecompiledHeader_get_target,$(3),$(4)),\
                $(call gb_PrecompiledHeader_get_flags_file,$(3),$(4)),\
-               $$(PCH_CXXFLAGS) $$(PCH_DEFS) $$(gb_LinkTarget_EXCEPTIONFLAGS))
+               $(gb_PrecompiledHeader_cxxflags_includes))
        $$(call gb_PrecompiledHeader__copy_reuse_files,$(1),$(3),$(4))
        mkdir -p $$(dir $$@) && touch $$@
 
diff --git a/solenv/gbuild/PrecompiledHeaders.mk 
b/solenv/gbuild/PrecompiledHeaders.mk
index 28f2308c8e92..73cc86c88ee7 100644
--- a/solenv/gbuild/PrecompiledHeaders.mk
+++ b/solenv/gbuild/PrecompiledHeaders.mk
@@ -36,6 +36,12 @@ ifneq ($(gb_ENABLE_PCH),)
 # for $(1)'s and things that are constant.
 # The defines are needed to get the right version of 
gb_PrecompiledHeader__get_debugdir.
 
+# all cxxflags to use for compilation
+gb_PrecompiledHeader_cxxflags_includes := $$(PCH_DEFS) $$(PCH_CXXFLAGS) 
$$(gb_PrecompiledHeader_EXCEPTIONFLAGS)
+# flags to save to the .flags file to check if they are the same as last time
+gb_PrecompiledHeader_flags_for_flags_file := $$(sort 
$(gb_PrecompiledHeader_cxxflags_includes)) \
+    $(if $(gb_PrecompiledHeader_ignore_flags_for_flags_file),| sed 
's/$(gb_PrecompiledHeader_ignore_flags_for_flags_file)//')
+
 # $(call 
gb_PrecompiledHeader_generate_rules,pchtarget,linktarget,linktargetmakefilename,pchcxxfile,compiler)
 define gb_PrecompiledHeader_generate_rules
 
@@ -48,8 +54,8 @@ $(call gb_PrecompiledHeader_get_dep_target,$(1),$(3)) :
 # change, and make the PCH depend on it => the PCH will be rebuilt on any 
flags change
 .PHONY: force
 $(call gb_PrecompiledHeader_get_flags_file,$(1),$(3)) : force
-       echo $$(sort $$(PCH_DEFS) $$(PCH_CXXFLAGS) 
$$(gb_PrecompiledHeader_EXCEPTIONFLAGS)) | cmp -s - $$@ \
-       || echo $$(sort $$(PCH_DEFS) $$(PCH_CXXFLAGS) 
$$(gb_PrecompiledHeader_EXCEPTIONFLAGS)) > $$@
+       echo $(gb_PrecompiledHeader_flags_for_flags_file) | cmp -s - $$@ \
+       || echo $(gb_PrecompiledHeader_flags_for_flags_file) > $$@
 
 # despite this being only one .d file, need to run concat-deps on it to
 # re-write external headers from UnpackedTarball
@@ -57,8 +63,8 @@ $(call gb_PrecompiledHeader_get_target,$(1),$(3)) :
        test "$$(PCH_LINKTARGETMAKEFILENAME)" = "$(3)" \
                 || ( echo "Error, PCH $(1) built by 
$$(PCH_LINKTARGETMAKEFILENAME) instead of $(3)" >&2; exit 1)
        rm -f $$@
-       $$(call 
gb_PrecompiledHeader__command,$$@,$(1),$$<,$$(PCH_DEFS),$$(PCH_CXXFLAGS) 
$$(gb_PrecompiledHeader_EXCEPTIONFLAGS),$$(INCLUDE),$(3),$(5))
-       $$(call 
gb_PrecompiledHeader__sum_command,$$@,$(1),$$<,$$(PCH_DEFS),$$(PCH_CXXFLAGS) 
$$(gb_PrecompiledHeader_EXCEPTIONFLAGS),$$(INCLUDE),$(3))
+       $$(call 
gb_PrecompiledHeader__command,$$@,$(1),$$<,$(gb_PrecompiledHeader_cxxflags_includes),$$(INCLUDE),$(3),$(5))
+       $$(call 
gb_PrecompiledHeader__sum_command,$$@,$(1),$$<,$(gb_PrecompiledHeader_cxxflags_includes),$$(INCLUDE),$(3))
 ifeq ($(gb_FULLDEPS),$(true))
        $$(call gb_Helper_abbreviate_dirs,\
                RESPONSEFILE=$$(call gb_var2file,$$(shell 
$$(gb_MKTEMP)),200,$$(call gb_PrecompiledHeader_get_dep_target_tmp,$(1),$(3))) 
&& \
diff --git a/solenv/gbuild/platform/com_GCC_class.mk 
b/solenv/gbuild/platform/com_GCC_class.mk
index 58ec04c513bb..ba12572f4341 100644
--- a/solenv/gbuild/platform/com_GCC_class.mk
+++ b/solenv/gbuild/platform/com_GCC_class.mk
@@ -129,51 +129,53 @@ endif
 # This is for MSVC's object file built directly as a side-effect of building 
the PCH.
 gb_PrecompiledHeader_get_objectfile =
 
+# $(call 
gb_PrecompiledHeader__command,pchfile,pchtarget,source,cxxflags,includes,linktargetmakefilename,compiler)
 define gb_PrecompiledHeader__command
 $(call gb_Output_announce,$(2),$(true),PCH,1)
        $(call gb_Trace_StartRange,$(2),PCH)
 $(call gb_Helper_abbreviate_dirs,\
-       mkdir -p $(dir $(1)) $(dir $(call 
gb_PrecompiledHeader_get_dep_target,$(2),$(7))) && \
+       mkdir -p $(dir $(1)) $(dir $(call 
gb_PrecompiledHeader_get_dep_target,$(2),$(6))) && \
        cd $(BUILDDIR)/ && \
        CCACHE_DISABLE=1 $(gb_COMPILER_SETUP) \
-       $(if $(8),$(8),$(gb_CXX)) \
+       $(if $(7),$(7),$(gb_CXX)) \
                -x c++-header $(gb_PrecompiledHeader_emit_pch) \
-               $(4) \
-               $(if $(7), $(call 
gb_CObject__filter_out_clang_cflags,$(5)),$(5)) \
+               $(if $(7), $(call 
gb_CObject__filter_out_clang_cflags,$(4)),$(4)) \
                $(if $(WARNINGS_DISABLED),$(gb_CXXFLAGS_DISABLE_WARNINGS)) \
                $(gb_COMPILERDEPFLAGS) \
                $(if $(VISIBILITY),,$(gb_VISIBILITY_FLAGS)) \
                $(if 
$(EXTERNAL_CODE),$(gb_CXXFLAGS_Wundef),$(gb_DEFS_INTERNAL)) \
                $(gb_NO_PCH_TIMESTAMP) \
                $(gb_PrecompiledHeader_extra_pch_cxxflags) \
-               $(6) \
-               $(call gb_cxx_dep_generation_options,$(1),$(call 
gb_PrecompiledHeader_get_dep_target_tmp,$(2),$(7))) \
+               $(5) \
+               $(call gb_cxx_dep_generation_options,$(1),$(call 
gb_PrecompiledHeader_get_dep_target_tmp,$(2),$(6))) \
                -c $(patsubst %.cxx,%.hxx,$(3)) \
                -o$(1) \
-               $(call gb_cxx_dep_copy,$(call 
gb_PrecompiledHeader_get_dep_target_tmp,$(2),$(7))) \
+               $(call gb_cxx_dep_copy,$(call 
gb_PrecompiledHeader_get_dep_target_tmp,$(2),$(6))) \
                )
        $(call gb_Trace_EndRange,$(2),PCH)
 endef
 
 ifeq ($(COM_IS_CLANG),TRUE)
 # Clang has -fno-pch-timestamp, just checksum the file for CCACHE_PCH_EXTSUM
+# $(call 
gb_PrecompiledHeader__sum_command,pchfile,pchtarget,source,cxxflags,includes,linktargetmakefilename)
 define gb_PrecompiledHeader__sum_command
        $(SHA256SUM) $(1) >$(1).sum
 endef
 else
 # GCC does not generate the same .gch for the same input, so checksum the 
(preprocessed) input
+# $(call 
gb_PrecompiledHeader__sum_command,pchfile,pchtarget,source,cxxflags,includes,linktargetmakefilename)
 define gb_PrecompiledHeader__sum_command
 $(call gb_Helper_abbreviate_dirs,\
        CCACHE_DISABLE=1 $(gb_COMPILER_SETUP) \
        $(gb_CXX) \
                -x c++-header \
-               $(4) $(5) \
+               $(4) \
                $(if $(WARNINGS_DISABLED),$(gb_CXXFLAGS_DISABLE_WARNINGS)) \
                $(gb_COMPILERDEPFLAGS) \
                $(if $(VISIBILITY),,$(gb_VISIBILITY_FLAGS)) \
                $(if 
$(EXTERNAL_CODE),$(gb_CXXFLAGS_Wundef),$(gb_DEFS_INTERNAL)) \
                $(gb_NO_PCH_TIMESTAMP) \
-               $(6) \
+               $(5) \
                -E $(patsubst %.cxx,%.hxx,$(3)) \
                -o- \
                | $(SHA256SUM) >$(1).sum \
diff --git a/solenv/gbuild/platform/com_GCC_defs.mk 
b/solenv/gbuild/platform/com_GCC_defs.mk
index 25c8de98f2c6..4e82b607d8b9 100644
--- a/solenv/gbuild/platform/com_GCC_defs.mk
+++ b/solenv/gbuild/platform/com_GCC_defs.mk
@@ -215,6 +215,11 @@ endif
 
 gb_PrecompiledHeader_EXCEPTIONFLAGS := $(gb_LinkTarget_EXCEPTIONFLAGS)
 
+# We turn on and off this one depending on whether icecream and/or ccache are 
used,
+# and changing cxxflags cause PCH rebuilds, so e.g. a plain temporary 
'CCACHE_DISABLE=1'
+# would cause a rebuild. Ignore the flag there, it's irrelevant for PCH use 
anyway.
+gb_PrecompiledHeader_ignore_flags_for_flags_file := $(gb_SPACE)-Wunused-macros
+
 # optimization level
 gb_COMPILERNOOPTFLAGS := -O0 -fstrict-aliasing -fstrict-overflow
 gb_COMPILERDEBUGOPTFLAGS := -Og
diff --git a/solenv/gbuild/platform/com_MSC_class.mk 
b/solenv/gbuild/platform/com_MSC_class.mk
index cdab01f87fa8..da5b682d6b8c 100644
--- a/solenv/gbuild/platform/com_MSC_class.mk
+++ b/solenv/gbuild/platform/com_MSC_class.mk
@@ -100,26 +100,28 @@ gb_PrecompiledHeader_EXT := .pch
 # MSVC PCH needs extra .obj created during the creation of the PCH file
 gb_PrecompiledHeader_get_objectfile = $(1).obj
 
+# $(call 
gb_PrecompiledHeader__command,pchfile,pchtarget,source,cxxflags,includes,linktargetmakefilename,compiler)
 define gb_PrecompiledHeader__command
 $(call gb_Output_announce,$(2),$(true),PCH,1)
        $(call gb_Trace_StartRange,$(2),PCH)
 $(call gb_Helper_abbreviate_dirs,\
-       mkdir -p $(dir $(1)) $(dir $(call 
gb_PrecompiledHeader_get_dep_target,$(2),$(7))) && \
+       mkdir -p $(dir $(1)) $(dir $(call 
gb_PrecompiledHeader_get_dep_target,$(2),$(6))) && \
        unset INCLUDE && \
-       $(call gb_CObject__compiler,$(4) $(5),$(3),$(8)) \
+       $(call gb_CObject__compiler,$(4),$(3),$(7)) \
                $(call gb_Helper_remove_overridden_flags, \
-                       $(4) $(5) $(if 
$(WARNINGS_DISABLED),$(gb_CXXFLAGS_DISABLE_WARNINGS))) \
+                       $(4) $(if 
$(WARNINGS_DISABLED),$(gb_CXXFLAGS_DISABLE_WARNINGS))) \
                -Fd$(PDBFILE) \
                $(if $(EXTERNAL_CODE),$(if 
$(COM_IS_CLANG),-Wno-undef),$(gb_DEFS_INTERNAL)) \
                $(if $(filter YES,$(LIBRARY_X64)), ,$(gb_LTOFLAGS)) \
                $(gb_COMPILERDEPFLAGS) \
-               $(6) \
+               $(5) \
                -c $(3) \
-               -Yc$(notdir $(patsubst %.cxx,%.hxx,$(3))) -Fp$(1) -Fo$(1).obj) 
$(call gb_create_deps,$(call 
gb_PrecompiledHeader_get_dep_target_tmp,$(2),$(7)),$(1),$(3))
+               -Yc$(notdir $(patsubst %.cxx,%.hxx,$(3))) -Fp$(1) -Fo$(1).obj) 
$(call gb_create_deps,$(call 
gb_PrecompiledHeader_get_dep_target_tmp,$(2),$(6)),$(1),$(3))
        $(call gb_Trace_EndRange,$(2),PCH)
 endef
 
 # No ccache with MSVC, no need to create a checksum for it.
+# $(call 
gb_PrecompiledHeader__sum_command,pchfile,pchtarget,source,cxxflags,includes,linktargetmakefilename)
 define gb_PrecompiledHeader__sum_command
 endef
 

Reply via email to