1*22ce4affSfengbojiang 2*22ce4affSfengbojiangDTC ?= dtc 3*22ce4affSfengbojiangCPP ?= cpp 4*22ce4affSfengbojiang 5*22ce4affSfengbojiang# Disable noisy checks by default 6*22ce4affSfengbojiangifeq ($(findstring 1,$(DTC_VERBOSE)),) 7*22ce4affSfengbojiangDTC_FLAGS += -Wno-unit_address_vs_reg \ 8*22ce4affSfengbojiang -Wno-unit_address_format \ 9*22ce4affSfengbojiang -Wno-avoid_unnecessary_addr_size \ 10*22ce4affSfengbojiang -Wno-alias_paths \ 11*22ce4affSfengbojiang -Wno-graph_child_address \ 12*22ce4affSfengbojiang -Wno-simple_bus_reg \ 13*22ce4affSfengbojiang -Wno-unique_unit_address \ 14*22ce4affSfengbojiang -Wno-pci_device_reg 15*22ce4affSfengbojiangendif 16*22ce4affSfengbojiang 17*22ce4affSfengbojiangifneq ($(findstring 2,$(DTC_VERBOSE)),) 18*22ce4affSfengbojiangDTC_FLAGS += -Wnode_name_chars_strict \ 19*22ce4affSfengbojiang -Wproperty_name_chars_strict 20*22ce4affSfengbojiangendif 21*22ce4affSfengbojiang 22*22ce4affSfengbojiangMAKEFLAGS += -rR --no-print-directory 23*22ce4affSfengbojiang 24*22ce4affSfengbojiangALL_ARCHES := $(patsubst src/%,%,$(wildcard src/*)) 25*22ce4affSfengbojiang 26*22ce4affSfengbojiangPHONY += all 27*22ce4affSfengbojiangall: $(foreach i,$(ALL_ARCHES),all_$(i)) 28*22ce4affSfengbojiang 29*22ce4affSfengbojiangPHONY += clean 30*22ce4affSfengbojiangclean: $(foreach i,$(ALL_ARCHES),clean_$(i)) 31*22ce4affSfengbojiang 32*22ce4affSfengbojiang# Do not: 33*22ce4affSfengbojiang# o use make's built-in rules and variables 34*22ce4affSfengbojiang# (this increases performance and avoids hard-to-debug behaviour); 35*22ce4affSfengbojiang# o print "Entering directory ..."; 36*22ce4affSfengbojiangMAKEFLAGS += -rR --no-print-directory 37*22ce4affSfengbojiang 38*22ce4affSfengbojiang# To put more focus on warnings, be less verbose as default 39*22ce4affSfengbojiang# Use 'make V=1' to see the full commands 40*22ce4affSfengbojiang 41*22ce4affSfengbojiangifeq ("$(origin V)", "command line") 42*22ce4affSfengbojiang KBUILD_VERBOSE = $(V) 43*22ce4affSfengbojiangendif 44*22ce4affSfengbojiangifndef KBUILD_VERBOSE 45*22ce4affSfengbojiang KBUILD_VERBOSE = 0 46*22ce4affSfengbojiangendif 47*22ce4affSfengbojiang 48*22ce4affSfengbojiang# Beautify output 49*22ce4affSfengbojiang# --------------------------------------------------------------------------- 50*22ce4affSfengbojiang# 51*22ce4affSfengbojiang# Normally, we echo the whole command before executing it. By making 52*22ce4affSfengbojiang# that echo $($(quiet)$(cmd)), we now have the possibility to set 53*22ce4affSfengbojiang# $(quiet) to choose other forms of output instead, e.g. 54*22ce4affSfengbojiang# 55*22ce4affSfengbojiang# quiet_cmd_cc_o_c = Compiling $(RELDIR)/$@ 56*22ce4affSfengbojiang# cmd_cc_o_c = $(CC) $(c_flags) -c -o $@ $< 57*22ce4affSfengbojiang# 58*22ce4affSfengbojiang# If $(quiet) is empty, the whole command will be printed. 59*22ce4affSfengbojiang# If it is set to "quiet_", only the short version will be printed. 60*22ce4affSfengbojiang# If it is set to "silent_", nothing will be printed at all, since 61*22ce4affSfengbojiang# the variable $(silent_cmd_cc_o_c) doesn't exist. 62*22ce4affSfengbojiang# 63*22ce4affSfengbojiang# A simple variant is to prefix commands with $(Q) - that's useful 64*22ce4affSfengbojiang# for commands that shall be hidden in non-verbose mode. 65*22ce4affSfengbojiang# 66*22ce4affSfengbojiang# $(Q)ln $@ :< 67*22ce4affSfengbojiang# 68*22ce4affSfengbojiang# If KBUILD_VERBOSE equals 0 then the above command will be hidden. 69*22ce4affSfengbojiang# If KBUILD_VERBOSE equals 1 then the above command is displayed. 70*22ce4affSfengbojiang 71*22ce4affSfengbojiangifeq ($(KBUILD_VERBOSE),1) 72*22ce4affSfengbojiang quiet = 73*22ce4affSfengbojiang Q = 74*22ce4affSfengbojiangelse 75*22ce4affSfengbojiang quiet=quiet_ 76*22ce4affSfengbojiang Q = @ 77*22ce4affSfengbojiangendif 78*22ce4affSfengbojiang 79*22ce4affSfengbojiang# If the user is running make -s (silent mode), suppress echoing of 80*22ce4affSfengbojiang# commands 81*22ce4affSfengbojiang 82*22ce4affSfengbojiangifneq ($(filter 4.%,$(MAKE_VERSION)),) # make-4 83*22ce4affSfengbojiangifneq ($(filter %s ,$(firstword x$(MAKEFLAGS))),) 84*22ce4affSfengbojiang quiet=silent_ 85*22ce4affSfengbojiangendif 86*22ce4affSfengbojiangelse # make-3.8x 87*22ce4affSfengbojiangifneq ($(filter s% -s%,$(MAKEFLAGS)),) 88*22ce4affSfengbojiang quiet=silent_ 89*22ce4affSfengbojiangendif 90*22ce4affSfengbojiangendif 91*22ce4affSfengbojiang 92*22ce4affSfengbojiangexport quiet Q KBUILD_VERBOSE 93*22ce4affSfengbojiang 94*22ce4affSfengbojiangall_%: 95*22ce4affSfengbojiang $(Q)$(MAKE) ARCH=$* all_arch 96*22ce4affSfengbojiang 97*22ce4affSfengbojiangclean_%: 98*22ce4affSfengbojiang $(Q)$(MAKE) ARCH=$* clean_arch 99*22ce4affSfengbojiang 100*22ce4affSfengbojiangifeq ($(ARCH),) 101*22ce4affSfengbojiang 102*22ce4affSfengbojiangALL_DTS := $(shell find src/* -name \*.dts) 103*22ce4affSfengbojiang 104*22ce4affSfengbojiangALL_DTB := $(patsubst %.dts,%.dtb,$(ALL_DTS)) 105*22ce4affSfengbojiang 106*22ce4affSfengbojiang$(ALL_DTB): ARCH=$(word 2,$(subst /, ,$@)) 107*22ce4affSfengbojiang$(ALL_DTB): FORCE 108*22ce4affSfengbojiang $(Q)$(MAKE) ARCH=$(ARCH) $@ 109*22ce4affSfengbojiang 110*22ce4affSfengbojiangelse 111*22ce4affSfengbojiang 112*22ce4affSfengbojiangARCH_DTS := $(shell find src/$(ARCH) -name \*.dts) 113*22ce4affSfengbojiang 114*22ce4affSfengbojiangARCH_DTB := $(patsubst %.dts,%.dtb,$(ARCH_DTS)) 115*22ce4affSfengbojiang 116*22ce4affSfengbojiangsrc := src/$(ARCH) 117*22ce4affSfengbojiangobj := src/$(ARCH) 118*22ce4affSfengbojiang 119*22ce4affSfengbojianginclude scripts/Kbuild.include 120*22ce4affSfengbojiang 121*22ce4affSfengbojiangcmd_files := $(wildcard $(foreach f,$(ARCH_DTB),$(dir $(f)).$(notdir $(f)).cmd)) 122*22ce4affSfengbojiang 123*22ce4affSfengbojiangifneq ($(cmd_files),) 124*22ce4affSfengbojiang include $(cmd_files) 125*22ce4affSfengbojiangendif 126*22ce4affSfengbojiang 127*22ce4affSfengbojiangquiet_cmd_clean = CLEAN $(obj) 128*22ce4affSfengbojiang cmd_clean = rm -f $(__clean-files) 129*22ce4affSfengbojiang 130*22ce4affSfengbojiangdtc-tmp = $(subst $(comma),_,$(dot-target).dts.tmp) 131*22ce4affSfengbojiang 132*22ce4affSfengbojiangdtc_cpp_flags = -Wp,-MD,$(depfile).pre.tmp -nostdinc \ 133*22ce4affSfengbojiang -Iinclude -I$(src) -Isrc -Itestcase-data \ 134*22ce4affSfengbojiang -undef -D__DTS__ 135*22ce4affSfengbojiang 136*22ce4affSfengbojiangquiet_cmd_dtc = DTC $@ 137*22ce4affSfengbojiangcmd_dtc = $(CPP) $(dtc_cpp_flags) -x assembler-with-cpp -o $(dtc-tmp) $< ; \ 138*22ce4affSfengbojiang $(DTC) -O dtb -o $@ -b 0 \ 139*22ce4affSfengbojiang -i $(src) $(DTC_FLAGS) \ 140*22ce4affSfengbojiang -d $(depfile).dtc.tmp $(dtc-tmp) ; \ 141*22ce4affSfengbojiang cat $(depfile).pre.tmp $(depfile).dtc.tmp > $(depfile) 142*22ce4affSfengbojiang 143*22ce4affSfengbojiang$(obj)/%.dtb: $(src)/%.dts FORCE 144*22ce4affSfengbojiang $(call if_changed_dep,dtc) 145*22ce4affSfengbojiang 146*22ce4affSfengbojiangPHONY += all_arch 147*22ce4affSfengbojiangall_arch: $(ARCH_DTB) 148*22ce4affSfengbojiang @: 149*22ce4affSfengbojiang 150*22ce4affSfengbojiangRCS_FIND_IGNORE := \( -name SCCS -o -name BitKeeper -o -name .svn -o -name CVS \ 151*22ce4affSfengbojiang -o -name .pc -o -name .hg -o -name .git \) -prune -o 152*22ce4affSfengbojiang 153*22ce4affSfengbojiangPHONY += clean_arch 154*22ce4affSfengbojiangclean_arch: __clean-files = $(ARCH_DTB) 155*22ce4affSfengbojiangclean_arch: FORCE 156*22ce4affSfengbojiang $(call cmd,clean) 157*22ce4affSfengbojiang @find . $(RCS_FIND_IGNORE) \ 158*22ce4affSfengbojiang \( -name '.*.cmd' \ 159*22ce4affSfengbojiang -o -name '.*.d' \ 160*22ce4affSfengbojiang -o -name '.*.tmp' \ 161*22ce4affSfengbojiang \) -type f -print | xargs rm -f 162*22ce4affSfengbojiang 163*22ce4affSfengbojiangendif 164*22ce4affSfengbojiang 165*22ce4affSfengbojianghelp: 166*22ce4affSfengbojiang @echo "Targets:" 167*22ce4affSfengbojiang @echo " all: Build all device tree binaries for all architectures" 168*22ce4affSfengbojiang @echo " clean: Clean all generated files" 169*22ce4affSfengbojiang @echo "" 170*22ce4affSfengbojiang @echo " all_<ARCH>: Build all device tree binaries for <ARCH>" 171*22ce4affSfengbojiang @echo " clean_<ARCH>: Clean all generated files for <ARCH>" 172*22ce4affSfengbojiang @echo "" 173*22ce4affSfengbojiang @echo " src/<ARCH>/<DTS>.dtb Build a single device tree binary" 174*22ce4affSfengbojiang @echo "" 175*22ce4affSfengbojiang @echo "Architectures: $(ALL_ARCHES)" 176*22ce4affSfengbojiang 177*22ce4affSfengbojiangPHONY += FORCE 178*22ce4affSfengbojiangFORCE: 179*22ce4affSfengbojiang 180*22ce4affSfengbojiang.PHONY: $(PHONY) 181