From 0d6f8e5c048d3caef43bf26f2ae683224dec6921 Mon Sep 17 00:00:00 2001 From: David Tardon Date: Sun, 30 Dec 2012 12:20:50 +0100 Subject: allow setting runtime deps of executables in one place Change-Id: I325287cba773df848a8797486c149502abae9c9d --- solenv/bin/concat-deps | Bin 0 -> 15522 bytes solenv/gbuild/Executable.mk | 46 +++++++++++++++++++++++++++++++++++++++ solenv/gbuild/Helper.mk | 10 ++++++++- solenv/gbuild/TargetLocations.mk | 1 + solenv/gbuild/gbuild.mk | 2 ++ 5 files changed, 58 insertions(+), 1 deletion(-) create mode 100755 solenv/bin/concat-deps diff --git a/solenv/bin/concat-deps b/solenv/bin/concat-deps new file mode 100755 index 000000000000..6391ed6f98f8 Binary files /dev/null and b/solenv/bin/concat-deps differ diff --git a/solenv/gbuild/Executable.mk b/solenv/gbuild/Executable.mk index 2fa67509e989..4683d0ec4163 100644 --- a/solenv/gbuild/Executable.mk +++ b/solenv/gbuild/Executable.mk @@ -31,10 +31,20 @@ # defined by platform # gb_Executable_Executable_platform +$(dir $(call gb_Executable_get_runtime_target,%)).dir : + $(if $(wildcard $(dir $@)),,mkdir -p $(dir $@)) + +$(dir $(call gb_Executable_get_runtime_target,%))%/.dir : + $(if $(wildcard $(dir $@)),,mkdir -p $(dir $@)) + +$(call gb_Executable_get_runtime_target,%) : $(call gb_Executable_get_target,%) + touch $@ + .PHONY : $(call gb_Executable_get_clean_target,%) $(call gb_Executable_get_clean_target,%) : $(call gb_Helper_abbreviate_dirs,\ rm -f $(call gb_Executable_get_target,$*) \ + $(call gb_Executable_get_runtime_target,$*) \ $(AUXTARGETS)) define gb_Executable_Executable @@ -52,6 +62,7 @@ $(call gb_LinkTarget_set_targettype,$(2),Executable) $(call gb_LinkTarget_add_libs,$(2),$(gb_STDLIBS)) $(call gb_Executable_get_target,$(1)) : $(call gb_LinkTarget_get_target,$(2)) \ | $(dir $(call gb_Executable_get_target,$(1))).dir +$(call gb_Executable_get_runtime_target,$(1)) :| $(dir $(call gb_Executable_get_runtime_target,$(1))).dir $(call gb_Executable_get_clean_target,$(1)) : $(call gb_LinkTarget_get_clean_target,$(2)) $(call gb_Executable_get_clean_target,$(1)) : AUXTARGETS := $(call gb_Executable_Executable_platform,$(1),$(2)) @@ -148,4 +159,39 @@ $(eval $(foreach method,\ $(call gb_Executable_forward_to_Linktarget,$(method))\ )) +# Run-time use + +# Add dependencies needed for running the executable +# +# gb_Executable_add_runtime_dependencies executable dependencies +define gb_Executable_add_runtime_dependencies +$(call gb_Executable_get_runtime_target,$(1)) : $(2) + +endef + +# Get dependencies needed for running the executable +# +# This is not strictly necessary, but it makes the use more similar to +# ExternalExecutable. +# +# gb_Executable_get_runtime_dependencies executable +define gb_Executable_get_runtime_dependencies +$(call gb_Executable_get_runtime_target,$(1)) +endef + +define gb_Executable__get_command +$(if $(filter NONE,$(gb_Executable_VALIDGROUPS)),,$(call gb_Output_error,executable group NONE does not exist!)) +$(if $(filter $(1),$(gb_Executable_NONE)),,$(gb_Helper_set_ld_path)) \ + $(call gb_Executable_get_target_for_build,$(1)) +endef + +# Get complete command-line for running the executable +# +# This includes setting library path, if necessary. +# +# gb_Executable_get_command executable +define gb_Executable_get_command +$(strip $(call gb_Executable__get_command,$(1))) +endef + # vim: set noet sw=4: diff --git a/solenv/gbuild/Helper.mk b/solenv/gbuild/Helper.mk index 9c6b6e91d0e1..c7ffdc6ae398 100644 --- a/solenv/gbuild/Helper.mk +++ b/solenv/gbuild/Helper.mk @@ -133,6 +133,14 @@ gb_Jar_KNOWN := $$(foreach group,$$(gb_Jar_VALIDGROUPS),$$(gb_Jar_$$(group))) endef +define gb_Helper_process_executable_registrations +$(foreach group,$(gb_Executable_VALIDGROUPS),\ + $(foreach executable,$(gb_Executable_$(group)),\ + $(if $(filter-out undefined,$(origin gb_Executable__register_$(executable))),\ + $(call gb_Executable__register_$(executable))))) + +endef + define gb_Helper_register_executables ifeq ($$(filter $(1),$$(gb_Executable_VALIDGROUPS)),) $$(eval $$(call gb_Output_error,$(1) is not a valid group for executables. Valid groups are: $$(gb_Executable_VALIDGROUPS))) @@ -198,7 +206,7 @@ $(foreach def,$(1),$(if $(filter TRUE YES,$($(def))),-D$(def))) endef define gb_Helper_execute -$(gb_Helper_set_ld_path) $(OUTDIR_FOR_BUILD)/bin/$(1) +$(call gb_Executable_get_command,$(1)) endef # gb_Helper_OUTDIRLIBDIR is set by the platform to the path the dynamic linker need to use diff --git a/solenv/gbuild/TargetLocations.mk b/solenv/gbuild/TargetLocations.mk index d9213ec7dc91..b201fbbb4359 100644 --- a/solenv/gbuild/TargetLocations.mk +++ b/solenv/gbuild/TargetLocations.mk @@ -106,6 +106,7 @@ gb_CxxObject_get_target = $(WORKDIR)/CxxObject/$(1).o gb_GenCxxObject_get_target = $(WORKDIR)/GenCxxObject/$(1).o gb_Executable_get_external_headers_target = $(WORKDIR)/ExternalHeaders/Executable/$(1) gb_Executable_get_headers_target = $(WORKDIR)/Headers/Executable/$(1) +gb_Executable_get_runtime_target = $(WORKDIR)/Executable/$(1).run gb_ExtensionTarget_get_target = $(WORKDIR)/ExtensionTarget/$(1).oxt gb_ExtensionTarget_get_rootdir = $(WORKDIR)/ExtensionTarget/$(1)/root gb_ExtensionTarget_get_workdir = $(WORKDIR)/ExtensionTarget/$(1) diff --git a/solenv/gbuild/gbuild.mk b/solenv/gbuild/gbuild.mk index edb95c5b2f7f..d7b804deab39 100644 --- a/solenv/gbuild/gbuild.mk +++ b/solenv/gbuild/gbuild.mk @@ -337,6 +337,8 @@ include $(foreach class, \ InstallScript \ ,$(GBUILDDIR)/$(class).mk) +$(eval $(call gb_Helper_process_executable_registrations)) + # optional extensions that should never be essential ifneq ($(wildcard $(GBUILDDIR)/extensions/post_*.mk),) include $(wildcard $(GBUILDDIR)/extensions/post_*.mk) -- cgit