diff options
author | Luboš Luňák <l.lunak@collabora.com> | 2019-04-07 12:06:19 +0200 |
---|---|---|
committer | Luboš Luňák <l.lunak@collabora.com> | 2019-04-11 12:21:08 +0200 |
commit | 3d3826dae92a8bd4671717d92f497db57f6424d1 (patch) | |
tree | d5d1e62cd4ca1db34f340f92fb3613edb007db6d /solenv | |
parent | eeeec33ada5923f1f534334b22c15d6e2c6f1d35 (diff) |
fix getting correct debug/nodebug PCH file with selective debuginfo
Since debuginfo enabled/disabled is per-linktarget, the rules need
to be per-linktarget as well, and so instead of one generic rule
there needs to be a define generating one rule per each linktarget.
Change-Id: I9423c4a86bc02aa3c0bf816f47e3c3d43ff03b23
Reviewed-on: https://gerrit.libreoffice.org/70370
Tested-by: Jenkins
Reviewed-by: Luboš Luňák <l.lunak@collabora.com>
Diffstat (limited to 'solenv')
-rw-r--r-- | solenv/gbuild/LinkTarget.mk | 27 | ||||
-rw-r--r-- | solenv/gbuild/PrecompiledHeaders.mk | 65 | ||||
-rw-r--r-- | solenv/gbuild/TargetLocations.mk | 8 | ||||
-rw-r--r-- | solenv/gbuild/platform/com_GCC_class.mk | 12 | ||||
-rw-r--r-- | solenv/gbuild/platform/com_MSC_class.mk | 6 |
5 files changed, 67 insertions, 51 deletions
diff --git a/solenv/gbuild/LinkTarget.mk b/solenv/gbuild/LinkTarget.mk index 33579bf0e99f..3e2d19e58956 100644 --- a/solenv/gbuild/LinkTarget.mk +++ b/solenv/gbuild/LinkTarget.mk @@ -271,7 +271,7 @@ define gb_CxxObject__set_pchflags ifeq ($(gb_ENABLE_PCH),$(true)) ifneq ($(strip $$(PCH_NAME)),) ifeq ($$(sort $$(PCH_CXXFLAGS) $$(PCH_DEFS) $$(gb_LinkTarget_EXCEPTIONFLAGS)),$$(sort $$(T_CXXFLAGS) $$(T_CXXFLAGS_APPEND) $$(DEFS))) -$$@ : PCHFLAGS := $$(call gb_PrecompiledHeader_get_enableflags,$$(PCH_NAME)) +$$@ : PCHFLAGS := $$(call gb_PrecompiledHeader_get_enableflags,$$(PCH_NAME),$$(PCH_LINKTARGETMAKEFILENAME)) else $$(info No precompiled header available for $$*.cxx .) $$(info precompiled header flags : $$(sort $$(PCH_CXXFLAGS) $$(PCH_DEFS) $$(gb_LinkTarget_EXCEPTIONFLAGS))) @@ -777,6 +777,7 @@ $(call gb_LinkTarget_get_target,$(1)) : T_LIBS := $(call gb_LinkTarget_get_target,$(1)) : TARGETTYPE := $(call gb_LinkTarget_get_target,$(1)) : LIBRARY_X64 := $(call gb_LinkTarget_get_target,$(1)) : PCH_NAME := +$(call gb_LinkTarget_get_target,$(1)) : PCH_LINKTARGETMAKEFILENAME := $(call gb_LinkTarget_get_target,$(1)) : PCHOBJS := $(call gb_LinkTarget_get_target,$(1)) : PCHOBJEX := $(call gb_LinkTarget_get_target,$(1)) : PCHOBJNOEX := @@ -816,6 +817,8 @@ gb_LinkTarget_CXX_SUFFIX_$(call gb_LinkTarget__get_workdir_linktargetname,$(1)) # installed linktargets need a rule to build! $(if $(findstring $(INSTDIR),$(1)),$(call gb_LinkTarget__make_installed_rule,$(1))) +$(call gb_PrecompiledHeader_generate_timestamp_rule,$(2)) + endef # call gb_LinkTarget_set_soversion_script,linktarget,soversionscript @@ -1119,7 +1122,7 @@ $(call gb_CxxObject_get_target,$(2)) : T_CXXFLAGS += $(3) $(call gb_CxxObject_get_target,$(2)) : \ OBJECTOWNER := $(call gb_Object__owner,$(2),$(1)) ifeq ($(gb_ENABLE_PCH),$(true)) -$(call gb_CxxObject_get_target,$(2)) : $(call gb_PrecompiledHeader_get_timestamp,$(call gb_LinkTarget__get_workdir_linktargetname,$(1))) +$(call gb_CxxObject_get_target,$(2)) : $(call gb_PrecompiledHeader_get_timestamp,$(4)) endif ifeq ($(gb_FULLDEPS),$(true)) @@ -1256,7 +1259,7 @@ $(call gb_GenCxxObject_get_target,$(2)) : \ OBJECTOWNER := $(call gb_Object__owner,$(2),$(1)) $(call gb_GenCxxObject_get_target,$(2)) : GEN_CXX_SOURCE := $(call gb_GenCxxObject_get_source,$(2),$(1)) ifeq ($(gb_ENABLE_PCH),$(true)) -$(call gb_GenCxxObject_get_target,$(2)) : $(call gb_PrecompiledHeader_get_timestamp,$(call gb_LinkTarget__get_workdir_linktargetname,$(1))) +$(call gb_GenCxxObject_get_target,$(2)) : $(call gb_PrecompiledHeader_get_timestamp,$(4)) endif ifeq ($(gb_FULLDEPS),$(true)) @@ -1502,31 +1505,33 @@ endef # call gb_LinkTarget__set_precompiled_header_impl,linktarget,pchcxxfile,pchtarget,linktargetmakefilename define gb_LinkTarget__set_precompiled_header_impl $(call gb_LinkTarget_get_clean_target,$(1)) : $(call gb_PrecompiledHeader_get_clean_target,$(3)) -$(call gb_PrecompiledHeader_get_target,$(3)) : $(2).cxx +$(call gb_PrecompiledHeader_get_target,$(3),$(4)) : $(2).cxx -$(call gb_PrecompiledHeader_get_target,$(3)) : $(call gb_LinkTarget_get_headers_target,$(1)) +$(call gb_PrecompiledHeader_get_target,$(3),$(4)) : $(call gb_LinkTarget_get_headers_target,$(1)) $(call gb_LinkTarget_get_target,$(1)) : PCH_NAME := $(3) -$(call gb_LinkTarget_get_target,$(1)) : PCHOBJEX = $(call gb_PrecompiledHeader_get_objectfile, $(call gb_PrecompiledHeader_get_target,$(3))) +$(call gb_LinkTarget_get_target,$(1)) : PCH_LINKTARGETMAKEFILENAME := $(4) +$(call gb_LinkTarget_get_target,$(1)) : PCHOBJEX = $(call gb_PrecompiledHeader_get_objectfile, $(call gb_PrecompiledHeader_get_target,$(3),$(4))) $(call gb_LinkTarget_get_target,$(1)) : PCHOBJS = $$(PCHOBJEX) $(call gb_LinkTarget_get_target,$(1)) : PCH_DEFS := $$(DEFS) $(call gb_LinkTarget_get_target,$(1)) : PCH_CXXFLAGS := $$(T_CXXFLAGS) $(call gb_LinkTarget__get_cxxflags,$(4)) -$(call gb_PrecompiledHeader_get_target,$(3)) : VISIBILITY := +$(call gb_PrecompiledHeader_get_target,$(3),$(4)) : VISIBILITY := -$(call gb_PrecompiledHeader_get_timestamp,$(call gb_LinkTarget__get_workdir_linktargetname,$(1))) : $(call gb_PrecompiledHeader_get_target,$(3)) +$(call gb_PrecompiledHeader_get_timestamp,$(4)) : $(call gb_PrecompiledHeader_get_target,$(3),$(4)) ifeq ($(gb_FULLDEPS),$(true)) --include $(call gb_PrecompiledHeader_get_dep_target,$(3)) +-include $(call gb_PrecompiledHeader_get_dep_target,$(3),$(4)) endif endef -# call gb_LinkTarget_set_precompiled_header,linktarget,pchcxxfile,linktargetmakefilename +# call gb_LinkTarget_set_precompiled_header,linktarget,pchcxxfile,,linktargetmakefilename define gb_LinkTarget_set_precompiled_header ifeq ($(gb_ENABLE_PCH),$(true)) $(call gb_LinkTarget__set_precompiled_header_impl,$(1),$(2),$(notdir $(2)),$(4)) +$(call gb_PrecompiledHeader_generate_rules,$(notdir $(2)),$(4)) endif endef @@ -1590,7 +1595,7 @@ define gb_LinkTarget_set_visibility_default $(call gb_LinkTarget_get_target,$(1)) : VISIBILITY := default ifeq ($(gb_ENABLE_PCH),$(true)) ifneq ($(strip $$(PCH_NAME)),) -$(call gb_PrecompiledHeader_get_target,$$(PCH_NAME)) : VISIBILITY := default +$(call gb_PrecompiledHeader_get_target,$$(PCH_NAME),$$(PCH_LINKTARGETMAKEFILENAME)) : VISIBILITY := default endif endif diff --git a/solenv/gbuild/PrecompiledHeaders.mk b/solenv/gbuild/PrecompiledHeaders.mk index 2da085512ec2..e5635e816b42 100644 --- a/solenv/gbuild/PrecompiledHeaders.mk +++ b/solenv/gbuild/PrecompiledHeaders.mk @@ -23,42 +23,53 @@ ifeq ($(gb_ENABLE_PCH),$(true)) # Use different PCH file depending on whether we use debugging symbols. -# TODO: This doesn't work because T_SYMBOLS is not expanded as/when necessary. -gb_PrecompiledHeader__get_debugdir := $(if $(filter $(true),$(T_SYMBOLS)),debug,nodebug) +gb_PrecompiledHeader__get_debugdir = $(if $(call gb_LinkTarget__symbols_enabled,$(1)),debug,nodebug) -$(call gb_PrecompiledHeader_get_dep_target,%) : - $(call gb_Helper_abbreviate_dirs,\ - mkdir -p $(dir $@) && \ - echo "$(call gb_PrecompiledHeader_get_target,$*) : $(gb_Helper_PHONY)" > $@) +# IMPORTANT: Since these defines get expanded, every $ needs to be doubled to $$, except +# for $(1)'s and things that are constant. +# The defines are needed to get the right version of gb_PrecompiledHeader__get_debugdir. + +# $(call gb_PrecompiledHeader_generate_rules,pchtarget,linktargetmakefilename) +define gb_PrecompiledHeader_generate_rules + +$(call gb_PrecompiledHeader_get_dep_target,$(1),$(2)) : + $$(call gb_Helper_abbreviate_dirs,\ + mkdir -p $$(dir $$@) && \ + echo "$$(call gb_PrecompiledHeader_get_target,$(1),$(2)) : $$(gb_Helper_PHONY)" > $$@) # despite this being only one .d file, need to run concat-deps on it to # re-write external headers from UnpackedTarball -$(call gb_PrecompiledHeader_get_target,%) : - rm -f $@ - $(call gb_PrecompiledHeader__command,$@,$*,$<,$(PCH_DEFS),$(PCH_CXXFLAGS) $(gb_PrecompiledHeader_EXCEPTIONFLAGS),$(INCLUDE)) - $(SHA256SUM) $@ >$@.sum +$(call gb_PrecompiledHeader_get_target,$(1),$(2)) : + rm -f $$@ + $$(call gb_PrecompiledHeader__command,$$@,$(1),$$<,$$(PCH_DEFS),$$(PCH_CXXFLAGS) $$(gb_PrecompiledHeader_EXCEPTIONFLAGS),$$(INCLUDE),$(2)) + $(SHA256SUM) $$@ >$$@.sum ifeq ($(gb_FULLDEPS),$(true)) - $(call gb_Helper_abbreviate_dirs,\ - RESPONSEFILE=$(call var2file,$(shell $(gb_MKTEMP)),200,$(call gb_PrecompiledHeader_get_dep_target_tmp,$*)) && \ - $(call gb_Executable_get_command,concat-deps) $${RESPONSEFILE} \ - > $(call gb_PrecompiledHeader_get_dep_target,$*) && \ - rm -f $${RESPONSEFILE} $(call gb_PrecompiledHeader_get_dep_target_tmp,$*)) + $$(call gb_Helper_abbreviate_dirs,\ + RESPONSEFILE=$$(call var2file,$$(shell $$(gb_MKTEMP)),200,$$(call gb_PrecompiledHeader_get_dep_target_tmp,$(1),$(2))) && \ + $$(call gb_Executable_get_command,concat-deps) $$$${RESPONSEFILE} \ + > $$(call gb_PrecompiledHeader_get_dep_target,$(1),$(2)) && \ + rm -f $$$${RESPONSEFILE} $$(call gb_PrecompiledHeader_get_dep_target_tmp,$(1),$(2))) endif -.PHONY : $(call gb_PrecompiledHeader_get_clean_target,%) -$(call gb_PrecompiledHeader_get_clean_target,%) : - $(call gb_Output_announce,$*,$(false),PCH,1) - -$(call gb_Helper_abbreviate_dirs,\ - rm -f $(call gb_PrecompiledHeader_get_target,$*) \ - $(call gb_PrecompiledHeader_get_target,$*).obj \ - $(call gb_PrecompiledHeader_get_target,$*).pdb \ - $(call gb_PrecompiledHeader_get_target,$*).sum \ - $(call gb_PrecompiledHeader_get_timestamp,$*) \ - $(call gb_PrecompiledHeader_get_dep_target,$*)) +.PHONY : $(call gb_PrecompiledHeader_get_clean_target,$(1)) +$(call gb_PrecompiledHeader_get_clean_target,$(1)) : + $$(call gb_Output_announce,$(1),$(false),PCH,1) + -$$(call gb_Helper_abbreviate_dirs,\ + rm -f $$(call gb_PrecompiledHeader_get_target,$(1),$(2)) \ + $$(call gb_PrecompiledHeader_get_target,$(1),$(2)).obj \ + $$(call gb_PrecompiledHeader_get_target,$(1),$(2)).pdb \ + $$(call gb_PrecompiledHeader_get_target,$(1),$(2)).sum \ + $$(call gb_PrecompiledHeader_get_timestamp,$(2)) \ + $$(call gb_PrecompiledHeader_get_dep_target,$(1),$(2))) + +endef endif -$(call gb_PrecompiledHeader_get_timestamp,%) : - mkdir -p $(dir $@) && touch $@ +# $(call gb_PrecompiledHeader_generate_timestamp_rule,linktargetmakefilename) +define gb_PrecompiledHeader_generate_timestamp_rule +$(call gb_PrecompiledHeader_get_timestamp,$(1)) : + mkdir -p $$(dir $$@) && touch $$@ +endef # vim: set noet sw=4: diff --git a/solenv/gbuild/TargetLocations.mk b/solenv/gbuild/TargetLocations.mk index 5aa3125b8d2b..02df6229a541 100644 --- a/solenv/gbuild/TargetLocations.mk +++ b/solenv/gbuild/TargetLocations.mk @@ -146,10 +146,10 @@ gb_Package_get_target_for_build = $(WORKDIR_FOR_BUILD)/Package/$(1).filelist gb_PackageSet_get_target = $(WORKDIR)/PackageSet/$(1).filelist gb_PackageInfo_get_target = $(WORKDIR)/PackageInfo gb_Postprocess_get_target = $(WORKDIR)/Postprocess/$(1) -gb_PrecompiledHeader_get_dep_target = $(WORKDIR)/Dep/PrecompiledHeader/$(call gb_PrecompiledHeader__get_debugdir)/$(1).hxx.gch.d -gb_PrecompiledHeader_get_dep_target_tmp = $(call gb_PrecompiledHeader_get_dep_target,$(1)).tmp -gb_PrecompiledHeader_get_target = $(WORKDIR)/PrecompiledHeader/$(call gb_PrecompiledHeader__get_debugdir)/$(1).hxx.gch -gb_PrecompiledHeader_get_timestamp = $(WORKDIR)/PrecompiledHeader/$(call gb_PrecompiledHeader__get_debugdir)/Timestamps/$(1) +gb_PrecompiledHeader_get_dep_target = $(WORKDIR)/Dep/PrecompiledHeader/$(call gb_PrecompiledHeader__get_debugdir,$(2))/$(1).hxx.gch.d +gb_PrecompiledHeader_get_dep_target_tmp = $(call gb_PrecompiledHeader_get_dep_target,$(1),$(2)).tmp +gb_PrecompiledHeader_get_target = $(WORKDIR)/PrecompiledHeader/$(call gb_PrecompiledHeader__get_debugdir,$(2))/$(1).hxx.gch +gb_PrecompiledHeader_get_timestamp = $(WORKDIR)/PrecompiledHeader/$(call gb_PrecompiledHeader__get_debugdir,$(1))/Timestamps/$(1) gb_PropertiesTranslateTarget_get_target = $(WORKDIR)/PropertiesTranslateTarget/$(1).properties gb_Pyuno_get_final_target = $(WORKDIR)/Pyuno/$(1).final gb_Pyuno_get_target = $(WORKDIR)/Pyuno/$(1).done diff --git a/solenv/gbuild/platform/com_GCC_class.mk b/solenv/gbuild/platform/com_GCC_class.mk index a5059152a0cb..282aacbfd9ec 100644 --- a/solenv/gbuild/platform/com_GCC_class.mk +++ b/solenv/gbuild/platform/com_GCC_class.mk @@ -79,10 +79,10 @@ endef # PrecompiledHeader class ifeq ($(COM_IS_CLANG),TRUE) -gb_PrecompiledHeader_get_enableflags = -include-pch $(call gb_PrecompiledHeader_get_target,$(1)) +gb_PrecompiledHeader_get_enableflags = -include-pch $(call gb_PrecompiledHeader_get_target,$(1),$(2)) else -gb_PrecompiledHeader_get_enableflags = -include $(notdir $(subst .gch,,$(call gb_PrecompiledHeader_get_target,$(1)))) \ - -I $(dir $(call gb_PrecompiledHeader_get_target,$(1))) +gb_PrecompiledHeader_get_enableflags = -include $(notdir $(subst .gch,,$(call gb_PrecompiledHeader_get_target,$(1),$(2)))) \ + -I $(dir $(call gb_PrecompiledHeader_get_target,$(1),$(2))) endif # Clang and gcc do not need any extra .o file for PCH @@ -91,7 +91,7 @@ gb_PrecompiledHeader_get_objectfile = define gb_PrecompiledHeader__command $(call gb_Output_announce,$(2),$(true),PCH,1) $(call gb_Helper_abbreviate_dirs,\ - mkdir -p $(dir $(1)) $(dir $(call gb_PrecompiledHeader_get_dep_target,$(2))) && \ + mkdir -p $(dir $(1)) $(dir $(call gb_PrecompiledHeader_get_dep_target,$(2),$(7))) && \ $(gb_CXX) \ -x c++-header \ $(4) $(5) \ @@ -99,10 +99,10 @@ $(call gb_Helper_abbreviate_dirs,\ $(if $(VISIBILITY),,$(gb_VISIBILITY_FLAGS)) \ $(if $(EXTERNAL_CODE),$(gb_CXXFLAGS_Wundef),$(gb_DEFS_INTERNAL)) \ $(6) \ - $(call gb_cxx_dep_generation_options,$(1),$(call gb_PrecompiledHeader_get_dep_target_tmp,$(2))) \ + $(call gb_cxx_dep_generation_options,$(1),$(call gb_PrecompiledHeader_get_dep_target_tmp,$(2),$(7))) \ -c $(patsubst %.cxx,%.hxx,$(3)) \ -o$(1) \ - $(call gb_cxx_dep_copy,$(call gb_PrecompiledHeader_get_dep_target_tmp,$(2))) \ + $(call gb_cxx_dep_copy,$(call gb_PrecompiledHeader_get_dep_target_tmp,$(2),$(7))) \ ) endef diff --git a/solenv/gbuild/platform/com_MSC_class.mk b/solenv/gbuild/platform/com_MSC_class.mk index 30ebb82c7e39..346c67cd7f7c 100644 --- a/solenv/gbuild/platform/com_MSC_class.mk +++ b/solenv/gbuild/platform/com_MSC_class.mk @@ -68,7 +68,7 @@ endef gb_PrecompiledHeader_get_enableflags = -Yu$(1).hxx \ -FI$(1).hxx \ - -Fp$(call gb_PrecompiledHeader_get_target,$(1)) \ + -Fp$(call gb_PrecompiledHeader_get_target,$(1),$(2)) \ $(gb_PCHWARNINGS) # MSVC PCH needs extra .obj created during the creation of the PCH file @@ -77,7 +77,7 @@ gb_PrecompiledHeader_get_objectfile = $(1).obj define gb_PrecompiledHeader__command $(call gb_Output_announce,$(2),$(true),PCH,1) $(call gb_Helper_abbreviate_dirs,\ - mkdir -p $(dir $(1)) $(dir $(call gb_PrecompiledHeader_get_dep_target,$(2))) && \ + mkdir -p $(dir $(1)) $(dir $(call gb_PrecompiledHeader_get_dep_target,$(2),$(7))) && \ unset INCLUDE && \ $(gb_CXX) \ $(4) $(5) -Fd$(PDBFILE) \ @@ -86,7 +86,7 @@ $(call gb_Helper_abbreviate_dirs,\ $(gb_COMPILERDEPFLAGS) \ $(6) \ -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)),$(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),$(7)),$(1),$(3)) endef # AsmObject class |