2002-11-02 23:17:16 +00:00
|
|
|
#
|
Licenses: introduce SPDX Unique Lincense Identifiers
Like many other projects, U-Boot has a tradition of including big
blocks of License headers in all files. This not only blows up the
source code with mostly redundant information, but also makes it very
difficult to generate License Clearing Reports. An additional problem
is that even the same lincenses are referred to by a number of
slightly varying text blocks (full, abbreviated, different
indentation, line wrapping and/or white space, with obsolete address
information, ...) which makes automatic processing a nightmare.
To make this easier, such license headers in the source files will be
replaced with a single line reference to Unique Lincense Identifiers
as defined by the Linux Foundation's SPDX project [1]. For example,
in a source file the full "GPL v2.0 or later" header text will be
replaced by a single line:
SPDX-License-Identifier: GPL-2.0+
We use the SPDX Unique Lincense Identifiers here; these are available
at [2].
Note: From the legal point of view, this patch is supposed to be only
a change to the textual representation of the license information,
but in no way any change to the actual license terms. With this patch
applied, all files will still be licensed under the same terms they
were before.
Note 2: The apparent difference between the old "COPYING" and the new
"Licenses/gpl-2.0.txt" only results from switching to the upstream
version of the license which is differently formatted; there are not
any actual changes to the content.
Note 3: There are some recurring questions about linense issues, such
as:
- Is a "All Rights Reserved" clause a problem in GPL code?
- Are files without any license header a problem?
- Do we need license headers at all?
The following excerpt from an e-mail by Daniel B. Ravicher should help
with these:
| Message-ID: <4ADF8CAA.5030808@softwarefreedom.org>
| Date: Wed, 21 Oct 2009 18:35:22 -0400
| From: "Daniel B. Ravicher" <ravicher@softwarefreedom.org>
| To: Wolfgang Denk <wd@denx.de>
| Subject: Re: GPL and license cleanup questions
|
| Mr. Denk,
|
| Wolfgang Denk wrote:
| > - There are a number of files which do not include any specific
| > license information at all. Is it correct to assume that these files
| > are automatically covered by the "GPL v2 or later" clause as
| > specified by the COPYING file in the top level directory of the
| > U-Boot source tree?
|
| That is a very fact specific analysis and could be different across the
| various files. However, if the contributor could reasonably be expected
| to have known that the project was licensed GPLv2 or later at the time
| she made her contribution, then a reasonably implication is that she
| consented to her contributions being distributed under those terms.
|
| > - Do such files need any clean up, for example should we add GPL
| > headers to them, or is this not needed?
|
| If the project as a whole is licensed under clear terms, you need not
| identify those same terms in each file, although there is no harm in
| doing so.
|
| > - There are other files, which include both a GPL license header
| > _plus_ some copyright note with an "All Rights Reserved" clause. It
| > has been my understanding that this is a conflict, and me must ask
| > the copyright holders to remove such "All Rights Reserved" clauses.
| > But then, some people claim that "All Rights Reserved" is a no-op
| > nowadays. License checking tools (like OSLC) seem to indicate this is
| > a problem, but then we see quite a lot of "All rights reserved" in
| > BSD-licensed files in gcc and glibc. So what is the correct way to
| > deal with such files?
|
| It is not a conflict to grant a license and also reserve all rights, as
| implicit in that language is that you are reserving all "other" rights
| not granted in the license. Thus, a file with "Licensed under GPL, All
| Rights Reserved" would mean that it is licensed under the GPL, but no
| other rights are given to copy, modify or redistribute it.
|
| Warm regards,
| --Dan
|
| Daniel B. Ravicher, Legal Director
| Software Freedom Law Center (SFLC) and Moglen Ravicher LLC
| 1995 Broadway, 17th Fl., New York, NY 10023
| (212) 461-1902 direct (212) 580-0800 main (212) 580-0898 fax
| ravicher@softwarefreedom.org www.softwarefreedom.org
[1] http://spdx.org/
[2] http://spdx.org/licenses/
Signed-off-by: Wolfgang Denk <wd@denx.de>
2013-06-21 08:22:36 +00:00
|
|
|
# (C) Copyright 2000-2013
|
2002-11-02 23:17:16 +00:00
|
|
|
# Wolfgang Denk, DENX Software Engineering, wd@denx.de.
|
|
|
|
#
|
Licenses: introduce SPDX Unique Lincense Identifiers
Like many other projects, U-Boot has a tradition of including big
blocks of License headers in all files. This not only blows up the
source code with mostly redundant information, but also makes it very
difficult to generate License Clearing Reports. An additional problem
is that even the same lincenses are referred to by a number of
slightly varying text blocks (full, abbreviated, different
indentation, line wrapping and/or white space, with obsolete address
information, ...) which makes automatic processing a nightmare.
To make this easier, such license headers in the source files will be
replaced with a single line reference to Unique Lincense Identifiers
as defined by the Linux Foundation's SPDX project [1]. For example,
in a source file the full "GPL v2.0 or later" header text will be
replaced by a single line:
SPDX-License-Identifier: GPL-2.0+
We use the SPDX Unique Lincense Identifiers here; these are available
at [2].
Note: From the legal point of view, this patch is supposed to be only
a change to the textual representation of the license information,
but in no way any change to the actual license terms. With this patch
applied, all files will still be licensed under the same terms they
were before.
Note 2: The apparent difference between the old "COPYING" and the new
"Licenses/gpl-2.0.txt" only results from switching to the upstream
version of the license which is differently formatted; there are not
any actual changes to the content.
Note 3: There are some recurring questions about linense issues, such
as:
- Is a "All Rights Reserved" clause a problem in GPL code?
- Are files without any license header a problem?
- Do we need license headers at all?
The following excerpt from an e-mail by Daniel B. Ravicher should help
with these:
| Message-ID: <4ADF8CAA.5030808@softwarefreedom.org>
| Date: Wed, 21 Oct 2009 18:35:22 -0400
| From: "Daniel B. Ravicher" <ravicher@softwarefreedom.org>
| To: Wolfgang Denk <wd@denx.de>
| Subject: Re: GPL and license cleanup questions
|
| Mr. Denk,
|
| Wolfgang Denk wrote:
| > - There are a number of files which do not include any specific
| > license information at all. Is it correct to assume that these files
| > are automatically covered by the "GPL v2 or later" clause as
| > specified by the COPYING file in the top level directory of the
| > U-Boot source tree?
|
| That is a very fact specific analysis and could be different across the
| various files. However, if the contributor could reasonably be expected
| to have known that the project was licensed GPLv2 or later at the time
| she made her contribution, then a reasonably implication is that she
| consented to her contributions being distributed under those terms.
|
| > - Do such files need any clean up, for example should we add GPL
| > headers to them, or is this not needed?
|
| If the project as a whole is licensed under clear terms, you need not
| identify those same terms in each file, although there is no harm in
| doing so.
|
| > - There are other files, which include both a GPL license header
| > _plus_ some copyright note with an "All Rights Reserved" clause. It
| > has been my understanding that this is a conflict, and me must ask
| > the copyright holders to remove such "All Rights Reserved" clauses.
| > But then, some people claim that "All Rights Reserved" is a no-op
| > nowadays. License checking tools (like OSLC) seem to indicate this is
| > a problem, but then we see quite a lot of "All rights reserved" in
| > BSD-licensed files in gcc and glibc. So what is the correct way to
| > deal with such files?
|
| It is not a conflict to grant a license and also reserve all rights, as
| implicit in that language is that you are reserving all "other" rights
| not granted in the license. Thus, a file with "Licensed under GPL, All
| Rights Reserved" would mean that it is licensed under the GPL, but no
| other rights are given to copy, modify or redistribute it.
|
| Warm regards,
| --Dan
|
| Daniel B. Ravicher, Legal Director
| Software Freedom Law Center (SFLC) and Moglen Ravicher LLC
| 1995 Broadway, 17th Fl., New York, NY 10023
| (212) 461-1902 direct (212) 580-0800 main (212) 580-0898 fax
| ravicher@softwarefreedom.org www.softwarefreedom.org
[1] http://spdx.org/
[2] http://spdx.org/licenses/
Signed-off-by: Wolfgang Denk <wd@denx.de>
2013-06-21 08:22:36 +00:00
|
|
|
# SPDX-License-Identifier: GPL-2.0+
|
2002-11-02 23:17:16 +00:00
|
|
|
#
|
|
|
|
|
2013-11-25 21:49:32 +00:00
|
|
|
VERSION = 2014
|
2014-02-19 21:01:28 +00:00
|
|
|
PATCHLEVEL = 04
|
2012-07-10 07:21:12 +00:00
|
|
|
SUBLEVEL =
|
2014-02-19 21:01:28 +00:00
|
|
|
EXTRAVERSION = -rc1
|
2014-02-04 08:24:30 +00:00
|
|
|
NAME =
|
2008-01-12 23:59:21 +00: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 08:24:28 +00: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.
|
|
|
|
|
|
|
|
# Do not:
|
|
|
|
# o use make's built-in rules and variables
|
|
|
|
# (this increases performance and avoids hard-to-debug behaviour);
|
|
|
|
# o print "Entering directory ...";
|
|
|
|
MAKEFLAGS += -rR --no-print-directory
|
|
|
|
|
|
|
|
# Avoid funny character set dependencies
|
|
|
|
unexport LC_ALL
|
|
|
|
LC_COLLATE=C
|
|
|
|
LC_NUMERIC=C
|
|
|
|
export LC_COLLATE LC_NUMERIC
|
|
|
|
|
|
|
|
# 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.
|
|
|
|
|
|
|
|
# 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
|
|
|
|
|
|
|
|
# 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.
|
|
|
|
#
|
|
|
|
# See the file "Documentation/sparse.txt" for more details, including
|
|
|
|
# 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
|
|
|
|
|
2014-02-04 08:24:24 +00: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 09:51:23 +00:00
|
|
|
#
|
2014-02-04 08:24:24 +00: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 09:51:23 +00:00
|
|
|
#
|
2014-02-04 08:24:24 +00: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-01 17:49:50 +00:00
|
|
|
|
2014-02-04 08:24:24 +00:00
|
|
|
# OK, Make called in directory where kernel src resides
|
|
|
|
# Do we want to locate output files in a separate directory?
|
2006-09-01 17:49:50 +00:00
|
|
|
ifeq ("$(origin O)", "command line")
|
2014-02-04 08:24:24 +00:00
|
|
|
KBUILD_OUTPUT := $(O)
|
|
|
|
endif
|
|
|
|
|
|
|
|
ifeq ("$(origin W)", "command line")
|
|
|
|
export KBUILD_ENABLE_EXTRA_GCC_CHECKS := $(W)
|
2006-09-01 17:49:50 +00:00
|
|
|
endif
|
|
|
|
|
2014-02-04 08:24:24 +00:00
|
|
|
# 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)
|
|
|
|
KBUILD_OUTPUT := $(shell cd $(KBUILD_OUTPUT) && /bin/pwd)
|
|
|
|
$(if $(KBUILD_OUTPUT),, \
|
|
|
|
$(error output directory "$(saved-output)" does not exist))
|
|
|
|
|
|
|
|
PHONY += $(MAKECMDGOALS) sub-make
|
|
|
|
|
|
|
|
$(filter-out _all sub-make $(CURDIR)/Makefile, $(MAKECMDGOALS)) _all: sub-make
|
|
|
|
@:
|
|
|
|
|
|
|
|
sub-make: FORCE
|
|
|
|
$(if $(KBUILD_VERBOSE:1=),@)$(MAKE) -C $(KBUILD_OUTPUT) \
|
|
|
|
KBUILD_SRC=$(CURDIR) \
|
|
|
|
KBUILD_EXTMOD="$(KBUILD_EXTMOD)" -f $(CURDIR)/Makefile \
|
|
|
|
$(filter-out _all sub-make,$(MAKECMDGOALS))
|
|
|
|
|
|
|
|
# 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),)
|
|
|
|
|
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 08:24:28 +00:00
|
|
|
# If building an external module we do not care about the all: rule
|
|
|
|
# but instead _all depend on modules
|
2014-02-04 08:24:24 +00: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 08:24:28 +00:00
|
|
|
ifeq ($(KBUILD_EXTMOD),)
|
2014-02-04 08:24:24 +00:00
|
|
|
_all: all
|
2008-09-09 21:55:18 +00: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 08:24:28 +00:00
|
|
|
_all: modules
|
2008-09-09 21:55:18 +00:00
|
|
|
endif
|
2014-02-04 08:24:24 +00:00
|
|
|
|
|
|
|
srctree := $(if $(KBUILD_SRC),$(KBUILD_SRC),$(CURDIR))
|
|
|
|
objtree := $(CURDIR)
|
|
|
|
src := $(srctree)
|
|
|
|
obj := $(objtree)
|
|
|
|
|
|
|
|
VPATH := $(srctree)$(if $(KBUILD_EXTMOD),:$(KBUILD_EXTMOD))
|
|
|
|
|
|
|
|
export srctree objtree VPATH
|
|
|
|
|
|
|
|
OBJTREE := $(objtree)
|
2011-07-18 06:09:15 +00:00
|
|
|
SPLTREE := $(OBJTREE)/spl
|
2013-08-16 07:16:15 +00:00
|
|
|
TPLTREE := $(OBJTREE)/tpl
|
2014-02-04 08:24:24 +00:00
|
|
|
SRCTREE := $(srctree)
|
2006-09-01 17:49:50 +00:00
|
|
|
TOPDIR := $(SRCTREE)
|
2014-02-04 08:24:24 +00:00
|
|
|
export TOPDIR SRCTREE OBJTREE SPLTREE TPLTREE
|
2006-09-01 17:49:50 +00:00
|
|
|
|
|
|
|
MKCONFIG := $(SRCTREE)/mkconfig
|
|
|
|
export MKCONFIG
|
2002-11-02 23:17:16 +00:00
|
|
|
|
2008-03-02 21:45:33 +00:00
|
|
|
# Make sure CDPATH settings don't interfere
|
|
|
|
unexport CDPATH
|
|
|
|
|
2002-11-02 23:17:16 +00:00
|
|
|
#########################################################################
|
|
|
|
|
|
|
|
HOSTARCH := $(shell uname -m | \
|
2011-04-13 09:43:28 +00:00
|
|
|
sed -e s/i.86/x86/ \
|
2002-11-02 23:17:16 +00:00
|
|
|
-e s/sun4u/sparc64/ \
|
|
|
|
-e s/arm.*/arm/ \
|
|
|
|
-e s/sa110/arm/ \
|
2010-04-28 07:52:02 +00:00
|
|
|
-e s/ppc64/powerpc/ \
|
|
|
|
-e s/ppc/powerpc/ \
|
2010-06-15 22:59:17 +00:00
|
|
|
-e s/macppc/powerpc/\
|
|
|
|
-e s/sh.*/sh/)
|
2002-11-02 23:17:16 +00:00
|
|
|
|
2005-08-12 21:23:46 +00:00
|
|
|
HOSTOS := $(shell uname -s | tr '[:upper:]' '[:lower:]' | \
|
2002-11-02 23:17:16 +00:00
|
|
|
sed -e 's/\(cygwin\).*/cygwin/')
|
|
|
|
|
2013-04-11 09:35:54 +00:00
|
|
|
export HOSTARCH HOSTOS
|
2002-11-02 23:17:16 +00:00
|
|
|
|
|
|
|
# Deal with colliding definitions from tcsh etc.
|
|
|
|
VENDOR=
|
|
|
|
|
2008-01-12 23:59:21 +00:00
|
|
|
#########################################################################
|
2014-02-04 08:24:30 +00:00
|
|
|
|
2009-06-15 03:33:14 +00:00
|
|
|
# set default to nothing for native builds
|
2007-03-06 17:01:47 +00:00
|
|
|
ifeq ($(HOSTARCH),$(ARCH))
|
2009-06-15 03:33:14 +00:00
|
|
|
CROSS_COMPILE ?=
|
2008-01-12 23:59:21 +00:00
|
|
|
endif
|
|
|
|
|
2014-02-04 08:24:15 +00: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)
|
|
|
|
|
|
|
|
HOSTCC = gcc
|
|
|
|
HOSTCFLAGS = -Wall -Wstrict-prototypes -O2 -fomit-frame-pointer
|
|
|
|
|
|
|
|
ifeq ($(HOSTOS),cygwin)
|
|
|
|
HOSTCFLAGS += -ansi
|
|
|
|
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-01 17:49:50 +00:00
|
|
|
#
|
2014-02-04 08:24:15 +00: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 09:51:23 +00:00
|
|
|
#
|
2014-02-04 08:24:15 +00:00
|
|
|
ifeq ($(HOSTOS),darwin)
|
|
|
|
# get major and minor product version (e.g. '10' and '6' for Snow Leopard)
|
|
|
|
DARWIN_MAJOR_VERSION = $(shell sw_vers -productVersion | cut -f 1 -d '.')
|
|
|
|
DARWIN_MINOR_VERSION = $(shell sw_vers -productVersion | cut -f 2 -d '.')
|
|
|
|
|
|
|
|
os_x_before = $(shell if [ $(DARWIN_MAJOR_VERSION) -le $(1) -a \
|
|
|
|
$(DARWIN_MINOR_VERSION) -le $(2) ] ; then echo "$(3)"; else echo "$(4)"; fi ;)
|
|
|
|
|
|
|
|
# Snow Leopards build environment has no longer restrictions as described above
|
|
|
|
HOSTCC = $(call os_x_before, 10, 5, "cc", "gcc")
|
|
|
|
HOSTCFLAGS += $(call os_x_before, 10, 4, "-traditional-cpp")
|
|
|
|
HOSTLDFLAGS += $(call os_x_before, 10, 5, "-multiply_defined suppress")
|
|
|
|
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 08:24:28 +00:00
|
|
|
# Decide whether to build built-in, modular, or both.
|
|
|
|
# Normally, just do built-in.
|
|
|
|
|
|
|
|
KBUILD_MODULES :=
|
|
|
|
KBUILD_BUILTIN := 1
|
|
|
|
|
|
|
|
# If we have only "make modules", don't compile built-in objects.
|
|
|
|
# When we're building modules with modversions, we need to consider
|
|
|
|
# the built-in objects during the descend as well, in order to
|
|
|
|
# make sure the checksums are up to date before we record them.
|
|
|
|
|
|
|
|
ifeq ($(MAKECMDGOALS),modules)
|
|
|
|
KBUILD_BUILTIN := $(if $(CONFIG_MODVERSIONS),1)
|
|
|
|
endif
|
|
|
|
|
|
|
|
# If we have "make <whatever> modules", compile modules
|
|
|
|
# in addition to whatever we do anyway.
|
|
|
|
# Just "make" or "make all" shall build modules as well
|
|
|
|
|
|
|
|
# U-Boot does not need modules
|
|
|
|
#ifneq ($(filter all _all modules,$(MAKECMDGOALS)),)
|
|
|
|
# KBUILD_MODULES := 1
|
|
|
|
#endif
|
|
|
|
|
|
|
|
#ifeq ($(MAKECMDGOALS),)
|
|
|
|
# KBUILD_MODULES := 1
|
|
|
|
#endif
|
|
|
|
|
|
|
|
export KBUILD_MODULES KBUILD_BUILTIN
|
|
|
|
export KBUILD_CHECKSRC KBUILD_SRC KBUILD_EXTMOD
|
|
|
|
|
|
|
|
# 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.
|
2006-09-01 17:49:50 +00: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 08:24:28 +00:00
|
|
|
# quiet_cmd_cc_o_c = Compiling $(RELDIR)/$@
|
|
|
|
# cmd_cc_o_c = $(CC) $(c_flags) -c -o $@ $<
|
2006-09-01 17:49:50 +00: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 08:24:28 +00:00
|
|
|
# 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.
|
2006-09-07 09:51:23 +00: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 08:24:28 +00:00
|
|
|
# A simple variant is to prefix commands with $(Q) - that's useful
|
|
|
|
# for commands that shall be hidden in non-verbose mode.
|
2006-09-07 09:51:23 +00: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 08:24:28 +00:00
|
|
|
# $(Q)ln $@ :<
|
2006-09-07 09:51:23 +00: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 08:24:28 +00:00
|
|
|
# If KBUILD_VERBOSE equals 0 then the above command will be hidden.
|
|
|
|
# If KBUILD_VERBOSE equals 1 then the above command is displayed.
|
2006-09-01 17:49:50 +00: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 08:24:28 +00:00
|
|
|
ifeq ($(KBUILD_VERBOSE),1)
|
|
|
|
quiet =
|
|
|
|
Q =
|
|
|
|
else
|
|
|
|
quiet=quiet_
|
|
|
|
Q = @
|
2006-09-01 17:49:50 +00: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 08:24:28 +00:00
|
|
|
# If the user is running make -s (silent mode), suppress echoing of
|
|
|
|
# commands
|
2012-09-21 12:28:17 +00: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 08:24:28 +00:00
|
|
|
ifneq ($(filter s% -s%,$(MAKEFLAGS)),)
|
|
|
|
quiet=silent_
|
2012-09-21 12:28:17 +00: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 08:24:28 +00:00
|
|
|
export quiet Q KBUILD_VERBOSE
|
2006-09-07 10:05:53 +00:00
|
|
|
|
|
|
|
|
2014-02-04 08:24:24 +00:00
|
|
|
# Look for make include files relative to root of kernel src
|
|
|
|
MAKEFLAGS += --include-dir=$(srctree)
|
2006-09-01 17:49:50 +00:00
|
|
|
|
2014-02-04 08:24:18 +00:00
|
|
|
# We need some generic definitions (do not try to remake the file).
|
|
|
|
$(srctree)/scripts/Kbuild.include: ;
|
|
|
|
include $(srctree)/scripts/Kbuild.include
|
2006-09-01 17:49:50 +00:00
|
|
|
|
2014-02-04 08:24:15 +00:00
|
|
|
# Make variables (CC, etc...)
|
2002-11-02 23:17:16 +00:00
|
|
|
|
2014-02-04 08:24:15 +00: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-01 17:49:50 +00:00
|
|
|
else
|
2014-02-04 08:24:15 +00: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
|
|
|
|
AWK = awk
|
|
|
|
RANLIB = $(CROSS_COMPILE)RANLIB
|
|
|
|
DTC = dtc
|
|
|
|
CHECK = sparse
|
|
|
|
|
|
|
|
CHECKFLAGS := -D__linux__ -Dlinux -D__STDC__ -Dunix -D__unix__ \
|
|
|
|
-Wbitwise -Wno-return-void -D__CHECK_ENDIAN__ $(CF)
|
|
|
|
|
2014-02-04 08:24:19 +00:00
|
|
|
KBUILD_CPPFLAGS := -D__KERNEL__
|
|
|
|
|
|
|
|
KBUILD_CFLAGS := -Wall -Wstrict-prototypes \
|
|
|
|
-Wno-format-security \
|
|
|
|
-fno-builtin -ffreestanding
|
|
|
|
KBUILD_AFLAGS := -D__ASSEMBLY__
|
|
|
|
|
2014-02-24 02:12:09 +00: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 08:24:30 +00:00
|
|
|
|
2014-02-24 02:12:09 +00:00
|
|
|
export VERSION PATCHLEVEL SUBLEVEL UBOOTRELEASE UBOOTVERSION
|
2014-02-04 08:24:35 +00:00
|
|
|
export ARCH CPU BOARD VENDOR SOC
|
2014-02-04 08:24:15 +00:00
|
|
|
export CONFIG_SHELL HOSTCC HOSTCFLAGS HOSTLDFLAGS CROSS_COMPILE AS LD CC
|
|
|
|
export CPP AR NM LDR STRIP OBJCOPY OBJDUMP
|
|
|
|
export MAKE AWK
|
|
|
|
export DTC CHECK CHECKFLAGS
|
|
|
|
|
2014-02-04 08:24:20 +00:00
|
|
|
export KBUILD_CPPFLAGS NOSTDINC_FLAGS UBOOTINCLUDE
|
2014-02-04 08:24:19 +00:00
|
|
|
export KBUILD_CFLAGS KBUILD_AFLAGS
|
|
|
|
|
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 08:24:28 +00: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
|
|
|
|
|
|
|
|
RCS_FIND_IGNORE := \( -name SCCS -o -name BitKeeper -o -name .svn -o -name CVS \
|
|
|
|
-o -name .pc -o -name .hg -o -name .git \) -prune -o
|
|
|
|
export RCS_TAR_IGNORE := --exclude SCCS --exclude BitKeeper --exclude .svn \
|
|
|
|
--exclude CVS --exclude .pc --exclude .hg --exclude .git
|
|
|
|
|
|
|
|
# ===========================================================================
|
|
|
|
# Rules shared between *config targets and build targets
|
|
|
|
|
|
|
|
# Basic helpers built in scripts/
|
|
|
|
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 08:24:42 +00: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
|
|
|
|
$(Q)$(CONFIG_SHELL) $(srctree)/scripts/mkmakefile \
|
|
|
|
$(srctree) $(objtree) $(VERSION) $(PATCHLEVEL)
|
2006-09-07 09:51:23 +00:00
|
|
|
endif
|
2006-09-01 17:49:50 +00:00
|
|
|
|
2014-02-04 08:24:35 +00: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 02:12:09 +00:00
|
|
|
version_h := include/generated/version_autogenerated.h
|
|
|
|
timestamp_h := include/generated/timestamp_autogenerated.h
|
|
|
|
|
2014-02-04 08:24:35 +00:00
|
|
|
no-dot-config-targets := clean clobber mrproper distclean \
|
2014-02-21 06:45:11 +00:00
|
|
|
help %docs check% coccicheck \
|
2014-02-04 08:24:35 +00:00
|
|
|
backup
|
|
|
|
|
|
|
|
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-02 21:45:33 +00:00
|
|
|
|
2014-02-04 08:24:35 +00:00
|
|
|
ifeq ($(KBUILD_EXTMOD),)
|
|
|
|
ifneq ($(filter config %config,$(MAKECMDGOALS)),)
|
|
|
|
config-targets := 1
|
|
|
|
ifneq ($(filter-out config %config,$(MAKECMDGOALS)),)
|
|
|
|
mixed-targets := 1
|
|
|
|
endif
|
|
|
|
endif
|
2014-02-04 08:24:19 +00:00
|
|
|
endif
|
2002-11-02 23:17:16 +00:00
|
|
|
|
2014-02-04 08:24:35 +00:00
|
|
|
ifeq ($(mixed-targets),1)
|
|
|
|
# ===========================================================================
|
|
|
|
# We're called with mixed targets (*config and build targets).
|
|
|
|
# Handle them one by one.
|
2014-02-04 08:24:19 +00:00
|
|
|
|
2014-02-04 08:24:41 +00:00
|
|
|
PHONY += $(MAKECMDGOALS) build-one-by-one
|
2009-05-30 05:02:03 +00:00
|
|
|
|
2014-02-04 08:24:41 +00:00
|
|
|
$(MAKECMDGOALS): build-one-by-one
|
|
|
|
@:
|
|
|
|
|
|
|
|
build-one-by-one:
|
|
|
|
$(Q)set -e; \
|
|
|
|
for i in $(MAKECMDGOALS); do \
|
|
|
|
$(MAKE) -f $(srctree)/Makefile $$i; \
|
|
|
|
done
|
2009-05-30 05:02:03 +00:00
|
|
|
|
2014-02-04 08:24:35 +00: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-02 23:17:16 +00:00
|
|
|
|
2014-02-04 08:24:35 +00:00
|
|
|
# Read arch specific Makefile to set KBUILD_DEFCONFIG as needed.
|
|
|
|
# KBUILD_DEFCONFIG may point out an alternative default configuration
|
|
|
|
# used for 'make defconfig'
|
2009-07-22 02:59:36 +00:00
|
|
|
|
2014-02-04 08:24:42 +00:00
|
|
|
%_config:: outputmakefile
|
2014-02-04 08:24:35 +00:00
|
|
|
@$(MKCONFIG) -A $(@:_config=)
|
2014-02-04 08:24:19 +00:00
|
|
|
|
2014-02-04 08:24:35 +00: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 11:29:28 +00:00
|
|
|
|
2002-11-02 23:17:16 +00:00
|
|
|
# load ARCH, BOARD, and CPU configuration
|
2014-02-04 08:24:35 +00:00
|
|
|
-include include/config.mk
|
2006-09-01 17:49:50 +00:00
|
|
|
|
2014-02-04 08:24:35 +00:00
|
|
|
ifeq ($(dot-config),1)
|
|
|
|
# Read in config
|
|
|
|
-include include/autoconf.mk
|
|
|
|
-include include/autoconf.mk.dep
|
2002-11-02 23:17:16 +00:00
|
|
|
|
2006-03-12 00:37:50 +00:00
|
|
|
# load other configuration
|
2014-02-04 08:24:35 +00:00
|
|
|
include $(srctree)/config.mk
|
2006-03-12 00:37:50 +00:00
|
|
|
|
2014-02-04 08:24:35 +00:00
|
|
|
ifeq ($(wildcard include/config.mk),)
|
|
|
|
$(error "System not configured - see README")
|
2014-02-04 08:24:21 +00:00
|
|
|
endif
|
2013-04-20 08:42:36 +00:00
|
|
|
|
2014-02-04 08:24:21 +00:00
|
|
|
ifeq ($(__HAVE_ARCH_GENERIC_BOARD),)
|
|
|
|
ifneq ($(CONFIG_SYS_GENERIC_BOARD),)
|
2014-02-04 08:24:35 +00:00
|
|
|
$(error Your architecture does not support generic board. \
|
2014-02-04 08:24:21 +00:00
|
|
|
Please undefined CONFIG_SYS_GENERIC_BOARD in your board config file)
|
2013-04-20 08:42:36 +00:00
|
|
|
endif
|
|
|
|
endif
|
|
|
|
|
2011-06-20 12:45:37 +00: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.
|
|
|
|
|
2011-11-21 10:49:37 +00:00
|
|
|
LDSCRIPT_MAKEFILE_DIR = $(dir $(LDSCRIPT))
|
|
|
|
|
2011-06-20 12:45:37 +00:00
|
|
|
ifndef LDSCRIPT
|
|
|
|
#LDSCRIPT := $(TOPDIR)/board/$(BOARDDIR)/u-boot.lds.debug
|
|
|
|
ifdef CONFIG_SYS_LDSCRIPT
|
|
|
|
# need to strip off double quotes
|
2013-12-05 06:08:31 +00:00
|
|
|
LDSCRIPT := $(CONFIG_SYS_LDSCRIPT:"%"=%)
|
2011-06-20 12:45:37 +00:00
|
|
|
endif
|
|
|
|
endif
|
|
|
|
|
2011-11-21 10:49:37 +00:00
|
|
|
# If there is no specified link script, we look in a number of places for it
|
2011-06-20 12:45:37 +00:00
|
|
|
ifndef LDSCRIPT
|
|
|
|
ifeq ($(CONFIG_NAND_U_BOOT),y)
|
|
|
|
LDSCRIPT := $(TOPDIR)/board/$(BOARDDIR)/u-boot-nand.lds
|
|
|
|
ifeq ($(wildcard $(LDSCRIPT)),)
|
|
|
|
LDSCRIPT := $(TOPDIR)/$(CPUDIR)/u-boot-nand.lds
|
|
|
|
endif
|
|
|
|
endif
|
|
|
|
ifeq ($(wildcard $(LDSCRIPT)),)
|
|
|
|
LDSCRIPT := $(TOPDIR)/board/$(BOARDDIR)/u-boot.lds
|
|
|
|
endif
|
|
|
|
ifeq ($(wildcard $(LDSCRIPT)),)
|
|
|
|
LDSCRIPT := $(TOPDIR)/$(CPUDIR)/u-boot.lds
|
|
|
|
endif
|
2011-11-21 10:49:37 +00:00
|
|
|
ifeq ($(wildcard $(LDSCRIPT)),)
|
|
|
|
LDSCRIPT := $(TOPDIR)/arch/$(ARCH)/cpu/u-boot.lds
|
|
|
|
# We don't expect a Makefile here
|
|
|
|
LDSCRIPT_MAKEFILE_DIR =
|
|
|
|
endif
|
2011-06-20 12:45:37 +00:00
|
|
|
ifeq ($(wildcard $(LDSCRIPT)),)
|
|
|
|
$(error could not find linker script)
|
|
|
|
endif
|
|
|
|
endif
|
|
|
|
|
2014-02-04 08:24:35 +00:00
|
|
|
else
|
|
|
|
|
|
|
|
|
|
|
|
endif # $(dot-config)
|
|
|
|
|
|
|
|
KBUILD_CFLAGS += -Os #-fomit-frame-pointer
|
|
|
|
|
|
|
|
ifdef BUILD_TAG
|
|
|
|
KBUILD_CFLAGS += -DBUILD_TAG='"$(BUILD_TAG)"'
|
|
|
|
endif
|
|
|
|
|
|
|
|
KBUILD_CFLAGS += $(call cc-option,-fno-stack-protector)
|
|
|
|
|
|
|
|
KBUILD_CFLAGS += -g
|
|
|
|
# $(KBUILD_AFLAGS) sets -g, which causes gcc to pass a suitable -g<format>
|
|
|
|
# option to the assembler.
|
|
|
|
KBUILD_AFLAGS += -g
|
|
|
|
|
|
|
|
# Report stack usage if supported
|
2013-12-11 11:11:34 +00:00
|
|
|
ifeq ($(shell $(CONFIG_SHELL) $(srctree)/scripts/gcc-stack-usage.sh $(CC)),y)
|
|
|
|
KBUILD_CFLAGS += -fstack-usage
|
|
|
|
endif
|
2014-02-04 08:24:35 +00:00
|
|
|
|
|
|
|
KBUILD_CFLAGS += $(call cc-option,-Wno-format-nonliteral)
|
|
|
|
|
|
|
|
# turn jbsr into jsr for m68k
|
|
|
|
ifeq ($(ARCH),m68k)
|
|
|
|
ifeq ($(findstring 3.4,$(shell $(CC) --version)),3.4)
|
|
|
|
KBUILD_AFLAGS += -Wa,-gstabs,-S
|
|
|
|
endif
|
|
|
|
endif
|
|
|
|
|
|
|
|
ifneq ($(CONFIG_SYS_TEXT_BASE),)
|
|
|
|
KBUILD_CPPFLAGS += -DCONFIG_SYS_TEXT_BASE=$(CONFIG_SYS_TEXT_BASE)
|
|
|
|
endif
|
|
|
|
|
|
|
|
export CONFIG_SYS_TEXT_BASE
|
|
|
|
|
|
|
|
# Use UBOOTINCLUDE when you must reference the include/ directory.
|
|
|
|
# Needed to be compatible with the O= option
|
|
|
|
UBOOTINCLUDE :=
|
|
|
|
ifneq ($(OBJTREE),$(SRCTREE))
|
|
|
|
UBOOTINCLUDE += -I$(OBJTREE)/include
|
|
|
|
endif
|
|
|
|
UBOOTINCLUDE += -I$(srctree)/include \
|
|
|
|
-I$(srctree)/arch/$(ARCH)/include
|
|
|
|
|
|
|
|
NOSTDINC_FLAGS += -nostdinc -isystem $(shell $(CC) -print-file-name=include)
|
|
|
|
CHECKFLAGS += $(NOSTDINC_FLAGS)
|
|
|
|
|
|
|
|
# FIX ME
|
|
|
|
cpp_flags := $(KBUILD_CPPFLAGS) $(CPPFLAGS) $(UBOOTINCLUDE) $(NOSTDINC_FLAGS)
|
|
|
|
c_flags := $(KBUILD_CFLAGS) $(cpp_flags)
|
|
|
|
|
2002-11-02 23:17:16 +00:00
|
|
|
#########################################################################
|
|
|
|
# U-Boot objects....order is important (i.e. start must be first)
|
|
|
|
|
2013-11-28 03:09:59 +00:00
|
|
|
head-y := $(CPUDIR)/start.o
|
|
|
|
head-$(CONFIG_4xx) += arch/powerpc/cpu/ppc4xx/resetvec.o
|
|
|
|
head-$(CONFIG_MPC85xx) += arch/powerpc/cpu/mpc85xx/resetvec.o
|
2002-11-02 23:17:16 +00:00
|
|
|
|
2014-02-04 08:24:24 +00:00
|
|
|
HAVE_VENDOR_COMMON_LIB = $(if $(wildcard $(srctree)/board/$(VENDOR)/common/Makefile),y,n)
|
2012-07-19 13:39:58 +00:00
|
|
|
|
2014-02-04 08:24:37 +00:00
|
|
|
libs-y += lib/
|
|
|
|
libs-$(HAVE_VENDOR_COMMON_LIB) += board/$(VENDOR)/common/
|
|
|
|
libs-y += $(CPUDIR)/
|
2004-10-09 22:21:29 +00:00
|
|
|
ifdef SOC
|
2014-02-04 08:24:37 +00:00
|
|
|
libs-y += $(CPUDIR)/$(SOC)/
|
2004-10-09 22:21:29 +00:00
|
|
|
endif
|
2014-02-04 08:24:37 +00:00
|
|
|
libs-$(CONFIG_OF_EMBED) += dts/
|
|
|
|
libs-y += arch/$(ARCH)/lib/
|
|
|
|
libs-y += fs/
|
|
|
|
libs-y += net/
|
|
|
|
libs-y += disk/
|
|
|
|
libs-y += drivers/
|
|
|
|
libs-y += drivers/dma/
|
|
|
|
libs-y += drivers/gpio/
|
|
|
|
libs-y += drivers/i2c/
|
|
|
|
libs-y += drivers/input/
|
|
|
|
libs-y += drivers/mmc/
|
|
|
|
libs-y += drivers/mtd/
|
|
|
|
libs-$(CONFIG_CMD_NAND) += drivers/mtd/nand/
|
|
|
|
libs-y += drivers/mtd/onenand/
|
|
|
|
libs-$(CONFIG_CMD_UBI) += drivers/mtd/ubi/
|
|
|
|
libs-y += drivers/mtd/spi/
|
|
|
|
libs-y += drivers/net/
|
|
|
|
libs-y += drivers/net/phy/
|
|
|
|
libs-y += drivers/pci/
|
|
|
|
libs-y += drivers/power/ \
|
2013-11-11 05:36:00 +00:00
|
|
|
drivers/power/fuel_gauge/ \
|
|
|
|
drivers/power/mfd/ \
|
|
|
|
drivers/power/pmic/ \
|
|
|
|
drivers/power/battery/
|
2014-02-04 08:24:37 +00:00
|
|
|
libs-y += drivers/spi/
|
|
|
|
libs-$(CONFIG_FMAN_ENET) += drivers/net/fm/
|
|
|
|
libs-$(CONFIG_SYS_FSL_DDR) += drivers/ddr/fsl/
|
|
|
|
libs-y += drivers/serial/
|
|
|
|
libs-y += drivers/usb/eth/
|
|
|
|
libs-y += drivers/usb/gadget/
|
|
|
|
libs-y += drivers/usb/host/
|
|
|
|
libs-y += drivers/usb/musb/
|
|
|
|
libs-y += drivers/usb/musb-new/
|
|
|
|
libs-y += drivers/usb/phy/
|
|
|
|
libs-y += drivers/usb/ulpi/
|
|
|
|
libs-y += common/
|
|
|
|
libs-y += lib/libfdt/
|
|
|
|
libs-$(CONFIG_API) += api/
|
|
|
|
libs-$(CONFIG_HAS_POST) += post/
|
|
|
|
libs-y += test/
|
2006-09-01 17:49:50 +00:00
|
|
|
|
2013-05-27 22:55:42 +00:00
|
|
|
ifneq (,$(filter $(SOC), mx25 mx27 mx5 mx6 mx31 mx35 mxs vf610))
|
2014-02-04 08:24:37 +00:00
|
|
|
libs-y += arch/$(ARCH)/imx-common/
|
2011-11-25 00:18:01 +00:00
|
|
|
endif
|
|
|
|
|
2014-02-04 08:24:37 +00:00
|
|
|
libs-$(CONFIG_ARM) += arch/arm/cpu/
|
|
|
|
libs-$(CONFIG_PPC) += arch/powerpc/cpu/
|
|
|
|
|
|
|
|
libs-y += board/$(BOARDDIR)/
|
|
|
|
|
|
|
|
libs-y := $(sort $(libs-y))
|
2010-08-19 04:48:11 +00:00
|
|
|
|
2014-02-04 08:24:37 +00: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 05:35:55 +00:00
|
|
|
|
2003-12-06 19:49:23 +00:00
|
|
|
|
2003-09-11 23:06:34 +00:00
|
|
|
# Add GCC lib
|
2009-07-23 11:15:59 +00:00
|
|
|
ifdef USE_PRIVATE_LIBGCC
|
|
|
|
ifeq ("$(USE_PRIVATE_LIBGCC)", "yes")
|
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 08:24:28 +00:00
|
|
|
PLATFORM_LIBGCC = $(OBJTREE)/arch/$(ARCH)/lib/lib.a
|
2009-07-23 11:15:59 +00:00
|
|
|
else
|
|
|
|
PLATFORM_LIBGCC = -L $(USE_PRIVATE_LIBGCC) -lgcc
|
|
|
|
endif
|
|
|
|
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 08:24:28 +00:00
|
|
|
PLATFORM_LIBGCC := -L $(shell dirname `$(CC) $(c_flags) -print-libgcc-file-name`) -lgcc
|
2009-07-23 11:15:59 +00:00
|
|
|
endif
|
|
|
|
PLATFORM_LIBS += $(PLATFORM_LIBGCC)
|
|
|
|
export PLATFORM_LIBS
|
2004-03-14 15:06:13 +00:00
|
|
|
|
2009-08-23 06:47:59 +00:00
|
|
|
# Special flags for CPP when processing the linker script.
|
|
|
|
# Pass the version down so we can handle backwards compatibility
|
|
|
|
# on the fly.
|
|
|
|
LDPPFLAGS += \
|
|
|
|
-include $(TOPDIR)/include/u-boot/u-boot.lds.h \
|
2011-11-21 10:49:40 +00:00
|
|
|
-DCPUDIR=$(CPUDIR) \
|
2009-08-23 06:47:59 +00: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-05 17:43:17 +00:00
|
|
|
#########################################################################
|
2002-11-02 23:17:16 +00:00
|
|
|
#########################################################################
|
|
|
|
|
2010-10-14 02:58:23 +00:00
|
|
|
ifneq ($(CONFIG_BOARD_SIZE_LIMIT),)
|
|
|
|
BOARD_SIZE_CHECK = \
|
|
|
|
@actual=`wc -c $@ | awk '{print $$1}'`; \
|
2012-11-08 10:19:09 +00:00
|
|
|
limit=`printf "%d" $(CONFIG_BOARD_SIZE_LIMIT)`; \
|
2010-10-14 02:58:23 +00:00
|
|
|
if test $$actual -gt $$limit; then \
|
2012-11-08 10:19:09 +00:00
|
|
|
echo "$@ exceeds file size limit:" >&2 ; \
|
|
|
|
echo " limit: $$limit bytes" >&2 ; \
|
|
|
|
echo " actual: $$actual bytes" >&2 ; \
|
|
|
|
echo " excess: $$((actual - limit)) bytes" >&2; \
|
2010-10-14 02:58:23 +00:00
|
|
|
exit 1; \
|
|
|
|
fi
|
|
|
|
else
|
|
|
|
BOARD_SIZE_CHECK =
|
|
|
|
endif
|
|
|
|
|
2013-12-14 03:47:32 +00:00
|
|
|
# Statically apply RELA-style relocations (currently arm64 only)
|
|
|
|
ifneq ($(CONFIG_STATIC_RELA),)
|
|
|
|
# $(1) is u-boot ELF, $(2) is u-boot bin, $(3) is text base
|
|
|
|
DO_STATIC_RELA = \
|
|
|
|
start=$$($(NM) $(1) | grep __rel_dyn_start | cut -f 1 -d ' '); \
|
|
|
|
end=$$($(NM) $(1) | grep __rel_dyn_end | cut -f 1 -d ' '); \
|
2014-02-04 08:24:24 +00:00
|
|
|
tools/relocate-rela $(2) $(3) $$start $$end
|
2013-12-14 03:47:32 +00:00
|
|
|
else
|
|
|
|
DO_STATIC_RELA =
|
|
|
|
endif
|
|
|
|
|
2009-06-15 04:25:19 +00:00
|
|
|
# Always append ALL so that arch config.mk's can add custom ones
|
2014-02-04 08:24:24 +00:00
|
|
|
ALL-y += u-boot.srec u-boot.bin System.map
|
|
|
|
|
|
|
|
ALL-$(CONFIG_NAND_U_BOOT) += u-boot-nand.bin
|
|
|
|
ALL-$(CONFIG_ONENAND_U_BOOT) += u-boot-onenand.bin
|
|
|
|
ALL-$(CONFIG_RAMBOOT_PBL) += u-boot.pbl
|
|
|
|
ALL-$(CONFIG_SPL) += spl/u-boot-spl.bin
|
|
|
|
ALL-$(CONFIG_SPL_FRAMEWORK) += u-boot.img
|
|
|
|
ALL-$(CONFIG_TPL) += tpl/u-boot-tpl.bin
|
2014-02-05 02:28:25 +00:00
|
|
|
ALL-$(CONFIG_OF_SEPARATE) += u-boot-dtb.bin
|
2013-03-27 14:34:18 +00:00
|
|
|
ifneq ($(CONFIG_SPL_TARGET),)
|
2014-02-04 08:24:24 +00:00
|
|
|
ALL-$(CONFIG_SPL) += $(CONFIG_SPL_TARGET:"%"=%)
|
2013-03-27 14:34:18 +00:00
|
|
|
endif
|
2014-02-04 08:24:24 +00:00
|
|
|
ALL-$(CONFIG_REMAKE_ELF) += u-boot.elf
|
2011-05-24 20:02:57 +00:00
|
|
|
|
2012-08-31 08:30:12 +00:00
|
|
|
# enable combined SPL/u-boot/dtb rules for tegra
|
2012-12-11 13:34:17 +00:00
|
|
|
ifneq ($(CONFIG_TEGRA),)
|
2013-10-31 09:21:38 +00:00
|
|
|
ifeq ($(CONFIG_SPL),y)
|
2012-08-31 08:30:12 +00:00
|
|
|
ifeq ($(CONFIG_OF_SEPARATE),y)
|
2014-02-04 08:24:24 +00:00
|
|
|
ALL-y += u-boot-dtb-tegra.bin
|
2012-08-31 08:30:12 +00:00
|
|
|
else
|
2014-02-04 08:24:24 +00:00
|
|
|
ALL-y += u-boot-nodtb-tegra.bin
|
2012-08-31 08:30:12 +00:00
|
|
|
endif
|
|
|
|
endif
|
2013-10-31 09:21:38 +00:00
|
|
|
endif
|
2012-08-31 08:30:12 +00:00
|
|
|
|
2014-02-04 08:24:35 +00:00
|
|
|
LDFLAGS_u-boot += -T u-boot.lds $(LDFLAGS_FINAL)
|
|
|
|
ifneq ($(CONFIG_SYS_TEXT_BASE),)
|
|
|
|
LDFLAGS_u-boot += -Ttext $(CONFIG_SYS_TEXT_BASE)
|
|
|
|
endif
|
2013-10-17 08:34:53 +00:00
|
|
|
|
2014-02-24 02:12:14 +00:00
|
|
|
quiet_cmd_objcopy = OBJCOPY $@
|
|
|
|
cmd_objcopy = $(OBJCOPY) $(OBJCOPYFLAGS) $(OBJCOPYFLAGS_$(@F)) $< $@
|
|
|
|
|
2014-02-24 02:12:15 +00:00
|
|
|
quiet_cmd_mkimage = UIMAGE $@
|
|
|
|
cmd_mkimage = $(objtree)/tools/mkimage $(MKIMAGEFLAGS_$(@F)) -d $< $@ \
|
|
|
|
$(if $(KBUILD_VERBOSE:1=), >/dev/null)
|
|
|
|
|
2014-02-04 08:24:37 +00:00
|
|
|
all: $(ALL-y)
|
2002-11-02 23:17:16 +00:00
|
|
|
|
2014-02-05 02:28:25 +00:00
|
|
|
PHONY += dtbs
|
|
|
|
dtbs dts/dt.dtb: checkdtc u-boot
|
|
|
|
$(Q)$(MAKE) $(build)=dts dtbs
|
2011-10-24 19:15:31 +00:00
|
|
|
|
2014-02-05 02:28:25 +00:00
|
|
|
u-boot-dtb.bin: u-boot.bin dts/dt.dtb
|
2011-10-24 19:15:31 +00:00
|
|
|
cat $^ >$@
|
|
|
|
|
2014-02-24 02:12:14 +00:00
|
|
|
OBJCOPYFLAGS_u-boot.hex := -O ihex
|
2005-01-09 21:28:15 +00:00
|
|
|
|
2014-02-24 02:12:14 +00:00
|
|
|
OBJCOPYFLAGS_u-boot.srec := -O srec
|
2002-11-02 23:17:16 +00:00
|
|
|
|
2014-02-24 02:12:14 +00:00
|
|
|
u-boot.hex u-boot.srec: u-boot FORCE
|
|
|
|
$(call if_changed,objcopy)
|
|
|
|
|
|
|
|
OBJCOPYFLAGS_u-boot.bin := -O binary
|
|
|
|
|
|
|
|
u-boot.bin: u-boot FORCE
|
|
|
|
$(call if_changed,objcopy)
|
|
|
|
$(call DO_STATIC_RELA,$<,$@,$(CONFIG_SYS_TEXT_BASE))
|
|
|
|
$(BOARD_SIZE_CHECK)
|
2002-11-02 23:17:16 +00:00
|
|
|
|
2014-02-04 08:24:24 +00:00
|
|
|
u-boot.ldr: u-boot
|
2009-07-22 02:17:36 +00:00
|
|
|
$(CREATE_LDR_ENV)
|
2008-08-07 22:56:56 +00:00
|
|
|
$(LDR) -T $(CONFIG_BFIN_CPU) -c $@ $< $(LDR_FLAGS)
|
2010-10-14 02:58:23 +00:00
|
|
|
$(BOARD_SIZE_CHECK)
|
2008-02-05 00:26:57 +00:00
|
|
|
|
2014-02-24 02:12:14 +00:00
|
|
|
OBJCOPYFLAGS_u-boot.ldr.hex := -I binary -O ihex
|
|
|
|
|
|
|
|
OBJCOPYFLAGS_u-boot.ldr.srec := -I binary -O srec
|
2008-02-05 00:26:57 +00:00
|
|
|
|
2014-02-24 02:12:14 +00:00
|
|
|
u-boot.ldr.hex u-boot.ldr.srec: u-boot.ldr FORCE
|
|
|
|
$(call if_changed,objcopy)
|
2008-02-05 00:26:57 +00:00
|
|
|
|
2012-08-16 15:54:52 +00:00
|
|
|
#
|
|
|
|
# U-Boot entry point, needed for booting of full-blown U-Boot
|
|
|
|
# from the SPL U-Boot version.
|
|
|
|
#
|
|
|
|
ifndef CONFIG_SYS_UBOOT_START
|
|
|
|
CONFIG_SYS_UBOOT_START := 0
|
|
|
|
endif
|
|
|
|
|
2014-02-24 02:12:15 +00:00
|
|
|
MKIMAGEFLAGS_u-boot.img = -A $(ARCH) -T firmware -C none -O u-boot \
|
|
|
|
-a $(CONFIG_SYS_TEXT_BASE) -e $(CONFIG_SYS_UBOOT_START) \
|
|
|
|
-n "U-Boot $(UBOOTRELEASE) for $(BOARD) board"
|
2003-08-05 17:43:17 +00:00
|
|
|
|
2014-02-24 02:12:15 +00:00
|
|
|
MKIMAGEFLAGS_u-boot.kwb = -n $(CONFIG_SYS_KWD_CONFIG) -T kwbimage \
|
|
|
|
-a $(CONFIG_SYS_TEXT_BASE) -e $(CONFIG_SYS_TEXT_BASE)
|
2010-01-20 17:19:10 +00:00
|
|
|
|
2014-02-24 02:12:15 +00:00
|
|
|
MKIMAGEFLAGS_u-boot.pbl = -n $(CONFIG_SYS_FSL_PBL_RCW) \
|
|
|
|
-R $(CONFIG_SYS_FSL_PBL_PBI) -T pblimage
|
2009-09-07 09:35:02 +00:00
|
|
|
|
2014-02-24 02:12:15 +00:00
|
|
|
u-boot.img u-boot.kwb u-boot.pbl: u-boot.bin FORCE
|
|
|
|
$(call if_changed,mkimage)
|
|
|
|
|
|
|
|
u-boot.imx: u-boot.bin
|
|
|
|
$(Q)$(MAKE) $(build)=arch/arm/imx-common $(objtree)/$@
|
2012-08-10 02:49:35 +00:00
|
|
|
|
2014-02-04 08:24:24 +00:00
|
|
|
u-boot.sha1: u-boot.bin
|
|
|
|
tools/ubsha1 u-boot.bin
|
2007-06-22 17:11:54 +00:00
|
|
|
|
2014-02-04 08:24:24 +00:00
|
|
|
u-boot.dis: u-boot
|
2002-11-02 23:17:16 +00:00
|
|
|
$(OBJDUMP) -d $< > $@
|
|
|
|
|
2013-08-16 07:16:15 +00:00
|
|
|
# $@ is output, $(1) and $(2) are inputs, $(3) is padded intermediate,
|
|
|
|
# $(4) is pad-to
|
|
|
|
SPL_PAD_APPEND = \
|
2014-02-24 02:12:12 +00:00
|
|
|
$(OBJCOPY) $(OBJCOPYFLAGS) --pad-to=$(4) -I binary -O binary \
|
2014-02-04 08:24:24 +00:00
|
|
|
$(1) $(3); \
|
|
|
|
cat $(3) $(2) > $@; \
|
|
|
|
rm $(3)
|
2012-12-06 13:33:16 +00:00
|
|
|
|
2013-08-16 07:16:15 +00:00
|
|
|
ifdef CONFIG_TPL
|
2014-02-04 08:24:24 +00:00
|
|
|
SPL_PAYLOAD := tpl/u-boot-with-tpl.bin
|
2013-08-16 07:16:15 +00:00
|
|
|
else
|
2014-02-04 08:24:24 +00:00
|
|
|
SPL_PAYLOAD := u-boot.bin
|
2013-08-16 07:16:15 +00:00
|
|
|
endif
|
2012-12-06 13:33:16 +00:00
|
|
|
|
2014-02-04 08:24:24 +00:00
|
|
|
u-boot-with-spl.bin: spl/u-boot-spl.bin $(SPL_PAYLOAD)
|
2013-08-16 07:16:15 +00:00
|
|
|
$(call SPL_PAD_APPEND,$<,$(SPL_PAYLOAD),spl/u-boot-spl-pad.bin,$(CONFIG_SPL_PAD_TO))
|
|
|
|
|
2014-02-04 08:24:24 +00:00
|
|
|
tpl/u-boot-with-tpl.bin: tpl/u-boot-tpl.bin u-boot.bin
|
|
|
|
$(call SPL_PAD_APPEND,$<,u-boot.bin,tpl/u-boot-tpl-pad.bin,$(CONFIG_TPL_PAD_TO))
|
2011-07-16 00:06:42 +00:00
|
|
|
|
2014-02-24 02:12:13 +00:00
|
|
|
u-boot-with-spl.imx u-boot-with-nand-spl.imx: spl/u-boot-spl.bin u-boot.bin
|
|
|
|
$(Q)$(MAKE) $(build)=arch/arm/imx-common $(objtree)/$@
|
2013-04-11 09:35:57 +00:00
|
|
|
|
2014-02-24 02:12:15 +00:00
|
|
|
MKIMAGEFLAGS_u-boot.ubl = -n $(UBL_CONFIG) -T ublimage -e $(CONFIG_SYS_TEXT_BASE)
|
|
|
|
|
|
|
|
u-boot.ubl: u-boot-with-spl.bin FORCE
|
|
|
|
$(call if_changed,mkimage)
|
2012-09-19 01:25:26 +00:00
|
|
|
|
2014-02-04 08:24:24 +00:00
|
|
|
u-boot.ais: spl/u-boot-spl.bin u-boot.img
|
|
|
|
tools/mkimage -s -n $(if $(CONFIG_AIS_CONFIG_FILE),$(srctree)/$(CONFIG_AIS_CONFIG_FILE:"%"=%),"/dev/null") \
|
2012-06-13 08:39:06 +00:00
|
|
|
-T aisimage \
|
2011-12-09 09:47:39 +00:00
|
|
|
-e $(CONFIG_SPL_TEXT_BASE) \
|
2014-02-04 08:24:24 +00:00
|
|
|
-d spl/u-boot-spl.bin \
|
|
|
|
spl/u-boot-spl.ais
|
2014-02-24 02:12:12 +00:00
|
|
|
$(OBJCOPY) $(OBJCOPYFLAGS) -I binary \
|
2011-12-09 09:47:39 +00:00
|
|
|
--pad-to=$(CONFIG_SPL_MAX_SIZE) -O binary \
|
2014-02-04 08:24:24 +00:00
|
|
|
spl/u-boot-spl.ais spl/u-boot-spl-pad.ais
|
|
|
|
cat spl/u-boot-spl-pad.ais u-boot.img > u-boot.ais
|
2011-12-09 09:47:39 +00:00
|
|
|
|
2012-08-18 07:25:25 +00:00
|
|
|
|
2014-02-24 02:12:13 +00:00
|
|
|
u-boot.sb: u-boot.bin spl/u-boot-spl.bin
|
|
|
|
$(Q)$(MAKE) $(build)=arch/arm/cpu/arm926ejs/mxs $(objtree)/u-boot.sb
|
2011-11-08 23:18:19 +00:00
|
|
|
|
2012-01-05 10:19:50 +00:00
|
|
|
# On x600 (SPEAr600) U-Boot is appended to U-Boot SPL.
|
|
|
|
# Both images are created using mkimage (crc etc), so that the ROM
|
|
|
|
# bootloader can check its integrity. Padding needs to be done to the
|
|
|
|
# SPL image (with mkimage header) and not the binary. Otherwise the resulting image
|
|
|
|
# which is loaded/copied by the ROM bootloader to SRAM doesn't fit.
|
|
|
|
# The resulting image containing both U-Boot images is called u-boot.spr
|
2014-02-04 08:24:24 +00:00
|
|
|
u-boot.spr: u-boot.img spl/u-boot-spl.bin
|
|
|
|
tools/mkimage -A $(ARCH) -T firmware -C none \
|
2012-01-05 10:19:50 +00:00
|
|
|
-a $(CONFIG_SPL_TEXT_BASE) -e $(CONFIG_SPL_TEXT_BASE) -n XLOADER \
|
2014-02-04 08:24:24 +00:00
|
|
|
-d spl/u-boot-spl.bin $@
|
2013-12-18 10:00:51 +00:00
|
|
|
$(OBJCOPY) -I binary -O binary \
|
|
|
|
--pad-to=$(CONFIG_SPL_PAD_TO) --gap-fill=0xff $@
|
2014-02-04 08:24:24 +00:00
|
|
|
cat u-boot.img >> $@
|
2012-01-05 10:19:50 +00:00
|
|
|
|
2012-12-11 13:34:17 +00:00
|
|
|
ifneq ($(CONFIG_TEGRA),)
|
2014-02-04 08:24:24 +00:00
|
|
|
u-boot-nodtb-tegra.bin: spl/u-boot-spl.bin u-boot.bin
|
2014-02-24 02:12:12 +00:00
|
|
|
$(OBJCOPY) $(OBJCOPYFLAGS) --pad-to=$(CONFIG_SYS_TEXT_BASE) -O binary spl/u-boot-spl spl/u-boot-spl-pad.bin
|
2014-02-04 08:24:24 +00:00
|
|
|
cat spl/u-boot-spl-pad.bin u-boot.bin > $@
|
|
|
|
rm spl/u-boot-spl-pad.bin
|
2013-05-14 08:00:53 +00:00
|
|
|
|
|
|
|
ifeq ($(CONFIG_OF_SEPARATE),y)
|
2014-02-05 02:28:25 +00:00
|
|
|
u-boot-dtb-tegra.bin: u-boot-nodtb-tegra.bin dts/dt.dtb
|
|
|
|
cat $^ > $@
|
2013-05-14 08:00:53 +00:00
|
|
|
endif
|
2012-08-31 08:30:10 +00:00
|
|
|
endif
|
|
|
|
|
2014-02-04 08:24:24 +00:00
|
|
|
u-boot-img.bin: spl/u-boot-spl.bin u-boot.img
|
|
|
|
cat spl/u-boot-spl.bin u-boot.img > $@
|
2012-08-24 15:36:53 +00:00
|
|
|
|
2013-02-22 10:36:50 +00:00
|
|
|
# PPC4xx needs the SPL at the end of the image, since the reset vector
|
|
|
|
# is located at 0xfffffffc. So we can't use the "u-boot-img.bin" target
|
|
|
|
# and need to introduce a new build target with the full blown U-Boot
|
|
|
|
# at the start padded up to the start of the SPL image. And then concat
|
|
|
|
# the SPL image to the end.
|
2014-02-04 08:24:24 +00:00
|
|
|
u-boot-img-spl-at-end.bin: spl/u-boot-spl.bin u-boot.img
|
2013-12-18 10:00:51 +00:00
|
|
|
$(OBJCOPY) -I binary -O binary --pad-to=$(CONFIG_UBOOT_PAD_TO) \
|
2014-02-04 08:24:24 +00:00
|
|
|
--gap-fill=0xff u-boot.img $@
|
|
|
|
cat spl/u-boot-spl.bin >> $@
|
2013-02-22 10:36:50 +00:00
|
|
|
|
2013-12-14 03:47:33 +00:00
|
|
|
# Create a new ELF from a raw binary file. 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).
|
|
|
|
# FIXME refactor dts/Makefile to share target/arch detection
|
2014-02-04 08:24:24 +00:00
|
|
|
u-boot.elf: u-boot.bin
|
2013-12-14 03:47:33 +00:00
|
|
|
@$(OBJCOPY) -B aarch64 -I binary -O elf64-littleaarch64 \
|
2014-02-04 08:24:24 +00:00
|
|
|
$< u-boot-elf.o
|
|
|
|
@$(LD) u-boot-elf.o -o $@ \
|
2013-12-14 03:47:33 +00:00
|
|
|
--defsym=_start=$(CONFIG_SYS_TEXT_BASE) \
|
|
|
|
-Ttext=$(CONFIG_SYS_TEXT_BASE)
|
|
|
|
|
2011-10-03 19:26:50 +00:00
|
|
|
ifeq ($(CONFIG_SANDBOX),y)
|
|
|
|
GEN_UBOOT = \
|
2014-02-04 08:24:24 +00:00
|
|
|
$(CC) $(SYMS) -T u-boot.lds \
|
2014-02-04 08:24:37 +00:00
|
|
|
-Wl,--start-group $(u-boot-main) -Wl,--end-group \
|
2011-10-03 19:26:50 +00:00
|
|
|
$(PLATFORM_LIBS) -Wl,-Map -Wl,u-boot.map -o u-boot
|
|
|
|
else
|
2009-05-20 08:35:14 +00:00
|
|
|
GEN_UBOOT = \
|
2014-02-04 08:24:24 +00:00
|
|
|
$(LD) $(LDFLAGS) $(LDFLAGS_$(@F)) \
|
2014-02-04 08:24:37 +00:00
|
|
|
$(u-boot-init) \
|
|
|
|
--start-group $(u-boot-main) --end-group $(PLATFORM_LIBS) \
|
2002-11-19 23:01:07 +00:00
|
|
|
-Map u-boot.map -o u-boot
|
2011-10-03 19:26:50 +00:00
|
|
|
endif
|
|
|
|
|
2014-02-04 08:24:37 +00:00
|
|
|
u-boot: $(u-boot-init) $(u-boot-main) u-boot.lds
|
2009-05-20 08:35:14 +00:00
|
|
|
$(GEN_UBOOT)
|
|
|
|
ifeq ($(CONFIG_KALLSYMS),y)
|
2014-02-04 08:24:24 +00:00
|
|
|
smap=`$(call SYSTEM_MAP,u-boot) | \
|
2009-08-17 12:00:53 +00:00
|
|
|
awk '$$2 ~ /[tTwW]/ {printf $$1 $$3 "\\\\000"}'` ; \
|
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 08:24:28 +00:00
|
|
|
$(CC) $(c_flags) -DSYSTEM_MAP="\"$${smap}\"" \
|
2014-02-04 08:24:24 +00:00
|
|
|
-c $(srctree)/common/system_map.c -o common/system_map.o
|
|
|
|
$(GEN_UBOOT) common/system_map.o
|
2009-05-20 08:35:14 +00:00
|
|
|
endif
|
2002-11-02 23:17:16 +00:00
|
|
|
|
2014-02-04 08:24:37 +00:00
|
|
|
# The actual objects are generated when descending,
|
|
|
|
# make sure no implicit rule kicks in
|
|
|
|
$(sort $(u-boot-init) $(u-boot-main)): $(u-boot-dirs) ;
|
2006-09-01 17:49:50 +00:00
|
|
|
|
2014-02-04 08:24:37 +00:00
|
|
|
# Handle descending into subdirectories listed in $(vmlinux-dirs)
|
|
|
|
# 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-06 19:49:23 +00:00
|
|
|
|
2014-02-04 08:24:37 +00:00
|
|
|
PHONY += $(u-boot-dirs)
|
2014-02-24 02:12:10 +00:00
|
|
|
$(u-boot-dirs): prepare scripts
|
2014-02-04 08:24:37 +00:00
|
|
|
$(Q)$(MAKE) $(build)=$@
|
|
|
|
|
2014-02-24 02:12:09 +00:00
|
|
|
tools: prepare
|
2014-02-04 08:24:37 +00: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 08:24:10 +00:00
|
|
|
|
2014-02-24 02:12:09 +00:00
|
|
|
define filechk_uboot.release
|
|
|
|
echo "$(UBOOTVERSION)$$($(CONFIG_SHELL) $(srctree)/scripts/setlocalversion $(srctree))"
|
|
|
|
endef
|
|
|
|
|
|
|
|
# Store (new) UBOOTRELEASE string in include/config/uboot.release
|
|
|
|
include/config/uboot.release: Makefile FORCE
|
|
|
|
$(call filechk,uboot.release)
|
|
|
|
|
|
|
|
|
2014-02-04 08:24:42 +00: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 02:12:09 +00:00
|
|
|
prepare3: include/config/uboot.release
|
2014-02-04 08:24:42 +00:00
|
|
|
ifneq ($(KBUILD_SRC),)
|
|
|
|
@$(kecho) ' Using $(srctree) as source for u-boot'
|
|
|
|
$(Q)if [ -f $(srctree)/include/config.mk ]; then \
|
|
|
|
echo >&2 " $(srctree) is not clean, please run 'make mrproper'"; \
|
|
|
|
echo >&2 " in the '$(srctree)' directory.";\
|
|
|
|
/bin/false; \
|
|
|
|
fi;
|
2009-05-20 08:35:14 +00:00
|
|
|
endif
|
2002-11-02 23:17:16 +00:00
|
|
|
|
2014-02-04 08:24:42 +00:00
|
|
|
# prepare2 creates a makefile if using a separate output directory
|
|
|
|
prepare2: prepare3 outputmakefile
|
|
|
|
|
2014-02-24 02:12:09 +00:00
|
|
|
prepare1: prepare2 $(version_h) $(timestamp_h)
|
2013-10-21 02:53:41 +00:00
|
|
|
@:
|
2006-09-01 17:49:50 +00:00
|
|
|
|
2014-02-04 08:24:42 +00:00
|
|
|
archprepare: prepare1 scripts_basic
|
|
|
|
|
2014-02-24 02:12:11 +00:00
|
|
|
prepare0: archprepare FORCE
|
|
|
|
$(Q)$(MAKE) $(build)=.
|
2003-12-06 19:49:23 +00:00
|
|
|
|
2014-02-04 08:24:42 +00:00
|
|
|
# All the preparing..
|
|
|
|
prepare: prepare0
|
2002-11-02 23:17:16 +00:00
|
|
|
|
2014-02-24 02:12:09 +00:00
|
|
|
# Generate some files
|
|
|
|
# ---------------------------------------------------------------------------
|
|
|
|
|
|
|
|
define filechk_version.h
|
|
|
|
(echo \#define PLAIN_VERSION \"$(UBOOTRELEASE)\"; \
|
|
|
|
echo \#define U_BOOT_VERSION \"U-Boot \" PLAIN_VERSION; \
|
|
|
|
echo \#define CC_VERSION_STRING \"$$($(CC) --version | head -n 1)\"; \
|
|
|
|
echo \#define LD_VERSION_STRING \"$$($(LD) --version | head -n 1)\"; )
|
|
|
|
endef
|
|
|
|
|
|
|
|
define filechk_timestamp.h
|
|
|
|
(LC_ALL=C date +'#define U_BOOT_DATE "%b %d %C%y"'; \
|
|
|
|
LC_ALL=C date +'#define U_BOOT_TIME "%T"')
|
|
|
|
endef
|
|
|
|
|
|
|
|
$(version_h): $(srctree)/Makefile FORCE
|
|
|
|
$(call filechk,version.h)
|
|
|
|
|
|
|
|
$(timestamp_h): $(srctree)/Makefile FORCE
|
|
|
|
$(call filechk,timestamp.h)
|
|
|
|
|
2014-02-04 08:24:35 +00:00
|
|
|
#
|
|
|
|
# Auto-generate the autoconf.mk file (which is included by all makefiles)
|
|
|
|
#
|
|
|
|
# This target actually generates 2 files; autoconf.mk and autoconf.mk.dep.
|
|
|
|
# the dep file is only include in this top level makefile to determine when
|
|
|
|
# to regenerate the autoconf.mk file.
|
|
|
|
|
|
|
|
quiet_cmd_autoconf_dep = GEN $@
|
|
|
|
cmd_autoconf_dep = $(CC) -x c -DDO_DEPS_ONLY -M $(c_flags) \
|
|
|
|
-MQ include/autoconf.mk $(srctree)/include/common.h > $@ || rm $@
|
|
|
|
|
|
|
|
include/autoconf.mk.dep: include/config.h include/common.h
|
|
|
|
$(call cmd,autoconf_dep)
|
|
|
|
|
|
|
|
quiet_cmd_autoconf = GEN $@
|
|
|
|
cmd_autoconf = \
|
|
|
|
$(CPP) $(c_flags) -DDO_DEPS_ONLY -dM $(srctree)/include/common.h > $@.tmp && \
|
|
|
|
sed -n -f $(srctree)/tools/scripts/define2mk.sed $@.tmp > $@; \
|
|
|
|
rm $@.tmp
|
2011-10-17 21:04:15 +00:00
|
|
|
|
2014-02-04 08:24:35 +00:00
|
|
|
include/autoconf.mk: include/config.h
|
|
|
|
$(call cmd,autoconf)
|
2009-08-17 12:00:53 +00:00
|
|
|
|
2014-02-24 02:12:10 +00:00
|
|
|
# ---------------------------------------------------------------------------
|
|
|
|
|
|
|
|
PHONY += depend dep
|
|
|
|
depend dep:
|
|
|
|
@echo '*** Warning: make $@ is unnecessary now.'
|
|
|
|
|
|
|
|
# ---------------------------------------------------------------------------
|
|
|
|
|
|
|
|
u-boot.lds: $(LDSCRIPT) prepare
|
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 08:24:28 +00:00
|
|
|
$(CPP) $(cpp_flags) $(LDPPFLAGS) -ansi -D__ASSEMBLY__ -P - <$< >$@
|
2006-09-07 09:51:23 +00:00
|
|
|
|
2014-02-24 02:12:10 +00:00
|
|
|
nand_spl: prepare
|
2014-02-24 02:12:13 +00:00
|
|
|
$(Q)$(MAKE) $(build)=nand_spl/board/$(BOARDDIR) all
|
2006-09-07 09:51:23 +00:00
|
|
|
|
2014-02-04 08:24:24 +00:00
|
|
|
u-boot-nand.bin: nand_spl u-boot.bin
|
|
|
|
cat nand_spl/u-boot-spl-16k.bin u-boot.bin > u-boot-nand.bin
|
2011-07-13 05:11:04 +00:00
|
|
|
|
2014-02-24 02:12:10 +00:00
|
|
|
spl/u-boot-spl.bin: tools prepare
|
2014-02-24 02:12:13 +00:00
|
|
|
$(Q)$(MAKE) obj=spl -f $(srctree)/spl/Makefile all
|
2011-07-13 05:11:04 +00:00
|
|
|
|
2014-02-24 02:12:10 +00:00
|
|
|
tpl/u-boot-tpl.bin: tools prepare
|
2014-02-24 02:12:13 +00:00
|
|
|
$(Q)$(MAKE) obj=tpl -f $(srctree)/spl/Makefile all CONFIG_TPL_BUILD=y
|
2013-08-16 07:16:15 +00:00
|
|
|
|
2014-02-04 08:24:37 +00:00
|
|
|
TAG_SUBDIRS := $(u-boot-dirs) include
|
2007-11-25 17:45:47 +00:00
|
|
|
|
2011-07-18 01:21:18 +00:00
|
|
|
FIND := find
|
|
|
|
FINDFLAGS := -L
|
|
|
|
|
2014-02-04 08:24:31 +00:00
|
|
|
PHONY += checkstack
|
|
|
|
|
2012-02-02 14:07:05 +00:00
|
|
|
checkstack:
|
2014-02-04 08:24:31 +00:00
|
|
|
$(OBJDUMP) -d u-boot $$(find . -name u-boot-spl) | \
|
|
|
|
$(PERL) $(src)/scripts/checkstack.pl $(ARCH)
|
2012-02-02 14:07:05 +00:00
|
|
|
|
2006-09-01 17:49:50 +00:00
|
|
|
tags ctags:
|
2014-02-04 08:24:24 +00:00
|
|
|
ctags -w -o ctags `$(FIND) $(FINDFLAGS) $(TAG_SUBDIRS) \
|
2009-12-09 10:13:26 +00:00
|
|
|
-name '*.[chS]' -print`
|
2002-11-02 23:17:16 +00:00
|
|
|
|
|
|
|
etags:
|
2011-07-18 01:21:18 +00:00
|
|
|
etags -a -o $(obj)etags `$(FIND) $(FINDFLAGS) $(TAG_SUBDIRS) \
|
2009-12-09 10:13:26 +00:00
|
|
|
-name '*.[chS]' -print`
|
2008-02-29 03:46:05 +00:00
|
|
|
cscope:
|
2011-07-18 01:21:18 +00:00
|
|
|
$(FIND) $(FINDFLAGS) $(TAG_SUBDIRS) -name '*.[chS]' -print > \
|
|
|
|
cscope.files
|
2008-02-29 03:46:05 +00:00
|
|
|
cscope -b -q -k
|
2002-11-02 23:17:16 +00:00
|
|
|
|
2009-05-20 08:35:14 +00:00
|
|
|
SYSTEM_MAP = \
|
|
|
|
$(NM) $1 | \
|
2002-11-02 23:17:16 +00:00
|
|
|
grep -v '\(compiled\)\|\(\.o$$\)\|\( [aUw] \)\|\(\.\.ng$$\)\|\(LASH[RL]DI\)' | \
|
2009-05-20 08:35:14 +00:00
|
|
|
LC_ALL=C sort
|
2014-02-04 08:24:24 +00:00
|
|
|
System.map: u-boot
|
2013-11-11 05:36:01 +00:00
|
|
|
@$(call SYSTEM_MAP,$<) > $@
|
2002-11-02 23:17:16 +00:00
|
|
|
|
2012-03-16 06:34:35 +00:00
|
|
|
checkthumb:
|
|
|
|
@if test $(call cc-version) -lt 0404; then \
|
|
|
|
echo -n '*** Your GCC does not produce working '; \
|
|
|
|
echo 'binaries in THUMB mode.'; \
|
|
|
|
echo '*** Your board is configured for THUMB mode.'; \
|
|
|
|
false; \
|
|
|
|
fi
|
2012-09-21 00:10:01 +00:00
|
|
|
|
|
|
|
# GCC 3.x is reported to have problems generating the type of relocation
|
|
|
|
# that U-Boot wants.
|
|
|
|
# See http://lists.denx.de/pipermail/u-boot/2012-September/135156.html
|
|
|
|
checkgcc4:
|
|
|
|
@if test $(call cc-version) -lt 0400; then \
|
|
|
|
echo -n '*** Your GCC is too old, please upgrade to GCC 4.x or newer'; \
|
|
|
|
false; \
|
|
|
|
fi
|
|
|
|
|
2013-07-24 17:09:16 +00:00
|
|
|
checkdtc:
|
|
|
|
@if test $(call dtc-version) -lt 0104; then \
|
|
|
|
echo '*** Your dtc is too old, please upgrade to dtc 1.4 or newer'; \
|
|
|
|
false; \
|
|
|
|
fi
|
|
|
|
|
2002-11-02 23:17:16 +00:00
|
|
|
#########################################################################
|
|
|
|
|
2013-12-14 03:47:34 +00:00
|
|
|
# ARM relocations should all be R_ARM_RELATIVE (32-bit) or
|
|
|
|
# R_AARCH64_RELATIVE (64-bit).
|
2014-02-04 08:24:24 +00:00
|
|
|
checkarmreloc: u-boot
|
2013-12-14 03:47:34 +00: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 12:17:30 +00:00
|
|
|
|
2014-02-24 02:12:09 +00:00
|
|
|
env: scripts_basic
|
2014-02-04 08:24:38 +00:00
|
|
|
$(Q)$(MAKE) $(build)=tools/$@
|
2010-08-15 04:03:21 +00:00
|
|
|
|
2014-02-04 08:24:39 +00:00
|
|
|
tools-all: HOST_TOOLS_ALL=y
|
|
|
|
tools-all: env tools ;
|
2010-08-15 04:03:21 +00:00
|
|
|
|
2006-10-24 22:43:17 +00:00
|
|
|
.PHONY : CHANGELOG
|
|
|
|
CHANGELOG:
|
2006-10-26 18:38:25 +00:00
|
|
|
git log --no-merges U-Boot-1_1_5.. | \
|
|
|
|
unexpand -a | sed -e 's/\s\s*$$//' > $@
|
2006-10-24 22:43:17 +00:00
|
|
|
|
2008-07-09 14:30:30 +00:00
|
|
|
include/license.h: tools/bin2header COPYING
|
2010-05-27 21:18:33 +00:00
|
|
|
cat COPYING | gzip -9 -c | ./tools/bin2header license_gzip > include/license.h
|
2002-11-02 23:17:16 +00:00
|
|
|
#########################################################################
|
|
|
|
|
2014-02-04 08:24:40 +00: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'
|
|
|
|
CLEAN_DIRS += $(MODVERDIR)
|
|
|
|
CLEAN_FILES += u-boot.lds include/bmp_logo.h include/bmp_logo_data.h \
|
2014-02-05 02:28:25 +00:00
|
|
|
board/*/config.tmp board/*/*/config.tmp \
|
2014-02-04 08:24:40 +00:00
|
|
|
include/autoconf.mk* include/spl-autoconf.mk \
|
|
|
|
include/tpl-autoconf.mk
|
|
|
|
|
|
|
|
# Directories & files removed with 'make clobber'
|
|
|
|
CLOBBER_DIRS += $(patsubst %,spl/%, $(filter-out Makefile, \
|
|
|
|
$(shell ls -1 spl 2>/dev/null))) \
|
|
|
|
tpl
|
2014-02-20 08:50:57 +00:00
|
|
|
CLOBBER_FILES += u-boot* MLO* SPL System.map nand_spl/u-boot*
|
2014-02-04 08:24:40 +00:00
|
|
|
|
|
|
|
# Directories & files removed with 'make mrproper'
|
|
|
|
MRPROPER_DIRS += include/config include/generated
|
|
|
|
MRPROPER_FILES += .config .config.old \
|
|
|
|
tags TAGS cscope* GPATH GTAGS GRTAGS GSYMS \
|
|
|
|
include/config.h include/config.mk
|
|
|
|
|
|
|
|
# clean - Delete most, but leave enough to build external modules
|
|
|
|
#
|
|
|
|
clean: rm-dirs := $(CLEAN_DIRS)
|
|
|
|
clean: rm-files := $(CLEAN_FILES)
|
|
|
|
|
|
|
|
clean-dirs := $(foreach f,$(u-boot-alldirs),$(if $(wildcard $f/Makefile),$f))
|
|
|
|
|
|
|
|
clean-dirs := $(addprefix _clean_, $(clean-dirs) doc/DocBook)
|
|
|
|
|
|
|
|
PHONY += $(clean-dirs) clean archclean
|
|
|
|
$(clean-dirs):
|
|
|
|
$(Q)$(MAKE) $(clean)=$(patsubst _clean_%,%,$@)
|
|
|
|
|
|
|
|
# TODO: Do not use *.cfgtmp
|
|
|
|
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' \
|
|
|
|
-o -name '*.ko.*' -o -name '*.su' -o -name '*.cfgtmp' \
|
|
|
|
-o -name '.*.d' -o -name '.*.tmp' -o -name '*.mod.c' \
|
|
|
|
-o -name '*.symtypes' -o -name 'modules.order' \
|
|
|
|
-o -name modules.builtin -o -name '.tmp_*.o.*' \
|
|
|
|
-o -name '*.gcno' \) -type f -print | xargs rm -f
|
|
|
|
@find $(if $(KBUILD_EXTMOD), $(KBUILD_EXTMOD), .) $(RCS_FIND_IGNORE) \
|
|
|
|
-path './nand_spl/*' -type l -print | xargs rm -f
|
|
|
|
|
|
|
|
# clobber
|
|
|
|
#
|
|
|
|
clobber: rm-dirs := $(CLOBBER_DIRS)
|
|
|
|
clobber: rm-files := $(CLOBBER_FILES)
|
2002-11-02 23:17:16 +00:00
|
|
|
|
2014-02-04 08:24:40 +00:00
|
|
|
PHONY += clobber
|
2010-05-27 21:18:36 +00:00
|
|
|
|
2014-02-04 08:24:34 +00:00
|
|
|
clobber: clean
|
2014-02-04 08:24:40 +00:00
|
|
|
$(call cmd,rmdirs)
|
|
|
|
$(call cmd,rmfiles)
|
2009-10-01 16:11:54 +00:00
|
|
|
|
2014-02-04 08:24:40 +00: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-02 23:17:16 +00:00
|
|
|
|
2014-02-04 08:24:40 +00:00
|
|
|
PHONY += $(mrproper-dirs) mrproper archmrproper
|
|
|
|
$(mrproper-dirs):
|
|
|
|
$(Q)$(MAKE) $(clean)=$(patsubst _mrproper_%,%,$@)
|
|
|
|
|
|
|
|
mrproper: clobber $(mrproper-dirs)
|
|
|
|
$(call cmd,rmdirs)
|
|
|
|
$(call cmd,rmfiles)
|
|
|
|
@rm -f arch/*/include/asm/arch arch/*/include/asm/proc
|
|
|
|
|
|
|
|
# distclean
|
|
|
|
#
|
|
|
|
PHONY += distclean
|
2014-02-04 08:24:35 +00:00
|
|
|
|
|
|
|
distclean: mrproper
|
2014-02-04 08:24:40 +00:00
|
|
|
@find $(srctree) $(RCS_FIND_IGNORE) \
|
|
|
|
\( -name '*.orig' -o -name '*.rej' -o -name '*~' \
|
|
|
|
-o -name '*.bak' -o -name '#*#' -o -name '.*.orig' \
|
|
|
|
-o -name '.*.rej' \
|
|
|
|
-o -name '*%' -o -name '.*.cmd' -o -name 'core' \) \
|
|
|
|
-type f -print | xargs rm -f
|
2002-11-02 23:17:16 +00:00
|
|
|
|
|
|
|
backup:
|
|
|
|
F=`basename $(TOPDIR)` ; cd .. ; \
|
2010-06-21 14:13:21 +00:00
|
|
|
gtar --force-local -zcvf `LC_ALL=C date "+$$F-%Y-%m-%d-%T.tar.gz"` $$F
|
2002-11-02 23:17:16 +00:00
|
|
|
|
2014-02-05 01:52:50 +00:00
|
|
|
|
|
|
|
# Documentation targets
|
|
|
|
# ---------------------------------------------------------------------------
|
|
|
|
%docs: scripts_basic FORCE
|
|
|
|
$(Q)$(MAKE) $(build)=scripts build_docproc
|
|
|
|
$(Q)$(MAKE) $(build)=doc/DocBook $@
|
|
|
|
|
2014-02-04 08:24:42 +00:00
|
|
|
# Dummies...
|
|
|
|
PHONY += prepare scripts
|
|
|
|
prepare: ;
|
|
|
|
scripts: ;
|
2014-02-04 08:24:24 +00:00
|
|
|
|
2014-02-04 08:24:35 +00:00
|
|
|
endif #ifeq ($(config-targets),1)
|
|
|
|
endif #ifeq ($(mixed-targets),1)
|
|
|
|
|
2014-02-04 08:24:40 +00: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 02:12:14 +00:00
|
|
|
# read all saved command lines
|
|
|
|
|
|
|
|
targets := $(wildcard $(sort $(targets)))
|
|
|
|
cmd_files := $(wildcard .*.cmd $(foreach f,$(targets),$(dir $(f)).$(notdir $(f)).cmd))
|
|
|
|
|
|
|
|
ifneq ($(cmd_files),)
|
|
|
|
$(cmd_files): ; # Do not try to update included dependency files
|
|
|
|
include $(cmd_files)
|
|
|
|
endif
|
|
|
|
|
2014-02-04 08:24:40 +00:00
|
|
|
# Shorthand for $(Q)$(MAKE) -f scripts/Makefile.clean obj=dir
|
|
|
|
# Usage:
|
|
|
|
# $(Q)$(MAKE) $(clean)=dir
|
|
|
|
clean := -f $(if $(KBUILD_SRC),$(srctree)/)scripts/Makefile.clean obj
|
|
|
|
|
2014-02-04 08:24:24 +00:00
|
|
|
endif # skip-makefile
|
|
|
|
|
|
|
|
PHONY += FORCE
|
|
|
|
FORCE:
|
|
|
|
|
|
|
|
# Declare the contents of the .PHONY variable as phony. We keep that
|
|
|
|
# information in a variable so we can use it in if_changed and friends.
|
|
|
|
.PHONY: $(PHONY)
|