|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Minios-devel] [UNIKRAFT PATCH] build: Build device tree source
We add support for building device tree files. An application developer
may the device tree to the SRCS variable to build the device tree.
Signed-off-by: Sharan Santhanam <sharan.santhanam@xxxxxxxxx>
---
Makefile | 1 +
support/build/Makefile.rules | 30 ++++++++++++++++++++++++++----
2 files changed, 27 insertions(+), 4 deletions(-)
diff --git a/Makefile b/Makefile
index da9b2269..19723240 100644
--- a/Makefile
+++ b/Makefile
@@ -454,6 +454,7 @@ GZIP := gzip
TAR := tar
UNZIP := unzip -qq -u
WGET := wget
+DTC := dtc
# Time requires the full path so that subarguments are handled correctly
TIME := $(shell which time)
LIFTOFF := liftoff -e -s
diff --git a/support/build/Makefile.rules b/support/build/Makefile.rules
index d90807e0..a3111ac8 100644
--- a/support/build/Makefile.rules
+++ b/support/build/Makefile.rules
@@ -95,6 +95,12 @@ $(addprefix $(call sub_build_dir,$(1))/,$(addsuffix
.lds,$(basename $(basename $
)
endef
+# converts paths device tree source file to the device tree binary blob
+# dts2dtb $libname,$dts
+define dts2dtb =
+$(addprefix $(call sub_build_dir,$(1))/,$(addsuffix .dtb,$(basename $(notdir
$(2)))))
+endef
+
################################################################################
#
# Variable name prefixes
@@ -431,12 +437,24 @@ UK_DEPS-y += $(call out2dep,$(3))
$(eval $(call vprefix_lib,$(1),CLEAN-y) += $(call build_clean,$(3)) $(call
out2dep,$(3)))
endef
+define buildrule_dts =
+$(3) : $(2) | prepare
+ $(call build_cmd,DTC,$(1),$(3),\
+ $(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)))
+endef
+
# wrapper for buildrule_*,
# selects appropriate buildrule depending on file extension
#
# buildrule $libname,$source,$target,$extraflags(optional)
define buildrule =
$(if $(filter %.lds.S,$(2)),$(call buildrule_lds,$(1),$(2),$(3),$(4)),\
+$(if $(filter %.dts, $(2)),$(call buildrule_dts,$(1),$(2),$(3),$(4)),\
$(if $(filter %.S, $(2)),$(call buildrule_S ,$(1),$(2),$(3),$(4)),\
$(if $(filter %.sx, $(2)),$(call buildrule_S ,$(1),$(2),$(3),$(4)),\
$(if $(filter %.s, $(2)),$(call buildrule_s ,$(1),$(2),$(3),$(4)),\
@@ -449,7 +467,7 @@ $(if $(filter %.CPP, $(2)),$(call buildrule_cc
,$(1),$(2),$(3),$(4)),\
$(if $(filter %.c++, $(2)),$(call buildrule_cc ,$(1),$(2),$(3),$(4)),\
$(if $(filter %.C, $(2)),$(call buildrule_cc ,$(1),$(2),$(3),$(4)),\
$(error $(3): missing build rule for source type $(suffix $(2))) \
-))))))))))))
+)))))))))))))
endef
@@ -508,8 +526,10 @@ endef
# buildrule_libobj $libname,$source,$variant(optional)
define buildrule_libobj =
$(if $(filter %.lds.S,$(2)),\
- $(eval target=$(call src2lds,$(1),$(2))),\
- $(eval target=$(call src2obj,$(1),$(2),$(3))))
+ $(eval target=$(call src2lds,$(1),$(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))\
@@ -582,7 +602,9 @@ $(if $(wildcard $($(call vprefix_lib,$(1),EXPORTS))),,\
$(call libname2preolib,$(1)): $($(call vprefix_lib,$(1),OBJS)) \
$($(call vprefix_lib,$(1),OBJS-y)) \
$($(call vprefix_lib,$(1),ALIBS)) \
- $($(call vprefix_lib,$(1),ALIBS-y))
+ $($(call vprefix_lib,$(1),ALIBS-y))\
+ $($(call vprefix_lib,$(1),DTB)) \
+ $($(call vprefix_lib,$(1),DTB-y))
$(call build_cmd,LD,,$(call libname2preolib,$(1)),\
$(LD) $(LIBLDFLAGS) $(LIBLDFLAGS-y) \
$($(call vprefix_lib,$(1),LDFLAGS)) \
--
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 |