* [PATCH 1/2] arch: remove KBUILD_SRC checks from arch Makefile @ 2020-05-11 1:40 Masahiro Yamada 2020-05-11 1:40 ` [PATCH 2/2] kbuild: resync top Makefile, mkmakefile, tags.sh with Linux 5.7-rc4 Masahiro Yamada 0 siblings, 1 reply; 3+ messages in thread From: Masahiro Yamada @ 2020-05-11 1:40 UTC (permalink / raw) To: barebox; +Cc: Masahiro Yamada You can always add $(srctree)/ to the mach include path. Signed-off-by: Masahiro Yamada <masahiroy@kernel.org> --- arch/arm/Makefile | 4 ---- arch/mips/Makefile | 4 ---- arch/powerpc/Makefile | 4 ---- arch/riscv/Makefile | 4 ---- arch/sandbox/Makefile | 4 ---- arch/sandbox/os/Makefile | 4 ---- arch/x86/Makefile | 4 ---- 7 files changed, 28 deletions(-) diff --git a/arch/arm/Makefile b/arch/arm/Makefile index 62b397a73..6c7373c20 100644 --- a/arch/arm/Makefile +++ b/arch/arm/Makefile @@ -127,11 +127,7 @@ board-$(CONFIG_MACH_TINY6410) += friendlyarm-tiny6410 machdirs := $(patsubst %,arch/arm/mach-%/,$(machine-y)) -ifeq ($(KBUILD_SRC),) -KBUILD_CPPFLAGS += $(patsubst %,-I%include,$(machdirs)) -else KBUILD_CPPFLAGS += $(patsubst %,-I$(srctree)/%include,$(machdirs)) -endif TEXT_BASE = $(CONFIG_TEXT_BASE) diff --git a/arch/mips/Makefile b/arch/mips/Makefile index abfa82504..5604a0a10 100644 --- a/arch/mips/Makefile +++ b/arch/mips/Makefile @@ -82,11 +82,7 @@ machine-$(CONFIG_MACH_MIPS_LOONGSON) := loongson machine-$(CONFIG_MACH_MIPS_XBURST) := xburst machdirs := $(patsubst %,arch/mips/mach-%/,$(machine-y)) -ifeq ($(KBUILD_SRC),) -KBUILD_CPPFLAGS += $(patsubst %,-I%include,$(machdirs)) -else KBUILD_CPPFLAGS += $(patsubst %,-I$(srctree)/%include,$(machdirs)) -endif ifneq ($(machine-y),) MACH := arch/mips/mach-$(machine-y)/ diff --git a/arch/powerpc/Makefile b/arch/powerpc/Makefile index 148377791..aa7626049 100644 --- a/arch/powerpc/Makefile +++ b/arch/powerpc/Makefile @@ -36,11 +36,7 @@ endif machdirs := $(patsubst %,arch/powerpc/mach-%/,$(machine-y)) -ifeq ($(KBUILD_SRC),) -KBUILD_CPPFLAGS += $(patsubst %,-I%include,$(machdirs)) -else KBUILD_CPPFLAGS += $(patsubst %,-I$(srctree)/%include,$(machdirs)) -endif archprepare: maketools diff --git a/arch/riscv/Makefile b/arch/riscv/Makefile index 5096bde0d..c71319507 100644 --- a/arch/riscv/Makefile +++ b/arch/riscv/Makefile @@ -27,11 +27,7 @@ KBUILD_BINARY := barebox.bin machdirs := $(patsubst %,arch/riscv/mach-%/,$(machine-y)) -ifeq ($(KBUILD_SRC),) -KBUILD_CPPFLAGS += $(patsubst %,-I%include,$(machdirs)) -else KBUILD_CPPFLAGS += $(patsubst %,-I$(srctree)/%include,$(machdirs)) -endif archprepare: maketools diff --git a/arch/sandbox/Makefile b/arch/sandbox/Makefile index c205f47ff..3d2eb5bc1 100644 --- a/arch/sandbox/Makefile +++ b/arch/sandbox/Makefile @@ -29,11 +29,7 @@ KBUILD_CFLAGS += -Dmalloc=barebox_malloc -Dcalloc=barebox_calloc \ machdirs := $(patsubst %,arch/sandbox/mach-%/,$(machine-y)) -ifeq ($(KBUILD_SRC),) -KBUILD_CPPFLAGS += $(patsubst %,-I%include,$(machdirs)) -else KBUILD_CPPFLAGS += $(patsubst %,-I$(srctree)/%include,$(machdirs)) -endif archprepare: maketools diff --git a/arch/sandbox/os/Makefile b/arch/sandbox/os/Makefile index 40306b5ff..c012c9cf0 100644 --- a/arch/sandbox/os/Makefile +++ b/arch/sandbox/os/Makefile @@ -2,11 +2,7 @@ machine-y := sandbox machdirs := $(patsubst %,arch/sandbox/mach-%/,$(machine-y)) -ifeq ($(KBUILD_SRC),) -KBUILD_CPPFLAGS := $(patsubst %,-I%include,$(machdirs)) -else KBUILD_CPPFLAGS = $(patsubst %,-I$(srctree)/%include,$(machdirs)) -endif KBUILD_CPPFLAGS += -DCONFIG_MALLOC_SIZE=$(CONFIG_MALLOC_SIZE) diff --git a/arch/x86/Makefile b/arch/x86/Makefile index c93a680e4..97f6d85f2 100644 --- a/arch/x86/Makefile +++ b/arch/x86/Makefile @@ -46,11 +46,7 @@ endif machdirs := $(patsubst %,arch/x86/mach-%/,$(machine-y)) -ifeq ($(KBUILD_SRC),) -KBUILD_CPPFLAGS += $(patsubst %,-I%include,$(machdirs)) -else KBUILD_CPPFLAGS += $(patsubst %,-I$(srctree)/%include,$(machdirs)) -endif ifneq ($(board-y),) BOARD := arch/x86/boards/$(board-y)/ -- 2.25.1 _______________________________________________ barebox mailing list barebox@lists.infradead.org http://lists.infradead.org/mailman/listinfo/barebox ^ permalink raw reply [flat|nested] 3+ messages in thread
* [PATCH 2/2] kbuild: resync top Makefile, mkmakefile, tags.sh with Linux 5.7-rc4 2020-05-11 1:40 [PATCH 1/2] arch: remove KBUILD_SRC checks from arch Makefile Masahiro Yamada @ 2020-05-11 1:40 ` Masahiro Yamada 2020-05-12 6:27 ` Sascha Hauer 0 siblings, 1 reply; 3+ messages in thread From: Masahiro Yamada @ 2020-05-11 1:40 UTC (permalink / raw) To: barebox; +Cc: Masahiro Yamada The prologue of the build system is not specific to Linux or Barebox. Paritially resync with Linux 5.7-rc4 - In Linux, $(objtree) is always '.', and $(srctree) might be relative. I am keeping both absolute for now to avoid unexpected breakage. - I did not resync single target for now. We need to touch Makefile.build a lot if we want to resync it. - 'export CDPATH=' is Barebox-only code, which was added by commit 6cc8d0544658 ("Makefile: disable CDPATH"). Keep it. - KBUILD_SRC no longer exists in the upstream Linux. I replaced it with building_out_of_srctree. - scripts/mkmakefile does not contain anything specific to Linux or Barebox. Resync it with Linux 5.7-rc4 - scripts/tags was imported from Linux 3.6 with some cherry-picks on top of that. Resync it with Linux 5.7-rc4 Signed-off-by: Masahiro Yamada <masahiroy@kernel.org> --- Makefile | 605 +++++++++++++++++++++++------------------ firmware/Makefile | 2 +- scripts/Makefile.build | 2 +- scripts/Makefile.host | 2 +- scripts/Makefile.lib | 2 +- scripts/mkmakefile | 43 +-- scripts/tags.sh | 282 ++++++++++++------- 7 files changed, 538 insertions(+), 400 deletions(-) diff --git a/Makefile b/Makefile index be9f2a211..837ae47e2 100644 --- a/Makefile +++ b/Makefile @@ -1,3 +1,4 @@ +# SPDX-License-Identifier: GPL-2.0 VERSION = 2020 PATCHLEVEL = 04 SUBLEVEL = 0 @@ -10,11 +11,9 @@ NAME = None # Comments in this file are targeted only to the developer, do not # expect to learn how to build the kernel reading this file. -# 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 +# That's our default target when none is given on the command line +PHONY := _all +_all: # We are using a recursive build, so we need to do a little thinking # to get the ordering right. @@ -22,8 +21,8 @@ MAKEFLAGS += -rR --no-print-directory # Most importantly: sub-Makefiles should only ever modify files in # their own directory. If in some directory we have a dependency on # a file in another dir (which doesn't happen often, but it's often -# unavoidable when linking the built-in.o targets which finally -# turn into barebox), we will call a sub make in that other dir, and +# unavoidable when linking the built-in.a targets which finally +# turn into vmlinux), we will call a sub make in that other dir, and # after that we are sure that everything which is in that other dir # is now up to date. # @@ -32,6 +31,45 @@ MAKEFLAGS += -rR --no-print-directory # descending is started. They are now explicitly listed as the # prepare rule. +ifneq ($(sub_make_done),1) + +# Do not use make's built-in rules and variables +# (this increases performance and avoids hard-to-debug behaviour) +MAKEFLAGS += -rR + +# Avoid funny character set dependencies +unexport LC_ALL +LC_COLLATE=C +LC_NUMERIC=C +export LC_COLLATE LC_NUMERIC + +# Avoid interference with shell env settings +unexport GREP_OPTIONS + +# 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. +# If KBUILD_VERBOSE equals 2 then give the reason why each target is rebuilt. +# # To put more focus on warnings, be less verbose as default # Use 'make V=1' to see the full commands @@ -42,6 +80,119 @@ ifndef KBUILD_VERBOSE KBUILD_VERBOSE = 0 endif +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 ($(findstring s,$(filter-out --%,$(MAKEFLAGS))),) + quiet=silent_ +endif + +export quiet Q KBUILD_VERBOSE + +# Kbuild will save output files in the current working directory. +# This does not need to match to the root of the kernel source tree. +# +# For example, you can do this: +# +# cd /dir/to/store/output/files; make -f /dir/to/kernel/source/Makefile +# +# If you want to save output files in a different location, there are +# two syntaxes to specify it. +# +# 1) O= +# Use "make O=dir/to/store/output/files/" +# +# 2) Set KBUILD_OUTPUT +# Set the environment variable KBUILD_OUTPUT to point to the output directory. +# export KBUILD_OUTPUT=dir/to/store/output/files/; make +# +# The O= assignment takes precedence over the KBUILD_OUTPUT environment +# variable. + +# Do we want to change the working directory? +ifeq ("$(origin O)", "command line") + KBUILD_OUTPUT := $(O) +endif + +ifneq ($(KBUILD_OUTPUT),) +# Make's built-in functions such as $(abspath ...), $(realpath ...) cannot +# expand a shell special character '~'. We use a somewhat tedious way here. +abs_objtree := $(shell mkdir -p $(KBUILD_OUTPUT) && cd $(KBUILD_OUTPUT) && pwd) +$(if $(abs_objtree),, \ + $(error failed to create output directory "$(KBUILD_OUTPUT)")) + +# $(realpath ...) resolves symlinks +abs_objtree := $(realpath $(abs_objtree)) +else +abs_objtree := $(CURDIR) +endif # ifneq ($(KBUILD_OUTPUT),) + +ifeq ($(abs_objtree),$(CURDIR)) +# Suppress "Entering directory ..." unless we are changing the work directory. +MAKEFLAGS += --no-print-directory +else +need-sub-make := 1 +endif + +abs_srctree := $(realpath $(dir $(lastword $(MAKEFILE_LIST)))) + +ifneq ($(words $(subst :, ,$(abs_srctree))), 1) +$(error source directory cannot contain spaces or colons) +endif + +ifneq ($(abs_srctree),$(abs_objtree)) +# Look for make include files relative to root of kernel src +# +# This does not become effective immediately because MAKEFLAGS is re-parsed +# once after the Makefile is read. We need to invoke sub-make. +MAKEFLAGS += --include-dir=$(abs_srctree) +need-sub-make := 1 +endif + +ifneq ($(filter 3.%,$(MAKE_VERSION)),) +# 'MAKEFLAGS += -rR' does not immediately become effective for GNU Make 3.x +# We need to invoke sub-make to avoid implicit rules in the top Makefile. +need-sub-make := 1 +# Cancel implicit rules for this Makefile. +$(lastword $(MAKEFILE_LIST)): ; +endif + +export abs_srctree abs_objtree +export sub_make_done := 1 + +ifeq ($(need-sub-make),1) + +PHONY += $(MAKECMDGOALS) sub-make + +$(filter-out _all sub-make $(lastword $(MAKEFILE_LIST)), $(MAKECMDGOALS)) _all: sub-make + @: + +# Invoke a second make in the output directory, passing relevant variables +sub-make: + $(Q)$(MAKE) -C $(abs_objtree) -f $(abs_srctree)/Makefile $(MAKECMDGOALS) + +endif # need-sub-make +endif # sub_make_done + +# We process the rest of the Makefile if this is the final invocation of make +ifeq ($(need-sub-make),) + +# CDPATH can have sideeffects; disable, since we do know where we want to cd to +export CDPATH= + +# Do not print "Entering directory ...", +# but we want to display it when entering to the output directory +# so that IDEs/editors are able to understand relative filenames. +MAKEFLAGS += --no-print-directory + # Call a source code checker (by default, "sparse") as part of the # C compilation. # @@ -49,8 +200,8 @@ endif # Use 'make C=2' to enable checking of *all* source files, regardless # of whether they are re-compiled or not. # -# See the file "Documentation/sparse.txt" for more details, including -# where to get the "sparse" utility. +# See the file "Documentation/dev-tools/sparse.rst" for more details, +# including where to get the "sparse" utility. ifeq ("$(origin C)", "command line") KBUILD_CHECKSRC = $(C) @@ -59,91 +210,108 @@ ifndef KBUILD_CHECKSRC KBUILD_CHECKSRC = 0 endif -# Use make M=dir to specify directory of external module to build -# Old syntax make ... SUBDIRS=$PWD is still supported -# Setting the environment variable KBUILD_EXTMOD take precedence -ifdef SUBDIRS - KBUILD_EXTMOD ?= $(SUBDIRS) -endif +# Use make M=dir or set the environment variable KBUILD_EXTMOD to specify the +# directory of external module to build. Setting M= takes precedence. ifeq ("$(origin M)", "command line") KBUILD_EXTMOD := $(M) endif +export KBUILD_CHECKSRC KBUILD_EXTMOD -# kbuild supports saving output files in a separate directory. -# To locate output files in a separate directory two syntaxes are supported. -# In both cases the working directory must be the root of the kernel src. -# 1) O= -# Use "make O=dir/to/store/output/files/" -# -# 2) Set KBUILD_OUTPUT -# Set the environment variable KBUILD_OUTPUT to point to the directory -# where the output files shall be placed. -# export KBUILD_OUTPUT=dir/to/store/output/files/ -# make -# -# The O= assignment takes precedence over the KBUILD_OUTPUT environment -# variable. +ifeq ($(abs_srctree),$(abs_objtree)) + # building in the source tree + building_out_of_srctree := +else + building_out_of_srctree := 1 +endif +srctree := $(abs_srctree) +objtree := $(abs_objtree) +src := $(srctree) +obj := $(objtree) -# KBUILD_SRC is set on invocation of make in OBJ directory -# KBUILD_SRC is not intended to be used by the regular user (for now) -ifeq ($(KBUILD_SRC),) +VPATH := $(srctree) -# OK, Make called in directory where kernel src resides -# Do we want to locate output files in a separate directory? -ifeq ("$(origin O)", "command line") - KBUILD_OUTPUT := $(O) -endif +export building_out_of_srctree srctree objtree VPATH -# That's our default target when none is given on the command line -PHONY := _all -_all: +# To make sure we do not include .config for any of the *config targets +# catch them early, and hand them over to scripts/kconfig/Makefile +# It is allowed to specify more targets when calling make, including +# mixing *config targets and build targets. +# For example 'make oldconfig all'. +# Detect when mixed targets is specified, and make a second invocation +# of make so .config is not included in this case either (for *config). -ifneq ($(KBUILD_OUTPUT),) -# Invoke a second make in the output directory, passing relevant variables -# check that the output directory actually exists -saved-output := $(KBUILD_OUTPUT) -KBUILD_OUTPUT := $(shell mkdir -p $(KBUILD_OUTPUT) && cd $(KBUILD_OUTPUT) \ - && /bin/pwd) -$(if $(KBUILD_OUTPUT),, \ - $(error failed to create output directory "$(saved-output)")) +version_h := include/generated/version.h -PHONY += $(MAKECMDGOALS) sub-make +clean-targets := %clean mrproper cleandocs +no-dot-config-targets := $(clean-targets) \ + cscope gtags TAGS tags help% %docs \ + $(version_h) kernelversion outputmakefile +no-sync-config-targets := $(no-dot-config-targets) install %install \ + kernelrelease -$(filter-out _all sub-make,$(MAKECMDGOALS)) _all: sub-make - @: +config-build := +mixed-build := +need-config := 1 +may-sync-config := 1 -sub-make: FORCE - $(if $(KBUILD_VERBOSE:1=),@)$(MAKE) -C $(KBUILD_OUTPUT) \ - KBUILD_SRC=$(CURDIR) \ - KBUILD_EXTMOD="$(KBUILD_EXTMOD)" -f $(CURDIR)/Makefile \ - $(filter-out _all sub-make,$(MAKECMDGOALS)) +ifneq ($(filter $(no-dot-config-targets), $(MAKECMDGOALS)),) + ifeq ($(filter-out $(no-dot-config-targets), $(MAKECMDGOALS)),) + need-config := + endif +endif -# Leave processing to above invocation of make -skip-makefile := 1 -endif # ifneq ($(KBUILD_OUTPUT),) -endif # ifeq ($(KBUILD_SRC),) +ifneq ($(filter $(no-sync-config-targets), $(MAKECMDGOALS)),) + ifeq ($(filter-out $(no-sync-config-targets), $(MAKECMDGOALS)),) + may-sync-config := + endif +endif -# We process the rest of the Makefile if this is the final invocation of make -ifeq ($(skip-makefile),) +ifneq ($(KBUILD_EXTMOD),) + may-sync-config := +endif -# If building an external module we do not care about the all: rule -# but instead _all depend on modules -PHONY += all -_all: all +ifeq ($(KBUILD_EXTMOD),) + ifneq ($(filter config %config,$(MAKECMDGOALS)),) + config-build := 1 + ifneq ($(words $(MAKECMDGOALS)),1) + mixed-build := 1 + endif + endif +endif -# CDPATH can have sideeffects; disable, since we do know where we want to cd to -export CDPATH= +# For "make -j clean all", "make -j mrproper defconfig all", etc. +ifneq ($(filter $(clean-targets),$(MAKECMDGOALS)),) + ifneq ($(filter-out $(clean-targets),$(MAKECMDGOALS)),) + mixed-build := 1 + endif +endif -srctree := $(if $(KBUILD_SRC),$(KBUILD_SRC),$(CURDIR)) -objtree := $(CURDIR) -src := $(srctree) -obj := $(objtree) +ifdef mixed-build +# =========================================================================== +# We're called with mixed targets (*config and build targets). +# Handle them one by one. -VPATH := $(srctree)$(if $(KBUILD_EXTMOD),:$(KBUILD_EXTMOD)) +PHONY += $(MAKECMDGOALS) __build_one_by_one -export srctree objtree VPATH +$(filter-out __build_one_by_one, $(MAKECMDGOALS)): __build_one_by_one + @: + +__build_one_by_one: + $(Q)set -e; \ + for i in $(MAKECMDGOALS); do \ + $(MAKE) -f $(srctree)/Makefile $$i; \ + done + +else # !mixed-build + +include scripts/Kbuild.include + +# Read KERNELRELEASE from include/config/kernel.release (if it exists) +KERNELRELEASE = $(shell cat include/config/kernel.release 2> /dev/null) +KERNELVERSION = $(VERSION)$(if $(PATCHLEVEL),.$(PATCHLEVEL)$(if $(SUBLEVEL),.$(SUBLEVEL)))$(EXTRAVERSION) +export VERSION PATCHLEVEL SUBLEVEL KERNELRELEASE KERNELVERSION # Cross compiling and selecting different set of gcc/bin-utils # --------------------------------------------------------------------------- @@ -202,80 +370,6 @@ KBUILD_HOSTCXXFLAGS := -Wall -O2 $(HOST_LFS_CFLAGS) $(HOSTCXXFLAGS) KBUILD_HOSTLDFLAGS := $(HOST_LFS_LDFLAGS) $(HOSTLDFLAGS) KBUILD_HOSTLDLIBS := $(HOST_LFS_LIBS) $(HOSTLDLIBS) -# Decide whether to build built-in, modular, or both. -# Normally, just do built-in. - -KBUILD_MODULES := -KBUILD_BUILTIN := 1 - -# If we have only "make modules", don't compile built-in objects. -# When we're building modules with modversions, we need to consider -# the built-in objects during the descend as well, in order to -# make sure the checksums are up to date before we record them. - -ifeq ($(MAKECMDGOALS),modules) - KBUILD_BUILTIN := $(if $(CONFIG_MODVERSIONS),1) -endif - -# If we have "make <whatever> modules", compile modules -# in addition to whatever we do anyway. -# Just "make" or "make all" shall build modules as well - -ifneq ($(filter all _all modules,$(MAKECMDGOALS)),) - KBUILD_MODULES := 1 -endif - -export KBUILD_MODULES KBUILD_BUILTIN -export KBUILD_CHECKSRC KBUILD_SRC - -# 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 ($(findstring s,$(MAKEFLAGS)),) - quiet=silent_ -endif - -export quiet Q KBUILD_VERBOSE - - -# Look for make include files relative to root of kernel src -MAKEFLAGS += --include-dir=$(srctree) - -# We need some generic definitions. -include $(srctree)/scripts/Kbuild.include -include $(srctree)/scripts/Makefile.lib - # Make variables (CC, etc...) AS = $(CROSS_COMPILE)as @@ -296,6 +390,7 @@ KALLSYMS = scripts/kallsyms PERL = perl PYTHON3 = python3 CHECK = sparse +BASH = bash CHECKFLAGS := -D__linux__ -Dlinux -D__STDC__ -Dunix -D__unix__ -Wbitwise $(CF) CFLAGS_KERNEL = @@ -311,7 +406,7 @@ export MODVERDIR := $(if $(KBUILD_EXTMOD),$(firstword $(KBUILD_EXTMOD))/).tmp_ve # Use LINUXINCLUDE when you must reference the include/ directory. # Needed to be compatible with the O= option LINUXINCLUDE := -Iinclude -I$(srctree)/dts/include \ - $(if $(KBUILD_SRC), -I$(srctree)/include) \ + $(if $(building_out_of_srctree), -I$(srctree)/include) \ -I$(srctree)/arch/$(SRCARCH)/include \ -I$(objtree)/arch/$(SRCARCH)/include \ -include $(srctree)/include/linux/kconfig.h @@ -330,12 +425,7 @@ LDFLAGS_barebox := -Map barebox.map LDFLAGS_barebox += $(call ld-option, --no-dynamic-linker) LDFLAGS_pbl += $(call ld-option, --no-dynamic-linker) -# Read KERNELRELEASE from include/config/kernel.release (if it exists) -KERNELRELEASE = $(shell cat include/config/kernel.release 2> /dev/null) -KERNELVERSION = $(VERSION).$(PATCHLEVEL).$(SUBLEVEL)$(EXTRAVERSION) - -export VERSION PATCHLEVEL SUBLEVEL KERNELRELEASE KERNELVERSION -export ARCH SRCARCH CONFIG_SHELL HOSTCC KBUILD_HOSTCFLAGS CROSS_COMPILE AS LD CC +export ARCH SRCARCH CONFIG_SHELL BASH HOSTCC KBUILD_HOSTCFLAGS CROSS_COMPILE AS LD CC export CPP AR NM STRIP OBJCOPY OBJDUMP MAKE AWK GENKSYMS PERL PYTHON3 UTS_MACHINE export LEX YACC export HOSTCXX CHECK CHECKFLAGS @@ -351,78 +441,45 @@ export CFLAGS_UBSAN # Files to ignore in find ... statements -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 -export RCS_TAR_IGNORE := --exclude SCCS --exclude BitKeeper --exclude .svn --exclude CVS --exclude .pc --exclude .hg --exclude .git +export 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 +export RCS_TAR_IGNORE := --exclude SCCS --exclude BitKeeper --exclude .svn \ + --exclude CVS --exclude .pc --exclude .hg --exclude .git # =========================================================================== # Rules shared between *config targets and build targets -# Basic helpers built in scripts/ +# Basic helpers built in scripts/basic/ PHONY += scripts_basic scripts_basic: $(Q)$(MAKE) $(build)=scripts/basic -# To avoid any implicit rule to kick in, define an empty command. -scripts/basic/%: scripts_basic ; - PHONY += outputmakefile +# Before starting out-of-tree build, make sure the source tree is clean. # outputmakefile generates a Makefile in the output directory, if using a # separate output directory. This allows convenient use of make in the # output directory. +# At the same time when output Makefile generated, generate .gitignore to +# ignore whole output directory outputmakefile: -ifneq ($(KBUILD_SRC),) - $(Q)$(CONFIG_SHELL) $(srctree)/scripts/mkmakefile \ - $(srctree) $(objtree) $(VERSION) $(PATCHLEVEL) -endif - -# To make sure we do not include .config for any of the *config targets -# catch them early, and hand them over to scripts/kconfig/Makefile -# It is allowed to specify more targets when calling make, including -# mixing *config targets and build targets. -# For example 'make oldconfig all'. -# Detect when mixed targets is specified, and make a second invocation -# of make so .config is not included in this case either (for *config). - -no-dot-config-targets := clean mrproper distclean \ - cscope TAGS tags help %docs check% \ - include/generated/version.h headers_% \ - kernelrelease kernelversion - -config-targets := 0 -mixed-targets := 0 -dot-config := 1 - -ifneq ($(filter $(no-dot-config-targets), $(MAKECMDGOALS)),) - ifeq ($(filter-out $(no-dot-config-targets), $(MAKECMDGOALS)),) - dot-config := 0 - endif -endif - -ifneq ($(filter config %config,$(MAKECMDGOALS)),) - config-targets := 1 - ifneq ($(filter-out config %config,$(MAKECMDGOALS)),) - mixed-targets := 1 - endif +ifdef building_out_of_srctree + $(Q)if [ -f $(srctree)/.config -o \ + -d $(srctree)/include/config -o \ + -d $(srctree)/arch/$(SRCARCH)/include/generated ]; then \ + echo >&2 "***"; \ + echo >&2 "*** The source tree is not clean, please run 'make$(if $(findstring command line, $(origin ARCH)), ARCH=$(ARCH)) mrproper'"; \ + echo >&2 "*** in $(abs_srctree)";\ + echo >&2 "***"; \ + false; \ + fi + $(Q)ln -fsn $(srctree) source + $(Q)$(CONFIG_SHELL) $(srctree)/scripts/mkmakefile $(srctree) + $(Q)test -e .gitignore || \ + { echo "# this is build directory, ignore it"; echo "*"; } > .gitignore endif -ifeq ($(mixed-targets),1) -# =========================================================================== -# We're called with mixed targets (*config and build targets). -# Handle them one by one. - -PHONY += $(MAKECMDGOALS) __build_one_by_one - -$(filter-out __build_one_by_one, $(MAKECMDGOALS)): __build_one_by_one - @: - -__build_one_by_one: - $(Q)set -e; \ - for i in $(MAKECMDGOALS); do \ - $(MAKE) -f $(srctree)/Makefile $$i; \ - done - -else -ifeq ($(config-targets),1) +ifdef config-build # =========================================================================== # *config targets only - make sure prerequisites are updated, and descend # in scripts/kconfig to make the *config target @@ -433,34 +490,65 @@ ifeq ($(config-targets),1) include $(srctree)/arch/$(SRCARCH)/Makefile export KBUILD_DEFCONFIG -config: scripts_basic outputmakefile FORCE +config: outputmakefile scripts_basic FORCE $(Q)$(MAKE) $(build)=scripts/kconfig $@ -%config: scripts_basic outputmakefile FORCE +%config: outputmakefile scripts_basic FORCE $(Q)$(MAKE) $(build)=scripts/kconfig $@ -else +else #!config-build # =========================================================================== # Build targets only - this includes barebox, arch specific targets, clean # targets and others. In general all targets except *config targets. -# Additional helpers built in scripts/ -# Carefully list dependencies so we do not try to build scripts twice -# in parallel -PHONY += scripts -scripts: scripts_basic - $(Q)$(MAKE) $(build)=$(@) +# If building an external module we do not care about the all: rule +# but instead _all depend on modules +PHONY += all +ifeq ($(KBUILD_EXTMOD),) +_all: all +else +_all: modules +endif + +# Decide whether to build built-in, modular, or both. +# Normally, just do built-in. + +KBUILD_MODULES := +KBUILD_BUILTIN := 1 + +# If we have only "make modules", don't compile built-in objects. +# When we're building modules with modversions, we need to consider +# the built-in objects during the descend as well, in order to +# make sure the checksums are up to date before we record them. + +ifeq ($(MAKECMDGOALS),modules) + KBUILD_BUILTIN := $(if $(CONFIG_MODVERSIONS),1) +endif + +# If we have "make <whatever> modules", compile modules +# in addition to whatever we do anyway. +# Just "make" or "make all" shall build modules as well + +ifneq ($(filter all _all modules,$(MAKECMDGOALS)),) + KBUILD_MODULES := 1 +endif + +export KBUILD_MODULES KBUILD_BUILTIN -ifeq ($(dot-config),1) +ifdef need-config include include/config/auto.conf endif +# We need some generic definitions. +include $(srctree)/scripts/Makefile.lib + # Objects we will link into barebox / subdirs we need to visit common-y := common/ drivers/ commands/ lib/ crypto/ net/ fs/ firmware/ include $(srctree)/arch/$(SRCARCH)/Makefile -ifeq ($(dot-config),1) +ifdef need-config +ifdef may-sync-config # Read in dependencies to all Kconfig* files, make sure to run syncconfig if # changes are detected. This should be included after arch/$(SRCARCH)/Makefile # because some architectures define CROSS_COMPILE there. @@ -484,7 +572,23 @@ $(KCONFIG_CONFIG): # (Note: use the grouped target '&:' when we bump to GNU Make 4.3) %/auto.conf %/auto.conf.cmd: $(KCONFIG_CONFIG) $(Q)$(MAKE) -f $(srctree)/Makefile syncconfig -endif # $(dot-config) +else # !may-sync-config +# External modules and some install targets need include/generated/autoconf.h +# and include/config/auto.conf but do not care if they are up-to-date. +# Use auto.conf to trigger the test +PHONY += include/config/auto.conf + +include/config/auto.conf: + $(Q)test -e include/generated/autoconf.h -a -e $@ || ( \ + echo >&2; \ + echo >&2 " ERROR: Kernel configuration is invalid."; \ + echo >&2 " include/generated/autoconf.h or $@ are missing.";\ + echo >&2 " Run 'make oldconfig && make prepare' on kernel src to fix it."; \ + echo >&2 ; \ + /bin/false) + +endif # may-sync-config +endif # need-config KBUILD_CFLAGS += -ggdb3 @@ -800,6 +904,13 @@ include/config/kernel.release: FORCE $(Q)rm -f $@ $(Q)echo $(KERNELVERSION)$(localversion) > $@ +# Additional helpers built in scripts/ +# Carefully list dependencies so we do not try to build scripts twice +# in parallel +PHONY += scripts +scripts: scripts_basic + $(Q)$(MAKE) $(build)=$(@) + # Things we need to do before we recursively start building the kernel # or the modules are listed in "prepare". # A multi level approach is used. prepareN is processed before prepareN-1. @@ -807,42 +918,20 @@ include/config/kernel.release: FORCE # version.h and scripts_basic is processed / created. # Listed in dependency order -PHONY += prepare archprepare prepare0 prepare1 prepare2 prepare3 - -# prepare-all is deprecated, use prepare as valid replacement -PHONY += prepare-all - -# prepare3 is used to check if we are building in a separate output directory, -# and if so do: -# 1) Check that make has not been executed in the kernel src $(srctree) -prepare3: include/config/kernel.release -ifneq ($(KBUILD_SRC),) - @echo ' Using $(srctree) as source for barebox' - $(Q)if [ -f $(srctree)/.config -o -d $(srctree)/include/config ]; then \ - echo " $(srctree) is not clean, please run 'make mrproper'";\ - echo " in the '$(srctree)' directory.";\ - false; \ - fi; -endif - -# prepare2 creates a makefile if using a separate output directory -prepare2: prepare3 outputmakefile +PHONY += prepare archprepare prepare0 -prepare1: prepare2 include/generated/version.h include/generated/utsrelease.h \ - include/config.h +archprepare: outputmakefile scripts_basic include/config/kernel.release \ + $(version_h) include/generated/utsrelease.h include/config.h +prepare0: archprepare FORCE ifneq ($(KBUILD_MODULES),) $(Q)mkdir -p $(MODVERDIR) $(Q)rm -f $(MODVERDIR)/* endif - -archprepare: prepare1 scripts_basic - -prepare0: archprepare FORCE $(Q)$(MAKE) $(build)=. # All the preparing.. -prepare prepare-all: prepare0 +prepare: prepare0 # Leave this as default for preprocessing barebox.lds.S, which is now # done in arch/$(SRCARCH)/kernel/Makefile @@ -1095,9 +1184,9 @@ help: # Generate tags for editors # --------------------------------------------------------------------------- quiet_cmd_tags = GEN $@ - cmd_tags = $(CONFIG_SHELL) $(srctree)/scripts/tags.sh $@ + cmd_tags = $(BASH) $(srctree)/scripts/tags.sh $@ -tags TAGS cscope: FORCE +tags TAGS cscope gtags: FORCE $(call cmd,tags) SPHINXBUILD = sphinx-build @@ -1109,9 +1198,6 @@ docs: FORCE @$(SPHINXBUILD) -b html -d $(objtree)/doctrees $(srctree)/Documentation \ $(objtree)/Documentation/html -endif #ifeq ($(config-targets),1) -endif #ifeq ($(mixed-targets),1) - # Single targets # --------------------------------------------------------------------------- # Single targets are compatible with: @@ -1175,14 +1261,13 @@ ifneq ($(cmd_files),) include $(cmd_files) endif -endif # skip-makefile +endif # config-build +endif # mixed-build +endif # need-sub-make PHONY += FORCE FORCE: -# Cancel implicit rules on top Makefile, `-rR' will apply to sub-makes. -Makefile: ; - # Declare the contents of the PHONY variable as phony. We keep that # information in a variable so we can use it in if_changed and friends. .PHONY: $(PHONY) diff --git a/firmware/Makefile b/firmware/Makefile index 3f2c31868..020d48440 100644 --- a/firmware/Makefile +++ b/firmware/Makefile @@ -56,7 +56,7 @@ $(patsubst %,$(obj)/pbl-%.gen.o, $(fw-external-y)): $(obj)/pbl-%.gen.o: $(fwdir) obj-pbl-y += $(patsubst %,%.gen.o, $(fw-external-y)) -ifeq ($(KBUILD_SRC),) +ifndef building_out_of_srctree # Makefile.build only creates subdirectories for O= builds, but external # firmware might live outside the kernel source tree _dummy := $(foreach d,$(addprefix $(obj)/,$(dir $(fw-external-y))), $(shell [ -d $(d) ] || mkdir -p $(d))) diff --git a/scripts/Makefile.build b/scripts/Makefile.build index 2273d815c..023215857 100644 --- a/scripts/Makefile.build +++ b/scripts/Makefile.build @@ -49,7 +49,7 @@ ifneq ($(hostprogs)$(hostprogs-y)$(hostprogs-m),) include scripts/Makefile.host endif -ifneq ($(KBUILD_SRC),) +ifdef building_out_of_srctree # Create output directory if not already present _dummy := $(shell [ -d $(obj) ] || mkdir -p $(obj)) diff --git a/scripts/Makefile.host b/scripts/Makefile.host index 9740f3106..55b565ce3 100644 --- a/scripts/Makefile.host +++ b/scripts/Makefile.host @@ -86,7 +86,7 @@ _hostc_flags = $(KBUILD_HOSTCFLAGS) $(HOST_EXTRACFLAGS) \ _hostcxx_flags = $(KBUILD_HOSTCXXFLAGS) $(HOST_EXTRACXXFLAGS) \ $(HOSTCXXFLAGS_$(target-stem).o) -ifeq ($(KBUILD_SRC),) +ifndef building_out_of_srctree __hostc_flags = $(_hostc_flags) __hostcxx_flags = $(_hostcxx_flags) else diff --git a/scripts/Makefile.lib b/scripts/Makefile.lib index 985fc1303..39cc24b19 100644 --- a/scripts/Makefile.lib +++ b/scripts/Makefile.lib @@ -147,7 +147,7 @@ endif # If building barebox in a separate objtree expand all occurrences # of -Idir to -I$(srctree)/dir except for absolute paths (starting with '/'). -ifeq ($(KBUILD_SRC),) +ifndef building_out_of_srctree __c_flags = $(_c_flags) __a_flags = $(_a_flags) __cpp_flags = $(_cpp_flags) diff --git a/scripts/mkmakefile b/scripts/mkmakefile index 84af27bf0..1cb174751 100755 --- a/scripts/mkmakefile +++ b/scripts/mkmakefile @@ -1,52 +1,17 @@ #!/bin/sh +# SPDX-License-Identifier: GPL-2.0 # Generates a small Makefile used in the root of the output # directory, to allow make to be started from there. # The Makefile also allow for more convinient build of external modules # Usage # $1 - Kernel src directory -# $2 - Output directory -# $3 - version -# $4 - patchlevel - -test ! -r $2/Makefile -o -O $2/Makefile || exit 0 -# Only overwrite automatically generated Makefiles -# (so we do not overwrite kernel Makefile) -if test -e $2/Makefile && ! grep -q Automatically $2/Makefile -then - exit 0 -fi if [ "${quiet}" != "silent_" ]; then - echo " GEN $2/Makefile" + echo " GEN Makefile" fi -cat << EOF > $2/Makefile +cat << EOF > Makefile # Automatically generated by $0: don't edit - -VERSION = $3 -PATCHLEVEL = $4 - -lastword = \$(word \$(words \$(1)),\$(1)) -makedir := \$(dir \$(call lastword,\$(MAKEFILE_LIST))) - -ifeq ("\$(origin V)", "command line") -VERBOSE := \$(V) -endif -ifneq (\$(VERBOSE),1) -Q := @ -endif - -MAKEARGS := -C $1 -MAKEARGS += O=\$(if \$(patsubst /%,,\$(makedir)),\$(CURDIR)/)\$(patsubst %/,%,\$(makedir)) - -MAKEFLAGS += --no-print-directory - -.PHONY: __sub-make \$(MAKECMDGOALS) - -__sub-make: - \$(Q)\$(MAKE) \$(MAKEARGS) \$(MAKECMDGOALS) - -\$(filter-out __sub-make, \$(MAKECMDGOALS)): __sub-make - @: +include $1/Makefile EOF diff --git a/scripts/tags.sh b/scripts/tags.sh index 8ae44642a..4e18ae528 100755 --- a/scripts/tags.sh +++ b/scripts/tags.sh @@ -1,70 +1,64 @@ -#!/bin/sh +#!/bin/bash +# SPDX-License-Identifier: GPL-2.0-only # Generate tags or cscope files # Usage tags.sh <mode> # # mode may be any of: tags, TAGS, cscope # # Uses the following environment variables: -# ARCH, SUBARCH, SRCARCH, srctree, src, obj +# SUBARCH, SRCARCH, srctree if [ "$KBUILD_VERBOSE" = "1" ]; then set -x fi -# This is a duplicate of RCS_FIND_IGNORE without escaped '()' -ignore="( -name SCCS -o -name BitKeeper -o -name .svn -o \ - -name CVS -o -name .pc -o -name .hg -o \ - -name .git ) \ - -prune -o" +# RCS_FIND_IGNORE has escaped ()s -- remove them. +ignore="$(echo "$RCS_FIND_IGNORE" | sed 's|\\||g' )" +# tags and cscope files should also ignore MODVERSION *.mod.c files +ignore="$ignore ( -name *.mod.c ) -prune -o" -# Do not use full path if we do not use O=.. builds -# Use make O=. {tags|cscope} +# Use make KBUILD_ABS_SRCTREE=1 {tags|cscope} # to force full paths for a non-O= build -if [ "${KBUILD_SRC}" = "" ]; then +if [ "${srctree}" = "." -o -z "${srctree}" ]; then tree= else tree=${srctree}/ fi -# Find all available archs -find_all_archs() -{ - ALLSOURCE_ARCHS="" - for arch in `ls ${tree}arch`; do - ALLSOURCE_ARCHS="${ALLSOURCE_ARCHS} "${arch##\/} - done -} +# ignore userspace tools +ignore="$ignore ( -path ${tree}tools ) -prune -o" # Detect if ALLSOURCE_ARCHS is set. If not, we assume SRCARCH if [ "${ALLSOURCE_ARCHS}" = "" ]; then ALLSOURCE_ARCHS=${SRCARCH} elif [ "${ALLSOURCE_ARCHS}" = "all" ]; then - find_all_archs + ALLSOURCE_ARCHS=$(find ${tree}arch/ -mindepth 1 -maxdepth 1 -type d -printf '%f ') fi -# find sources in arch/$ARCH +# find sources in arch/$1 find_arch_sources() { for i in $archincludedir; do prune="$prune -wholename $i -prune -o" done - find ${tree}arch/$1 $ignore $prune -name "$2" -print; + find ${tree}arch/$1 $ignore $prune -name "$2" -not -type l -print; } # find sources in arch/$1/include find_arch_include_sources() { - include=$(find ${tree}arch/$1/ -name include -type d); + include=$(find ${tree}arch/$1/ -name include -type d -print); if [ -n "$include" ]; then archincludedir="$archincludedir $include" - find $include $ignore -name "$2" -print; + find $include $ignore -name "$2" -not -type l -print; fi } # find sources in include/ find_include_sources() { - find ${tree}include $ignore -name config -prune -o -name "$1" -print; + find ${tree}include $ignore -name config -prune -o -name "$1" \ + -not -type l -print; } # find sources in rest of tree @@ -72,8 +66,8 @@ find_include_sources() find_other_sources() { find ${tree}* $ignore \ - \( -name include -o -name arch -o -name '.tmp_*' \) -prune -o \ - -name "$1" -print; + \( -path ${tree}include -o -path ${tree}arch -o -name '.tmp_*' \) -prune -o \ + -name "$1" -not -type l -print; } find_sources() @@ -95,8 +89,37 @@ all_sources() find_other_sources '*.[chS]' } +all_compiled_sources() +{ + for i in $(all_sources); do + case "$i" in + *.[cS]) + j=${i/\.[cS]/\.o} + j="${j#$tree}" + if [ -e $j ]; then + echo $i + fi + ;; + *) + echo $i + ;; + esac + done +} + +all_target_sources() +{ + if [ -n "$COMPILED_SOURCE" ]; then + all_compiled_sources + else + all_sources + fi +} + all_kconfigs() { + find ${tree}arch/ -maxdepth 1 $ignore \ + -name "Kconfig*" -not -type l -print; for arch in $ALLSOURCE_ARCHS; do find_sources $arch 'Kconfig*' done @@ -105,93 +128,159 @@ all_kconfigs() docscope() { - (echo \-k; echo \-q; all_sources) > cscope.files + (echo \-k; echo \-q; all_target_sources) > cscope.files cscope -b -f cscope.out } dogtags() { - all_sources | gtags -i -f - + all_target_sources | gtags -i -f - +} + +# Basic regular expressions with an optional /kind-spec/ for ctags and +# the following limitations: +# - No regex modifiers +# - Use \{0,1\} instead of \?, because etags expects an unescaped ? +# - \s is not working with etags, use a space or [ \t] +# - \w works, but does not match underscores in etags +# - etags regular expressions have to match at the start of a line; +# a ^[^#] is prepended by setup_regex unless an anchor is already present +regex_asm=( + '/^\(ENTRY\|_GLOBAL\)(\([[:alnum:]_\\]*\)).*/\2/' +) +regex_c=( + '/^SYSCALL_DEFINE[0-9](\([[:alnum:]_]*\).*/sys_\1/' + '/^BPF_CALL_[0-9](\([[:alnum:]_]*\).*/\1/' + '/^COMPAT_SYSCALL_DEFINE[0-9](\([[:alnum:]_]*\).*/compat_sys_\1/' + '/^TRACE_EVENT(\([[:alnum:]_]*\).*/trace_\1/' + '/^TRACE_EVENT(\([[:alnum:]_]*\).*/trace_\1_rcuidle/' + '/^DEFINE_EVENT([^,)]*, *\([[:alnum:]_]*\).*/trace_\1/' + '/^DEFINE_EVENT([^,)]*, *\([[:alnum:]_]*\).*/trace_\1_rcuidle/' + '/^DEFINE_INSN_CACHE_OPS(\([[:alnum:]_]*\).*/get_\1_slot/' + '/^DEFINE_INSN_CACHE_OPS(\([[:alnum:]_]*\).*/free_\1_slot/' + '/^PAGEFLAG(\([[:alnum:]_]*\).*/Page\1/' + '/^PAGEFLAG(\([[:alnum:]_]*\).*/SetPage\1/' + '/^PAGEFLAG(\([[:alnum:]_]*\).*/ClearPage\1/' + '/^TESTSETFLAG(\([[:alnum:]_]*\).*/TestSetPage\1/' + '/^TESTPAGEFLAG(\([[:alnum:]_]*\).*/Page\1/' + '/^SETPAGEFLAG(\([[:alnum:]_]*\).*/SetPage\1/' + '/\<__SETPAGEFLAG(\([[:alnum:]_]*\).*/__SetPage\1/' + '/\<TESTCLEARFLAG(\([[:alnum:]_]*\).*/TestClearPage\1/' + '/\<__TESTCLEARFLAG(\([[:alnum:]_]*\).*/TestClearPage\1/' + '/\<CLEARPAGEFLAG(\([[:alnum:]_]*\).*/ClearPage\1/' + '/\<__CLEARPAGEFLAG(\([[:alnum:]_]*\).*/__ClearPage\1/' + '/^__PAGEFLAG(\([[:alnum:]_]*\).*/__SetPage\1/' + '/^__PAGEFLAG(\([[:alnum:]_]*\).*/__ClearPage\1/' + '/^PAGEFLAG_FALSE(\([[:alnum:]_]*\).*/Page\1/' + '/\<TESTSCFLAG(\([[:alnum:]_]*\).*/TestSetPage\1/' + '/\<TESTSCFLAG(\([[:alnum:]_]*\).*/TestClearPage\1/' + '/\<SETPAGEFLAG_NOOP(\([[:alnum:]_]*\).*/SetPage\1/' + '/\<CLEARPAGEFLAG_NOOP(\([[:alnum:]_]*\).*/ClearPage\1/' + '/\<__CLEARPAGEFLAG_NOOP(\([[:alnum:]_]*\).*/__ClearPage\1/' + '/\<TESTCLEARFLAG_FALSE(\([[:alnum:]_]*\).*/TestClearPage\1/' + '/^PAGE_TYPE_OPS(\([[:alnum:]_]*\).*/Page\1/' + '/^PAGE_TYPE_OPS(\([[:alnum:]_]*\).*/__SetPage\1/' + '/^PAGE_TYPE_OPS(\([[:alnum:]_]*\).*/__ClearPage\1/' + '/^TASK_PFA_TEST([^,]*, *\([[:alnum:]_]*\))/task_\1/' + '/^TASK_PFA_SET([^,]*, *\([[:alnum:]_]*\))/task_set_\1/' + '/^TASK_PFA_CLEAR([^,]*, *\([[:alnum:]_]*\))/task_clear_\1/' + '/^DEF_MMIO_\(IN\|OUT\)_[XD](\([[:alnum:]_]*\),[^)]*)/\2/' + '/^DEBUGGER_BOILERPLATE(\([[:alnum:]_]*\))/\1/' + '/^DEF_PCI_AC_\(\|NO\)RET(\([[:alnum:]_]*\).*/\2/' + '/^PCI_OP_READ(\(\w*\).*[1-4])/pci_bus_read_config_\1/' + '/^PCI_OP_WRITE(\(\w*\).*[1-4])/pci_bus_write_config_\1/' + '/\<DEFINE_\(RT_MUTEX\|MUTEX\|SEMAPHORE\|SPINLOCK\)(\([[:alnum:]_]*\)/\2/v/' + '/\<DEFINE_\(RAW_SPINLOCK\|RWLOCK\|SEQLOCK\)(\([[:alnum:]_]*\)/\2/v/' + '/\<DECLARE_\(RWSEM\|COMPLETION\)(\([[:alnum:]_]\+\)/\2/v/' + '/\<DECLARE_BITMAP(\([[:alnum:]_]*\)/\1/v/' + '/\(^\|\s\)\(\|L\|H\)LIST_HEAD(\([[:alnum:]_]*\)/\3/v/' + '/\(^\|\s\)RADIX_TREE(\([[:alnum:]_]*\)/\2/v/' + '/\<DEFINE_PER_CPU([^,]*, *\([[:alnum:]_]*\)/\1/v/' + '/\<DEFINE_PER_CPU_SHARED_ALIGNED([^,]*, *\([[:alnum:]_]*\)/\1/v/' + '/\<DECLARE_WAIT_QUEUE_HEAD(\([[:alnum:]_]*\)/\1/v/' + '/\<DECLARE_\(TASKLET\|WORK\|DELAYED_WORK\)(\([[:alnum:]_]*\)/\2/v/' + '/\(^\s\)OFFSET(\([[:alnum:]_]*\)/\2/v/' + '/\(^\s\)DEFINE(\([[:alnum:]_]*\)/\2/v/' + '/\<\(DEFINE\|DECLARE\)_HASHTABLE(\([[:alnum:]_]*\)/\2/v/' + '/\<DEFINE_ID\(R\|A\)(\([[:alnum:]_]\+\)/\2/' + '/\<DEFINE_WD_CLASS(\([[:alnum:]_]\+\)/\1/' + '/\<ATOMIC_NOTIFIER_HEAD(\([[:alnum:]_]\+\)/\1/' + '/\<RAW_NOTIFIER_HEAD(\([[:alnum:]_]\+\)/\1/' + '/\<DECLARE_FAULT_ATTR(\([[:alnum:]_]\+\)/\1/' + '/\<BLOCKING_NOTIFIER_HEAD(\([[:alnum:]_]\+\)/\1/' + '/\<DEVICE_ATTR_\(RW\|RO\|WO\)(\([[:alnum:]_]\+\)/dev_attr_\2/' + '/\<DRIVER_ATTR_\(RW\|RO\|WO\)(\([[:alnum:]_]\+\)/driver_attr_\2/' + '/\<\(DEFINE\|DECLARE\)_STATIC_KEY_\(TRUE\|FALSE\)\(\|_RO\)(\([[:alnum:]_]\+\)/\4/' +) +regex_kconfig=( + '/^[[:blank:]]*\(menu\|\)config[[:blank:]]\+\([[:alnum:]_]\+\)/\2/' + '/^[[:blank:]]*\(menu\|\)config[[:blank:]]\+\([[:alnum:]_]\+\)/CONFIG_\2/' +) +setup_regex() +{ + local mode=$1 lang tmp=() r + shift + + regex=() + for lang; do + case "$lang" in + asm) tmp=("${regex_asm[@]}") ;; + c) tmp=("${regex_c[@]}") ;; + kconfig) tmp=("${regex_kconfig[@]}") ;; + esac + for r in "${tmp[@]}"; do + if test "$mode" = "exuberant"; then + regex[${#regex[@]}]="--regex-$lang=${r}b" + else + # Remove ctags /kind-spec/ + case "$r" in + /*/*/?/) + r=${r%?/} + esac + # Prepend ^[^#] unless already anchored + case "$r" in + /^*) ;; + *) + r="/^[^#]*${r#/}" + esac + regex[${#regex[@]}]="--regex=$r" + fi + done + done } exuberant() { - all_sources | xargs $1 -a \ - -I __initdata,__exitdata,__acquires,__releases \ - -I __read_mostly,____cacheline_aligned \ + setup_regex exuberant asm c + all_target_sources | xargs $1 -a \ + -I __initdata,__exitdata,__initconst,__ro_after_init \ + -I __initdata_memblock \ + -I __refdata,__attribute,__maybe_unused,__always_unused \ + -I __acquires,__releases,__deprecated,__always_inline \ + -I __read_mostly,__aligned,____cacheline_aligned \ -I ____cacheline_aligned_in_smp \ + -I __cacheline_aligned,__cacheline_aligned_in_smp \ -I ____cacheline_internodealigned_in_smp \ - -I EXPORT_SYMBOL,EXPORT_SYMBOL_GPL \ + -I __used,__packed,__packed2__,__must_check,__must_hold \ + -I EXPORT_SYMBOL,EXPORT_SYMBOL_GPL,ACPI_EXPORT_SYMBOL \ -I DEFINE_TRACE,EXPORT_TRACEPOINT_SYMBOL,EXPORT_TRACEPOINT_SYMBOL_GPL \ - --extra=+f --c-kinds=+px \ - --regex-asm='/^(ENTRY|_GLOBAL)\(([^)]*)\).*/\2/' \ - --regex-c='/^SYSCALL_DEFINE[[:digit:]]?\(([^,)]*).*/sys_\1/' \ - --regex-c++='/^TRACE_EVENT\(([^,)]*).*/trace_\1/' \ - --regex-c++='/^DEFINE_EVENT\([^,)]*, *([^,)]*).*/trace_\1/' \ - --regex-c++='/PAGEFLAG\(([^,)]*).*/Page\1/' \ - --regex-c++='/PAGEFLAG\(([^,)]*).*/SetPage\1/' \ - --regex-c++='/PAGEFLAG\(([^,)]*).*/ClearPage\1/' \ - --regex-c++='/TESTSETFLAG\(([^,)]*).*/TestSetPage\1/' \ - --regex-c++='/TESTPAGEFLAG\(([^,)]*).*/Page\1/' \ - --regex-c++='/SETPAGEFLAG\(([^,)]*).*/SetPage\1/' \ - --regex-c++='/__SETPAGEFLAG\(([^,)]*).*/__SetPage\1/' \ - --regex-c++='/TESTCLEARFLAG\(([^,)]*).*/TestClearPage\1/' \ - --regex-c++='/__TESTCLEARFLAG\(([^,)]*).*/TestClearPage\1/' \ - --regex-c++='/CLEARPAGEFLAG\(([^,)]*).*/ClearPage\1/' \ - --regex-c++='/__CLEARPAGEFLAG\(([^,)]*).*/__ClearPage\1/' \ - --regex-c++='/__PAGEFLAG\(([^,)]*).*/__SetPage\1/' \ - --regex-c++='/__PAGEFLAG\(([^,)]*).*/__ClearPage\1/' \ - --regex-c++='/PAGEFLAG_FALSE\(([^,)]*).*/Page\1/' \ - --regex-c++='/TESTSCFLAG\(([^,)]*).*/TestSetPage\1/' \ - --regex-c++='/TESTSCFLAG\(([^,)]*).*/TestClearPage\1/' \ - --regex-c++='/SETPAGEFLAG_NOOP\(([^,)]*).*/SetPage\1/' \ - --regex-c++='/CLEARPAGEFLAG_NOOP\(([^,)]*).*/ClearPage\1/' \ - --regex-c++='/__CLEARPAGEFLAG_NOOP\(([^,)]*).*/__ClearPage\1/' \ - --regex-c++='/TESTCLEARFLAG_FALSE\(([^,)]*).*/TestClearPage\1/' \ - --regex-c++='/_PE\(([^,)]*).*/PEVENT_ERRNO__\1/' \ - --regex-c='/PCI_OP_READ\(([a-z]*[a-z]).*[1-4]\)/pci_bus_read_config_\1/' \ - --regex-c='/PCI_OP_WRITE\(([a-z]*[a-z]).*[1-4]\)/pci_bus_write_config_\1/' + -I static,const \ + --extra=+fq --c-kinds=+px --fields=+iaS --langmap=c:+.h \ + "${regex[@]}" + setup_regex exuberant kconfig all_kconfigs | xargs $1 -a \ - --langdef=kconfig --language-force=kconfig \ - --regex-kconfig='/^[[:blank:]]*(menu|)config[[:blank:]]+([[:alnum:]_]+)/\2/' \ - --regex-kconfig='/^[[:blank:]]*(menu|)config[[:blank:]]+([[:alnum:]_]+)/CONFIG_\2/' + --langdef=kconfig --language-force=kconfig "${regex[@]}" + } emacs() { - all_sources | xargs $1 -a \ - --regex='/^(ENTRY|_GLOBAL)(\([^)]*\)).*/\2/' \ - --regex='/^SYSCALL_DEFINE[0-9]?(\([^,)]*\).*/sys_\1/' \ - --regex='/^TRACE_EVENT(\([^,)]*\).*/trace_\1/' \ - --regex='/^DEFINE_EVENT([^,)]*, *\([^,)]*\).*/trace_\1/' \ - --regex='/PAGEFLAG\(([^,)]*).*/Page\1/' \ - --regex='/PAGEFLAG\(([^,)]*).*/SetPage\1/' \ - --regex='/PAGEFLAG\(([^,)]*).*/ClearPage\1/' \ - --regex='/TESTSETFLAG\(([^,)]*).*/TestSetPage\1/' \ - --regex='/TESTPAGEFLAG\(([^,)]*).*/Page\1/' \ - --regex='/SETPAGEFLAG\(([^,)]*).*/SetPage\1/' \ - --regex='/__SETPAGEFLAG\(([^,)]*).*/__SetPage\1/' \ - --regex='/TESTCLEARFLAG\(([^,)]*).*/TestClearPage\1/' \ - --regex='/__TESTCLEARFLAG\(([^,)]*).*/TestClearPage\1/' \ - --regex='/CLEARPAGEFLAG\(([^,)]*).*/ClearPage\1/' \ - --regex='/__CLEARPAGEFLAG\(([^,)]*).*/__ClearPage\1/' \ - --regex='/__PAGEFLAG\(([^,)]*).*/__SetPage\1/' \ - --regex='/__PAGEFLAG\(([^,)]*).*/__ClearPage\1/' \ - --regex='/PAGEFLAG_FALSE\(([^,)]*).*/Page\1/' \ - --regex='/TESTSCFLAG\(([^,)]*).*/TestSetPage\1/' \ - --regex='/TESTSCFLAG\(([^,)]*).*/TestClearPage\1/' \ - --regex='/SETPAGEFLAG_NOOP\(([^,)]*).*/SetPage\1/' \ - --regex='/CLEARPAGEFLAG_NOOP\(([^,)]*).*/ClearPage\1/' \ - --regex='/__CLEARPAGEFLAG_NOOP\(([^,)]*).*/__ClearPage\1/' \ - --regex='/TESTCLEARFLAG_FALSE\(([^,)]*).*/TestClearPage\1/' \ - --regex='/_PE\(([^,)]*).*/PEVENT_ERRNO__\1/' \ - --regex='/PCI_OP_READ\(([a-z]*[a-z]).*[1-4]\)/pci_bus_read_config_\1/' \ - --regex='/PCI_OP_WRITE\(([a-z]*[a-z]).*[1-4]\)/pci_bus_write_config_\1/' + setup_regex emacs asm c + all_target_sources | xargs $1 -a "${regex[@]}" - all_kconfigs | xargs $1 -a \ - --regex='/^[ \t]*\(\(menu\)*config\)[ \t]+\([a-zA-Z0-9_]+\)/\3/' \ - --regex='/^[ \t]*\(\(menu\)*config\)[ \t]+\([a-zA-Z0-9_]+\)/CONFIG_\3/' + setup_regex emacs kconfig + all_kconfigs | xargs $1 -a "${regex[@]}" } xtags() @@ -201,11 +290,10 @@ xtags() elif $1 --version 2>&1 | grep -iq emacs; then emacs $1 else - all_sources | xargs $1 -a - fi + all_target_sources | xargs $1 -a + fi } - # Support um (which uses SUBARCH) if [ "${ARCH}" = "um" ]; then if [ "$SUBARCH" = "i386" ]; then -- 2.25.1 _______________________________________________ barebox mailing list barebox@lists.infradead.org http://lists.infradead.org/mailman/listinfo/barebox ^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: [PATCH 2/2] kbuild: resync top Makefile, mkmakefile, tags.sh with Linux 5.7-rc4 2020-05-11 1:40 ` [PATCH 2/2] kbuild: resync top Makefile, mkmakefile, tags.sh with Linux 5.7-rc4 Masahiro Yamada @ 2020-05-12 6:27 ` Sascha Hauer 0 siblings, 0 replies; 3+ messages in thread From: Sascha Hauer @ 2020-05-12 6:27 UTC (permalink / raw) To: Masahiro Yamada; +Cc: barebox On Mon, May 11, 2020 at 10:40:15AM +0900, Masahiro Yamada wrote: > The prologue of the build system is not specific to Linux or Barebox. > Paritially resync with Linux 5.7-rc4 > > - In Linux, $(objtree) is always '.', and $(srctree) might be relative. > I am keeping both absolute for now to avoid unexpected breakage. > > - I did not resync single target for now. We need to touch > Makefile.build a lot if we want to resync it. > > - 'export CDPATH=' is Barebox-only code, which was added by > commit 6cc8d0544658 ("Makefile: disable CDPATH"). Keep it. > > - KBUILD_SRC no longer exists in the upstream Linux. I replaced it > with building_out_of_srctree. > > - scripts/mkmakefile does not contain anything specific to Linux or > Barebox. Resync it with Linux 5.7-rc4 > > - scripts/tags was imported from Linux 3.6 with some cherry-picks on > top of that. Resync it with Linux 5.7-rc4 > > Signed-off-by: Masahiro Yamada <masahiroy@kernel.org> > --- I can't say I reviewed it, I only tested it. It seems to work, so applied. Sascha > > Makefile | 605 +++++++++++++++++++++++------------------ > firmware/Makefile | 2 +- > scripts/Makefile.build | 2 +- > scripts/Makefile.host | 2 +- > scripts/Makefile.lib | 2 +- > scripts/mkmakefile | 43 +-- > scripts/tags.sh | 282 ++++++++++++------- > 7 files changed, 538 insertions(+), 400 deletions(-) > > diff --git a/Makefile b/Makefile > index be9f2a211..837ae47e2 100644 > --- a/Makefile > +++ b/Makefile > @@ -1,3 +1,4 @@ > +# SPDX-License-Identifier: GPL-2.0 > VERSION = 2020 > PATCHLEVEL = 04 > SUBLEVEL = 0 > @@ -10,11 +11,9 @@ NAME = None > # Comments in this file are targeted only to the developer, do not > # expect to learn how to build the kernel reading this file. > > -# 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 > +# That's our default target when none is given on the command line > +PHONY := _all > +_all: > > # We are using a recursive build, so we need to do a little thinking > # to get the ordering right. > @@ -22,8 +21,8 @@ MAKEFLAGS += -rR --no-print-directory > # Most importantly: sub-Makefiles should only ever modify files in > # their own directory. If in some directory we have a dependency on > # a file in another dir (which doesn't happen often, but it's often > -# unavoidable when linking the built-in.o targets which finally > -# turn into barebox), we will call a sub make in that other dir, and > +# unavoidable when linking the built-in.a targets which finally > +# turn into vmlinux), we will call a sub make in that other dir, and > # after that we are sure that everything which is in that other dir > # is now up to date. > # > @@ -32,6 +31,45 @@ MAKEFLAGS += -rR --no-print-directory > # descending is started. They are now explicitly listed as the > # prepare rule. > > +ifneq ($(sub_make_done),1) > + > +# Do not use make's built-in rules and variables > +# (this increases performance and avoids hard-to-debug behaviour) > +MAKEFLAGS += -rR > + > +# Avoid funny character set dependencies > +unexport LC_ALL > +LC_COLLATE=C > +LC_NUMERIC=C > +export LC_COLLATE LC_NUMERIC > + > +# Avoid interference with shell env settings > +unexport GREP_OPTIONS > + > +# 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. > +# If KBUILD_VERBOSE equals 2 then give the reason why each target is rebuilt. > +# > # To put more focus on warnings, be less verbose as default > # Use 'make V=1' to see the full commands > > @@ -42,6 +80,119 @@ ifndef KBUILD_VERBOSE > KBUILD_VERBOSE = 0 > endif > > +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 ($(findstring s,$(filter-out --%,$(MAKEFLAGS))),) > + quiet=silent_ > +endif > + > +export quiet Q KBUILD_VERBOSE > + > +# Kbuild will save output files in the current working directory. > +# This does not need to match to the root of the kernel source tree. > +# > +# For example, you can do this: > +# > +# cd /dir/to/store/output/files; make -f /dir/to/kernel/source/Makefile > +# > +# If you want to save output files in a different location, there are > +# two syntaxes to specify it. > +# > +# 1) O= > +# Use "make O=dir/to/store/output/files/" > +# > +# 2) Set KBUILD_OUTPUT > +# Set the environment variable KBUILD_OUTPUT to point to the output directory. > +# export KBUILD_OUTPUT=dir/to/store/output/files/; make > +# > +# The O= assignment takes precedence over the KBUILD_OUTPUT environment > +# variable. > + > +# Do we want to change the working directory? > +ifeq ("$(origin O)", "command line") > + KBUILD_OUTPUT := $(O) > +endif > + > +ifneq ($(KBUILD_OUTPUT),) > +# Make's built-in functions such as $(abspath ...), $(realpath ...) cannot > +# expand a shell special character '~'. We use a somewhat tedious way here. > +abs_objtree := $(shell mkdir -p $(KBUILD_OUTPUT) && cd $(KBUILD_OUTPUT) && pwd) > +$(if $(abs_objtree),, \ > + $(error failed to create output directory "$(KBUILD_OUTPUT)")) > + > +# $(realpath ...) resolves symlinks > +abs_objtree := $(realpath $(abs_objtree)) > +else > +abs_objtree := $(CURDIR) > +endif # ifneq ($(KBUILD_OUTPUT),) > + > +ifeq ($(abs_objtree),$(CURDIR)) > +# Suppress "Entering directory ..." unless we are changing the work directory. > +MAKEFLAGS += --no-print-directory > +else > +need-sub-make := 1 > +endif > + > +abs_srctree := $(realpath $(dir $(lastword $(MAKEFILE_LIST)))) > + > +ifneq ($(words $(subst :, ,$(abs_srctree))), 1) > +$(error source directory cannot contain spaces or colons) > +endif > + > +ifneq ($(abs_srctree),$(abs_objtree)) > +# Look for make include files relative to root of kernel src > +# > +# This does not become effective immediately because MAKEFLAGS is re-parsed > +# once after the Makefile is read. We need to invoke sub-make. > +MAKEFLAGS += --include-dir=$(abs_srctree) > +need-sub-make := 1 > +endif > + > +ifneq ($(filter 3.%,$(MAKE_VERSION)),) > +# 'MAKEFLAGS += -rR' does not immediately become effective for GNU Make 3.x > +# We need to invoke sub-make to avoid implicit rules in the top Makefile. > +need-sub-make := 1 > +# Cancel implicit rules for this Makefile. > +$(lastword $(MAKEFILE_LIST)): ; > +endif > + > +export abs_srctree abs_objtree > +export sub_make_done := 1 > + > +ifeq ($(need-sub-make),1) > + > +PHONY += $(MAKECMDGOALS) sub-make > + > +$(filter-out _all sub-make $(lastword $(MAKEFILE_LIST)), $(MAKECMDGOALS)) _all: sub-make > + @: > + > +# Invoke a second make in the output directory, passing relevant variables > +sub-make: > + $(Q)$(MAKE) -C $(abs_objtree) -f $(abs_srctree)/Makefile $(MAKECMDGOALS) > + > +endif # need-sub-make > +endif # sub_make_done > + > +# We process the rest of the Makefile if this is the final invocation of make > +ifeq ($(need-sub-make),) > + > +# CDPATH can have sideeffects; disable, since we do know where we want to cd to > +export CDPATH= > + > +# Do not print "Entering directory ...", > +# but we want to display it when entering to the output directory > +# so that IDEs/editors are able to understand relative filenames. > +MAKEFLAGS += --no-print-directory > + > # Call a source code checker (by default, "sparse") as part of the > # C compilation. > # > @@ -49,8 +200,8 @@ endif > # Use 'make C=2' to enable checking of *all* source files, regardless > # of whether they are re-compiled or not. > # > -# See the file "Documentation/sparse.txt" for more details, including > -# where to get the "sparse" utility. > +# See the file "Documentation/dev-tools/sparse.rst" for more details, > +# including where to get the "sparse" utility. > > ifeq ("$(origin C)", "command line") > KBUILD_CHECKSRC = $(C) > @@ -59,91 +210,108 @@ ifndef KBUILD_CHECKSRC > KBUILD_CHECKSRC = 0 > endif > > -# Use make M=dir to specify directory of external module to build > -# Old syntax make ... SUBDIRS=$PWD is still supported > -# Setting the environment variable KBUILD_EXTMOD take precedence > -ifdef SUBDIRS > - KBUILD_EXTMOD ?= $(SUBDIRS) > -endif > +# Use make M=dir or set the environment variable KBUILD_EXTMOD to specify the > +# directory of external module to build. Setting M= takes precedence. > ifeq ("$(origin M)", "command line") > KBUILD_EXTMOD := $(M) > endif > > +export KBUILD_CHECKSRC KBUILD_EXTMOD > > -# kbuild supports saving output files in a separate directory. > -# To locate output files in a separate directory two syntaxes are supported. > -# In both cases the working directory must be the root of the kernel src. > -# 1) O= > -# Use "make O=dir/to/store/output/files/" > -# > -# 2) Set KBUILD_OUTPUT > -# Set the environment variable KBUILD_OUTPUT to point to the directory > -# where the output files shall be placed. > -# export KBUILD_OUTPUT=dir/to/store/output/files/ > -# make > -# > -# The O= assignment takes precedence over the KBUILD_OUTPUT environment > -# variable. > +ifeq ($(abs_srctree),$(abs_objtree)) > + # building in the source tree > + building_out_of_srctree := > +else > + building_out_of_srctree := 1 > +endif > > +srctree := $(abs_srctree) > +objtree := $(abs_objtree) > +src := $(srctree) > +obj := $(objtree) > > -# KBUILD_SRC is set on invocation of make in OBJ directory > -# KBUILD_SRC is not intended to be used by the regular user (for now) > -ifeq ($(KBUILD_SRC),) > +VPATH := $(srctree) > > -# OK, Make called in directory where kernel src resides > -# Do we want to locate output files in a separate directory? > -ifeq ("$(origin O)", "command line") > - KBUILD_OUTPUT := $(O) > -endif > +export building_out_of_srctree srctree objtree VPATH > > -# That's our default target when none is given on the command line > -PHONY := _all > -_all: > +# To make sure we do not include .config for any of the *config targets > +# catch them early, and hand them over to scripts/kconfig/Makefile > +# It is allowed to specify more targets when calling make, including > +# mixing *config targets and build targets. > +# For example 'make oldconfig all'. > +# Detect when mixed targets is specified, and make a second invocation > +# of make so .config is not included in this case either (for *config). > > -ifneq ($(KBUILD_OUTPUT),) > -# Invoke a second make in the output directory, passing relevant variables > -# check that the output directory actually exists > -saved-output := $(KBUILD_OUTPUT) > -KBUILD_OUTPUT := $(shell mkdir -p $(KBUILD_OUTPUT) && cd $(KBUILD_OUTPUT) \ > - && /bin/pwd) > -$(if $(KBUILD_OUTPUT),, \ > - $(error failed to create output directory "$(saved-output)")) > +version_h := include/generated/version.h > > -PHONY += $(MAKECMDGOALS) sub-make > +clean-targets := %clean mrproper cleandocs > +no-dot-config-targets := $(clean-targets) \ > + cscope gtags TAGS tags help% %docs \ > + $(version_h) kernelversion outputmakefile > +no-sync-config-targets := $(no-dot-config-targets) install %install \ > + kernelrelease > > -$(filter-out _all sub-make,$(MAKECMDGOALS)) _all: sub-make > - @: > +config-build := > +mixed-build := > +need-config := 1 > +may-sync-config := 1 > > -sub-make: FORCE > - $(if $(KBUILD_VERBOSE:1=),@)$(MAKE) -C $(KBUILD_OUTPUT) \ > - KBUILD_SRC=$(CURDIR) \ > - KBUILD_EXTMOD="$(KBUILD_EXTMOD)" -f $(CURDIR)/Makefile \ > - $(filter-out _all sub-make,$(MAKECMDGOALS)) > +ifneq ($(filter $(no-dot-config-targets), $(MAKECMDGOALS)),) > + ifeq ($(filter-out $(no-dot-config-targets), $(MAKECMDGOALS)),) > + need-config := > + endif > +endif > > -# Leave processing to above invocation of make > -skip-makefile := 1 > -endif # ifneq ($(KBUILD_OUTPUT),) > -endif # ifeq ($(KBUILD_SRC),) > +ifneq ($(filter $(no-sync-config-targets), $(MAKECMDGOALS)),) > + ifeq ($(filter-out $(no-sync-config-targets), $(MAKECMDGOALS)),) > + may-sync-config := > + endif > +endif > > -# We process the rest of the Makefile if this is the final invocation of make > -ifeq ($(skip-makefile),) > +ifneq ($(KBUILD_EXTMOD),) > + may-sync-config := > +endif > > -# If building an external module we do not care about the all: rule > -# but instead _all depend on modules > -PHONY += all > -_all: all > +ifeq ($(KBUILD_EXTMOD),) > + ifneq ($(filter config %config,$(MAKECMDGOALS)),) > + config-build := 1 > + ifneq ($(words $(MAKECMDGOALS)),1) > + mixed-build := 1 > + endif > + endif > +endif > > -# CDPATH can have sideeffects; disable, since we do know where we want to cd to > -export CDPATH= > +# For "make -j clean all", "make -j mrproper defconfig all", etc. > +ifneq ($(filter $(clean-targets),$(MAKECMDGOALS)),) > + ifneq ($(filter-out $(clean-targets),$(MAKECMDGOALS)),) > + mixed-build := 1 > + endif > +endif > > -srctree := $(if $(KBUILD_SRC),$(KBUILD_SRC),$(CURDIR)) > -objtree := $(CURDIR) > -src := $(srctree) > -obj := $(objtree) > +ifdef mixed-build > +# =========================================================================== > +# We're called with mixed targets (*config and build targets). > +# Handle them one by one. > > -VPATH := $(srctree)$(if $(KBUILD_EXTMOD),:$(KBUILD_EXTMOD)) > +PHONY += $(MAKECMDGOALS) __build_one_by_one > > -export srctree objtree VPATH > +$(filter-out __build_one_by_one, $(MAKECMDGOALS)): __build_one_by_one > + @: > + > +__build_one_by_one: > + $(Q)set -e; \ > + for i in $(MAKECMDGOALS); do \ > + $(MAKE) -f $(srctree)/Makefile $$i; \ > + done > + > +else # !mixed-build > + > +include scripts/Kbuild.include > + > +# Read KERNELRELEASE from include/config/kernel.release (if it exists) > +KERNELRELEASE = $(shell cat include/config/kernel.release 2> /dev/null) > +KERNELVERSION = $(VERSION)$(if $(PATCHLEVEL),.$(PATCHLEVEL)$(if $(SUBLEVEL),.$(SUBLEVEL)))$(EXTRAVERSION) > +export VERSION PATCHLEVEL SUBLEVEL KERNELRELEASE KERNELVERSION > > # Cross compiling and selecting different set of gcc/bin-utils > # --------------------------------------------------------------------------- > @@ -202,80 +370,6 @@ KBUILD_HOSTCXXFLAGS := -Wall -O2 $(HOST_LFS_CFLAGS) $(HOSTCXXFLAGS) > KBUILD_HOSTLDFLAGS := $(HOST_LFS_LDFLAGS) $(HOSTLDFLAGS) > KBUILD_HOSTLDLIBS := $(HOST_LFS_LIBS) $(HOSTLDLIBS) > > -# Decide whether to build built-in, modular, or both. > -# Normally, just do built-in. > - > -KBUILD_MODULES := > -KBUILD_BUILTIN := 1 > - > -# If we have only "make modules", don't compile built-in objects. > -# When we're building modules with modversions, we need to consider > -# the built-in objects during the descend as well, in order to > -# make sure the checksums are up to date before we record them. > - > -ifeq ($(MAKECMDGOALS),modules) > - KBUILD_BUILTIN := $(if $(CONFIG_MODVERSIONS),1) > -endif > - > -# If we have "make <whatever> modules", compile modules > -# in addition to whatever we do anyway. > -# Just "make" or "make all" shall build modules as well > - > -ifneq ($(filter all _all modules,$(MAKECMDGOALS)),) > - KBUILD_MODULES := 1 > -endif > - > -export KBUILD_MODULES KBUILD_BUILTIN > -export KBUILD_CHECKSRC KBUILD_SRC > - > -# 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 ($(findstring s,$(MAKEFLAGS)),) > - quiet=silent_ > -endif > - > -export quiet Q KBUILD_VERBOSE > - > - > -# Look for make include files relative to root of kernel src > -MAKEFLAGS += --include-dir=$(srctree) > - > -# We need some generic definitions. > -include $(srctree)/scripts/Kbuild.include > -include $(srctree)/scripts/Makefile.lib > - > # Make variables (CC, etc...) > > AS = $(CROSS_COMPILE)as > @@ -296,6 +390,7 @@ KALLSYMS = scripts/kallsyms > PERL = perl > PYTHON3 = python3 > CHECK = sparse > +BASH = bash > > CHECKFLAGS := -D__linux__ -Dlinux -D__STDC__ -Dunix -D__unix__ -Wbitwise $(CF) > CFLAGS_KERNEL = > @@ -311,7 +406,7 @@ export MODVERDIR := $(if $(KBUILD_EXTMOD),$(firstword $(KBUILD_EXTMOD))/).tmp_ve > # Use LINUXINCLUDE when you must reference the include/ directory. > # Needed to be compatible with the O= option > LINUXINCLUDE := -Iinclude -I$(srctree)/dts/include \ > - $(if $(KBUILD_SRC), -I$(srctree)/include) \ > + $(if $(building_out_of_srctree), -I$(srctree)/include) \ > -I$(srctree)/arch/$(SRCARCH)/include \ > -I$(objtree)/arch/$(SRCARCH)/include \ > -include $(srctree)/include/linux/kconfig.h > @@ -330,12 +425,7 @@ LDFLAGS_barebox := -Map barebox.map > LDFLAGS_barebox += $(call ld-option, --no-dynamic-linker) > LDFLAGS_pbl += $(call ld-option, --no-dynamic-linker) > > -# Read KERNELRELEASE from include/config/kernel.release (if it exists) > -KERNELRELEASE = $(shell cat include/config/kernel.release 2> /dev/null) > -KERNELVERSION = $(VERSION).$(PATCHLEVEL).$(SUBLEVEL)$(EXTRAVERSION) > - > -export VERSION PATCHLEVEL SUBLEVEL KERNELRELEASE KERNELVERSION > -export ARCH SRCARCH CONFIG_SHELL HOSTCC KBUILD_HOSTCFLAGS CROSS_COMPILE AS LD CC > +export ARCH SRCARCH CONFIG_SHELL BASH HOSTCC KBUILD_HOSTCFLAGS CROSS_COMPILE AS LD CC > export CPP AR NM STRIP OBJCOPY OBJDUMP MAKE AWK GENKSYMS PERL PYTHON3 UTS_MACHINE > export LEX YACC > export HOSTCXX CHECK CHECKFLAGS > @@ -351,78 +441,45 @@ export CFLAGS_UBSAN > > # Files to ignore in find ... statements > > -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 > -export RCS_TAR_IGNORE := --exclude SCCS --exclude BitKeeper --exclude .svn --exclude CVS --exclude .pc --exclude .hg --exclude .git > +export 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 > +export RCS_TAR_IGNORE := --exclude SCCS --exclude BitKeeper --exclude .svn \ > + --exclude CVS --exclude .pc --exclude .hg --exclude .git > > # =========================================================================== > # Rules shared between *config targets and build targets > > -# Basic helpers built in scripts/ > +# Basic helpers built in scripts/basic/ > PHONY += scripts_basic > scripts_basic: > $(Q)$(MAKE) $(build)=scripts/basic > > -# To avoid any implicit rule to kick in, define an empty command. > -scripts/basic/%: scripts_basic ; > - > PHONY += outputmakefile > +# Before starting out-of-tree build, make sure the source tree is clean. > # outputmakefile generates a Makefile in the output directory, if using a > # separate output directory. This allows convenient use of make in the > # output directory. > +# At the same time when output Makefile generated, generate .gitignore to > +# ignore whole output directory > outputmakefile: > -ifneq ($(KBUILD_SRC),) > - $(Q)$(CONFIG_SHELL) $(srctree)/scripts/mkmakefile \ > - $(srctree) $(objtree) $(VERSION) $(PATCHLEVEL) > -endif > - > -# To make sure we do not include .config for any of the *config targets > -# catch them early, and hand them over to scripts/kconfig/Makefile > -# It is allowed to specify more targets when calling make, including > -# mixing *config targets and build targets. > -# For example 'make oldconfig all'. > -# Detect when mixed targets is specified, and make a second invocation > -# of make so .config is not included in this case either (for *config). > - > -no-dot-config-targets := clean mrproper distclean \ > - cscope TAGS tags help %docs check% \ > - include/generated/version.h headers_% \ > - kernelrelease kernelversion > - > -config-targets := 0 > -mixed-targets := 0 > -dot-config := 1 > - > -ifneq ($(filter $(no-dot-config-targets), $(MAKECMDGOALS)),) > - ifeq ($(filter-out $(no-dot-config-targets), $(MAKECMDGOALS)),) > - dot-config := 0 > - endif > -endif > - > -ifneq ($(filter config %config,$(MAKECMDGOALS)),) > - config-targets := 1 > - ifneq ($(filter-out config %config,$(MAKECMDGOALS)),) > - mixed-targets := 1 > - endif > +ifdef building_out_of_srctree > + $(Q)if [ -f $(srctree)/.config -o \ > + -d $(srctree)/include/config -o \ > + -d $(srctree)/arch/$(SRCARCH)/include/generated ]; then \ > + echo >&2 "***"; \ > + echo >&2 "*** The source tree is not clean, please run 'make$(if $(findstring command line, $(origin ARCH)), ARCH=$(ARCH)) mrproper'"; \ > + echo >&2 "*** in $(abs_srctree)";\ > + echo >&2 "***"; \ > + false; \ > + fi > + $(Q)ln -fsn $(srctree) source > + $(Q)$(CONFIG_SHELL) $(srctree)/scripts/mkmakefile $(srctree) > + $(Q)test -e .gitignore || \ > + { echo "# this is build directory, ignore it"; echo "*"; } > .gitignore > endif > > -ifeq ($(mixed-targets),1) > -# =========================================================================== > -# We're called with mixed targets (*config and build targets). > -# Handle them one by one. > - > -PHONY += $(MAKECMDGOALS) __build_one_by_one > - > -$(filter-out __build_one_by_one, $(MAKECMDGOALS)): __build_one_by_one > - @: > - > -__build_one_by_one: > - $(Q)set -e; \ > - for i in $(MAKECMDGOALS); do \ > - $(MAKE) -f $(srctree)/Makefile $$i; \ > - done > - > -else > -ifeq ($(config-targets),1) > +ifdef config-build > # =========================================================================== > # *config targets only - make sure prerequisites are updated, and descend > # in scripts/kconfig to make the *config target > @@ -433,34 +490,65 @@ ifeq ($(config-targets),1) > include $(srctree)/arch/$(SRCARCH)/Makefile > export KBUILD_DEFCONFIG > > -config: scripts_basic outputmakefile FORCE > +config: outputmakefile scripts_basic FORCE > $(Q)$(MAKE) $(build)=scripts/kconfig $@ > > -%config: scripts_basic outputmakefile FORCE > +%config: outputmakefile scripts_basic FORCE > $(Q)$(MAKE) $(build)=scripts/kconfig $@ > > -else > +else #!config-build > # =========================================================================== > # Build targets only - this includes barebox, arch specific targets, clean > # targets and others. In general all targets except *config targets. > > -# Additional helpers built in scripts/ > -# Carefully list dependencies so we do not try to build scripts twice > -# in parallel > -PHONY += scripts > -scripts: scripts_basic > - $(Q)$(MAKE) $(build)=$(@) > +# If building an external module we do not care about the all: rule > +# but instead _all depend on modules > +PHONY += all > +ifeq ($(KBUILD_EXTMOD),) > +_all: all > +else > +_all: modules > +endif > + > +# Decide whether to build built-in, modular, or both. > +# Normally, just do built-in. > + > +KBUILD_MODULES := > +KBUILD_BUILTIN := 1 > + > +# If we have only "make modules", don't compile built-in objects. > +# When we're building modules with modversions, we need to consider > +# the built-in objects during the descend as well, in order to > +# make sure the checksums are up to date before we record them. > + > +ifeq ($(MAKECMDGOALS),modules) > + KBUILD_BUILTIN := $(if $(CONFIG_MODVERSIONS),1) > +endif > + > +# If we have "make <whatever> modules", compile modules > +# in addition to whatever we do anyway. > +# Just "make" or "make all" shall build modules as well > + > +ifneq ($(filter all _all modules,$(MAKECMDGOALS)),) > + KBUILD_MODULES := 1 > +endif > + > +export KBUILD_MODULES KBUILD_BUILTIN > > -ifeq ($(dot-config),1) > +ifdef need-config > include include/config/auto.conf > endif > > +# We need some generic definitions. > +include $(srctree)/scripts/Makefile.lib > + > # Objects we will link into barebox / subdirs we need to visit > common-y := common/ drivers/ commands/ lib/ crypto/ net/ fs/ firmware/ > > include $(srctree)/arch/$(SRCARCH)/Makefile > > -ifeq ($(dot-config),1) > +ifdef need-config > +ifdef may-sync-config > # Read in dependencies to all Kconfig* files, make sure to run syncconfig if > # changes are detected. This should be included after arch/$(SRCARCH)/Makefile > # because some architectures define CROSS_COMPILE there. > @@ -484,7 +572,23 @@ $(KCONFIG_CONFIG): > # (Note: use the grouped target '&:' when we bump to GNU Make 4.3) > %/auto.conf %/auto.conf.cmd: $(KCONFIG_CONFIG) > $(Q)$(MAKE) -f $(srctree)/Makefile syncconfig > -endif # $(dot-config) > +else # !may-sync-config > +# External modules and some install targets need include/generated/autoconf.h > +# and include/config/auto.conf but do not care if they are up-to-date. > +# Use auto.conf to trigger the test > +PHONY += include/config/auto.conf > + > +include/config/auto.conf: > + $(Q)test -e include/generated/autoconf.h -a -e $@ || ( \ > + echo >&2; \ > + echo >&2 " ERROR: Kernel configuration is invalid."; \ > + echo >&2 " include/generated/autoconf.h or $@ are missing.";\ > + echo >&2 " Run 'make oldconfig && make prepare' on kernel src to fix it."; \ > + echo >&2 ; \ > + /bin/false) > + > +endif # may-sync-config > +endif # need-config > > KBUILD_CFLAGS += -ggdb3 > > @@ -800,6 +904,13 @@ include/config/kernel.release: FORCE > $(Q)rm -f $@ > $(Q)echo $(KERNELVERSION)$(localversion) > $@ > > +# Additional helpers built in scripts/ > +# Carefully list dependencies so we do not try to build scripts twice > +# in parallel > +PHONY += scripts > +scripts: scripts_basic > + $(Q)$(MAKE) $(build)=$(@) > + > # Things we need to do before we recursively start building the kernel > # or the modules are listed in "prepare". > # A multi level approach is used. prepareN is processed before prepareN-1. > @@ -807,42 +918,20 @@ include/config/kernel.release: FORCE > # version.h and scripts_basic is processed / created. > > # Listed in dependency order > -PHONY += prepare archprepare prepare0 prepare1 prepare2 prepare3 > - > -# prepare-all is deprecated, use prepare as valid replacement > -PHONY += prepare-all > - > -# prepare3 is used to check if we are building in a separate output directory, > -# and if so do: > -# 1) Check that make has not been executed in the kernel src $(srctree) > -prepare3: include/config/kernel.release > -ifneq ($(KBUILD_SRC),) > - @echo ' Using $(srctree) as source for barebox' > - $(Q)if [ -f $(srctree)/.config -o -d $(srctree)/include/config ]; then \ > - echo " $(srctree) is not clean, please run 'make mrproper'";\ > - echo " in the '$(srctree)' directory.";\ > - false; \ > - fi; > -endif > - > -# prepare2 creates a makefile if using a separate output directory > -prepare2: prepare3 outputmakefile > +PHONY += prepare archprepare prepare0 > > -prepare1: prepare2 include/generated/version.h include/generated/utsrelease.h \ > - include/config.h > +archprepare: outputmakefile scripts_basic include/config/kernel.release \ > + $(version_h) include/generated/utsrelease.h include/config.h > > +prepare0: archprepare FORCE > ifneq ($(KBUILD_MODULES),) > $(Q)mkdir -p $(MODVERDIR) > $(Q)rm -f $(MODVERDIR)/* > endif > - > -archprepare: prepare1 scripts_basic > - > -prepare0: archprepare FORCE > $(Q)$(MAKE) $(build)=. > > # All the preparing.. > -prepare prepare-all: prepare0 > +prepare: prepare0 > > # Leave this as default for preprocessing barebox.lds.S, which is now > # done in arch/$(SRCARCH)/kernel/Makefile > @@ -1095,9 +1184,9 @@ help: > # Generate tags for editors > # --------------------------------------------------------------------------- > quiet_cmd_tags = GEN $@ > - cmd_tags = $(CONFIG_SHELL) $(srctree)/scripts/tags.sh $@ > + cmd_tags = $(BASH) $(srctree)/scripts/tags.sh $@ > > -tags TAGS cscope: FORCE > +tags TAGS cscope gtags: FORCE > $(call cmd,tags) > > SPHINXBUILD = sphinx-build > @@ -1109,9 +1198,6 @@ docs: FORCE > @$(SPHINXBUILD) -b html -d $(objtree)/doctrees $(srctree)/Documentation \ > $(objtree)/Documentation/html > > -endif #ifeq ($(config-targets),1) > -endif #ifeq ($(mixed-targets),1) > - > # Single targets > # --------------------------------------------------------------------------- > # Single targets are compatible with: > @@ -1175,14 +1261,13 @@ ifneq ($(cmd_files),) > include $(cmd_files) > endif > > -endif # skip-makefile > +endif # config-build > +endif # mixed-build > +endif # need-sub-make > > PHONY += FORCE > FORCE: > > -# Cancel implicit rules on top Makefile, `-rR' will apply to sub-makes. > -Makefile: ; > - > # Declare the contents of the PHONY variable as phony. We keep that > # information in a variable so we can use it in if_changed and friends. > .PHONY: $(PHONY) > diff --git a/firmware/Makefile b/firmware/Makefile > index 3f2c31868..020d48440 100644 > --- a/firmware/Makefile > +++ b/firmware/Makefile > @@ -56,7 +56,7 @@ $(patsubst %,$(obj)/pbl-%.gen.o, $(fw-external-y)): $(obj)/pbl-%.gen.o: $(fwdir) > > obj-pbl-y += $(patsubst %,%.gen.o, $(fw-external-y)) > > -ifeq ($(KBUILD_SRC),) > +ifndef building_out_of_srctree > # Makefile.build only creates subdirectories for O= builds, but external > # firmware might live outside the kernel source tree > _dummy := $(foreach d,$(addprefix $(obj)/,$(dir $(fw-external-y))), $(shell [ -d $(d) ] || mkdir -p $(d))) > diff --git a/scripts/Makefile.build b/scripts/Makefile.build > index 2273d815c..023215857 100644 > --- a/scripts/Makefile.build > +++ b/scripts/Makefile.build > @@ -49,7 +49,7 @@ ifneq ($(hostprogs)$(hostprogs-y)$(hostprogs-m),) > include scripts/Makefile.host > endif > > -ifneq ($(KBUILD_SRC),) > +ifdef building_out_of_srctree > # Create output directory if not already present > _dummy := $(shell [ -d $(obj) ] || mkdir -p $(obj)) > > diff --git a/scripts/Makefile.host b/scripts/Makefile.host > index 9740f3106..55b565ce3 100644 > --- a/scripts/Makefile.host > +++ b/scripts/Makefile.host > @@ -86,7 +86,7 @@ _hostc_flags = $(KBUILD_HOSTCFLAGS) $(HOST_EXTRACFLAGS) \ > _hostcxx_flags = $(KBUILD_HOSTCXXFLAGS) $(HOST_EXTRACXXFLAGS) \ > $(HOSTCXXFLAGS_$(target-stem).o) > > -ifeq ($(KBUILD_SRC),) > +ifndef building_out_of_srctree > __hostc_flags = $(_hostc_flags) > __hostcxx_flags = $(_hostcxx_flags) > else > diff --git a/scripts/Makefile.lib b/scripts/Makefile.lib > index 985fc1303..39cc24b19 100644 > --- a/scripts/Makefile.lib > +++ b/scripts/Makefile.lib > @@ -147,7 +147,7 @@ endif > # If building barebox in a separate objtree expand all occurrences > # of -Idir to -I$(srctree)/dir except for absolute paths (starting with '/'). > > -ifeq ($(KBUILD_SRC),) > +ifndef building_out_of_srctree > __c_flags = $(_c_flags) > __a_flags = $(_a_flags) > __cpp_flags = $(_cpp_flags) > diff --git a/scripts/mkmakefile b/scripts/mkmakefile > index 84af27bf0..1cb174751 100755 > --- a/scripts/mkmakefile > +++ b/scripts/mkmakefile > @@ -1,52 +1,17 @@ > #!/bin/sh > +# SPDX-License-Identifier: GPL-2.0 > # Generates a small Makefile used in the root of the output > # directory, to allow make to be started from there. > # The Makefile also allow for more convinient build of external modules > > # Usage > # $1 - Kernel src directory > -# $2 - Output directory > -# $3 - version > -# $4 - patchlevel > > - > -test ! -r $2/Makefile -o -O $2/Makefile || exit 0 > -# Only overwrite automatically generated Makefiles > -# (so we do not overwrite kernel Makefile) > -if test -e $2/Makefile && ! grep -q Automatically $2/Makefile > -then > - exit 0 > -fi > if [ "${quiet}" != "silent_" ]; then > - echo " GEN $2/Makefile" > + echo " GEN Makefile" > fi > > -cat << EOF > $2/Makefile > +cat << EOF > Makefile > # Automatically generated by $0: don't edit > - > -VERSION = $3 > -PATCHLEVEL = $4 > - > -lastword = \$(word \$(words \$(1)),\$(1)) > -makedir := \$(dir \$(call lastword,\$(MAKEFILE_LIST))) > - > -ifeq ("\$(origin V)", "command line") > -VERBOSE := \$(V) > -endif > -ifneq (\$(VERBOSE),1) > -Q := @ > -endif > - > -MAKEARGS := -C $1 > -MAKEARGS += O=\$(if \$(patsubst /%,,\$(makedir)),\$(CURDIR)/)\$(patsubst %/,%,\$(makedir)) > - > -MAKEFLAGS += --no-print-directory > - > -.PHONY: __sub-make \$(MAKECMDGOALS) > - > -__sub-make: > - \$(Q)\$(MAKE) \$(MAKEARGS) \$(MAKECMDGOALS) > - > -\$(filter-out __sub-make, \$(MAKECMDGOALS)): __sub-make > - @: > +include $1/Makefile > EOF > diff --git a/scripts/tags.sh b/scripts/tags.sh > index 8ae44642a..4e18ae528 100755 > --- a/scripts/tags.sh > +++ b/scripts/tags.sh > @@ -1,70 +1,64 @@ > -#!/bin/sh > +#!/bin/bash > +# SPDX-License-Identifier: GPL-2.0-only > # Generate tags or cscope files > # Usage tags.sh <mode> > # > # mode may be any of: tags, TAGS, cscope > # > # Uses the following environment variables: > -# ARCH, SUBARCH, SRCARCH, srctree, src, obj > +# SUBARCH, SRCARCH, srctree > > if [ "$KBUILD_VERBOSE" = "1" ]; then > set -x > fi > > -# This is a duplicate of RCS_FIND_IGNORE without escaped '()' > -ignore="( -name SCCS -o -name BitKeeper -o -name .svn -o \ > - -name CVS -o -name .pc -o -name .hg -o \ > - -name .git ) \ > - -prune -o" > +# RCS_FIND_IGNORE has escaped ()s -- remove them. > +ignore="$(echo "$RCS_FIND_IGNORE" | sed 's|\\||g' )" > +# tags and cscope files should also ignore MODVERSION *.mod.c files > +ignore="$ignore ( -name *.mod.c ) -prune -o" > > -# Do not use full path if we do not use O=.. builds > -# Use make O=. {tags|cscope} > +# Use make KBUILD_ABS_SRCTREE=1 {tags|cscope} > # to force full paths for a non-O= build > -if [ "${KBUILD_SRC}" = "" ]; then > +if [ "${srctree}" = "." -o -z "${srctree}" ]; then > tree= > else > tree=${srctree}/ > fi > > -# Find all available archs > -find_all_archs() > -{ > - ALLSOURCE_ARCHS="" > - for arch in `ls ${tree}arch`; do > - ALLSOURCE_ARCHS="${ALLSOURCE_ARCHS} "${arch##\/} > - done > -} > +# ignore userspace tools > +ignore="$ignore ( -path ${tree}tools ) -prune -o" > > # Detect if ALLSOURCE_ARCHS is set. If not, we assume SRCARCH > if [ "${ALLSOURCE_ARCHS}" = "" ]; then > ALLSOURCE_ARCHS=${SRCARCH} > elif [ "${ALLSOURCE_ARCHS}" = "all" ]; then > - find_all_archs > + ALLSOURCE_ARCHS=$(find ${tree}arch/ -mindepth 1 -maxdepth 1 -type d -printf '%f ') > fi > > -# find sources in arch/$ARCH > +# find sources in arch/$1 > find_arch_sources() > { > for i in $archincludedir; do > prune="$prune -wholename $i -prune -o" > done > - find ${tree}arch/$1 $ignore $prune -name "$2" -print; > + find ${tree}arch/$1 $ignore $prune -name "$2" -not -type l -print; > } > > # find sources in arch/$1/include > find_arch_include_sources() > { > - include=$(find ${tree}arch/$1/ -name include -type d); > + include=$(find ${tree}arch/$1/ -name include -type d -print); > if [ -n "$include" ]; then > archincludedir="$archincludedir $include" > - find $include $ignore -name "$2" -print; > + find $include $ignore -name "$2" -not -type l -print; > fi > } > > # find sources in include/ > find_include_sources() > { > - find ${tree}include $ignore -name config -prune -o -name "$1" -print; > + find ${tree}include $ignore -name config -prune -o -name "$1" \ > + -not -type l -print; > } > > # find sources in rest of tree > @@ -72,8 +66,8 @@ find_include_sources() > find_other_sources() > { > find ${tree}* $ignore \ > - \( -name include -o -name arch -o -name '.tmp_*' \) -prune -o \ > - -name "$1" -print; > + \( -path ${tree}include -o -path ${tree}arch -o -name '.tmp_*' \) -prune -o \ > + -name "$1" -not -type l -print; > } > > find_sources() > @@ -95,8 +89,37 @@ all_sources() > find_other_sources '*.[chS]' > } > > +all_compiled_sources() > +{ > + for i in $(all_sources); do > + case "$i" in > + *.[cS]) > + j=${i/\.[cS]/\.o} > + j="${j#$tree}" > + if [ -e $j ]; then > + echo $i > + fi > + ;; > + *) > + echo $i > + ;; > + esac > + done > +} > + > +all_target_sources() > +{ > + if [ -n "$COMPILED_SOURCE" ]; then > + all_compiled_sources > + else > + all_sources > + fi > +} > + > all_kconfigs() > { > + find ${tree}arch/ -maxdepth 1 $ignore \ > + -name "Kconfig*" -not -type l -print; > for arch in $ALLSOURCE_ARCHS; do > find_sources $arch 'Kconfig*' > done > @@ -105,93 +128,159 @@ all_kconfigs() > > docscope() > { > - (echo \-k; echo \-q; all_sources) > cscope.files > + (echo \-k; echo \-q; all_target_sources) > cscope.files > cscope -b -f cscope.out > } > > dogtags() > { > - all_sources | gtags -i -f - > + all_target_sources | gtags -i -f - > +} > + > +# Basic regular expressions with an optional /kind-spec/ for ctags and > +# the following limitations: > +# - No regex modifiers > +# - Use \{0,1\} instead of \?, because etags expects an unescaped ? > +# - \s is not working with etags, use a space or [ \t] > +# - \w works, but does not match underscores in etags > +# - etags regular expressions have to match at the start of a line; > +# a ^[^#] is prepended by setup_regex unless an anchor is already present > +regex_asm=( > + '/^\(ENTRY\|_GLOBAL\)(\([[:alnum:]_\\]*\)).*/\2/' > +) > +regex_c=( > + '/^SYSCALL_DEFINE[0-9](\([[:alnum:]_]*\).*/sys_\1/' > + '/^BPF_CALL_[0-9](\([[:alnum:]_]*\).*/\1/' > + '/^COMPAT_SYSCALL_DEFINE[0-9](\([[:alnum:]_]*\).*/compat_sys_\1/' > + '/^TRACE_EVENT(\([[:alnum:]_]*\).*/trace_\1/' > + '/^TRACE_EVENT(\([[:alnum:]_]*\).*/trace_\1_rcuidle/' > + '/^DEFINE_EVENT([^,)]*, *\([[:alnum:]_]*\).*/trace_\1/' > + '/^DEFINE_EVENT([^,)]*, *\([[:alnum:]_]*\).*/trace_\1_rcuidle/' > + '/^DEFINE_INSN_CACHE_OPS(\([[:alnum:]_]*\).*/get_\1_slot/' > + '/^DEFINE_INSN_CACHE_OPS(\([[:alnum:]_]*\).*/free_\1_slot/' > + '/^PAGEFLAG(\([[:alnum:]_]*\).*/Page\1/' > + '/^PAGEFLAG(\([[:alnum:]_]*\).*/SetPage\1/' > + '/^PAGEFLAG(\([[:alnum:]_]*\).*/ClearPage\1/' > + '/^TESTSETFLAG(\([[:alnum:]_]*\).*/TestSetPage\1/' > + '/^TESTPAGEFLAG(\([[:alnum:]_]*\).*/Page\1/' > + '/^SETPAGEFLAG(\([[:alnum:]_]*\).*/SetPage\1/' > + '/\<__SETPAGEFLAG(\([[:alnum:]_]*\).*/__SetPage\1/' > + '/\<TESTCLEARFLAG(\([[:alnum:]_]*\).*/TestClearPage\1/' > + '/\<__TESTCLEARFLAG(\([[:alnum:]_]*\).*/TestClearPage\1/' > + '/\<CLEARPAGEFLAG(\([[:alnum:]_]*\).*/ClearPage\1/' > + '/\<__CLEARPAGEFLAG(\([[:alnum:]_]*\).*/__ClearPage\1/' > + '/^__PAGEFLAG(\([[:alnum:]_]*\).*/__SetPage\1/' > + '/^__PAGEFLAG(\([[:alnum:]_]*\).*/__ClearPage\1/' > + '/^PAGEFLAG_FALSE(\([[:alnum:]_]*\).*/Page\1/' > + '/\<TESTSCFLAG(\([[:alnum:]_]*\).*/TestSetPage\1/' > + '/\<TESTSCFLAG(\([[:alnum:]_]*\).*/TestClearPage\1/' > + '/\<SETPAGEFLAG_NOOP(\([[:alnum:]_]*\).*/SetPage\1/' > + '/\<CLEARPAGEFLAG_NOOP(\([[:alnum:]_]*\).*/ClearPage\1/' > + '/\<__CLEARPAGEFLAG_NOOP(\([[:alnum:]_]*\).*/__ClearPage\1/' > + '/\<TESTCLEARFLAG_FALSE(\([[:alnum:]_]*\).*/TestClearPage\1/' > + '/^PAGE_TYPE_OPS(\([[:alnum:]_]*\).*/Page\1/' > + '/^PAGE_TYPE_OPS(\([[:alnum:]_]*\).*/__SetPage\1/' > + '/^PAGE_TYPE_OPS(\([[:alnum:]_]*\).*/__ClearPage\1/' > + '/^TASK_PFA_TEST([^,]*, *\([[:alnum:]_]*\))/task_\1/' > + '/^TASK_PFA_SET([^,]*, *\([[:alnum:]_]*\))/task_set_\1/' > + '/^TASK_PFA_CLEAR([^,]*, *\([[:alnum:]_]*\))/task_clear_\1/' > + '/^DEF_MMIO_\(IN\|OUT\)_[XD](\([[:alnum:]_]*\),[^)]*)/\2/' > + '/^DEBUGGER_BOILERPLATE(\([[:alnum:]_]*\))/\1/' > + '/^DEF_PCI_AC_\(\|NO\)RET(\([[:alnum:]_]*\).*/\2/' > + '/^PCI_OP_READ(\(\w*\).*[1-4])/pci_bus_read_config_\1/' > + '/^PCI_OP_WRITE(\(\w*\).*[1-4])/pci_bus_write_config_\1/' > + '/\<DEFINE_\(RT_MUTEX\|MUTEX\|SEMAPHORE\|SPINLOCK\)(\([[:alnum:]_]*\)/\2/v/' > + '/\<DEFINE_\(RAW_SPINLOCK\|RWLOCK\|SEQLOCK\)(\([[:alnum:]_]*\)/\2/v/' > + '/\<DECLARE_\(RWSEM\|COMPLETION\)(\([[:alnum:]_]\+\)/\2/v/' > + '/\<DECLARE_BITMAP(\([[:alnum:]_]*\)/\1/v/' > + '/\(^\|\s\)\(\|L\|H\)LIST_HEAD(\([[:alnum:]_]*\)/\3/v/' > + '/\(^\|\s\)RADIX_TREE(\([[:alnum:]_]*\)/\2/v/' > + '/\<DEFINE_PER_CPU([^,]*, *\([[:alnum:]_]*\)/\1/v/' > + '/\<DEFINE_PER_CPU_SHARED_ALIGNED([^,]*, *\([[:alnum:]_]*\)/\1/v/' > + '/\<DECLARE_WAIT_QUEUE_HEAD(\([[:alnum:]_]*\)/\1/v/' > + '/\<DECLARE_\(TASKLET\|WORK\|DELAYED_WORK\)(\([[:alnum:]_]*\)/\2/v/' > + '/\(^\s\)OFFSET(\([[:alnum:]_]*\)/\2/v/' > + '/\(^\s\)DEFINE(\([[:alnum:]_]*\)/\2/v/' > + '/\<\(DEFINE\|DECLARE\)_HASHTABLE(\([[:alnum:]_]*\)/\2/v/' > + '/\<DEFINE_ID\(R\|A\)(\([[:alnum:]_]\+\)/\2/' > + '/\<DEFINE_WD_CLASS(\([[:alnum:]_]\+\)/\1/' > + '/\<ATOMIC_NOTIFIER_HEAD(\([[:alnum:]_]\+\)/\1/' > + '/\<RAW_NOTIFIER_HEAD(\([[:alnum:]_]\+\)/\1/' > + '/\<DECLARE_FAULT_ATTR(\([[:alnum:]_]\+\)/\1/' > + '/\<BLOCKING_NOTIFIER_HEAD(\([[:alnum:]_]\+\)/\1/' > + '/\<DEVICE_ATTR_\(RW\|RO\|WO\)(\([[:alnum:]_]\+\)/dev_attr_\2/' > + '/\<DRIVER_ATTR_\(RW\|RO\|WO\)(\([[:alnum:]_]\+\)/driver_attr_\2/' > + '/\<\(DEFINE\|DECLARE\)_STATIC_KEY_\(TRUE\|FALSE\)\(\|_RO\)(\([[:alnum:]_]\+\)/\4/' > +) > +regex_kconfig=( > + '/^[[:blank:]]*\(menu\|\)config[[:blank:]]\+\([[:alnum:]_]\+\)/\2/' > + '/^[[:blank:]]*\(menu\|\)config[[:blank:]]\+\([[:alnum:]_]\+\)/CONFIG_\2/' > +) > +setup_regex() > +{ > + local mode=$1 lang tmp=() r > + shift > + > + regex=() > + for lang; do > + case "$lang" in > + asm) tmp=("${regex_asm[@]}") ;; > + c) tmp=("${regex_c[@]}") ;; > + kconfig) tmp=("${regex_kconfig[@]}") ;; > + esac > + for r in "${tmp[@]}"; do > + if test "$mode" = "exuberant"; then > + regex[${#regex[@]}]="--regex-$lang=${r}b" > + else > + # Remove ctags /kind-spec/ > + case "$r" in > + /*/*/?/) > + r=${r%?/} > + esac > + # Prepend ^[^#] unless already anchored > + case "$r" in > + /^*) ;; > + *) > + r="/^[^#]*${r#/}" > + esac > + regex[${#regex[@]}]="--regex=$r" > + fi > + done > + done > } > > exuberant() > { > - all_sources | xargs $1 -a \ > - -I __initdata,__exitdata,__acquires,__releases \ > - -I __read_mostly,____cacheline_aligned \ > + setup_regex exuberant asm c > + all_target_sources | xargs $1 -a \ > + -I __initdata,__exitdata,__initconst,__ro_after_init \ > + -I __initdata_memblock \ > + -I __refdata,__attribute,__maybe_unused,__always_unused \ > + -I __acquires,__releases,__deprecated,__always_inline \ > + -I __read_mostly,__aligned,____cacheline_aligned \ > -I ____cacheline_aligned_in_smp \ > + -I __cacheline_aligned,__cacheline_aligned_in_smp \ > -I ____cacheline_internodealigned_in_smp \ > - -I EXPORT_SYMBOL,EXPORT_SYMBOL_GPL \ > + -I __used,__packed,__packed2__,__must_check,__must_hold \ > + -I EXPORT_SYMBOL,EXPORT_SYMBOL_GPL,ACPI_EXPORT_SYMBOL \ > -I DEFINE_TRACE,EXPORT_TRACEPOINT_SYMBOL,EXPORT_TRACEPOINT_SYMBOL_GPL \ > - --extra=+f --c-kinds=+px \ > - --regex-asm='/^(ENTRY|_GLOBAL)\(([^)]*)\).*/\2/' \ > - --regex-c='/^SYSCALL_DEFINE[[:digit:]]?\(([^,)]*).*/sys_\1/' \ > - --regex-c++='/^TRACE_EVENT\(([^,)]*).*/trace_\1/' \ > - --regex-c++='/^DEFINE_EVENT\([^,)]*, *([^,)]*).*/trace_\1/' \ > - --regex-c++='/PAGEFLAG\(([^,)]*).*/Page\1/' \ > - --regex-c++='/PAGEFLAG\(([^,)]*).*/SetPage\1/' \ > - --regex-c++='/PAGEFLAG\(([^,)]*).*/ClearPage\1/' \ > - --regex-c++='/TESTSETFLAG\(([^,)]*).*/TestSetPage\1/' \ > - --regex-c++='/TESTPAGEFLAG\(([^,)]*).*/Page\1/' \ > - --regex-c++='/SETPAGEFLAG\(([^,)]*).*/SetPage\1/' \ > - --regex-c++='/__SETPAGEFLAG\(([^,)]*).*/__SetPage\1/' \ > - --regex-c++='/TESTCLEARFLAG\(([^,)]*).*/TestClearPage\1/' \ > - --regex-c++='/__TESTCLEARFLAG\(([^,)]*).*/TestClearPage\1/' \ > - --regex-c++='/CLEARPAGEFLAG\(([^,)]*).*/ClearPage\1/' \ > - --regex-c++='/__CLEARPAGEFLAG\(([^,)]*).*/__ClearPage\1/' \ > - --regex-c++='/__PAGEFLAG\(([^,)]*).*/__SetPage\1/' \ > - --regex-c++='/__PAGEFLAG\(([^,)]*).*/__ClearPage\1/' \ > - --regex-c++='/PAGEFLAG_FALSE\(([^,)]*).*/Page\1/' \ > - --regex-c++='/TESTSCFLAG\(([^,)]*).*/TestSetPage\1/' \ > - --regex-c++='/TESTSCFLAG\(([^,)]*).*/TestClearPage\1/' \ > - --regex-c++='/SETPAGEFLAG_NOOP\(([^,)]*).*/SetPage\1/' \ > - --regex-c++='/CLEARPAGEFLAG_NOOP\(([^,)]*).*/ClearPage\1/' \ > - --regex-c++='/__CLEARPAGEFLAG_NOOP\(([^,)]*).*/__ClearPage\1/' \ > - --regex-c++='/TESTCLEARFLAG_FALSE\(([^,)]*).*/TestClearPage\1/' \ > - --regex-c++='/_PE\(([^,)]*).*/PEVENT_ERRNO__\1/' \ > - --regex-c='/PCI_OP_READ\(([a-z]*[a-z]).*[1-4]\)/pci_bus_read_config_\1/' \ > - --regex-c='/PCI_OP_WRITE\(([a-z]*[a-z]).*[1-4]\)/pci_bus_write_config_\1/' > + -I static,const \ > + --extra=+fq --c-kinds=+px --fields=+iaS --langmap=c:+.h \ > + "${regex[@]}" > > + setup_regex exuberant kconfig > all_kconfigs | xargs $1 -a \ > - --langdef=kconfig --language-force=kconfig \ > - --regex-kconfig='/^[[:blank:]]*(menu|)config[[:blank:]]+([[:alnum:]_]+)/\2/' \ > - --regex-kconfig='/^[[:blank:]]*(menu|)config[[:blank:]]+([[:alnum:]_]+)/CONFIG_\2/' > + --langdef=kconfig --language-force=kconfig "${regex[@]}" > + > } > > emacs() > { > - all_sources | xargs $1 -a \ > - --regex='/^(ENTRY|_GLOBAL)(\([^)]*\)).*/\2/' \ > - --regex='/^SYSCALL_DEFINE[0-9]?(\([^,)]*\).*/sys_\1/' \ > - --regex='/^TRACE_EVENT(\([^,)]*\).*/trace_\1/' \ > - --regex='/^DEFINE_EVENT([^,)]*, *\([^,)]*\).*/trace_\1/' \ > - --regex='/PAGEFLAG\(([^,)]*).*/Page\1/' \ > - --regex='/PAGEFLAG\(([^,)]*).*/SetPage\1/' \ > - --regex='/PAGEFLAG\(([^,)]*).*/ClearPage\1/' \ > - --regex='/TESTSETFLAG\(([^,)]*).*/TestSetPage\1/' \ > - --regex='/TESTPAGEFLAG\(([^,)]*).*/Page\1/' \ > - --regex='/SETPAGEFLAG\(([^,)]*).*/SetPage\1/' \ > - --regex='/__SETPAGEFLAG\(([^,)]*).*/__SetPage\1/' \ > - --regex='/TESTCLEARFLAG\(([^,)]*).*/TestClearPage\1/' \ > - --regex='/__TESTCLEARFLAG\(([^,)]*).*/TestClearPage\1/' \ > - --regex='/CLEARPAGEFLAG\(([^,)]*).*/ClearPage\1/' \ > - --regex='/__CLEARPAGEFLAG\(([^,)]*).*/__ClearPage\1/' \ > - --regex='/__PAGEFLAG\(([^,)]*).*/__SetPage\1/' \ > - --regex='/__PAGEFLAG\(([^,)]*).*/__ClearPage\1/' \ > - --regex='/PAGEFLAG_FALSE\(([^,)]*).*/Page\1/' \ > - --regex='/TESTSCFLAG\(([^,)]*).*/TestSetPage\1/' \ > - --regex='/TESTSCFLAG\(([^,)]*).*/TestClearPage\1/' \ > - --regex='/SETPAGEFLAG_NOOP\(([^,)]*).*/SetPage\1/' \ > - --regex='/CLEARPAGEFLAG_NOOP\(([^,)]*).*/ClearPage\1/' \ > - --regex='/__CLEARPAGEFLAG_NOOP\(([^,)]*).*/__ClearPage\1/' \ > - --regex='/TESTCLEARFLAG_FALSE\(([^,)]*).*/TestClearPage\1/' \ > - --regex='/_PE\(([^,)]*).*/PEVENT_ERRNO__\1/' \ > - --regex='/PCI_OP_READ\(([a-z]*[a-z]).*[1-4]\)/pci_bus_read_config_\1/' \ > - --regex='/PCI_OP_WRITE\(([a-z]*[a-z]).*[1-4]\)/pci_bus_write_config_\1/' > + setup_regex emacs asm c > + all_target_sources | xargs $1 -a "${regex[@]}" > > - all_kconfigs | xargs $1 -a \ > - --regex='/^[ \t]*\(\(menu\)*config\)[ \t]+\([a-zA-Z0-9_]+\)/\3/' \ > - --regex='/^[ \t]*\(\(menu\)*config\)[ \t]+\([a-zA-Z0-9_]+\)/CONFIG_\3/' > + setup_regex emacs kconfig > + all_kconfigs | xargs $1 -a "${regex[@]}" > } > > xtags() > @@ -201,11 +290,10 @@ xtags() > elif $1 --version 2>&1 | grep -iq emacs; then > emacs $1 > else > - all_sources | xargs $1 -a > - fi > + all_target_sources | xargs $1 -a > + fi > } > > - > # Support um (which uses SUBARCH) > if [ "${ARCH}" = "um" ]; then > if [ "$SUBARCH" = "i386" ]; then > -- > 2.25.1 > > > _______________________________________________ > barebox mailing list > barebox@lists.infradead.org > http://lists.infradead.org/mailman/listinfo/barebox > -- Pengutronix e.K. | | Steuerwalder Str. 21 | http://www.pengutronix.de/ | 31137 Hildesheim, Germany | Phone: +49-5121-206917-0 | Amtsgericht Hildesheim, HRA 2686 | Fax: +49-5121-206917-5555 | _______________________________________________ barebox mailing list barebox@lists.infradead.org http://lists.infradead.org/mailman/listinfo/barebox ^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2020-05-12 6:27 UTC | newest] Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed) -- links below jump to the message on this page -- 2020-05-11 1:40 [PATCH 1/2] arch: remove KBUILD_SRC checks from arch Makefile Masahiro Yamada 2020-05-11 1:40 ` [PATCH 2/2] kbuild: resync top Makefile, mkmakefile, tags.sh with Linux 5.7-rc4 Masahiro Yamada 2020-05-12 6:27 ` Sascha Hauer
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox