Orange Pi5 kernel

Deprecated Linux kernel 5.10.110 for OrangePi 5/5B/5+ boards

3 Commits   0 Branches   0 Tags
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   1) # SPDX-License-Identifier: GPL-2.0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   2) ####
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   3) # kbuild: Generic definitions
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   4) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   5) # Convenient variables
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   6) comma   := ,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   7) quote   := "
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   8) squote  := '
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   9) empty   :=
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  10) space   := $(empty) $(empty)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  11) space_escape := _-_SPACE_-_
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  12) pound := \#
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  13) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  14) ###
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  15) # Name of target with a '.' as filename prefix. foo/bar.o => foo/.bar.o
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  16) dot-target = $(dir $@).$(notdir $@)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  17) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  18) ###
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  19) # The temporary file to save gcc -MMD generated dependencies must not
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  20) # contain a comma
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  21) depfile = $(subst $(comma),_,$(dot-target).d)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  22) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  23) ###
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  24) # filename of target with directory and extension stripped
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  25) basetarget = $(basename $(notdir $@))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  26) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  27) ###
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  28) # real prerequisites without phony targets
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  29) real-prereqs = $(filter-out $(PHONY), $^)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  30) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  31) ###
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  32) # Escape single quote for use in echo statements
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  33) escsq = $(subst $(squote),'\$(squote)',$1)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  34) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  35) ###
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  36) # Quote a string to pass it to C files. foo => '"foo"'
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  37) stringify = $(squote)$(quote)$1$(quote)$(squote)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  38) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  39) ###
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  40) # Easy method for doing a status message
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  41)        kecho := :
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  42)  quiet_kecho := echo
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  43) silent_kecho := :
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  44) kecho := $($(quiet)kecho)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  45) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  46) ###
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  47) # filechk is used to check if the content of a generated file is updated.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  48) # Sample usage:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  49) #
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  50) # filechk_sample = echo $(KERNELRELEASE)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  51) # version.h: FORCE
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  52) #	$(call filechk,sample)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  53) #
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  54) # The rule defined shall write to stdout the content of the new file.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  55) # The existing file will be compared with the new one.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  56) # - If no file exist it is created
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  57) # - If the content differ the new file is used
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  58) # - If they are equal no change, and no timestamp update
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  59) define filechk
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  60) 	$(Q)set -e;						\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  61) 	mkdir -p $(dir $@);					\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  62) 	trap "rm -f $(dot-target).tmp" EXIT;			\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  63) 	{ $(filechk_$(1)); } > $(dot-target).tmp;		\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  64) 	if [ ! -r $@ ] || ! cmp -s $@ $(dot-target).tmp; then	\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  65) 		$(kecho) '  UPD     $@';			\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  66) 		mv -f $(dot-target).tmp $@;			\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  67) 	fi
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  68) endef
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  69) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  70) ######
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  71) # gcc support functions
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  72) # See documentation in Documentation/kbuild/makefiles.rst
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  73) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  74) # cc-cross-prefix
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  75) # Usage: CROSS_COMPILE := $(call cc-cross-prefix, m68k-linux-gnu- m68k-linux-)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  76) # Return first <prefix> where a <prefix>gcc is found in PATH.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  77) # If no gcc found in PATH with listed prefixes return nothing
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  78) #
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  79) # Note: '2>/dev/null' is here to force Make to invoke a shell. Otherwise, it
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  80) # would try to directly execute the shell builtin 'command'. This workaround
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  81) # should be kept for a long time since this issue was fixed only after the
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  82) # GNU Make 4.2.1 release.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  83) cc-cross-prefix = $(firstword $(foreach c, $(1), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  84) 			$(if $(shell command -v -- $(c)gcc 2>/dev/null), $(c))))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  85) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  86) # output directory for tests below
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  87) TMPOUT = $(if $(KBUILD_EXTMOD),$(firstword $(KBUILD_EXTMOD))/).tmp_$$$$
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  88) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  89) # try-run
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  90) # Usage: option = $(call try-run, $(CC)...-o "$$TMP",option-ok,otherwise)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  91) # Exit code chooses option. "$$TMP" serves as a temporary file and is
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  92) # automatically cleaned up.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  93) try-run = $(shell set -e;		\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  94) 	TMP=$(TMPOUT)/tmp;		\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  95) 	TMPO=$(TMPOUT)/tmp.o;		\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  96) 	mkdir -p $(TMPOUT);		\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  97) 	trap "rm -rf $(TMPOUT)" EXIT;	\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  98) 	if ($(1)) >/dev/null 2>&1;	\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  99) 	then echo "$(2)";		\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 100) 	else echo "$(3)";		\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 101) 	fi)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 102) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 103) # as-option
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 104) # Usage: cflags-y += $(call as-option,-Wa$(comma)-isa=foo,)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 105) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 106) as-option = $(call try-run,\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 107) 	$(CC) $(KBUILD_CFLAGS) $(1) -c -x assembler /dev/null -o "$$TMP",$(1),$(2))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 108) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 109) # as-instr
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 110) # Usage: cflags-y += $(call as-instr,instr,option1,option2)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 111) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 112) as-instr = $(call try-run,\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 113) 	printf "%b\n" "$(1)" | $(CC) $(KBUILD_AFLAGS) -c -x assembler -o "$$TMP" -,$(2),$(3))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 114) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 115) # __cc-option
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 116) # Usage: MY_CFLAGS += $(call __cc-option,$(CC),$(MY_CFLAGS),-march=winchip-c6,-march=i586)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 117) __cc-option = $(call try-run,\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 118) 	$(1) -Werror $(2) $(3) -c -x c /dev/null -o "$$TMP",$(3),$(4))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 119) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 120) # cc-option
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 121) # Usage: cflags-y += $(call cc-option,-march=winchip-c6,-march=i586)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 122) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 123) cc-option = $(call __cc-option, $(CC),\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 124) 	$(KBUILD_CPPFLAGS) $(KBUILD_CFLAGS),$(1),$(2))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 125) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 126) # cc-option-yn
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 127) # Usage: flag := $(call cc-option-yn,-march=winchip-c6)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 128) cc-option-yn = $(call try-run,\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 129) 	$(CC) -Werror $(KBUILD_CPPFLAGS) $(KBUILD_CFLAGS) $(1) -c -x c /dev/null -o "$$TMP",y,n)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 130) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 131) # cc-disable-warning
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 132) # Usage: cflags-y += $(call cc-disable-warning,unused-but-set-variable)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 133) cc-disable-warning = $(call try-run,\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 134) 	$(CC) -Werror $(KBUILD_CPPFLAGS) $(KBUILD_CFLAGS) -W$(strip $(1)) -c -x c /dev/null -o "$$TMP",-Wno-$(strip $(1)))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 135) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 136) # cc-ifversion
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 137) # Usage:  EXTRA_CFLAGS += $(call cc-ifversion, -lt, 0402, -O1)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 138) cc-ifversion = $(shell [ $(CONFIG_GCC_VERSION)0 $(1) $(2)000 ] && echo $(3) || echo $(4))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 139) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 140) # ld-option
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 141) # Usage: KBUILD_LDFLAGS += $(call ld-option, -X, -Y)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 142) ld-option = $(call try-run, $(LD) $(KBUILD_LDFLAGS) $(1) -v,$(1),$(2),$(3))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 143) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 144) # ld-version
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 145) # Note this is mainly for HJ Lu's 3 number binutil versions
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 146) ld-version = $(shell $(LD) --version | $(srctree)/scripts/ld-version.sh)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 147) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 148) # ld-ifversion
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 149) # Usage:  $(call ld-ifversion, -ge, 22252, y)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 150) ld-ifversion = $(shell [ $(ld-version) $(1) $(2) ] && echo $(3) || echo $(4))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 151) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 152) ######
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 153) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 154) ###
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 155) # Shorthand for $(Q)$(MAKE) -f scripts/Makefile.build obj=
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 156) # Usage:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 157) # $(Q)$(MAKE) $(build)=dir
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 158) build := -f $(srctree)/scripts/Makefile.build obj
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 159) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 160) ###
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 161) # Shorthand for $(Q)$(MAKE) -f scripts/Makefile.dtbinst obj=
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 162) # Usage:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 163) # $(Q)$(MAKE) $(dtbinst)=dir
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 164) dtbinst := -f $(srctree)/scripts/Makefile.dtbinst obj
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 165) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 166) ###
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 167) # Shorthand for $(Q)$(MAKE) -f scripts/Makefile.clean obj=
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 168) # Usage:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 169) # $(Q)$(MAKE) $(clean)=dir
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 170) clean := -f $(srctree)/scripts/Makefile.clean obj
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 171) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 172) # echo command.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 173) # Short version is used, if $(quiet) equals `quiet_', otherwise full one.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 174) echo-cmd = $(if $($(quiet)cmd_$(1)),\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 175) 	echo '  $(call escsq,$($(quiet)cmd_$(1)))$(echo-why)';)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 176) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 177) # sink stdout for 'make -s'
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 178)        redirect :=
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 179)  quiet_redirect :=
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 180) silent_redirect := exec >/dev/null;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 181) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 182) # printing commands
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 183) cmd = @set -e; $(echo-cmd) $($(quiet)redirect) $(cmd_$(1))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 184) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 185) ###
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 186) # if_changed      - execute command if any prerequisite is newer than
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 187) #                   target, or command line has changed
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 188) # if_changed_dep  - as if_changed, but uses fixdep to reveal dependencies
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 189) #                   including used config symbols
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 190) # if_changed_rule - as if_changed but execute rule instead
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 191) # See Documentation/kbuild/makefiles.rst for more info
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 192) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 193) ifneq ($(KBUILD_NOCMDDEP),1)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 194) # Check if both commands are the same including their order. Result is empty
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 195) # string if equal. User may override this check using make KBUILD_NOCMDDEP=1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 196) cmd-check = $(filter-out $(subst $(space),$(space_escape),$(strip $(cmd_$@))), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 197)                          $(subst $(space),$(space_escape),$(strip $(cmd_$1))))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 198) else
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 199) cmd-check = $(if $(strip $(cmd_$@)),,1)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 200) endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 201) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 202) # Replace >$< with >$$< to preserve $ when reloading the .cmd file
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 203) # (needed for make)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 204) # Replace >#< with >$(pound)< to avoid starting a comment in the .cmd file
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 205) # (needed for make)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 206) # Replace >'< with >'\''< to be able to enclose the whole string in '...'
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 207) # (needed for the shell)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 208) make-cmd = $(call escsq,$(subst $(pound),$$(pound),$(subst $$,$$$$,$(cmd_$(1)))))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 209) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 210) # Find any prerequisites that are newer than target or that do not exist.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 211) # (This is not true for now; $? should contain any non-existent prerequisites,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 212) # but it does not work as expected when .SECONDARY is present. This seems a bug
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 213) # of GNU Make.)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 214) # PHONY targets skipped in both cases.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 215) newer-prereqs = $(filter-out $(PHONY),$?)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 216) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 217) # Execute command if command has changed or prerequisite(s) are updated.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 218) if_changed = $(if $(newer-prereqs)$(cmd-check),                              \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 219) 	$(cmd);                                                              \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 220) 	printf '%s\n' 'cmd_$@ := $(make-cmd)' > $(dot-target).cmd, @:)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 221) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 222) # Execute the command and also postprocess generated .d dependencies file.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 223) if_changed_dep = $(if $(newer-prereqs)$(cmd-check),$(cmd_and_fixdep),@:)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 224) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 225) cmd_and_fixdep =                                                             \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 226) 	$(cmd);                                                              \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 227) 	scripts/basic/fixdep $(depfile) $@ '$(make-cmd)' > $(dot-target).cmd;\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 228) 	rm -f $(depfile)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 229) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 230) # Usage: $(call if_changed_rule,foo)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 231) # Will check if $(cmd_foo) or any of the prerequisites changed,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 232) # and if so will execute $(rule_foo).
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 233) if_changed_rule = $(if $(newer-prereqs)$(cmd-check),$(rule_$(1)),@:)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 234) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 235) ###
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 236) # why - tell why a target got built
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 237) #       enabled by make V=2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 238) #       Output (listed in the order they are checked):
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 239) #          (1) - due to target is PHONY
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 240) #          (2) - due to target missing
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 241) #          (3) - due to: file1.h file2.h
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 242) #          (4) - due to command line change
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 243) #          (5) - due to missing .cmd file
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 244) #          (6) - due to target not in $(targets)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 245) # (1) PHONY targets are always build
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 246) # (2) No target, so we better build it
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 247) # (3) Prerequisite is newer than target
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 248) # (4) The command line stored in the file named dir/.target.cmd
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 249) #     differed from actual command line. This happens when compiler
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 250) #     options changes
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 251) # (5) No dir/.target.cmd file (used to store command line)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 252) # (6) No dir/.target.cmd file and target not listed in $(targets)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 253) #     This is a good hint that there is a bug in the kbuild file
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 254) ifeq ($(KBUILD_VERBOSE),2)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 255) why =                                                                        \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 256)     $(if $(filter $@, $(PHONY)),- due to target is PHONY,                    \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 257)         $(if $(wildcard $@),                                                 \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 258)             $(if $(newer-prereqs),- due to: $(newer-prereqs),                \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 259)                 $(if $(cmd-check),                                           \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 260)                     $(if $(cmd_$@),- due to command line change,             \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 261)                         $(if $(filter $@, $(targets)),                       \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 262)                             - due to missing .cmd file,                      \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 263)                             - due to $(notdir $@) not in $$(targets)         \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 264)                          )                                                   \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 265)                      )                                                       \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 266)                  )                                                           \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 267)              ),                                                              \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 268)              - due to target missing                                         \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 269)          )                                                                   \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 270)      )
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 271) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 272) echo-why = $(call escsq, $(strip $(why)))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 273) endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 274) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 275) ###############################################################################
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 276) #
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 277) # When a Kconfig string contains a filename, it is suitable for
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 278) # passing to shell commands. It is surrounded by double-quotes, and
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 279) # any double-quotes or backslashes within it are escaped by
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 280) # backslashes.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 281) #
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 282) # This is no use for dependencies or $(wildcard). We need to strip the
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 283) # surrounding quotes and the escaping from quotes and backslashes, and
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 284) # we *do* need to escape any spaces in the string. So, for example:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 285) #
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 286) # Usage: $(eval $(call config_filename,FOO))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 287) #
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 288) # Defines FOO_FILENAME based on the contents of the CONFIG_FOO option,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 289) # transformed as described above to be suitable for use within the
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 290) # makefile.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 291) #
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 292) # Also, if the filename is a relative filename and exists in the source
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 293) # tree but not the build tree, define FOO_SRCPREFIX as $(srctree)/ to
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 294) # be prefixed to *both* command invocation and dependencies.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 295) #
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 296) # Note: We also print the filenames in the quiet_cmd_foo text, and
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 297) # perhaps ought to have a version specially escaped for that purpose.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 298) # But it's only cosmetic, and $(patsubst "%",%,$(CONFIG_FOO)) is good
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 299) # enough.  It'll strip the quotes in the common case where there's no
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 300) # space and it's a simple filename, and it'll retain the quotes when
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 301) # there's a space. There are some esoteric cases in which it'll print
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 302) # the wrong thing, but we don't really care. The actual dependencies
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 303) # and commands *do* get it right, with various combinations of single
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 304) # and double quotes, backslashes and spaces in the filenames.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 305) #
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 306) ###############################################################################
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 307) #
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 308) define config_filename
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 309) ifneq ($$(CONFIG_$(1)),"")
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 310) $(1)_FILENAME := $$(subst \\,\,$$(subst \$$(quote),$$(quote),$$(subst $$(space_escape),\$$(space),$$(patsubst "%",%,$$(subst $$(space),$$(space_escape),$$(CONFIG_$(1)))))))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 311) ifneq ($$(patsubst /%,%,$$(firstword $$($(1)_FILENAME))),$$(firstword $$($(1)_FILENAME)))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 312) else
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 313) ifeq ($$(wildcard $$($(1)_FILENAME)),)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 314) ifneq ($$(wildcard $$(srctree)/$$($(1)_FILENAME)),)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 315) $(1)_SRCPREFIX := $(srctree)/
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 316) endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 317) endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 318) endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 319) endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 320) endef
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 321) #
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 322) ###############################################################################
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 323) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 324) # delete partially updated (i.e. corrupted) files on error
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 325) .DELETE_ON_ERROR:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 326) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 327) # do not delete intermediate files automatically
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 328) .SECONDARY: