add gb_LinkTarget_reuse_precompiled_header
Similar to gb_LinkTarget_set_precompiled_header, but uses PCH created by another linktarget. This allows using a PCH even for linktargets that are small and creating their own dedicated PCHs is not worth it. The ultimate goal is having some default PCH that will be used if no explicit PCH is set. Change-Id: I4d72acdba7181bb5c7c1cdead776f548be36ba33 Reviewed-on: https://gerrit.libreoffice.org/79362 Tested-by: Jenkins Reviewed-by: Luboš Luňák <l.lunak@collabora.com>
This commit is contained in:
@@ -445,6 +445,7 @@ gb_CppunitTest_add_asmobjects = $(call gb_CppunitTest__forward_to_Linktarget,$(0
|
||||
gb_CppunitTest_use_package = $(call gb_CppunitTest__forward_to_Linktarget,$(0),$(1),$(2),$(3))
|
||||
gb_CppunitTest_use_packages = $(call gb_CppunitTest__forward_to_Linktarget,$(0),$(1),$(2),$(3))
|
||||
gb_CppunitTest_set_precompiled_header = $(call gb_CppunitTest__forward_to_Linktarget,$(0),$(1),$(2),$(3))
|
||||
gb_CppunitTest_reuse_precompiled_header = $(call gb_CppunitTest__forward_to_Linktarget,$(0),$(1),$(2),$(3))
|
||||
gb_CppunitTest_add_sdi_headers = $(call gb_CppunitTest__forward_to_Linktarget,$(0),$(1),$(2),$(3))
|
||||
gb_CppunitTest_add_cflags = $(call gb_CppunitTest__forward_to_Linktarget,$(0),$(1),$(2),$(3))
|
||||
gb_CppunitTest_set_cflags = $(call gb_CppunitTest__forward_to_Linktarget,$(0),$(1),$(2),$(3))
|
||||
|
||||
@@ -143,6 +143,7 @@ gb_Executable_use_packages = $(call gb_Executable__forward_to_Linktarget,$(0),$(
|
||||
gb_Executable_use_unpacked = $(call gb_Executable__forward_to_Linktarget,$(0),$(1),$(2),$(3))
|
||||
gb_Executable_add_sdi_headers = $(call gb_Executable__forward_to_Linktarget,$(0),$(1),$(2),$(3))
|
||||
gb_Executable_set_precompiled_header = $(call gb_Executable__forward_to_Linktarget,$(0),$(1),$(2),$(3))
|
||||
gb_Executable_reuse_precompiled_header = $(call gb_Executable__forward_to_Linktarget,$(0),$(1),$(2),$(3))
|
||||
gb_Executable_add_nativeres = $(call gb_Executable__forward_to_Linktarget,$(0),$(1),$(2),$(3))
|
||||
gb_Executable_set_warnings_not_errors = $(call gb_Executable__forward_to_Linktarget,$(0),$(1),$(2),$(3))
|
||||
gb_Executable_set_warnings_disabled = $(call gb_Executable__forward_to_Linktarget,$(0),$(1),$(2),$(3))
|
||||
|
||||
@@ -226,6 +226,7 @@ gb_Library_use_packages = $(call gb_Library__forward_to_Linktarget,$(0),$(1),$(2
|
||||
gb_Library_use_unpacked = $(call gb_Library__forward_to_Linktarget,$(0),$(1),$(2),$(3))
|
||||
gb_Library_add_sdi_headers = $(call gb_Library__forward_to_Linktarget,$(0),$(1),$(2),$(3))
|
||||
gb_Library_set_precompiled_header = $(call gb_Library__forward_to_Linktarget,$(0),$(1),$(2),$(3))
|
||||
gb_Library_reuse_precompiled_header = $(call gb_Library__forward_to_Linktarget,$(0),$(1),$(2),$(3))
|
||||
gb_Library_export_objects_list = $(call gb_Library__forward_to_Linktarget,$(0),$(1),$(2),$(3))
|
||||
gb_Library_add_nativeres = $(call gb_Library__forward_to_Linktarget,$(0),$(1),$(2),$(3))
|
||||
gb_Library_set_nativeres = $(call gb_Library__forward_to_Linktarget,$(0),$(1),$(2),$(3))
|
||||
|
||||
@@ -1525,13 +1525,8 @@ $(call gb_LinkTarget_get_clean_target,$(1)) : $(foreach sdi,$(2),$(call gb_SdiTa
|
||||
|
||||
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),$(4)) : $(call gb_CxxObject_get_source,$(SRCDIR),$(2))
|
||||
|
||||
$(call gb_PrecompiledHeader_get_target,$(3),$(4)) : $(call gb_LinkTarget_get_headers_target,$(1))
|
||||
|
||||
# call gb_LinkTarget__set_precompiled_header_variables,linktarget,pchcxxfile,pchtarget,linktargetmakefilename
|
||||
define gb_LinkTarget__set_precompiled_header_variables
|
||||
$(call gb_LinkTarget_get_target,$(1)) : PCH_NAME := $(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)))
|
||||
@@ -1543,10 +1538,21 @@ $(call gb_LinkTarget_get_target,$(1)) : PCH_CXXFLAGS := $$(T_CXXFLAGS) $(call gb
|
||||
$(call gb_LinkTarget_get_target,$(1)) : DEFS += -DPCH_LEVEL=$(gb_ENABLE_PCH)
|
||||
$(call gb_LinkTarget_get_target,$(1)) : PCH_DEFS += -DPCH_LEVEL=$(gb_ENABLE_PCH)
|
||||
|
||||
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),$(4)) : $(call gb_CxxObject_get_source,$(SRCDIR),$(2))
|
||||
|
||||
$(call gb_PrecompiledHeader_get_target,$(3),$(4)) : $(call gb_LinkTarget_get_headers_target,$(1))
|
||||
|
||||
$(call gb_PrecompiledHeader_get_target,$(3),$(4)) : VISIBILITY :=
|
||||
|
||||
$(call gb_LinkTarget_get_pch_timestamp,$(4)) : $(call gb_PrecompiledHeader_get_target,$(3),$(4))
|
||||
|
||||
$(call gb_LinkTarget__set_precompiled_header_variables,$(1),$(2),$(3),$(4))
|
||||
|
||||
ifeq ($(gb_FULLDEPS),$(true))
|
||||
-include $(call gb_PrecompiledHeader_get_dep_target,$(3),$(4))
|
||||
endif
|
||||
@@ -1562,6 +1568,27 @@ endif
|
||||
|
||||
endef
|
||||
|
||||
# call gb_LinkTarget__reuse_precompiled_header_impl,linktarget,pchcxxfile,pchtarget,linktargetmakefilename
|
||||
# Use the PCH as if it was LinkTarget's own, but do nothing with the PCH itself, just depend on it.
|
||||
define gb_LinkTarget__reuse_precompiled_header_impl
|
||||
$(call gb_LinkTarget__set_precompiled_header_variables,$(1),$(2),$(3),$(4))
|
||||
|
||||
$(call gb_LinkTarget_get_pch_timestamp,$(4)) : $(call gb_LinkTarget_get_pch_reuse_timestamp,$(4))
|
||||
|
||||
$(call gb_LinkTarget_get_pch_reuse_timestamp,$(4)) : $(call gb_PrecompiledHeader_get_target,$(3),$(4))
|
||||
$(call gb_PrecompiledHeader_check_flags,$(4),$(2),\
|
||||
$(call gb_PrecompiledHeader_get_target,$(3),$(4)),$$(PCH_CXXFLAGS) $$(PCH_DEFS) $$(gb_LinkTarget_EXCEPTIONFLAGS))
|
||||
|
||||
endef
|
||||
|
||||
# call gb_LinkTarget_reuse_precompiled_header,linktarget,pchcxxfile,,linktargetmakefilename
|
||||
define gb_LinkTarget_reuse_precompiled_header
|
||||
ifneq ($(gb_ENABLE_PCH),)
|
||||
$(call gb_LinkTarget__reuse_precompiled_header_impl,$(1),$(2),$(notdir $(2)),$(4))
|
||||
endif
|
||||
|
||||
endef
|
||||
|
||||
# use a header package, possibly from another module
|
||||
# call gb_LinkTarget_use_package,linktarget,package
|
||||
define gb_LinkTarget_use_package
|
||||
|
||||
@@ -43,6 +43,7 @@ $(call gb_PrecompiledHeader_get_target,$(1),$(2)) :
|
||||
rm -f $$@
|
||||
$$(call gb_PrecompiledHeader__command,$$@,$(1),$$<,$$(PCH_DEFS),$$(PCH_CXXFLAGS) $$(gb_PrecompiledHeader_EXCEPTIONFLAGS),$$(INCLUDE),$(2))
|
||||
$$(call gb_PrecompiledHeader__sum_command,$$@,$(1),$$<,$$(PCH_DEFS),$$(PCH_CXXFLAGS) $$(gb_PrecompiledHeader_EXCEPTIONFLAGS),$$(INCLUDE),$(2))
|
||||
echo $$(sort $$(PCH_DEFS) $$(PCH_CXXFLAGS) $$(gb_PrecompiledHeader_EXCEPTIONFLAGS)) > $$(call gb_PrecompiledHeader_get_target,$(1),$(2)).flags
|
||||
ifeq ($(gb_FULLDEPS),$(true))
|
||||
$$(call gb_Helper_abbreviate_dirs,\
|
||||
RESPONSEFILE=$$(call var2file,$$(shell $$(gb_MKTEMP)),200,$$(call gb_PrecompiledHeader_get_dep_target_tmp,$(1),$(2))) && \
|
||||
@@ -59,6 +60,7 @@ $(call gb_PrecompiledHeader_get_clean_target,$(1)) :
|
||||
$$(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_target,$(1),$(2)).flags \
|
||||
$$(call gb_PrecompiledHeader_get_dep_target,$(1),$(2)))
|
||||
|
||||
endef
|
||||
@@ -69,6 +71,25 @@ endif
|
||||
define gb_PrecompiledHeader_generate_timestamp_rule
|
||||
$(call gb_LinkTarget_get_pch_timestamp,$(1)) :
|
||||
mkdir -p $$(dir $$@) && touch $$@
|
||||
|
||||
endef
|
||||
|
||||
# $(call gb_PrecompiledHeader_check_saved_flags_command_pattern,linktargetmakefilename,pchcxxfile,pchfile,flags)
|
||||
# When creating a PCH, the PCH's CXXFLAGS are saved to a matching .flags file. When reusing the PCH
|
||||
# from another linktarget, use the file to check that the linktarget uses the same CXXFLAGS as the PCH.
|
||||
# This complements the check in gb_CxxObject__set_pchflags.
|
||||
define gb_PrecompiledHeader_check_flags
|
||||
$$(call gb_Helper_abbreviate_dirs,\
|
||||
grep -q -x -F -- "$$(sort $(4))" $(3).flags || ( \
|
||||
echo Error reusing $(2) by $(1). >&2 && \
|
||||
echo -n " precompiled header flags : ">&2 && \
|
||||
cat $(3).flags >&2 && \
|
||||
echo " object flags : "$$(sort $(4)) >&2 && \
|
||||
echo Incorrect precompiled header setup or internal gbuild error. >&2 ; \
|
||||
exit 1) && \
|
||||
mkdir -p $$(dir $$@) && touch $$@ \
|
||||
)
|
||||
|
||||
endef
|
||||
|
||||
# vim: set noet sw=4:
|
||||
|
||||
@@ -114,6 +114,7 @@ gb_StaticLibrary_use_external_project = $(call gb_StaticLibrary__forward_to_Link
|
||||
gb_StaticLibrary_use_static_libraries = $(call gb_StaticLibrary__forward_to_Linktarget,$(0),$(1),$(2),$(3))
|
||||
gb_StaticLibrary_add_sdi_headers = $(call gb_StaticLibrary__forward_to_Linktarget,$(0),$(1),$(2),$(3))
|
||||
gb_StaticLibrary_set_precompiled_header = $(call gb_StaticLibrary__forward_to_Linktarget,$(0),$(1),$(2),$(3))
|
||||
gb_StaticLibrary_reuse_precompiled_header = $(call gb_StaticLibrary__forward_to_Linktarget,$(0),$(1),$(2),$(3))
|
||||
gb_StaticLibrary_set_warnings_not_errors = $(call gb_StaticLibrary__forward_to_Linktarget,$(0),$(1),$(2),$(3))
|
||||
gb_StaticLibrary_set_warnings_disabled = $(call gb_StaticLibrary__forward_to_Linktarget,$(0),$(1),$(2),$(3))
|
||||
gb_StaticLibrary_set_external_code = $(call gb_StaticLibrary__forward_to_Linktarget,$(0),$(1),$(2),$(3))
|
||||
|
||||
@@ -122,6 +122,7 @@ gb_LinkTarget_get_clean_target = \
|
||||
$(WORKDIR)/Clean/LinkTarget/$(call gb_LinkTarget__get_workdir_linktargetname,$(1))
|
||||
gb_LinkTarget_get_target = $(lastword $(subst <>, ,$(1)))
|
||||
gb_LinkTarget_get_pch_timestamp = $(WORKDIR)/PrecompiledHeader/$(call gb_PrecompiledHeader__get_debugdir,$(1))/Timestamps/$(1)
|
||||
gb_LinkTarget_get_pch_reuse_timestamp = $(WORKDIR)/PrecompiledHeader/$(call gb_PrecompiledHeader__get_debugdir,$(1))/Timestamps/$(1)_reuse
|
||||
gb_Module_get_nonl10n_target = $(WORKDIR)/Module/nonl10n/$(1)
|
||||
gb_Module_get_l10n_target = $(WORKDIR)/Module/l10n/$(1)
|
||||
gb_Module_get_check_target = $(WORKDIR)/Module/check/$(1)
|
||||
|
||||
Reference in New Issue
Block a user