diff options
author | Luboš Luňák <l.lunak@collabora.com> | 2021-11-13 09:32:15 +0100 |
---|---|---|
committer | Luboš Luňák <l.lunak@collabora.com> | 2021-11-13 13:43:39 +0100 |
commit | 359b53acdb14f1661e35c75d8c17fcac9b59faea (patch) | |
tree | f30befe18d17de120c8a7442b622bec5504e6165 /solenv | |
parent | 7dc558c29841b9934d1fcadc19fa155b38374feb (diff) |
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.lunak@collabora.com>
Diffstat (limited to 'solenv')
-rw-r--r-- | solenv/gbuild/LinkTarget.mk | 2 | ||||
-rw-r--r-- | solenv/gbuild/PrecompiledHeaders.mk | 14 | ||||
-rw-r--r-- | solenv/gbuild/platform/com_GCC_class.mk | 20 | ||||
-rw-r--r-- | solenv/gbuild/platform/com_GCC_defs.mk | 5 | ||||
-rw-r--r-- | solenv/gbuild/platform/com_MSC_class.mk | 12 |
5 files changed, 34 insertions, 19 deletions
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 |