|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Minios-devel] [UNIKRAFT PATCH] build/rules: Add support for pre-processing rules
Hi Simon,
I only tested it with m4 files, but the patch looks good, thanks.
-- Felipe
Reviewed-by: Felipe Huici <felipe.huici@xxxxxxxxx>
On 10.05.19, 17:55, "Simon Kuenzer" <simon.kuenzer@xxxxxxxxx> wrote:
Extends the build system with pre-processing rules. Any source file
can be pre-processed before it gets compiled. For this purpose, the
syntax is extended with an optional '>' operator followed with the
target file extension after pre-processing. As example:
LIB_SRCS-y += preprocess.m4>.c
...means that the source file `preprocess.m4` will be pre-processed to
`preprocess.c` (placed to the build directory) before getting
compiled. The according compiler rule is selected depending on the
given target extension. In this case the C compiler is invoked
afterwards to produce `preprocess.o`.
Similar to the compile rule selection, a switch statement is prepared
where pre-process rules will be selected depending on the original
source file extension.
Signed-off-by: Simon Kuenzer <simon.kuenzer@xxxxxxxxx>
---
support/build/Makefile.rules | 60 ++++++++++++++++++++++++++++++++++--
1 file changed, 57 insertions(+), 3 deletions(-)
diff --git a/support/build/Makefile.rules b/support/build/Makefile.rules
index d5a54213..8579cf7d 100644
--- a/support/build/Makefile.rules
+++ b/support/build/Makefile.rules
@@ -452,6 +452,25 @@ $(error $(3): missing build rule for source type
$(suffix $(2))) \
endef
+#################################################
+#
+# Pre-process rules
+#
+#################################################
+# Generates a pre-process rule for a source file of a library
+# Adds library-specific (M4)FLAGS to the rule
+#
+# preprule_* $libname,$source,$preptarget,$extraflags(optional)
+
+# wrapper for preprule_*,
+# selects appropriate pre-process rule depending on file extension
+#
+# preprule $libname,$source,$preptarget,$extraflags(optional)
+define preprule =
+$(error $(3): missing pre-processing rule for source type $(suffix $(2)))
+endef
+
+
#################################################
#
# Buildrules for libraries
@@ -487,17 +506,52 @@ $(eval $(call buildrule,$(1),$(2),$(target),\
))
endef
+# Calls the pre-process rule wrapper with translated source and target
filename
+# Additional pre-processing flags & includes defined in the scope for the
source
+# file (and variant) scope are appended. A corresponding buildrule is also
+# installed for the processed file.
+# Please note that global and library-wide pre-process flags & includes are
+# added by the particular preprule because this depends on the source type
+#
+# preprule_libobj $libname,$source,$preptarget,$variant(optional)
+define preprule_libobj =
+$(eval $(call preprule,$(1),$(2),$(3),\
+ $($(call vprefix_src,$(1),$(2),PREPINCLUDES))\
+ $($(call vprefix_src,$(1),$(2),PREPINCLUDES-y))\
+ $($(call vprefix_src,$(1),$(2),PREPFLAGS))\
+ $($(call vprefix_src,$(1),$(2),PREPFLAGS-y))\
+ $(if $(4),\
+ $($(call vprefix_srcv,$(1),$(2),$(4),PREPINCLUDES))\
+ $($(call vprefix_srcv,$(1),$(2),$(4),PREPINCLUDES-y))\
+ $($(call vprefix_srcv,$(1),$(2),$(4),PREPFLAGS))\
+ $($(call vprefix_srcv,$(1),$(2),$(4),PREPFLAGS-y))\
+ ,)\
+))
+
+$(eval $(call buildrule_libobj,$(1),$(3),$(4)))
+endef
+
+# Parses a pre-process definition (chains are not supported yet)
+# for a single source word (see docs)
+# buildrule_libobj_preproc $libname,$source_definition,$variant(optional)
+define buildrule_libobj_preproc =
+$(if $(wordlist 2,$(words $(subst >, ,$(2))),$(subst >, ,$(2))),\
+ $(eval $(call preprule_libobj,$(1),$(word 1,$(subst >, ,$(2))),$(call
src2dst,$(1),$(word 1,$(subst >, ,$(2))),$(word 2,$(subst >,
,$(2))),$(3)),$(3))),\
+ $(eval $(call buildrule_libobj,$(1),$(2),$(3)))\
+)
+endef
+
# Parses a multitarget definition for a single source word
# (see docs) and iterates over all variants
-# It calls buildrule_libobj for each variant
+# It calls buildrule_libobj_preproc for each variant
#
# buildrule_libobj_multitarget $libname,$source_definition
define buildrule_libobj_multitarget =
$(if $(wordlist 2,$(words $(subst |, ,$(2))),$(subst |, ,$(2))),\
$(foreach V,$(wordlist 2,$(words $(subst |, ,$(2))),$(subst |, ,$(2))),\
- $(eval $(call buildrule_libobj,$(1),$(word 1,$(subst |, ,$(2))),$(V)))\
+ $(eval $(call buildrule_libobj_preproc,$(1),$(word 1,$(subst |,
,$(2))),$(V)))\
),\
- $(eval $(call buildrule_libobj,$(1),$(2),))\
+ $(eval $(call buildrule_libobj_preproc,$(1),$(2),))\
)
endef
--
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 |