|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Minios-devel] [UNIKRAFT PATCH v2 2/6] build: Forward variant to build rules
Forward the variant argument down to the actual buildrule. This is a
preparation to implement variant-specific behavior within the
buildrules.
Signed-off-by: Simon Kuenzer <simon.kuenzer@xxxxxxxxx>
---
support/build/Makefile.rules | 190 +++++++++++++++++++----------------
1 file changed, 103 insertions(+), 87 deletions(-)
diff --git a/support/build/Makefile.rules b/support/build/Makefile.rules
index a4f1be66..078bafe3 100644
--- a/support/build/Makefile.rules
+++ b/support/build/Makefile.rules
@@ -113,14 +113,17 @@ endef
# vprefix_lib $libname,$varname(s)
vprefix_lib = $(addprefix $(call uc,$(1))_,$(2))
-# vprefix_src $libname,$source,$varname(s)
+# vprefix_src $libname,$source,$variant,$varname(s)
+# file-local variable: LIBNAME_FILENAME_[VARIANT_]VARNAME
+#
+# Note: We need to `strip` the result because the multiline `if` statement
+# causes whitespaces. Because the output is directly used to to refer
to a
+# variable, this is especially important here.
define vprefix_src =
-$(call vprefix_lib,$(1),$(addprefix $(call uc,$(basename $(notdir
$(2))))_,$(3)))
-endef
-
-# vprefix_srcv $libname,$source,$variant,$varname(s)
-define vprefix_srcv =
-$(call vprefix_src,$(1),$(2),$(addprefix $(call uc,$(3))_,$(4)))
+$(strip $(if $(3),\
+$(call vprefix_lib,$(1),$(addprefix $(call uc,$(basename $(notdir
$(2))))_$(call uc,$(3))_,$(4))),\
+$(call vprefix_lib,$(1),$(addprefix $(call uc,$(basename $(notdir
$(2))))_,$(4)))\
+))
endef
@@ -248,7 +251,7 @@ endif
#
# build_cmd_fixdep $quietlabel,$libname(optional),$target,$command
tmp_depfile = $(dir $1).$(notdir $1).d
-depflags = -Wp$(comma)-MD$(comma)$(call tmp_depfile,$(3))
+depflags = -Wp$(comma)-MD$(comma)$(call tmp_depfile,$(1))
define build_cmd_fixdep =
$(call build_cmd,$1,$2,$3,$4)
$Q $(UK_FIXDEP) $(call tmp_depfile,$3) $3 '$(call strip,$4)' \
@@ -375,80 +378,96 @@ endef
# Generates a build rule for an object of a library
# Adds library-specific (AS/C/CXX)FLAGS to the build
#
-# buildrule_* $libname,$source,$target,$extraflags(optional)
+# buildrule_* $libname,$source,$variant,$target,$extraflags
define buildrule_S_ =
-$(3): $(2) | prepare
- $(call build_cmd_fixdep,AS,$(1),$(3),\
+$(4): $(2) | prepare
+ $(call build_cmd_fixdep,AS,$(1),$(4),\
$(AS) $(ASINCLUDES) $(ASINCLUDES-y) \
$($(call vprefix_lib,$(1),ASINCLUDES)) $($(call
vprefix_lib,$(1),ASINCLUDES-y)) \
- $(ASFLAGS) $(ASFLAGS-y) $(DBGFLAGS) $(DBGFLAGS-y) \
+ $($(call vprefix_src,$(1),$(2),$(3),INCLUDES)) $($(call
vprefix_src,$(1),$(2),$(3),INCLUDES-y)) \
+ $(ASFLAGS) $(ASFLAGS-y) \
$($(call vprefix_lib,$(1),ASFLAGS)) $($(call
vprefix_lib,$(1),ASFLAGS-y)) \
- $(4) -D__LIBNAME__=$(1) -D__BASENAME__=$(notdir $(2)) \
- -c $(2) -o $(3) $(depflags)
+ $($(call vprefix_src,$(1),$(2),$(3),FLAGS)) $($(call
vprefix_src,$(1),$(2),$(3),FLAGS-y)) \
+ $(5) \
+ $(DBGFLAGS) $(DBGFLAGS-y) \
+ -D__LIBNAME__=$(1) -D__BASENAME__=$(notdir $(2)) $(if
$(3),-D__VARIANT__=$(3)) \
+ -c $(2) -o $(4) $(call depflags,$(4))
)
UK_SRCS-y += $(2)
-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
out2dep,$(3)))
+UK_DEPS-y += $(call out2dep,$(4))
+UK_OBJS-y += $(4)
+$(eval $(call vprefix_lib,$(1),OBJS-y) += $(4))
+$(eval $(call vprefix_lib,$(1),CLEAN-y) += $(call build_clean,$(4)) $(call
out2dep,$(4)))
endef
buildrule_sx = $(call buildrule_S_,$(1),$(2),$(3),$(4))
define buildrule_s =
-$(3): $(2) | prepare
- $(call build_cmd,AS,$(1),$(3),\
+$(4): $(2) | prepare
+ $(call build_cmd,AS,$(1),$(4),\
$(AS) $(ASINCLUDES) $(ASINCLUDES-y) \
$($(call vprefix_lib,$(1),ASINCLUDES)) $($(call
vprefix_lib,$(1),ASINCLUDES-y)) \
- $(ASFLAGS) $(ASFLAGS-y) $(DBGFLAGS) $(DBGFLAGS-y) \
+ $($(call vprefix_src,$(1),$(2),$(3),INCLUDES)) $($(call
vprefix_src,$(1),$(2),$(3),INCLUDES-y)) \
+ $(ASFLAGS) $(ASFLAGS-y) \
$($(call vprefix_lib,$(1),ASFLAGS)) $($(call
vprefix_lib,$(1),ASFLAGS-y)) \
- $(4) -D__LIBNAME__=$(1) -D__BASENAME__=$(notdir $(2)) \
- -c $(2) -o $(3)
+ $($(call vprefix_src,$(1),$(2),$(3),FLAGS)) $($(call
vprefix_src,$(1),$(2),$(3),FLAGS-y)) \
+ $(5) \
+ $(DBGFLAGS) $(DBGFLAGS-y) \
+ -D__LIBNAME__=$(1) -D__BASENAME__=$(notdir $(2)) $(if
$(3),-D__VARIANT__=$(3)) \
+ -c $(2) -o $(4)
)
UK_SRCS-y += $(2)
-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
out2dep,$(3)))
+UK_DEPS-y += $(call out2dep,$(4))
+UK_OBJS-y += $(4)
+$(eval $(call vprefix_lib,$(1),OBJS-y) += $(4))
+$(eval $(call vprefix_lib,$(1),CLEAN-y) += $(call build_clean,$(4)) $(call
out2dep,$(4)))
endef
define buildrule_c =
-$(3): $(2) | prepare
- $(call build_cmd_fixdep,CC,$(1),$(3),\
+$(4): $(2) | prepare
+ $(call build_cmd_fixdep,CC,$(1),$(4),\
$(CC) $(CINCLUDES) $(CINCLUDES-y) \
$($(call vprefix_lib,$(1),CINCLUDES)) $($(call
vprefix_lib,$(1),CINCLUDES-y)) \
- $(CFLAGS) $(CFLAGS-y) $(DBGFLAGS) $(DBGFLAGS-y) \
+ $($(call vprefix_src,$(1),$(2),$(3),INCLUDES)) $($(call
vprefix_src,$(1),$(2),$(3),INCLUDES-y)) \
+ $(CFLAGS) $(CFLAGS-y) \
$($(call vprefix_lib,$(1),CFLAGS)) $($(call
vprefix_lib,$(1),CFLAGS-y)) \
- $(4) -D__LIBNAME__=$(1) -D__BASENAME__=$(notdir $(2)) \
- -c $(2) -o $(3) $(depflags)
+ $($(call vprefix_src,$(1),$(2),$(3),FLAGS)) $($(call
vprefix_src,$(1),$(2),$(3),FLAGS-y)) \
+ $(5) \
+ $(DBGFLAGS) $(DBGFLAGS-y) \
+ -D__LIBNAME__=$(1) -D__BASENAME__=$(notdir $(2)) $(if
$(3),-D__VARIANT__=$(3)) \
+ -c $(2) -o $(4) $(call depflags,$(4))
)
UK_SRCS-y += $(2)
-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
out2dep,$(3)))
+UK_DEPS-y += $(call out2dep,$(4))
+UK_OBJS-y += $(4)
+$(eval $(call vprefix_lib,$(1),OBJS-y) += $(4))
+$(eval $(call vprefix_lib,$(1),CLEAN-y) += $(call build_clean,$(4)) $(call
out2dep,$(4)))
endef
define buildrule_cc =
-$(3): $(2) | prepare
- $(call build_cmd_fixdep,CXX,$(1),$(3),\
+$(4): $(2) | prepare
+ $(call build_cmd_fixdep,CXX,$(1),$(4),\
$(CXX) $(CXXINCLUDES) $(CXXINCLUDES-y) \
$($(call vprefix_lib,$(1),CXXINCLUDES)) $($(call
vprefix_lib,$(1),CXXINCLUDES-y)) \
- $(CXXFLAGS) $(CXXFLAGS-y) $(DBGFLAGS) $(DBGFLAGS-y) \
+ $($(call vprefix_src,$(1),$(2),$(3),INCLUDES)) $($(call
vprefix_src,$(1),$(2),$(3),INCLUDES-y)) \
+ $(CXXFLAGS) $(CXXFLAGS-y) \
$($(call vprefix_lib,$(1),CXXFLAGS)) $($(call
vprefix_lib,$(1),CXXFLAGS-y)) \
- $(4) -D__LIBNAME__=$(1) -D__BASENAME__=$(notdir $(2)) \
- -c $(2) -o $(3) $(depflags)
+ $($(call vprefix_src,$(1),$(2),$(3),FLAGS)) $($(call
vprefix_src,$(1),$(2),$(3),FLAGS-y)) \
+ $(5) \
+ $(DBGFLAGS) $(DBGFLAGS-y) \
+ -D__LIBNAME__=$(1) -D__BASENAME__=$(notdir $(2)) $(if
$(3),-D__VARIANT__=$(3)) \
+ -c $(2) -o $(4) $(call depflags,$(4))
)
UK_SRCS-y += $(2)
-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
out2dep,$(3)))
+UK_DEPS-y += $(call out2dep,$(4))
+UK_OBJS-y += $(4)
+$(eval $(call vprefix_lib,$(1),OBJS-y) += $(4))
+$(eval $(call vprefix_lib,$(1),CLEAN-y) += $(call build_clean,$(4)) $(call
out2dep,$(4)))
endef
# Aliases for C++ sources
@@ -460,21 +479,25 @@ buildrule_C = $(call buildrule_cc,$(1),$(2),$(3),$(4))
buildrule_c$(plus)$(plus) = $(call buildrule_cc,$(1),$(2),$(3),$(4))
define buildrule_go =
-$(3): $(2) | prepare
- $(call build_cmd,GOC,$(1),$(3),\
+$(4): $(2) | prepare
+ $(call build_cmd,GOC,$(1),$(4),\
$(GOC) $(GOCINCLUDES) $(GOCINCLUDES-y) \
- $($(call vprefix_lib,$(1),GOCINCLUDES)) $($(call
vprefix_lib,$(1),GOCINCLUDES-y)) \
- $(GOCFLAGS) $(GOCFLAGS-y) $(DBGFLAGS) $(DBGFLAGS-y) \
- $($(call vprefix_lib,$(1),GOCFLAGS)) $($(call
vprefix_lib,$(1),GOCFLAGS-y)) \
- $(4) -D__LIBNAME__=$(1) -D__BASENAME__=$(notdir $(2)) \
- -c $(2) -o $(3) $(depflags)
+ $($(call vprefix_lib,$(1),GOCINCLUDES)) $($(call
vprefix_lib,$(1),GOCINCLUDES-y)) \
+ $($(call vprefix_src,$(1),$(2),$(3),INCLUDES)) $($(call
vprefix_src,$(1),$(2),$(3),INCLUDES-y)) \
+ $(GOCFLAGS) $(GOCFLAGS-y) \
+ $($(call vprefix_lib,$(1),GOCFLAGS)) $($(call
vprefix_lib,$(1),GOCFLAGS-y)) \
+ $($(call vprefix_src,$(1),$(2),$(3),FLAGS)) $($(call
vprefix_src,$(1),$(2),$(3),FLAGS-y)) \
+ $(5) \
+ $(DBGFLAGS) $(DBGFLAGS-y) \
+ -D__LIBNAME__=$(1) -D__BASENAME__=$(notdir $(2)) $(if
$(3),-D__VARIANT__=$(3)) \
+ -c $(2) -o $(4) $(call depflags,$(4))
)
UK_SRCS-y += $(2)
-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
out2dep,$(3)))
+UK_DEPS-y += $(call out2dep,$(4))
+UK_OBJS-y += $(4)
+$(eval $(call vprefix_lib,$(1),OBJS-y) += $(4))
+$(eval $(call vprefix_lib,$(1),CLEAN-y) += $(call build_clean,$(4)) $(call
out2dep,$(4)))
endef
define add_lds_to_plat =
@@ -486,35 +509,39 @@ $(eval EXTRA_LD_SCRIPT-y += $(1))
endef
define buildrule_S_lds =
-$(3): $(2) | prepare
- $(call build_cmd_fixdep,LDS,$(1),$(3),\
- $(AS) -E -P -x assembler-with-cpp $(ASINCLUDES)
$(ASINCLUDES-y) \
+$(4): $(2) | prepare
+ $(call build_cmd_fixdep,LDS,$(1),$(4),\
+ $(AS) -E -P -x assembler-with-cpp $(COMPFLAGS) $(COMPFLAGS-y) \
+ $(ASINCLUDES) $(ASINCLUDES-y) \
$($(call vprefix_lib,$(1),ASINCLUDES)) $($(call
vprefix_lib,$(1),ASINCLUDES-y)) \
+ $($(call vprefix_src,$(1),$(2),$(3),INCLUDES)) $($(call
vprefix_src,$(1),$(2),$(3),INCLUDES-y)) \
+ $(ARCHFLAGS) $(ARCHFLAGS-y) \
$(ASFLAGS) $(ASFLAGS-y) \
$($(call vprefix_lib,$(1),ASFLAGS)) $($(call
vprefix_lib,$(1),ASFLAGS-y)) \
- $(4) \
- $(2) -o $(3) $(depflags)
+ $($(call vprefix_src,$(1),$(2),$(3),FLAGS)) $($(call
vprefix_src,$(1),$(2),$(3),FLAGS-y)) \
+ $(5) \
+ $(2) -o $(4) $(call depflags,$(4))
)
UK_SRCS-y += $(2)
-UK_LDS-y += $(3)
-UK_DEPS-y += $(call out2dep,$(3))
-$(eval $(call vprefix_lib,$(1),LDS-y) += $(3))
-$(eval $(call vprefix_lib,$(1),CLEAN-y) += $(call build_clean,$(3)) $(call
out2dep,$(3)))
+UK_LDS-y += $(4)
+UK_DEPS-y += $(call out2dep,$(4))
+$(eval $(call vprefix_lib,$(1),LDS-y) += $(4))
+$(eval $(call vprefix_lib,$(1),CLEAN-y) += $(call build_clean,$(4)) $(call
out2dep,$(4)))
$(if $(strip $($(call uc,$(1))_PLATS)),\
$(foreach p,$($(call uc,$(1))_PLATS),\
$(if $(filter $(UK_PLAT_$(p)_DEF_LDS),$(2)),\
- $(eval UK_PLAT_$(p)_DEF_LDS := $(3)),\
- $(call add_lds_to_plat,$(3),$(p)))),\
- $(call add_lds_to_lib,$(3))\
+ $(eval UK_PLAT_$(p)_DEF_LDS := $(4)),\
+ $(call add_lds_to_plat,$(4),$(p)))),\
+ $(call add_lds_to_lib,$(4))\
)
endef
# buildrule for *.S files: differentiate between *.lds.S, *.S
define buildrule_S =
-$(if $(filter %.lds.S,$(2)),$(call buildrule_S_lds,$(1),$(2),$(3),$(4)),\
-$(call buildrule_S_,$(1),$(2),$(3),$(4))
+$(if $(filter %.lds.S,$(2)),$(call buildrule_S_lds,$(1),$(2),$(3),$(4),$(5)),\
+$(call buildrule_S_,$(1),$(2),$(3),$(4),$(5))
)
endef
@@ -534,14 +561,14 @@ $(if $(strip $($(call uc,$(1))_PLATS)),\
endef
define buildrule_dts =
-$(3) : $(2) | prepare
- $(call build_cmd,DTC,$(1),$(3),\
+$(4) : $(2) | prepare
+ $(call build_cmd,DTC,$(1),$(4),\
$(DTC) -I dts -O dtb -o $$(@) $$(<)\
)
UK_SRCS-y += $(2)
-$(eval $(call vprefix_lib,$(1),DTB-y) += $(3))
-$(eval $(call vprefix_lib,$(1),CLEAN-y) += $(call build_clean,$(3)))
+$(eval $(call vprefix_lib,$(1),DTB-y) += $(4))
+$(eval $(call vprefix_lib,$(1),CLEAN-y) += $(call build_clean,$(4)))
endef
# wrapper for buildrule_*,
@@ -555,7 +582,7 @@ define buildrule =
$(if $(filter buildrule_$(call fileext,$(strip $(2))),$(.VARIABLES)),,\
$(error buildrule_$(call fileext,$(strip $(2))) is not defined: Failed to
install rule for $(2)))
-$(call buildrule_$(call fileext,$(strip $(2))),$(strip $(1)),$(strip
$(2)),$(strip $(3)),$(strip $(4)))
+$(call buildrule_$(call fileext,$(strip $(2))),$(strip $(1)),$(strip
$(2)),$(strip $(3)),$(strip $(4)),$(strip $(5)))
endef
#################################################
@@ -617,18 +644,7 @@ $(if $(filter %.lds.S,$(2)),\
$(if $(filter %.dts,$(2)),\
$(eval target=$(call dts2dtb,$(1),$(2))),\
$(eval target=$(call src2obj,$(1),$(2),$(3)))))
-$(eval $(call buildrule,$(1),$(2),$(target),\
- $($(call vprefix_src,$(1),$(2),INCLUDES))\
- $($(call vprefix_src,$(1),$(2),INCLUDES-y))\
- $($(call vprefix_src,$(1),$(2),FLAGS))\
- $($(call vprefix_src,$(1),$(2),FLAGS-y))\
- $(if $(3),\
- $($(call vprefix_srcv,$(1),$(2),$(3),INCLUDES))\
- $($(call vprefix_srcv,$(1),$(2),$(3),INCLUDES-y))\
- $($(call vprefix_srcv,$(1),$(2),$(3),FLAGS))\
- $($(call vprefix_srcv,$(1),$(2),$(3),FLAGS-y))\
- ,)\
-))
+$(eval $(call buildrule,$(1),$(2),$(3),$(target),))
endef
# Calls the pre-process rule wrapper with translated source and target filename
--
2.20.1
_______________________________________________
Minios-devel mailing list
Minios-devel@xxxxxxxxxxxxxxxxxxxx
https://lists.xenproject.org/mailman/listinfo/minios-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |