[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Minios-devel] [UNIKRAFT PATCH v3 5/8] build/Makefile.rules: Add support for linker scripts requiring the pre-processor '*.lds.S'
Thanks, Simon On 13.09.2018 14:04, Yuri Volchkov wrote: looks good to me. Just one thing. The header is too long, I will change it to "build/Makefile.rules: support '*.lds.S' - reprocessed linker scripts" Reviewed-by: Yuri Volchkov <yuri.volchkov@xxxxxxxxx> Simon Kuenzer <simon.kuenzer@xxxxxxxxx> writes:Introduce support for linker scripts that have to be pre-processed. Such a linker script source file has to have the file extension *.lds.S. One would define the linker script generation in the platforms' `Linker.uk` file. For this purpose, two new Makefile functions are introduced: src2lds - Converts a path of a linker script source to a path to its processed linker script within the build directory buildrule_lds - Generates a Make target that builds a linker script (*.lds) from a linker script source (*.lds.S). A switch case is installed to buildrule. Usage example in a /plat/kvm/Linker.uk KVM_LDSCRIPT_SRC := $(CONFIG_UK_BASE)/plat/kvm/x86/link64.lds.S KVM_LDSCRIPT := $(call src2lds,libkvmplat,$(KVM_LDSCRIPT_SRC)) # Install a build rule for our linker script, # we can call buildrule directly $(eval $(call buildrule,libkvmplat,$(MY_LDSCRIPT_SRC),$(MY_LDSCRIPT))) [...] # One can refer to the processed linker script with $(KVM_LDSCRIPT) Signed-off-by: Simon Kuenzer <simon.kuenzer@xxxxxxxxx> --- support/build/Makefile.rules | 55 +++++++++++++++++++++++++++++++++----------- 1 file changed, 41 insertions(+), 14 deletions(-) diff --git a/support/build/Makefile.rules b/support/build/Makefile.rules index a5f5f7d..7b80ea6 100644 --- a/support/build/Makefile.rules +++ b/support/build/Makefile.rules @@ -70,14 +70,24 @@ $(addprefix $(call sub_build_dir,$(1))/,$(addsuffix .o,$(basename $(notdir $(2)) ) endef-# converts a list of object file paths to paths pointing to their corresponding dependency file-# obj2dep $objects -obj2dep = $(patsubst %.o,%.d,$(1)) +# converts a list of output file (object files or linker scripts) paths +# to paths pointing to their corresponding dependency file +# out2dep $objects +out2dep = $(patsubst %.o,%.d,$(patsubst %.lds,%.lds.d,$(1)))# converts a list of sources (.S, .c, .cc, .cpp) to paths pointing to their corresponding dependency file# src2dep $libname,$source(s),$variant(optional) -src2dep = $(call obj2dep,$(call src2obj,$(1),$(2),$(3))) +src2dep = $(call out2dep,$(call src2obj,$(1),$(2),$(3)))+# converts paths of linker script sources (*.lds.S) to paths of corresponding+# processed linker scripts (*.lds) within the library's build directory +# src2lds $libname,$ldS(s),$variant(optional) +define src2lds = +$(if $(3),\ +$(addprefix $(call sub_build_dir,$(1))/,$(addsuffix .$(3).lds,$(basename $(basename $(notdir $(2)))))),\ +$(addprefix $(call sub_build_dir,$(1))/,$(addsuffix .lds,$(basename $(basename $(notdir $(2))))))\ +) +endef################################################################################# @@ -210,7 +220,7 @@ depflags = -Wp$(comma)-MD$(comma)$(call tmp_depfile,$(3)) define build_cmd_fixdep = $(call build_cmd,$1,$2,$3,$4) $Q $(UK_FIXDEP) $(call tmp_depfile,$3) $3 '$(call strip,$4)' \ - $(BUILD_DIR) > $(call obj2dep,$3) && \ + $(BUILD_DIR) > $(call out2dep,$3) && \ rm -f $(call tmp_depfile,$3) endef@@ -329,10 +339,10 @@ $(3): $(2) | prepare)UK_SRCS-y += $(2)-UK_DEPS-y += $(call obj2dep,$(3)) +UK_DEPS-y += $(call out2dep,$(3)) UK_OBJS-y += $(3) $(eval $(call vprefix_lib,$(1),OBJS-y) += $(3)) -$(eval $(call vprefix_lib,$(1),CLEAN-y) += $(call build_clean,$(3)) $(call obj2dep,$(3))) +$(eval $(call vprefix_lib,$(1),CLEAN-y) += $(call build_clean,$(3)) $(call out2dep,$(3))) endefdefine buildrule_s =@@ -347,10 +357,10 @@ $(3): $(2) | prepare )UK_SRCS-y += $(2)-UK_DEPS-y += $(call obj2dep,$(3)) +UK_DEPS-y += $(call out2dep,$(3)) UK_OBJS-y += $(3) $(eval $(call vprefix_lib,$(1),OBJS-y) += $(3)) -$(eval $(call vprefix_lib,$(1),CLEAN-y) += $(call build_clean,$(3)) $(call obj2dep,$(3))) +$(eval $(call vprefix_lib,$(1),CLEAN-y) += $(call build_clean,$(3)) $(call out2dep,$(3))) endefdefine buildrule_c =@@ -365,10 +375,10 @@ $(3): $(2) | prepare )UK_SRCS-y += $(2)-UK_DEPS-y += $(call obj2dep,$(3)) +UK_DEPS-y += $(call out2dep,$(3)) UK_OBJS-y += $(3) $(eval $(call vprefix_lib,$(1),OBJS-y) += $(3)) -$(eval $(call vprefix_lib,$(1),CLEAN-y) += $(call build_clean,$(3)) $(call obj2dep,$(3))) +$(eval $(call vprefix_lib,$(1),CLEAN-y) += $(call build_clean,$(3)) $(call out2dep,$(3))) endefdefine buildrule_cc =@@ -383,10 +393,26 @@ $(3): $(2) | prepare )UK_SRCS-y += $(2)-UK_DEPS-y += $(call obj2dep,$(3)) +UK_DEPS-y += $(call out2dep,$(3)) UK_OBJS-y += $(3) $(eval $(call vprefix_lib,$(1),OBJS-y) += $(3)) -$(eval $(call vprefix_lib,$(1),CLEAN-y) += $(call build_clean,$(3)) $(call obj2dep,$(3))) +$(eval $(call vprefix_lib,$(1),CLEAN-y) += $(call build_clean,$(3)) $(call out2dep,$(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) \ + $(2) -o $(3) $(depflags) + ) + +UK_SRCS-y += $(2) +UK_DEPS-y += $(call out2dep,$(3)) +$(eval $(call vprefix_lib,$(1),CLEAN-y) += $(call build_clean,$(3)) $(call out2dep,$(3))) endef# wrapper for buildrule_*,@@ -394,13 +420,14 @@ endef # # buildrule $libname,$source,$target,$extraflags(optional) define buildrule = +$(if $(filter %.lds.S,$(2)),$(call buildrule_lds,$(1),$(2),$(3),$(4)),\ $(if $(filter %.S, $(2)),$(call buildrule_S ,$(1),$(2),$(3),$(4)),\ $(if $(filter %.s, $(2)),$(call buildrule_s ,$(1),$(2),$(3),$(4)),\ $(if $(filter %.c, $(2)),$(call buildrule_c ,$(1),$(2),$(3),$(4)),\ $(if $(filter %.cc, $(2)),$(call buildrule_cc,$(1),$(2),$(3),$(4)),\ $(if $(filter %.cpp,$(2)),$(call buildrule_cc,$(1),$(2),$(3),$(4)),\ $(error $(3): missing build rule for source type $(suffix $(2))) \ -))))) +)))))) endef--2.7.4 _______________________________________________ Minios-devel mailing list Minios-devel@xxxxxxxxxxxxxxxxxxxx https://lists.xenproject.org/mailman/listinfo/minios-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |