[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Minios-devel] [UNIKRAFT PATCH 6/8] build/Makefile.rules: Add support for linker scripts requiring the pre-processor '*.ldS'



Introduce support for linker scripts that have to be pre-processed. Such a 
linker
script source file has to have the file extension *.ldS. In order to generate

Within a platforms' Linker.uk file, two Makefile functions are

Called *.ldS, normal linker script is *.lds

Usage example in a Linker.uk

 MY_LDSCRIPT_SRC := $(CONFIG_UK_BASE)/plat/my/linker.ldS
 MY_LDSCRIPT     := $(call ldS2lds,libmyplat,$(KVM_LDSCRIPT_SRC))

 # Install build rule for linker script
 $(eval $(call buildrule_ldS,libkvmplat,$(MY_LDSCRIPT_SRC),$(MY_LDSCRIPT)))

 # Afterwards refer with $(MY_LDSCRIPT) to the generated linker script.

Signed-off-by: Simon Kuenzer <simon.kuenzer@xxxxxxxxx>
---
 support/build/Makefile.rules | 37 +++++++++++++++++++++++++++++++++++++
 1 file changed, 37 insertions(+)

diff --git a/support/build/Makefile.rules b/support/build/Makefile.rules
index ebbb8dd..aad6942 100644
--- a/support/build/Makefile.rules
+++ b/support/build/Makefile.rules
@@ -78,6 +78,26 @@ obj2dep = $(patsubst %.o,%.d,$(1))
 # src2dep $libname,$source(s),$variant(optional)
 src2dep = $(call obj2dep,$(call src2obj,$(1),$(2),$(3)))
 
+# converts paths of linker script sources (*.ldS) to paths of corresponding
+# processed linker scripts (*.lds) within the build directory
+# ldS2lds $libname,$ldS(s),$variant(optional)
+define ldS2lds =
+$(if $(3),\
+$(addprefix $(call sub_build_dir,$(1))/,$(addsuffix .$(3).lds,$(basename 
$(notdir $(2))))),\
+$(addprefix $(call sub_build_dir,$(1))/,$(addsuffix .lds,$(basename $(notdir 
$(2)))))\
+)
+endef
+
+# converts paths of processed linker scripts (*.lds) to corresponding
+# dependency files
+# lds2dep $lds(s)
+lds2dep = $(addsuffix .d,$(1))
+
+# converts paths of linker script sources (*.ldS) to paths of corresponding
+# dependency files
+# ldS2dep $libname,$ldS(s),$variant(optional)
+ldS2dep = $(call lds2dep,$(call ldS2lds,$(1),$(2),$(3)))
+
 
 
################################################################################
 #
@@ -392,6 +412,23 @@ $(eval $(call vprefix_lib,$(1),OBJS-y) += $(3))
 $(eval $(call vprefix_lib,$(1),CLEAN-y) += $(call build_clean,$(3)) $(call 
obj2dep,$(3)))
 endef
 
+define buildrule_ldS =
+$(3): $(2) | prepare
+       $(call build_cmd_fixdep,LDS,$(1),$(3),\
+               $(AS)  -E -P -x assembler-with-cpp $(ASINCLUDES) 
$(ASINCLUDES-y) \
+                      $($(call vprefix_lib,$(1),ASINCLUDES)) $($(call 
vprefix_lib,$(1),ASINCLUDES-y)) \
+                      $(ASFLAGS) $(ASFLAGS-y) \
+                      $($(call vprefix_lib,$(1),ASFLAGS)) $($(call 
vprefix_lib,$(1),ASFLAGS-y)) \
+                      $(4) \
+                      -c $(2) -o $(3) $(depflags),\
+               $(call lds2dep,$(3))
+       )
+
+UK_SRCS-y += $(2)
+UK_DEPS-y += $(call lds2dep,$(3))
+$(eval $(call vprefix_lib,$(1),CLEAN-y) += $(call build_clean,$(3)) $(call 
lds2dep,$(3)))
+endef
+
 # wrapper for buildrule_*,
 # selects appropriate buildrule depending on file extension
 #
-- 
2.7.4


_______________________________________________
Minios-devel mailing list
Minios-devel@xxxxxxxxxxxxxxxxxxxx
https://lists.xenproject.org/mailman/listinfo/minios-devel

 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.