diff --git a/Makefile b/Makefile index 06422eaac..87e35e910 100644 --- a/Makefile +++ b/Makefile @@ -125,7 +125,7 @@ OC := ${CROSS_COMPILE}objcopy OD := ${CROSS_COMPILE}objdump NM := ${CROSS_COMPILE}nm PP := ${CROSS_COMPILE}gcc -E -DTC ?= dtc +DTC := dtc # Use ${LD}.bfd instead if it exists (as absolute path or together with $PATH). ifneq ($(strip $(wildcard ${LD}.bfd) \ @@ -638,9 +638,7 @@ endif # Expand build macros for the different images ifeq (${NEED_FDT},yes) -$(eval $(call MAKE_DTBS,$(BUILD_PLAT)/fdts,$(FDT_SOURCES))) -$(eval $(call MAKE_FDT)) -dtbs: $(DTBS) + $(eval $(call MAKE_DTBS,$(BUILD_PLAT)/fdts,$(FDT_SOURCES))) endif locate-checkpatch: @@ -777,7 +775,7 @@ help: @echo " distclean Remove all build artifacts for all platforms" @echo " certtool Build the Certificate generation tool" @echo " fiptool Build the Firmware Image Package (FIP) creation tool" - @echo " dtbs Build the Flattened device tree (if required for the platform)" + @echo " dtbs Build the Device Tree Blobs (if required for the platform)" @echo "" @echo "Note: most build targets require PLAT to be set to a specific platform." @echo "" diff --git a/make_helpers/build_macros.mk b/make_helpers/build_macros.mk index 9119dcd21..eba9168c0 100644 --- a/make_helpers/build_macros.mk +++ b/make_helpers/build_macros.mk @@ -344,15 +344,18 @@ $(if $(2),$(call TOOL_ADD_IMG_PAYLOAD,bl$(1),$(BIN),--$(2),$(BIN),$(3))) endef +# Convert device tree source file names to matching blobs +# $(1) = input dts define SOURCES_TO_DTBS $(notdir $(patsubst %.dts,%.dtb,$(filter %.dts,$(1)))) endef -# MAKE_FDT macro defines the targets and options to build each FDT binary -# Arguments: (none) -define MAKE_FDT - $(eval DTB_BUILD_DIR := ${BUILD_PLAT}/fdts) - $(eval DTBS := $(addprefix $(DTB_BUILD_DIR)/,$(call SOURCES_TO_DTBS,$(FDT_SOURCES)))) +# MAKE_FDT_DIRS macro creates the prerequisite directories that host the +# FDT binaries +# $(1) = output directory +# $(2) = input dts +define MAKE_FDT_DIRS + $(eval DTBS := $(addprefix $(1)/,$(call SOURCES_TO_DTBS,$(2)))) $(eval TEMP_DTB_DIRS := $(sort $(dir ${DTBS}))) # The $(dir ) function leaves a trailing / on the directory names # Rip off the / to match directory names with make rule targets. @@ -361,19 +364,18 @@ define MAKE_FDT $(eval $(foreach objd,${DTB_DIRS},$(call MAKE_PREREQ_DIR,${objd},${BUILD_DIR}))) fdt_dirs: ${DTB_DIRS} - endef -# MAKE_DTB generate the Flattened device tree binary (device tree binary) +# MAKE_DTB generate the Flattened device tree binary # $(1) = output directory # $(2) = input dts define MAKE_DTB -$(eval DOBJ := $(1)/$(patsubst %.dts,%.dtb,$(notdir $(2)))) +$(eval DOBJ := $(addprefix $(1)/,$(call SOURCES_TO_DTBS,$(2)))) $(eval DEP := $(patsubst %.dtb,%.d,$(DOBJ))) $(DOBJ): $(2) $(MAKEFILE_LIST) | fdt_dirs - @echo " DTC $$<" + @echo " DTC $$<" $$(Q)$$(DTC) $$(DTC_FLAGS) -d $(DEP) -o $$@ $$< -include $(DEP) @@ -386,7 +388,11 @@ endef define MAKE_DTBS $(eval DOBJS := $(filter %.dts,$(2))) $(eval REMAIN := $(filter-out %.dts,$(2))) + $(and $(REMAIN),$(error FDT_SOURCES contain non-DTS files: $(REMAIN))) $(eval $(foreach obj,$(DOBJS),$(call MAKE_DTB,$(1),$(obj)))) - $(and $(REMAIN),$(error Unexpected s present: $(REMAIN))) + $(eval $(call MAKE_FDT_DIRS,$(1),$(2))) + +dtbs: $(DTBS) +all: dtbs endef