summaryrefslogtreecommitdiff
path: root/solenv
diff options
context:
space:
mode:
authorJan-Marek Glogowski <glogow@fbihome.de>2021-05-21 15:41:15 +0200
committerThorsten Behrens <thorsten.behrens@allotropia.de>2022-01-13 12:13:06 +0100
commitb04be559ddf4a7f0a5cdc0b9abc2bcfc4aae25cc (patch)
tree5039325838737ea54bce241b9afc4413848f9253 /solenv
parentd6496fce2e51a3e44753e6b5c462824f182b48d5 (diff)
gbuild: implement static partial build
This stores all the dependencies collected from the full build, and uses that info to link static binaries in per module. Change-Id: I27bd41c217bf0d2248ee88004038dd6b813f2624 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/128129 Tested-by: Jenkins Reviewed-by: Michael Stahl <michael.stahl@allotropia.de> Reviewed-by: Thorsten Behrens <thorsten.behrens@allotropia.de>
Diffstat (limited to 'solenv')
-rw-r--r--solenv/gbuild/ExternalProject.mk4
-rw-r--r--solenv/gbuild/LinkTarget.mk45
-rw-r--r--solenv/gbuild/TargetLocations.mk7
-rw-r--r--solenv/gbuild/partial_build.mk4
-rw-r--r--solenv/gbuild/static.mk42
5 files changed, 99 insertions, 3 deletions
diff --git a/solenv/gbuild/ExternalProject.mk b/solenv/gbuild/ExternalProject.mk
index 6f703f256174..94f8daee37fc 100644
--- a/solenv/gbuild/ExternalProject.mk
+++ b/solenv/gbuild/ExternalProject.mk
@@ -184,9 +184,9 @@ endef
#
# gb_ExternalProject_use_libraries external libraries
define gb_ExternalProject_use_libraries
-ifneq (,$$(filter-out $(gb_Library_KNOWNLIBS),$(2)))
+ifneq (,$$(filter-out $(gb_Library_KNOWNLIBS) $(gb_LinkTarget__syslib),$(2)))
$$(eval $$(call gb_Output_info,currently known libraries are: $(sort $(gb_Library_KNOWNLIBS)),ALL))
-$$(eval $$(call gb_Output_error,Cannot link against library/libraries $$(filter-out $(gb_Library_KNOWNLIBS),$(2)). Libraries must be registered in Repository.mk or RepositoryExternal.mk))
+$$(eval $$(call gb_Output_error,Cannot link against library/libraries $$(filter-out $(gb_Library_KNOWNLIBS) $(gb_LinkTarget__syslib),$(2)). Libraries must be registered in Repository.mk or RepositoryExternal.mk))
endif
ifneq (,$$(filter $$(gb_MERGEDLIBS),$(2)))
$$(eval $$(call gb_Output_error,Cannot link against library/libraries $$(filter $$(gb_MERGEDLIBS),$(2)) because they are merged.))
diff --git a/solenv/gbuild/LinkTarget.mk b/solenv/gbuild/LinkTarget.mk
index b7cada89523b..a4cbaf65bdd3 100644
--- a/solenv/gbuild/LinkTarget.mk
+++ b/solenv/gbuild/LinkTarget.mk
@@ -763,6 +763,11 @@ $(WORKDIR)/Clean/LinkTarget/% :
$(foreach object,$(GENCXXCLROBJECTS),$(call gb_GenCxxClrObject_get_dwo_target,$(object))) \
$(call gb_LinkTarget_get_target,$(LINKTARGET)) \
$(call gb_LinkTarget_get_dep_target,$(LINKTARGET)) \
+ $(if $(gb_PARTIAL_BUILD),, \
+ $(call gb_LinkTarget_get_dep_libraries_target,$(LINKTARGET)) \
+ $(call gb_LinkTarget_get_dep_externals_target,$(LINKTARGET)) \
+ $(call gb_LinkTarget_get_dep_statics_target,$(LINKTARGET)) \
+ ) \
$(call gb_LinkTarget_get_headers_target,$(LINKTARGET)) \
$(call gb_LinkTarget_get_objects_list,$(LINKTARGET)) \
$(call gb_LinkTarget_get_pch_timestamp,$(LINKTARGETMAKEFILENAME)) \
@@ -856,6 +861,13 @@ endef
# call gb_LinkTarget__command_impl,linktargettarget,linktargetname
define gb_LinkTarget__command_impl
$(if $(gb_FULLDEPS),
+ $(if $(ENABLE_CUSTOMTARGET_COMPONENTS),$(if $(gb_PARTIAL_BUILD),,
+ $(call gb_LinkTarget__command_dep_libraries,$(call gb_LinkTarget_get_dep_libraries_target,$(2)).tmp,$(2))
+ mv $(call gb_LinkTarget_get_dep_libraries_target,$(2)).tmp $(call gb_LinkTarget_get_dep_libraries_target,$(2))
+ $(call gb_LinkTarget__command_dep_externals,$(call gb_LinkTarget_get_dep_externals_target,$(2)).tmp,$(2))
+ mv $(call gb_LinkTarget_get_dep_externals_target,$(2)).tmp $(call gb_LinkTarget_get_dep_externals_target,$(2))
+ $(call gb_LinkTarget__command_dep_statics,$(call gb_LinkTarget_get_dep_statics_target,$(2)).tmp,$(2))
+ mv $(call gb_LinkTarget_get_dep_statics_target,$(2)).tmp $(call gb_LinkTarget_get_dep_statics_target,$(2))))
$(if $(findstring concat-deps,$(2)),,
$(call gb_LinkTarget__command_dep,$(call gb_LinkTarget_get_dep_target,$(2)).tmp,$(2))
mv $(call gb_LinkTarget_get_dep_target,$(2)).tmp $(call gb_LinkTarget_get_dep_target,$(2))))
@@ -872,6 +884,35 @@ endef
ifeq ($(gb_FULLDEPS),$(true))
$(call gb_LinkTarget_get_dep_target,%) : $(call gb_Executable_get_runtime_dependencies,concat-deps)
$(call gb_LinkTarget__command_dep,$@,$*)
+
+$(dir $(call gb_LinkTarget_get_dep_target,%))/.dir :
+ $(if $(wildcard $(dir $@)),,mkdir -p $(dir $@))
+
+ifeq ($(ENABLE_CUSTOMTARGET_COMPONENTS),TRUE)
+ifeq (,$(gb_PARTIAL_BUILD))
+
+define gb_LinkTarget__static_dep_x_template
+
+define gb_LinkTarget__command_dep_$(1)
+$$(call gb_Output_announce,LNK:$$(2).d.$(1),$$(true),DEP,1)
+mkdir -p $$(dir $$(1)) && \
+TEMPFILE=$$(call gb_var2file,$$(shell $$(gb_MKTEMP)),200,\
+ $$(call gb_LinkTarget__get_all_$(1),$$(2))) && \
+ $$(call gb_Helper_replace_if_different_and_touch,$$$${TEMPFILE},$$(1))
+
+endef
+
+$$(call gb_LinkTarget_get_dep_$(1)_target,%) : ;
+ $$(call gb_LinkTarget__command_dep_$(1),$$@,$$*)
+
+endef # gb_LinkTarget__static_dep_x_template
+
+$(eval $(call gb_LinkTarget__static_dep_x_template,libraries))
+$(eval $(call gb_LinkTarget__static_dep_x_template,externals))
+$(eval $(call gb_LinkTarget__static_dep_x_template,statics))
+
+endif # !gb_PARTIAL_BUILD
+endif # ENABLE_CUSTOMTARGET_COMPONENTS
endif # gb_FULLDEPS
# Ok, this is some dark voodoo: When declaring a linktarget with
@@ -1139,8 +1180,10 @@ $(if $(call gb_LinkTarget__is_merged,$(1)),\
ifeq ($(ENABLE_CUSTOMTARGET_COMPONENTS),TRUE)
$(if $(gb_DEBUG_STATIC),$$(info $$(call gb_LinkTarget__get_all_libraries_var,$(1)) += $(filter-out $(call gb_LinkTarget__get_all_libraries,$(1)),$(patsubst %,$(gb_LinkTarget__syslib),$(2)))))
$$(eval $$(call gb_LinkTarget__get_all_libraries_var,$(1)) += $(filter-out $(call gb_LinkTarget__get_all_libraries,$(1)),$(patsubst %,$(gb_LinkTarget__syslib),$(2))))
+ifeq (,$(gb_PARTIAL_BUILD))
$(call gb_LinkTarget_get_target,$(1)) : LINKED_LIBS += $(filter-out $(call gb_LinkTarget__get_all_libraries,$(1)),$(patsubst %,$(gb_LinkTarget__syslib),$(2)))
endif
+endif
endef
@@ -1862,8 +1905,10 @@ endef
# call gb_LinkTarget_set_ilibtarget,linktarget,ilibfilename
define gb_LinkTarget_set_ilibtarget
+ifeq (,$(DISABLE_DYNLOADING))
$(call gb_LinkTarget_get_clean_target,$(1)) \
$(call gb_LinkTarget_get_target,$(1)) : ILIBTARGET := $(2)
+endif
endef
diff --git a/solenv/gbuild/TargetLocations.mk b/solenv/gbuild/TargetLocations.mk
index 3e4b044d86b2..32d7eed72ec0 100644
--- a/solenv/gbuild/TargetLocations.mk
+++ b/solenv/gbuild/TargetLocations.mk
@@ -126,6 +126,12 @@ gb_LinkTarget_get_objects_list = \
$(WORKDIR)/LinkTarget/$(call gb_LinkTarget__get_workdir_linktargetname,$(1)).objectlist
gb_LinkTarget_get_dep_target = \
$(WORKDIR)/Dep/LinkTarget/$(call gb_LinkTarget__get_workdir_linktargetname,$(1)).d
+gb_LinkTarget_get_dep_libraries_target = \
+ $(WORKDIR)/Dep/LinkTarget/$(call gb_LinkTarget__get_workdir_linktargetname,$(1)).d.libraries
+gb_LinkTarget_get_dep_externals_target = \
+ $(WORKDIR)/Dep/LinkTarget/$(call gb_LinkTarget__get_workdir_linktargetname,$(1)).d.externals
+gb_LinkTarget_get_dep_statics_target = \
+ $(WORKDIR)/Dep/LinkTarget/$(call gb_LinkTarget__get_workdir_linktargetname,$(1)).d.statics
gb_LinkTarget_get_clean_target = \
$(WORKDIR)/Clean/LinkTarget/$(call gb_LinkTarget__get_workdir_linktargetname,$(1))
gb_LinkTarget_get_target = $(lastword $(subst <>, ,$(1)))
@@ -427,6 +433,7 @@ define gb_Library_get_linktarget
$(call gb_Library__get_workdir_linktargetname,$(1))<>$(call gb_Library_get_target,$(1))
endef
gb_Library_get_linktarget_target = $(call gb_LinkTarget_get_target,$(call gb_Library_get_linktarget,$(1)))
+gb_Library_get_dep_libraries_target = $(call gb_LinkTarget_get_dep_libraries_target,$(call gb_Library_get_linktarget,$(1)))
define gb_StaticLibrary__get_workdir_linktargetname
StaticLibrary/$(call gb_StaticLibrary_get_filename,$(1))
diff --git a/solenv/gbuild/partial_build.mk b/solenv/gbuild/partial_build.mk
index bc0e4a261b7b..dc52c593f7ee 100644
--- a/solenv/gbuild/partial_build.mk
+++ b/solenv/gbuild/partial_build.mk
@@ -39,6 +39,10 @@ $(eval $(call gb_Module_make_global_targets,$(wildcard $(module_directory)Module
ifeq ($(DISABLE_DYNLOADING),TRUE)
$(if $(gb_LinkTarget__Lock),$(shell rm -f $(gb_LinkTarget__Lock)))
+ifeq ($(ENABLE_CUSTOMTARGET_COMPONENTS),TRUE)
+include $(SRCDIR)/solenv/gbuild/static.mk
+$(if $(filter a,$(gb_DEBUG_STATIC)),$(error Abort after static.mk))
+endif
endif
# vim: set noet sw=4 ts=4:
diff --git a/solenv/gbuild/static.mk b/solenv/gbuild/static.mk
index a32060ca3c58..faa9a73db516 100644
--- a/solenv/gbuild/static.mk
+++ b/solenv/gbuild/static.mk
@@ -201,7 +201,47 @@ $(foreach exec,$(gb_Executable_KNOWN), \
$(foreach workdir_linktargetname,$(gb_LinkTarget__ALL_TOUCHED), \
$(eval $(call gb_LinkTarget__remove_touch,$(workdir_linktargetname))))
-endif # !gb_PARTIAL_BUILD
+else # gb_PARTIAL_BUILD
+
+# call gb_LinkTarget__expand_executable_template,class
+define gb_LinkTarget__expand_executable_template
+
+gb_$(1)__get_dep_libraries_target = $$(call gb_LinkTarget_get_dep_libraries_target,$$(call gb_$(1)__get_workdir_linktargetname,$$(1)))
+gb_$(1)__get_dep_externals_target = $$(call gb_LinkTarget_get_dep_externals_target,$$(call gb_$(1)__get_workdir_linktargetname,$$(1)))
+gb_$(1)__get_dep_statics_target = $$(call gb_LinkTarget_get_dep_statics_target,$$(call gb_$(1)__get_workdir_linktargetname,$$(1)))
+
+# call gb_$(1)__has_any_dependencies,item
+define gb_$(1)__has_any_dependencies
+$$(if $$(strip $$(filter-out GBUILD_TOUCHED,
+ $$(call gb_$(1)__get_all_libraries,$$(1))
+ $$(call gb_$(1)__get_all_externals,$$(1))
+ $$(call gb_$(1)__get_all_statics,$$(1)))),$$(1))
+
+endef
+
+# call gb_$(1)__expand_deps,item
+define gb_$(1)__expand_deps
+$$(if $$(call gb_$(1)__has_any_dependencies,$$(1)),
+ $$(if $$(shell cat $$(call gb_$(1)__get_dep_libraries_target,$$(1)) 2>/dev/null),
+ $$(eval $$(call gb_$(1)_use_libraries,$$(1),$$(shell cat $$(call gb_$(1)__get_dep_libraries_target,$$(1))))))
+ $$(if $$(shell cat $$(call gb_$(1)__get_dep_externals_target,$$(1)) 2>/dev/null),
+ $$(eval $$(call gb_$(1)_use_externals,$$(1),$$(shell cat $$(call gb_$(1)__get_dep_externals_target,$$(1))))))
+ $$(if $$(shell cat $$(call gb_$(1)__get_dep_statics_target,$$(1)) 2>/dev/null), \
+ $$(eval $$(call gb_$(1)_use_static_libraries,$$(1),$$(shell cat $$(call gb_$(1)__get_dep_statics_target,$$(1))))))
+)
+
+endef
+
+endef # gb_LinkTarget__expand_executable_template
+
+ifneq (,$(gb_DEBUG_STATIC))
+$(info $(call gb_LinkTarget__expand_executable_template,Executable))
+endif
+$(eval $(call gb_LinkTarget__expand_executable_template,Executable))
+
+$(foreach exec,$(gb_Executable_KNOWN),$(eval $(call gb_Executable__expand_deps,$(exec))))
+
+endif # gb_PARTIAL_BUILD
endif # gb_FULLDEPS
# vim: set noet sw=4 ts=4: