solenv/gbuild/ExternalProject.mk |    4 +--
 solenv/gbuild/LinkTarget.mk      |   45 +++++++++++++++++++++++++++++++++++++++
 solenv/gbuild/TargetLocations.mk |    7 ++++++
 solenv/gbuild/partial_build.mk   |    4 +++
 solenv/gbuild/static.mk          |   42 +++++++++++++++++++++++++++++++++++-
 svx/Module_svx.mk                |    2 +
 6 files changed, 101 insertions(+), 3 deletions(-)

New commits:
commit b04be559ddf4a7f0a5cdc0b9abc2bcfc4aae25cc
Author:     Jan-Marek Glogowski <glo...@fbihome.de>
AuthorDate: Fri May 21 15:41:15 2021 +0200
Commit:     Thorsten Behrens <thorsten.behr...@allotropia.de>
CommitDate: Thu Jan 13 12:13:06 2022 +0100

    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.st...@allotropia.de>
    Reviewed-by: Thorsten Behrens <thorsten.behr...@allotropia.de>

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:
diff --git a/svx/Module_svx.mk b/svx/Module_svx.mk
index b7d573d08f35..40e65bd70d0d 100644
--- a/svx/Module_svx.mk
+++ b/svx/Module_svx.mk
@@ -49,11 +49,13 @@ $(eval $(call gb_Module_add_screenshot_targets,svx,\
 ))
 
 ifneq (,$(filter DESKTOP,$(BUILD_TYPE)))
+ifeq (,$(DISABLE_DYNLOADING))
 $(eval $(call gb_Module_add_targets,svx,\
     Executable_gengal \
     $(if $(filter-out MACOSX WNT,$(OS)), \
                Package_gengal) \
 ))
+endif
 else # !DESKTOP
 ifeq ($(WITH_GALLERY_BUILD),TRUE)
 $(eval $(call gb_Module_add_targets_for_build,svx,\

Reply via email to