164 lines
4 KiB
Makefile
164 lines
4 KiB
Makefile
|
|
DTC ?= dtc
|
|
CPP ?= cpp
|
|
|
|
MAKEFLAGS += -rR --no-print-directory
|
|
|
|
ALL_ARCHES := $(patsubst src/%,%,$(wildcard src/*))
|
|
|
|
PHONY += all
|
|
all: $(foreach i,$(ALL_ARCHES),all_$(i))
|
|
|
|
PHONY += clean
|
|
clean: $(foreach i,$(ALL_ARCHES),clean_$(i))
|
|
|
|
# Do not:
|
|
# o use make's built-in rules and variables
|
|
# (this increases performance and avoids hard-to-debug behaviour);
|
|
# o print "Entering directory ...";
|
|
MAKEFLAGS += -rR --no-print-directory
|
|
|
|
# To put more focus on warnings, be less verbose as default
|
|
# Use 'make V=1' to see the full commands
|
|
|
|
ifeq ("$(origin V)", "command line")
|
|
KBUILD_VERBOSE = $(V)
|
|
endif
|
|
ifndef KBUILD_VERBOSE
|
|
KBUILD_VERBOSE = 0
|
|
endif
|
|
|
|
# Beautify output
|
|
# ---------------------------------------------------------------------------
|
|
#
|
|
# Normally, we echo the whole command before executing it. By making
|
|
# that echo $($(quiet)$(cmd)), we now have the possibility to set
|
|
# $(quiet) to choose other forms of output instead, e.g.
|
|
#
|
|
# quiet_cmd_cc_o_c = Compiling $(RELDIR)/$@
|
|
# cmd_cc_o_c = $(CC) $(c_flags) -c -o $@ $<
|
|
#
|
|
# If $(quiet) is empty, the whole command will be printed.
|
|
# If it is set to "quiet_", only the short version will be printed.
|
|
# If it is set to "silent_", nothing will be printed at all, since
|
|
# the variable $(silent_cmd_cc_o_c) doesn't exist.
|
|
#
|
|
# A simple variant is to prefix commands with $(Q) - that's useful
|
|
# for commands that shall be hidden in non-verbose mode.
|
|
#
|
|
# $(Q)ln $@ :<
|
|
#
|
|
# If KBUILD_VERBOSE equals 0 then the above command will be hidden.
|
|
# If KBUILD_VERBOSE equals 1 then the above command is displayed.
|
|
|
|
ifeq ($(KBUILD_VERBOSE),1)
|
|
quiet =
|
|
Q =
|
|
else
|
|
quiet=quiet_
|
|
Q = @
|
|
endif
|
|
|
|
# If the user is running make -s (silent mode), suppress echoing of
|
|
# commands
|
|
|
|
ifneq ($(filter 4.%,$(MAKE_VERSION)),) # make-4
|
|
ifneq ($(filter %s ,$(firstword x$(MAKEFLAGS))),)
|
|
quiet=silent_
|
|
endif
|
|
else # make-3.8x
|
|
ifneq ($(filter s% -s%,$(MAKEFLAGS)),)
|
|
quiet=silent_
|
|
endif
|
|
endif
|
|
|
|
export quiet Q KBUILD_VERBOSE
|
|
|
|
all_%:
|
|
$(Q)$(MAKE) ARCH=$* all_arch
|
|
|
|
clean_%:
|
|
$(Q)$(MAKE) ARCH=$* clean_arch
|
|
|
|
ifeq ($(ARCH),)
|
|
|
|
ALL_DTS := $(shell find src/* -name \*.dts)
|
|
|
|
ALL_DTB := $(patsubst %.dts,%.dtb,$(ALL_DTS))
|
|
|
|
$(ALL_DTB): ARCH=$(word 2,$(subst /, ,$@))
|
|
$(ALL_DTB): FORCE
|
|
$(Q)$(MAKE) ARCH=$(ARCH) $@
|
|
|
|
else
|
|
|
|
ARCH_DTS := $(shell find src/$(ARCH) -name \*.dts)
|
|
|
|
ARCH_DTB := $(patsubst %.dts,%.dtb,$(ARCH_DTS))
|
|
|
|
src := src/$(ARCH)
|
|
obj := src/$(ARCH)
|
|
|
|
include scripts/Kbuild.include
|
|
|
|
cmd_files := $(wildcard $(foreach f,$(ARCH_DTB),$(dir $(f)).$(notdir $(f)).cmd))
|
|
|
|
ifneq ($(cmd_files),)
|
|
include $(cmd_files)
|
|
endif
|
|
|
|
quiet_cmd_clean = CLEAN $(obj)
|
|
cmd_clean = rm -f $(__clean-files)
|
|
|
|
dtc-tmp = $(subst $(comma),_,$(dot-target).dts.tmp)
|
|
|
|
dtc_cpp_flags = -Wp,-MD,$(depfile).pre.tmp -nostdinc \
|
|
-Iinclude -I$(src) -Itestcase-data \
|
|
-undef -D__DTS__
|
|
|
|
quiet_cmd_dtc = DTC $@
|
|
cmd_dtc = $(CPP) $(dtc_cpp_flags) -x assembler-with-cpp -o $(dtc-tmp) $< ; \
|
|
$(DTC) -O dtb -o $@ -b 0 \
|
|
-i $(src) $(DTC_FLAGS) \
|
|
-d $(depfile).dtc.tmp $(dtc-tmp) ; \
|
|
cat $(depfile).pre.tmp $(depfile).dtc.tmp > $(depfile)
|
|
|
|
$(obj)/%.dtb: $(src)/%.dts FORCE
|
|
$(call if_changed_dep,dtc)
|
|
|
|
PHONY += all_arch
|
|
all_arch: $(ARCH_DTB)
|
|
@:
|
|
|
|
RCS_FIND_IGNORE := \( -name SCCS -o -name BitKeeper -o -name .svn -o -name CVS \
|
|
-o -name .pc -o -name .hg -o -name .git \) -prune -o
|
|
|
|
PHONY += clean_arch
|
|
clean_arch: __clean-files = $(ARCH_DTB)
|
|
clean_arch: FORCE
|
|
$(call cmd,clean)
|
|
@find . $(RCS_FIND_IGNORE) \
|
|
\( -name '.*.cmd' \
|
|
-o -name '.*.d' \
|
|
-o -name '.*.tmp' \
|
|
\) -type f -print | xargs rm -f
|
|
|
|
endif
|
|
|
|
help:
|
|
@echo "Targets:"
|
|
@echo " all: Build all device tree binaries for all architectures"
|
|
@echo " clean: Clean all generated files"
|
|
@echo ""
|
|
@echo " all_<ARCH>: Build all device tree binaries for <ARCH>"
|
|
@echo " clean_<ARCH>: Clean all generated files for <ARCH>"
|
|
@echo ""
|
|
@echo " src/<ARCH>/<DTS>.dtb Build a single device tree binary"
|
|
@echo ""
|
|
@echo "Architectures: $(ALL_ARCHES)"
|
|
|
|
PHONY += FORCE
|
|
FORCE:
|
|
|
|
.PHONY: $(PHONY)
|