2018-05-07 05:58:06 +08:00
|
|
|
# SPDX-License-Identifier: GPL-2.0+
|
2015-11-10 09:06:16 +08:00
|
|
|
|
2022-11-08 04:27:03 +08:00
|
|
|
VERSION = 2023
|
2023-07-26 05:19:54 +08:00
|
|
|
PATCHLEVEL = 10
|
2012-07-10 15:21:12 +08:00
|
|
|
SUBLEVEL =
|
2023-10-02 22:39:59 +08:00
|
|
|
EXTRAVERSION =
|
2014-02-04 16:24:30 +08:00
|
|
|
NAME =
|
2008-01-13 07:59:21 +08:00
|
|
|
|
kbuild: use Linux Kernel build scripts
Now we are ready to switch over to real Kbuild.
This commit disables temporary scripts:
scripts/{Makefile.build.tmp, Makefile.host.tmp}
and enables real Kbuild scripts:
scripts/{Makefile.build,Makefile.host,Makefile.lib}.
This switch is triggered by the line in scripts/Kbuild.include
-build := -f $(if $(KBUILD_SRC),$(srctree)/)scripts/Makefile.build.tmp obj
+build := -f $(if $(KBUILD_SRC),$(srctree)/)scripts/Makefile.build obj
We need to adjust some build scripts for U-Boot.
But smaller amount of modification is preferable.
Additionally, we need to fix compiler flags which are
locally added or removed.
In Kbuild, it is not allowed to change CFLAGS locally.
Instead, ccflags-y, asflags-y, cppflags-y,
CFLAGS_$(basetarget).o, CFLAGS_REMOVE_$(basetarget).o
are prepared for that purpose.
Signed-off-by: Masahiro Yamada <yamada.m@jp.panasonic.com>
Tested-by: Gerhard Sittig <gsi@denx.de>
2014-02-04 16:24:28 +08:00
|
|
|
# *DOCUMENTATION*
|
|
|
|
# To see a list of typical targets execute "make help"
|
|
|
|
# More info can be located in ./README
|
|
|
|
# Comments in this file are targeted only to the developer, do not
|
|
|
|
# expect to learn how to build the kernel reading this file.
|
|
|
|
|
2021-06-18 06:07:25 +08:00
|
|
|
# Do not use make's built-in rules and variables
|
|
|
|
# (this increases performance and avoids hard-to-debug behaviour)
|
|
|
|
MAKEFLAGS += -rR
|
kbuild: use Linux Kernel build scripts
Now we are ready to switch over to real Kbuild.
This commit disables temporary scripts:
scripts/{Makefile.build.tmp, Makefile.host.tmp}
and enables real Kbuild scripts:
scripts/{Makefile.build,Makefile.host,Makefile.lib}.
This switch is triggered by the line in scripts/Kbuild.include
-build := -f $(if $(KBUILD_SRC),$(srctree)/)scripts/Makefile.build.tmp obj
+build := -f $(if $(KBUILD_SRC),$(srctree)/)scripts/Makefile.build obj
We need to adjust some build scripts for U-Boot.
But smaller amount of modification is preferable.
Additionally, we need to fix compiler flags which are
locally added or removed.
In Kbuild, it is not allowed to change CFLAGS locally.
Instead, ccflags-y, asflags-y, cppflags-y,
CFLAGS_$(basetarget).o, CFLAGS_REMOVE_$(basetarget).o
are prepared for that purpose.
Signed-off-by: Masahiro Yamada <yamada.m@jp.panasonic.com>
Tested-by: Gerhard Sittig <gsi@denx.de>
2014-02-04 16:24:28 +08:00
|
|
|
|
2021-02-11 01:54:25 +08:00
|
|
|
# Determine target architecture for the sandbox
|
2019-11-07 15:05:17 +08:00
|
|
|
include include/host_arch.h
|
2021-02-11 01:54:25 +08:00
|
|
|
ifeq ("", "$(CROSS_COMPILE)")
|
|
|
|
MK_ARCH="${shell uname -m}"
|
|
|
|
else
|
2022-05-05 22:42:23 +08:00
|
|
|
MK_ARCH="${shell echo $(CROSS_COMPILE) | sed -n 's/^[[:space:]]*\([^\/]*\/\)*\([^-]*\)-[^[:space:]]*/\2/p'}"
|
2021-02-11 01:54:25 +08:00
|
|
|
endif
|
2019-11-07 15:05:17 +08:00
|
|
|
unexport HOST_ARCH
|
|
|
|
ifeq ("x86_64", $(MK_ARCH))
|
|
|
|
export HOST_ARCH=$(HOST_ARCH_X86_64)
|
|
|
|
else ifneq (,$(findstring $(MK_ARCH), "i386" "i486" "i586" "i686"))
|
|
|
|
export HOST_ARCH=$(HOST_ARCH_X86)
|
|
|
|
else ifneq (,$(findstring $(MK_ARCH), "aarch64" "armv8l"))
|
|
|
|
export HOST_ARCH=$(HOST_ARCH_AARCH64)
|
2022-05-08 04:58:39 +08:00
|
|
|
else ifneq (,$(findstring $(MK_ARCH), "arm" "armv7" "armv7a" "armv7l"))
|
2019-11-07 15:05:17 +08:00
|
|
|
export HOST_ARCH=$(HOST_ARCH_ARM)
|
|
|
|
else ifeq ("riscv32", $(MK_ARCH))
|
|
|
|
export HOST_ARCH=$(HOST_ARCH_RISCV32)
|
|
|
|
else ifeq ("riscv64", $(MK_ARCH))
|
|
|
|
export HOST_ARCH=$(HOST_ARCH_RISCV64)
|
|
|
|
endif
|
|
|
|
undefine MK_ARCH
|
|
|
|
|
kbuild: use Linux Kernel build scripts
Now we are ready to switch over to real Kbuild.
This commit disables temporary scripts:
scripts/{Makefile.build.tmp, Makefile.host.tmp}
and enables real Kbuild scripts:
scripts/{Makefile.build,Makefile.host,Makefile.lib}.
This switch is triggered by the line in scripts/Kbuild.include
-build := -f $(if $(KBUILD_SRC),$(srctree)/)scripts/Makefile.build.tmp obj
+build := -f $(if $(KBUILD_SRC),$(srctree)/)scripts/Makefile.build obj
We need to adjust some build scripts for U-Boot.
But smaller amount of modification is preferable.
Additionally, we need to fix compiler flags which are
locally added or removed.
In Kbuild, it is not allowed to change CFLAGS locally.
Instead, ccflags-y, asflags-y, cppflags-y,
CFLAGS_$(basetarget).o, CFLAGS_REMOVE_$(basetarget).o
are prepared for that purpose.
Signed-off-by: Masahiro Yamada <yamada.m@jp.panasonic.com>
Tested-by: Gerhard Sittig <gsi@denx.de>
2014-02-04 16:24:28 +08:00
|
|
|
# Avoid funny character set dependencies
|
|
|
|
unexport LC_ALL
|
|
|
|
LC_COLLATE=C
|
|
|
|
LC_NUMERIC=C
|
|
|
|
export LC_COLLATE LC_NUMERIC
|
|
|
|
|
2014-10-30 10:06:11 +08:00
|
|
|
# Avoid interference with shell env settings
|
|
|
|
unexport GREP_OPTIONS
|
|
|
|
|
kbuild: use Linux Kernel build scripts
Now we are ready to switch over to real Kbuild.
This commit disables temporary scripts:
scripts/{Makefile.build.tmp, Makefile.host.tmp}
and enables real Kbuild scripts:
scripts/{Makefile.build,Makefile.host,Makefile.lib}.
This switch is triggered by the line in scripts/Kbuild.include
-build := -f $(if $(KBUILD_SRC),$(srctree)/)scripts/Makefile.build.tmp obj
+build := -f $(if $(KBUILD_SRC),$(srctree)/)scripts/Makefile.build obj
We need to adjust some build scripts for U-Boot.
But smaller amount of modification is preferable.
Additionally, we need to fix compiler flags which are
locally added or removed.
In Kbuild, it is not allowed to change CFLAGS locally.
Instead, ccflags-y, asflags-y, cppflags-y,
CFLAGS_$(basetarget).o, CFLAGS_REMOVE_$(basetarget).o
are prepared for that purpose.
Signed-off-by: Masahiro Yamada <yamada.m@jp.panasonic.com>
Tested-by: Gerhard Sittig <gsi@denx.de>
2014-02-04 16:24:28 +08:00
|
|
|
# We are using a recursive build, so we need to do a little thinking
|
|
|
|
# to get the ordering right.
|
|
|
|
#
|
|
|
|
# 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 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.
|
|
|
|
#
|
|
|
|
# The only cases where we need to modify files which have global
|
|
|
|
# effects are thus separated out and done before the recursive
|
|
|
|
# descending is started. They are now explicitly listed as the
|
|
|
|
# prepare rule.
|
|
|
|
|
2014-10-30 10:06:11 +08:00
|
|
|
# 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.
|
|
|
|
#
|
kbuild: use Linux Kernel build scripts
Now we are ready to switch over to real Kbuild.
This commit disables temporary scripts:
scripts/{Makefile.build.tmp, Makefile.host.tmp}
and enables real Kbuild scripts:
scripts/{Makefile.build,Makefile.host,Makefile.lib}.
This switch is triggered by the line in scripts/Kbuild.include
-build := -f $(if $(KBUILD_SRC),$(srctree)/)scripts/Makefile.build.tmp obj
+build := -f $(if $(KBUILD_SRC),$(srctree)/)scripts/Makefile.build obj
We need to adjust some build scripts for U-Boot.
But smaller amount of modification is preferable.
Additionally, we need to fix compiler flags which are
locally added or removed.
In Kbuild, it is not allowed to change CFLAGS locally.
Instead, ccflags-y, asflags-y, cppflags-y,
CFLAGS_$(basetarget).o, CFLAGS_REMOVE_$(basetarget).o
are prepared for that purpose.
Signed-off-by: Masahiro Yamada <yamada.m@jp.panasonic.com>
Tested-by: Gerhard Sittig <gsi@denx.de>
2014-02-04 16:24:28 +08:00
|
|
|
# To put more focus on warnings, be less verbose as default
|
|
|
|
# Use 'make V=1' to see the full commands
|
|
|
|
|
|
|
|
ifeq ("$(origin V)", "command line")
|
|
|
|
KBUILD_VERBOSE = $(V)
|
|
|
|
endif
|
|
|
|
ifndef KBUILD_VERBOSE
|
|
|
|
KBUILD_VERBOSE = 0
|
|
|
|
endif
|
|
|
|
|
2014-10-30 10:06:11 +08:00
|
|
|
ifeq ($(KBUILD_VERBOSE),1)
|
|
|
|
quiet =
|
|
|
|
Q =
|
|
|
|
else
|
|
|
|
quiet=quiet_
|
|
|
|
Q = @
|
|
|
|
endif
|
kbuild: use Linux Kernel build scripts
Now we are ready to switch over to real Kbuild.
This commit disables temporary scripts:
scripts/{Makefile.build.tmp, Makefile.host.tmp}
and enables real Kbuild scripts:
scripts/{Makefile.build,Makefile.host,Makefile.lib}.
This switch is triggered by the line in scripts/Kbuild.include
-build := -f $(if $(KBUILD_SRC),$(srctree)/)scripts/Makefile.build.tmp obj
+build := -f $(if $(KBUILD_SRC),$(srctree)/)scripts/Makefile.build obj
We need to adjust some build scripts for U-Boot.
But smaller amount of modification is preferable.
Additionally, we need to fix compiler flags which are
locally added or removed.
In Kbuild, it is not allowed to change CFLAGS locally.
Instead, ccflags-y, asflags-y, cppflags-y,
CFLAGS_$(basetarget).o, CFLAGS_REMOVE_$(basetarget).o
are prepared for that purpose.
Signed-off-by: Masahiro Yamada <yamada.m@jp.panasonic.com>
Tested-by: Gerhard Sittig <gsi@denx.de>
2014-02-04 16:24:28 +08:00
|
|
|
|
2014-10-30 10:06:11 +08:00
|
|
|
# If the user is running make -s (silent mode), suppress echoing of
|
|
|
|
# commands
|
|
|
|
|
|
|
|
ifneq ($(filter 4.%,$(MAKE_VERSION)),) # make-4
|
|
|
|
ifneq ($(filter %s ,$(firstword x$(MAKEFLAGS))),)
|
|
|
|
quiet=silent_
|
kbuild: use Linux Kernel build scripts
Now we are ready to switch over to real Kbuild.
This commit disables temporary scripts:
scripts/{Makefile.build.tmp, Makefile.host.tmp}
and enables real Kbuild scripts:
scripts/{Makefile.build,Makefile.host,Makefile.lib}.
This switch is triggered by the line in scripts/Kbuild.include
-build := -f $(if $(KBUILD_SRC),$(srctree)/)scripts/Makefile.build.tmp obj
+build := -f $(if $(KBUILD_SRC),$(srctree)/)scripts/Makefile.build obj
We need to adjust some build scripts for U-Boot.
But smaller amount of modification is preferable.
Additionally, we need to fix compiler flags which are
locally added or removed.
In Kbuild, it is not allowed to change CFLAGS locally.
Instead, ccflags-y, asflags-y, cppflags-y,
CFLAGS_$(basetarget).o, CFLAGS_REMOVE_$(basetarget).o
are prepared for that purpose.
Signed-off-by: Masahiro Yamada <yamada.m@jp.panasonic.com>
Tested-by: Gerhard Sittig <gsi@denx.de>
2014-02-04 16:24:28 +08:00
|
|
|
endif
|
2014-10-30 10:06:11 +08:00
|
|
|
else # make-3.8x
|
|
|
|
ifneq ($(filter s% -s%,$(MAKEFLAGS)),)
|
|
|
|
quiet=silent_
|
kbuild: use Linux Kernel build scripts
Now we are ready to switch over to real Kbuild.
This commit disables temporary scripts:
scripts/{Makefile.build.tmp, Makefile.host.tmp}
and enables real Kbuild scripts:
scripts/{Makefile.build,Makefile.host,Makefile.lib}.
This switch is triggered by the line in scripts/Kbuild.include
-build := -f $(if $(KBUILD_SRC),$(srctree)/)scripts/Makefile.build.tmp obj
+build := -f $(if $(KBUILD_SRC),$(srctree)/)scripts/Makefile.build obj
We need to adjust some build scripts for U-Boot.
But smaller amount of modification is preferable.
Additionally, we need to fix compiler flags which are
locally added or removed.
In Kbuild, it is not allowed to change CFLAGS locally.
Instead, ccflags-y, asflags-y, cppflags-y,
CFLAGS_$(basetarget).o, CFLAGS_REMOVE_$(basetarget).o
are prepared for that purpose.
Signed-off-by: Masahiro Yamada <yamada.m@jp.panasonic.com>
Tested-by: Gerhard Sittig <gsi@denx.de>
2014-02-04 16:24:28 +08:00
|
|
|
endif
|
|
|
|
endif
|
|
|
|
|
2014-10-30 10:06:11 +08:00
|
|
|
export quiet Q KBUILD_VERBOSE
|
kbuild: use Linux Kernel build scripts
Now we are ready to switch over to real Kbuild.
This commit disables temporary scripts:
scripts/{Makefile.build.tmp, Makefile.host.tmp}
and enables real Kbuild scripts:
scripts/{Makefile.build,Makefile.host,Makefile.lib}.
This switch is triggered by the line in scripts/Kbuild.include
-build := -f $(if $(KBUILD_SRC),$(srctree)/)scripts/Makefile.build.tmp obj
+build := -f $(if $(KBUILD_SRC),$(srctree)/)scripts/Makefile.build obj
We need to adjust some build scripts for U-Boot.
But smaller amount of modification is preferable.
Additionally, we need to fix compiler flags which are
locally added or removed.
In Kbuild, it is not allowed to change CFLAGS locally.
Instead, ccflags-y, asflags-y, cppflags-y,
CFLAGS_$(basetarget).o, CFLAGS_REMOVE_$(basetarget).o
are prepared for that purpose.
Signed-off-by: Masahiro Yamada <yamada.m@jp.panasonic.com>
Tested-by: Gerhard Sittig <gsi@denx.de>
2014-02-04 16:24:28 +08:00
|
|
|
|
2014-02-04 16:24:24 +08:00
|
|
|
# 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/"
|
2006-09-07 17:51:23 +08:00
|
|
|
#
|
2014-02-04 16:24:24 +08:00
|
|
|
# 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
|
2006-09-07 17:51:23 +08:00
|
|
|
#
|
2014-02-04 16:24:24 +08:00
|
|
|
# The O= assignment takes precedence over the KBUILD_OUTPUT environment
|
|
|
|
# variable.
|
|
|
|
|
|
|
|
# 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),)
|
2006-09-02 01:49:50 +08:00
|
|
|
|
2014-02-04 16:24:24 +08:00
|
|
|
# OK, Make called in directory where kernel src resides
|
|
|
|
# Do we want to locate output files in a separate directory?
|
2006-09-02 01:49:50 +08:00
|
|
|
ifeq ("$(origin O)", "command line")
|
2014-02-04 16:24:24 +08:00
|
|
|
KBUILD_OUTPUT := $(O)
|
|
|
|
endif
|
|
|
|
|
|
|
|
# That's our default target when none is given on the command line
|
|
|
|
PHONY := _all
|
|
|
|
_all:
|
|
|
|
|
|
|
|
# Cancel implicit rules on top Makefile
|
|
|
|
$(CURDIR)/Makefile Makefile: ;
|
|
|
|
|
|
|
|
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)
|
2014-03-24 12:55:27 +08:00
|
|
|
KBUILD_OUTPUT := $(shell mkdir -p $(KBUILD_OUTPUT) && cd $(KBUILD_OUTPUT) \
|
|
|
|
&& /bin/pwd)
|
2014-02-04 16:24:24 +08:00
|
|
|
$(if $(KBUILD_OUTPUT),, \
|
2014-04-15 12:29:00 +08:00
|
|
|
$(error failed to create output directory "$(saved-output)"))
|
2014-02-04 16:24:24 +08:00
|
|
|
|
2021-06-18 06:07:25 +08:00
|
|
|
# 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. It is OK since we are going to invoke
|
|
|
|
# 'sub-make' below.
|
|
|
|
MAKEFLAGS += --include-dir=$(CURDIR)
|
|
|
|
|
2014-02-04 16:24:24 +08:00
|
|
|
PHONY += $(MAKECMDGOALS) sub-make
|
|
|
|
|
|
|
|
$(filter-out _all sub-make $(CURDIR)/Makefile, $(MAKECMDGOALS)) _all: sub-make
|
|
|
|
@:
|
|
|
|
|
|
|
|
sub-make: FORCE
|
2014-10-30 10:06:11 +08:00
|
|
|
$(Q)$(MAKE) -C $(KBUILD_OUTPUT) KBUILD_SRC=$(CURDIR) \
|
|
|
|
-f $(CURDIR)/Makefile $(filter-out _all sub-make,$(MAKECMDGOALS))
|
2014-02-04 16:24:24 +08:00
|
|
|
|
|
|
|
# Leave processing to above invocation of make
|
|
|
|
skip-makefile := 1
|
|
|
|
endif # ifneq ($(KBUILD_OUTPUT),)
|
|
|
|
endif # ifeq ($(KBUILD_SRC),)
|
|
|
|
|
|
|
|
# We process the rest of the Makefile if this is the final invocation of make
|
|
|
|
ifeq ($(skip-makefile),)
|
|
|
|
|
2014-10-30 10:06:11 +08:00
|
|
|
# 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.
|
|
|
|
#
|
|
|
|
# Use 'make C=1' to enable checking of only re-compiled files.
|
|
|
|
# Use 'make C=2' to enable checking of *all* source files, regardless
|
|
|
|
# of whether they are re-compiled or not.
|
|
|
|
#
|
2019-06-06 02:18:30 +08:00
|
|
|
# See the file "doc/sparse.txt" for more details, including
|
2014-10-30 10:06:11 +08:00
|
|
|
# where to get the "sparse" utility.
|
|
|
|
|
|
|
|
ifeq ("$(origin C)", "command line")
|
|
|
|
KBUILD_CHECKSRC = $(C)
|
|
|
|
endif
|
|
|
|
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
|
|
|
|
|
|
|
|
ifeq ("$(origin M)", "command line")
|
|
|
|
KBUILD_EXTMOD := $(M)
|
|
|
|
endif
|
|
|
|
|
kbuild: use Linux Kernel build scripts
Now we are ready to switch over to real Kbuild.
This commit disables temporary scripts:
scripts/{Makefile.build.tmp, Makefile.host.tmp}
and enables real Kbuild scripts:
scripts/{Makefile.build,Makefile.host,Makefile.lib}.
This switch is triggered by the line in scripts/Kbuild.include
-build := -f $(if $(KBUILD_SRC),$(srctree)/)scripts/Makefile.build.tmp obj
+build := -f $(if $(KBUILD_SRC),$(srctree)/)scripts/Makefile.build obj
We need to adjust some build scripts for U-Boot.
But smaller amount of modification is preferable.
Additionally, we need to fix compiler flags which are
locally added or removed.
In Kbuild, it is not allowed to change CFLAGS locally.
Instead, ccflags-y, asflags-y, cppflags-y,
CFLAGS_$(basetarget).o, CFLAGS_REMOVE_$(basetarget).o
are prepared for that purpose.
Signed-off-by: Masahiro Yamada <yamada.m@jp.panasonic.com>
Tested-by: Gerhard Sittig <gsi@denx.de>
2014-02-04 16:24:28 +08:00
|
|
|
# If building an external module we do not care about the all: rule
|
|
|
|
# but instead _all depend on modules
|
2014-02-04 16:24:24 +08:00
|
|
|
PHONY += all
|
kbuild: use Linux Kernel build scripts
Now we are ready to switch over to real Kbuild.
This commit disables temporary scripts:
scripts/{Makefile.build.tmp, Makefile.host.tmp}
and enables real Kbuild scripts:
scripts/{Makefile.build,Makefile.host,Makefile.lib}.
This switch is triggered by the line in scripts/Kbuild.include
-build := -f $(if $(KBUILD_SRC),$(srctree)/)scripts/Makefile.build.tmp obj
+build := -f $(if $(KBUILD_SRC),$(srctree)/)scripts/Makefile.build obj
We need to adjust some build scripts for U-Boot.
But smaller amount of modification is preferable.
Additionally, we need to fix compiler flags which are
locally added or removed.
In Kbuild, it is not allowed to change CFLAGS locally.
Instead, ccflags-y, asflags-y, cppflags-y,
CFLAGS_$(basetarget).o, CFLAGS_REMOVE_$(basetarget).o
are prepared for that purpose.
Signed-off-by: Masahiro Yamada <yamada.m@jp.panasonic.com>
Tested-by: Gerhard Sittig <gsi@denx.de>
2014-02-04 16:24:28 +08:00
|
|
|
ifeq ($(KBUILD_EXTMOD),)
|
2014-02-04 16:24:24 +08:00
|
|
|
_all: all
|
2008-09-10 05:55:18 +08:00
|
|
|
else
|
kbuild: use Linux Kernel build scripts
Now we are ready to switch over to real Kbuild.
This commit disables temporary scripts:
scripts/{Makefile.build.tmp, Makefile.host.tmp}
and enables real Kbuild scripts:
scripts/{Makefile.build,Makefile.host,Makefile.lib}.
This switch is triggered by the line in scripts/Kbuild.include
-build := -f $(if $(KBUILD_SRC),$(srctree)/)scripts/Makefile.build.tmp obj
+build := -f $(if $(KBUILD_SRC),$(srctree)/)scripts/Makefile.build obj
We need to adjust some build scripts for U-Boot.
But smaller amount of modification is preferable.
Additionally, we need to fix compiler flags which are
locally added or removed.
In Kbuild, it is not allowed to change CFLAGS locally.
Instead, ccflags-y, asflags-y, cppflags-y,
CFLAGS_$(basetarget).o, CFLAGS_REMOVE_$(basetarget).o
are prepared for that purpose.
Signed-off-by: Masahiro Yamada <yamada.m@jp.panasonic.com>
Tested-by: Gerhard Sittig <gsi@denx.de>
2014-02-04 16:24:28 +08:00
|
|
|
_all: modules
|
2008-09-10 05:55:18 +08:00
|
|
|
endif
|
2014-02-04 16:24:24 +08:00
|
|
|
|
2014-10-30 10:06:11 +08:00
|
|
|
ifeq ($(KBUILD_SRC),)
|
|
|
|
# building in the source tree
|
|
|
|
srctree := .
|
|
|
|
else
|
|
|
|
ifeq ($(KBUILD_SRC)/,$(dir $(CURDIR)))
|
|
|
|
# building in a subdirectory of the source tree
|
|
|
|
srctree := ..
|
|
|
|
else
|
|
|
|
srctree := $(KBUILD_SRC)
|
|
|
|
endif
|
|
|
|
endif
|
|
|
|
objtree := .
|
2014-02-04 16:24:24 +08:00
|
|
|
src := $(srctree)
|
|
|
|
obj := $(objtree)
|
|
|
|
|
|
|
|
VPATH := $(srctree)$(if $(KBUILD_EXTMOD),:$(KBUILD_EXTMOD))
|
|
|
|
|
|
|
|
export srctree objtree VPATH
|
|
|
|
|
2008-03-03 05:45:33 +08:00
|
|
|
# Make sure CDPATH settings don't interfere
|
|
|
|
unexport CDPATH
|
|
|
|
|
2002-11-03 07:17:16 +08:00
|
|
|
#########################################################################
|
|
|
|
|
|
|
|
HOSTARCH := $(shell uname -m | \
|
2011-04-13 17:43:28 +08:00
|
|
|
sed -e s/i.86/x86/ \
|
2002-11-03 07:17:16 +08:00
|
|
|
-e s/sun4u/sparc64/ \
|
|
|
|
-e s/arm.*/arm/ \
|
|
|
|
-e s/sa110/arm/ \
|
2010-04-28 15:52:02 +08:00
|
|
|
-e s/ppc64/powerpc/ \
|
|
|
|
-e s/ppc/powerpc/ \
|
2010-06-16 06:59:17 +08:00
|
|
|
-e s/macppc/powerpc/\
|
|
|
|
-e s/sh.*/sh/)
|
2002-11-03 07:17:16 +08:00
|
|
|
|
2005-08-13 05:23:46 +08:00
|
|
|
HOSTOS := $(shell uname -s | tr '[:upper:]' '[:lower:]' | \
|
2002-11-03 07:17:16 +08:00
|
|
|
sed -e 's/\(cygwin\).*/cygwin/')
|
|
|
|
|
2013-04-11 17:35:54 +08:00
|
|
|
export HOSTARCH HOSTOS
|
2002-11-03 07:17:16 +08:00
|
|
|
|
2008-01-13 07:59:21 +08:00
|
|
|
#########################################################################
|
2014-02-04 16:24:30 +08:00
|
|
|
|
2009-06-15 11:33:14 +08:00
|
|
|
# set default to nothing for native builds
|
2007-03-07 01:01:47 +08:00
|
|
|
ifeq ($(HOSTARCH),$(ARCH))
|
2009-06-15 11:33:14 +08:00
|
|
|
CROSS_COMPILE ?=
|
2008-01-13 07:59:21 +08:00
|
|
|
endif
|
|
|
|
|
kconfig: switch to Kconfig
This commit enables Kconfig.
Going forward, we use Kconfig for the board configuration.
mkconfig will never be used. Nor will include/config.mk be generated.
Kconfig must be adjusted for U-Boot because our situation is
a little more complicated than Linux Kernel.
We have to generate multiple boot images (Normal, SPL, TPL)
from one source tree.
Each image needs its own configuration input.
Usage:
Run "make <board>_defconfig" to do the board configuration.
It will create the .config file and additionally spl/.config, tpl/.config
if SPL, TPL is enabled, respectively.
You can use "make config", "make menuconfig" etc. to create
a new .config or modify the existing one.
Use "make spl/config", "make spl/menuconfig" etc. for spl/.config
and do likewise for tpl/.config file.
The generic syntax of configuration targets for SPL, TPL is:
<target_image>/<config_command>
Here, <target_image> is either 'spl' or 'tpl'
<config_command> is 'config', 'menuconfig', 'xconfig', etc.
When the configuration is done, run "make".
(Or "make <board>_defconfig all" will do the configuration and build
in one time.)
For futher information of how Kconfig works in U-Boot,
please read the comment block of scripts/multiconfig.py.
By the way, there is another item worth remarking here:
coexistence of Kconfig and board herder files.
Prior to Kconfig, we used C headers to define a set of configs.
We expect a very long term to migrate from C headers to Kconfig.
Two different infractructure must coexist in the interim.
In our former configuration scheme, include/autoconf.mk was generated
for use in makefiles.
It is still generated under include/, spl/include/, tpl/include/ directory
for the Normal, SPL, TPL image, respectively.
Signed-off-by: Masahiro Yamada <yamada.m@jp.panasonic.com>
Acked-by: Simon Glass <sjg@chromium.org>
2014-07-30 13:08:17 +08:00
|
|
|
KCONFIG_CONFIG ?= .config
|
|
|
|
export KCONFIG_CONFIG
|
|
|
|
|
2014-02-04 16:24:15 +08:00
|
|
|
# SHELL used by kbuild
|
|
|
|
CONFIG_SHELL := $(shell if [ -x "$$BASH" ]; then echo $$BASH; \
|
|
|
|
else if [ -x /bin/bash ]; then echo /bin/bash; \
|
|
|
|
else echo sh; fi ; fi)
|
|
|
|
|
2020-03-27 23:46:27 +08:00
|
|
|
HOST_LFS_CFLAGS := $(shell getconf LFS_CFLAGS 2>/dev/null)
|
|
|
|
HOST_LFS_LDFLAGS := $(shell getconf LFS_LDFLAGS 2>/dev/null)
|
|
|
|
HOST_LFS_LIBS := $(shell getconf LFS_LIBS 2>/dev/null)
|
|
|
|
|
2014-09-11 02:08:51 +08:00
|
|
|
HOSTCC = cc
|
|
|
|
HOSTCXX = c++
|
2020-03-27 23:46:27 +08:00
|
|
|
KBUILD_HOSTCFLAGS := -Wall -Wstrict-prototypes -O2 -fomit-frame-pointer \
|
2020-07-20 03:56:08 +08:00
|
|
|
$(HOST_LFS_CFLAGS) $(HOSTCFLAGS)
|
2020-03-27 23:46:27 +08:00
|
|
|
KBUILD_HOSTCXXFLAGS := -O2 $(HOST_LFS_CFLAGS) $(HOSTCXXFLAGS)
|
|
|
|
KBUILD_HOSTLDFLAGS := $(HOST_LFS_LDFLAGS) $(HOSTLDFLAGS)
|
|
|
|
KBUILD_HOSTLDLIBS := $(HOST_LFS_LIBS) $(HOSTLDLIBS)
|
2014-04-15 12:29:00 +08:00
|
|
|
|
2018-05-14 21:22:06 +08:00
|
|
|
# With the move to GCC 6, we have implicitly upgraded our language
|
|
|
|
# standard to GNU11 (see https://gcc.gnu.org/gcc-5/porting_to.html).
|
|
|
|
# Some Linux distributions (including RHEL7, SLES13, Debian 8) still
|
|
|
|
# have older compilers as their default, so we make it explicit for
|
|
|
|
# these that our host tools are GNU11 (i.e. C11 w/ GNU extensions).
|
2018-06-20 11:53:54 +08:00
|
|
|
CSTD_FLAG := -std=gnu11
|
2020-03-27 23:46:27 +08:00
|
|
|
KBUILD_HOSTCFLAGS += $(CSTD_FLAG)
|
2018-05-14 21:22:06 +08:00
|
|
|
|
2014-02-04 16:24:15 +08:00
|
|
|
ifeq ($(HOSTOS),cygwin)
|
2020-03-27 23:46:27 +08:00
|
|
|
KBUILD_HOSTCFLAGS += -ansi
|
2014-02-04 16:24:15 +08:00
|
|
|
endif
|
|
|
|
|
|
|
|
# Mac OS X / Darwin's C preprocessor is Apple specific. It
|
|
|
|
# generates numerous errors and warnings. We want to bypass it
|
|
|
|
# and use GNU C's cpp. To do this we pass the -traditional-cpp
|
|
|
|
# option to the compiler. Note that the -traditional-cpp flag
|
|
|
|
# DOES NOT have the same semantics as GNU C's flag, all it does
|
|
|
|
# is invoke the GNU preprocessor in stock ANSI/ISO C fashion.
|
2006-09-02 01:49:50 +08:00
|
|
|
#
|
2014-02-04 16:24:15 +08:00
|
|
|
# Apple's linker is similar, thanks to the new 2 stage linking
|
|
|
|
# multiple symbol definitions are treated as errors, hence the
|
|
|
|
# -multiply_defined suppress option to turn off this error.
|
2006-09-07 17:51:23 +08:00
|
|
|
#
|
2014-02-04 16:24:15 +08:00
|
|
|
ifeq ($(HOSTOS),darwin)
|
|
|
|
# get major and minor product version (e.g. '10' and '6' for Snow Leopard)
|
2023-01-22 08:42:10 +08:00
|
|
|
DARWIN_MAJOR_VERSION := $(shell sw_vers -productVersion | cut -f 1 -d '.')
|
|
|
|
DARWIN_MINOR_VERSION := $(shell sw_vers -productVersion | cut -f 2 -d '.')
|
2014-02-04 16:24:15 +08:00
|
|
|
|
|
|
|
os_x_before = $(shell if [ $(DARWIN_MAJOR_VERSION) -le $(1) -a \
|
|
|
|
$(DARWIN_MINOR_VERSION) -le $(2) ] ; then echo "$(3)"; else echo "$(4)"; fi ;)
|
|
|
|
|
2019-03-31 16:07:03 +08:00
|
|
|
os_x_after = $(shell if [ $(DARWIN_MAJOR_VERSION) -ge $(1) -a \
|
2021-09-27 23:42:38 +08:00
|
|
|
$(DARWIN_MINOR_VERSION) -ge $(2) ] ; then echo "$(3)"; else echo "$(4)"; fi ;)
|
2019-03-31 16:07:03 +08:00
|
|
|
|
2014-02-04 16:24:15 +08:00
|
|
|
# Snow Leopards build environment has no longer restrictions as described above
|
|
|
|
HOSTCC = $(call os_x_before, 10, 5, "cc", "gcc")
|
2020-03-27 23:46:27 +08:00
|
|
|
KBUILD_HOSTCFLAGS += $(call os_x_before, 10, 4, "-traditional-cpp")
|
|
|
|
KBUILD_HOSTLDFLAGS += $(call os_x_before, 10, 5, "-multiply_defined suppress")
|
2015-02-09 07:06:10 +08:00
|
|
|
|
2021-09-27 23:42:38 +08:00
|
|
|
# macOS Mojave (10.14.X)
|
2019-03-31 16:07:03 +08:00
|
|
|
# Undefined symbols for architecture x86_64: "_PyArg_ParseTuple"
|
2020-03-27 23:46:27 +08:00
|
|
|
KBUILD_HOSTLDFLAGS += $(call os_x_after, 10, 14, "-lpython -dynamclib", "")
|
2014-02-04 16:24:15 +08:00
|
|
|
endif
|
|
|
|
|
kbuild: use Linux Kernel build scripts
Now we are ready to switch over to real Kbuild.
This commit disables temporary scripts:
scripts/{Makefile.build.tmp, Makefile.host.tmp}
and enables real Kbuild scripts:
scripts/{Makefile.build,Makefile.host,Makefile.lib}.
This switch is triggered by the line in scripts/Kbuild.include
-build := -f $(if $(KBUILD_SRC),$(srctree)/)scripts/Makefile.build.tmp obj
+build := -f $(if $(KBUILD_SRC),$(srctree)/)scripts/Makefile.build obj
We need to adjust some build scripts for U-Boot.
But smaller amount of modification is preferable.
Additionally, we need to fix compiler flags which are
locally added or removed.
In Kbuild, it is not allowed to change CFLAGS locally.
Instead, ccflags-y, asflags-y, cppflags-y,
CFLAGS_$(basetarget).o, CFLAGS_REMOVE_$(basetarget).o
are prepared for that purpose.
Signed-off-by: Masahiro Yamada <yamada.m@jp.panasonic.com>
Tested-by: Gerhard Sittig <gsi@denx.de>
2014-02-04 16:24:28 +08:00
|
|
|
# Decide whether to build built-in, modular, or both.
|
|
|
|
# Normally, just do built-in.
|
|
|
|
|
|
|
|
KBUILD_MODULES :=
|
|
|
|
KBUILD_BUILTIN := 1
|
|
|
|
|
2014-06-16 17:56:38 +08:00
|
|
|
# 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.
|
kbuild: use Linux Kernel build scripts
Now we are ready to switch over to real Kbuild.
This commit disables temporary scripts:
scripts/{Makefile.build.tmp, Makefile.host.tmp}
and enables real Kbuild scripts:
scripts/{Makefile.build,Makefile.host,Makefile.lib}.
This switch is triggered by the line in scripts/Kbuild.include
-build := -f $(if $(KBUILD_SRC),$(srctree)/)scripts/Makefile.build.tmp obj
+build := -f $(if $(KBUILD_SRC),$(srctree)/)scripts/Makefile.build obj
We need to adjust some build scripts for U-Boot.
But smaller amount of modification is preferable.
Additionally, we need to fix compiler flags which are
locally added or removed.
In Kbuild, it is not allowed to change CFLAGS locally.
Instead, ccflags-y, asflags-y, cppflags-y,
CFLAGS_$(basetarget).o, CFLAGS_REMOVE_$(basetarget).o
are prepared for that purpose.
Signed-off-by: Masahiro Yamada <yamada.m@jp.panasonic.com>
Tested-by: Gerhard Sittig <gsi@denx.de>
2014-02-04 16:24:28 +08:00
|
|
|
|
|
|
|
ifeq ($(MAKECMDGOALS),modules)
|
|
|
|
KBUILD_BUILTIN := $(if $(CONFIG_MODVERSIONS),1)
|
|
|
|
endif
|
|
|
|
|
2014-06-16 17:56:38 +08:00
|
|
|
# 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
|
kbuild: use Linux Kernel build scripts
Now we are ready to switch over to real Kbuild.
This commit disables temporary scripts:
scripts/{Makefile.build.tmp, Makefile.host.tmp}
and enables real Kbuild scripts:
scripts/{Makefile.build,Makefile.host,Makefile.lib}.
This switch is triggered by the line in scripts/Kbuild.include
-build := -f $(if $(KBUILD_SRC),$(srctree)/)scripts/Makefile.build.tmp obj
+build := -f $(if $(KBUILD_SRC),$(srctree)/)scripts/Makefile.build obj
We need to adjust some build scripts for U-Boot.
But smaller amount of modification is preferable.
Additionally, we need to fix compiler flags which are
locally added or removed.
In Kbuild, it is not allowed to change CFLAGS locally.
Instead, ccflags-y, asflags-y, cppflags-y,
CFLAGS_$(basetarget).o, CFLAGS_REMOVE_$(basetarget).o
are prepared for that purpose.
Signed-off-by: Masahiro Yamada <yamada.m@jp.panasonic.com>
Tested-by: Gerhard Sittig <gsi@denx.de>
2014-02-04 16:24:28 +08:00
|
|
|
|
|
|
|
# U-Boot does not need modules
|
|
|
|
#ifneq ($(filter all _all modules,$(MAKECMDGOALS)),)
|
|
|
|
# KBUILD_MODULES := 1
|
|
|
|
#endif
|
|
|
|
|
|
|
|
#ifeq ($(MAKECMDGOALS),)
|
|
|
|
# KBUILD_MODULES := 1
|
|
|
|
#endif
|
|
|
|
|
2019-09-25 22:56:28 +08:00
|
|
|
# Check ths size of a binary:
|
|
|
|
# Args:
|
|
|
|
# $1: File to check
|
|
|
|
# #2: Size limit in bytes (decimal or 0xhex)
|
2019-04-03 01:19:04 +08:00
|
|
|
define size_check
|
|
|
|
actual=$$( wc -c $1 | awk '{print $$1}'); \
|
|
|
|
limit=$$( printf "%d" $2 ); \
|
|
|
|
if test $$actual -gt $$limit; then \
|
|
|
|
echo "$1 exceeds file size limit:" >&2; \
|
2019-10-24 03:39:41 +08:00
|
|
|
echo " limit: $$(printf %#x $$limit) bytes" >&2; \
|
2019-09-25 22:56:28 +08:00
|
|
|
echo " actual: $$(printf %#x $$actual) bytes" >&2; \
|
|
|
|
echo " excess: $$(printf %#x $$((actual - limit))) bytes" >&2;\
|
2019-04-03 01:19:04 +08:00
|
|
|
exit 1; \
|
|
|
|
fi
|
|
|
|
endef
|
|
|
|
export size_check
|
|
|
|
|
kbuild: use Linux Kernel build scripts
Now we are ready to switch over to real Kbuild.
This commit disables temporary scripts:
scripts/{Makefile.build.tmp, Makefile.host.tmp}
and enables real Kbuild scripts:
scripts/{Makefile.build,Makefile.host,Makefile.lib}.
This switch is triggered by the line in scripts/Kbuild.include
-build := -f $(if $(KBUILD_SRC),$(srctree)/)scripts/Makefile.build.tmp obj
+build := -f $(if $(KBUILD_SRC),$(srctree)/)scripts/Makefile.build obj
We need to adjust some build scripts for U-Boot.
But smaller amount of modification is preferable.
Additionally, we need to fix compiler flags which are
locally added or removed.
In Kbuild, it is not allowed to change CFLAGS locally.
Instead, ccflags-y, asflags-y, cppflags-y,
CFLAGS_$(basetarget).o, CFLAGS_REMOVE_$(basetarget).o
are prepared for that purpose.
Signed-off-by: Masahiro Yamada <yamada.m@jp.panasonic.com>
Tested-by: Gerhard Sittig <gsi@denx.de>
2014-02-04 16:24:28 +08:00
|
|
|
export KBUILD_MODULES KBUILD_BUILTIN
|
|
|
|
export KBUILD_CHECKSRC KBUILD_SRC KBUILD_EXTMOD
|
|
|
|
|
2014-02-04 16:24:18 +08:00
|
|
|
# We need some generic definitions (do not try to remake the file).
|
2015-07-05 00:56:57 +08:00
|
|
|
scripts/Kbuild.include: ;
|
|
|
|
include scripts/Kbuild.include
|
2006-09-02 01:49:50 +08:00
|
|
|
|
2014-02-04 16:24:15 +08:00
|
|
|
# Make variables (CC, etc...)
|
2002-11-03 07:17:16 +08:00
|
|
|
|
2014-02-04 16:24:15 +08:00
|
|
|
AS = $(CROSS_COMPILE)as
|
|
|
|
# Always use GNU ld
|
|
|
|
ifneq ($(shell $(CROSS_COMPILE)ld.bfd -v 2> /dev/null),)
|
|
|
|
LD = $(CROSS_COMPILE)ld.bfd
|
2006-09-02 01:49:50 +08:00
|
|
|
else
|
2014-02-04 16:24:15 +08:00
|
|
|
LD = $(CROSS_COMPILE)ld
|
|
|
|
endif
|
|
|
|
CC = $(CROSS_COMPILE)gcc
|
|
|
|
CPP = $(CC) -E
|
|
|
|
AR = $(CROSS_COMPILE)ar
|
|
|
|
NM = $(CROSS_COMPILE)nm
|
|
|
|
LDR = $(CROSS_COMPILE)ldr
|
|
|
|
STRIP = $(CROSS_COMPILE)strip
|
|
|
|
OBJCOPY = $(CROSS_COMPILE)objcopy
|
|
|
|
OBJDUMP = $(CROSS_COMPILE)objdump
|
kconfig: re-sync with Linux 4.17-rc4
Align Kconfig to Linux 4.17-rc4 with minimal impact on non-kconfig files.
Previous Kconfig sync was done by commit bf7ab1e70fd762 ("kconfig:
re-sync with Linux 4.10") and it achieved almost perfect alignment with
a few (intended) exceptions, caused by below U-boot commits:
[A] v2015.04 5f9eb2207500 ("kbuild: remove scripts/multiconfig.sh")
[B] v2015.07 20c20826efab ("Kconfig: Enable usage of escape char '\' in string values")
[C] v2016.01 da58dec86616 ("Various Makefiles: Add SPDX-License-Identifier tags")
[D] v2016.03 5b8031ccb4ed ("Add more SPDX-License-Identifier tags")
[E] v2016.03 192bc6948b02 ("Fix GCC format-security errors and convert sprintfs.")
Here is the list of Kconfig commits which followed the v4.10 alignment:
[F] v2018.01 0931ed3c0d0f ("kconfig/symbol.c: use correct pointer type argument for sizeof")
[G] v2018.03 1414e09b4f25 ("kconfig: revert change that was not needed for -Wformat-security")
[H] v2018.05 83d290c56fab ("SPDX: Convert all of our single license tags to Linux Kernel style")
Commit [F] was subsequently applied to Linux kernel as commit [I]
with the same patch id, so it won't contribute to further misalignment.
[I] v4.15-rc1 88127dae6ed9 ("kconfig/symbol.c: use correct pointer type argument for sizeof")
Commit [G] is a Kconfig-specific revert of commit [E].
Commit [H] relocated and reformatted the license doing no functional change.
In summary, the only functional change that makes U-boot Kconfig
diverge from Linux Kconfig is commit [B]. After a brief analysis,
the purpose of [B] seems to be placing "\n" literals in string symbols
like CONFIG_AUTOBOOT_PROMPT="autoboot in %d seconds\n" in order to pass
them directly to printf and expect correct output at runtime. Currently,
Linux doesn't seem to have this requirement, so for the moment [B] looks
like a U-boot specific feature/fix. From point of view of further Kconfig
alignment and backporting efforts, it is highly desired that commits
like [B] are propagated to Linux and any Kconfig fixes/features are
contributed to Linux kernel first. This specific Kconfig re-sync just
keeps [B] in place.
Contrary to 4.10 Kconfig re-sync (which achieves zero non-kconfig
changes), 4.17-rc4 re-sync does some amount of updates in Kbuild
(striving to keep them at minimum), due to a number of reasons:
* Kbuild is affected by the removal of Kconfig "*shipped" files and now
requires flex and bison pre-installed on the host.
* PYTHON{2,3} variables are defined in top-level Makefile as
prerequisite for running the newly developed Kconfig unit tests.
* silentoldconfig becomes an "internal implementation detail" deprecated
for external use, being renamed to syncconfig.
The exact non-kconfig files touched by this commit are:
$ git show --format="" --stat -- ':!scripts/kconfig'
.gitignore | 2 ++
Makefile | 9 +++++++--
scripts/Makefile.build | 11 +++++++++++
scripts/Makefile.lib | 41 ++++++++++++-----------------------------
The imported Linux commits touching the above files are:
c054be10ffdbd5 ("remove gperf left-overs from build system")
73a4f6dbe70a1b ("kbuild: add LEX and YACC variables")
033dba2ec06c47 ("kbuild: prepare to remove C files pre-generated by flex and bison")
eea199b445f64c ("kbuild: remove unnecessary LEX_PREFIX and YACC_PREFIX")
e71de5ee08dcb0 ("kbuild: remove remaining use of undefined YACC_PREFIX")
d59fbbd09d5d6b ("kbuild: replace hardcoded bison in cmd_bison_h with $(YACC)")
911a91c39cabcb H ("kconfig: rename silentoldconfig to syncconfig")
59889300274569 (".gitignore: move *.lex.c *.tab.[ch] patterns to the top-level .gitignore")
9a8dfb394c0467 ("kbuild: clean up *.lex.c and *.tab.[ch] patterns from top-level Makefile")
833e622459432e H ("genksyms: generate lexer and parser during build instead of shipping")
b23d1a241f4eb4 H ("kbuild: add %.lex.c and %.tab.[ch] to 'targets' automatically")
e9781b52d4e0e3 H ("kbuild: add PYTHON2 and PYTHON3 variables")
The commits marked with 'H' are assessed as "hard" (build will fail)
prerequisites and the rest of them are assessed as "soft" prerequisites
for the re-sync. In spite of relatively high number of non-H commits,
they belong to this Kconfig update topic-wise and decrease the number of
cherry pick conflicts for many commits in this series. Additional effort
can be put in eliminating the soft prerequisites, if really needed.
The commits which contributed to this Kconfig re-sync are listed below.
Whenever a conflict resolution has been performed (mostly by hand, but
sometimes automatically by git), it is revealed by the '!' sign in the
second column, which means a patch id mismatch between Linux and U-boot
commits:
9be3213b14d44f ("gconfig: remove misleading parentheses around a condition")
ff85a1a80e0034 ("kconfig: Check for libncurses before menuconfig")
ad8181060788c8 ("kconfig: fix sparse warnings in nconfig")
cb77f0d623ff33 ! ("scripts: Switch to more portable Perl shebang")
bb3290d91695bb ! ("Remove gperf usage from toolchain")
c054be10ffdbd5 ("remove gperf left-overs from build system")
b24413180f5600 ! ("License cleanup: add SPDX GPL-2.0 license identifier to files with no license")
9059a3493efea6 ! ("kconfig: fix relational operators for bool and tristate symbols")
2c37e08464a850 ("kconfig: Warn if choice default is not in choice")
33ca1a24866373 ("kconfig: Document the 'menu' struct")
52aede4ba5efd1 ("kconfig: Document the 'symbol' struct")
c873443430ebd1 ("kconfig: Sync zconf.y with zconf.tab.c_shipped")
9a826842ff2fbd ("kconfig: Rename menu_check_dep() to rewrite_m()")
fa8cedaef814ce ("kconfig: Clarify expression rewriting")
f77850d3fe0c96 ("kconfig: Clean up modules handling and fix crash")
e3b03bf29d6b99 ("kconfig: display recursive dependency resolution hint just once")
73a4f6dbe70a1b ! ("kbuild: add LEX and YACC variables")
033dba2ec06c47 ! ("kbuild: prepare to remove C files pre-generated by flex and bison")
29c833061c1d8c ("kconfig: generate lexer and parser during build instead of shipping")
26e47a3c11a25c ("kconfig: Don't leak symbol names during parsing")
24161a6711c945 ("kconfig: Don't leak 'source' filenames during parsing")
bc28fe1d5ede88 ("kconfig: Don't leak 'option' arguments during parsing")
0724a7c32a54e3 ("kconfig: Don't leak main menus during parsing")
ae7440ef0c8013 ("kconfig: Fix automatic menu creation mem leak")
5b1374b3b3c2fc ("kconfig: Fix expr_free() E_NOT leak")
7cf33f88e29410 ("kconfig: Fix choice symbol expression leak")
05cccce580456d ("kconfig: Document automatic submenu creation code")
0735f7e5def2ab ("kconfig: Document important expression functions")
df60f4b92d3d0b ("kconfig: Remove menu_end_entry()")
b92d804a51796b ("kconfig: drop 'boolean' keyword")
6479f327dea60d ("kconfig: Warn if there is more than one help text")
52e58a3caeba5d ("kconfig: make input_mode static")
5a3dc717b3c785 ("kconfig: make xfgets() really static")
84dd95d4f87a0d ("kconfig: make conf_unsaved a local variable of conf_read()")
765f4cdef6f80d ("kconfig: use default 'yy' prefix for lexer and parser")
eea199b445f64c ("kbuild: remove unnecessary LEX_PREFIX and YACC_PREFIX")
e71de5ee08dcb0 ("kbuild: remove remaining use of undefined YACC_PREFIX")
d59fbbd09d5d6b ! ("kbuild: replace hardcoded bison in cmd_bison_h with $(YACC)")
3e41ba05b6d60c ("kconfig: Document SYMBOL_OPTIONAL logic")
d3465af60f4471 ("kconfig: Clarify choice dependency propagation")
9d1a9e8bc18bea ("kconfig: Document 'if' flattening logic")
b53688014e3325 ("kconfig: Clarify menu and 'if' dependency propagation")
d0fd0428ecf04b ("kconfig: fix make xconfig when gettext is missing")
312ee68752faaa ("kconfig: announce removal of oldnoconfig if used")
1ccb27143360bd ("kconfig: make "Selected by:" and "Implied by:" readable")
cedd55d49dee94 ! ("kconfig: Remove silentoldconfig from help and docs; fix kconfig/conf's help")
1b9eda2e4892cb ("kconfig: Warn if help text is blank")
cb67ab2cd2b8ab ("kconfig: do not write choice values when their dependency becomes n")
4f208f392103e8 ("kconfig: show '?' prompt even if no help text is available")
cd58a91def2acc ("kconfig: remove 'config*' pattern from .gitignnore")
d2a04648a5dbc3 ("kconfig: remove check_stdin()")
f3ff6fb5db68bc ("kconfig: echo stdin to stdout if either is redirected")
9e3e10c725360b ("kconfig: send error messages to stderr")
d717f24d8c6808 ("kconfig: add xrealloc() helper")
523ca58b7db2e3 ("kconfig: remove const qualifier from sym_expand_string_value()")
cd81fc82b93fa4 ("kconfig: add xstrdup() helper")
f4bc1eefc1608e ("kconfig: set SYMBOL_AUTO to the symbol marked with defconfig_list")
bf0bbdcf100322 ("kconfig: Don't leak choice names during parsing")
1a90ce36c6eff6 ("kconfig: Update ncurses package names for menuconfig")
5ae6fcc4bb82bd ("kconfig: fix line number in recursive inclusion error message")
07a422bb213adb ! ("kbuild: restore autoksyms.h touch to the top Makefile")
9a47ceec543bfb ("kconfig: clean-up reverse dependency help implementation")
d9119b5925a03b ("kconfig: Print reverse dependencies in groups")
f467c5640c29ad ("kconfig: only write '# CONFIG_FOO is not set' for visible symbols")
59a80b5e892dde ("kconfig: do not call check_conf() for olddefconfig")
4bb3a5b085cd6f ("kconfig: remove unneeded input_mode test in conf()")
99f0b6578bab44 ("kconfig: remove redundant input_mode test for check_conf() loop")
2aad9b89621386 ("kconfig: hide irrelevant sub-menus for oldconfig")
81d2bc2273052e ("kconfig: invoke oldconfig instead of silentoldconfig from local*config")
911a91c39cabcb ! ("kconfig: rename silentoldconfig to syncconfig")
2a61625835c7c8 ! ("kconfig: remove redundant streamline_config.pl prerequisite")
022a4bf6b59dfd ("kconfig: tests: add framework for Kconfig unit testing")
1903c511905984 ("kconfig: tests: add basic choice tests")
49ac3c0c3aa3b7 ("kconfig: tests: test automatic submenu creation")
b76960c0f6b25d ("kconfig: tests: test if new symbols in choice are asked")
930c429a656fdb ("kconfig: tests: check unneeded "is not set" with unmet dependency")
ee236610653ede ("kconfig: tests: check visibility of tristate choice values in y choice")
beaaddb625400e ("kconfig: tests: test defconfig when two choices interact")
3e4888c2e3d77d ("kconfig: tests: test randconfig for choice in choice")
29c434f367ea7b ("kconfig: tests: test if recursive dependencies are detected")
e2c75e7667c737 ("kconfig: tests: test if recursive inclusion is detected")
f622f827958162 ("kconfig: warn unmet direct dependency of tristate symbols selected by y")
f8f69dc0b4e070 ("kconfig: make unmet dependency warnings readable")
26561514cc9def ("kconfig: do not include both curses.h and ncurses.h for nconfig")
32a94b8b0c3e5a ("kconfig: remove duplicated file name and lineno of recursive inclusion")
379a8eb8eb1a55 ("kconfig: detect recursive inclusion earlier")
18492685e479fd ("kconfig: use yylineno option instead of manual lineno increments")
59889300274569 ! (".gitignore: move *.lex.c *.tab.[ch] patterns to the top-level .gitignore")
9a8dfb394c0467 ! ("kbuild: clean up *.lex.c and *.tab.[ch] patterns from top-level Makefile")
833e622459432e ! ("genksyms: generate lexer and parser during build instead of shipping")
b23d1a241f4eb4 ! ("kbuild: add %.lex.c and %.tab.[ch] to 'targets' automatically")
17baab68d337a0 ("kconfig: extend output of 'listnewconfig'")
e9781b52d4e0e3 ! ("kbuild: add PYTHON2 and PYTHON3 variables")
The current Kconfig update generates below build-time warnings:
YACC scripts/dtc/dtc-parser.tab.h
scripts/dtc/dtc-parser.y: warning: 3 shift/reduce conflicts [-Wconflicts-sr]
YACC scripts/dtc/dtc-parser.tab.c
scripts/dtc/dtc-parser.y: warning: 3 shift/reduce conflicts [-Wconflicts-sr]
This seems to happen because the Kbuild updates apparently didn't make
room for both "*shipped"-based builds and flex/bison-based builds. A
similar problem has been reported for genksyms parser in v4.17-rc1
commit 833e622459432e ("genksyms: generate lexer and parser during build
instead of shipping"). I have figured out empirically that the warnings
are healed after updating the in-tree U-boot DTC to upstream v1.4.6-9,
same as done by Linux v4.17-rc1 commit 9130ba88464032 ("scripts/dtc:
Update to upstream version v1.4.6-9-gaadd0b65c987"). Whether fixing the
DTC-related yacc warnings should be done together with the Kconfig
re-sync, I would like to hear from community.
My testing was limited to:
- make defconfig all
- make ARCH=arm CROSS_COMPILE=aarch64-linux-gnu- r8a7795_ulcb_defconfig all
- comparing .config before and after the re-sync
- running the newly imported Kconfig unit tests as seen below:
$ make testconfig
Tested-by: Petr Vorel <petr.vorel@gmail.com>
============================= test session starts =============================
scripts/kconfig/tests/auto_submenu/__init__.py::test PASSED [ 7%]
scripts/kconfig/tests/choice/__init__.py::test_oldask0 PASSED [ 14%]
scripts/kconfig/tests/choice/__init__.py::test_oldask1 PASSED [ 21%]
scripts/kconfig/tests/choice/__init__.py::test_allyes PASSED [ 28%]
scripts/kconfig/tests/choice/__init__.py::test_allmod PASSED [ 35%]
scripts/kconfig/tests/choice/__init__.py::test_allno PASSED [ 42%]
scripts/kconfig/tests/choice/__init__.py::test_alldef PASSED [ 50%]
scripts/kconfig/tests/choice_value_with_m_dep/__init__.py::test PASSED [ 57%]
scripts/kconfig/tests/err_recursive_inc/__init__.py::test PASSED [ 64%]
scripts/kconfig/tests/inter_choice/__init__.py::test PASSED [ 71%]
scripts/kconfig/tests/new_choice_with_dep/__init__.py::test PASSED [ 78%]
scripts/kconfig/tests/no_write_if_dep_unmet/__init__.py::test PASSED [ 85%]
scripts/kconfig/tests/rand_nested_choice/__init__.py::test PASSED [ 92%]
scripts/kconfig/tests/warn_recursive_dep/__init__.py::test PASSED [100%]
========================== 14 passed in 0.34 seconds ==========================
Signed-off-by: Eugeniu Rosca <erosca@de.adit-jv.com>
Reviewed-by: Masahiro Yamada <yamada.masahiro@socionext.com>
Tested-by: Petr Vorel <petr.vorel@gmail.com>
2018-05-19 20:13:50 +08:00
|
|
|
LEX = flex
|
|
|
|
YACC = bison
|
2014-02-04 16:24:15 +08:00
|
|
|
AWK = awk
|
2014-05-12 10:45:55 +08:00
|
|
|
PERL = perl
|
2017-04-05 23:46:41 +08:00
|
|
|
PYTHON ?= python
|
kconfig: re-sync with Linux 4.17-rc4
Align Kconfig to Linux 4.17-rc4 with minimal impact on non-kconfig files.
Previous Kconfig sync was done by commit bf7ab1e70fd762 ("kconfig:
re-sync with Linux 4.10") and it achieved almost perfect alignment with
a few (intended) exceptions, caused by below U-boot commits:
[A] v2015.04 5f9eb2207500 ("kbuild: remove scripts/multiconfig.sh")
[B] v2015.07 20c20826efab ("Kconfig: Enable usage of escape char '\' in string values")
[C] v2016.01 da58dec86616 ("Various Makefiles: Add SPDX-License-Identifier tags")
[D] v2016.03 5b8031ccb4ed ("Add more SPDX-License-Identifier tags")
[E] v2016.03 192bc6948b02 ("Fix GCC format-security errors and convert sprintfs.")
Here is the list of Kconfig commits which followed the v4.10 alignment:
[F] v2018.01 0931ed3c0d0f ("kconfig/symbol.c: use correct pointer type argument for sizeof")
[G] v2018.03 1414e09b4f25 ("kconfig: revert change that was not needed for -Wformat-security")
[H] v2018.05 83d290c56fab ("SPDX: Convert all of our single license tags to Linux Kernel style")
Commit [F] was subsequently applied to Linux kernel as commit [I]
with the same patch id, so it won't contribute to further misalignment.
[I] v4.15-rc1 88127dae6ed9 ("kconfig/symbol.c: use correct pointer type argument for sizeof")
Commit [G] is a Kconfig-specific revert of commit [E].
Commit [H] relocated and reformatted the license doing no functional change.
In summary, the only functional change that makes U-boot Kconfig
diverge from Linux Kconfig is commit [B]. After a brief analysis,
the purpose of [B] seems to be placing "\n" literals in string symbols
like CONFIG_AUTOBOOT_PROMPT="autoboot in %d seconds\n" in order to pass
them directly to printf and expect correct output at runtime. Currently,
Linux doesn't seem to have this requirement, so for the moment [B] looks
like a U-boot specific feature/fix. From point of view of further Kconfig
alignment and backporting efforts, it is highly desired that commits
like [B] are propagated to Linux and any Kconfig fixes/features are
contributed to Linux kernel first. This specific Kconfig re-sync just
keeps [B] in place.
Contrary to 4.10 Kconfig re-sync (which achieves zero non-kconfig
changes), 4.17-rc4 re-sync does some amount of updates in Kbuild
(striving to keep them at minimum), due to a number of reasons:
* Kbuild is affected by the removal of Kconfig "*shipped" files and now
requires flex and bison pre-installed on the host.
* PYTHON{2,3} variables are defined in top-level Makefile as
prerequisite for running the newly developed Kconfig unit tests.
* silentoldconfig becomes an "internal implementation detail" deprecated
for external use, being renamed to syncconfig.
The exact non-kconfig files touched by this commit are:
$ git show --format="" --stat -- ':!scripts/kconfig'
.gitignore | 2 ++
Makefile | 9 +++++++--
scripts/Makefile.build | 11 +++++++++++
scripts/Makefile.lib | 41 ++++++++++++-----------------------------
The imported Linux commits touching the above files are:
c054be10ffdbd5 ("remove gperf left-overs from build system")
73a4f6dbe70a1b ("kbuild: add LEX and YACC variables")
033dba2ec06c47 ("kbuild: prepare to remove C files pre-generated by flex and bison")
eea199b445f64c ("kbuild: remove unnecessary LEX_PREFIX and YACC_PREFIX")
e71de5ee08dcb0 ("kbuild: remove remaining use of undefined YACC_PREFIX")
d59fbbd09d5d6b ("kbuild: replace hardcoded bison in cmd_bison_h with $(YACC)")
911a91c39cabcb H ("kconfig: rename silentoldconfig to syncconfig")
59889300274569 (".gitignore: move *.lex.c *.tab.[ch] patterns to the top-level .gitignore")
9a8dfb394c0467 ("kbuild: clean up *.lex.c and *.tab.[ch] patterns from top-level Makefile")
833e622459432e H ("genksyms: generate lexer and parser during build instead of shipping")
b23d1a241f4eb4 H ("kbuild: add %.lex.c and %.tab.[ch] to 'targets' automatically")
e9781b52d4e0e3 H ("kbuild: add PYTHON2 and PYTHON3 variables")
The commits marked with 'H' are assessed as "hard" (build will fail)
prerequisites and the rest of them are assessed as "soft" prerequisites
for the re-sync. In spite of relatively high number of non-H commits,
they belong to this Kconfig update topic-wise and decrease the number of
cherry pick conflicts for many commits in this series. Additional effort
can be put in eliminating the soft prerequisites, if really needed.
The commits which contributed to this Kconfig re-sync are listed below.
Whenever a conflict resolution has been performed (mostly by hand, but
sometimes automatically by git), it is revealed by the '!' sign in the
second column, which means a patch id mismatch between Linux and U-boot
commits:
9be3213b14d44f ("gconfig: remove misleading parentheses around a condition")
ff85a1a80e0034 ("kconfig: Check for libncurses before menuconfig")
ad8181060788c8 ("kconfig: fix sparse warnings in nconfig")
cb77f0d623ff33 ! ("scripts: Switch to more portable Perl shebang")
bb3290d91695bb ! ("Remove gperf usage from toolchain")
c054be10ffdbd5 ("remove gperf left-overs from build system")
b24413180f5600 ! ("License cleanup: add SPDX GPL-2.0 license identifier to files with no license")
9059a3493efea6 ! ("kconfig: fix relational operators for bool and tristate symbols")
2c37e08464a850 ("kconfig: Warn if choice default is not in choice")
33ca1a24866373 ("kconfig: Document the 'menu' struct")
52aede4ba5efd1 ("kconfig: Document the 'symbol' struct")
c873443430ebd1 ("kconfig: Sync zconf.y with zconf.tab.c_shipped")
9a826842ff2fbd ("kconfig: Rename menu_check_dep() to rewrite_m()")
fa8cedaef814ce ("kconfig: Clarify expression rewriting")
f77850d3fe0c96 ("kconfig: Clean up modules handling and fix crash")
e3b03bf29d6b99 ("kconfig: display recursive dependency resolution hint just once")
73a4f6dbe70a1b ! ("kbuild: add LEX and YACC variables")
033dba2ec06c47 ! ("kbuild: prepare to remove C files pre-generated by flex and bison")
29c833061c1d8c ("kconfig: generate lexer and parser during build instead of shipping")
26e47a3c11a25c ("kconfig: Don't leak symbol names during parsing")
24161a6711c945 ("kconfig: Don't leak 'source' filenames during parsing")
bc28fe1d5ede88 ("kconfig: Don't leak 'option' arguments during parsing")
0724a7c32a54e3 ("kconfig: Don't leak main menus during parsing")
ae7440ef0c8013 ("kconfig: Fix automatic menu creation mem leak")
5b1374b3b3c2fc ("kconfig: Fix expr_free() E_NOT leak")
7cf33f88e29410 ("kconfig: Fix choice symbol expression leak")
05cccce580456d ("kconfig: Document automatic submenu creation code")
0735f7e5def2ab ("kconfig: Document important expression functions")
df60f4b92d3d0b ("kconfig: Remove menu_end_entry()")
b92d804a51796b ("kconfig: drop 'boolean' keyword")
6479f327dea60d ("kconfig: Warn if there is more than one help text")
52e58a3caeba5d ("kconfig: make input_mode static")
5a3dc717b3c785 ("kconfig: make xfgets() really static")
84dd95d4f87a0d ("kconfig: make conf_unsaved a local variable of conf_read()")
765f4cdef6f80d ("kconfig: use default 'yy' prefix for lexer and parser")
eea199b445f64c ("kbuild: remove unnecessary LEX_PREFIX and YACC_PREFIX")
e71de5ee08dcb0 ("kbuild: remove remaining use of undefined YACC_PREFIX")
d59fbbd09d5d6b ! ("kbuild: replace hardcoded bison in cmd_bison_h with $(YACC)")
3e41ba05b6d60c ("kconfig: Document SYMBOL_OPTIONAL logic")
d3465af60f4471 ("kconfig: Clarify choice dependency propagation")
9d1a9e8bc18bea ("kconfig: Document 'if' flattening logic")
b53688014e3325 ("kconfig: Clarify menu and 'if' dependency propagation")
d0fd0428ecf04b ("kconfig: fix make xconfig when gettext is missing")
312ee68752faaa ("kconfig: announce removal of oldnoconfig if used")
1ccb27143360bd ("kconfig: make "Selected by:" and "Implied by:" readable")
cedd55d49dee94 ! ("kconfig: Remove silentoldconfig from help and docs; fix kconfig/conf's help")
1b9eda2e4892cb ("kconfig: Warn if help text is blank")
cb67ab2cd2b8ab ("kconfig: do not write choice values when their dependency becomes n")
4f208f392103e8 ("kconfig: show '?' prompt even if no help text is available")
cd58a91def2acc ("kconfig: remove 'config*' pattern from .gitignnore")
d2a04648a5dbc3 ("kconfig: remove check_stdin()")
f3ff6fb5db68bc ("kconfig: echo stdin to stdout if either is redirected")
9e3e10c725360b ("kconfig: send error messages to stderr")
d717f24d8c6808 ("kconfig: add xrealloc() helper")
523ca58b7db2e3 ("kconfig: remove const qualifier from sym_expand_string_value()")
cd81fc82b93fa4 ("kconfig: add xstrdup() helper")
f4bc1eefc1608e ("kconfig: set SYMBOL_AUTO to the symbol marked with defconfig_list")
bf0bbdcf100322 ("kconfig: Don't leak choice names during parsing")
1a90ce36c6eff6 ("kconfig: Update ncurses package names for menuconfig")
5ae6fcc4bb82bd ("kconfig: fix line number in recursive inclusion error message")
07a422bb213adb ! ("kbuild: restore autoksyms.h touch to the top Makefile")
9a47ceec543bfb ("kconfig: clean-up reverse dependency help implementation")
d9119b5925a03b ("kconfig: Print reverse dependencies in groups")
f467c5640c29ad ("kconfig: only write '# CONFIG_FOO is not set' for visible symbols")
59a80b5e892dde ("kconfig: do not call check_conf() for olddefconfig")
4bb3a5b085cd6f ("kconfig: remove unneeded input_mode test in conf()")
99f0b6578bab44 ("kconfig: remove redundant input_mode test for check_conf() loop")
2aad9b89621386 ("kconfig: hide irrelevant sub-menus for oldconfig")
81d2bc2273052e ("kconfig: invoke oldconfig instead of silentoldconfig from local*config")
911a91c39cabcb ! ("kconfig: rename silentoldconfig to syncconfig")
2a61625835c7c8 ! ("kconfig: remove redundant streamline_config.pl prerequisite")
022a4bf6b59dfd ("kconfig: tests: add framework for Kconfig unit testing")
1903c511905984 ("kconfig: tests: add basic choice tests")
49ac3c0c3aa3b7 ("kconfig: tests: test automatic submenu creation")
b76960c0f6b25d ("kconfig: tests: test if new symbols in choice are asked")
930c429a656fdb ("kconfig: tests: check unneeded "is not set" with unmet dependency")
ee236610653ede ("kconfig: tests: check visibility of tristate choice values in y choice")
beaaddb625400e ("kconfig: tests: test defconfig when two choices interact")
3e4888c2e3d77d ("kconfig: tests: test randconfig for choice in choice")
29c434f367ea7b ("kconfig: tests: test if recursive dependencies are detected")
e2c75e7667c737 ("kconfig: tests: test if recursive inclusion is detected")
f622f827958162 ("kconfig: warn unmet direct dependency of tristate symbols selected by y")
f8f69dc0b4e070 ("kconfig: make unmet dependency warnings readable")
26561514cc9def ("kconfig: do not include both curses.h and ncurses.h for nconfig")
32a94b8b0c3e5a ("kconfig: remove duplicated file name and lineno of recursive inclusion")
379a8eb8eb1a55 ("kconfig: detect recursive inclusion earlier")
18492685e479fd ("kconfig: use yylineno option instead of manual lineno increments")
59889300274569 ! (".gitignore: move *.lex.c *.tab.[ch] patterns to the top-level .gitignore")
9a8dfb394c0467 ! ("kbuild: clean up *.lex.c and *.tab.[ch] patterns from top-level Makefile")
833e622459432e ! ("genksyms: generate lexer and parser during build instead of shipping")
b23d1a241f4eb4 ! ("kbuild: add %.lex.c and %.tab.[ch] to 'targets' automatically")
17baab68d337a0 ("kconfig: extend output of 'listnewconfig'")
e9781b52d4e0e3 ! ("kbuild: add PYTHON2 and PYTHON3 variables")
The current Kconfig update generates below build-time warnings:
YACC scripts/dtc/dtc-parser.tab.h
scripts/dtc/dtc-parser.y: warning: 3 shift/reduce conflicts [-Wconflicts-sr]
YACC scripts/dtc/dtc-parser.tab.c
scripts/dtc/dtc-parser.y: warning: 3 shift/reduce conflicts [-Wconflicts-sr]
This seems to happen because the Kbuild updates apparently didn't make
room for both "*shipped"-based builds and flex/bison-based builds. A
similar problem has been reported for genksyms parser in v4.17-rc1
commit 833e622459432e ("genksyms: generate lexer and parser during build
instead of shipping"). I have figured out empirically that the warnings
are healed after updating the in-tree U-boot DTC to upstream v1.4.6-9,
same as done by Linux v4.17-rc1 commit 9130ba88464032 ("scripts/dtc:
Update to upstream version v1.4.6-9-gaadd0b65c987"). Whether fixing the
DTC-related yacc warnings should be done together with the Kconfig
re-sync, I would like to hear from community.
My testing was limited to:
- make defconfig all
- make ARCH=arm CROSS_COMPILE=aarch64-linux-gnu- r8a7795_ulcb_defconfig all
- comparing .config before and after the re-sync
- running the newly imported Kconfig unit tests as seen below:
$ make testconfig
Tested-by: Petr Vorel <petr.vorel@gmail.com>
============================= test session starts =============================
scripts/kconfig/tests/auto_submenu/__init__.py::test PASSED [ 7%]
scripts/kconfig/tests/choice/__init__.py::test_oldask0 PASSED [ 14%]
scripts/kconfig/tests/choice/__init__.py::test_oldask1 PASSED [ 21%]
scripts/kconfig/tests/choice/__init__.py::test_allyes PASSED [ 28%]
scripts/kconfig/tests/choice/__init__.py::test_allmod PASSED [ 35%]
scripts/kconfig/tests/choice/__init__.py::test_allno PASSED [ 42%]
scripts/kconfig/tests/choice/__init__.py::test_alldef PASSED [ 50%]
scripts/kconfig/tests/choice_value_with_m_dep/__init__.py::test PASSED [ 57%]
scripts/kconfig/tests/err_recursive_inc/__init__.py::test PASSED [ 64%]
scripts/kconfig/tests/inter_choice/__init__.py::test PASSED [ 71%]
scripts/kconfig/tests/new_choice_with_dep/__init__.py::test PASSED [ 78%]
scripts/kconfig/tests/no_write_if_dep_unmet/__init__.py::test PASSED [ 85%]
scripts/kconfig/tests/rand_nested_choice/__init__.py::test PASSED [ 92%]
scripts/kconfig/tests/warn_recursive_dep/__init__.py::test PASSED [100%]
========================== 14 passed in 0.34 seconds ==========================
Signed-off-by: Eugeniu Rosca <erosca@de.adit-jv.com>
Reviewed-by: Masahiro Yamada <yamada.masahiro@socionext.com>
Tested-by: Petr Vorel <petr.vorel@gmail.com>
2018-05-19 20:13:50 +08:00
|
|
|
PYTHON2 = python2
|
2021-05-02 04:12:21 +08:00
|
|
|
PYTHON3 ?= python3
|
2021-09-23 01:34:44 +08:00
|
|
|
|
|
|
|
# The devicetree compiler and pylibfdt are automatically built unless DTC is
|
|
|
|
# provided. If DTC is provided, it is assumed the pylibfdt is available too.
|
|
|
|
DTC_INTREE := $(objtree)/scripts/dtc/dtc
|
|
|
|
DTC ?= $(DTC_INTREE)
|
|
|
|
DTC_MIN_VERSION := 010406
|
|
|
|
|
2014-02-04 16:24:15 +08:00
|
|
|
CHECK = sparse
|
|
|
|
|
|
|
|
CHECKFLAGS := -D__linux__ -Dlinux -D__STDC__ -Dunix -D__unix__ \
|
2023-05-05 16:39:39 +08:00
|
|
|
-Wbitwise -Wno-return-void -Wno-unknown-attribute \
|
|
|
|
-D__CHECK_ENDIAN__ $(CF)
|
2014-02-04 16:24:15 +08:00
|
|
|
|
2014-08-31 14:16:53 +08:00
|
|
|
KBUILD_CPPFLAGS := -D__KERNEL__ -D__UBOOT__
|
2014-02-04 16:24:19 +08:00
|
|
|
|
|
|
|
KBUILD_CFLAGS := -Wall -Wstrict-prototypes \
|
|
|
|
-Wno-format-security \
|
2018-06-20 11:53:54 +08:00
|
|
|
-fno-builtin -ffreestanding $(CSTD_FLAG)
|
Makefile: Use -fno-strict-aliasing globally
The -fstrict-aliasing option is implicitly enabled at levels -O2,
-O3, -Os by GCC. This option allows the compiler to assume the
strictest aliasing rules applicable to the language being compiled.
For example, the practice of reading from a different union member
than the one most recently written to (called "type-punning") is
common. In this case, "type-punning" only works if the memory is
accessed through the union type, but might not work by taking the
address, casting the resulting pointer and dereferencing the result,
which is an undefined behavior per the "strict aliasing rules".
GCC's -Wstrict-aliasing (included in -Wall) option does not catch
all cases, but does attempt to catch the more common pitfalls. So
there are cases that GCC does not report but the codes are violating
the "strict aliasing rules".
Given lots of codes that may be written to rely on "type-punning",
and Linux kernel disables it by -fno-strict-aliasing globally, since
U-Boot currently does this on nds32/riscv/x86 builds only, extend
this for all architecture builds.
Signed-off-by: Bin Meng <bmeng.cn@gmail.com>
Reviewed-by: Tom Rini <trini@konsulko.com>
Reviewed-by: Simon Glass <sjg@chromium.org>
2018-09-17 13:35:28 +08:00
|
|
|
KBUILD_CFLAGS += -fshort-wchar -fno-strict-aliasing
|
2014-02-04 16:24:19 +08:00
|
|
|
KBUILD_AFLAGS := -D__ASSEMBLY__
|
2020-03-27 23:46:27 +08:00
|
|
|
KBUILD_LDFLAGS :=
|
|
|
|
|
|
|
|
ifeq ($(cc-name),clang)
|
|
|
|
ifneq ($(CROSS_COMPILE),)
|
|
|
|
CLANG_TARGET := --target=$(notdir $(CROSS_COMPILE:%-=%))
|
2023-04-06 07:48:52 +08:00
|
|
|
LDPPFLAGS += $(CLANG_TARGET)
|
2020-03-27 23:46:27 +08:00
|
|
|
GCC_TOOLCHAIN_DIR := $(dir $(shell which $(LD)))
|
|
|
|
CLANG_PREFIX := --prefix=$(GCC_TOOLCHAIN_DIR)
|
|
|
|
GCC_TOOLCHAIN := $(realpath $(GCC_TOOLCHAIN_DIR)/..)
|
|
|
|
endif
|
|
|
|
ifneq ($(GCC_TOOLCHAIN),)
|
|
|
|
CLANG_GCC_TC := --gcc-toolchain=$(GCC_TOOLCHAIN)
|
|
|
|
endif
|
|
|
|
KBUILD_CFLAGS += $(CLANG_TARGET) $(CLANG_GCC_TC) $(CLANG_PREFIX)
|
|
|
|
KBUILD_AFLAGS += $(CLANG_TARGET) $(CLANG_GCC_TC) $(CLANG_PREFIX)
|
|
|
|
KBUILD_CFLAGS += $(call cc-option, -no-integrated-as)
|
|
|
|
KBUILD_AFLAGS += $(call cc-option, -no-integrated-as)
|
|
|
|
endif
|
2014-02-04 16:24:19 +08:00
|
|
|
|
2018-08-07 00:00:22 +08:00
|
|
|
# Don't generate position independent code
|
|
|
|
KBUILD_CFLAGS += $(call cc-option,-fno-PIE)
|
|
|
|
KBUILD_AFLAGS += $(call cc-option,-fno-PIE)
|
|
|
|
|
2014-02-24 10:12:09 +08:00
|
|
|
# Read UBOOTRELEASE from include/config/uboot.release (if it exists)
|
|
|
|
UBOOTRELEASE = $(shell cat include/config/uboot.release 2> /dev/null)
|
|
|
|
UBOOTVERSION = $(VERSION)$(if $(PATCHLEVEL),.$(PATCHLEVEL)$(if $(SUBLEVEL),.$(SUBLEVEL)))$(EXTRAVERSION)
|
2014-02-04 16:24:30 +08:00
|
|
|
|
2014-02-24 10:12:09 +08:00
|
|
|
export VERSION PATCHLEVEL SUBLEVEL UBOOTRELEASE UBOOTVERSION
|
2014-03-05 15:59:40 +08:00
|
|
|
export ARCH CPU BOARD VENDOR SOC CPUDIR BOARDDIR
|
2020-03-27 23:46:27 +08:00
|
|
|
export CONFIG_SHELL HOSTCC KBUILD_HOSTCFLAGS CROSS_COMPILE AS LD CC
|
|
|
|
export CPP AR NM LDR STRIP OBJCOPY OBJDUMP KBUILD_HOSTLDFLAGS KBUILD_HOSTLDLIBS
|
kconfig: re-sync with Linux 4.17-rc4
Align Kconfig to Linux 4.17-rc4 with minimal impact on non-kconfig files.
Previous Kconfig sync was done by commit bf7ab1e70fd762 ("kconfig:
re-sync with Linux 4.10") and it achieved almost perfect alignment with
a few (intended) exceptions, caused by below U-boot commits:
[A] v2015.04 5f9eb2207500 ("kbuild: remove scripts/multiconfig.sh")
[B] v2015.07 20c20826efab ("Kconfig: Enable usage of escape char '\' in string values")
[C] v2016.01 da58dec86616 ("Various Makefiles: Add SPDX-License-Identifier tags")
[D] v2016.03 5b8031ccb4ed ("Add more SPDX-License-Identifier tags")
[E] v2016.03 192bc6948b02 ("Fix GCC format-security errors and convert sprintfs.")
Here is the list of Kconfig commits which followed the v4.10 alignment:
[F] v2018.01 0931ed3c0d0f ("kconfig/symbol.c: use correct pointer type argument for sizeof")
[G] v2018.03 1414e09b4f25 ("kconfig: revert change that was not needed for -Wformat-security")
[H] v2018.05 83d290c56fab ("SPDX: Convert all of our single license tags to Linux Kernel style")
Commit [F] was subsequently applied to Linux kernel as commit [I]
with the same patch id, so it won't contribute to further misalignment.
[I] v4.15-rc1 88127dae6ed9 ("kconfig/symbol.c: use correct pointer type argument for sizeof")
Commit [G] is a Kconfig-specific revert of commit [E].
Commit [H] relocated and reformatted the license doing no functional change.
In summary, the only functional change that makes U-boot Kconfig
diverge from Linux Kconfig is commit [B]. After a brief analysis,
the purpose of [B] seems to be placing "\n" literals in string symbols
like CONFIG_AUTOBOOT_PROMPT="autoboot in %d seconds\n" in order to pass
them directly to printf and expect correct output at runtime. Currently,
Linux doesn't seem to have this requirement, so for the moment [B] looks
like a U-boot specific feature/fix. From point of view of further Kconfig
alignment and backporting efforts, it is highly desired that commits
like [B] are propagated to Linux and any Kconfig fixes/features are
contributed to Linux kernel first. This specific Kconfig re-sync just
keeps [B] in place.
Contrary to 4.10 Kconfig re-sync (which achieves zero non-kconfig
changes), 4.17-rc4 re-sync does some amount of updates in Kbuild
(striving to keep them at minimum), due to a number of reasons:
* Kbuild is affected by the removal of Kconfig "*shipped" files and now
requires flex and bison pre-installed on the host.
* PYTHON{2,3} variables are defined in top-level Makefile as
prerequisite for running the newly developed Kconfig unit tests.
* silentoldconfig becomes an "internal implementation detail" deprecated
for external use, being renamed to syncconfig.
The exact non-kconfig files touched by this commit are:
$ git show --format="" --stat -- ':!scripts/kconfig'
.gitignore | 2 ++
Makefile | 9 +++++++--
scripts/Makefile.build | 11 +++++++++++
scripts/Makefile.lib | 41 ++++++++++++-----------------------------
The imported Linux commits touching the above files are:
c054be10ffdbd5 ("remove gperf left-overs from build system")
73a4f6dbe70a1b ("kbuild: add LEX and YACC variables")
033dba2ec06c47 ("kbuild: prepare to remove C files pre-generated by flex and bison")
eea199b445f64c ("kbuild: remove unnecessary LEX_PREFIX and YACC_PREFIX")
e71de5ee08dcb0 ("kbuild: remove remaining use of undefined YACC_PREFIX")
d59fbbd09d5d6b ("kbuild: replace hardcoded bison in cmd_bison_h with $(YACC)")
911a91c39cabcb H ("kconfig: rename silentoldconfig to syncconfig")
59889300274569 (".gitignore: move *.lex.c *.tab.[ch] patterns to the top-level .gitignore")
9a8dfb394c0467 ("kbuild: clean up *.lex.c and *.tab.[ch] patterns from top-level Makefile")
833e622459432e H ("genksyms: generate lexer and parser during build instead of shipping")
b23d1a241f4eb4 H ("kbuild: add %.lex.c and %.tab.[ch] to 'targets' automatically")
e9781b52d4e0e3 H ("kbuild: add PYTHON2 and PYTHON3 variables")
The commits marked with 'H' are assessed as "hard" (build will fail)
prerequisites and the rest of them are assessed as "soft" prerequisites
for the re-sync. In spite of relatively high number of non-H commits,
they belong to this Kconfig update topic-wise and decrease the number of
cherry pick conflicts for many commits in this series. Additional effort
can be put in eliminating the soft prerequisites, if really needed.
The commits which contributed to this Kconfig re-sync are listed below.
Whenever a conflict resolution has been performed (mostly by hand, but
sometimes automatically by git), it is revealed by the '!' sign in the
second column, which means a patch id mismatch between Linux and U-boot
commits:
9be3213b14d44f ("gconfig: remove misleading parentheses around a condition")
ff85a1a80e0034 ("kconfig: Check for libncurses before menuconfig")
ad8181060788c8 ("kconfig: fix sparse warnings in nconfig")
cb77f0d623ff33 ! ("scripts: Switch to more portable Perl shebang")
bb3290d91695bb ! ("Remove gperf usage from toolchain")
c054be10ffdbd5 ("remove gperf left-overs from build system")
b24413180f5600 ! ("License cleanup: add SPDX GPL-2.0 license identifier to files with no license")
9059a3493efea6 ! ("kconfig: fix relational operators for bool and tristate symbols")
2c37e08464a850 ("kconfig: Warn if choice default is not in choice")
33ca1a24866373 ("kconfig: Document the 'menu' struct")
52aede4ba5efd1 ("kconfig: Document the 'symbol' struct")
c873443430ebd1 ("kconfig: Sync zconf.y with zconf.tab.c_shipped")
9a826842ff2fbd ("kconfig: Rename menu_check_dep() to rewrite_m()")
fa8cedaef814ce ("kconfig: Clarify expression rewriting")
f77850d3fe0c96 ("kconfig: Clean up modules handling and fix crash")
e3b03bf29d6b99 ("kconfig: display recursive dependency resolution hint just once")
73a4f6dbe70a1b ! ("kbuild: add LEX and YACC variables")
033dba2ec06c47 ! ("kbuild: prepare to remove C files pre-generated by flex and bison")
29c833061c1d8c ("kconfig: generate lexer and parser during build instead of shipping")
26e47a3c11a25c ("kconfig: Don't leak symbol names during parsing")
24161a6711c945 ("kconfig: Don't leak 'source' filenames during parsing")
bc28fe1d5ede88 ("kconfig: Don't leak 'option' arguments during parsing")
0724a7c32a54e3 ("kconfig: Don't leak main menus during parsing")
ae7440ef0c8013 ("kconfig: Fix automatic menu creation mem leak")
5b1374b3b3c2fc ("kconfig: Fix expr_free() E_NOT leak")
7cf33f88e29410 ("kconfig: Fix choice symbol expression leak")
05cccce580456d ("kconfig: Document automatic submenu creation code")
0735f7e5def2ab ("kconfig: Document important expression functions")
df60f4b92d3d0b ("kconfig: Remove menu_end_entry()")
b92d804a51796b ("kconfig: drop 'boolean' keyword")
6479f327dea60d ("kconfig: Warn if there is more than one help text")
52e58a3caeba5d ("kconfig: make input_mode static")
5a3dc717b3c785 ("kconfig: make xfgets() really static")
84dd95d4f87a0d ("kconfig: make conf_unsaved a local variable of conf_read()")
765f4cdef6f80d ("kconfig: use default 'yy' prefix for lexer and parser")
eea199b445f64c ("kbuild: remove unnecessary LEX_PREFIX and YACC_PREFIX")
e71de5ee08dcb0 ("kbuild: remove remaining use of undefined YACC_PREFIX")
d59fbbd09d5d6b ! ("kbuild: replace hardcoded bison in cmd_bison_h with $(YACC)")
3e41ba05b6d60c ("kconfig: Document SYMBOL_OPTIONAL logic")
d3465af60f4471 ("kconfig: Clarify choice dependency propagation")
9d1a9e8bc18bea ("kconfig: Document 'if' flattening logic")
b53688014e3325 ("kconfig: Clarify menu and 'if' dependency propagation")
d0fd0428ecf04b ("kconfig: fix make xconfig when gettext is missing")
312ee68752faaa ("kconfig: announce removal of oldnoconfig if used")
1ccb27143360bd ("kconfig: make "Selected by:" and "Implied by:" readable")
cedd55d49dee94 ! ("kconfig: Remove silentoldconfig from help and docs; fix kconfig/conf's help")
1b9eda2e4892cb ("kconfig: Warn if help text is blank")
cb67ab2cd2b8ab ("kconfig: do not write choice values when their dependency becomes n")
4f208f392103e8 ("kconfig: show '?' prompt even if no help text is available")
cd58a91def2acc ("kconfig: remove 'config*' pattern from .gitignnore")
d2a04648a5dbc3 ("kconfig: remove check_stdin()")
f3ff6fb5db68bc ("kconfig: echo stdin to stdout if either is redirected")
9e3e10c725360b ("kconfig: send error messages to stderr")
d717f24d8c6808 ("kconfig: add xrealloc() helper")
523ca58b7db2e3 ("kconfig: remove const qualifier from sym_expand_string_value()")
cd81fc82b93fa4 ("kconfig: add xstrdup() helper")
f4bc1eefc1608e ("kconfig: set SYMBOL_AUTO to the symbol marked with defconfig_list")
bf0bbdcf100322 ("kconfig: Don't leak choice names during parsing")
1a90ce36c6eff6 ("kconfig: Update ncurses package names for menuconfig")
5ae6fcc4bb82bd ("kconfig: fix line number in recursive inclusion error message")
07a422bb213adb ! ("kbuild: restore autoksyms.h touch to the top Makefile")
9a47ceec543bfb ("kconfig: clean-up reverse dependency help implementation")
d9119b5925a03b ("kconfig: Print reverse dependencies in groups")
f467c5640c29ad ("kconfig: only write '# CONFIG_FOO is not set' for visible symbols")
59a80b5e892dde ("kconfig: do not call check_conf() for olddefconfig")
4bb3a5b085cd6f ("kconfig: remove unneeded input_mode test in conf()")
99f0b6578bab44 ("kconfig: remove redundant input_mode test for check_conf() loop")
2aad9b89621386 ("kconfig: hide irrelevant sub-menus for oldconfig")
81d2bc2273052e ("kconfig: invoke oldconfig instead of silentoldconfig from local*config")
911a91c39cabcb ! ("kconfig: rename silentoldconfig to syncconfig")
2a61625835c7c8 ! ("kconfig: remove redundant streamline_config.pl prerequisite")
022a4bf6b59dfd ("kconfig: tests: add framework for Kconfig unit testing")
1903c511905984 ("kconfig: tests: add basic choice tests")
49ac3c0c3aa3b7 ("kconfig: tests: test automatic submenu creation")
b76960c0f6b25d ("kconfig: tests: test if new symbols in choice are asked")
930c429a656fdb ("kconfig: tests: check unneeded "is not set" with unmet dependency")
ee236610653ede ("kconfig: tests: check visibility of tristate choice values in y choice")
beaaddb625400e ("kconfig: tests: test defconfig when two choices interact")
3e4888c2e3d77d ("kconfig: tests: test randconfig for choice in choice")
29c434f367ea7b ("kconfig: tests: test if recursive dependencies are detected")
e2c75e7667c737 ("kconfig: tests: test if recursive inclusion is detected")
f622f827958162 ("kconfig: warn unmet direct dependency of tristate symbols selected by y")
f8f69dc0b4e070 ("kconfig: make unmet dependency warnings readable")
26561514cc9def ("kconfig: do not include both curses.h and ncurses.h for nconfig")
32a94b8b0c3e5a ("kconfig: remove duplicated file name and lineno of recursive inclusion")
379a8eb8eb1a55 ("kconfig: detect recursive inclusion earlier")
18492685e479fd ("kconfig: use yylineno option instead of manual lineno increments")
59889300274569 ! (".gitignore: move *.lex.c *.tab.[ch] patterns to the top-level .gitignore")
9a8dfb394c0467 ! ("kbuild: clean up *.lex.c and *.tab.[ch] patterns from top-level Makefile")
833e622459432e ! ("genksyms: generate lexer and parser during build instead of shipping")
b23d1a241f4eb4 ! ("kbuild: add %.lex.c and %.tab.[ch] to 'targets' automatically")
17baab68d337a0 ("kconfig: extend output of 'listnewconfig'")
e9781b52d4e0e3 ! ("kbuild: add PYTHON2 and PYTHON3 variables")
The current Kconfig update generates below build-time warnings:
YACC scripts/dtc/dtc-parser.tab.h
scripts/dtc/dtc-parser.y: warning: 3 shift/reduce conflicts [-Wconflicts-sr]
YACC scripts/dtc/dtc-parser.tab.c
scripts/dtc/dtc-parser.y: warning: 3 shift/reduce conflicts [-Wconflicts-sr]
This seems to happen because the Kbuild updates apparently didn't make
room for both "*shipped"-based builds and flex/bison-based builds. A
similar problem has been reported for genksyms parser in v4.17-rc1
commit 833e622459432e ("genksyms: generate lexer and parser during build
instead of shipping"). I have figured out empirically that the warnings
are healed after updating the in-tree U-boot DTC to upstream v1.4.6-9,
same as done by Linux v4.17-rc1 commit 9130ba88464032 ("scripts/dtc:
Update to upstream version v1.4.6-9-gaadd0b65c987"). Whether fixing the
DTC-related yacc warnings should be done together with the Kconfig
re-sync, I would like to hear from community.
My testing was limited to:
- make defconfig all
- make ARCH=arm CROSS_COMPILE=aarch64-linux-gnu- r8a7795_ulcb_defconfig all
- comparing .config before and after the re-sync
- running the newly imported Kconfig unit tests as seen below:
$ make testconfig
Tested-by: Petr Vorel <petr.vorel@gmail.com>
============================= test session starts =============================
scripts/kconfig/tests/auto_submenu/__init__.py::test PASSED [ 7%]
scripts/kconfig/tests/choice/__init__.py::test_oldask0 PASSED [ 14%]
scripts/kconfig/tests/choice/__init__.py::test_oldask1 PASSED [ 21%]
scripts/kconfig/tests/choice/__init__.py::test_allyes PASSED [ 28%]
scripts/kconfig/tests/choice/__init__.py::test_allmod PASSED [ 35%]
scripts/kconfig/tests/choice/__init__.py::test_allno PASSED [ 42%]
scripts/kconfig/tests/choice/__init__.py::test_alldef PASSED [ 50%]
scripts/kconfig/tests/choice_value_with_m_dep/__init__.py::test PASSED [ 57%]
scripts/kconfig/tests/err_recursive_inc/__init__.py::test PASSED [ 64%]
scripts/kconfig/tests/inter_choice/__init__.py::test PASSED [ 71%]
scripts/kconfig/tests/new_choice_with_dep/__init__.py::test PASSED [ 78%]
scripts/kconfig/tests/no_write_if_dep_unmet/__init__.py::test PASSED [ 85%]
scripts/kconfig/tests/rand_nested_choice/__init__.py::test PASSED [ 92%]
scripts/kconfig/tests/warn_recursive_dep/__init__.py::test PASSED [100%]
========================== 14 passed in 0.34 seconds ==========================
Signed-off-by: Eugeniu Rosca <erosca@de.adit-jv.com>
Reviewed-by: Masahiro Yamada <yamada.masahiro@socionext.com>
Tested-by: Petr Vorel <petr.vorel@gmail.com>
2018-05-19 20:13:50 +08:00
|
|
|
export MAKE LEX YACC AWK PERL PYTHON PYTHON2 PYTHON3
|
2020-03-27 23:46:27 +08:00
|
|
|
export HOSTCXX KBUILD_HOSTCXXFLAGS CHECK CHECKFLAGS DTC DTC_FLAGS
|
2014-02-04 16:24:15 +08:00
|
|
|
|
2020-03-27 23:46:27 +08:00
|
|
|
export KBUILD_CPPFLAGS NOSTDINC_FLAGS UBOOTINCLUDE OBJCOPYFLAGS KBUILD_LDFLAGS
|
2014-02-04 16:24:19 +08:00
|
|
|
export KBUILD_CFLAGS KBUILD_AFLAGS
|
|
|
|
|
2020-03-12 06:11:17 +08:00
|
|
|
export CC_VERSION_TEXT := $(shell $(CC) --version | head -n 1)
|
|
|
|
|
kbuild: use Linux Kernel build scripts
Now we are ready to switch over to real Kbuild.
This commit disables temporary scripts:
scripts/{Makefile.build.tmp, Makefile.host.tmp}
and enables real Kbuild scripts:
scripts/{Makefile.build,Makefile.host,Makefile.lib}.
This switch is triggered by the line in scripts/Kbuild.include
-build := -f $(if $(KBUILD_SRC),$(srctree)/)scripts/Makefile.build.tmp obj
+build := -f $(if $(KBUILD_SRC),$(srctree)/)scripts/Makefile.build obj
We need to adjust some build scripts for U-Boot.
But smaller amount of modification is preferable.
Additionally, we need to fix compiler flags which are
locally added or removed.
In Kbuild, it is not allowed to change CFLAGS locally.
Instead, ccflags-y, asflags-y, cppflags-y,
CFLAGS_$(basetarget).o, CFLAGS_REMOVE_$(basetarget).o
are prepared for that purpose.
Signed-off-by: Masahiro Yamada <yamada.m@jp.panasonic.com>
Tested-by: Gerhard Sittig <gsi@denx.de>
2014-02-04 16:24:28 +08:00
|
|
|
# When compiling out-of-tree modules, put MODVERDIR in the module
|
|
|
|
# tree rather than in the kernel tree. The kernel tree might
|
|
|
|
# even be read-only.
|
|
|
|
export MODVERDIR := $(if $(KBUILD_EXTMOD),$(firstword $(KBUILD_EXTMOD))/).tmp_versions
|
|
|
|
|
|
|
|
# Files to ignore in find ... statements
|
|
|
|
|
2014-04-15 12:29:00 +08:00
|
|
|
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
|
kbuild: use Linux Kernel build scripts
Now we are ready to switch over to real Kbuild.
This commit disables temporary scripts:
scripts/{Makefile.build.tmp, Makefile.host.tmp}
and enables real Kbuild scripts:
scripts/{Makefile.build,Makefile.host,Makefile.lib}.
This switch is triggered by the line in scripts/Kbuild.include
-build := -f $(if $(KBUILD_SRC),$(srctree)/)scripts/Makefile.build.tmp obj
+build := -f $(if $(KBUILD_SRC),$(srctree)/)scripts/Makefile.build obj
We need to adjust some build scripts for U-Boot.
But smaller amount of modification is preferable.
Additionally, we need to fix compiler flags which are
locally added or removed.
In Kbuild, it is not allowed to change CFLAGS locally.
Instead, ccflags-y, asflags-y, cppflags-y,
CFLAGS_$(basetarget).o, CFLAGS_REMOVE_$(basetarget).o
are prepared for that purpose.
Signed-off-by: Masahiro Yamada <yamada.m@jp.panasonic.com>
Tested-by: Gerhard Sittig <gsi@denx.de>
2014-02-04 16:24:28 +08:00
|
|
|
export RCS_TAR_IGNORE := --exclude SCCS --exclude BitKeeper --exclude .svn \
|
|
|
|
--exclude CVS --exclude .pc --exclude .hg --exclude .git
|
|
|
|
|
2023-09-01 01:20:52 +08:00
|
|
|
export PYTHON_ENABLE
|
|
|
|
|
|
|
|
# This is y if U-Boot should not build any Python tools or libraries. Typically
|
|
|
|
# you would need to set this if those tools/libraries (typically binman and
|
|
|
|
# pylibfdt) cannot be built by your environment and are provided separately.
|
|
|
|
ifeq ($(NO_PYTHON),)
|
|
|
|
PYTHON_ENABLE=y
|
|
|
|
endif
|
|
|
|
|
kbuild: use Linux Kernel build scripts
Now we are ready to switch over to real Kbuild.
This commit disables temporary scripts:
scripts/{Makefile.build.tmp, Makefile.host.tmp}
and enables real Kbuild scripts:
scripts/{Makefile.build,Makefile.host,Makefile.lib}.
This switch is triggered by the line in scripts/Kbuild.include
-build := -f $(if $(KBUILD_SRC),$(srctree)/)scripts/Makefile.build.tmp obj
+build := -f $(if $(KBUILD_SRC),$(srctree)/)scripts/Makefile.build obj
We need to adjust some build scripts for U-Boot.
But smaller amount of modification is preferable.
Additionally, we need to fix compiler flags which are
locally added or removed.
In Kbuild, it is not allowed to change CFLAGS locally.
Instead, ccflags-y, asflags-y, cppflags-y,
CFLAGS_$(basetarget).o, CFLAGS_REMOVE_$(basetarget).o
are prepared for that purpose.
Signed-off-by: Masahiro Yamada <yamada.m@jp.panasonic.com>
Tested-by: Gerhard Sittig <gsi@denx.de>
2014-02-04 16:24:28 +08:00
|
|
|
# ===========================================================================
|
|
|
|
# Rules shared between *config targets and build targets
|
|
|
|
|
|
|
|
# Basic helpers built in scripts/
|
|
|
|
PHONY += scripts_basic
|
|
|
|
scripts_basic:
|
|
|
|
$(Q)$(MAKE) $(build)=scripts/basic
|
|
|
|
$(Q)rm -f .tmp_quiet_recordmcount
|
|
|
|
|
|
|
|
# To avoid any implicit rule to kick in, define an empty command.
|
|
|
|
scripts/basic/%: scripts_basic ;
|
|
|
|
|
2014-02-04 16:24:42 +08:00
|
|
|
PHONY += outputmakefile
|
|
|
|
# outputmakefile generates a Makefile in the output directory, if using a
|
|
|
|
# separate output directory. This allows convenient use of make in the
|
|
|
|
# output directory.
|
|
|
|
outputmakefile:
|
|
|
|
ifneq ($(KBUILD_SRC),)
|
|
|
|
$(Q)ln -fsn $(srctree) source
|
2021-06-18 06:07:25 +08:00
|
|
|
$(Q)$(CONFIG_SHELL) $(srctree)/scripts/mkmakefile $(srctree)
|
2006-09-07 17:51:23 +08:00
|
|
|
endif
|
2006-09-02 01:49:50 +08:00
|
|
|
|
2014-02-04 16:24:35 +08:00
|
|
|
# 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).
|
|
|
|
|
2014-02-24 10:12:09 +08:00
|
|
|
version_h := include/generated/version_autogenerated.h
|
|
|
|
timestamp_h := include/generated/timestamp_autogenerated.h
|
2018-03-20 18:38:45 +08:00
|
|
|
defaultenv_h := include/generated/defaultenv_autogenerated.h
|
2020-02-18 22:03:13 +08:00
|
|
|
dt_h := include/generated/dt.h
|
2021-10-22 11:08:46 +08:00
|
|
|
env_h := include/generated/environment.h
|
2014-02-24 10:12:09 +08:00
|
|
|
|
2014-02-04 16:24:35 +08:00
|
|
|
no-dot-config-targets := clean clobber mrproper distclean \
|
2014-02-21 14:45:11 +08:00
|
|
|
help %docs check% coccicheck \
|
2022-08-07 07:51:59 +08:00
|
|
|
ubootversion backup tests check pcheck qcheck tcheck \
|
2023-02-24 09:18:06 +08:00
|
|
|
pylint pylint_err _pip pip pip_test pip_release
|
2014-02-04 16:24:35 +08:00
|
|
|
|
|
|
|
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
|
2008-03-03 05:45:33 +08:00
|
|
|
|
2014-02-04 16:24:35 +08:00
|
|
|
ifeq ($(KBUILD_EXTMOD),)
|
|
|
|
ifneq ($(filter config %config,$(MAKECMDGOALS)),)
|
|
|
|
config-targets := 1
|
2015-07-05 00:56:55 +08:00
|
|
|
ifneq ($(words $(MAKECMDGOALS)),1)
|
2014-02-04 16:24:35 +08:00
|
|
|
mixed-targets := 1
|
|
|
|
endif
|
|
|
|
endif
|
2014-02-04 16:24:19 +08:00
|
|
|
endif
|
2002-11-03 07:17:16 +08:00
|
|
|
|
2014-02-04 16:24:35 +08:00
|
|
|
ifeq ($(mixed-targets),1)
|
|
|
|
# ===========================================================================
|
|
|
|
# We're called with mixed targets (*config and build targets).
|
|
|
|
# Handle them one by one.
|
2014-02-04 16:24:19 +08:00
|
|
|
|
2014-08-05 14:56:44 +08:00
|
|
|
PHONY += $(MAKECMDGOALS) __build_one_by_one
|
2009-05-30 13:02:03 +08:00
|
|
|
|
2014-08-05 14:56:44 +08:00
|
|
|
$(filter-out __build_one_by_one, $(MAKECMDGOALS)): __build_one_by_one
|
2014-02-04 16:24:41 +08:00
|
|
|
@:
|
|
|
|
|
2014-08-05 14:56:44 +08:00
|
|
|
__build_one_by_one:
|
2014-02-04 16:24:41 +08:00
|
|
|
$(Q)set -e; \
|
|
|
|
for i in $(MAKECMDGOALS); do \
|
|
|
|
$(MAKE) -f $(srctree)/Makefile $$i; \
|
|
|
|
done
|
2009-05-30 13:02:03 +08:00
|
|
|
|
2014-02-04 16:24:35 +08:00
|
|
|
else
|
|
|
|
ifeq ($(config-targets),1)
|
|
|
|
# ===========================================================================
|
|
|
|
# *config targets only - make sure prerequisites are updated, and descend
|
|
|
|
# in scripts/kconfig to make the *config target
|
2002-11-03 07:17:16 +08:00
|
|
|
|
kconfig: switch to Kconfig
This commit enables Kconfig.
Going forward, we use Kconfig for the board configuration.
mkconfig will never be used. Nor will include/config.mk be generated.
Kconfig must be adjusted for U-Boot because our situation is
a little more complicated than Linux Kernel.
We have to generate multiple boot images (Normal, SPL, TPL)
from one source tree.
Each image needs its own configuration input.
Usage:
Run "make <board>_defconfig" to do the board configuration.
It will create the .config file and additionally spl/.config, tpl/.config
if SPL, TPL is enabled, respectively.
You can use "make config", "make menuconfig" etc. to create
a new .config or modify the existing one.
Use "make spl/config", "make spl/menuconfig" etc. for spl/.config
and do likewise for tpl/.config file.
The generic syntax of configuration targets for SPL, TPL is:
<target_image>/<config_command>
Here, <target_image> is either 'spl' or 'tpl'
<config_command> is 'config', 'menuconfig', 'xconfig', etc.
When the configuration is done, run "make".
(Or "make <board>_defconfig all" will do the configuration and build
in one time.)
For futher information of how Kconfig works in U-Boot,
please read the comment block of scripts/multiconfig.py.
By the way, there is another item worth remarking here:
coexistence of Kconfig and board herder files.
Prior to Kconfig, we used C headers to define a set of configs.
We expect a very long term to migrate from C headers to Kconfig.
Two different infractructure must coexist in the interim.
In our former configuration scheme, include/autoconf.mk was generated
for use in makefiles.
It is still generated under include/, spl/include/, tpl/include/ directory
for the Normal, SPL, TPL image, respectively.
Signed-off-by: Masahiro Yamada <yamada.m@jp.panasonic.com>
Acked-by: Simon Glass <sjg@chromium.org>
2014-07-30 13:08:17 +08:00
|
|
|
KBUILD_DEFCONFIG := sandbox_defconfig
|
|
|
|
export KBUILD_DEFCONFIG KBUILD_KCONFIG
|
2009-07-22 10:59:36 +08:00
|
|
|
|
kconfig: switch to Kconfig
This commit enables Kconfig.
Going forward, we use Kconfig for the board configuration.
mkconfig will never be used. Nor will include/config.mk be generated.
Kconfig must be adjusted for U-Boot because our situation is
a little more complicated than Linux Kernel.
We have to generate multiple boot images (Normal, SPL, TPL)
from one source tree.
Each image needs its own configuration input.
Usage:
Run "make <board>_defconfig" to do the board configuration.
It will create the .config file and additionally spl/.config, tpl/.config
if SPL, TPL is enabled, respectively.
You can use "make config", "make menuconfig" etc. to create
a new .config or modify the existing one.
Use "make spl/config", "make spl/menuconfig" etc. for spl/.config
and do likewise for tpl/.config file.
The generic syntax of configuration targets for SPL, TPL is:
<target_image>/<config_command>
Here, <target_image> is either 'spl' or 'tpl'
<config_command> is 'config', 'menuconfig', 'xconfig', etc.
When the configuration is done, run "make".
(Or "make <board>_defconfig all" will do the configuration and build
in one time.)
For futher information of how Kconfig works in U-Boot,
please read the comment block of scripts/multiconfig.py.
By the way, there is another item worth remarking here:
coexistence of Kconfig and board herder files.
Prior to Kconfig, we used C headers to define a set of configs.
We expect a very long term to migrate from C headers to Kconfig.
Two different infractructure must coexist in the interim.
In our former configuration scheme, include/autoconf.mk was generated
for use in makefiles.
It is still generated under include/, spl/include/, tpl/include/ directory
for the Normal, SPL, TPL image, respectively.
Signed-off-by: Masahiro Yamada <yamada.m@jp.panasonic.com>
Acked-by: Simon Glass <sjg@chromium.org>
2014-07-30 13:08:17 +08:00
|
|
|
config: scripts_basic outputmakefile FORCE
|
2015-03-13 17:08:55 +08:00
|
|
|
$(Q)$(MAKE) $(build)=scripts/kconfig $@
|
kconfig: switch to Kconfig
This commit enables Kconfig.
Going forward, we use Kconfig for the board configuration.
mkconfig will never be used. Nor will include/config.mk be generated.
Kconfig must be adjusted for U-Boot because our situation is
a little more complicated than Linux Kernel.
We have to generate multiple boot images (Normal, SPL, TPL)
from one source tree.
Each image needs its own configuration input.
Usage:
Run "make <board>_defconfig" to do the board configuration.
It will create the .config file and additionally spl/.config, tpl/.config
if SPL, TPL is enabled, respectively.
You can use "make config", "make menuconfig" etc. to create
a new .config or modify the existing one.
Use "make spl/config", "make spl/menuconfig" etc. for spl/.config
and do likewise for tpl/.config file.
The generic syntax of configuration targets for SPL, TPL is:
<target_image>/<config_command>
Here, <target_image> is either 'spl' or 'tpl'
<config_command> is 'config', 'menuconfig', 'xconfig', etc.
When the configuration is done, run "make".
(Or "make <board>_defconfig all" will do the configuration and build
in one time.)
For futher information of how Kconfig works in U-Boot,
please read the comment block of scripts/multiconfig.py.
By the way, there is another item worth remarking here:
coexistence of Kconfig and board herder files.
Prior to Kconfig, we used C headers to define a set of configs.
We expect a very long term to migrate from C headers to Kconfig.
Two different infractructure must coexist in the interim.
In our former configuration scheme, include/autoconf.mk was generated
for use in makefiles.
It is still generated under include/, spl/include/, tpl/include/ directory
for the Normal, SPL, TPL image, respectively.
Signed-off-by: Masahiro Yamada <yamada.m@jp.panasonic.com>
Acked-by: Simon Glass <sjg@chromium.org>
2014-07-30 13:08:17 +08:00
|
|
|
|
|
|
|
%config: scripts_basic outputmakefile FORCE
|
2015-03-13 17:08:55 +08:00
|
|
|
$(Q)$(MAKE) $(build)=scripts/kconfig $@
|
2014-02-04 16:24:19 +08:00
|
|
|
|
2014-02-04 16:24:35 +08:00
|
|
|
else
|
|
|
|
# ===========================================================================
|
|
|
|
# Build targets only - this includes vmlinux, arch specific targets, clean
|
|
|
|
# targets and others. In general all targets except *config targets.
|
2011-10-25 19:29:28 +08:00
|
|
|
|
2017-01-30 10:12:07 +08:00
|
|
|
# Additional helpers built in scripts/
|
|
|
|
# Carefully list dependencies so we do not try to build scripts twice
|
|
|
|
# in parallel
|
|
|
|
PHONY += scripts
|
2021-06-18 06:07:25 +08:00
|
|
|
scripts: scripts_basic scripts_dtc include/config/auto.conf
|
2017-01-30 10:12:07 +08:00
|
|
|
$(Q)$(MAKE) $(build)=$(@)
|
|
|
|
|
2014-02-04 16:24:35 +08:00
|
|
|
ifeq ($(dot-config),1)
|
|
|
|
# Read in config
|
kconfig: switch to Kconfig
This commit enables Kconfig.
Going forward, we use Kconfig for the board configuration.
mkconfig will never be used. Nor will include/config.mk be generated.
Kconfig must be adjusted for U-Boot because our situation is
a little more complicated than Linux Kernel.
We have to generate multiple boot images (Normal, SPL, TPL)
from one source tree.
Each image needs its own configuration input.
Usage:
Run "make <board>_defconfig" to do the board configuration.
It will create the .config file and additionally spl/.config, tpl/.config
if SPL, TPL is enabled, respectively.
You can use "make config", "make menuconfig" etc. to create
a new .config or modify the existing one.
Use "make spl/config", "make spl/menuconfig" etc. for spl/.config
and do likewise for tpl/.config file.
The generic syntax of configuration targets for SPL, TPL is:
<target_image>/<config_command>
Here, <target_image> is either 'spl' or 'tpl'
<config_command> is 'config', 'menuconfig', 'xconfig', etc.
When the configuration is done, run "make".
(Or "make <board>_defconfig all" will do the configuration and build
in one time.)
For futher information of how Kconfig works in U-Boot,
please read the comment block of scripts/multiconfig.py.
By the way, there is another item worth remarking here:
coexistence of Kconfig and board herder files.
Prior to Kconfig, we used C headers to define a set of configs.
We expect a very long term to migrate from C headers to Kconfig.
Two different infractructure must coexist in the interim.
In our former configuration scheme, include/autoconf.mk was generated
for use in makefiles.
It is still generated under include/, spl/include/, tpl/include/ directory
for the Normal, SPL, TPL image, respectively.
Signed-off-by: Masahiro Yamada <yamada.m@jp.panasonic.com>
Acked-by: Simon Glass <sjg@chromium.org>
2014-07-30 13:08:17 +08:00
|
|
|
-include include/config/auto.conf
|
|
|
|
|
|
|
|
# Read in dependencies to all Kconfig* files, make sure to run
|
|
|
|
# oldconfig if changes are detected.
|
|
|
|
-include include/config/auto.conf.cmd
|
|
|
|
|
|
|
|
# To avoid any implicit rule to kick in, define an empty command
|
|
|
|
$(KCONFIG_CONFIG) include/config/auto.conf.cmd: ;
|
|
|
|
|
|
|
|
# If .config is newer than include/config/auto.conf, someone tinkered
|
|
|
|
# with it and forgot to run make oldconfig.
|
|
|
|
# if auto.conf.cmd is missing then we are probably in a cleaned tree so
|
|
|
|
# we execute the config step to be sure to catch updated Kconfig files
|
|
|
|
include/config/%.conf: $(KCONFIG_CONFIG) include/config/auto.conf.cmd
|
kconfig: re-sync with Linux 4.17-rc4
Align Kconfig to Linux 4.17-rc4 with minimal impact on non-kconfig files.
Previous Kconfig sync was done by commit bf7ab1e70fd762 ("kconfig:
re-sync with Linux 4.10") and it achieved almost perfect alignment with
a few (intended) exceptions, caused by below U-boot commits:
[A] v2015.04 5f9eb2207500 ("kbuild: remove scripts/multiconfig.sh")
[B] v2015.07 20c20826efab ("Kconfig: Enable usage of escape char '\' in string values")
[C] v2016.01 da58dec86616 ("Various Makefiles: Add SPDX-License-Identifier tags")
[D] v2016.03 5b8031ccb4ed ("Add more SPDX-License-Identifier tags")
[E] v2016.03 192bc6948b02 ("Fix GCC format-security errors and convert sprintfs.")
Here is the list of Kconfig commits which followed the v4.10 alignment:
[F] v2018.01 0931ed3c0d0f ("kconfig/symbol.c: use correct pointer type argument for sizeof")
[G] v2018.03 1414e09b4f25 ("kconfig: revert change that was not needed for -Wformat-security")
[H] v2018.05 83d290c56fab ("SPDX: Convert all of our single license tags to Linux Kernel style")
Commit [F] was subsequently applied to Linux kernel as commit [I]
with the same patch id, so it won't contribute to further misalignment.
[I] v4.15-rc1 88127dae6ed9 ("kconfig/symbol.c: use correct pointer type argument for sizeof")
Commit [G] is a Kconfig-specific revert of commit [E].
Commit [H] relocated and reformatted the license doing no functional change.
In summary, the only functional change that makes U-boot Kconfig
diverge from Linux Kconfig is commit [B]. After a brief analysis,
the purpose of [B] seems to be placing "\n" literals in string symbols
like CONFIG_AUTOBOOT_PROMPT="autoboot in %d seconds\n" in order to pass
them directly to printf and expect correct output at runtime. Currently,
Linux doesn't seem to have this requirement, so for the moment [B] looks
like a U-boot specific feature/fix. From point of view of further Kconfig
alignment and backporting efforts, it is highly desired that commits
like [B] are propagated to Linux and any Kconfig fixes/features are
contributed to Linux kernel first. This specific Kconfig re-sync just
keeps [B] in place.
Contrary to 4.10 Kconfig re-sync (which achieves zero non-kconfig
changes), 4.17-rc4 re-sync does some amount of updates in Kbuild
(striving to keep them at minimum), due to a number of reasons:
* Kbuild is affected by the removal of Kconfig "*shipped" files and now
requires flex and bison pre-installed on the host.
* PYTHON{2,3} variables are defined in top-level Makefile as
prerequisite for running the newly developed Kconfig unit tests.
* silentoldconfig becomes an "internal implementation detail" deprecated
for external use, being renamed to syncconfig.
The exact non-kconfig files touched by this commit are:
$ git show --format="" --stat -- ':!scripts/kconfig'
.gitignore | 2 ++
Makefile | 9 +++++++--
scripts/Makefile.build | 11 +++++++++++
scripts/Makefile.lib | 41 ++++++++++++-----------------------------
The imported Linux commits touching the above files are:
c054be10ffdbd5 ("remove gperf left-overs from build system")
73a4f6dbe70a1b ("kbuild: add LEX and YACC variables")
033dba2ec06c47 ("kbuild: prepare to remove C files pre-generated by flex and bison")
eea199b445f64c ("kbuild: remove unnecessary LEX_PREFIX and YACC_PREFIX")
e71de5ee08dcb0 ("kbuild: remove remaining use of undefined YACC_PREFIX")
d59fbbd09d5d6b ("kbuild: replace hardcoded bison in cmd_bison_h with $(YACC)")
911a91c39cabcb H ("kconfig: rename silentoldconfig to syncconfig")
59889300274569 (".gitignore: move *.lex.c *.tab.[ch] patterns to the top-level .gitignore")
9a8dfb394c0467 ("kbuild: clean up *.lex.c and *.tab.[ch] patterns from top-level Makefile")
833e622459432e H ("genksyms: generate lexer and parser during build instead of shipping")
b23d1a241f4eb4 H ("kbuild: add %.lex.c and %.tab.[ch] to 'targets' automatically")
e9781b52d4e0e3 H ("kbuild: add PYTHON2 and PYTHON3 variables")
The commits marked with 'H' are assessed as "hard" (build will fail)
prerequisites and the rest of them are assessed as "soft" prerequisites
for the re-sync. In spite of relatively high number of non-H commits,
they belong to this Kconfig update topic-wise and decrease the number of
cherry pick conflicts for many commits in this series. Additional effort
can be put in eliminating the soft prerequisites, if really needed.
The commits which contributed to this Kconfig re-sync are listed below.
Whenever a conflict resolution has been performed (mostly by hand, but
sometimes automatically by git), it is revealed by the '!' sign in the
second column, which means a patch id mismatch between Linux and U-boot
commits:
9be3213b14d44f ("gconfig: remove misleading parentheses around a condition")
ff85a1a80e0034 ("kconfig: Check for libncurses before menuconfig")
ad8181060788c8 ("kconfig: fix sparse warnings in nconfig")
cb77f0d623ff33 ! ("scripts: Switch to more portable Perl shebang")
bb3290d91695bb ! ("Remove gperf usage from toolchain")
c054be10ffdbd5 ("remove gperf left-overs from build system")
b24413180f5600 ! ("License cleanup: add SPDX GPL-2.0 license identifier to files with no license")
9059a3493efea6 ! ("kconfig: fix relational operators for bool and tristate symbols")
2c37e08464a850 ("kconfig: Warn if choice default is not in choice")
33ca1a24866373 ("kconfig: Document the 'menu' struct")
52aede4ba5efd1 ("kconfig: Document the 'symbol' struct")
c873443430ebd1 ("kconfig: Sync zconf.y with zconf.tab.c_shipped")
9a826842ff2fbd ("kconfig: Rename menu_check_dep() to rewrite_m()")
fa8cedaef814ce ("kconfig: Clarify expression rewriting")
f77850d3fe0c96 ("kconfig: Clean up modules handling and fix crash")
e3b03bf29d6b99 ("kconfig: display recursive dependency resolution hint just once")
73a4f6dbe70a1b ! ("kbuild: add LEX and YACC variables")
033dba2ec06c47 ! ("kbuild: prepare to remove C files pre-generated by flex and bison")
29c833061c1d8c ("kconfig: generate lexer and parser during build instead of shipping")
26e47a3c11a25c ("kconfig: Don't leak symbol names during parsing")
24161a6711c945 ("kconfig: Don't leak 'source' filenames during parsing")
bc28fe1d5ede88 ("kconfig: Don't leak 'option' arguments during parsing")
0724a7c32a54e3 ("kconfig: Don't leak main menus during parsing")
ae7440ef0c8013 ("kconfig: Fix automatic menu creation mem leak")
5b1374b3b3c2fc ("kconfig: Fix expr_free() E_NOT leak")
7cf33f88e29410 ("kconfig: Fix choice symbol expression leak")
05cccce580456d ("kconfig: Document automatic submenu creation code")
0735f7e5def2ab ("kconfig: Document important expression functions")
df60f4b92d3d0b ("kconfig: Remove menu_end_entry()")
b92d804a51796b ("kconfig: drop 'boolean' keyword")
6479f327dea60d ("kconfig: Warn if there is more than one help text")
52e58a3caeba5d ("kconfig: make input_mode static")
5a3dc717b3c785 ("kconfig: make xfgets() really static")
84dd95d4f87a0d ("kconfig: make conf_unsaved a local variable of conf_read()")
765f4cdef6f80d ("kconfig: use default 'yy' prefix for lexer and parser")
eea199b445f64c ("kbuild: remove unnecessary LEX_PREFIX and YACC_PREFIX")
e71de5ee08dcb0 ("kbuild: remove remaining use of undefined YACC_PREFIX")
d59fbbd09d5d6b ! ("kbuild: replace hardcoded bison in cmd_bison_h with $(YACC)")
3e41ba05b6d60c ("kconfig: Document SYMBOL_OPTIONAL logic")
d3465af60f4471 ("kconfig: Clarify choice dependency propagation")
9d1a9e8bc18bea ("kconfig: Document 'if' flattening logic")
b53688014e3325 ("kconfig: Clarify menu and 'if' dependency propagation")
d0fd0428ecf04b ("kconfig: fix make xconfig when gettext is missing")
312ee68752faaa ("kconfig: announce removal of oldnoconfig if used")
1ccb27143360bd ("kconfig: make "Selected by:" and "Implied by:" readable")
cedd55d49dee94 ! ("kconfig: Remove silentoldconfig from help and docs; fix kconfig/conf's help")
1b9eda2e4892cb ("kconfig: Warn if help text is blank")
cb67ab2cd2b8ab ("kconfig: do not write choice values when their dependency becomes n")
4f208f392103e8 ("kconfig: show '?' prompt even if no help text is available")
cd58a91def2acc ("kconfig: remove 'config*' pattern from .gitignnore")
d2a04648a5dbc3 ("kconfig: remove check_stdin()")
f3ff6fb5db68bc ("kconfig: echo stdin to stdout if either is redirected")
9e3e10c725360b ("kconfig: send error messages to stderr")
d717f24d8c6808 ("kconfig: add xrealloc() helper")
523ca58b7db2e3 ("kconfig: remove const qualifier from sym_expand_string_value()")
cd81fc82b93fa4 ("kconfig: add xstrdup() helper")
f4bc1eefc1608e ("kconfig: set SYMBOL_AUTO to the symbol marked with defconfig_list")
bf0bbdcf100322 ("kconfig: Don't leak choice names during parsing")
1a90ce36c6eff6 ("kconfig: Update ncurses package names for menuconfig")
5ae6fcc4bb82bd ("kconfig: fix line number in recursive inclusion error message")
07a422bb213adb ! ("kbuild: restore autoksyms.h touch to the top Makefile")
9a47ceec543bfb ("kconfig: clean-up reverse dependency help implementation")
d9119b5925a03b ("kconfig: Print reverse dependencies in groups")
f467c5640c29ad ("kconfig: only write '# CONFIG_FOO is not set' for visible symbols")
59a80b5e892dde ("kconfig: do not call check_conf() for olddefconfig")
4bb3a5b085cd6f ("kconfig: remove unneeded input_mode test in conf()")
99f0b6578bab44 ("kconfig: remove redundant input_mode test for check_conf() loop")
2aad9b89621386 ("kconfig: hide irrelevant sub-menus for oldconfig")
81d2bc2273052e ("kconfig: invoke oldconfig instead of silentoldconfig from local*config")
911a91c39cabcb ! ("kconfig: rename silentoldconfig to syncconfig")
2a61625835c7c8 ! ("kconfig: remove redundant streamline_config.pl prerequisite")
022a4bf6b59dfd ("kconfig: tests: add framework for Kconfig unit testing")
1903c511905984 ("kconfig: tests: add basic choice tests")
49ac3c0c3aa3b7 ("kconfig: tests: test automatic submenu creation")
b76960c0f6b25d ("kconfig: tests: test if new symbols in choice are asked")
930c429a656fdb ("kconfig: tests: check unneeded "is not set" with unmet dependency")
ee236610653ede ("kconfig: tests: check visibility of tristate choice values in y choice")
beaaddb625400e ("kconfig: tests: test defconfig when two choices interact")
3e4888c2e3d77d ("kconfig: tests: test randconfig for choice in choice")
29c434f367ea7b ("kconfig: tests: test if recursive dependencies are detected")
e2c75e7667c737 ("kconfig: tests: test if recursive inclusion is detected")
f622f827958162 ("kconfig: warn unmet direct dependency of tristate symbols selected by y")
f8f69dc0b4e070 ("kconfig: make unmet dependency warnings readable")
26561514cc9def ("kconfig: do not include both curses.h and ncurses.h for nconfig")
32a94b8b0c3e5a ("kconfig: remove duplicated file name and lineno of recursive inclusion")
379a8eb8eb1a55 ("kconfig: detect recursive inclusion earlier")
18492685e479fd ("kconfig: use yylineno option instead of manual lineno increments")
59889300274569 ! (".gitignore: move *.lex.c *.tab.[ch] patterns to the top-level .gitignore")
9a8dfb394c0467 ! ("kbuild: clean up *.lex.c and *.tab.[ch] patterns from top-level Makefile")
833e622459432e ! ("genksyms: generate lexer and parser during build instead of shipping")
b23d1a241f4eb4 ! ("kbuild: add %.lex.c and %.tab.[ch] to 'targets' automatically")
17baab68d337a0 ("kconfig: extend output of 'listnewconfig'")
e9781b52d4e0e3 ! ("kbuild: add PYTHON2 and PYTHON3 variables")
The current Kconfig update generates below build-time warnings:
YACC scripts/dtc/dtc-parser.tab.h
scripts/dtc/dtc-parser.y: warning: 3 shift/reduce conflicts [-Wconflicts-sr]
YACC scripts/dtc/dtc-parser.tab.c
scripts/dtc/dtc-parser.y: warning: 3 shift/reduce conflicts [-Wconflicts-sr]
This seems to happen because the Kbuild updates apparently didn't make
room for both "*shipped"-based builds and flex/bison-based builds. A
similar problem has been reported for genksyms parser in v4.17-rc1
commit 833e622459432e ("genksyms: generate lexer and parser during build
instead of shipping"). I have figured out empirically that the warnings
are healed after updating the in-tree U-boot DTC to upstream v1.4.6-9,
same as done by Linux v4.17-rc1 commit 9130ba88464032 ("scripts/dtc:
Update to upstream version v1.4.6-9-gaadd0b65c987"). Whether fixing the
DTC-related yacc warnings should be done together with the Kconfig
re-sync, I would like to hear from community.
My testing was limited to:
- make defconfig all
- make ARCH=arm CROSS_COMPILE=aarch64-linux-gnu- r8a7795_ulcb_defconfig all
- comparing .config before and after the re-sync
- running the newly imported Kconfig unit tests as seen below:
$ make testconfig
Tested-by: Petr Vorel <petr.vorel@gmail.com>
============================= test session starts =============================
scripts/kconfig/tests/auto_submenu/__init__.py::test PASSED [ 7%]
scripts/kconfig/tests/choice/__init__.py::test_oldask0 PASSED [ 14%]
scripts/kconfig/tests/choice/__init__.py::test_oldask1 PASSED [ 21%]
scripts/kconfig/tests/choice/__init__.py::test_allyes PASSED [ 28%]
scripts/kconfig/tests/choice/__init__.py::test_allmod PASSED [ 35%]
scripts/kconfig/tests/choice/__init__.py::test_allno PASSED [ 42%]
scripts/kconfig/tests/choice/__init__.py::test_alldef PASSED [ 50%]
scripts/kconfig/tests/choice_value_with_m_dep/__init__.py::test PASSED [ 57%]
scripts/kconfig/tests/err_recursive_inc/__init__.py::test PASSED [ 64%]
scripts/kconfig/tests/inter_choice/__init__.py::test PASSED [ 71%]
scripts/kconfig/tests/new_choice_with_dep/__init__.py::test PASSED [ 78%]
scripts/kconfig/tests/no_write_if_dep_unmet/__init__.py::test PASSED [ 85%]
scripts/kconfig/tests/rand_nested_choice/__init__.py::test PASSED [ 92%]
scripts/kconfig/tests/warn_recursive_dep/__init__.py::test PASSED [100%]
========================== 14 passed in 0.34 seconds ==========================
Signed-off-by: Eugeniu Rosca <erosca@de.adit-jv.com>
Reviewed-by: Masahiro Yamada <yamada.masahiro@socionext.com>
Tested-by: Petr Vorel <petr.vorel@gmail.com>
2018-05-19 20:13:50 +08:00
|
|
|
$(Q)$(MAKE) -f $(srctree)/Makefile syncconfig
|
2015-03-13 17:08:55 +08:00
|
|
|
@# If the following part fails, include/config/auto.conf should be
|
|
|
|
@# deleted so "make silentoldconfig" will be re-run on the next build.
|
|
|
|
$(Q)$(MAKE) -f $(srctree)/scripts/Makefile.autoconf || \
|
|
|
|
{ rm -f include/config/auto.conf; false; }
|
|
|
|
@# include/config.h has been updated after "make silentoldconfig".
|
|
|
|
@# We need to touch include/config/auto.conf so it gets newer
|
|
|
|
@# than include/config.h.
|
|
|
|
@# Otherwise, 'make silentoldconfig' would be invoked twice.
|
|
|
|
$(Q)touch include/config/auto.conf
|
kconfig: switch to Kconfig
This commit enables Kconfig.
Going forward, we use Kconfig for the board configuration.
mkconfig will never be used. Nor will include/config.mk be generated.
Kconfig must be adjusted for U-Boot because our situation is
a little more complicated than Linux Kernel.
We have to generate multiple boot images (Normal, SPL, TPL)
from one source tree.
Each image needs its own configuration input.
Usage:
Run "make <board>_defconfig" to do the board configuration.
It will create the .config file and additionally spl/.config, tpl/.config
if SPL, TPL is enabled, respectively.
You can use "make config", "make menuconfig" etc. to create
a new .config or modify the existing one.
Use "make spl/config", "make spl/menuconfig" etc. for spl/.config
and do likewise for tpl/.config file.
The generic syntax of configuration targets for SPL, TPL is:
<target_image>/<config_command>
Here, <target_image> is either 'spl' or 'tpl'
<config_command> is 'config', 'menuconfig', 'xconfig', etc.
When the configuration is done, run "make".
(Or "make <board>_defconfig all" will do the configuration and build
in one time.)
For futher information of how Kconfig works in U-Boot,
please read the comment block of scripts/multiconfig.py.
By the way, there is another item worth remarking here:
coexistence of Kconfig and board herder files.
Prior to Kconfig, we used C headers to define a set of configs.
We expect a very long term to migrate from C headers to Kconfig.
Two different infractructure must coexist in the interim.
In our former configuration scheme, include/autoconf.mk was generated
for use in makefiles.
It is still generated under include/, spl/include/, tpl/include/ directory
for the Normal, SPL, TPL image, respectively.
Signed-off-by: Masahiro Yamada <yamada.m@jp.panasonic.com>
Acked-by: Simon Glass <sjg@chromium.org>
2014-07-30 13:08:17 +08:00
|
|
|
|
2019-01-10 22:11:39 +08:00
|
|
|
u-boot.cfg spl/u-boot.cfg tpl/u-boot.cfg:
|
2017-07-05 23:30:40 +08:00
|
|
|
$(Q)$(MAKE) -f $(srctree)/scripts/Makefile.autoconf $(@)
|
|
|
|
|
2014-02-04 16:24:35 +08:00
|
|
|
-include include/autoconf.mk
|
|
|
|
-include include/autoconf.mk.dep
|
2002-11-03 07:17:16 +08:00
|
|
|
|
kconfig: switch to Kconfig
This commit enables Kconfig.
Going forward, we use Kconfig for the board configuration.
mkconfig will never be used. Nor will include/config.mk be generated.
Kconfig must be adjusted for U-Boot because our situation is
a little more complicated than Linux Kernel.
We have to generate multiple boot images (Normal, SPL, TPL)
from one source tree.
Each image needs its own configuration input.
Usage:
Run "make <board>_defconfig" to do the board configuration.
It will create the .config file and additionally spl/.config, tpl/.config
if SPL, TPL is enabled, respectively.
You can use "make config", "make menuconfig" etc. to create
a new .config or modify the existing one.
Use "make spl/config", "make spl/menuconfig" etc. for spl/.config
and do likewise for tpl/.config file.
The generic syntax of configuration targets for SPL, TPL is:
<target_image>/<config_command>
Here, <target_image> is either 'spl' or 'tpl'
<config_command> is 'config', 'menuconfig', 'xconfig', etc.
When the configuration is done, run "make".
(Or "make <board>_defconfig all" will do the configuration and build
in one time.)
For futher information of how Kconfig works in U-Boot,
please read the comment block of scripts/multiconfig.py.
By the way, there is another item worth remarking here:
coexistence of Kconfig and board herder files.
Prior to Kconfig, we used C headers to define a set of configs.
We expect a very long term to migrate from C headers to Kconfig.
Two different infractructure must coexist in the interim.
In our former configuration scheme, include/autoconf.mk was generated
for use in makefiles.
It is still generated under include/, spl/include/, tpl/include/ directory
for the Normal, SPL, TPL image, respectively.
Signed-off-by: Masahiro Yamada <yamada.m@jp.panasonic.com>
Acked-by: Simon Glass <sjg@chromium.org>
2014-07-30 13:08:17 +08:00
|
|
|
# We want to include arch/$(ARCH)/config.mk only when include/config/auto.conf
|
|
|
|
# is up-to-date. When we switch to a different board configuration, old CONFIG
|
|
|
|
# macros are still remaining in include/config/auto.conf. Without the following
|
|
|
|
# gimmick, wrong config.mk would be included leading nasty warnings/errors.
|
2015-04-03 11:30:25 +08:00
|
|
|
ifneq ($(wildcard $(KCONFIG_CONFIG)),)
|
|
|
|
ifneq ($(wildcard include/config/auto.conf),)
|
|
|
|
autoconf_is_old := $(shell find . -path ./$(KCONFIG_CONFIG) -newer \
|
|
|
|
include/config/auto.conf)
|
|
|
|
ifeq ($(autoconf_is_old),)
|
2015-07-05 00:56:57 +08:00
|
|
|
include config.mk
|
|
|
|
include arch/$(ARCH)/Makefile
|
2014-02-04 16:24:21 +08:00
|
|
|
endif
|
2015-04-03 11:30:25 +08:00
|
|
|
endif
|
|
|
|
endif
|
2013-04-20 16:42:36 +08:00
|
|
|
|
2016-11-07 23:47:07 +08:00
|
|
|
# These are set by the arch-specific config.mk. Make sure they are exported
|
|
|
|
# so they can be used when building an EFI application.
|
|
|
|
export EFI_LDS # Filename of EFI link script in arch/$(ARCH)/lib
|
|
|
|
export EFI_CRT0 # Filename of EFI CRT0 in arch/$(ARCH)/lib
|
|
|
|
export EFI_RELOC # Filename of EFU relocation code in arch/$(ARCH)/lib
|
|
|
|
export CFLAGS_EFI # Compiler flags to add when building EFI app
|
|
|
|
export CFLAGS_NON_EFI # Compiler flags to remove when building EFI app
|
|
|
|
export EFI_TARGET # binutils target if EFI is natively supported
|
|
|
|
|
2022-08-04 02:13:08 +08:00
|
|
|
export LTO_ENABLE
|
|
|
|
|
|
|
|
# This is y if LTO is enabled for this build. See NO_LTO=1 to disable LTO
|
|
|
|
ifeq ($(NO_LTO),)
|
|
|
|
LTO_ENABLE=$(if $(CONFIG_LTO),y)
|
|
|
|
endif
|
|
|
|
|
2011-06-20 20:45:37 +08:00
|
|
|
# If board code explicitly specified LDSCRIPT or CONFIG_SYS_LDSCRIPT, use
|
|
|
|
# that (or fail if absent). Otherwise, search for a linker script in a
|
|
|
|
# standard location.
|
|
|
|
|
|
|
|
ifndef LDSCRIPT
|
2014-03-11 10:05:19 +08:00
|
|
|
#LDSCRIPT := $(srctree)/board/$(BOARDDIR)/u-boot.lds.debug
|
2011-06-20 20:45:37 +08:00
|
|
|
ifdef CONFIG_SYS_LDSCRIPT
|
|
|
|
# need to strip off double quotes
|
2014-02-25 18:26:48 +08:00
|
|
|
LDSCRIPT := $(srctree)/$(CONFIG_SYS_LDSCRIPT:"%"=%)
|
2011-06-20 20:45:37 +08:00
|
|
|
endif
|
|
|
|
endif
|
|
|
|
|
2011-11-21 18:49:37 +08:00
|
|
|
# If there is no specified link script, we look in a number of places for it
|
2011-06-20 20:45:37 +08:00
|
|
|
ifndef LDSCRIPT
|
|
|
|
ifeq ($(wildcard $(LDSCRIPT)),)
|
2014-03-11 10:05:19 +08:00
|
|
|
LDSCRIPT := $(srctree)/board/$(BOARDDIR)/u-boot.lds
|
2011-06-20 20:45:37 +08:00
|
|
|
endif
|
|
|
|
ifeq ($(wildcard $(LDSCRIPT)),)
|
2014-03-11 10:05:19 +08:00
|
|
|
LDSCRIPT := $(srctree)/$(CPUDIR)/u-boot.lds
|
2011-06-20 20:45:37 +08:00
|
|
|
endif
|
2011-11-21 18:49:37 +08:00
|
|
|
ifeq ($(wildcard $(LDSCRIPT)),)
|
2014-03-11 10:05:19 +08:00
|
|
|
LDSCRIPT := $(srctree)/arch/$(ARCH)/cpu/u-boot.lds
|
2011-11-21 18:49:37 +08:00
|
|
|
endif
|
2011-06-20 20:45:37 +08:00
|
|
|
endif
|
|
|
|
|
2014-02-04 16:24:35 +08:00
|
|
|
else
|
kconfig: switch to Kconfig
This commit enables Kconfig.
Going forward, we use Kconfig for the board configuration.
mkconfig will never be used. Nor will include/config.mk be generated.
Kconfig must be adjusted for U-Boot because our situation is
a little more complicated than Linux Kernel.
We have to generate multiple boot images (Normal, SPL, TPL)
from one source tree.
Each image needs its own configuration input.
Usage:
Run "make <board>_defconfig" to do the board configuration.
It will create the .config file and additionally spl/.config, tpl/.config
if SPL, TPL is enabled, respectively.
You can use "make config", "make menuconfig" etc. to create
a new .config or modify the existing one.
Use "make spl/config", "make spl/menuconfig" etc. for spl/.config
and do likewise for tpl/.config file.
The generic syntax of configuration targets for SPL, TPL is:
<target_image>/<config_command>
Here, <target_image> is either 'spl' or 'tpl'
<config_command> is 'config', 'menuconfig', 'xconfig', etc.
When the configuration is done, run "make".
(Or "make <board>_defconfig all" will do the configuration and build
in one time.)
For futher information of how Kconfig works in U-Boot,
please read the comment block of scripts/multiconfig.py.
By the way, there is another item worth remarking here:
coexistence of Kconfig and board herder files.
Prior to Kconfig, we used C headers to define a set of configs.
We expect a very long term to migrate from C headers to Kconfig.
Two different infractructure must coexist in the interim.
In our former configuration scheme, include/autoconf.mk was generated
for use in makefiles.
It is still generated under include/, spl/include/, tpl/include/ directory
for the Normal, SPL, TPL image, respectively.
Signed-off-by: Masahiro Yamada <yamada.m@jp.panasonic.com>
Acked-by: Simon Glass <sjg@chromium.org>
2014-07-30 13:08:17 +08:00
|
|
|
# Dummy target needed, because used as prerequisite
|
|
|
|
include/config/auto.conf: ;
|
2014-02-04 16:24:35 +08:00
|
|
|
endif # $(dot-config)
|
|
|
|
|
2022-06-16 19:43:50 +08:00
|
|
|
ifdef CONFIG_CC_OPTIMIZE_FOR_DEBUG
|
|
|
|
KBUILD_HOSTCFLAGS := -Wall -Wstrict-prototypes -Og -g -fomit-frame-pointer \
|
|
|
|
$(HOST_LFS_CFLAGS) $(HOSTCFLAGS)
|
2022-07-31 16:06:13 +08:00
|
|
|
# Avoid false positives -Wmaybe-uninitialized
|
|
|
|
# https://gcc.gnu.org/bugzilla/show_bug.cgi?id=78394
|
|
|
|
KBUILD_HOSTCFLAGS += -Wno-maybe-uninitialized
|
2022-06-16 19:43:50 +08:00
|
|
|
KBUILD_HOSTCXXFLAGS := -Og -g $(HOST_LFS_CFLAGS) $(HOSTCXXFLAGS)
|
|
|
|
endif
|
|
|
|
|
2016-08-10 23:36:43 +08:00
|
|
|
#
|
|
|
|
# Xtensa linker script cannot be preprocessed with -ansi because of
|
|
|
|
# preprocessor operations on strings that don't make C identifiers.
|
|
|
|
#
|
|
|
|
ifeq ($(CONFIG_XTENSA),)
|
|
|
|
LDPPFLAGS += -ansi
|
|
|
|
endif
|
|
|
|
|
2014-08-22 18:42:29 +08:00
|
|
|
ifdef CONFIG_CC_OPTIMIZE_FOR_SIZE
|
|
|
|
KBUILD_CFLAGS += -Os
|
2022-02-23 01:19:24 +08:00
|
|
|
endif
|
|
|
|
|
|
|
|
ifdef CONFIG_CC_OPTIMIZE_FOR_SPEED
|
2014-08-22 18:42:29 +08:00
|
|
|
KBUILD_CFLAGS += -O2
|
|
|
|
endif
|
2014-02-04 16:24:35 +08:00
|
|
|
|
2022-02-23 01:19:25 +08:00
|
|
|
ifdef CONFIG_CC_OPTIMIZE_FOR_DEBUG
|
2022-07-31 16:06:13 +08:00
|
|
|
KBUILD_CFLAGS += -Og -Wno-maybe-uninitialized
|
|
|
|
# Avoid false positives -Wmaybe-uninitialized
|
|
|
|
# https://gcc.gnu.org/bugzilla/show_bug.cgi?id=78394
|
|
|
|
KBUILD_CFLAGS += -Wno-maybe-uninitialized
|
2022-02-23 01:19:25 +08:00
|
|
|
endif
|
|
|
|
|
2021-05-20 19:24:03 +08:00
|
|
|
LTO_CFLAGS :=
|
|
|
|
LTO_FINAL_LDFLAGS :=
|
|
|
|
export LTO_CFLAGS LTO_FINAL_LDFLAGS
|
2022-08-04 02:13:08 +08:00
|
|
|
ifeq ($(LTO_ENABLE),y)
|
2021-05-20 19:24:03 +08:00
|
|
|
ifeq ($(cc-name),clang)
|
2022-08-04 02:13:08 +08:00
|
|
|
LTO_CFLAGS += -DLTO_ENABLE -flto
|
2021-05-20 19:24:03 +08:00
|
|
|
LTO_FINAL_LDFLAGS += -flto
|
|
|
|
|
|
|
|
AR = $(shell $(CC) -print-prog-name=llvm-ar)
|
|
|
|
NM = $(shell $(CC) -print-prog-name=llvm-nm)
|
|
|
|
else
|
|
|
|
NPROC := $(shell nproc 2>/dev/null || echo 1)
|
2022-08-04 02:13:08 +08:00
|
|
|
LTO_CFLAGS += -DLTO_ENABLE -flto=$(NPROC)
|
2021-05-20 19:24:03 +08:00
|
|
|
LTO_FINAL_LDFLAGS += -fuse-linker-plugin -flto=$(NPROC)
|
|
|
|
|
|
|
|
# use plugin aware tools
|
|
|
|
AR = $(CROSS_COMPILE)gcc-ar
|
|
|
|
NM = $(CROSS_COMPILE)gcc-nm
|
|
|
|
endif
|
|
|
|
|
|
|
|
CFLAGS_NON_EFI += $(LTO_CFLAGS)
|
|
|
|
|
|
|
|
KBUILD_CFLAGS += $(LTO_CFLAGS)
|
|
|
|
endif
|
|
|
|
|
2021-04-11 17:21:58 +08:00
|
|
|
ifeq ($(CONFIG_STACKPROTECTOR),y)
|
|
|
|
KBUILD_CFLAGS += $(call cc-option,-fstack-protector-strong)
|
|
|
|
CFLAGS_EFI += $(call cc-option,-fno-stack-protector)
|
|
|
|
else
|
2014-02-04 16:24:35 +08:00
|
|
|
KBUILD_CFLAGS += $(call cc-option,-fno-stack-protector)
|
2021-04-11 17:21:58 +08:00
|
|
|
endif
|
2015-07-02 14:30:17 +08:00
|
|
|
KBUILD_CFLAGS += $(call cc-option,-fno-delete-null-pointer-checks)
|
2014-02-04 16:24:35 +08:00
|
|
|
|
2021-06-18 06:07:25 +08:00
|
|
|
# disable pointer signed / unsigned warnings in gcc 4.0
|
|
|
|
KBUILD_CFLAGS += -Wno-pointer-sign
|
|
|
|
|
2020-03-27 23:46:27 +08:00
|
|
|
# disable stringop warnings in gcc 8+
|
|
|
|
KBUILD_CFLAGS += $(call cc-disable-warning, stringop-truncation)
|
|
|
|
|
2021-05-04 04:48:57 +08:00
|
|
|
KBUILD_CFLAGS += $(call cc-disable-warning, zero-length-bounds)
|
|
|
|
KBUILD_CFLAGS += $(call cc-disable-warning, array-bounds)
|
|
|
|
KBUILD_CFLAGS += $(call cc-disable-warning, stringop-overflow)
|
|
|
|
|
2020-05-14 20:30:02 +08:00
|
|
|
# Enabled with W=2, disabled by default as noisy
|
|
|
|
KBUILD_CFLAGS += $(call cc-disable-warning, maybe-uninitialized)
|
|
|
|
|
2018-04-16 12:18:31 +08:00
|
|
|
# change __FILE__ to the relative path from the srctree
|
|
|
|
KBUILD_CFLAGS += $(call cc-option,-fmacro-prefix-map=$(srctree)/=)
|
|
|
|
|
2022-11-23 01:31:54 +08:00
|
|
|
KBUILD_CFLAGS += -gdwarf-4
|
2014-02-04 16:24:35 +08:00
|
|
|
# $(KBUILD_AFLAGS) sets -g, which causes gcc to pass a suitable -g<format>
|
|
|
|
# option to the assembler.
|
2022-11-23 01:31:54 +08:00
|
|
|
KBUILD_AFLAGS += -gdwarf-4
|
2014-02-04 16:24:35 +08:00
|
|
|
|
|
|
|
# Report stack usage if supported
|
2018-04-02 17:18:02 +08:00
|
|
|
# ARC tools based on GCC 7.1 has an issue with stack usage
|
|
|
|
# with naked functions, see commit message for more details
|
|
|
|
ifndef CONFIG_ARC
|
2013-12-11 19:11:34 +08:00
|
|
|
ifeq ($(shell $(CONFIG_SHELL) $(srctree)/scripts/gcc-stack-usage.sh $(CC)),y)
|
|
|
|
KBUILD_CFLAGS += -fstack-usage
|
|
|
|
endif
|
2018-04-02 17:18:02 +08:00
|
|
|
endif
|
2014-02-04 16:24:35 +08:00
|
|
|
|
|
|
|
KBUILD_CFLAGS += $(call cc-option,-Wno-format-nonliteral)
|
2019-11-30 01:47:59 +08:00
|
|
|
KBUILD_CFLAGS += $(call cc-disable-warning, address-of-packed-member)
|
|
|
|
|
2021-06-18 06:07:25 +08:00
|
|
|
ifdef CONFIG_CC_IS_CLANG
|
2018-04-22 22:20:50 +08:00
|
|
|
KBUILD_CPPFLAGS += $(call cc-option,-Qunused-arguments,)
|
|
|
|
KBUILD_CFLAGS += $(call cc-disable-warning, format-invalid-specifier)
|
|
|
|
KBUILD_CFLAGS += $(call cc-disable-warning, gnu)
|
2020-03-27 23:46:27 +08:00
|
|
|
KBUILD_CFLAGS += $(call cc-disable-warning, address-of-packed-member)
|
|
|
|
# Quiet clang warning: comparison of unsigned expression < 0 is always false
|
|
|
|
KBUILD_CFLAGS += $(call cc-disable-warning, tautological-compare)
|
|
|
|
# CLANG uses a _MergedGlobals as optimization, but this breaks modpost, as the
|
|
|
|
# source of a reference will be _MergedGlobals and not on of the whitelisted names.
|
|
|
|
# See modpost pattern 2
|
|
|
|
KBUILD_CFLAGS += $(call cc-option, -mno-global-merge,)
|
2018-04-22 22:20:50 +08:00
|
|
|
KBUILD_CFLAGS += $(call cc-option, -fcatch-undefined-behavior)
|
2023-02-28 06:08:33 +08:00
|
|
|
KBUILD_CFLAGS += $(call cc-disable-warning, deprecated-non-prototype)
|
2021-06-18 06:07:25 +08:00
|
|
|
endif
|
2020-03-27 23:46:27 +08:00
|
|
|
|
|
|
|
# These warnings generated too much noise in a regular build.
|
|
|
|
# Use make W=1 to enable them (see scripts/Makefile.extrawarn)
|
|
|
|
KBUILD_CFLAGS += $(call cc-disable-warning, unused-but-set-variable)
|
2014-02-04 16:24:35 +08:00
|
|
|
|
2014-04-18 18:09:51 +08:00
|
|
|
# Prohibit date/time macros, which would make the build non-deterministic
|
|
|
|
KBUILD_CFLAGS += $(call cc-option,-Werror=date-time)
|
|
|
|
|
2015-07-05 00:56:57 +08:00
|
|
|
include scripts/Makefile.extrawarn
|
2014-08-05 14:56:43 +08:00
|
|
|
|
2014-04-15 13:47:40 +08:00
|
|
|
# Add user supplied CPPFLAGS, AFLAGS and CFLAGS as the last assignments
|
|
|
|
KBUILD_CPPFLAGS += $(KCPPFLAGS)
|
|
|
|
KBUILD_AFLAGS += $(KAFLAGS)
|
|
|
|
KBUILD_CFLAGS += $(KCFLAGS)
|
|
|
|
|
2023-02-15 04:09:31 +08:00
|
|
|
KBUILD_LDFLAGS += -z noexecstack
|
2022-12-08 04:49:43 +08:00
|
|
|
KBUILD_LDFLAGS += $(call ld-option,--no-warn-rwx-segments)
|
|
|
|
|
2020-07-20 03:56:08 +08:00
|
|
|
KBUILD_HOSTCFLAGS += $(if $(CONFIG_TOOLS_DEBUG),-g)
|
|
|
|
|
2014-02-04 16:24:35 +08:00
|
|
|
# Use UBOOTINCLUDE when you must reference the include/ directory.
|
|
|
|
# Needed to be compatible with the O= option
|
2014-03-11 10:05:18 +08:00
|
|
|
UBOOTINCLUDE := \
|
2020-04-10 17:10:32 +08:00
|
|
|
-Iinclude \
|
|
|
|
$(if $(KBUILD_SRC), -I$(srctree)/include) \
|
|
|
|
$(if $(CONFIG_$(SPL_)SYS_THUMB_BUILD), \
|
|
|
|
$(if $(CONFIG_HAS_THUMB2), \
|
|
|
|
$(if $(CONFIG_CPU_V7M), \
|
|
|
|
-I$(srctree)/arch/arm/thumb1/include), \
|
|
|
|
-I$(srctree)/arch/arm/thumb1/include)) \
|
|
|
|
-I$(srctree)/arch/$(ARCH)/include \
|
|
|
|
-include $(srctree)/include/linux/kconfig.h
|
2014-02-04 16:24:35 +08:00
|
|
|
|
|
|
|
NOSTDINC_FLAGS += -nostdinc -isystem $(shell $(CC) -print-file-name=include)
|
|
|
|
|
|
|
|
# FIX ME
|
2014-03-05 15:59:40 +08:00
|
|
|
cpp_flags := $(KBUILD_CPPFLAGS) $(PLATFORM_CPPFLAGS) $(UBOOTINCLUDE) \
|
|
|
|
$(NOSTDINC_FLAGS)
|
2014-02-04 16:24:35 +08:00
|
|
|
c_flags := $(KBUILD_CFLAGS) $(cpp_flags)
|
|
|
|
|
2002-11-03 07:17:16 +08:00
|
|
|
#########################################################################
|
|
|
|
# U-Boot objects....order is important (i.e. start must be first)
|
|
|
|
|
2014-02-04 16:24:24 +08:00
|
|
|
HAVE_VENDOR_COMMON_LIB = $(if $(wildcard $(srctree)/board/$(VENDOR)/common/Makefile),y,n)
|
2012-07-19 21:39:58 +08:00
|
|
|
|
2021-07-11 11:14:22 +08:00
|
|
|
libs-$(CONFIG_API) += api/
|
2014-02-04 16:24:37 +08:00
|
|
|
libs-$(HAVE_VENDOR_COMMON_LIB) += board/$(VENDOR)/common/
|
2021-10-15 02:47:54 +08:00
|
|
|
libs-y += boot/
|
2021-07-11 11:14:22 +08:00
|
|
|
libs-y += cmd/
|
|
|
|
libs-y += common/
|
2014-02-04 16:24:37 +08:00
|
|
|
libs-$(CONFIG_OF_EMBED) += dts/
|
2021-07-11 11:14:22 +08:00
|
|
|
libs-y += env/
|
|
|
|
libs-y += lib/
|
2014-02-04 16:24:37 +08:00
|
|
|
libs-y += fs/
|
|
|
|
libs-y += net/
|
|
|
|
libs-y += disk/
|
|
|
|
libs-y += drivers/
|
|
|
|
libs-$(CONFIG_SYS_FSL_DDR) += drivers/ddr/fsl/
|
2016-08-26 18:30:39 +08:00
|
|
|
libs-$(CONFIG_SYS_FSL_MMDC) += drivers/ddr/fsl/
|
2019-05-06 09:55:59 +08:00
|
|
|
libs-$(CONFIG_$(SPL_)ALTERA_SDRAM) += drivers/ddr/altera/
|
2019-10-01 19:56:33 +08:00
|
|
|
libs-y += drivers/usb/cdns3/
|
2015-02-23 21:10:16 +08:00
|
|
|
libs-y += drivers/usb/dwc3/
|
2016-04-05 17:11:19 +08:00
|
|
|
libs-y += drivers/usb/common/
|
2015-03-26 02:22:37 +08:00
|
|
|
libs-y += drivers/usb/emul/
|
2014-02-04 16:24:37 +08:00
|
|
|
libs-y += drivers/usb/eth/
|
2021-02-07 21:50:03 +08:00
|
|
|
libs-$(CONFIG_USB_DEVICE) += drivers/usb/gadget/
|
2019-01-10 22:44:14 +08:00
|
|
|
libs-$(CONFIG_USB_GADGET) += drivers/usb/gadget/
|
|
|
|
libs-$(CONFIG_USB_GADGET) += drivers/usb/gadget/udc/
|
2021-07-01 01:09:49 +08:00
|
|
|
libs-y += drivers/usb/host/
|
2020-10-16 11:38:39 +08:00
|
|
|
libs-y += drivers/usb/mtu3/
|
2014-02-04 16:24:37 +08:00
|
|
|
libs-y += drivers/usb/musb/
|
|
|
|
libs-y += drivers/usb/musb-new/
|
2022-06-29 18:06:15 +08:00
|
|
|
libs-y += drivers/usb/isp1760/
|
2014-02-04 16:24:37 +08:00
|
|
|
libs-y += drivers/usb/phy/
|
|
|
|
libs-y += drivers/usb/ulpi/
|
2019-12-29 01:44:51 +08:00
|
|
|
ifdef CONFIG_POST
|
|
|
|
libs-y += post/
|
|
|
|
endif
|
2022-04-30 14:56:47 +08:00
|
|
|
libs-$(CONFIG_$(SPL_TPL_)UNIT_TEST) += test/
|
2015-05-21 03:27:36 +08:00
|
|
|
libs-$(CONFIG_UT_ENV) += test/env/
|
2019-10-23 22:46:41 +08:00
|
|
|
libs-$(CONFIG_UT_OPTEE) += test/optee/
|
2016-07-05 16:26:46 +08:00
|
|
|
libs-$(CONFIG_UT_OVERLAY) += test/overlay/
|
2006-09-02 01:49:50 +08:00
|
|
|
|
2014-03-03 18:03:17 +08:00
|
|
|
libs-y += $(if $(BOARDDIR),board/$(BOARDDIR)/)
|
2014-02-04 16:24:37 +08:00
|
|
|
|
|
|
|
libs-y := $(sort $(libs-y))
|
2010-08-19 12:48:11 +08:00
|
|
|
|
2014-02-04 16:24:37 +08:00
|
|
|
u-boot-dirs := $(patsubst %/,%,$(filter %/, $(libs-y))) tools examples
|
|
|
|
|
|
|
|
u-boot-alldirs := $(sort $(u-boot-dirs) $(patsubst %/,%,$(filter %/, $(libs-))))
|
|
|
|
|
|
|
|
libs-y := $(patsubst %/, %/built-in.o, $(libs-y))
|
|
|
|
|
|
|
|
u-boot-init := $(head-y)
|
|
|
|
u-boot-main := $(libs-y)
|
2013-11-11 13:35:55 +08:00
|
|
|
|
2003-12-07 03:49:23 +08:00
|
|
|
|
2003-09-12 07:06:34 +08:00
|
|
|
# Add GCC lib
|
2014-03-05 15:59:38 +08:00
|
|
|
ifeq ($(CONFIG_USE_PRIVATE_LIBGCC),y)
|
2014-02-27 21:40:34 +08:00
|
|
|
PLATFORM_LIBGCC = arch/$(ARCH)/lib/lib.a
|
2009-07-23 19:15:59 +08:00
|
|
|
else
|
2023-04-06 07:48:53 +08:00
|
|
|
ifndef CONFIG_CC_IS_CLANG
|
kbuild: use Linux Kernel build scripts
Now we are ready to switch over to real Kbuild.
This commit disables temporary scripts:
scripts/{Makefile.build.tmp, Makefile.host.tmp}
and enables real Kbuild scripts:
scripts/{Makefile.build,Makefile.host,Makefile.lib}.
This switch is triggered by the line in scripts/Kbuild.include
-build := -f $(if $(KBUILD_SRC),$(srctree)/)scripts/Makefile.build.tmp obj
+build := -f $(if $(KBUILD_SRC),$(srctree)/)scripts/Makefile.build obj
We need to adjust some build scripts for U-Boot.
But smaller amount of modification is preferable.
Additionally, we need to fix compiler flags which are
locally added or removed.
In Kbuild, it is not allowed to change CFLAGS locally.
Instead, ccflags-y, asflags-y, cppflags-y,
CFLAGS_$(basetarget).o, CFLAGS_REMOVE_$(basetarget).o
are prepared for that purpose.
Signed-off-by: Masahiro Yamada <yamada.m@jp.panasonic.com>
Tested-by: Gerhard Sittig <gsi@denx.de>
2014-02-04 16:24:28 +08:00
|
|
|
PLATFORM_LIBGCC := -L $(shell dirname `$(CC) $(c_flags) -print-libgcc-file-name`) -lgcc
|
2009-07-23 19:15:59 +08:00
|
|
|
endif
|
2023-04-06 07:48:53 +08:00
|
|
|
endif
|
2009-07-23 19:15:59 +08:00
|
|
|
PLATFORM_LIBS += $(PLATFORM_LIBGCC)
|
2018-04-09 23:11:45 +08:00
|
|
|
|
|
|
|
ifdef CONFIG_CC_COVERAGE
|
|
|
|
KBUILD_CFLAGS += --coverage
|
|
|
|
PLATFORM_LIBGCC += -lgcov
|
|
|
|
endif
|
|
|
|
|
2009-07-23 19:15:59 +08:00
|
|
|
export PLATFORM_LIBS
|
2014-05-16 16:54:17 +08:00
|
|
|
export PLATFORM_LIBGCC
|
2004-03-14 23:06:13 +08:00
|
|
|
|
2009-08-23 14:47:59 +08:00
|
|
|
# Special flags for CPP when processing the linker script.
|
|
|
|
# Pass the version down so we can handle backwards compatibility
|
|
|
|
# on the fly.
|
|
|
|
LDPPFLAGS += \
|
2014-03-11 10:05:19 +08:00
|
|
|
-include $(srctree)/include/u-boot/u-boot.lds.h \
|
2011-11-21 18:49:40 +08:00
|
|
|
-DCPUDIR=$(CPUDIR) \
|
2009-08-23 14:47:59 +08:00
|
|
|
$(shell $(LD) --version | \
|
|
|
|
sed -ne 's/GNU ld version \([0-9][0-9]*\)\.\([0-9][0-9]*\).*/-DLD_MAJOR=\1 -DLD_MINOR=\2/p')
|
|
|
|
|
2003-08-06 01:43:17 +08:00
|
|
|
#########################################################################
|
2002-11-03 07:17:16 +08:00
|
|
|
#########################################################################
|
|
|
|
|
2010-10-14 10:58:23 +08:00
|
|
|
ifneq ($(CONFIG_BOARD_SIZE_LIMIT),)
|
2019-04-03 01:19:04 +08:00
|
|
|
BOARD_SIZE_CHECK= @ $(call size_check,$@,$(CONFIG_BOARD_SIZE_LIMIT))
|
2010-10-14 10:58:23 +08:00
|
|
|
else
|
|
|
|
BOARD_SIZE_CHECK =
|
|
|
|
endif
|
|
|
|
|
2020-09-26 02:12:56 +08:00
|
|
|
ifneq ($(CONFIG_SPL_SIZE_LIMIT),0x0)
|
2019-05-25 04:07:04 +08:00
|
|
|
SPL_SIZE_CHECK = @$(call size_check,$@,$$(tools/spl_size_limit))
|
2019-04-03 01:19:06 +08:00
|
|
|
else
|
|
|
|
SPL_SIZE_CHECK =
|
|
|
|
endif
|
|
|
|
|
2020-09-26 02:12:56 +08:00
|
|
|
ifneq ($(CONFIG_TPL_SIZE_LIMIT),0x0)
|
2019-10-21 11:31:52 +08:00
|
|
|
TPL_SIZE_CHECK = @$(call size_check,$@,$(CONFIG_TPL_SIZE_LIMIT))
|
|
|
|
else
|
|
|
|
TPL_SIZE_CHECK =
|
|
|
|
endif
|
|
|
|
|
2022-04-30 14:56:52 +08:00
|
|
|
ifneq ($(CONFIG_VPL_SIZE_LIMIT),0x0)
|
|
|
|
VPL_SIZE_CHECK = @$(call size_check,$@,$(CONFIG_VPL_SIZE_LIMIT))
|
|
|
|
else
|
|
|
|
VPL_SIZE_CHECK =
|
|
|
|
endif
|
|
|
|
|
2013-12-14 11:47:32 +08:00
|
|
|
# Statically apply RELA-style relocations (currently arm64 only)
|
2017-04-21 02:36:25 +08:00
|
|
|
# This is useful for arm64 where static relocation needs to be performed on
|
|
|
|
# the raw binary, but certain simulators only accept an ELF file (but don't
|
|
|
|
# do the relocation).
|
2013-12-14 11:47:32 +08:00
|
|
|
ifneq ($(CONFIG_STATIC_RELA),)
|
2022-06-24 20:14:59 +08:00
|
|
|
# $(2) is u-boot ELF, $(3) is u-boot bin, $(4) is text base
|
2020-06-25 14:39:45 +08:00
|
|
|
quiet_cmd_static_rela = RELOC $@
|
|
|
|
cmd_static_rela = \
|
2022-06-24 20:14:59 +08:00
|
|
|
tools/relocate-rela $(3) $(2)
|
2013-12-14 11:47:32 +08:00
|
|
|
else
|
2020-06-25 14:39:45 +08:00
|
|
|
quiet_cmd_static_rela =
|
2020-11-04 22:33:44 +08:00
|
|
|
cmd_static_rela =
|
2013-12-14 11:47:32 +08:00
|
|
|
endif
|
|
|
|
|
2020-07-20 03:56:01 +08:00
|
|
|
# Always append INPUTS so that arch config.mk's can add custom ones
|
|
|
|
INPUTS-y += u-boot.srec u-boot.bin u-boot.sym System.map binary_size_check
|
2014-02-04 16:24:24 +08:00
|
|
|
|
2014-04-08 21:43:34 +08:00
|
|
|
ifeq ($(CONFIG_SPL_FSL_PBL),y)
|
2020-07-20 03:56:01 +08:00
|
|
|
INPUTS-$(CONFIG_RAMBOOT_PBL) += u-boot-with-spl-pbl.bin
|
2014-04-08 21:43:34 +08:00
|
|
|
else
|
2020-06-17 07:06:25 +08:00
|
|
|
ifneq ($(CONFIG_NXP_ESBC), y)
|
2015-06-16 13:06:00 +08:00
|
|
|
# For Secure Boot The Image needs to be signed and Header must also
|
|
|
|
# be included. So The image has to be built explicitly
|
2020-07-20 03:56:01 +08:00
|
|
|
INPUTS-$(CONFIG_RAMBOOT_PBL) += u-boot.pbl
|
2014-04-08 21:43:34 +08:00
|
|
|
endif
|
2015-06-16 13:06:00 +08:00
|
|
|
endif
|
2020-07-20 03:56:01 +08:00
|
|
|
INPUTS-$(CONFIG_SPL) += spl/u-boot-spl.bin
|
2019-09-20 14:47:53 +08:00
|
|
|
ifeq ($(CONFIG_MX6)$(CONFIG_IMX_HAB), yy)
|
2020-07-20 03:56:01 +08:00
|
|
|
INPUTS-$(CONFIG_SPL_FRAMEWORK) += u-boot-ivt.img
|
2016-11-06 23:37:56 +08:00
|
|
|
else
|
2019-09-20 14:47:53 +08:00
|
|
|
ifeq ($(CONFIG_MX7)$(CONFIG_IMX_HAB), yy)
|
2020-07-20 03:56:01 +08:00
|
|
|
INPUTS-$(CONFIG_SPL_FRAMEWORK) += u-boot-ivt.img
|
2018-02-28 15:51:50 +08:00
|
|
|
else
|
2020-07-20 03:56:01 +08:00
|
|
|
INPUTS-$(CONFIG_SPL_FRAMEWORK) += u-boot.img
|
2016-11-06 23:37:56 +08:00
|
|
|
endif
|
2018-02-28 15:51:50 +08:00
|
|
|
endif
|
2020-07-20 03:56:01 +08:00
|
|
|
INPUTS-$(CONFIG_TPL) += tpl/u-boot-tpl.bin
|
2022-04-30 14:56:52 +08:00
|
|
|
INPUTS-$(CONFIG_VPL) += vpl/u-boot-vpl.bin
|
2021-12-17 11:59:38 +08:00
|
|
|
|
|
|
|
# Allow omitting the .dtb output if it is not normally used
|
|
|
|
INPUTS-$(CONFIG_OF_SEPARATE) += $(if $(CONFIG_OF_OMIT_DTB),dts/dt.dtb,u-boot.dtb)
|
2014-05-15 19:37:51 +08:00
|
|
|
ifeq ($(CONFIG_SPL_FRAMEWORK),y)
|
2020-07-20 03:56:01 +08:00
|
|
|
INPUTS-$(CONFIG_OF_SEPARATE) += u-boot-dtb.img
|
2014-05-15 19:37:51 +08:00
|
|
|
endif
|
2021-10-26 14:12:33 +08:00
|
|
|
INPUTS-$(CONFIG_SANDBOX) += u-boot.dtb
|
2013-03-27 22:34:18 +08:00
|
|
|
ifneq ($(CONFIG_SPL_TARGET),)
|
2020-07-20 03:56:01 +08:00
|
|
|
INPUTS-$(CONFIG_SPL) += $(CONFIG_SPL_TARGET:"%"=%)
|
2013-03-27 22:34:18 +08:00
|
|
|
endif
|
2020-07-20 03:56:01 +08:00
|
|
|
INPUTS-$(CONFIG_REMAKE_ELF) += u-boot.elf
|
|
|
|
INPUTS-$(CONFIG_EFI_APP) += u-boot-app.efi
|
|
|
|
INPUTS-$(CONFIG_EFI_STUB) += u-boot-payload.efi
|
2011-05-25 04:02:57 +08:00
|
|
|
|
2020-07-20 03:56:07 +08:00
|
|
|
# Generate this input file for binman
|
|
|
|
ifeq ($(CONFIG_SPL),)
|
2020-07-20 03:56:01 +08:00
|
|
|
INPUTS-$(CONFIG_ARCH_MEDIATEK) += u-boot-mtk.bin
|
2020-07-20 03:56:07 +08:00
|
|
|
endif
|
2018-11-15 10:07:49 +08:00
|
|
|
|
2014-10-22 18:13:24 +08:00
|
|
|
# Add optional build target if defined in board/cpu/soc headers
|
|
|
|
ifneq ($(CONFIG_BUILD_TARGET),)
|
2020-07-20 03:56:01 +08:00
|
|
|
INPUTS-y += $(CONFIG_BUILD_TARGET:"%"=%)
|
2014-10-22 18:13:24 +08:00
|
|
|
endif
|
|
|
|
|
2020-03-10 08:20:43 +08:00
|
|
|
ifeq ($(CONFIG_INIT_SP_RELATIVE)$(CONFIG_OF_SEPARATE),yy)
|
2020-07-20 03:56:01 +08:00
|
|
|
INPUTS-y += init_sp_bss_offset_check
|
2018-01-10 03:52:14 +08:00
|
|
|
endif
|
|
|
|
|
2023-01-08 05:07:19 +08:00
|
|
|
ifeq ($(CONFIG_ARCH_ROCKCHIP)_$(CONFIG_SPL_FRAMEWORK),y_)
|
2022-09-02 21:10:51 +08:00
|
|
|
INPUTS-y += u-boot.img
|
2020-07-20 03:56:07 +08:00
|
|
|
endif
|
2019-09-04 00:29:01 +08:00
|
|
|
|
2020-07-20 03:56:03 +08:00
|
|
|
INPUTS-$(CONFIG_X86) += u-boot-x86-start16.bin u-boot-x86-reset16.bin \
|
|
|
|
$(if $(CONFIG_SPL_X86_16BIT_INIT),spl/u-boot-spl.bin) \
|
|
|
|
$(if $(CONFIG_TPL_X86_16BIT_INIT),tpl/u-boot-tpl.bin)
|
|
|
|
|
2014-02-24 10:12:18 +08:00
|
|
|
LDFLAGS_u-boot += $(LDFLAGS_FINAL)
|
2017-04-10 02:33:58 +08:00
|
|
|
|
|
|
|
# Avoid 'Not enough room for program headers' error on binutils 2.28 onwards.
|
|
|
|
LDFLAGS_u-boot += $(call ld-option, --no-dynamic-linker)
|
|
|
|
|
2021-10-21 05:31:33 +08:00
|
|
|
# ld.lld support
|
2022-09-27 04:47:40 +08:00
|
|
|
LDFLAGS_u-boot += -z notext $(call ld-option,--apply-dynamic-relocs)
|
2021-10-21 05:31:33 +08:00
|
|
|
|
2021-05-20 19:24:04 +08:00
|
|
|
LDFLAGS_u-boot += --build-id=none
|
|
|
|
|
2018-02-21 18:06:26 +08:00
|
|
|
ifeq ($(CONFIG_ARC)$(CONFIG_NIOS2)$(CONFIG_X86)$(CONFIG_XTENSA),)
|
2022-10-21 08:22:39 +08:00
|
|
|
LDFLAGS_u-boot += -Ttext $(CONFIG_TEXT_BASE)
|
2014-02-04 16:24:35 +08:00
|
|
|
endif
|
2013-10-17 16:34:53 +08:00
|
|
|
|
2023-05-05 16:39:39 +08:00
|
|
|
# make the checker run with the right architecture
|
|
|
|
CHECKFLAGS += --arch=$(ARCH)
|
|
|
|
|
2020-03-12 06:11:17 +08:00
|
|
|
# insure the checker run with the right endianness
|
|
|
|
CHECKFLAGS += $(if $(CONFIG_CPU_BIG_ENDIAN),-mbig-endian,-mlittle-endian)
|
|
|
|
|
|
|
|
# the checker needs the correct machine size
|
|
|
|
CHECKFLAGS += $(if $(CONFIG_64BIT),-m64,-m32)
|
|
|
|
|
2015-07-31 23:31:23 +08:00
|
|
|
# Normally we fill empty space with 0xff
|
2014-02-24 10:12:14 +08:00
|
|
|
quiet_cmd_objcopy = OBJCOPY $@
|
2015-07-31 23:31:23 +08:00
|
|
|
cmd_objcopy = $(OBJCOPY) --gap-fill=0xff $(OBJCOPYFLAGS) \
|
|
|
|
$(OBJCOPYFLAGS_$(@F)) $< $@
|
|
|
|
|
|
|
|
# Provide a version which does not do this, for use by EFI
|
|
|
|
quiet_cmd_zobjcopy = OBJCOPY $@
|
|
|
|
cmd_zobjcopy = $(OBJCOPY) $(OBJCOPYFLAGS) $(OBJCOPYFLAGS_$(@F)) $< $@
|
2014-02-24 10:12:14 +08:00
|
|
|
|
2015-08-05 02:33:52 +08:00
|
|
|
quiet_cmd_efipayload = OBJCOPY $@
|
|
|
|
cmd_efipayload = $(OBJCOPY) -I binary -O $(EFIPAYLOAD_BFDTARGET) -B $(EFIPAYLOAD_BFDARCH) $< $@
|
|
|
|
|
2016-11-06 23:37:58 +08:00
|
|
|
MKIMAGEOUTPUT ?= /dev/null
|
|
|
|
|
2014-03-14 12:00:14 +08:00
|
|
|
quiet_cmd_mkimage = MKIMAGE $@
|
2014-02-24 10:12:15 +08:00
|
|
|
cmd_mkimage = $(objtree)/tools/mkimage $(MKIMAGEFLAGS_$(@F)) -d $< $@ \
|
Makefile: always preserve output for images that can contain HAB Blocks
The current makefile logic disables creation of the
SPL.log/u-boot-ivt.img.log etc. files when V=1 is given on the command
line, the rationale presumably being that the user wants and gets the
information on the console.
However, from general principles, I don't think a higher V= level
should affect which build artifacts get generated (and certainly
shouldn't produce fewer). Concretely, it's also a problem that when
doing a V=1 build in a terminal, the relevant HAB blocks lines easily
drown in all the other V=1 output.
Moreover, build systems such as Yocto by default pass V=1, so in that
case the information gets hidden away in the do_compile log file, making
it nigh impossible to create a recipe for creating signed U-boot images
- I don't want to disable V=1, because having verbose output in the log
file is valuable when things go wrong, but OTOH trying to go digging in
the do_compile log file (and getting exactly the right lines) is not
pleasant to even think about.
So change the logic so that for V=0, the mkimage output is redirected
to MKIMAGEOUTPUT (which is also the current behaviour), while for any
other value of V, we _additionally_ write the information to make's
stdout, whatever that might be.
Signed-off-by: Rasmus Villemoes <rasmus.villemoes@prevas.dk>
Tested-by: Breno Lima <breno.lima@nxp.com>
2018-03-23 19:08:02 +08:00
|
|
|
>$(MKIMAGEOUTPUT) $(if $(KBUILD_VERBOSE:0=), && cat $(MKIMAGEOUTPUT))
|
2014-02-24 10:12:15 +08:00
|
|
|
|
2017-04-26 08:32:45 +08:00
|
|
|
quiet_cmd_mkfitimage = MKIMAGE $@
|
2020-07-20 03:56:09 +08:00
|
|
|
cmd_mkfitimage = $(objtree)/tools/mkimage $(MKIMAGEFLAGS_$(@F)) \
|
|
|
|
-f $(U_BOOT_ITS) -p $(CONFIG_FIT_EXTERNAL_OFFSET) $@ \
|
Makefile: always preserve output for images that can contain HAB Blocks
The current makefile logic disables creation of the
SPL.log/u-boot-ivt.img.log etc. files when V=1 is given on the command
line, the rationale presumably being that the user wants and gets the
information on the console.
However, from general principles, I don't think a higher V= level
should affect which build artifacts get generated (and certainly
shouldn't produce fewer). Concretely, it's also a problem that when
doing a V=1 build in a terminal, the relevant HAB blocks lines easily
drown in all the other V=1 output.
Moreover, build systems such as Yocto by default pass V=1, so in that
case the information gets hidden away in the do_compile log file, making
it nigh impossible to create a recipe for creating signed U-boot images
- I don't want to disable V=1, because having verbose output in the log
file is valuable when things go wrong, but OTOH trying to go digging in
the do_compile log file (and getting exactly the right lines) is not
pleasant to even think about.
So change the logic so that for V=0, the mkimage output is redirected
to MKIMAGEOUTPUT (which is also the current behaviour), while for any
other value of V, we _additionally_ write the information to make's
stdout, whatever that might be.
Signed-off-by: Rasmus Villemoes <rasmus.villemoes@prevas.dk>
Tested-by: Breno Lima <breno.lima@nxp.com>
2018-03-23 19:08:02 +08:00
|
|
|
>$(MKIMAGEOUTPUT) $(if $(KBUILD_VERBOSE:0=), && cat $(MKIMAGEOUTPUT))
|
2017-04-26 08:32:45 +08:00
|
|
|
|
2014-02-24 10:12:16 +08:00
|
|
|
quiet_cmd_cat = CAT $@
|
|
|
|
cmd_cat = cat $(filter-out $(PHONY), $^) > $@
|
|
|
|
|
2014-02-24 10:12:17 +08:00
|
|
|
append = cat $(filter-out $< $(PHONY), $^) >> $@
|
|
|
|
|
|
|
|
quiet_cmd_pad_cat = CAT $@
|
2020-10-26 21:10:49 +08:00
|
|
|
cmd_pad_cat = $(cmd_objcopy) && $(append) || { rm -f $@; false; }
|
2014-02-24 10:12:17 +08:00
|
|
|
|
2020-04-21 15:28:39 +08:00
|
|
|
quiet_cmd_lzma = LZMA $@
|
|
|
|
cmd_lzma = lzma -c -z -k -9 $< > $@
|
|
|
|
|
2016-11-14 05:25:50 +08:00
|
|
|
cfg: u-boot.cfg
|
|
|
|
|
2021-12-17 11:59:37 +08:00
|
|
|
quiet_cmd_ofcheck = OFCHK $2
|
|
|
|
cmd_ofcheck = $(srctree)/scripts/check-of.sh $2 \
|
|
|
|
$(srctree)/scripts/of_allowlist.txt
|
|
|
|
|
2021-03-25 16:24:33 +08:00
|
|
|
# Concat the value of all the CONFIGs (result is 'y' or 'yy', etc. )
|
|
|
|
got = $(foreach cfg,$(1),$($(cfg)))
|
|
|
|
|
|
|
|
# expected value 'y for each one
|
|
|
|
expect = $(foreach cfg,$(1),y)
|
|
|
|
|
|
|
|
# Show a deprecation message
|
|
|
|
# Args:
|
2023-02-02 04:19:29 +08:00
|
|
|
# 1: List of options to migrate to (e.g. "CONFIG_DM_MMC CONFIG_BLK")
|
2021-03-25 16:24:33 +08:00
|
|
|
# 2: Name of component (e.g . "Ethernet drivers")
|
|
|
|
# 3: Release deadline (e.g. "v202.07")
|
|
|
|
# 4: Condition to require before checking (e.g. "$(CONFIG_NET)")
|
|
|
|
# Note: Script avoids bash construct, hence the strange double 'if'
|
|
|
|
# (patches welcome!)
|
|
|
|
define deprecated
|
2021-04-01 06:18:13 +08:00
|
|
|
@if [ -n "$(strip $(4))" ]; then if [ "$(got)" != "$(expect)" ]; then \
|
2021-03-25 16:24:33 +08:00
|
|
|
echo >&2 "===================== WARNING ======================"; \
|
|
|
|
echo >&2 "This board does not use $(firstword $(1)) (Driver Model"; \
|
|
|
|
echo >&2 "for $(2)). Please update the board to use"; \
|
|
|
|
echo >&2 "$(firstword $(1)) before the $(3) release. Failure to"; \
|
|
|
|
echo >&2 "update by the deadline may result in board removal."; \
|
2022-03-01 11:49:50 +08:00
|
|
|
echo >&2 "See doc/develop/driver-model/migration.rst for more info."; \
|
2021-03-25 16:24:33 +08:00
|
|
|
echo >&2 "===================================================="; \
|
|
|
|
fi; fi
|
|
|
|
|
|
|
|
endef
|
|
|
|
|
2022-11-10 10:14:40 +08:00
|
|
|
# Timestamp file to make sure that binman always runs
|
|
|
|
.binman_stamp: $(INPUTS-y) FORCE
|
2020-07-20 03:56:03 +08:00
|
|
|
ifeq ($(CONFIG_BINMAN),y)
|
|
|
|
$(call if_changed,binman)
|
|
|
|
endif
|
|
|
|
@touch $@
|
2020-07-20 03:56:01 +08:00
|
|
|
|
2022-11-10 10:14:40 +08:00
|
|
|
all: .binman_stamp
|
|
|
|
|
2019-05-30 05:01:30 +08:00
|
|
|
ifeq ($(CONFIG_DEPRECATED),y)
|
|
|
|
$(warning "You have deprecated configuration options enabled in your .config! Please check your configuration.")
|
|
|
|
endif
|
2021-11-04 11:09:05 +08:00
|
|
|
ifeq ($(CONFIG_OF_EMBED)$(CONFIG_EFI_APP),y)
|
2021-03-25 16:24:32 +08:00
|
|
|
@echo >&2 "===================== WARNING ======================"
|
|
|
|
@echo >&2 "CONFIG_OF_EMBED is enabled. This option should only"
|
|
|
|
@echo >&2 "be used for debugging purposes. Please use"
|
|
|
|
@echo >&2 "CONFIG_OF_SEPARATE for boards in mainline."
|
2022-04-29 03:52:59 +08:00
|
|
|
@echo >&2 "See doc/develop/devicetree/control.rst for more info."
|
2021-03-25 16:24:32 +08:00
|
|
|
@echo >&2 "===================================================="
|
|
|
|
endif
|
|
|
|
ifneq ($(CONFIG_SPL_FIT_GENERATOR),)
|
|
|
|
@echo >&2 "===================== WARNING ======================"
|
|
|
|
@echo >&2 "This board uses CONFIG_SPL_FIT_GENERATOR. Please migrate"
|
|
|
|
@echo >&2 "to binman instead, to avoid the proliferation of"
|
|
|
|
@echo >&2 "arch-specific scripts with no tests."
|
|
|
|
@echo >&2 "===================================================="
|
2019-09-17 00:41:42 +08:00
|
|
|
endif
|
2021-03-25 16:24:41 +08:00
|
|
|
$(call deprecated,CONFIG_WDT,DM watchdog,v2019.10,\
|
|
|
|
$(CONFIG_WATCHDOG)$(CONFIG_HW_WATCHDOG))
|
2021-07-11 11:14:33 +08:00
|
|
|
$(call deprecated,CONFIG_DM_I2C,I2C drivers,v2022.04,$(CONFIG_SYS_I2C_LEGACY))
|
2022-11-17 02:10:41 +08:00
|
|
|
@# CFG_SYS_TIMER_RATE has brackets in it for some boards which
|
2021-12-19 02:27:29 +08:00
|
|
|
@# confuses this rule. Use if() to send just a single character which
|
|
|
|
@# is enable to tell 'deprecated' that one of these symbols exists
|
2022-11-17 02:10:41 +08:00
|
|
|
$(call deprecated,CONFIG_TIMER,Timer drivers,v2023.01,$(if $(strip $(CFG_SYS_TIMER_RATE)$(CFG_SYS_TIMER_COUNTER)),x))
|
2022-01-22 20:03:50 +08:00
|
|
|
$(call deprecated,CONFIG_DM_SERIAL,Serial drivers,v2023.04,$(CONFIG_SERIAL))
|
2022-01-31 22:49:38 +08:00
|
|
|
$(call deprecated,CONFIG_DM_SCSI,SCSI drivers,v2023.04,$(CONFIG_SCSI))
|
2021-12-17 11:59:37 +08:00
|
|
|
@# Check that this build does not override OF_HAS_PRIOR_STAGE by
|
|
|
|
@# disabling OF_BOARD.
|
|
|
|
$(call cmd,ofcheck,$(KCONFIG_CONFIG))
|
2002-11-03 07:17:16 +08:00
|
|
|
|
2014-02-05 10:28:25 +08:00
|
|
|
PHONY += dtbs
|
2016-06-23 12:53:46 +08:00
|
|
|
dtbs: dts/dt.dtb
|
|
|
|
@:
|
2017-09-24 01:00:57 +08:00
|
|
|
dts/dt.dtb: u-boot
|
2014-02-05 10:28:25 +08:00
|
|
|
$(Q)$(MAKE) $(build)=dts dtbs
|
2011-10-25 03:15:31 +08:00
|
|
|
|
2016-02-01 09:10:50 +08:00
|
|
|
quiet_cmd_copy = COPY $@
|
|
|
|
cmd_copy = cp $< $@
|
|
|
|
|
2017-09-15 18:57:24 +08:00
|
|
|
ifeq ($(CONFIG_MULTI_DTB_FIT),y)
|
2017-06-17 06:25:13 +08:00
|
|
|
|
2019-03-08 23:06:55 +08:00
|
|
|
ifeq ($(CONFIG_MULTI_DTB_FIT_LZO),y)
|
|
|
|
FINAL_DTB_CONTAINER = fit-dtb.blob.lzo
|
|
|
|
else ifeq ($(CONFIG_MULTI_DTB_FIT_GZIP),y)
|
|
|
|
FINAL_DTB_CONTAINER = fit-dtb.blob.gz
|
|
|
|
else
|
|
|
|
FINAL_DTB_CONTAINER = fit-dtb.blob
|
|
|
|
endif
|
|
|
|
|
|
|
|
fit-dtb.blob.gz: fit-dtb.blob
|
|
|
|
@gzip -kf9 $< > $@
|
|
|
|
|
|
|
|
fit-dtb.blob.lzo: fit-dtb.blob
|
|
|
|
@lzop -f9 $< > $@
|
|
|
|
|
2017-06-17 06:25:13 +08:00
|
|
|
fit-dtb.blob: dts/dt.dtb FORCE
|
|
|
|
$(call if_changed,mkimage)
|
2019-05-03 02:14:12 +08:00
|
|
|
ifneq ($(SOURCE_DATE_EPOCH),)
|
|
|
|
touch -d @$(SOURCE_DATE_EPOCH) fit-dtb.blob
|
|
|
|
chmod 0600 fit-dtb.blob
|
|
|
|
endif
|
2017-06-17 06:25:13 +08:00
|
|
|
|
|
|
|
MKIMAGEFLAGS_fit-dtb.blob = -f auto -A $(ARCH) -T firmware -C none -O u-boot \
|
|
|
|
-a 0 -e 0 -E \
|
|
|
|
$(patsubst %,-b arch/$(ARCH)/dts/%.dtb,$(subst ",,$(CONFIG_OF_LIST))) -d /dev/null
|
|
|
|
|
2021-08-19 17:09:37 +08:00
|
|
|
MKIMAGEFLAGS_fit-dtb.blob += -B 0x8
|
|
|
|
|
2019-03-23 13:43:00 +08:00
|
|
|
ifneq ($(EXT_DTB),)
|
|
|
|
u-boot-fit-dtb.bin: u-boot-nodtb.bin $(EXT_DTB)
|
|
|
|
$(call if_changed,cat)
|
|
|
|
else
|
2019-05-20 06:09:05 +08:00
|
|
|
u-boot-fit-dtb.bin: u-boot-nodtb.bin $(FINAL_DTB_CONTAINER)
|
2017-06-17 06:25:13 +08:00
|
|
|
$(call if_changed,cat)
|
2019-03-23 13:43:00 +08:00
|
|
|
endif
|
2017-06-17 06:25:13 +08:00
|
|
|
|
|
|
|
u-boot.bin: u-boot-fit-dtb.bin FORCE
|
|
|
|
$(call if_changed,copy)
|
2019-05-28 19:44:31 +08:00
|
|
|
|
2023-01-25 01:06:50 +08:00
|
|
|
ifneq ($(CONFIG_MPC85XX_HAVE_RESET_VECTOR)$(CONFIG_OF_SEPARATE),yy)
|
2019-05-28 19:44:31 +08:00
|
|
|
u-boot-dtb.bin: u-boot-nodtb.bin dts/dt.dtb FORCE
|
|
|
|
$(call if_changed,cat)
|
2023-01-25 01:06:50 +08:00
|
|
|
endif
|
2019-05-28 19:44:31 +08:00
|
|
|
|
2021-12-17 11:59:38 +08:00
|
|
|
else ifeq ($(CONFIG_OF_SEPARATE).$(CONFIG_OF_OMIT_DTB),y.)
|
2023-01-25 01:06:50 +08:00
|
|
|
|
|
|
|
ifneq ($(CONFIG_MPC85XX_HAVE_RESET_VECTOR)$(CONFIG_OF_SEPARATE),yy)
|
2016-02-01 09:10:50 +08:00
|
|
|
u-boot-dtb.bin: u-boot-nodtb.bin dts/dt.dtb FORCE
|
2014-02-24 10:12:16 +08:00
|
|
|
$(call if_changed,cat)
|
2023-01-25 01:06:50 +08:00
|
|
|
endif
|
2011-10-25 03:15:31 +08:00
|
|
|
|
2016-02-01 09:10:50 +08:00
|
|
|
u-boot.bin: u-boot-dtb.bin FORCE
|
|
|
|
$(call if_changed,copy)
|
2022-08-01 23:42:20 +08:00
|
|
|
|
2023-01-25 01:06:50 +08:00
|
|
|
else
|
2016-02-01 09:10:50 +08:00
|
|
|
u-boot.bin: u-boot-nodtb.bin FORCE
|
|
|
|
$(call if_changed,copy)
|
|
|
|
endif
|
|
|
|
|
Makefile: fix dependency for imx targets
imx targets are defined in arch/arm/mach-imx/Makefile.
Some of them are dependent on targets defined in main
Makefile. For the Makefile in arch/arm/mach-imx this
targets must be finished before the imx targets are
build, if not you get for example the error:
make -f /home/hs/abb/mainlining/u-boot/scripts/Makefile.build obj=arch/arm/mach-imx u-boot-dtb.imx
make[2]: *** No rule to make target 'u-boot-fit-dtb.bin', needed by 'u-boot-dtb.imx'. Stop.
make[1]: *** [/home/hs/abb/mainlining/u-boot/Makefile:1123: u-boot-dtb.imx] Error 2
make[1]: *** Waiting for unfinished jobs....
make[1]: Leaving directory '/work/hs/compile/u-boot/aristainetos2_defconfig'
make: *** [Makefile:148: sub-make] Error 2
compile failed
In above case of CONFIG_MULTI_DTB_FIT is defined, the
u-boot-dtb.imx is dependent on the u-boot-fit-dtb.bin
which may is not build yet ...
I could reproduce this error on a travis build also if
I build an out-of-tree build on a local machine with a
build directory on a "slow" slow storage device. If
building the same source target with a build dir on a
fast storage device, the build works.
I found no solution to tell the arch/arm/mach-imx/Makefile
to find the targets in main Makefile, if there is a way
this would be the better fix.
I solved it by adding a IMX_DEPS var, which holds a list
of main u-boot targets, which must be finished, before
calling imx targets and fixed the build for imx
targets which enabled CONFIG_MULTI_DTB_FIT.
I think it is just luck, that imx targets with
CONFIG_OF_SEPARATE enabled build, because the
u-boot-dtb.imx target depends on u-boot-dtb.bin
which gets build early enough before starting with
u-boot-dtb.imx. May this targets should be fixed too.
Signed-off-by: Heiko Schocher <hs@denx.de>
Reviewed-by: Tom Rini <trini@konsulko.com>
2019-10-25 20:46:54 +08:00
|
|
|
# we call Makefile in arch/arm/mach-imx which
|
|
|
|
# has targets which are dependent on targets defined
|
|
|
|
# here. make could not resolve them and we must ensure
|
|
|
|
# that they are finished before calling imx targets
|
|
|
|
ifeq ($(CONFIG_MULTI_DTB_FIT),y)
|
|
|
|
IMX_DEPS = u-boot-fit-dtb.bin
|
|
|
|
endif
|
|
|
|
|
|
|
|
%.imx: $(IMX_DEPS) %.bin
|
2017-06-29 16:16:06 +08:00
|
|
|
$(Q)$(MAKE) $(build)=arch/arm/mach-imx $@
|
2019-04-03 01:19:05 +08:00
|
|
|
$(BOARD_SIZE_CHECK)
|
2014-03-31 15:50:35 +08:00
|
|
|
|
2016-09-26 15:08:06 +08:00
|
|
|
%.vyb: %.imx
|
|
|
|
$(Q)$(MAKE) $(build)=arch/arm/cpu/armv7/vf610 $@
|
|
|
|
|
|
|
|
quiet_cmd_copy = COPY $@
|
|
|
|
cmd_copy = cp $< $@
|
|
|
|
|
2014-02-21 14:34:30 +08:00
|
|
|
u-boot.dtb: dts/dt.dtb
|
|
|
|
$(call cmd,copy)
|
|
|
|
|
2014-02-24 10:12:14 +08:00
|
|
|
OBJCOPYFLAGS_u-boot.hex := -O ihex
|
2005-01-10 05:28:15 +08:00
|
|
|
|
2014-02-24 10:12:14 +08:00
|
|
|
OBJCOPYFLAGS_u-boot.srec := -O srec
|
2002-11-03 07:17:16 +08:00
|
|
|
|
2014-02-24 10:12:14 +08:00
|
|
|
u-boot.hex u-boot.srec: u-boot FORCE
|
|
|
|
$(call if_changed,objcopy)
|
|
|
|
|
2015-08-28 11:12:45 +08:00
|
|
|
OBJCOPYFLAGS_u-boot-elf.srec := $(OBJCOPYFLAGS_u-boot.srec)
|
|
|
|
|
|
|
|
u-boot-elf.srec: u-boot.elf FORCE
|
|
|
|
$(call if_changed,objcopy)
|
|
|
|
|
2018-02-27 03:14:02 +08:00
|
|
|
OBJCOPYFLAGS_u-boot-spl.srec = $(OBJCOPYFLAGS_u-boot.srec)
|
|
|
|
|
|
|
|
spl/u-boot-spl.srec: spl/u-boot-spl FORCE
|
|
|
|
$(call if_changed,objcopy)
|
|
|
|
|
ARM: rmobile: Add recovery SPL for R-Car Gen3
Build an SPL which can be started via SCIF download mode on R-Car Gen3
and allows loading and executing U-Boot uImage with the next stage code.
This is also useful for starting e.g. ATF BL2, which inits the hardware
and returns to the U-Boot SPL, which can then load e.g. U-Boot proper.
The H3, M3-W, M3-N SoCs have plenty of SRAM for storing the U-Boot SPL
while the payload, e.g. ATF BL2, executes, so there is no problem here.
However, E3 and D3 have much less SRAM, hence the loader uses a trick
where it copies itself beyond the area used by BL2 and executes from
there. That area is 32kiB large and not enough to hold U-Boot SPL, BSS,
stack and malloc area, so the later two are placed at +0x4000 offset
from start of SRAM, another area not used by ATF BL2. To make things
even more complicated, the SCIF loader cannot load to the upper 32kiB
of the SRAM directly, hence the copying approach.
Signed-off-by: Marek Vasut <marek.vasut+renesas@gmail.com>
Cc: Nobuhiro Iwamatsu <iwamatsu@nigauri.org>
2018-10-03 18:44:13 +08:00
|
|
|
%.scif: %.srec
|
|
|
|
$(Q)$(MAKE) $(build)=arch/arm/mach-rmobile $@
|
|
|
|
|
2016-02-01 09:10:50 +08:00
|
|
|
OBJCOPYFLAGS_u-boot-nodtb.bin := -O binary \
|
2018-09-04 00:05:10 +08:00
|
|
|
$(if $(CONFIG_X86_16BIT_INIT),-R .start16 -R .resetvec) \
|
2022-08-04 05:56:55 +08:00
|
|
|
$(if $(CONFIG_MPC85XX_HAVE_RESET_VECTOR),$(if $(CONFIG_OF_SEPARATE),-R .bootpg -R .resetvec))
|
2014-02-24 10:12:14 +08:00
|
|
|
|
2016-02-01 09:10:50 +08:00
|
|
|
binary_size_check: u-boot-nodtb.bin FORCE
|
|
|
|
@file_size=$(shell wc -c u-boot-nodtb.bin | awk '{print $$1}') ; \
|
2014-07-24 13:27:07 +08:00
|
|
|
map_size=$(shell cat u-boot.map | \
|
2014-06-18 14:10:15 +08:00
|
|
|
awk '/_image_copy_start/ {start = $$1} /_image_binary_end/ {end = $$1} END {if (start != "" && end != "") print "ibase=16; " toupper(end) " - " toupper(start)}' \
|
2014-07-24 13:27:07 +08:00
|
|
|
| sed 's/0X//g' \
|
2014-06-18 14:10:15 +08:00
|
|
|
| bc); \
|
2014-06-03 12:04:47 +08:00
|
|
|
if [ "" != "$$map_size" ]; then \
|
|
|
|
if test $$map_size -ne $$file_size; then \
|
2014-07-24 13:27:07 +08:00
|
|
|
echo "u-boot.map shows a binary size of $$map_size" >&2 ; \
|
2016-02-01 09:10:50 +08:00
|
|
|
echo " but u-boot-nodtb.bin shows $$file_size" >&2 ; \
|
2014-06-03 12:04:47 +08:00
|
|
|
exit 1; \
|
2021-11-05 23:20:24 +08:00
|
|
|
fi; \
|
2014-06-03 12:04:47 +08:00
|
|
|
fi
|
|
|
|
|
2020-03-10 08:20:43 +08:00
|
|
|
ifeq ($(CONFIG_INIT_SP_RELATIVE)$(CONFIG_OF_SEPARATE),yy)
|
2018-01-10 03:52:14 +08:00
|
|
|
ifneq ($(CONFIG_SYS_MALLOC_F_LEN),)
|
|
|
|
subtract_sys_malloc_f_len = space=$$(($${space} - $(CONFIG_SYS_MALLOC_F_LEN)))
|
|
|
|
else
|
|
|
|
subtract_sys_malloc_f_len = true
|
|
|
|
endif
|
|
|
|
# The 1/4 margin below is somewhat arbitrary. The likely initial SP usage is
|
|
|
|
# so low that the DTB could probably use 90%+ of the available space, for
|
|
|
|
# current values of CONFIG_SYS_INIT_SP_BSS_OFFSET at least. However, let's be
|
|
|
|
# safe for now and tweak this later if space becomes tight.
|
|
|
|
# A rejected alternative would be to check that some absolute minimum stack
|
|
|
|
# space was available. However, since CONFIG_SYS_INIT_SP_BSS_OFFSET is
|
|
|
|
# deliberately build-specific, to take account of build-to-build stack usage
|
|
|
|
# differences due to different feature sets, there is no common absolute value
|
|
|
|
# to check against.
|
|
|
|
init_sp_bss_offset_check: u-boot.dtb FORCE
|
|
|
|
@dtb_size=$(shell wc -c u-boot.dtb | awk '{print $$1}') ; \
|
|
|
|
space=$(CONFIG_SYS_INIT_SP_BSS_OFFSET) ; \
|
|
|
|
$(subtract_sys_malloc_f_len) ; \
|
|
|
|
quarter_space=$$(($${space} / 4)) ; \
|
|
|
|
if [ $${dtb_size} -gt $${quarter_space} ]; then \
|
|
|
|
echo "u-boot.dtb is larger than 1 quarter of " >&2 ; \
|
|
|
|
echo "(CONFIG_SYS_INIT_SP_BSS_OFFSET - CONFIG_SYS_MALLOC_F_LEN)" >&2 ; \
|
|
|
|
exit 1 ; \
|
|
|
|
fi
|
|
|
|
endif
|
|
|
|
|
2020-11-04 17:34:35 +08:00
|
|
|
shell_cmd = { $(call echo-cmd,$(1)) $(cmd_$(1)); }
|
2020-10-07 21:39:40 +08:00
|
|
|
|
|
|
|
quiet_cmd_objcopy_uboot = OBJCOPY $@
|
2020-11-04 22:33:44 +08:00
|
|
|
ifdef cmd_static_rela
|
2022-10-21 08:22:39 +08:00
|
|
|
cmd_objcopy_uboot = $(cmd_objcopy) && $(call shell_cmd,static_rela,$<,$@,$(CONFIG_TEXT_BASE)) || { rm -f $@; false; }
|
2020-11-04 22:33:44 +08:00
|
|
|
else
|
|
|
|
cmd_objcopy_uboot = $(cmd_objcopy)
|
|
|
|
endif
|
2020-10-07 21:39:40 +08:00
|
|
|
|
2016-02-01 09:10:50 +08:00
|
|
|
u-boot-nodtb.bin: u-boot FORCE
|
2020-10-07 21:39:40 +08:00
|
|
|
$(call if_changed,objcopy_uboot)
|
2014-02-24 10:12:14 +08:00
|
|
|
$(BOARD_SIZE_CHECK)
|
2002-11-03 07:17:16 +08:00
|
|
|
|
2014-02-04 16:24:24 +08:00
|
|
|
u-boot.ldr: u-boot
|
2009-07-22 10:17:36 +08:00
|
|
|
$(CREATE_LDR_ENV)
|
2014-08-12 18:45:26 +08:00
|
|
|
$(LDR) -T $(CONFIG_CPU) -c $@ $< $(LDR_FLAGS)
|
2010-10-14 10:58:23 +08:00
|
|
|
$(BOARD_SIZE_CHECK)
|
2008-02-05 08:26:57 +08:00
|
|
|
|
2016-11-26 11:15:57 +08:00
|
|
|
# binman
|
|
|
|
# ---------------------------------------------------------------------------
|
2018-11-07 06:21:31 +08:00
|
|
|
# Use 'make BINMAN_DEBUG=1' to enable debugging
|
2021-02-07 00:57:28 +08:00
|
|
|
# Use 'make BINMAN_VERBOSE=3' to set vebosity level
|
2020-09-07 00:39:08 +08:00
|
|
|
default_dt := $(if $(DEVICE_TREE),$(DEVICE_TREE),$(CONFIG_DEFAULT_DEVICE_TREE))
|
2021-03-18 15:25:08 +08:00
|
|
|
|
2016-11-26 11:15:57 +08:00
|
|
|
quiet_cmd_binman = BINMAN $@
|
2019-07-20 01:21:17 +08:00
|
|
|
cmd_binman = $(srctree)/tools/binman/binman $(if $(BINMAN_DEBUG),-D) \
|
2021-11-24 12:09:48 +08:00
|
|
|
$(foreach f,$(BINMAN_TOOLPATHS),--toolpath $(f)) \
|
2019-09-25 22:11:10 +08:00
|
|
|
--toolpath $(objtree)/tools \
|
2019-09-25 22:11:11 +08:00
|
|
|
$(if $(BINMAN_VERBOSE),-v$(BINMAN_VERBOSE)) \
|
2022-11-10 10:14:50 +08:00
|
|
|
build -u -d u-boot.dtb -O . -m \
|
2023-07-19 04:34:40 +08:00
|
|
|
--allow-missing $(if $(BINMAN_ALLOW_MISSING),--ignore-missing) \
|
2018-11-07 06:21:31 +08:00
|
|
|
-I . -I $(srctree) -I $(srctree)/board/$(BOARDDIR) \
|
2020-09-01 19:14:01 +08:00
|
|
|
-I arch/$(ARCH)/dts -a of-list=$(CONFIG_OF_LIST) \
|
2021-11-24 12:09:48 +08:00
|
|
|
$(foreach f,$(BINMAN_INDIRS),-I $(f)) \
|
2020-09-01 19:14:01 +08:00
|
|
|
-a atf-bl31-path=${BL31} \
|
2022-02-20 02:50:04 +08:00
|
|
|
-a tee-os-path=${TEE} \
|
2021-05-10 20:23:34 +08:00
|
|
|
-a opensbi-path=${OPENSBI} \
|
2020-09-07 00:39:08 +08:00
|
|
|
-a default-dt=$(default_dt) \
|
2020-10-22 10:12:15 +08:00
|
|
|
-a scp-path=$(SCP) \
|
2023-02-26 03:01:34 +08:00
|
|
|
-a rockchip-tpl-path=$(ROCKCHIP_TPL) \
|
2021-03-18 15:25:08 +08:00
|
|
|
-a spl-bss-pad=$(if $(CONFIG_SPL_SEPARATE_BSS),,1) \
|
|
|
|
-a tpl-bss-pad=$(if $(CONFIG_TPL_SEPARATE_BSS),,1) \
|
2021-08-07 21:24:07 +08:00
|
|
|
-a spl-dtb=$(CONFIG_SPL_OF_REAL) \
|
2021-11-01 09:17:03 +08:00
|
|
|
-a tpl-dtb=$(CONFIG_TPL_OF_REAL) \
|
2022-03-29 04:57:03 +08:00
|
|
|
-a pre-load-key-path=${PRE_LOAD_KEY_PATH} \
|
2019-07-20 01:21:17 +08:00
|
|
|
$(BINMAN_$(@F))
|
2016-11-26 11:15:57 +08:00
|
|
|
|
2014-02-24 10:12:14 +08:00
|
|
|
OBJCOPYFLAGS_u-boot.ldr.hex := -I binary -O ihex
|
|
|
|
|
|
|
|
OBJCOPYFLAGS_u-boot.ldr.srec := -I binary -O srec
|
2008-02-05 08:26:57 +08:00
|
|
|
|
2014-02-24 10:12:14 +08:00
|
|
|
u-boot.ldr.hex u-boot.ldr.srec: u-boot.ldr FORCE
|
|
|
|
$(call if_changed,objcopy)
|
2008-02-05 08:26:57 +08:00
|
|
|
|
2019-10-02 21:53:12 +08:00
|
|
|
# Boards with more complex image requirements can provide an .its source file
|
2017-04-26 08:32:45 +08:00
|
|
|
# or a generator script
|
2020-07-20 03:56:11 +08:00
|
|
|
# NOTE: Please do not use this. We are migrating away from Makefile rules to use
|
|
|
|
# binman instead.
|
2017-04-26 08:32:45 +08:00
|
|
|
ifneq ($(CONFIG_SPL_FIT_SOURCE),"")
|
2020-04-23 15:39:08 +08:00
|
|
|
U_BOOT_ITS := u-boot.its
|
|
|
|
$(U_BOOT_ITS): $(subst ",,$(CONFIG_SPL_FIT_SOURCE))
|
|
|
|
$(call if_changed,copy)
|
2017-04-26 08:32:45 +08:00
|
|
|
else
|
2020-07-20 03:56:10 +08:00
|
|
|
ifneq ($(CONFIG_USE_SPL_FIT_GENERATOR),)
|
2017-04-26 08:32:45 +08:00
|
|
|
U_BOOT_ITS := u-boot.its
|
2018-06-03 13:23:58 +08:00
|
|
|
$(U_BOOT_ITS): $(U_BOOT_ITS_DEPS) FORCE
|
2017-04-26 08:32:45 +08:00
|
|
|
$(srctree)/$(CONFIG_SPL_FIT_GENERATOR) \
|
|
|
|
$(patsubst %,arch/$(ARCH)/dts/%.dtb,$(subst ",,$(CONFIG_OF_LIST))) > $@
|
|
|
|
endif
|
|
|
|
endif
|
|
|
|
|
2016-02-23 13:55:57 +08:00
|
|
|
ifdef CONFIG_SPL_LOAD_FIT
|
|
|
|
MKIMAGEFLAGS_u-boot.img = -f auto -A $(ARCH) -T firmware -C none -O u-boot \
|
2023-08-25 09:59:48 +08:00
|
|
|
-a $(CONFIG_TEXT_BASE) -e $(CONFIG_SYS_UBOOT_START) \
|
2019-06-19 04:13:20 +08:00
|
|
|
-p $(CONFIG_FIT_EXTERNAL_OFFSET) \
|
2016-02-23 13:55:57 +08:00
|
|
|
-n "U-Boot $(UBOOTRELEASE) for $(BOARD) board" -E \
|
2021-02-10 02:41:55 +08:00
|
|
|
$(patsubst %,-b arch/$(ARCH)/dts/%.dtb,$(subst ",,$(DEVICE_TREE))) \
|
2019-10-22 22:39:21 +08:00
|
|
|
$(patsubst %,-b arch/$(ARCH)/dts/%.dtb,$(subst ",,$(CONFIG_OF_LIST))) \
|
|
|
|
$(patsubst %,-b arch/$(ARCH)/dts/%.dtbo,$(subst ",,$(CONFIG_OF_OVERLAY_LIST)))
|
2016-02-23 13:55:57 +08:00
|
|
|
else
|
2014-02-24 10:12:15 +08:00
|
|
|
MKIMAGEFLAGS_u-boot.img = -A $(ARCH) -T firmware -C none -O u-boot \
|
2023-08-25 09:59:48 +08:00
|
|
|
-a $(CONFIG_TEXT_BASE) -e $(CONFIG_SYS_UBOOT_START) \
|
2014-02-24 10:12:15 +08:00
|
|
|
-n "U-Boot $(UBOOTRELEASE) for $(BOARD) board"
|
2016-11-06 23:37:56 +08:00
|
|
|
MKIMAGEFLAGS_u-boot-ivt.img = -A $(ARCH) -T firmware_ivt -C none -O u-boot \
|
2023-08-25 09:59:48 +08:00
|
|
|
-a $(CONFIG_TEXT_BASE) -e $(CONFIG_SYS_UBOOT_START) \
|
2016-11-06 23:37:56 +08:00
|
|
|
-n "U-Boot $(UBOOTRELEASE) for $(BOARD) board"
|
2016-11-06 23:37:58 +08:00
|
|
|
u-boot-ivt.img: MKIMAGEOUTPUT = u-boot-ivt.img.log
|
2016-02-23 13:55:57 +08:00
|
|
|
endif
|
2003-08-06 01:43:17 +08:00
|
|
|
|
2016-02-01 09:10:54 +08:00
|
|
|
MKIMAGEFLAGS_u-boot-dtb.img = $(MKIMAGEFLAGS_u-boot.img)
|
|
|
|
|
2019-10-28 22:25:01 +08:00
|
|
|
# Some boards have the kwbimage.cfg file written in advance, while some
|
|
|
|
# other boards generate it on the fly during the build in the build tree.
|
|
|
|
# Let's check if the file exists in the build tree first, otherwise we
|
|
|
|
# fall back to use the one in the source tree.
|
|
|
|
KWD_CONFIG_FILE = $(shell \
|
|
|
|
if [ -f $(objtree)/$(CONFIG_SYS_KWD_CONFIG:"%"=%) ]; then \
|
|
|
|
echo -n $(objtree)/$(CONFIG_SYS_KWD_CONFIG:"%"=%); \
|
|
|
|
else \
|
|
|
|
echo -n $(srctree)/$(CONFIG_SYS_KWD_CONFIG:"%"=%); \
|
|
|
|
fi)
|
|
|
|
|
|
|
|
MKIMAGEFLAGS_u-boot.kwb = -n $(KWD_CONFIG_FILE) \
|
2022-10-21 08:22:39 +08:00
|
|
|
-T kwbimage -a $(CONFIG_TEXT_BASE) -e $(CONFIG_TEXT_BASE)
|
2010-01-21 01:19:10 +08:00
|
|
|
|
2022-11-03 01:51:28 +08:00
|
|
|
MKIMAGEFLAGS_u-boot-with-spl.kwb = -n $(KWD_CONFIG_FILE) \
|
2022-10-21 08:22:39 +08:00
|
|
|
-T kwbimage -a $(CONFIG_TEXT_BASE) -e $(CONFIG_TEXT_BASE) \
|
2017-01-11 23:01:00 +08:00
|
|
|
$(if $(KEYDIR),-k $(KEYDIR))
|
2015-01-19 18:33:45 +08:00
|
|
|
|
2014-03-11 10:05:16 +08:00
|
|
|
MKIMAGEFLAGS_u-boot.pbl = -n $(srctree)/$(CONFIG_SYS_FSL_PBL_RCW:"%"=%) \
|
2022-02-17 11:51:36 +08:00
|
|
|
-R $(srctree)/$(CONFIG_SYS_FSL_PBL_PBI:"%"=%) -A $(ARCH) -T pblimage
|
2009-09-07 17:35:02 +08:00
|
|
|
|
2019-08-20 17:35:23 +08:00
|
|
|
UBOOT_BIN := u-boot.bin
|
|
|
|
|
2020-04-21 15:28:39 +08:00
|
|
|
MKIMAGEFLAGS_u-boot-lzma.img = -A $(ARCH) -T standalone -C lzma -O u-boot \
|
2023-08-25 09:59:48 +08:00
|
|
|
-a $(CONFIG_TEXT_BASE) -e $(CONFIG_SYS_UBOOT_START) \
|
2020-04-21 15:28:39 +08:00
|
|
|
-n "U-Boot $(UBOOTRELEASE) for $(BOARD) board"
|
|
|
|
|
|
|
|
u-boot.bin.lzma: u-boot.bin FORCE
|
|
|
|
$(call if_changed,lzma)
|
|
|
|
|
|
|
|
u-boot-lzma.img: u-boot.bin.lzma FORCE
|
|
|
|
$(call if_changed,mkimage)
|
|
|
|
|
2016-11-06 23:37:56 +08:00
|
|
|
u-boot-dtb.img u-boot.img u-boot.kwb u-boot.pbl u-boot-ivt.img: \
|
2019-08-22 03:14:41 +08:00
|
|
|
$(if $(CONFIG_SPL_LOAD_FIT),u-boot-nodtb.bin \
|
2021-12-17 11:59:22 +08:00
|
|
|
$(if $(CONFIG_OF_SEPARATE)$(CONFIG_OF_EMBED)$(CONFIG_SANDBOX),dts/dt.dtb) \
|
2019-08-27 19:11:37 +08:00
|
|
|
,$(UBOOT_BIN)) FORCE
|
2014-02-24 10:12:15 +08:00
|
|
|
$(call if_changed,mkimage)
|
2019-01-12 03:56:02 +08:00
|
|
|
$(BOARD_SIZE_CHECK)
|
2014-02-24 10:12:15 +08:00
|
|
|
|
2019-03-07 05:04:00 +08:00
|
|
|
ifeq ($(CONFIG_SPL_LOAD_FIT_FULL),y)
|
|
|
|
MKIMAGEFLAGS_u-boot.itb =
|
|
|
|
else
|
|
|
|
MKIMAGEFLAGS_u-boot.itb = -E
|
|
|
|
endif
|
2021-08-19 17:09:37 +08:00
|
|
|
MKIMAGEFLAGS_u-boot.itb += -B 0x8
|
2019-03-07 05:04:00 +08:00
|
|
|
|
2020-10-22 10:12:08 +08:00
|
|
|
ifdef U_BOOT_ITS
|
2019-08-22 03:14:41 +08:00
|
|
|
u-boot.itb: u-boot-nodtb.bin \
|
2021-10-26 14:12:33 +08:00
|
|
|
$(if $(CONFIG_OF_SEPARATE)$(CONFIG_OF_EMBED)$(CONFIG_SANDBOX),dts/dt.dtb) \
|
2022-12-21 15:54:46 +08:00
|
|
|
$(if $(CONFIG_MULTI_DTB_FIT),$(FINAL_DTB_CONTAINER)) \
|
2019-08-22 03:14:41 +08:00
|
|
|
$(U_BOOT_ITS) FORCE
|
2017-04-26 08:32:45 +08:00
|
|
|
$(call if_changed,mkfitimage)
|
2018-01-16 16:44:23 +08:00
|
|
|
$(BOARD_SIZE_CHECK)
|
2020-10-22 10:12:08 +08:00
|
|
|
endif
|
2017-04-26 08:32:45 +08:00
|
|
|
|
2022-11-03 01:51:28 +08:00
|
|
|
u-boot-with-spl.kwb: u-boot.bin spl/u-boot-spl.bin FORCE
|
2015-01-19 18:33:45 +08:00
|
|
|
$(call if_changed,mkimage)
|
2022-09-14 21:06:14 +08:00
|
|
|
$(BOARD_SIZE_CHECK)
|
2015-01-19 18:33:45 +08:00
|
|
|
|
2014-02-04 16:24:24 +08:00
|
|
|
u-boot.dis: u-boot
|
2002-11-03 07:17:16 +08:00
|
|
|
$(OBJDUMP) -d $< > $@
|
|
|
|
|
2018-06-15 05:38:48 +08:00
|
|
|
ifneq ($(CONFIG_SPL_PAYLOAD),)
|
|
|
|
SPL_PAYLOAD := $(CONFIG_SPL_PAYLOAD:"%"=%)
|
2013-08-16 15:16:15 +08:00
|
|
|
else
|
2014-02-04 16:24:24 +08:00
|
|
|
SPL_PAYLOAD := u-boot.bin
|
2013-08-16 15:16:15 +08:00
|
|
|
endif
|
2012-12-06 21:33:16 +08:00
|
|
|
|
2019-04-03 21:24:50 +08:00
|
|
|
SPL_IMAGE := $(CONFIG_SPL_IMAGE:"%"=%)
|
|
|
|
|
2014-02-24 10:12:17 +08:00
|
|
|
OBJCOPYFLAGS_u-boot-with-spl.bin = -I binary -O binary \
|
|
|
|
--pad-to=$(CONFIG_SPL_PAD_TO)
|
2019-04-03 21:24:50 +08:00
|
|
|
u-boot-with-spl.bin: $(SPL_IMAGE) $(SPL_PAYLOAD) FORCE
|
2014-02-24 10:12:17 +08:00
|
|
|
$(call if_changed,pad_cat)
|
2013-08-16 15:16:15 +08:00
|
|
|
|
2018-09-18 02:43:04 +08:00
|
|
|
ifeq ($(CONFIG_ARCH_LPC32XX)$(CONFIG_SPL),yy)
|
2015-03-31 17:40:51 +08:00
|
|
|
MKIMAGEFLAGS_lpc32xx-spl.img = -T lpc32xximage -a $(CONFIG_SPL_TEXT_BASE)
|
|
|
|
|
|
|
|
lpc32xx-spl.img: spl/u-boot-spl.bin FORCE
|
|
|
|
$(call if_changed,mkimage)
|
|
|
|
|
|
|
|
OBJCOPYFLAGS_lpc32xx-boot-0.bin = -I binary -O binary --pad-to=$(CONFIG_SPL_PAD_TO)
|
|
|
|
|
2016-02-05 16:55:13 +08:00
|
|
|
lpc32xx-boot-0.bin: lpc32xx-spl.img FORCE
|
2015-03-31 17:40:51 +08:00
|
|
|
$(call if_changed,objcopy)
|
|
|
|
|
|
|
|
OBJCOPYFLAGS_lpc32xx-boot-1.bin = -I binary -O binary --pad-to=$(CONFIG_SPL_PAD_TO)
|
|
|
|
|
2016-02-05 16:55:13 +08:00
|
|
|
lpc32xx-boot-1.bin: lpc32xx-spl.img FORCE
|
2015-03-31 17:40:51 +08:00
|
|
|
$(call if_changed,objcopy)
|
|
|
|
|
2016-02-05 16:55:13 +08:00
|
|
|
lpc32xx-full.bin: lpc32xx-boot-0.bin lpc32xx-boot-1.bin u-boot.img FORCE
|
2015-03-31 17:40:51 +08:00
|
|
|
$(call if_changed,cat)
|
|
|
|
|
2018-09-18 02:43:04 +08:00
|
|
|
endif
|
2015-03-31 17:40:51 +08:00
|
|
|
|
2014-02-24 10:12:17 +08:00
|
|
|
OBJCOPYFLAGS_u-boot-with-tpl.bin = -I binary -O binary \
|
|
|
|
--pad-to=$(CONFIG_TPL_PAD_TO)
|
|
|
|
tpl/u-boot-with-tpl.bin: tpl/u-boot-tpl.bin u-boot.bin FORCE
|
|
|
|
$(call if_changed,pad_cat)
|
2011-07-16 08:06:42 +08:00
|
|
|
|
2014-02-24 10:12:21 +08:00
|
|
|
SPL: spl/u-boot-spl.bin FORCE
|
2017-06-29 16:16:06 +08:00
|
|
|
$(Q)$(MAKE) $(build)=arch/arm/mach-imx $@
|
2014-02-24 10:12:21 +08:00
|
|
|
|
2022-08-23 22:29:10 +08:00
|
|
|
#ifeq ($(CONFIG_ARCH_IMX8M)$(CONFIG_ARCH_IMX8), y)
|
2019-08-22 15:42:41 +08:00
|
|
|
ifeq ($(CONFIG_SPL_LOAD_IMX_CONTAINER), y)
|
|
|
|
u-boot.cnt: u-boot.bin FORCE
|
|
|
|
$(Q)$(MAKE) $(build)=arch/arm/mach-imx $@
|
|
|
|
|
|
|
|
flash.bin: spl/u-boot-spl.bin u-boot.cnt FORCE
|
|
|
|
$(Q)$(MAKE) $(build)=arch/arm/mach-imx $@
|
|
|
|
else
|
2021-02-26 04:50:59 +08:00
|
|
|
ifeq ($(CONFIG_BINMAN),y)
|
|
|
|
flash.bin: spl/u-boot-spl.bin $(INPUTS-y) FORCE
|
|
|
|
$(call if_changed,binman)
|
|
|
|
else
|
2018-11-20 18:19:46 +08:00
|
|
|
flash.bin: spl/u-boot-spl.bin u-boot.itb FORCE
|
|
|
|
$(Q)$(MAKE) $(build)=arch/arm/mach-imx $@
|
|
|
|
endif
|
2019-08-22 15:42:41 +08:00
|
|
|
endif
|
2022-08-23 22:29:10 +08:00
|
|
|
#endif
|
2018-11-20 18:19:46 +08:00
|
|
|
|
2021-03-01 23:41:28 +08:00
|
|
|
u-boot.uim: u-boot.bin FORCE
|
|
|
|
$(Q)$(MAKE) $(build)=arch/arm/mach-imx $@
|
|
|
|
|
2023-03-10 18:07:52 +08:00
|
|
|
u-boot-nand.imx: u-boot.imx FORCE
|
|
|
|
$(Q)$(MAKE) $(build)=arch/arm/mach-imx $@
|
|
|
|
|
2021-03-01 23:41:28 +08:00
|
|
|
u-boot-with-spl.imx u-boot-with-nand-spl.imx: SPL $(if $(CONFIG_OF_SEPARATE),u-boot.img,u-boot.uim) FORCE
|
2017-06-29 16:16:06 +08:00
|
|
|
$(Q)$(MAKE) $(build)=arch/arm/mach-imx $@
|
2013-04-11 17:35:57 +08:00
|
|
|
|
2022-10-21 08:22:39 +08:00
|
|
|
MKIMAGEFLAGS_u-boot.ubl = -n $(UBL_CONFIG) -T ublimage -e $(CONFIG_TEXT_BASE)
|
2014-02-24 10:12:15 +08:00
|
|
|
|
|
|
|
u-boot.ubl: u-boot-with-spl.bin FORCE
|
|
|
|
$(call if_changed,mkimage)
|
2012-09-19 09:25:26 +08:00
|
|
|
|
2023-02-02 04:19:17 +08:00
|
|
|
MKIMAGEFLAGS_u-boot-spl.ais = -s -n "/dev/null" \
|
2014-02-24 10:12:17 +08:00
|
|
|
-T aisimage -e $(CONFIG_SPL_TEXT_BASE)
|
|
|
|
spl/u-boot-spl.ais: spl/u-boot-spl.bin FORCE
|
|
|
|
$(call if_changed,mkimage)
|
2011-12-09 17:47:39 +08:00
|
|
|
|
2014-05-07 16:16:28 +08:00
|
|
|
OBJCOPYFLAGS_u-boot.ais = -I binary -O binary --pad-to=$(CONFIG_SPL_PAD_TO)
|
2014-02-24 10:12:17 +08:00
|
|
|
u-boot.ais: spl/u-boot-spl.ais u-boot.img FORCE
|
|
|
|
$(call if_changed,pad_cat)
|
2012-08-18 15:25:25 +08:00
|
|
|
|
arm: mxs: Add support for generating signed BootStream
This patch adds the groundwork for generating signed BootStream, which
can be used by the HAB library in i.MX28. We are adding a new target,
u-boot-signed.sb , since the process for generating regular non-signed
BootStream is much easier. Moreover, the signed bootstream depends on
external _proprietary_ _binary-only_ tool from Freescale called 'cst',
which is available only under NDA.
To make things even uglier, the CST or HAB mandates a kind-of circular
dependency. The problem is, unlike the regular IVT, which is generated
by mxsimage, the IVT for signed boot must be generated by hand here due
to special demands of the CST. The U-Boot binary (or SPL binary) and IVT
are then signed by the CST as a one block. But here is the problem. The
size of the entire image (U-Boot, IVT, CST blocks) must be appended at
the end of IVT. But the size of the entire image is not known until the
CST has finished signing the U-Boot and IVT. We solve this by expecting
the CST block to be always 3904B (which it is in case two files, U-Boot
and the hand-made IVT, are signed in the CST block).
Signed-off-by: Marek Vasut <marex@denx.de>
Cc: Stefano Babic <sbabic@denx.de>
2014-04-04 01:12:21 +08:00
|
|
|
u-boot-signed.sb: u-boot.bin spl/u-boot-spl.bin
|
|
|
|
$(Q)$(MAKE) $(build)=arch/arm/cpu/arm926ejs/mxs u-boot-signed.sb
|
2014-02-24 10:12:13 +08:00
|
|
|
u-boot.sb: u-boot.bin spl/u-boot-spl.bin
|
2014-03-11 10:05:11 +08:00
|
|
|
$(Q)$(MAKE) $(build)=arch/arm/cpu/arm926ejs/mxs u-boot.sb
|
2011-11-09 07:18:19 +08:00
|
|
|
|
2014-02-24 10:12:17 +08:00
|
|
|
MKIMAGEFLAGS_u-boot-spl.img = -A $(ARCH) -T firmware -C none \
|
|
|
|
-a $(CONFIG_SPL_TEXT_BASE) -e $(CONFIG_SPL_TEXT_BASE) -n XLOADER
|
|
|
|
spl/u-boot-spl.img: spl/u-boot-spl.bin FORCE
|
|
|
|
$(call if_changed,mkimage)
|
|
|
|
|
2015-07-15 08:53:45 +08:00
|
|
|
ifneq ($(CONFIG_ARCH_SOCFPGA),)
|
2020-08-11 21:52:30 +08:00
|
|
|
quiet_cmd_gensplx4 = GENSPLX4 $@
|
2021-01-13 18:53:05 +08:00
|
|
|
cmd_gensplx4 = $(OBJCOPY) -I binary -O binary --gap-fill=0x0 \
|
|
|
|
--pad-to=$(CONFIG_SPL_PAD_TO) \
|
|
|
|
spl/u-boot-spl.sfp spl/u-boot-spl.sfp && \
|
|
|
|
cat spl/u-boot-spl.sfp spl/u-boot-spl.sfp \
|
2020-10-26 21:10:49 +08:00
|
|
|
spl/u-boot-spl.sfp spl/u-boot-spl.sfp > $@ || { rm -f $@; false; }
|
2020-08-11 21:52:30 +08:00
|
|
|
spl/u-boot-splx4.sfp: spl/u-boot-spl.sfp FORCE
|
|
|
|
$(call if_changed,gensplx4)
|
|
|
|
|
2015-07-15 08:53:45 +08:00
|
|
|
quiet_cmd_socboot = SOCBOOT $@
|
2020-10-26 21:10:49 +08:00
|
|
|
cmd_socboot = cat spl/u-boot-splx4.sfp u-boot.img > $@ || { rm -f $@; false; }
|
2020-08-11 21:52:30 +08:00
|
|
|
u-boot-with-spl.sfp: spl/u-boot-splx4.sfp u-boot.img FORCE
|
2015-07-15 08:53:45 +08:00
|
|
|
$(call if_changed,socboot)
|
2019-11-21 05:36:45 +08:00
|
|
|
|
2020-08-11 21:52:30 +08:00
|
|
|
quiet_cmd_gensplpadx4 = GENSPLPADX4 $@
|
|
|
|
cmd_gensplpadx4 = dd if=/dev/zero of=spl/u-boot-spl.pad bs=64 count=1024 ; \
|
2019-11-21 05:36:45 +08:00
|
|
|
cat spl/u-boot-spl.sfp spl/u-boot-spl.pad \
|
|
|
|
spl/u-boot-spl.sfp spl/u-boot-spl.pad \
|
|
|
|
spl/u-boot-spl.sfp spl/u-boot-spl.pad \
|
2020-08-11 21:52:30 +08:00
|
|
|
spl/u-boot-spl.sfp spl/u-boot-spl.pad > $@ || \
|
2020-10-26 21:10:49 +08:00
|
|
|
{ rm -f $@ spl/u-boot-spl.pad; false; }
|
2020-08-11 21:52:30 +08:00
|
|
|
u-boot-spl-padx4.sfp: spl/u-boot-spl.sfp FORCE
|
|
|
|
$(call if_changed,gensplpadx4)
|
|
|
|
|
|
|
|
quiet_cmd_socnandboot = SOCNANDBOOT $@
|
2020-10-26 21:10:49 +08:00
|
|
|
cmd_socnandboot = cat u-boot-spl-padx4.sfp u-boot.img > $@ || { rm -f $@; false; }
|
2020-08-11 21:52:30 +08:00
|
|
|
u-boot-with-nand-spl.sfp: u-boot-spl-padx4.sfp u-boot.img FORCE
|
2019-11-21 05:36:45 +08:00
|
|
|
$(call if_changed,socnandboot)
|
|
|
|
|
2015-07-15 08:53:45 +08:00
|
|
|
endif
|
|
|
|
|
2022-08-03 19:24:42 +08:00
|
|
|
ifeq ($(CONFIG_MPC85XX_HAVE_RESET_VECTOR)$(CONFIG_OF_SEPARATE),yy)
|
2023-01-25 01:06:50 +08:00
|
|
|
u-boot-dtb.bin: u-boot-nodtb.bin u-boot.dtb u-boot-br.bin FORCE
|
2018-09-04 00:05:10 +08:00
|
|
|
$(call if_changed,binman)
|
|
|
|
|
|
|
|
OBJCOPYFLAGS_u-boot-br.bin := -O binary -j .bootpg -j .resetvec
|
|
|
|
u-boot-br.bin: u-boot FORCE
|
|
|
|
$(call if_changed,objcopy)
|
|
|
|
endif
|
|
|
|
|
2016-03-12 13:07:16 +08:00
|
|
|
quiet_cmd_ldr = LD $@
|
|
|
|
cmd_ldr = $(LD) $(LDFLAGS_$(@F)) \
|
|
|
|
$(filter-out FORCE,$^) -o $@
|
|
|
|
|
2020-07-20 03:55:52 +08:00
|
|
|
ifdef CONFIG_X86
|
2019-08-24 21:22:49 +08:00
|
|
|
OBJCOPYFLAGS_u-boot-x86-start16.bin := -O binary -j .start16
|
|
|
|
u-boot-x86-start16.bin: u-boot FORCE
|
|
|
|
$(call if_changed,objcopy)
|
|
|
|
|
|
|
|
OBJCOPYFLAGS_u-boot-x86-reset16.bin := -O binary -j .resetvec
|
|
|
|
u-boot-x86-reset16.bin: u-boot FORCE
|
2014-11-13 13:42:08 +08:00
|
|
|
$(call if_changed,objcopy)
|
2020-07-20 03:55:54 +08:00
|
|
|
|
2020-07-20 03:56:03 +08:00
|
|
|
endif # CONFIG_X86
|
2020-07-20 03:55:52 +08:00
|
|
|
|
2015-08-05 02:33:43 +08:00
|
|
|
OBJCOPYFLAGS_u-boot-app.efi := $(OBJCOPYFLAGS_EFI)
|
|
|
|
u-boot-app.efi: u-boot FORCE
|
|
|
|
$(call if_changed,zobjcopy)
|
|
|
|
|
2016-02-01 09:10:55 +08:00
|
|
|
u-boot.bin.o: u-boot.bin FORCE
|
2015-08-05 02:33:52 +08:00
|
|
|
$(call if_changed,efipayload)
|
|
|
|
|
|
|
|
u-boot-payload.lds: $(LDSCRIPT_EFI) FORCE
|
|
|
|
$(call if_changed_dep,cpp_lds)
|
|
|
|
|
|
|
|
# Rule to link the EFI payload which contains a stub and a U-Boot binary
|
|
|
|
quiet_cmd_u-boot_payload ?= LD $@
|
|
|
|
cmd_u-boot_payload ?= $(LD) $(LDFLAGS_EFI_PAYLOAD) -o $@ \
|
2015-08-05 02:33:56 +08:00
|
|
|
-T u-boot-payload.lds arch/x86/cpu/call32.o \
|
2016-02-01 09:10:55 +08:00
|
|
|
lib/efi/efi.o lib/efi/efi_stub.o u-boot.bin.o \
|
2016-11-07 23:47:14 +08:00
|
|
|
$(addprefix arch/$(ARCH)/lib/,$(EFISTUB))
|
2015-08-05 02:33:52 +08:00
|
|
|
|
2016-02-01 09:10:55 +08:00
|
|
|
u-boot-payload: u-boot.bin.o u-boot-payload.lds FORCE
|
2015-08-05 02:33:52 +08:00
|
|
|
$(call if_changed,u-boot_payload)
|
|
|
|
|
|
|
|
OBJCOPYFLAGS_u-boot-payload.efi := $(OBJCOPYFLAGS_EFI)
|
|
|
|
u-boot-payload.efi: u-boot-payload FORCE
|
|
|
|
$(call if_changed,zobjcopy)
|
|
|
|
|
2014-02-24 10:12:16 +08:00
|
|
|
u-boot-img.bin: spl/u-boot-spl.bin u-boot.img FORCE
|
|
|
|
$(call if_changed,cat)
|
2012-08-24 23:36:53 +08:00
|
|
|
|
2014-04-08 21:43:34 +08:00
|
|
|
#Add a target to create boot binary having SPL binary in PBI format
|
|
|
|
#concatenated with u-boot binary. It is need by PowerPC SoC having
|
|
|
|
#internal SRAM <= 512KB.
|
|
|
|
MKIMAGEFLAGS_u-boot-spl.pbl = -n $(srctree)/$(CONFIG_SYS_FSL_PBL_RCW:"%"=%) \
|
2014-12-03 15:00:41 +08:00
|
|
|
-R $(srctree)/$(CONFIG_SYS_FSL_PBL_PBI:"%"=%) -T pblimage \
|
|
|
|
-A $(ARCH) -a $(CONFIG_SPL_TEXT_BASE)
|
2014-04-08 21:43:34 +08:00
|
|
|
|
|
|
|
spl/u-boot-spl.pbl: spl/u-boot-spl.bin FORCE
|
|
|
|
$(call if_changed,mkimage)
|
|
|
|
|
2014-12-03 15:00:42 +08:00
|
|
|
ifeq ($(ARCH),arm)
|
|
|
|
UBOOT_BINLOAD := u-boot.img
|
|
|
|
else
|
|
|
|
UBOOT_BINLOAD := u-boot.bin
|
|
|
|
endif
|
|
|
|
|
2014-04-08 21:43:34 +08:00
|
|
|
OBJCOPYFLAGS_u-boot-with-spl-pbl.bin = -I binary -O binary --pad-to=$(CONFIG_SPL_PAD_TO) \
|
|
|
|
--gap-fill=0xff
|
|
|
|
|
2014-12-03 15:00:42 +08:00
|
|
|
u-boot-with-spl-pbl.bin: spl/u-boot-spl.pbl $(UBOOT_BINLOAD) FORCE
|
2014-04-08 21:43:34 +08:00
|
|
|
$(call if_changed,pad_cat)
|
|
|
|
|
2017-04-21 02:36:28 +08:00
|
|
|
quiet_cmd_u-boot-elf ?= LD $@
|
|
|
|
cmd_u-boot-elf ?= $(LD) u-boot-elf.o -o $@ \
|
2022-03-31 02:41:42 +08:00
|
|
|
$(if $(CONFIG_SYS_BIG_ENDIAN),-EB,-EL) \
|
2022-10-21 08:22:39 +08:00
|
|
|
-T u-boot-elf.lds --defsym=$(CONFIG_PLATFORM_ELFENTRY)=$(CONFIG_TEXT_BASE) \
|
|
|
|
-Ttext=$(CONFIG_TEXT_BASE)
|
2020-03-30 19:58:59 +08:00
|
|
|
u-boot.elf: u-boot.bin u-boot-elf.lds
|
2017-04-21 02:36:28 +08:00
|
|
|
$(Q)$(OBJCOPY) -I binary $(PLATFORM_ELFFLAGS) $< u-boot-elf.o
|
|
|
|
$(call if_changed,u-boot-elf)
|
2013-12-14 11:47:33 +08:00
|
|
|
|
2020-03-30 19:58:59 +08:00
|
|
|
u-boot-elf.lds: arch/u-boot-elf.lds prepare FORCE
|
|
|
|
$(call if_changed_dep,cpp_lds)
|
|
|
|
|
2018-11-15 10:07:49 +08:00
|
|
|
# MediaTek's ARM-based u-boot needs a header to contains its load address
|
|
|
|
# which is parsed by the BootROM.
|
|
|
|
# If the SPL build is enabled, the header will be added to the spl binary,
|
|
|
|
# and the spl binary and the u-boot.img will be combined into one file.
|
|
|
|
# Otherwise the header will be added to the u-boot.bin directly.
|
|
|
|
|
|
|
|
ifeq ($(CONFIG_SPL),y)
|
|
|
|
spl/u-boot-spl-mtk.bin: spl/u-boot-spl
|
2021-03-05 10:39:55 +08:00
|
|
|
|
|
|
|
u-boot-mtk.bin: u-boot-with-spl.bin
|
|
|
|
$(call if_changed,copy)
|
2018-11-15 10:07:49 +08:00
|
|
|
else
|
|
|
|
MKIMAGEFLAGS_u-boot-mtk.bin = -T mtk_image \
|
2022-10-21 08:22:39 +08:00
|
|
|
-a $(CONFIG_TEXT_BASE) -e $(CONFIG_TEXT_BASE) \
|
2018-11-15 10:07:49 +08:00
|
|
|
-n "$(patsubst "%",%,$(CONFIG_MTK_BROM_HEADER_INFO))"
|
|
|
|
|
|
|
|
u-boot-mtk.bin: u-boot.bin FORCE
|
|
|
|
$(call if_changed,mkimage)
|
|
|
|
endif
|
|
|
|
|
2020-06-07 04:21:47 +08:00
|
|
|
quiet_cmd_endian_swap = SWAP $@
|
|
|
|
cmd_endian_swap = $(srctree)/tools/endian-swap.py $< $@
|
|
|
|
|
|
|
|
u-boot-swap.bin: u-boot.bin FORCE
|
|
|
|
$(call if_changed,endian_swap)
|
|
|
|
|
2017-06-16 08:05:09 +08:00
|
|
|
ARCH_POSTLINK := $(wildcard $(srctree)/arch/$(ARCH)/Makefile.postlink)
|
|
|
|
|
2021-05-20 19:24:03 +08:00
|
|
|
# Generate linker list symbols references to force compiler to not optimize
|
|
|
|
# them away when compiling with LTO
|
2022-08-04 02:13:08 +08:00
|
|
|
ifeq ($(LTO_ENABLE),y)
|
2021-05-20 19:24:03 +08:00
|
|
|
u-boot-keep-syms-lto := keep-syms-lto.o
|
|
|
|
u-boot-keep-syms-lto_c := $(patsubst %.o,%.c,$(u-boot-keep-syms-lto))
|
|
|
|
|
|
|
|
quiet_cmd_keep_syms_lto = KSL $@
|
|
|
|
cmd_keep_syms_lto = \
|
2021-07-21 15:56:07 +08:00
|
|
|
$(srctree)/scripts/gen_ll_addressable_symbols.sh $(NM) $^ > $@
|
2021-05-20 19:24:03 +08:00
|
|
|
|
|
|
|
quiet_cmd_keep_syms_lto_cc = KSLCC $@
|
|
|
|
cmd_keep_syms_lto_cc = \
|
|
|
|
$(CC) $(filter-out $(LTO_CFLAGS),$(c_flags)) -c -o $@ $<
|
|
|
|
|
|
|
|
$(u-boot-keep-syms-lto_c): $(u-boot-main)
|
|
|
|
$(call if_changed,keep_syms_lto)
|
|
|
|
$(u-boot-keep-syms-lto): $(u-boot-keep-syms-lto_c)
|
|
|
|
$(call if_changed,keep_syms_lto_cc)
|
|
|
|
else
|
|
|
|
u-boot-keep-syms-lto :=
|
|
|
|
endif
|
|
|
|
|
2014-02-24 10:12:18 +08:00
|
|
|
# Rule to link u-boot
|
|
|
|
# May be overridden by arch/$(ARCH)/config.mk
|
2022-08-04 02:13:08 +08:00
|
|
|
ifeq ($(LTO_ENABLE),y)
|
2021-05-20 19:24:03 +08:00
|
|
|
quiet_cmd_u-boot__ ?= LTO $@
|
2021-09-27 23:42:39 +08:00
|
|
|
cmd_u-boot__ ?= \
|
2021-05-20 19:24:03 +08:00
|
|
|
$(CC) -nostdlib -nostartfiles \
|
|
|
|
$(LTO_FINAL_LDFLAGS) $(c_flags) \
|
|
|
|
$(KBUILD_LDFLAGS:%=-Wl,%) $(LDFLAGS_u-boot:%=-Wl,%) -o $@ \
|
|
|
|
-T u-boot.lds $(u-boot-init) \
|
|
|
|
-Wl,--whole-archive \
|
|
|
|
$(u-boot-main) \
|
|
|
|
$(u-boot-keep-syms-lto) \
|
|
|
|
$(PLATFORM_LIBS) \
|
|
|
|
-Wl,--no-whole-archive \
|
|
|
|
-Wl,-Map,u-boot.map; \
|
|
|
|
$(if $(ARCH_POSTLINK), $(MAKE) -f $(ARCH_POSTLINK) $@, true)
|
|
|
|
else
|
2014-02-24 10:12:18 +08:00
|
|
|
quiet_cmd_u-boot__ ?= LD $@
|
2021-05-20 19:24:01 +08:00
|
|
|
cmd_u-boot__ ?= $(LD) $(KBUILD_LDFLAGS) $(LDFLAGS_u-boot) -o $@ \
|
|
|
|
-T u-boot.lds $(u-boot-init) \
|
2022-01-04 18:51:17 +08:00
|
|
|
--whole-archive \
|
2021-05-20 19:24:01 +08:00
|
|
|
$(u-boot-main) \
|
2022-01-04 18:51:17 +08:00
|
|
|
--no-whole-archive \
|
2021-05-20 19:24:01 +08:00
|
|
|
$(PLATFORM_LIBS) -Map u-boot.map; \
|
|
|
|
$(if $(ARCH_POSTLINK), $(MAKE) -f $(ARCH_POSTLINK) $@, true)
|
2021-05-20 19:24:03 +08:00
|
|
|
endif
|
2011-10-04 03:26:50 +08:00
|
|
|
|
2014-08-14 17:40:55 +08:00
|
|
|
quiet_cmd_smap = GEN common/system_map.o
|
|
|
|
cmd_smap = \
|
2014-02-24 10:12:18 +08:00
|
|
|
smap=`$(call SYSTEM_MAP,u-boot) | \
|
|
|
|
awk '$$2 ~ /[tTwW]/ {printf $$1 $$3 "\\\\000"}'` ; \
|
|
|
|
$(CC) $(c_flags) -DSYSTEM_MAP="\"$${smap}\"" \
|
|
|
|
-c $(srctree)/common/system_map.c -o common/system_map.o
|
2014-08-14 17:40:55 +08:00
|
|
|
|
2021-05-20 19:24:03 +08:00
|
|
|
u-boot: $(u-boot-init) $(u-boot-main) $(u-boot-keep-syms-lto) u-boot.lds FORCE
|
2017-06-16 08:05:09 +08:00
|
|
|
+$(call if_changed,u-boot__)
|
2014-08-14 17:40:55 +08:00
|
|
|
ifeq ($(CONFIG_KALLSYMS),y)
|
|
|
|
$(call cmd,smap)
|
2014-02-24 10:12:18 +08:00
|
|
|
$(call cmd,u-boot__) common/system_map.o
|
2009-05-20 16:35:14 +08:00
|
|
|
endif
|
2002-11-03 07:17:16 +08:00
|
|
|
|
2017-12-26 13:55:56 +08:00
|
|
|
ifeq ($(CONFIG_RISCV),y)
|
2023-04-13 14:20:04 +08:00
|
|
|
@tools/prelink-riscv $@
|
2017-12-26 13:55:56 +08:00
|
|
|
endif
|
|
|
|
|
2016-02-09 05:44:15 +08:00
|
|
|
quiet_cmd_sym ?= SYM $@
|
|
|
|
cmd_sym ?= $(OBJDUMP) -t $< > $@
|
|
|
|
u-boot.sym: u-boot FORCE
|
|
|
|
$(call if_changed,sym)
|
|
|
|
|
2021-10-22 11:08:46 +08:00
|
|
|
# Environment processing
|
|
|
|
# ---------------------------------------------------------------------------
|
|
|
|
|
|
|
|
# Directory where we expect the .env file, if it exists
|
|
|
|
ENV_DIR := $(srctree)/board/$(BOARDDIR)
|
|
|
|
|
|
|
|
# Basename of .env file, stripping quotes
|
|
|
|
ENV_SOURCE_FILE := $(CONFIG_ENV_SOURCE_FILE:"%"=%)
|
|
|
|
|
|
|
|
# Filename of .env file
|
|
|
|
ENV_FILE_CFG := $(ENV_DIR)/$(ENV_SOURCE_FILE).env
|
|
|
|
|
|
|
|
# Default filename, if CONFIG_ENV_SOURCE_FILE is empty
|
|
|
|
ENV_FILE_BOARD := $(ENV_DIR)/$(CONFIG_SYS_BOARD:"%"=%).env
|
|
|
|
|
|
|
|
# Select between the CONFIG_ENV_SOURCE_FILE and the default one
|
|
|
|
ENV_FILE := $(if $(ENV_SOURCE_FILE),$(ENV_FILE_CFG),$(wildcard $(ENV_FILE_BOARD)))
|
|
|
|
|
|
|
|
# Run the environment text file through the preprocessor, but only if it is
|
|
|
|
# non-empty, to save time and possible build errors if something is wonky with
|
2022-03-12 13:37:23 +08:00
|
|
|
# the board.
|
|
|
|
# If there is no ENV_FILE, produce an empty output file, to prevent a previous
|
|
|
|
# build's file being used in the case of in-tree builds.
|
2021-10-22 11:08:46 +08:00
|
|
|
quiet_cmd_gen_envp = ENVP $@
|
|
|
|
cmd_gen_envp = \
|
|
|
|
if [ -s "$(ENV_FILE)" ]; then \
|
|
|
|
$(CPP) -P $(CFLAGS) -x assembler-with-cpp -D__ASSEMBLY__ \
|
|
|
|
-D__UBOOT_CONFIG__ \
|
|
|
|
-I . -I include -I $(srctree)/include \
|
|
|
|
-include linux/kconfig.h -include include/config.h \
|
|
|
|
-I$(srctree)/arch/$(ARCH)/include \
|
|
|
|
$< -o $@; \
|
|
|
|
else \
|
2022-04-03 22:06:03 +08:00
|
|
|
rm -f $@; \
|
2022-02-05 18:25:16 +08:00
|
|
|
touch $@ ; \
|
2021-10-22 11:08:46 +08:00
|
|
|
fi
|
2023-04-30 09:21:45 +08:00
|
|
|
include/generated/env.in: include/generated/env.txt
|
2021-10-22 11:08:46 +08:00
|
|
|
$(call cmd,gen_envp)
|
|
|
|
|
|
|
|
# Regenerate the environment if it changes
|
|
|
|
# We use 'wildcard' since the file is not required to exist (at present), in
|
|
|
|
# which case we don't want this dependency, but instead should create an empty
|
|
|
|
# file
|
|
|
|
# This rule is useful since it shows the source file for the environment
|
|
|
|
quiet_cmd_envc = ENVC $@
|
|
|
|
cmd_envc = \
|
|
|
|
if [ -f "$<" ]; then \
|
|
|
|
cat $< > $@; \
|
|
|
|
elif [ -n "$(ENV_SOURCE_FILE)" ]; then \
|
|
|
|
echo "Missing file $(ENV_FILE_CFG)"; \
|
|
|
|
else \
|
2022-02-05 18:25:16 +08:00
|
|
|
touch $@ ; \
|
2021-10-22 11:08:46 +08:00
|
|
|
fi
|
|
|
|
|
2023-04-30 09:21:45 +08:00
|
|
|
include/generated/env.txt: $(wildcard $(ENV_FILE))
|
2021-10-22 11:08:46 +08:00
|
|
|
$(call cmd,envc)
|
|
|
|
|
|
|
|
# Write out the resulting environment, converted to a C string
|
|
|
|
quiet_cmd_gen_envt = ENVT $@
|
|
|
|
cmd_gen_envt = \
|
|
|
|
awk -f $(srctree)/scripts/env2string.awk $< >$@
|
|
|
|
$(env_h): include/generated/env.in
|
|
|
|
$(call cmd,gen_envt)
|
|
|
|
|
|
|
|
# ---------------------------------------------------------------------------
|
|
|
|
|
2014-04-24 21:24:28 +08:00
|
|
|
# The actual objects are generated when descending,
|
2014-02-04 16:24:37 +08:00
|
|
|
# make sure no implicit rule kicks in
|
|
|
|
$(sort $(u-boot-init) $(u-boot-main)): $(u-boot-dirs) ;
|
2006-09-02 01:49:50 +08:00
|
|
|
|
2019-11-14 10:18:03 +08:00
|
|
|
# Handle descending into subdirectories listed in $(u-boot-dirs)
|
2014-02-04 16:24:37 +08:00
|
|
|
# Preset locale variables to speed up the build process. Limit locale
|
|
|
|
# tweaks to this spot to avoid wrong language settings when running
|
|
|
|
# make menuconfig etc.
|
|
|
|
# Error messages still appears in the original language
|
2003-12-07 03:49:23 +08:00
|
|
|
|
2014-02-04 16:24:37 +08:00
|
|
|
PHONY += $(u-boot-dirs)
|
2014-02-24 10:12:10 +08:00
|
|
|
$(u-boot-dirs): prepare scripts
|
2014-02-04 16:24:37 +08:00
|
|
|
$(Q)$(MAKE) $(build)=$@
|
|
|
|
|
2014-02-24 10:12:09 +08:00
|
|
|
tools: prepare
|
2014-02-04 16:24:37 +08:00
|
|
|
# The "tools" are needed early
|
|
|
|
$(filter-out tools, $(u-boot-dirs)): tools
|
|
|
|
# The "examples" conditionally depend on U-Boot (say, when USE_PRIVATE_LIBGCC
|
|
|
|
# is "yes"), so compile examples after U-Boot is compiled.
|
|
|
|
examples: $(filter-out examples, $(u-boot-dirs))
|
2014-02-04 16:24:10 +08:00
|
|
|
|
2014-02-24 10:12:09 +08:00
|
|
|
define filechk_uboot.release
|
|
|
|
echo "$(UBOOTVERSION)$$($(CONFIG_SHELL) $(srctree)/scripts/setlocalversion $(srctree))"
|
|
|
|
endef
|
|
|
|
|
|
|
|
# Store (new) UBOOTRELEASE string in include/config/uboot.release
|
kconfig: switch to Kconfig
This commit enables Kconfig.
Going forward, we use Kconfig for the board configuration.
mkconfig will never be used. Nor will include/config.mk be generated.
Kconfig must be adjusted for U-Boot because our situation is
a little more complicated than Linux Kernel.
We have to generate multiple boot images (Normal, SPL, TPL)
from one source tree.
Each image needs its own configuration input.
Usage:
Run "make <board>_defconfig" to do the board configuration.
It will create the .config file and additionally spl/.config, tpl/.config
if SPL, TPL is enabled, respectively.
You can use "make config", "make menuconfig" etc. to create
a new .config or modify the existing one.
Use "make spl/config", "make spl/menuconfig" etc. for spl/.config
and do likewise for tpl/.config file.
The generic syntax of configuration targets for SPL, TPL is:
<target_image>/<config_command>
Here, <target_image> is either 'spl' or 'tpl'
<config_command> is 'config', 'menuconfig', 'xconfig', etc.
When the configuration is done, run "make".
(Or "make <board>_defconfig all" will do the configuration and build
in one time.)
For futher information of how Kconfig works in U-Boot,
please read the comment block of scripts/multiconfig.py.
By the way, there is another item worth remarking here:
coexistence of Kconfig and board herder files.
Prior to Kconfig, we used C headers to define a set of configs.
We expect a very long term to migrate from C headers to Kconfig.
Two different infractructure must coexist in the interim.
In our former configuration scheme, include/autoconf.mk was generated
for use in makefiles.
It is still generated under include/, spl/include/, tpl/include/ directory
for the Normal, SPL, TPL image, respectively.
Signed-off-by: Masahiro Yamada <yamada.m@jp.panasonic.com>
Acked-by: Simon Glass <sjg@chromium.org>
2014-07-30 13:08:17 +08:00
|
|
|
include/config/uboot.release: include/config/auto.conf FORCE
|
2014-02-24 10:12:09 +08:00
|
|
|
$(call filechk,uboot.release)
|
|
|
|
|
|
|
|
|
2014-02-04 16:24:42 +08:00
|
|
|
# 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.
|
|
|
|
# archprepare is used in arch Makefiles and when processed asm symlink,
|
|
|
|
# version.h and scripts_basic is processed / created.
|
|
|
|
|
|
|
|
# Listed in dependency order
|
|
|
|
PHONY += prepare archprepare prepare0 prepare1 prepare2 prepare3
|
|
|
|
|
|
|
|
# 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)
|
2014-02-24 10:12:09 +08:00
|
|
|
prepare3: include/config/uboot.release
|
2014-02-04 16:24:42 +08:00
|
|
|
ifneq ($(KBUILD_SRC),)
|
kconfig: switch to Kconfig
This commit enables Kconfig.
Going forward, we use Kconfig for the board configuration.
mkconfig will never be used. Nor will include/config.mk be generated.
Kconfig must be adjusted for U-Boot because our situation is
a little more complicated than Linux Kernel.
We have to generate multiple boot images (Normal, SPL, TPL)
from one source tree.
Each image needs its own configuration input.
Usage:
Run "make <board>_defconfig" to do the board configuration.
It will create the .config file and additionally spl/.config, tpl/.config
if SPL, TPL is enabled, respectively.
You can use "make config", "make menuconfig" etc. to create
a new .config or modify the existing one.
Use "make spl/config", "make spl/menuconfig" etc. for spl/.config
and do likewise for tpl/.config file.
The generic syntax of configuration targets for SPL, TPL is:
<target_image>/<config_command>
Here, <target_image> is either 'spl' or 'tpl'
<config_command> is 'config', 'menuconfig', 'xconfig', etc.
When the configuration is done, run "make".
(Or "make <board>_defconfig all" will do the configuration and build
in one time.)
For futher information of how Kconfig works in U-Boot,
please read the comment block of scripts/multiconfig.py.
By the way, there is another item worth remarking here:
coexistence of Kconfig and board herder files.
Prior to Kconfig, we used C headers to define a set of configs.
We expect a very long term to migrate from C headers to Kconfig.
Two different infractructure must coexist in the interim.
In our former configuration scheme, include/autoconf.mk was generated
for use in makefiles.
It is still generated under include/, spl/include/, tpl/include/ directory
for the Normal, SPL, TPL image, respectively.
Signed-off-by: Masahiro Yamada <yamada.m@jp.panasonic.com>
Acked-by: Simon Glass <sjg@chromium.org>
2014-07-30 13:08:17 +08:00
|
|
|
@$(kecho) ' Using $(srctree) as source for U-Boot'
|
|
|
|
$(Q)if [ -f $(srctree)/.config -o -d $(srctree)/include/config ]; then \
|
2014-02-04 16:24:42 +08:00
|
|
|
echo >&2 " $(srctree) is not clean, please run 'make mrproper'"; \
|
|
|
|
echo >&2 " in the '$(srctree)' directory.";\
|
|
|
|
/bin/false; \
|
|
|
|
fi;
|
2009-05-20 16:35:14 +08:00
|
|
|
endif
|
2002-11-03 07:17:16 +08:00
|
|
|
|
2014-02-04 16:24:42 +08:00
|
|
|
# prepare2 creates a makefile if using a separate output directory
|
2019-01-10 22:11:39 +08:00
|
|
|
prepare2: prepare3 outputmakefile cfg
|
2014-02-04 16:24:42 +08:00
|
|
|
|
2021-10-22 11:08:46 +08:00
|
|
|
prepare1: prepare2 $(version_h) $(timestamp_h) $(dt_h) $(env_h) \
|
kconfig: switch to Kconfig
This commit enables Kconfig.
Going forward, we use Kconfig for the board configuration.
mkconfig will never be used. Nor will include/config.mk be generated.
Kconfig must be adjusted for U-Boot because our situation is
a little more complicated than Linux Kernel.
We have to generate multiple boot images (Normal, SPL, TPL)
from one source tree.
Each image needs its own configuration input.
Usage:
Run "make <board>_defconfig" to do the board configuration.
It will create the .config file and additionally spl/.config, tpl/.config
if SPL, TPL is enabled, respectively.
You can use "make config", "make menuconfig" etc. to create
a new .config or modify the existing one.
Use "make spl/config", "make spl/menuconfig" etc. for spl/.config
and do likewise for tpl/.config file.
The generic syntax of configuration targets for SPL, TPL is:
<target_image>/<config_command>
Here, <target_image> is either 'spl' or 'tpl'
<config_command> is 'config', 'menuconfig', 'xconfig', etc.
When the configuration is done, run "make".
(Or "make <board>_defconfig all" will do the configuration and build
in one time.)
For futher information of how Kconfig works in U-Boot,
please read the comment block of scripts/multiconfig.py.
By the way, there is another item worth remarking here:
coexistence of Kconfig and board herder files.
Prior to Kconfig, we used C headers to define a set of configs.
We expect a very long term to migrate from C headers to Kconfig.
Two different infractructure must coexist in the interim.
In our former configuration scheme, include/autoconf.mk was generated
for use in makefiles.
It is still generated under include/, spl/include/, tpl/include/ directory
for the Normal, SPL, TPL image, respectively.
Signed-off-by: Masahiro Yamada <yamada.m@jp.panasonic.com>
Acked-by: Simon Glass <sjg@chromium.org>
2014-07-30 13:08:17 +08:00
|
|
|
include/config/auto.conf
|
2014-02-25 18:26:48 +08:00
|
|
|
ifeq ($(wildcard $(LDSCRIPT)),)
|
|
|
|
@echo >&2 " Could not find linker script."
|
|
|
|
@/bin/false
|
|
|
|
endif
|
2006-09-02 01:49:50 +08:00
|
|
|
|
2018-03-20 18:38:45 +08:00
|
|
|
ifeq ($(CONFIG_USE_DEFAULT_ENV_FILE),y)
|
|
|
|
prepare1: $(defaultenv_h)
|
2021-06-18 10:05:59 +08:00
|
|
|
|
|
|
|
envtools: $(defaultenv_h)
|
2018-03-20 18:38:45 +08:00
|
|
|
endif
|
|
|
|
|
2014-02-04 16:24:42 +08:00
|
|
|
archprepare: prepare1 scripts_basic
|
|
|
|
|
2014-02-24 10:12:11 +08:00
|
|
|
prepare0: archprepare FORCE
|
|
|
|
$(Q)$(MAKE) $(build)=.
|
2003-12-07 03:49:23 +08:00
|
|
|
|
2014-02-04 16:24:42 +08:00
|
|
|
# All the preparing..
|
|
|
|
prepare: prepare0
|
2002-11-03 07:17:16 +08:00
|
|
|
|
2014-02-24 10:12:09 +08:00
|
|
|
# Generate some files
|
|
|
|
# ---------------------------------------------------------------------------
|
|
|
|
|
2021-02-05 12:17:13 +08:00
|
|
|
# Use sed to remove leading zeros from PATCHLEVEL to avoid using octal numbers
|
2014-02-24 10:12:09 +08:00
|
|
|
define filechk_version.h
|
|
|
|
(echo \#define PLAIN_VERSION \"$(UBOOTRELEASE)\"; \
|
|
|
|
echo \#define U_BOOT_VERSION \"U-Boot \" PLAIN_VERSION; \
|
2021-02-05 12:17:13 +08:00
|
|
|
echo \#define U_BOOT_VERSION_NUM $(VERSION); \
|
|
|
|
echo \#define U_BOOT_VERSION_NUM_PATCH $$(echo $(PATCHLEVEL) | \
|
|
|
|
sed -e "s/^0*//"); \
|
2016-06-12 21:07:07 +08:00
|
|
|
echo \#define CC_VERSION_STRING \"$$(LC_ALL=C $(CC) --version | head -n 1)\"; \
|
|
|
|
echo \#define LD_VERSION_STRING \"$$(LC_ALL=C $(LD) --version | head -n 1)\"; )
|
2014-02-24 10:12:09 +08:00
|
|
|
endef
|
|
|
|
|
2015-08-28 16:29:55 +08:00
|
|
|
# The SOURCE_DATE_EPOCH mechanism requires a date that behaves like GNU date.
|
|
|
|
# The BSD date on the other hand behaves different and would produce errors
|
|
|
|
# with the misused '-d' switch. Respect that and search a working date with
|
|
|
|
# well known pre- and suffixes for the GNU variant of date.
|
2014-02-24 10:12:09 +08:00
|
|
|
define filechk_timestamp.h
|
2015-08-13 14:08:27 +08:00
|
|
|
(if test -n "$${SOURCE_DATE_EPOCH}"; then \
|
|
|
|
SOURCE_DATE="@$${SOURCE_DATE_EPOCH}"; \
|
2015-08-28 16:29:55 +08:00
|
|
|
DATE=""; \
|
|
|
|
for date in gdate date.gnu date; do \
|
|
|
|
$${date} -u -d "$${SOURCE_DATE}" >/dev/null 2>&1 && DATE="$${date}"; \
|
|
|
|
done; \
|
|
|
|
if test -n "$${DATE}"; then \
|
|
|
|
LC_ALL=C $${DATE} -u -d "$${SOURCE_DATE}" +'#define U_BOOT_DATE "%b %d %C%y"'; \
|
|
|
|
LC_ALL=C $${DATE} -u -d "$${SOURCE_DATE}" +'#define U_BOOT_TIME "%T"'; \
|
|
|
|
LC_ALL=C $${DATE} -u -d "$${SOURCE_DATE}" +'#define U_BOOT_TZ "%z"'; \
|
2020-10-25 14:25:05 +08:00
|
|
|
LC_ALL=C $${DATE} -u -d "$${SOURCE_DATE}" +'#define U_BOOT_EPOCH %s'; \
|
2015-08-28 16:29:55 +08:00
|
|
|
else \
|
|
|
|
return 42; \
|
|
|
|
fi; \
|
2015-08-13 14:08:27 +08:00
|
|
|
else \
|
|
|
|
LC_ALL=C date +'#define U_BOOT_DATE "%b %d %C%y"'; \
|
|
|
|
LC_ALL=C date +'#define U_BOOT_TIME "%T"'; \
|
|
|
|
LC_ALL=C date +'#define U_BOOT_TZ "%z"'; \
|
2020-10-25 14:25:05 +08:00
|
|
|
LC_ALL=C date +'#define U_BOOT_EPOCH %s'; \
|
2015-08-13 14:08:27 +08:00
|
|
|
fi)
|
2014-02-24 10:12:09 +08:00
|
|
|
endef
|
|
|
|
|
2018-03-20 18:38:45 +08:00
|
|
|
define filechk_defaultenv.h
|
2021-04-22 15:44:18 +08:00
|
|
|
( { grep -v '^#' | grep -v '^$$' || true ; echo '' ; } | \
|
2018-03-20 18:38:45 +08:00
|
|
|
tr '\n' '\0' | \
|
2019-04-15 18:28:26 +08:00
|
|
|
sed -e 's/\\\x0\s*//g' | \
|
2021-04-22 15:44:18 +08:00
|
|
|
xxd -i ; )
|
2018-03-20 18:38:45 +08:00
|
|
|
endef
|
|
|
|
|
2020-02-18 22:03:13 +08:00
|
|
|
define filechk_dt.h
|
|
|
|
(if test -n "$${DEVICE_TREE}"; then \
|
|
|
|
echo \#define DEVICE_TREE \"$(DEVICE_TREE)\"; \
|
|
|
|
else \
|
|
|
|
echo \#define DEVICE_TREE CONFIG_DEFAULT_DEVICE_TREE; \
|
|
|
|
fi)
|
|
|
|
endef
|
|
|
|
|
2014-03-10 09:42:27 +08:00
|
|
|
$(version_h): include/config/uboot.release FORCE
|
2014-02-24 10:12:09 +08:00
|
|
|
$(call filechk,version.h)
|
|
|
|
|
|
|
|
$(timestamp_h): $(srctree)/Makefile FORCE
|
|
|
|
$(call filechk,timestamp.h)
|
|
|
|
|
2020-02-18 22:03:13 +08:00
|
|
|
$(dt_h): $(srctree)/Makefile FORCE
|
|
|
|
$(call filechk,dt.h)
|
|
|
|
|
2018-03-20 18:38:45 +08:00
|
|
|
$(defaultenv_h): $(CONFIG_DEFAULT_ENV_FILE:"%"=%) FORCE
|
|
|
|
$(call filechk,defaultenv.h)
|
|
|
|
|
2021-06-18 06:07:25 +08:00
|
|
|
# ---------------------------------------------------------------------------
|
|
|
|
# Devicetree files
|
|
|
|
|
|
|
|
ifneq ($(wildcard $(srctree)/arch/$(SRCARCH)/boot/dts/),)
|
|
|
|
dtstree := arch/$(SRCARCH)/boot/dts
|
|
|
|
endif
|
|
|
|
|
|
|
|
ifneq ($(dtstree),)
|
|
|
|
|
|
|
|
%.dtb: prepare3 scripts_dtc
|
|
|
|
$(Q)$(MAKE) $(build)=$(dtstree) $(dtstree)/$@
|
|
|
|
|
|
|
|
PHONY += dtbs dtbs_install
|
|
|
|
dtbs: prepare3 scripts_dtc
|
|
|
|
$(Q)$(MAKE) $(build)=$(dtstree)
|
|
|
|
|
|
|
|
dtbs_install:
|
|
|
|
$(Q)$(MAKE) $(dtbinst)=$(dtstree)
|
|
|
|
|
|
|
|
endif
|
|
|
|
|
2021-09-23 01:34:44 +08:00
|
|
|
# Check dtc and pylibfdt, if DTC is provided, else build them
|
2021-06-18 06:07:25 +08:00
|
|
|
PHONY += scripts_dtc
|
|
|
|
scripts_dtc: scripts_basic
|
2021-09-23 01:34:44 +08:00
|
|
|
$(Q)if test "$(DTC)" = "$(DTC_INTREE)"; then \
|
|
|
|
$(MAKE) $(build)=scripts/dtc; \
|
|
|
|
else \
|
|
|
|
if ! $(DTC) -v >/dev/null; then \
|
|
|
|
echo '*** Failed to check dtc version: $(DTC)'; \
|
|
|
|
false; \
|
|
|
|
else \
|
|
|
|
if test "$(call dtc-version)" -lt $(DTC_MIN_VERSION); then \
|
|
|
|
echo '*** Your dtc is too old, please upgrade to dtc $(DTC_MIN_VERSION) or newer'; \
|
|
|
|
false; \
|
|
|
|
else \
|
|
|
|
if [ -n "$(CONFIG_PYLIBFDT)" ]; then \
|
|
|
|
if ! echo "import libfdt" | $(PYTHON3) 2>/dev/null; then \
|
|
|
|
echo '*** pylibfdt does not seem to be available with $(PYTHON3)'; \
|
|
|
|
false; \
|
|
|
|
fi; \
|
|
|
|
fi; \
|
|
|
|
fi; \
|
|
|
|
fi; \
|
|
|
|
fi
|
2021-06-18 06:07:25 +08:00
|
|
|
|
2014-02-24 10:12:10 +08:00
|
|
|
# ---------------------------------------------------------------------------
|
2014-02-24 10:12:19 +08:00
|
|
|
quiet_cmd_cpp_lds = LDS $@
|
2016-08-10 23:36:43 +08:00
|
|
|
cmd_cpp_lds = $(CPP) -Wp,-MD,$(depfile) $(cpp_flags) $(LDPPFLAGS) \
|
2018-10-02 02:22:43 +08:00
|
|
|
-D__ASSEMBLY__ -x assembler-with-cpp -std=c99 -P -o $@ $<
|
2014-02-24 10:12:10 +08:00
|
|
|
|
2014-02-24 10:12:19 +08:00
|
|
|
u-boot.lds: $(LDSCRIPT) prepare FORCE
|
2014-04-09 19:10:43 +08:00
|
|
|
$(call if_changed_dep,cpp_lds)
|
2006-09-07 17:51:23 +08:00
|
|
|
|
2014-02-24 10:12:17 +08:00
|
|
|
spl/u-boot-spl.bin: spl/u-boot-spl
|
|
|
|
@:
|
2019-04-03 01:19:06 +08:00
|
|
|
$(SPL_SIZE_CHECK)
|
|
|
|
|
2021-03-01 20:04:16 +08:00
|
|
|
spl/u-boot-spl-dtb.bin: spl/u-boot-spl
|
|
|
|
@:
|
|
|
|
|
|
|
|
spl/u-boot-spl-dtb.hex: spl/u-boot-spl
|
|
|
|
@:
|
|
|
|
|
2022-04-30 14:56:50 +08:00
|
|
|
spl/u-boot-spl: tools prepare $(if $(CONFIG_SPL_OF_CONTROL),dts/dt.dtb)
|
2014-06-09 14:14:11 +08:00
|
|
|
$(Q)$(MAKE) obj=spl -f $(srctree)/scripts/Makefile.spl all
|
2011-07-13 13:11:04 +08:00
|
|
|
|
2014-05-05 18:52:30 +08:00
|
|
|
spl/sunxi-spl.bin: spl/u-boot-spl
|
|
|
|
@:
|
|
|
|
|
2017-02-28 01:22:13 +08:00
|
|
|
spl/sunxi-spl-with-ecc.bin: spl/sunxi-spl.bin
|
|
|
|
@:
|
|
|
|
|
2016-02-01 09:10:53 +08:00
|
|
|
spl/u-boot-spl.sfp: spl/u-boot-spl
|
2015-07-15 08:53:45 +08:00
|
|
|
@:
|
|
|
|
|
2015-11-17 20:56:57 +08:00
|
|
|
spl/boot.bin: spl/u-boot-spl
|
|
|
|
@:
|
|
|
|
|
2022-04-30 14:56:51 +08:00
|
|
|
tpl/u-boot-tpl.bin: tpl/u-boot-tpl
|
|
|
|
@:
|
2019-10-21 11:31:52 +08:00
|
|
|
$(TPL_SIZE_CHECK)
|
2013-08-16 15:16:15 +08:00
|
|
|
|
2022-04-30 14:56:51 +08:00
|
|
|
tpl/u-boot-tpl: tools prepare $(if $(CONFIG_TPL_OF_CONTROL),dts/dt.dtb)
|
|
|
|
$(Q)$(MAKE) obj=tpl -f $(srctree)/scripts/Makefile.spl all
|
|
|
|
|
2022-04-30 14:56:52 +08:00
|
|
|
vpl/u-boot-vpl.bin: vpl/u-boot-vpl
|
|
|
|
@:
|
|
|
|
$(VPL_SIZE_CHECK)
|
|
|
|
|
|
|
|
vpl/u-boot-vpl: tools prepare $(if $(CONFIG_TPL_OF_CONTROL),dts/dt.dtb)
|
|
|
|
$(Q)$(MAKE) obj=vpl -f $(srctree)/scripts/Makefile.spl all
|
|
|
|
|
2014-07-15 20:52:00 +08:00
|
|
|
TAG_SUBDIRS := $(patsubst %,$(srctree)/%,$(u-boot-dirs) include)
|
2007-11-26 01:45:47 +08:00
|
|
|
|
2011-07-18 09:21:18 +08:00
|
|
|
FIND := find
|
|
|
|
FINDFLAGS := -L
|
|
|
|
|
2006-09-02 01:49:50 +08:00
|
|
|
tags ctags:
|
2014-02-04 16:24:24 +08:00
|
|
|
ctags -w -o ctags `$(FIND) $(FINDFLAGS) $(TAG_SUBDIRS) \
|
2009-12-09 18:13:26 +08:00
|
|
|
-name '*.[chS]' -print`
|
2015-05-04 21:26:53 +08:00
|
|
|
ln -s ctags tags
|
2002-11-03 07:17:16 +08:00
|
|
|
|
|
|
|
etags:
|
2014-07-15 20:52:00 +08:00
|
|
|
etags -a -o etags `$(FIND) $(FINDFLAGS) $(TAG_SUBDIRS) \
|
2009-12-09 18:13:26 +08:00
|
|
|
-name '*.[chS]' -print`
|
2008-02-29 11:46:05 +08:00
|
|
|
cscope:
|
2011-07-18 09:21:18 +08:00
|
|
|
$(FIND) $(FINDFLAGS) $(TAG_SUBDIRS) -name '*.[chS]' -print > \
|
|
|
|
cscope.files
|
2019-10-09 02:12:45 +08:00
|
|
|
@find $(TAG_SUBDIRS) -name '*.[chS]' -type l -print | \
|
|
|
|
grep -xvf - cscope.files > cscope.files.no-symlinks; \
|
|
|
|
mv cscope.files.no-symlinks cscope.files
|
2008-02-29 11:46:05 +08:00
|
|
|
cscope -b -q -k
|
2002-11-03 07:17:16 +08:00
|
|
|
|
2009-05-20 16:35:14 +08:00
|
|
|
SYSTEM_MAP = \
|
|
|
|
$(NM) $1 | \
|
2002-11-03 07:17:16 +08:00
|
|
|
grep -v '\(compiled\)\|\(\.o$$\)\|\( [aUw] \)\|\(\.\.ng$$\)\|\(LASH[RL]DI\)' | \
|
2009-05-20 16:35:14 +08:00
|
|
|
LC_ALL=C sort
|
2014-02-04 16:24:24 +08:00
|
|
|
System.map: u-boot
|
2013-11-11 13:36:01 +08:00
|
|
|
@$(call SYSTEM_MAP,$<) > $@
|
2002-11-03 07:17:16 +08:00
|
|
|
|
|
|
|
#########################################################################
|
|
|
|
|
2013-12-14 11:47:34 +08:00
|
|
|
# ARM relocations should all be R_ARM_RELATIVE (32-bit) or
|
|
|
|
# R_AARCH64_RELATIVE (64-bit).
|
2014-02-04 16:24:24 +08:00
|
|
|
checkarmreloc: u-boot
|
2013-12-14 11:47:34 +08:00
|
|
|
@RELOC="`$(CROSS_COMPILE)readelf -r -W $< | cut -d ' ' -f 4 | \
|
|
|
|
grep R_A | sort -u`"; \
|
|
|
|
if test "$$RELOC" != "R_ARM_RELATIVE" -a \
|
|
|
|
"$$RELOC" != "R_AARCH64_RELATIVE"; then \
|
|
|
|
echo "$< contains unexpected relocations: $$RELOC"; \
|
|
|
|
false; \
|
|
|
|
fi
|
2013-06-11 20:17:30 +08:00
|
|
|
|
2019-10-27 20:19:47 +08:00
|
|
|
tools/version.h: include/version.h
|
2019-12-05 07:54:30 +08:00
|
|
|
$(Q)mkdir -p $(dir $@)
|
2019-10-27 20:19:47 +08:00
|
|
|
$(call if_changed,copy)
|
|
|
|
|
2023-05-11 14:16:49 +08:00
|
|
|
envtools: u-boot-initial-env scripts_basic $(version_h) $(timestamp_h) tools/version.h
|
2017-09-06 02:01:29 +08:00
|
|
|
$(Q)$(MAKE) $(build)=tools/env
|
2010-08-15 12:03:21 +08:00
|
|
|
|
2019-05-25 04:07:04 +08:00
|
|
|
tools-only: export TOOLS_ONLY=y
|
2019-10-27 20:19:47 +08:00
|
|
|
tools-only: scripts_basic $(version_h) $(timestamp_h) tools/version.h
|
2014-03-31 16:33:51 +08:00
|
|
|
$(Q)$(MAKE) $(build)=tools
|
|
|
|
|
2014-03-03 10:06:18 +08:00
|
|
|
tools-all: export HOST_TOOLS_ALL=y
|
2017-09-05 15:53:58 +08:00
|
|
|
tools-all: envtools tools ;
|
2010-08-15 12:03:21 +08:00
|
|
|
|
2014-03-03 10:06:19 +08:00
|
|
|
cross_tools: export CROSS_BUILD_TOOLS=y
|
|
|
|
cross_tools: tools ;
|
|
|
|
|
2006-10-25 06:43:17 +08:00
|
|
|
.PHONY : CHANGELOG
|
|
|
|
CHANGELOG:
|
2006-10-27 02:38:25 +08:00
|
|
|
git log --no-merges U-Boot-1_1_5.. | \
|
|
|
|
unexpand -a | sed -e 's/\s\s*$$//' > $@
|
2006-10-25 06:43:17 +08:00
|
|
|
|
2002-11-03 07:17:16 +08:00
|
|
|
#########################################################################
|
|
|
|
|
2014-02-04 16:24:40 +08:00
|
|
|
###
|
|
|
|
# Cleaning is done on three levels.
|
|
|
|
# make clean Delete most generated files
|
|
|
|
# Leave enough to build external modules
|
|
|
|
# make mrproper Delete the current configuration, and all generated files
|
|
|
|
# make distclean Remove editor backup files, patch leftover files and the like
|
|
|
|
|
|
|
|
# Directories & files removed with 'make clean'
|
2014-10-30 09:58:32 +08:00
|
|
|
CLEAN_DIRS += $(MODVERDIR) \
|
2023-06-20 06:41:04 +08:00
|
|
|
$(foreach d, spl tpl vpl, $(patsubst %,$d/%, \
|
kconfig: switch to Kconfig
This commit enables Kconfig.
Going forward, we use Kconfig for the board configuration.
mkconfig will never be used. Nor will include/config.mk be generated.
Kconfig must be adjusted for U-Boot because our situation is
a little more complicated than Linux Kernel.
We have to generate multiple boot images (Normal, SPL, TPL)
from one source tree.
Each image needs its own configuration input.
Usage:
Run "make <board>_defconfig" to do the board configuration.
It will create the .config file and additionally spl/.config, tpl/.config
if SPL, TPL is enabled, respectively.
You can use "make config", "make menuconfig" etc. to create
a new .config or modify the existing one.
Use "make spl/config", "make spl/menuconfig" etc. for spl/.config
and do likewise for tpl/.config file.
The generic syntax of configuration targets for SPL, TPL is:
<target_image>/<config_command>
Here, <target_image> is either 'spl' or 'tpl'
<config_command> is 'config', 'menuconfig', 'xconfig', etc.
When the configuration is done, run "make".
(Or "make <board>_defconfig all" will do the configuration and build
in one time.)
For futher information of how Kconfig works in U-Boot,
please read the comment block of scripts/multiconfig.py.
By the way, there is another item worth remarking here:
coexistence of Kconfig and board herder files.
Prior to Kconfig, we used C headers to define a set of configs.
We expect a very long term to migrate from C headers to Kconfig.
Two different infractructure must coexist in the interim.
In our former configuration scheme, include/autoconf.mk was generated
for use in makefiles.
It is still generated under include/, spl/include/, tpl/include/ directory
for the Normal, SPL, TPL image, respectively.
Signed-off-by: Masahiro Yamada <yamada.m@jp.panasonic.com>
Acked-by: Simon Glass <sjg@chromium.org>
2014-07-30 13:08:17 +08:00
|
|
|
$(filter-out include, $(shell ls -1 $d 2>/dev/null))))
|
2014-10-30 09:58:32 +08:00
|
|
|
|
2022-03-19 20:33:25 +08:00
|
|
|
CLEAN_FILES += include/bmp_logo.h include/bmp_logo_data.h \
|
2022-06-14 10:57:31 +08:00
|
|
|
include/generated/env.* drivers/video/u_boot_logo.S \
|
2022-03-30 18:11:00 +08:00
|
|
|
tools/version.h u-boot* MLO* SPL System.map fit-dtb.blob* \
|
2019-11-11 00:25:08 +08:00
|
|
|
u-boot-ivt.img.log u-boot-dtb.imx.log SPL.log u-boot.imx.log \
|
2019-11-11 00:25:10 +08:00
|
|
|
lpc32xx-* bl31.c bl31.elf bl31_*.bin image.map tispl.bin* \
|
2021-12-23 00:40:27 +08:00
|
|
|
idbloader.img flash.bin flash.log defconfig keep-syms-lto.c \
|
|
|
|
mkimage-out.spl.mkimage mkimage.spl.mkimage imx-boot.map \
|
2022-09-02 21:10:50 +08:00
|
|
|
itb.fit.fit itb.fit.itb itb.map spl.map mkimage-out.rom.mkimage \
|
2022-09-02 21:10:55 +08:00
|
|
|
mkimage.rom.mkimage rom.map simple-bin.map simple-bin-spi.map \
|
2023-06-03 04:18:23 +08:00
|
|
|
idbloader-spi.img lib/efi_loader/helloworld_efi.S
|
2014-02-04 16:24:40 +08:00
|
|
|
|
|
|
|
# Directories & files removed with 'make mrproper'
|
2023-06-20 06:41:04 +08:00
|
|
|
MRPROPER_DIRS += include/config include/generated spl tpl vpl \
|
2021-07-03 02:36:13 +08:00
|
|
|
.tmp_objdiff doc/output include/asm
|
2021-05-07 09:32:23 +08:00
|
|
|
|
|
|
|
# Remove include/asm symlink created by U-Boot before v2014.01
|
kconfig: switch to Kconfig
This commit enables Kconfig.
Going forward, we use Kconfig for the board configuration.
mkconfig will never be used. Nor will include/config.mk be generated.
Kconfig must be adjusted for U-Boot because our situation is
a little more complicated than Linux Kernel.
We have to generate multiple boot images (Normal, SPL, TPL)
from one source tree.
Each image needs its own configuration input.
Usage:
Run "make <board>_defconfig" to do the board configuration.
It will create the .config file and additionally spl/.config, tpl/.config
if SPL, TPL is enabled, respectively.
You can use "make config", "make menuconfig" etc. to create
a new .config or modify the existing one.
Use "make spl/config", "make spl/menuconfig" etc. for spl/.config
and do likewise for tpl/.config file.
The generic syntax of configuration targets for SPL, TPL is:
<target_image>/<config_command>
Here, <target_image> is either 'spl' or 'tpl'
<config_command> is 'config', 'menuconfig', 'xconfig', etc.
When the configuration is done, run "make".
(Or "make <board>_defconfig all" will do the configuration and build
in one time.)
For futher information of how Kconfig works in U-Boot,
please read the comment block of scripts/multiconfig.py.
By the way, there is another item worth remarking here:
coexistence of Kconfig and board herder files.
Prior to Kconfig, we used C headers to define a set of configs.
We expect a very long term to migrate from C headers to Kconfig.
Two different infractructure must coexist in the interim.
In our former configuration scheme, include/autoconf.mk was generated
for use in makefiles.
It is still generated under include/, spl/include/, tpl/include/ directory
for the Normal, SPL, TPL image, respectively.
Signed-off-by: Masahiro Yamada <yamada.m@jp.panasonic.com>
Acked-by: Simon Glass <sjg@chromium.org>
2014-07-30 13:08:17 +08:00
|
|
|
MRPROPER_FILES += .config .config.old include/autoconf.mk* include/config.h \
|
2019-01-30 04:15:21 +08:00
|
|
|
ctags etags tags TAGS cscope* GPATH GTAGS GRTAGS GSYMS \
|
2021-05-07 09:32:23 +08:00
|
|
|
drivers/video/fonts/*.S include/asm
|
2014-02-04 16:24:40 +08:00
|
|
|
|
|
|
|
# clean - Delete most, but leave enough to build external modules
|
|
|
|
#
|
|
|
|
clean: rm-dirs := $(CLEAN_DIRS)
|
|
|
|
clean: rm-files := $(CLEAN_FILES)
|
|
|
|
|
2014-03-28 13:55:02 +08:00
|
|
|
clean-dirs := $(foreach f,$(u-boot-alldirs),$(if $(wildcard $(srctree)/$f/Makefile),$f))
|
2014-02-04 16:24:40 +08:00
|
|
|
|
2018-07-25 23:38:17 +08:00
|
|
|
clean-dirs := $(addprefix _clean_, $(clean-dirs))
|
2014-02-04 16:24:40 +08:00
|
|
|
|
|
|
|
PHONY += $(clean-dirs) clean archclean
|
|
|
|
$(clean-dirs):
|
|
|
|
$(Q)$(MAKE) $(clean)=$(patsubst _clean_%,%,$@)
|
|
|
|
|
|
|
|
clean: $(clean-dirs)
|
|
|
|
$(call cmd,rmdirs)
|
|
|
|
$(call cmd,rmfiles)
|
|
|
|
@find $(if $(KBUILD_EXTMOD), $(KBUILD_EXTMOD), .) $(RCS_FIND_IGNORE) \
|
|
|
|
\( -name '*.[oas]' -o -name '*.ko' -o -name '.*.cmd' \
|
2019-10-04 00:45:29 +08:00
|
|
|
-o -name '*.ko.*' -o -name '*.su' -o -name '*.pyc' \
|
2014-02-04 16:24:40 +08:00
|
|
|
-o -name '.*.d' -o -name '.*.tmp' -o -name '*.mod.c' \
|
kconfig: re-sync with Linux 4.17-rc4
Align Kconfig to Linux 4.17-rc4 with minimal impact on non-kconfig files.
Previous Kconfig sync was done by commit bf7ab1e70fd762 ("kconfig:
re-sync with Linux 4.10") and it achieved almost perfect alignment with
a few (intended) exceptions, caused by below U-boot commits:
[A] v2015.04 5f9eb2207500 ("kbuild: remove scripts/multiconfig.sh")
[B] v2015.07 20c20826efab ("Kconfig: Enable usage of escape char '\' in string values")
[C] v2016.01 da58dec86616 ("Various Makefiles: Add SPDX-License-Identifier tags")
[D] v2016.03 5b8031ccb4ed ("Add more SPDX-License-Identifier tags")
[E] v2016.03 192bc6948b02 ("Fix GCC format-security errors and convert sprintfs.")
Here is the list of Kconfig commits which followed the v4.10 alignment:
[F] v2018.01 0931ed3c0d0f ("kconfig/symbol.c: use correct pointer type argument for sizeof")
[G] v2018.03 1414e09b4f25 ("kconfig: revert change that was not needed for -Wformat-security")
[H] v2018.05 83d290c56fab ("SPDX: Convert all of our single license tags to Linux Kernel style")
Commit [F] was subsequently applied to Linux kernel as commit [I]
with the same patch id, so it won't contribute to further misalignment.
[I] v4.15-rc1 88127dae6ed9 ("kconfig/symbol.c: use correct pointer type argument for sizeof")
Commit [G] is a Kconfig-specific revert of commit [E].
Commit [H] relocated and reformatted the license doing no functional change.
In summary, the only functional change that makes U-boot Kconfig
diverge from Linux Kconfig is commit [B]. After a brief analysis,
the purpose of [B] seems to be placing "\n" literals in string symbols
like CONFIG_AUTOBOOT_PROMPT="autoboot in %d seconds\n" in order to pass
them directly to printf and expect correct output at runtime. Currently,
Linux doesn't seem to have this requirement, so for the moment [B] looks
like a U-boot specific feature/fix. From point of view of further Kconfig
alignment and backporting efforts, it is highly desired that commits
like [B] are propagated to Linux and any Kconfig fixes/features are
contributed to Linux kernel first. This specific Kconfig re-sync just
keeps [B] in place.
Contrary to 4.10 Kconfig re-sync (which achieves zero non-kconfig
changes), 4.17-rc4 re-sync does some amount of updates in Kbuild
(striving to keep them at minimum), due to a number of reasons:
* Kbuild is affected by the removal of Kconfig "*shipped" files and now
requires flex and bison pre-installed on the host.
* PYTHON{2,3} variables are defined in top-level Makefile as
prerequisite for running the newly developed Kconfig unit tests.
* silentoldconfig becomes an "internal implementation detail" deprecated
for external use, being renamed to syncconfig.
The exact non-kconfig files touched by this commit are:
$ git show --format="" --stat -- ':!scripts/kconfig'
.gitignore | 2 ++
Makefile | 9 +++++++--
scripts/Makefile.build | 11 +++++++++++
scripts/Makefile.lib | 41 ++++++++++++-----------------------------
The imported Linux commits touching the above files are:
c054be10ffdbd5 ("remove gperf left-overs from build system")
73a4f6dbe70a1b ("kbuild: add LEX and YACC variables")
033dba2ec06c47 ("kbuild: prepare to remove C files pre-generated by flex and bison")
eea199b445f64c ("kbuild: remove unnecessary LEX_PREFIX and YACC_PREFIX")
e71de5ee08dcb0 ("kbuild: remove remaining use of undefined YACC_PREFIX")
d59fbbd09d5d6b ("kbuild: replace hardcoded bison in cmd_bison_h with $(YACC)")
911a91c39cabcb H ("kconfig: rename silentoldconfig to syncconfig")
59889300274569 (".gitignore: move *.lex.c *.tab.[ch] patterns to the top-level .gitignore")
9a8dfb394c0467 ("kbuild: clean up *.lex.c and *.tab.[ch] patterns from top-level Makefile")
833e622459432e H ("genksyms: generate lexer and parser during build instead of shipping")
b23d1a241f4eb4 H ("kbuild: add %.lex.c and %.tab.[ch] to 'targets' automatically")
e9781b52d4e0e3 H ("kbuild: add PYTHON2 and PYTHON3 variables")
The commits marked with 'H' are assessed as "hard" (build will fail)
prerequisites and the rest of them are assessed as "soft" prerequisites
for the re-sync. In spite of relatively high number of non-H commits,
they belong to this Kconfig update topic-wise and decrease the number of
cherry pick conflicts for many commits in this series. Additional effort
can be put in eliminating the soft prerequisites, if really needed.
The commits which contributed to this Kconfig re-sync are listed below.
Whenever a conflict resolution has been performed (mostly by hand, but
sometimes automatically by git), it is revealed by the '!' sign in the
second column, which means a patch id mismatch between Linux and U-boot
commits:
9be3213b14d44f ("gconfig: remove misleading parentheses around a condition")
ff85a1a80e0034 ("kconfig: Check for libncurses before menuconfig")
ad8181060788c8 ("kconfig: fix sparse warnings in nconfig")
cb77f0d623ff33 ! ("scripts: Switch to more portable Perl shebang")
bb3290d91695bb ! ("Remove gperf usage from toolchain")
c054be10ffdbd5 ("remove gperf left-overs from build system")
b24413180f5600 ! ("License cleanup: add SPDX GPL-2.0 license identifier to files with no license")
9059a3493efea6 ! ("kconfig: fix relational operators for bool and tristate symbols")
2c37e08464a850 ("kconfig: Warn if choice default is not in choice")
33ca1a24866373 ("kconfig: Document the 'menu' struct")
52aede4ba5efd1 ("kconfig: Document the 'symbol' struct")
c873443430ebd1 ("kconfig: Sync zconf.y with zconf.tab.c_shipped")
9a826842ff2fbd ("kconfig: Rename menu_check_dep() to rewrite_m()")
fa8cedaef814ce ("kconfig: Clarify expression rewriting")
f77850d3fe0c96 ("kconfig: Clean up modules handling and fix crash")
e3b03bf29d6b99 ("kconfig: display recursive dependency resolution hint just once")
73a4f6dbe70a1b ! ("kbuild: add LEX and YACC variables")
033dba2ec06c47 ! ("kbuild: prepare to remove C files pre-generated by flex and bison")
29c833061c1d8c ("kconfig: generate lexer and parser during build instead of shipping")
26e47a3c11a25c ("kconfig: Don't leak symbol names during parsing")
24161a6711c945 ("kconfig: Don't leak 'source' filenames during parsing")
bc28fe1d5ede88 ("kconfig: Don't leak 'option' arguments during parsing")
0724a7c32a54e3 ("kconfig: Don't leak main menus during parsing")
ae7440ef0c8013 ("kconfig: Fix automatic menu creation mem leak")
5b1374b3b3c2fc ("kconfig: Fix expr_free() E_NOT leak")
7cf33f88e29410 ("kconfig: Fix choice symbol expression leak")
05cccce580456d ("kconfig: Document automatic submenu creation code")
0735f7e5def2ab ("kconfig: Document important expression functions")
df60f4b92d3d0b ("kconfig: Remove menu_end_entry()")
b92d804a51796b ("kconfig: drop 'boolean' keyword")
6479f327dea60d ("kconfig: Warn if there is more than one help text")
52e58a3caeba5d ("kconfig: make input_mode static")
5a3dc717b3c785 ("kconfig: make xfgets() really static")
84dd95d4f87a0d ("kconfig: make conf_unsaved a local variable of conf_read()")
765f4cdef6f80d ("kconfig: use default 'yy' prefix for lexer and parser")
eea199b445f64c ("kbuild: remove unnecessary LEX_PREFIX and YACC_PREFIX")
e71de5ee08dcb0 ("kbuild: remove remaining use of undefined YACC_PREFIX")
d59fbbd09d5d6b ! ("kbuild: replace hardcoded bison in cmd_bison_h with $(YACC)")
3e41ba05b6d60c ("kconfig: Document SYMBOL_OPTIONAL logic")
d3465af60f4471 ("kconfig: Clarify choice dependency propagation")
9d1a9e8bc18bea ("kconfig: Document 'if' flattening logic")
b53688014e3325 ("kconfig: Clarify menu and 'if' dependency propagation")
d0fd0428ecf04b ("kconfig: fix make xconfig when gettext is missing")
312ee68752faaa ("kconfig: announce removal of oldnoconfig if used")
1ccb27143360bd ("kconfig: make "Selected by:" and "Implied by:" readable")
cedd55d49dee94 ! ("kconfig: Remove silentoldconfig from help and docs; fix kconfig/conf's help")
1b9eda2e4892cb ("kconfig: Warn if help text is blank")
cb67ab2cd2b8ab ("kconfig: do not write choice values when their dependency becomes n")
4f208f392103e8 ("kconfig: show '?' prompt even if no help text is available")
cd58a91def2acc ("kconfig: remove 'config*' pattern from .gitignnore")
d2a04648a5dbc3 ("kconfig: remove check_stdin()")
f3ff6fb5db68bc ("kconfig: echo stdin to stdout if either is redirected")
9e3e10c725360b ("kconfig: send error messages to stderr")
d717f24d8c6808 ("kconfig: add xrealloc() helper")
523ca58b7db2e3 ("kconfig: remove const qualifier from sym_expand_string_value()")
cd81fc82b93fa4 ("kconfig: add xstrdup() helper")
f4bc1eefc1608e ("kconfig: set SYMBOL_AUTO to the symbol marked with defconfig_list")
bf0bbdcf100322 ("kconfig: Don't leak choice names during parsing")
1a90ce36c6eff6 ("kconfig: Update ncurses package names for menuconfig")
5ae6fcc4bb82bd ("kconfig: fix line number in recursive inclusion error message")
07a422bb213adb ! ("kbuild: restore autoksyms.h touch to the top Makefile")
9a47ceec543bfb ("kconfig: clean-up reverse dependency help implementation")
d9119b5925a03b ("kconfig: Print reverse dependencies in groups")
f467c5640c29ad ("kconfig: only write '# CONFIG_FOO is not set' for visible symbols")
59a80b5e892dde ("kconfig: do not call check_conf() for olddefconfig")
4bb3a5b085cd6f ("kconfig: remove unneeded input_mode test in conf()")
99f0b6578bab44 ("kconfig: remove redundant input_mode test for check_conf() loop")
2aad9b89621386 ("kconfig: hide irrelevant sub-menus for oldconfig")
81d2bc2273052e ("kconfig: invoke oldconfig instead of silentoldconfig from local*config")
911a91c39cabcb ! ("kconfig: rename silentoldconfig to syncconfig")
2a61625835c7c8 ! ("kconfig: remove redundant streamline_config.pl prerequisite")
022a4bf6b59dfd ("kconfig: tests: add framework for Kconfig unit testing")
1903c511905984 ("kconfig: tests: add basic choice tests")
49ac3c0c3aa3b7 ("kconfig: tests: test automatic submenu creation")
b76960c0f6b25d ("kconfig: tests: test if new symbols in choice are asked")
930c429a656fdb ("kconfig: tests: check unneeded "is not set" with unmet dependency")
ee236610653ede ("kconfig: tests: check visibility of tristate choice values in y choice")
beaaddb625400e ("kconfig: tests: test defconfig when two choices interact")
3e4888c2e3d77d ("kconfig: tests: test randconfig for choice in choice")
29c434f367ea7b ("kconfig: tests: test if recursive dependencies are detected")
e2c75e7667c737 ("kconfig: tests: test if recursive inclusion is detected")
f622f827958162 ("kconfig: warn unmet direct dependency of tristate symbols selected by y")
f8f69dc0b4e070 ("kconfig: make unmet dependency warnings readable")
26561514cc9def ("kconfig: do not include both curses.h and ncurses.h for nconfig")
32a94b8b0c3e5a ("kconfig: remove duplicated file name and lineno of recursive inclusion")
379a8eb8eb1a55 ("kconfig: detect recursive inclusion earlier")
18492685e479fd ("kconfig: use yylineno option instead of manual lineno increments")
59889300274569 ! (".gitignore: move *.lex.c *.tab.[ch] patterns to the top-level .gitignore")
9a8dfb394c0467 ! ("kbuild: clean up *.lex.c and *.tab.[ch] patterns from top-level Makefile")
833e622459432e ! ("genksyms: generate lexer and parser during build instead of shipping")
b23d1a241f4eb4 ! ("kbuild: add %.lex.c and %.tab.[ch] to 'targets' automatically")
17baab68d337a0 ("kconfig: extend output of 'listnewconfig'")
e9781b52d4e0e3 ! ("kbuild: add PYTHON2 and PYTHON3 variables")
The current Kconfig update generates below build-time warnings:
YACC scripts/dtc/dtc-parser.tab.h
scripts/dtc/dtc-parser.y: warning: 3 shift/reduce conflicts [-Wconflicts-sr]
YACC scripts/dtc/dtc-parser.tab.c
scripts/dtc/dtc-parser.y: warning: 3 shift/reduce conflicts [-Wconflicts-sr]
This seems to happen because the Kbuild updates apparently didn't make
room for both "*shipped"-based builds and flex/bison-based builds. A
similar problem has been reported for genksyms parser in v4.17-rc1
commit 833e622459432e ("genksyms: generate lexer and parser during build
instead of shipping"). I have figured out empirically that the warnings
are healed after updating the in-tree U-boot DTC to upstream v1.4.6-9,
same as done by Linux v4.17-rc1 commit 9130ba88464032 ("scripts/dtc:
Update to upstream version v1.4.6-9-gaadd0b65c987"). Whether fixing the
DTC-related yacc warnings should be done together with the Kconfig
re-sync, I would like to hear from community.
My testing was limited to:
- make defconfig all
- make ARCH=arm CROSS_COMPILE=aarch64-linux-gnu- r8a7795_ulcb_defconfig all
- comparing .config before and after the re-sync
- running the newly imported Kconfig unit tests as seen below:
$ make testconfig
Tested-by: Petr Vorel <petr.vorel@gmail.com>
============================= test session starts =============================
scripts/kconfig/tests/auto_submenu/__init__.py::test PASSED [ 7%]
scripts/kconfig/tests/choice/__init__.py::test_oldask0 PASSED [ 14%]
scripts/kconfig/tests/choice/__init__.py::test_oldask1 PASSED [ 21%]
scripts/kconfig/tests/choice/__init__.py::test_allyes PASSED [ 28%]
scripts/kconfig/tests/choice/__init__.py::test_allmod PASSED [ 35%]
scripts/kconfig/tests/choice/__init__.py::test_allno PASSED [ 42%]
scripts/kconfig/tests/choice/__init__.py::test_alldef PASSED [ 50%]
scripts/kconfig/tests/choice_value_with_m_dep/__init__.py::test PASSED [ 57%]
scripts/kconfig/tests/err_recursive_inc/__init__.py::test PASSED [ 64%]
scripts/kconfig/tests/inter_choice/__init__.py::test PASSED [ 71%]
scripts/kconfig/tests/new_choice_with_dep/__init__.py::test PASSED [ 78%]
scripts/kconfig/tests/no_write_if_dep_unmet/__init__.py::test PASSED [ 85%]
scripts/kconfig/tests/rand_nested_choice/__init__.py::test PASSED [ 92%]
scripts/kconfig/tests/warn_recursive_dep/__init__.py::test PASSED [100%]
========================== 14 passed in 0.34 seconds ==========================
Signed-off-by: Eugeniu Rosca <erosca@de.adit-jv.com>
Reviewed-by: Masahiro Yamada <yamada.masahiro@socionext.com>
Tested-by: Petr Vorel <petr.vorel@gmail.com>
2018-05-19 20:13:50 +08:00
|
|
|
-o -name '*.lex.c' -o -name '*.tab.[ch]' \
|
2019-11-13 08:44:54 +08:00
|
|
|
-o -name '*.asn1.[ch]' \
|
2014-02-04 16:24:40 +08:00
|
|
|
-o -name '*.symtypes' -o -name 'modules.order' \
|
|
|
|
-o -name modules.builtin -o -name '.tmp_*.o.*' \
|
2022-02-22 21:54:39 +08:00
|
|
|
-o -name 'dsdt_generated.aml' -o -name 'dsdt_generated.asl.tmp' \
|
|
|
|
-o -name 'dsdt_generated.c' \
|
2018-05-25 01:34:45 +08:00
|
|
|
-o -name '*.efi' -o -name '*.gcno' -o -name '*.so' \) \
|
2019-11-11 00:25:09 +08:00
|
|
|
-type f -print | xargs rm -f
|
2014-02-04 16:24:40 +08:00
|
|
|
|
|
|
|
# mrproper - Delete all generated files, including .config
|
|
|
|
#
|
|
|
|
mrproper: rm-dirs := $(wildcard $(MRPROPER_DIRS))
|
|
|
|
mrproper: rm-files := $(wildcard $(MRPROPER_FILES))
|
|
|
|
mrproper-dirs := $(addprefix _mrproper_,scripts)
|
2002-11-03 07:17:16 +08:00
|
|
|
|
2014-02-04 16:24:40 +08:00
|
|
|
PHONY += $(mrproper-dirs) mrproper archmrproper
|
|
|
|
$(mrproper-dirs):
|
|
|
|
$(Q)$(MAKE) $(clean)=$(patsubst _mrproper_%,%,$@)
|
|
|
|
|
2014-10-30 09:58:32 +08:00
|
|
|
mrproper: clean $(mrproper-dirs)
|
2014-02-04 16:24:40 +08:00
|
|
|
$(call cmd,rmdirs)
|
|
|
|
$(call cmd,rmfiles)
|
2014-06-24 17:15:45 +08:00
|
|
|
@rm -f arch/*/include/asm/arch
|
2014-02-04 16:24:40 +08:00
|
|
|
|
|
|
|
# distclean
|
|
|
|
#
|
|
|
|
PHONY += distclean
|
2014-02-04 16:24:35 +08:00
|
|
|
|
|
|
|
distclean: mrproper
|
2014-02-04 16:24:40 +08:00
|
|
|
@find $(srctree) $(RCS_FIND_IGNORE) \
|
|
|
|
\( -name '*.orig' -o -name '*.rej' -o -name '*~' \
|
|
|
|
-o -name '*.bak' -o -name '#*#' -o -name '.*.orig' \
|
2014-04-15 12:29:00 +08:00
|
|
|
-o -name '.*.rej' -o -name '*%' -o -name 'core' \
|
|
|
|
-o -name '*.pyc' \) \
|
2014-02-04 16:24:40 +08:00
|
|
|
-type f -print | xargs rm -f
|
2019-01-18 21:41:23 +08:00
|
|
|
@rm -f boards.cfg CHANGELOG
|
2002-11-03 07:17:16 +08:00
|
|
|
|
2021-11-22 11:48:40 +08:00
|
|
|
# See doc/develop/python_cq.rst
|
2022-02-12 04:23:24 +08:00
|
|
|
PHONY += pylint pylint_err
|
2021-11-22 11:48:40 +08:00
|
|
|
PYLINT_BASE := scripts/pylint.base
|
|
|
|
PYLINT_CUR := pylint.cur
|
|
|
|
PYLINT_DIFF := pylint.diff
|
|
|
|
pylint:
|
|
|
|
$(Q)echo "Running pylint on all files (summary in $(PYLINT_CUR); output in pylint.out/)"
|
|
|
|
$(Q)mkdir -p pylint.out
|
|
|
|
$(Q)rm -f pylint.out/out*
|
|
|
|
$(Q)find tools test -name "*.py" \
|
|
|
|
| xargs -n1 -P$(shell nproc 2>/dev/null || echo 1) \
|
|
|
|
sh -c 'pylint --reports=y --exit-zero -f parseable --ignore-imports=yes $$@ > pylint.out/$$(echo $$@ | tr / _ | sed s/.py//)' _
|
2022-01-29 12:31:07 +08:00
|
|
|
$(Q)rm -f $(PYLINT_CUR)
|
|
|
|
$(Q)( cd pylint.out; for f in *; do \
|
|
|
|
sed -ne "s/Your code has been rated at \([-0-9.]*\).*/$$f \1/p" $$f; \
|
|
|
|
done ) | sort > $(PYLINT_CUR)
|
2021-11-22 11:48:40 +08:00
|
|
|
$(Q)base=$$(mktemp) cur=$$(mktemp); cut -d' ' -f1 $(PYLINT_BASE) >$$base; \
|
|
|
|
cut -d' ' -f1 $(PYLINT_CUR) >$$cur; \
|
|
|
|
comm -3 $$base $$cur > $(PYLINT_DIFF); \
|
|
|
|
if [ -s $(PYLINT_DIFF) ]; then \
|
|
|
|
echo "Files have been added/removed. Try:\n\tcp $(PYLINT_CUR) $(PYLINT_BASE)"; \
|
|
|
|
echo; \
|
|
|
|
echo "Added files:"; \
|
|
|
|
comm -13 $$base $$cur; \
|
|
|
|
echo; \
|
|
|
|
echo "Removed files:"; \
|
|
|
|
comm -23 $$base $$cur; \
|
|
|
|
false; \
|
|
|
|
else \
|
|
|
|
rm $$base $$cur $(PYLINT_DIFF); \
|
|
|
|
fi
|
|
|
|
$(Q)bad=false; while read base_file base_val <&3 && read cur_file cur_val <&4; do \
|
|
|
|
if awk "BEGIN {exit !($$cur_val < $$base_val)}"; then \
|
|
|
|
echo "$$base_file: Score was $$base_val, now $$cur_val"; \
|
|
|
|
bad=true; fi; \
|
|
|
|
done 3<$(PYLINT_BASE) 4<$(PYLINT_CUR); \
|
|
|
|
if $$bad; then \
|
|
|
|
echo "Some files have regressed, please fix"; \
|
|
|
|
false; \
|
|
|
|
else \
|
|
|
|
echo "No pylint regressions"; \
|
|
|
|
fi
|
|
|
|
|
2022-02-12 04:23:24 +08:00
|
|
|
# Check for errors only
|
|
|
|
pylint_err:
|
|
|
|
$(Q)pylint -E -j 0 --ignore-imports=yes \
|
|
|
|
$(shell find tools test -name "*.py")
|
|
|
|
|
2002-11-03 07:17:16 +08:00
|
|
|
backup:
|
2014-03-11 10:05:19 +08:00
|
|
|
F=`basename $(srctree)` ; cd .. ; \
|
2010-06-21 22:13:21 +08:00
|
|
|
gtar --force-local -zcvf `LC_ALL=C date "+$$F-%Y-%m-%d-%T.tar.gz"` $$F
|
2002-11-03 07:17:16 +08:00
|
|
|
|
2023-02-24 09:18:06 +08:00
|
|
|
PHONY += _pip pip pip_release
|
|
|
|
|
|
|
|
pip_release: PIP_ARGS="--real"
|
|
|
|
pip_test: PIP_ARGS=""
|
|
|
|
pip: PIP_ARGS="-n"
|
|
|
|
|
|
|
|
pip pip_test pip_release: _pip
|
|
|
|
|
|
|
|
_pip:
|
|
|
|
scripts/make_pip.sh u_boot_pylib ${PIP_ARGS}
|
2023-02-24 09:18:08 +08:00
|
|
|
scripts/make_pip.sh patman ${PIP_ARGS}
|
2023-02-24 09:18:13 +08:00
|
|
|
scripts/make_pip.sh buildman ${PIP_ARGS}
|
2023-02-24 09:18:17 +08:00
|
|
|
scripts/make_pip.sh dtoc ${PIP_ARGS}
|
2023-02-24 09:18:21 +08:00
|
|
|
scripts/make_pip.sh binman ${PIP_ARGS}
|
2023-02-24 09:18:06 +08:00
|
|
|
|
2014-02-24 10:12:23 +08:00
|
|
|
help:
|
|
|
|
@echo 'Cleaning targets:'
|
2014-10-30 09:58:32 +08:00
|
|
|
@echo ' clean - Remove most generated files but keep the config'
|
2014-02-24 10:12:23 +08:00
|
|
|
@echo ' mrproper - Remove all generated files + config + various backup files'
|
|
|
|
@echo ' distclean - mrproper + remove editor backup and patch files'
|
|
|
|
@echo ''
|
kconfig: switch to Kconfig
This commit enables Kconfig.
Going forward, we use Kconfig for the board configuration.
mkconfig will never be used. Nor will include/config.mk be generated.
Kconfig must be adjusted for U-Boot because our situation is
a little more complicated than Linux Kernel.
We have to generate multiple boot images (Normal, SPL, TPL)
from one source tree.
Each image needs its own configuration input.
Usage:
Run "make <board>_defconfig" to do the board configuration.
It will create the .config file and additionally spl/.config, tpl/.config
if SPL, TPL is enabled, respectively.
You can use "make config", "make menuconfig" etc. to create
a new .config or modify the existing one.
Use "make spl/config", "make spl/menuconfig" etc. for spl/.config
and do likewise for tpl/.config file.
The generic syntax of configuration targets for SPL, TPL is:
<target_image>/<config_command>
Here, <target_image> is either 'spl' or 'tpl'
<config_command> is 'config', 'menuconfig', 'xconfig', etc.
When the configuration is done, run "make".
(Or "make <board>_defconfig all" will do the configuration and build
in one time.)
For futher information of how Kconfig works in U-Boot,
please read the comment block of scripts/multiconfig.py.
By the way, there is another item worth remarking here:
coexistence of Kconfig and board herder files.
Prior to Kconfig, we used C headers to define a set of configs.
We expect a very long term to migrate from C headers to Kconfig.
Two different infractructure must coexist in the interim.
In our former configuration scheme, include/autoconf.mk was generated
for use in makefiles.
It is still generated under include/, spl/include/, tpl/include/ directory
for the Normal, SPL, TPL image, respectively.
Signed-off-by: Masahiro Yamada <yamada.m@jp.panasonic.com>
Acked-by: Simon Glass <sjg@chromium.org>
2014-07-30 13:08:17 +08:00
|
|
|
@echo 'Configuration targets:'
|
|
|
|
@$(MAKE) -f $(srctree)/scripts/kconfig/Makefile help
|
|
|
|
@echo ''
|
2018-10-02 11:12:36 +08:00
|
|
|
@echo 'Test targets:'
|
|
|
|
@echo ''
|
|
|
|
@echo ' check - Run all automated tests that use sandbox'
|
2022-08-07 07:51:59 +08:00
|
|
|
@echo ' pcheck - Run quick automated tests in parallel'
|
2018-11-18 23:14:29 +08:00
|
|
|
@echo ' qcheck - Run quick automated tests that use sandbox'
|
2020-04-18 08:08:59 +08:00
|
|
|
@echo ' tcheck - Run quick automated tests on tools'
|
2021-11-22 11:48:40 +08:00
|
|
|
@echo ' pylint - Run pylint on all Python files'
|
2018-10-02 11:12:36 +08:00
|
|
|
@echo ''
|
2014-02-24 10:12:23 +08:00
|
|
|
@echo 'Other generic targets:'
|
|
|
|
@echo ' all - Build all necessary images depending on configuration'
|
2016-08-01 07:35:01 +08:00
|
|
|
@echo ' tests - Build U-Boot for sandbox and run tests'
|
2014-10-30 10:06:11 +08:00
|
|
|
@echo '* u-boot - Build the bare u-boot'
|
2014-02-24 10:12:23 +08:00
|
|
|
@echo ' dir/ - Build all files in dir and below'
|
|
|
|
@echo ' dir/file.[oisS] - Build specified target only'
|
|
|
|
@echo ' dir/file.lst - Build specified mixed source/assembly target only'
|
|
|
|
@echo ' (requires a recent binutils and recent build (System.map))'
|
2014-07-15 20:52:02 +08:00
|
|
|
@echo ' tags/ctags - Generate ctags file for editors'
|
|
|
|
@echo ' etags - Generate etags file for editors'
|
2014-02-24 10:12:23 +08:00
|
|
|
@echo ' cscope - Generate cscope index'
|
2014-10-30 10:06:11 +08:00
|
|
|
@echo ' ubootrelease - Output the release version string (use with make -s)'
|
|
|
|
@echo ' ubootversion - Output the version stored in Makefile (use with make -s)'
|
2016-11-14 05:25:50 +08:00
|
|
|
@echo " cfg - Don't build, just create the .cfg files"
|
2017-09-05 15:53:59 +08:00
|
|
|
@echo " envtools - Build only the target-side environment tools"
|
2014-02-24 10:12:23 +08:00
|
|
|
@echo ''
|
2023-02-24 09:18:06 +08:00
|
|
|
@echo 'PyPi / pip targets:'
|
|
|
|
@echo ' pip - Check building of PyPi packages'
|
|
|
|
@echo ' pip_test - Build PyPi pakages and upload to test server'
|
|
|
|
@echo ' pip_release - Build PyPi pakages and upload to release server'
|
|
|
|
@echo ''
|
2014-02-24 10:12:23 +08:00
|
|
|
@echo 'Static analysers'
|
|
|
|
@echo ' checkstack - Generate a list of stack hogs'
|
2017-11-19 21:33:14 +08:00
|
|
|
@echo ' coccicheck - Execute static code analysis with Coccinelle'
|
2014-02-24 10:12:23 +08:00
|
|
|
@echo ''
|
|
|
|
@echo 'Documentation targets:'
|
2019-06-06 02:18:30 +08:00
|
|
|
@$(MAKE) -f $(srctree)/doc/Makefile dochelp
|
2014-02-24 10:12:23 +08:00
|
|
|
@echo ''
|
|
|
|
@echo ' make V=0|1 [targets] 0 => quiet build (default), 1 => verbose build'
|
|
|
|
@echo ' make V=2 [targets] 2 => give reason for rebuild of target'
|
|
|
|
@echo ' make O=dir [targets] Locate all output files in "dir", including .config'
|
|
|
|
@echo ' make C=1 [targets] Check all c source with $$CHECK (sparse by default)'
|
|
|
|
@echo ' make C=2 [targets] Force check of all c source with $$CHECK'
|
|
|
|
@echo ' make RECORDMCOUNT_WARN=1 [targets] Warn about ignored mcount sections'
|
|
|
|
@echo ' make W=n [targets] Enable extra gcc checks, n=1,2,3 where'
|
|
|
|
@echo ' 1: warnings which may be relevant and do not occur too often'
|
|
|
|
@echo ' 2: warnings which occur quite often but may still be relevant'
|
|
|
|
@echo ' 3: more obscure warnings, can most likely be ignored'
|
|
|
|
@echo ' Multiple levels can be combined with W=12 or W=123'
|
|
|
|
@echo ''
|
|
|
|
@echo 'Execute "make" or "make all" to build all targets marked with [*] '
|
|
|
|
@echo 'For further info see the ./README file'
|
|
|
|
|
2018-10-02 11:12:36 +08:00
|
|
|
tests check:
|
2016-08-01 07:35:01 +08:00
|
|
|
$(srctree)/test/run
|
2014-02-05 09:52:50 +08:00
|
|
|
|
2022-08-07 07:51:59 +08:00
|
|
|
pcheck:
|
|
|
|
$(srctree)/test/run parallel
|
|
|
|
|
2018-11-18 23:14:29 +08:00
|
|
|
qcheck:
|
|
|
|
$(srctree)/test/run quick
|
|
|
|
|
2020-04-18 08:08:59 +08:00
|
|
|
tcheck:
|
|
|
|
$(srctree)/test/run tools
|
|
|
|
|
2014-02-05 09:52:50 +08:00
|
|
|
# Documentation targets
|
|
|
|
# ---------------------------------------------------------------------------
|
2018-07-10 14:40:17 +08:00
|
|
|
DOC_TARGETS := xmldocs latexdocs pdfdocs htmldocs epubdocs cleandocs \
|
2022-12-19 10:48:08 +08:00
|
|
|
linkcheckdocs dochelp refcheckdocs texinfodocs infodocs
|
2018-07-10 14:40:17 +08:00
|
|
|
PHONY += $(DOC_TARGETS)
|
|
|
|
$(DOC_TARGETS): scripts_basic FORCE
|
2019-06-06 02:18:30 +08:00
|
|
|
$(Q)$(MAKE) $(build)=doc $@
|
2014-02-05 09:52:50 +08:00
|
|
|
|
2014-02-24 10:12:23 +08:00
|
|
|
PHONY += checkstack ubootrelease ubootversion
|
|
|
|
|
|
|
|
checkstack:
|
|
|
|
$(OBJDUMP) -d u-boot $$(find . -name u-boot-spl) | \
|
|
|
|
$(PERL) $(src)/scripts/checkstack.pl $(ARCH)
|
|
|
|
|
|
|
|
ubootrelease:
|
|
|
|
@echo "$(UBOOTVERSION)$$($(CONFIG_SHELL) $(srctree)/scripts/setlocalversion $(srctree))"
|
|
|
|
|
|
|
|
ubootversion:
|
|
|
|
@echo $(UBOOTVERSION)
|
|
|
|
|
2014-02-24 10:12:22 +08:00
|
|
|
# Single targets
|
|
|
|
# ---------------------------------------------------------------------------
|
|
|
|
# Single targets are compatible with:
|
|
|
|
# - build with mixed source and output
|
|
|
|
# - build with separate output dir 'make O=...'
|
|
|
|
# - external modules
|
|
|
|
#
|
|
|
|
# target-dir => where to store outputfile
|
|
|
|
# build-dir => directory in kernel source tree to use
|
|
|
|
|
|
|
|
ifeq ($(KBUILD_EXTMOD),)
|
|
|
|
build-dir = $(patsubst %/,%,$(dir $@))
|
|
|
|
target-dir = $(dir $@)
|
|
|
|
else
|
|
|
|
zap-slash=$(filter-out .,$(patsubst %/,%,$(dir $@)))
|
|
|
|
build-dir = $(KBUILD_EXTMOD)$(if $(zap-slash),/$(zap-slash))
|
|
|
|
target-dir = $(if $(KBUILD_EXTMOD),$(dir $<),$(dir $@))
|
|
|
|
endif
|
|
|
|
|
|
|
|
%.s: %.c prepare scripts FORCE
|
|
|
|
$(Q)$(MAKE) $(build)=$(build-dir) $(target-dir)$(notdir $@)
|
|
|
|
%.i: %.c prepare scripts FORCE
|
|
|
|
$(Q)$(MAKE) $(build)=$(build-dir) $(target-dir)$(notdir $@)
|
|
|
|
%.o: %.c prepare scripts FORCE
|
|
|
|
$(Q)$(MAKE) $(build)=$(build-dir) $(target-dir)$(notdir $@)
|
|
|
|
%.lst: %.c prepare scripts FORCE
|
|
|
|
$(Q)$(MAKE) $(build)=$(build-dir) $(target-dir)$(notdir $@)
|
|
|
|
%.s: %.S prepare scripts FORCE
|
|
|
|
$(Q)$(MAKE) $(build)=$(build-dir) $(target-dir)$(notdir $@)
|
|
|
|
%.o: %.S prepare scripts FORCE
|
|
|
|
$(Q)$(MAKE) $(build)=$(build-dir) $(target-dir)$(notdir $@)
|
|
|
|
%.symtypes: %.c prepare scripts FORCE
|
|
|
|
$(Q)$(MAKE) $(build)=$(build-dir) $(target-dir)$(notdir $@)
|
|
|
|
|
|
|
|
# Modules
|
|
|
|
/: prepare scripts FORCE
|
|
|
|
$(cmd_crmodverdir)
|
|
|
|
$(Q)$(MAKE) KBUILD_MODULES=$(if $(CONFIG_MODULES),1) \
|
|
|
|
$(build)=$(build-dir)
|
|
|
|
%/: prepare scripts FORCE
|
|
|
|
$(cmd_crmodverdir)
|
|
|
|
$(Q)$(MAKE) KBUILD_MODULES=$(if $(CONFIG_MODULES),1) \
|
|
|
|
$(build)=$(build-dir)
|
|
|
|
%.ko: prepare scripts FORCE
|
|
|
|
$(cmd_crmodverdir)
|
|
|
|
$(Q)$(MAKE) KBUILD_MODULES=$(if $(CONFIG_MODULES),1) \
|
|
|
|
$(build)=$(build-dir) $(@:.ko=.o)
|
|
|
|
$(Q)$(MAKE) -f $(srctree)/scripts/Makefile.modpost
|
|
|
|
|
2021-06-21 04:29:13 +08:00
|
|
|
quiet_cmd_genenv = GENENV $@
|
2022-11-28 16:41:22 +08:00
|
|
|
cmd_genenv = \
|
|
|
|
$(objtree)/tools/printinitialenv | \
|
|
|
|
sed -e '/^\s*$$/d' | \
|
2023-07-20 20:50:42 +08:00
|
|
|
sort -t '=' -k 1,1 -s -o $@
|
2019-03-13 16:46:45 +08:00
|
|
|
|
2022-11-28 16:41:22 +08:00
|
|
|
u-boot-initial-env: $(env_h) FORCE
|
|
|
|
$(Q)$(MAKE) $(build)=tools $(objtree)/tools/printinitialenv
|
2019-03-13 16:46:45 +08:00
|
|
|
$(call if_changed,genenv)
|
|
|
|
|
2017-11-19 21:33:14 +08:00
|
|
|
# Consistency checks
|
|
|
|
# ---------------------------------------------------------------------------
|
|
|
|
|
|
|
|
PHONY += coccicheck
|
|
|
|
|
|
|
|
coccicheck:
|
|
|
|
$(Q)$(CONFIG_SHELL) $(srctree)/scripts/$@
|
|
|
|
|
2014-04-24 21:24:28 +08:00
|
|
|
# FIXME Should go into a make.lib or something
|
2014-02-24 10:12:22 +08:00
|
|
|
# ===========================================================================
|
|
|
|
|
2014-02-04 16:24:40 +08:00
|
|
|
quiet_cmd_rmdirs = $(if $(wildcard $(rm-dirs)),CLEAN $(wildcard $(rm-dirs)))
|
|
|
|
cmd_rmdirs = rm -rf $(rm-dirs)
|
|
|
|
|
|
|
|
quiet_cmd_rmfiles = $(if $(wildcard $(rm-files)),CLEAN $(wildcard $(rm-files)))
|
|
|
|
cmd_rmfiles = rm -f $(rm-files)
|
|
|
|
|
2014-02-24 10:12:14 +08:00
|
|
|
# read all saved command lines
|
|
|
|
|
2021-06-18 06:07:25 +08:00
|
|
|
cmd_files := $(wildcard .*.cmd)
|
2014-02-24 10:12:14 +08:00
|
|
|
|
|
|
|
ifneq ($(cmd_files),)
|
|
|
|
$(cmd_files): ; # Do not try to update included dependency files
|
|
|
|
include $(cmd_files)
|
|
|
|
endif
|
|
|
|
|
2021-06-18 06:07:25 +08:00
|
|
|
endif #ifeq ($(config-targets),1)
|
|
|
|
endif #ifeq ($(mixed-targets),1)
|
2014-02-04 16:24:24 +08:00
|
|
|
endif # skip-makefile
|
|
|
|
|
|
|
|
PHONY += FORCE
|
|
|
|
FORCE:
|
|
|
|
|
2020-03-12 06:11:17 +08:00
|
|
|
# Declare the contents of the PHONY variable as phony. We keep that
|
2014-02-04 16:24:24 +08:00
|
|
|
# information in a variable so we can use it in if_changed and friends.
|
|
|
|
.PHONY: $(PHONY)
|