@ -14,8 +14,8 @@ U_BOOT_VERSION = $(VERSION).$(PATCHLEVEL).$(SUBLEVEL)$(EXTRAVERSION)
e l s e
U_BOOT_VERSION = $( VERSION) .$( PATCHLEVEL) $( EXTRAVERSION)
e n d i f
TIMESTAMP_FILE = $( obj) include/generated/timestamp_autogenerated.h
VERSION_FILE = $( obj) include/generated/version_autogenerated.h
TIMESTAMP_FILE = include/generated/timestamp_autogenerated.h
VERSION_FILE = include/generated/version_autogenerated.h
HOSTARCH := $( shell uname -m | \
sed -e s/i.86/x86/ \
@ -43,32 +43,82 @@ else
XECHO = :
e n d i f
#########################################################################
#
# U-boot build supports generating object files in a separate external
# directory. Two use cases are supported:
#
# 1) Add O= to the make command line
# 'make O=/tmp/build all'
#
# 2) Set environment variable BUILD_DIR to point to the desired location
# 'export BUILD_DIR=/tmp/build'
# 'make'
#
# The second approach can also be used with a MAKEALL script
# 'export BUILD_DIR=/tmp/build'
# './MAKEALL'
# 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/"
#
# Command line 'O=' setting overrides BUILD_DIR environment variable.
#
# When none of the above methods is used the local build is performed and
# the object files are placed in the source directory.
# 2) Set KBUILD_OUTPUT
# Set the environment variable KBUILD_OUTPUT to point to the directory
# where the output files shall be placed.
# export KBUILD_OUTPUT=dir/to/store/output/files/
# make
#
# The O= assignment takes precedence over the KBUILD_OUTPUT environment
# variable.
# 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)
i f e q ( $( KBUILD_SRC ) , )
# OK, Make called in directory where kernel src resides
# Do we want to locate output files in a separate directory?
i f e q ( "$(origin O)" , "command line" )
BUILD_DIR := $( O)
KBUILD_OUTPUT := $( O)
e n d i f
i f e q ( "$(origin W)" , "command line" )
export KBUILD_ENABLE_EXTRA_GCC_CHECKS := $( W)
e n d i f
# 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 : ;
i f n e q ( $( 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
e n d i f # ifneq ($(KBUILD_OUTPUT),)
e n d i f # ifeq ($(KBUILD_SRC),)
# We process the rest of the Makefile if this is the final invocation of make
i f e q ( $( skip -makefile ) , )
PHONY += all
_all : all
srctree := $( if $( KBUILD_SRC) ,$( KBUILD_SRC) ,$( CURDIR) )
objtree := $( CURDIR)
src := $( srctree)
obj := $( objtree)
VPATH := $( srctree) $( if $( KBUILD_EXTMOD) ,:$( KBUILD_EXTMOD) )
export srctree objtree VPATH
# Call a source code checker (by default, "sparse") as part of the
# C compilation.
#
@ -87,41 +137,16 @@ ifndef CHECKSRC
e n d i f
export CHECKSRC
i f n e q ( $( BUILD_DIR ) , )
saved-output := $( BUILD_DIR)
# Attempt to create a output directory.
$( shell [ -d $ {BUILD_DIR } ] || mkdir -p $ {BUILD_DIR })
# Verify if it was successful.
BUILD_DIR := $( shell cd $( BUILD_DIR) && /bin/pwd)
$( if $ ( BUILD_DIR ) ,,$ ( error output directory "$ ( saved -output ) " does not exist ) )
e n d i f # ifneq ($(BUILD_DIR),)
OBJTREE := $( if $( BUILD_DIR) ,$( BUILD_DIR) ,$( CURDIR) )
OBJTREE := $( objtree)
SPLTREE := $( OBJTREE) /spl
TPLTREE := $( OBJTREE) /tpl
SRCTREE := $( CURDIR)
srctree := $( SRCTREE)
SRCTREE := $( srctree)
TOPDIR := $( SRCTREE)
LNDIR := $( OBJTREE)
export TOPDIR SRCTREE srctree OBJTREE SPLTREE TPLTREE
export TOPDIR SRCTREE OBJTREE SPLTREE TPLTREE
MKCONFIG := $( SRCTREE) /mkconfig
export MKCONFIG
# $(obj) and (src) are defined in config.mk but here in main Makefile
# we also need them before config.mk is included which is the case for
# some targets like unconfig, clean, clobber, distclean, etc.
i f n e q ( $( OBJTREE ) , $( SRCTREE ) )
obj := $( OBJTREE) /
src := $( SRCTREE) /
e l s e
obj :=
src :=
e n d i f
export obj src
# Make sure CDPATH settings don't interfere
u n export CDPATH
@ -136,14 +161,14 @@ SUBDIRS = $(SUBDIR_TOOLS)
.PHONY : $( SUBDIRS ) $( VERSION_FILE ) $( TIMESTAMP_FILE )
i f e q ( $( obj ) i n c l u d e / c o n f i g . m k , $( wildcard $ ( obj ) include /config .mk ) )
i f e q ( i n c l u d e / c o n f i g . m k , $( wildcard include /config .mk ) )
# Include autoconf.mk before config.mk so that the config options are available
# to all top level build files. We need the dummy all: target to prevent the
# dependency target in autoconf.mk.dep from being the default.
all :
s i n c l u d e $( obj ) i n c l u d e / a u t o c o n f . m k . d e p
s i n c l u d e $( obj ) i n c l u d e / a u t o c o n f . m k
s i n c l u d e i n c l u d e / a u t o c o n f . m k . d e p
s i n c l u d e i n c l u d e / a u t o c o n f . m k
SUBDIR_EXAMPLES-y := examples/standalone
SUBDIR_EXAMPLES-$(CONFIG_API) += examples/api
@ -152,7 +177,7 @@ SUBDIRS += $(SUBDIR_EXAMPLES-y)
e n d i f
# load ARCH, BOARD, and CPU configuration
i n c l u d e $( obj ) i n c l u d e / c o n f i g . m k
i n c l u d e i n c l u d e / c o n f i g . m k
export ARCH CPU BOARD VENDOR SOC
# set default to nothing for native builds
@ -197,6 +222,9 @@ HOSTCFLAGS += $(call os_x_before, 10, 4, "-traditional-cpp")
HOSTLDFLAGS += $( call os_x_before, 10, 5, "-multiply_defined suppress" )
e n d i f
# Look for make include files relative to root of kernel src
MAKEFLAGS += --include-dir= $( srctree)
# We need some generic definitions (do not try to remake the file).
$(srctree)/scripts/Kbuild.include : ;
i n c l u d e $( srctree ) / s c r i p t s / K b u i l d . i n c l u d e
@ -287,7 +315,7 @@ endif
export CONFIG_SYS_TEXT_BASE
LDFLAGS_u-boot += -T $( obj) u-boot.lds $( LDFLAGS_FINAL)
LDFLAGS_u-boot += -T u-boot.lds $( LDFLAGS_FINAL)
i f n e q ( $( CONFIG_SYS_TEXT_BASE ) , )
LDFLAGS_u-boot += -Ttext $( CONFIG_SYS_TEXT_BASE)
e n d i f
@ -350,9 +378,9 @@ head-y := $(CPUDIR)/start.o
head-$(CONFIG_4xx) += arch/powerpc/cpu/ppc4xx/resetvec.o
head-$(CONFIG_MPC85xx) += arch/powerpc/cpu/mpc85xx/resetvec.o
OBJS := $( addprefix $( obj) ,$( head-y) )
OBJS := $( head-y)
HAVE_VENDOR_COMMON_LIB = $( if $( wildcard board/$( VENDOR) /common/Makefile) ,y,n)
HAVE_VENDOR_COMMON_LIB = $( if $( wildcard $( srctree) / board/$( VENDOR) /common/Makefile) ,y,n)
LIBS-y += lib/
LIBS-$(HAVE_VENDOR_COMMON_LIB) += board/$( VENDOR) /common/
@ -412,7 +440,7 @@ LIBS-$(CONFIG_PPC) += arch/powerpc/cpu/
LIBS-y += board/$( BOARDDIR) /
LIBS-y := $( patsubst %/, %/built-in.o, $( LIBS-y) )
LIBS := $( addprefix $( obj) ,$( sort $( LIBS-y) ) )
LIBS := $( sort $( LIBS-y) )
.PHONY : $( LIBS )
# Add GCC lib
@ -437,9 +465,6 @@ LDPPFLAGS += \
$( shell $( LD) --version | \
sed -ne 's/GNU ld version \([0-9][0-9]*\)\.\([0-9][0-9]*\).*/-DLD_MAJOR=\1 -DLD_MINOR=\2/p' )
__OBJS := $( subst $( obj) ,,$( OBJS) )
__LIBS := $( subst $( obj) ,,$( LIBS) )
#########################################################################
#########################################################################
@ -464,66 +489,66 @@ ifneq ($(CONFIG_STATIC_RELA),)
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 ' ' ) ; \
$( obj) tools/relocate-rela $( 2) $( 3) $$ start $$ end
tools/relocate-rela $( 2) $( 3) $$ start $$ end
e l s e
DO_STATIC_RELA =
e n d i f
# Always append ALL so that arch config.mk's can add custom ones
ALL-y += $( obj) u-boot.srec $( obj) u-boot.bin $( obj) System.map
ALL-$(CONFIG_NAND_U_BOOT) += $( obj) u-boot-nand.bin
ALL-$(CONFIG_ONENAND_U_BOOT) += $( obj) u-boot-onenand.bin
ALL-$(CONFIG_RAMBOOT_PBL) += $( obj) u-boot.pbl
ALL-$(CONFIG_SPL) += $( obj) spl/u-boot-spl.bin
ALL-$(CONFIG_SPL_FRAMEWORK) += $( obj) u-boot.img
ALL-$(CONFIG_TPL) += $( obj) tpl/u-boot-tpl.bin
ALL-$(CONFIG_OF_SEPARATE) += $( obj) u-boot.dtb $( obj) u-boot-dtb.bin
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
ALL-$(CONFIG_OF_SEPARATE) += u-boot.dtb u-boot-dtb.bin
i f n e q ( $( CONFIG_SPL_TARGET ) , )
ALL-$(CONFIG_SPL) += $( obj) $( CONFIG_SPL_TARGET:"%" = %)
ALL-$(CONFIG_SPL) += $( CONFIG_SPL_TARGET:"%" = %)
e n d i f
ALL-$(CONFIG_REMAKE_ELF) += $( obj) u-boot.elf
ALL-$(CONFIG_REMAKE_ELF) += u-boot.elf
# enable combined SPL/u-boot/dtb rules for tegra
i f n e q ( $( CONFIG_TEGRA ) , )
i f e q ( $( CONFIG_SPL ) , y )
i f e q ( $( CONFIG_OF_SEPARATE ) , y )
ALL-y += $( obj) u-boot-dtb-tegra.bin
ALL-y += u-boot-dtb-tegra.bin
e l s e
ALL-y += $( obj) u-boot-nodtb-tegra.bin
ALL-y += u-boot-nodtb-tegra.bin
e n d i f
e n d i f
e n d i f
all : $( ALL -y ) $( SUBDIR_EXAMPLES -y )
$(obj) u-boot.dtb: checkdtc $( obj ) u -boot
$( MAKE) $( build) dts binary
mv $( obj) dts/dt.dtb $@
u-boot.dtb : checkdtc u -boot
$( MAKE) $( build) = dts binary
mv dts/dt.dtb $@
$(obj) u-boot-dtb.bin: $( obj ) u -boot .bin $( obj ) u -boot .dtb
u-boot-dtb.bin : u -boot .bin u -boot .dtb
cat $^ >$@
$(obj) u-boot.hex: $( obj ) u -boot
u-boot.hex : u -boot
$( OBJCOPY) ${ OBJCFLAGS } -O ihex $< $@
$(obj) u-boot.srec: $( obj ) u -boot
u-boot.srec : u -boot
$( OBJCOPY) ${ OBJCFLAGS } -O srec $< $@
$(obj) u-boot.bin: $( obj ) u -boot
u-boot.bin : u -boot
$( OBJCOPY) ${ OBJCFLAGS } -O binary $< $@
$( call DO_STATIC_RELA,$<,$@ ,$( CONFIG_SYS_TEXT_BASE) )
$( BOARD_SIZE_CHECK)
$(obj) u-boot.ldr: $( obj ) u -boot
u-boot.ldr : u -boot
$( CREATE_LDR_ENV)
$( LDR) -T $( CONFIG_BFIN_CPU) -c $@ $< $( LDR_FLAGS)
$( BOARD_SIZE_CHECK)
$(obj) u-boot.ldr.hex: $( obj ) u -boot .ldr
u-boot.ldr.hex : u -boot .ldr
$( OBJCOPY) ${ OBJCFLAGS } -O ihex $< $@ -I binary
$(obj) u-boot.ldr.srec: $( obj ) u -boot .ldr
u-boot.ldr.srec : u -boot .ldr
$( OBJCOPY) ${ OBJCFLAGS } -O srec $< $@ -I binary
#
@ -534,79 +559,78 @@ ifndef CONFIG_SYS_UBOOT_START
CONFIG_SYS_UBOOT_START := 0
e n d i f
$(obj) u-boot.img: $( obj ) u -boot .bin
$( obj) tools/mkimage -A $( ARCH) -T firmware -C none \
u-boot.img : u -boot .bin
tools/mkimage -A $( ARCH) -T firmware -C none \
-O u-boot -a $( CONFIG_SYS_TEXT_BASE) \
-e $( CONFIG_SYS_UBOOT_START) \
-n $( shell sed -n -e 's/.*U_BOOT_VERSION//p' $( VERSION_FILE) | \
sed -e 's/"[ ]*$$/ for $(BOARD) board"/' ) \
-d $< $@
$(obj) u-boot.imx: $( obj ) u -boot .bin depend
$( MAKE) $( build) $( SRCTREE) /arch/arm/imx-common $( OBJTREE ) /u-boot.imx
u-boot.imx : u -boot .bin depend
$( MAKE) $( build) = arch/arm/imx-common $( objtree) /u-boot.imx
$(obj) u-boot.kwb: $( obj ) u -boot .bin
$( obj) tools/mkimage -n $( CONFIG_SYS_KWD_CONFIG) -T kwbimage \
u-boot.kwb : u -boot .bin
tools/mkimage -n $( CONFIG_SYS_KWD_CONFIG) -T kwbimage \
-a $( CONFIG_SYS_TEXT_BASE) -e $( CONFIG_SYS_TEXT_BASE) -d $< $@
$(obj) u-boot.pbl: $( obj ) u -boot .bin
$( obj) tools/mkimage -n $( CONFIG_SYS_FSL_PBL_RCW) \
u-boot.pbl : u -boot .bin
tools/mkimage -n $( CONFIG_SYS_FSL_PBL_RCW) \
-R $( CONFIG_SYS_FSL_PBL_PBI) -T pblimage \
-d $< $@
$(obj) u-boot.sha1: $( obj ) u -boot .bin
$( obj) tools/ubsha1 $( obj) u-boot.bin
u-boot.sha1 : u -boot .bin
tools/ubsha1 u-boot.bin
$(obj) u-boot.dis: $( obj ) u -boot
u-boot.dis : u -boot
$( OBJDUMP) -d $< > $@
# $@ is output, $(1) and $(2) are inputs, $(3) is padded intermediate,
# $(4) is pad-to
SPL_PAD_APPEND = \
$( OBJCOPY) ${ OBJCFLAGS } --pad-to= $( 4) -I binary -O binary \
$( 1) $( obj) $( 3) ; \
cat $( obj) $( 3) $( 2) > $@ ; \
rm $( obj) $( 3)
$( 1) $( 3) ; \
cat $( 3) $( 2) > $@ ; \
rm $( 3)
i f d e f C O N F I G _ T P L
SPL_PAYLOAD := $( obj) tpl/u-boot-with-tpl.bin
SPL_PAYLOAD := tpl/u-boot-with-tpl.bin
e l s e
SPL_PAYLOAD := $( obj) u-boot.bin
SPL_PAYLOAD := u-boot.bin
e n d i f
$(obj) u-boot-with-spl.bin: $( obj ) spl /u -boot -spl .bin $( SPL_PAYLOAD )
u-boot-with-spl.bin : spl /u -boot -spl .bin $( SPL_PAYLOAD )
$( call SPL_PAD_APPEND,$<,$( SPL_PAYLOAD) ,spl/u-boot-spl-pad.bin,$( CONFIG_SPL_PAD_TO) )
$(obj) tpl/u-boot-with-tpl.bin: $( obj ) tpl /u -boot -tpl .bin $( obj ) u -boot .bin
$( call SPL_PAD_APPEND,$<,$( obj) u-boot.bin,tpl/u-boot-tpl-pad.bin,$( CONFIG_TPL_PAD_TO) )
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) )
$(obj) u-boot-with-spl.imx: $( obj ) spl /u -boot -spl .bin $( obj ) u -boot .bin
$( MAKE) $( build) $( SRCTREE) / arch/arm/imx-common \
u-boot-with-spl.imx : spl /u -boot -spl .bin u -boot .bin
$( MAKE) $( build) = arch/arm/imx-common \
$( OBJTREE) /u-boot-with-spl.imx
$(obj) u-boot-with-nand-spl.imx: $( obj ) spl /u -boot -spl .bin $( obj ) u -boot .bin
$( MAKE) $( build) $( SRCTREE) / arch/arm/imx-common \
u-boot-with-nand-spl.imx : spl /u -boot -spl .bin u -boot .bin
$( MAKE) $( build) = arch/arm/imx-common \
$( OBJTREE) /u-boot-with-nand-spl.imx
$(obj) u-boot.ubl: $( obj ) u -boot -with -spl .bin
$( obj) tools/mkimage -n $( UBL_CONFIG) -T ublimage \
-e $( CONFIG_SYS_TEXT_BASE) -d $< $( obj) u-boot.ubl
u-boot.ubl : u -boot -with -spl .bin
tools/mkimage -n $( UBL_CONFIG) -T ublimage \
-e $( CONFIG_SYS_TEXT_BASE) -d $< u-boot.ubl
$(obj) u-boot.ais: $( obj ) spl /u -boot -spl .bin $( obj ) u -boot .img
$( obj) tools/mkimage -s -n $( if $( CONFIG_AIS_CONFIG_FILE) ,$( CONFIG_AIS_CONFIG_FILE) ,"/dev/null" ) \
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" ) \
-T aisimage \
-e $( CONFIG_SPL_TEXT_BASE) \
-d $( obj) spl/u-boot-spl.bin \
$( obj) spl/u-boot-spl.ais
-d spl/u-boot-spl.bin \
spl/u-boot-spl.ais
$( OBJCOPY) ${ OBJCFLAGS } -I binary \
--pad-to= $( CONFIG_SPL_MAX_SIZE) -O binary \
$( obj) spl/u-boot-spl.ais $( obj) spl/u-boot-spl-pad.ais
cat $( obj) spl/u-boot-spl-pad.ais $( obj) u-boot.img > \
$( obj) u-boot.ais
spl/u-boot-spl.ais spl/u-boot-spl-pad.ais
cat spl/u-boot-spl-pad.ais u-boot.img > u-boot.ais
$(obj) u-boot.sb: $( obj ) u -boot .bin $( obj ) spl /u -boot -spl .bin
$( MAKE) $( build) $( SRCTREE) / $( CPUDIR) /$( SOC) / $( OBJTREE) /u-boot.sb
u-boot.sb : u -boot .bin spl /u -boot -spl .bin
$( MAKE) $( build) = $( CPUDIR) /$( SOC) / $( OBJTREE) /u-boot.sb
# On x600 (SPEAr600) U-Boot is appended to U-Boot SPL.
# Both images are created using mkimage (crc etc), so that the ROM
@ -614,124 +638,123 @@ $(obj)u-boot.sb: $(obj)u-boot.bin $(obj)spl/u-boot-spl.bin
# 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
$(obj) u-boot.spr: $( obj ) u -boot .img $( obj ) spl /u -boot -spl .bin
$( obj) tools/mkimage -A $( ARCH) -T firmware -C none \
u-boot.spr : u -boot .img spl /u -boot -spl .bin
tools/mkimage -A $( ARCH) -T firmware -C none \
-a $( CONFIG_SPL_TEXT_BASE) -e $( CONFIG_SPL_TEXT_BASE) -n XLOADER \
-d $( obj) spl/u-boot-spl.bin $@
-d spl/u-boot-spl.bin $@
$( OBJCOPY) -I binary -O binary \
--pad-to= $( CONFIG_SPL_PAD_TO) --gap-fill= 0xff $@
cat $( obj) u-boot.img >> $@
cat u-boot.img >> $@
i f n e q ( $( CONFIG_TEGRA ) , )
$(obj) u-boot-nodtb-tegra.bin: $( obj ) spl /u -boot -spl .bin $( obj ) u -boot .bin
$( OBJCOPY) ${ OBJCFLAGS } --pad-to= $( CONFIG_SYS_TEXT_BASE) -O binary $( obj) spl/u-boot-spl $( obj) spl/u-boot-spl-pad.bin
cat $( obj) spl/u-boot-spl-pad.bin $( obj) u-boot.bin > $@
rm $( obj) spl/u-boot-spl-pad.bin
u-boot-nodtb-tegra.bin : spl /u -boot -spl .bin u -boot .bin
$( OBJCOPY) ${ OBJCFLAGS } --pad-to= $( CONFIG_SYS_TEXT_BASE) -O binary spl/u-boot-spl spl/u-boot-spl-pad.bin
cat spl/u-boot-spl-pad.bin u-boot.bin > $@
rm spl/u-boot-spl-pad.bin
i f e q ( $( CONFIG_OF_SEPARATE ) , y )
$(obj) u-boot-dtb-tegra.bin: $( obj ) u -boot -nodtb -tegra .bin $( obj ) u -boot .dtb
cat $( obj) u-boot-nodtb-tegra.bin $( obj) u-boot.dtb > $@
u-boot-dtb-tegra.bin : u -boot -nodtb -tegra .bin u -boot .dtb
cat u-boot-nodtb-tegra.bin u-boot.dtb > $@
e n d i f
e n d i f
$(obj) u-boot-img.bin: $( obj ) spl /u -boot -spl .bin $( obj ) u -boot .img
cat $( obj) spl/u-boot-spl.bin $( obj) u-boot.img > $@
u-boot-img.bin : spl /u -boot -spl .bin u -boot .img
cat spl/u-boot-spl.bin u-boot.img > $@
# 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.
$(obj) u-boot-img-spl-at-end.bin: $( obj ) spl /u -boot -spl .bin $( obj ) u -boot .img
u-boot-img-spl-at-end.bin : spl /u -boot -spl .bin u -boot .img
$( OBJCOPY) -I binary -O binary --pad-to= $( CONFIG_UBOOT_PAD_TO) \
--gap-fill= 0xff $( obj) u-boot.img $@
cat $( obj) spl/u-boot-spl.bin >> $@
--gap-fill= 0xff u-boot.img $@
cat spl/u-boot-spl.bin >> $@
# 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
$(obj) u-boot.elf: $( obj ) u -boot .bin
u-boot.elf : u -boot .bin
@$( OBJCOPY) -B aarch64 -I binary -O elf64-littleaarch64 \
$< $( obj) u-boot-elf.o
@$( LD) $( obj) u-boot-elf.o -o $@ \
$< u-boot-elf.o
@$( LD) u-boot-elf.o -o $@ \
--defsym= _start = $( CONFIG_SYS_TEXT_BASE) \
-Ttext= $( CONFIG_SYS_TEXT_BASE)
i f e q ( $( CONFIG_SANDBOX ) , y )
GEN_UBOOT = \
cd $( LNDIR) && $( CC) $( SYMS) -T $( obj) u-boot.lds \
-Wl,--start-group $( __ LIBS) -Wl,--end-group \
$( CC) $( SYMS) -T u-boot.lds \
-Wl,--start-group $( LIBS) -Wl,--end-group \
$( PLATFORM_LIBS) -Wl,-Map -Wl,u-boot.map -o u-boot
e l s e
GEN_UBOOT = \
cd $( LNDIR) && $( LD) $( LDFLAGS) $( LDFLAGS_$( @F) ) \
$( __ OBJS) \
--start-group $( __ LIBS) --end-group $( PLATFORM_LIBS) \
$( LD) $( LDFLAGS) $( LDFLAGS_$( @F) ) \
$( OBJS) \
--start-group $( LIBS) --end-group $( PLATFORM_LIBS) \
-Map u-boot.map -o u-boot
e n d i f
$(obj)u-boot : depend \
$( SUBDIR_TOOLS) $( OBJS) $( LIBS) $( obj) u-boot.lds
u-boot : depend $( SUBDIR_TOOLS ) $( OBJS ) $( LIBS ) u -boot .lds
$( GEN_UBOOT)
i f e q ( $( CONFIG_KALLSYMS ) , y )
smap = ` $( call SYSTEM_MAP,$( obj) u-boot) | \
smap = ` $( call SYSTEM_MAP,u-boot) | \
awk '$$2 ~ /[tTwW]/ {printf $$1 $$3 "\\\\000"}' ` ; \
$( CC) $( CFLAGS) -DSYSTEM_MAP= " \" $$ {smap}\" " \
-c common/system_map.c -o $( obj) common/system_map.o
$( GEN_UBOOT) $( obj) common/system_map.o
-c $( srctree) /common/system_map.c -o common/system_map.o
$( GEN_UBOOT) common/system_map.o
e n d i f
$(OBJS) :
@:
$(LIBS) : depend $( SUBDIR_TOOLS )
$( MAKE) $( build) $( dir $( subst $( obj) ,, $@ ) )
$( MAKE) $( build) = $( patsubst %/,%,$( dir $@ ) )
$(SUBDIRS) : depend
$( MAKE) $( build) $@ all
$( MAKE) $( build) = $@ all
$(SUBDIR_EXAMPLES-y) : $( obj ) u -boot
$(SUBDIR_EXAMPLES-y) : u -boot
$(obj) u-boot.lds: $( LDSCRIPT ) depend
u-boot.lds : $( LDSCRIPT ) depend
$( CPP) $( CPPFLAGS) $( LDPPFLAGS) -ansi -D__ASSEMBLY__ -P - <$< >$@
nand_spl : $( TIMESTAMP_FILE ) $( VERSION_FILE ) depend
$( MAKE) $( build) nand_spl/board/$( BOARDDIR) all
$( MAKE) $( build) = nand_spl/board/$( BOARDDIR) all
$(obj) u-boot-nand.bin: nand_spl $( obj ) u -boot .bin
cat $( obj) nand_spl/u-boot-spl-16k.bin $( obj) u-boot.bin > $( obj) u-boot-nand.bin
u-boot-nand.bin : nand_spl u -boot .bin
cat nand_spl/u-boot-spl-16k.bin u-boot.bin > u-boot-nand.bin
$(obj) spl/u-boot-spl.bin: $( SUBDIR_TOOLS ) depend
$( MAKE) -C spl all
spl/u-boot-spl.bin : $( SUBDIR_TOOLS ) depend
$( MAKE) obj = spl -f $( srctree) /spl/Makefile all
$(obj) tpl/u-boot-tpl.bin: $( SUBDIR_TOOLS ) depend
$( MAKE) -C spl all CONFIG_TPL_BUILD = y
tpl/u-boot-tpl.bin : $( SUBDIR_TOOLS ) depend
$( MAKE) obj = tpl -f $( srctree) /spl/Makefile all CONFIG_TPL_BUILD = y
# Explicitly make _depend in subdirs containing multiple targets to prevent
# parallel sub-makes creating .depend files simultaneously.
depend dep : $( TIMESTAMP_FILE ) $( VERSION_FILE ) \
$( obj) include/spl-autoconf.mk \
$( obj) include/tpl-autoconf.mk \
$( obj) include/autoconf.mk \
$( obj) include/generated/generic-asm-offsets.h \
$( obj) include/generated/asm-offsets.h
include/spl-autoconf.mk \
include/tpl-autoconf.mk \
include/autoconf.mk \
include/generated/generic-asm-offsets.h \
include/generated/asm-offsets.h
TAG_SUBDIRS = $( SUBDIRS)
TAG_SUBDIRS += $( dir $( __ LIBS) )
TAG_SUBDIRS += $( dir $( LIBS) )
TAG_SUBDIRS += include
FIND := find
FINDFLAGS := -L
checkstack :
$( CROSS_COMPILE) objdump -d $( obj) u-boot \
` $( FIND) $( obj) -name u-boot-spl -print` | \
perl $( src) scripts/checkstack.pl $( ARCH)
$( CROSS_COMPILE) objdump -d u-boot \
` $( FIND) . -name u-boot-spl -print` | \
perl $( src) / scripts/checkstack.pl $( ARCH)
tags ctags :
ctags -w -o $( obj) ctags ` $( FIND) $( FINDFLAGS) $( TAG_SUBDIRS) \
ctags -w -o ctags ` $( FIND) $( FINDFLAGS) $( TAG_SUBDIRS) \
-name '*.[chS]' -print`
etags :
@ -746,7 +769,7 @@ SYSTEM_MAP = \
$( NM) $1 | \
grep -v '\(compiled\)\|\(\.o$$\)\|\( [aUw] \)\|\(\.\.ng$$\)\|\(LASH[RL]DI\)' | \
LC_ALL = C sort
$(obj) System.map: $( obj ) u -boot
System.map : u -boot
@$( call SYSTEM_MAP,$<) > $@
checkthumb :
@ -778,76 +801,76 @@ checkdtc:
# 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.
$(obj) include/autoconf.mk.dep: $( obj ) include /config .h include /common .h
include/autoconf.mk.dep : include /config .h include /common .h
@$( XECHO) Generating $@ ; \
: Generate the dependancies ; \
$( CC) -x c -DDO_DEPS_ONLY -M $( CFLAGS) $( CPPFLAGS) \
-MQ $( obj) include/autoconf.mk include/common.h > $@ || \
-MQ include/autoconf.mk $( srctree) / include/common.h > $@ || \
rm $@
$(obj) include/autoconf.mk: $( obj ) include /config .h
include/autoconf.mk : include /config .h
@$( XECHO) Generating $@ ; \
: Extract the config macros ; \
$( CPP) $( CFLAGS) -DDO_DEPS_ONLY -dM include/common.h > $@ .tmp && \
sed -n -f tools/scripts/define2mk.sed $@ .tmp > $@ ; \
$( CPP) $( CFLAGS) -DDO_DEPS_ONLY -dM $( srctree) / include/common.h > $@ .tmp && \
sed -n -f $( srctree) / tools/scripts/define2mk.sed $@ .tmp > $@ ; \
rm $@ .tmp
# Auto-generate the spl-autoconf.mk file (which is included by all makefiles for SPL)
$(obj) include/tpl-autoconf.mk: $( obj ) include /config .h
include/tpl-autoconf.mk : include /config .h
@$( XECHO) Generating $@ ; \
: Extract the config macros ; \
$( CPP) $( CFLAGS) -DCONFIG_TPL_BUILD -DCONFIG_SPL_BUILD\
-DDO_DEPS_ONLY -dM include/common.h > $@ .tmp && \
sed -n -f tools/scripts/define2mk.sed $@ .tmp > $@ ; \
-DDO_DEPS_ONLY -dM $( srctree) / include/common.h > $@ .tmp && \
sed -n -f $( srctree) / tools/scripts/define2mk.sed $@ .tmp > $@ ; \
rm $@ .tmp
$(obj) include/spl-autoconf.mk: $( obj ) include /config .h
include/spl-autoconf.mk : include /config .h
@$( XECHO) Generating $@ ; \
: Extract the config macros ; \
$( CPP) $( CFLAGS) -DCONFIG_SPL_BUILD -DDO_DEPS_ONLY -dM include/common.h > $@ .tmp && \
sed -n -f tools/scripts/define2mk.sed $@ .tmp > $@ ; \
$( CPP) $( CFLAGS) -DCONFIG_SPL_BUILD -DDO_DEPS_ONLY -dM $( srctree) / include/common.h > $@ .tmp && \
sed -n -f $( srctree) / tools/scripts/define2mk.sed $@ .tmp > $@ ; \
rm $@ .tmp
$(obj) include/generated/generic-asm-offsets.h: $( obj ) lib /asm -offsets .s
include/generated/generic-asm-offsets.h : lib /asm -offsets .s
@$( XECHO) Generating $@
tools/scripts/make-asm-offsets $( obj) lib/asm-offsets.s $@
$( srctree) /tools/scripts/make-asm-offsets lib/asm-offsets.s $@
$(obj) lib/asm-offsets.s: $( obj ) include /config .h $( src ) lib /asm -offsets .c
@mkdir -p $( obj) lib
lib/asm-offsets.s : include /config .h $( srctree ) / lib /asm -offsets .c
@mkdir -p lib
$( CC) -DDO_DEPS_ONLY \
$( CFLAGS) $( CFLAGS_$( BCURDIR) /$( @F) ) $( CFLAGS_$( BCURDIR) ) \
-o $@ $( src) lib/asm-offsets.c -c -S
-o $@ $( srctree ) / lib/asm-offsets.c -c -S
$(obj) include/generated/asm-offsets.h: $( obj ) $( CPUDIR ) /$( SOC ) /asm -offsets .s
include/generated/asm-offsets.h : $( CPUDIR ) /$( SOC ) /asm -offsets .s
@$( XECHO) Generating $@
tools/scripts/make-asm-offsets $( obj) $( CPUDIR) /$( SOC) /asm-offsets.s $@
$( srctree) /tools/scripts/make-asm-offsets $( CPUDIR) /$( SOC) /asm-offsets.s $@
$(obj)$( CPUDIR)/$(SOC)/asm-offsets.s : $( obj ) include /config .h
@mkdir -p $( obj) $( CPUDIR) /$( SOC)
if [ -f $( src) $( CPUDIR) /$( SOC) /asm-offsets.c ] ; then \
$(CPUDIR)/$(SOC)/asm-offsets.s : include /config .h
@mkdir -p $( CPUDIR) /$( SOC)
if [ -f $( srctree ) / $( CPUDIR) /$( SOC) /asm-offsets.c ] ; then \
$( CC) -DDO_DEPS_ONLY \
$( CFLAGS) $( CFLAGS_$( BCURDIR) /$( @F) ) $( CFLAGS_$( BCURDIR) ) \
-o $@ $( src) $( CPUDIR) /$( SOC) /asm-offsets.c -c -S; \
-o $@ $( srctree ) / $( CPUDIR) /$( SOC) /asm-offsets.c -c -S; \
else \
touch $@ ; \
fi
#########################################################################
e l s e # !config.mk
a l l $( obj ) u - b o o t . h e x $( obj ) u - b o o t . s r e c $( obj ) u - b o o t . b i n \
$( obj ) u - b o o t . i m g $( obj ) u - b o o t . d i s $( obj ) u - b o o t \
a l l u - b o o t . h e x u - b o o t . s r e c u - b o o t . b i n \
u - b o o t . i m g u - b o o t . d i s u - b o o t \
$( filter -out tools ,$ ( SUBDIRS ) ) \
depend dep tags ctags etags cscope $(obj) System.map :
depend dep tags ctags etags cscope System.map :
@echo "System not configured - see README" >& 2
@ exit 1
tools : $( VERSION_FILE ) $( TIMESTAMP_FILE )
$( MAKE) $( build) $@ all
$( MAKE) $( build) = $@ all
e n d i f # config.mk
# ARM relocations should all be R_ARM_RELATIVE (32-bit) or
# R_AARCH64_RELATIVE (64-bit).
checkarmreloc : $( obj ) u -boot
checkarmreloc : u -boot
@RELOC= " ` $( CROSS_COMPILE) readelf -r -W $< | cut -d ' ' -f 4 | \
grep R_A | sort -u` " ; \
if test " $$ RELOC " != "R_ARM_RELATIVE" -a \
@ -877,15 +900,15 @@ $(TIMESTAMP_FILE):
@cmp -s $@ $@ .tmp && rm -f $@ .tmp || mv -f $@ .tmp $@
easylogo env gdb :
$( MAKE) $( build) tools/$@ MTD_VERSION = ${ MTD_VERSION }
$( MAKE) $( build) = tools/$@ MTD_VERSION = ${ MTD_VERSION }
gdbtools : gdb
xmldocs pdfdocs psdocs htmldocs mandocs : tools /kernel -doc /docproc
$( MAKE) U_BOOT_VERSION = $( U_BOOT_VERSION) -C doc/DocBook/ $@
$( MAKE) U_BOOT_VERSION = $( U_BOOT_VERSION) $( build) = doc/DocBook $@
tools-all : easylogo env gdb $( VERSION_FILE ) $( TIMESTAMP_FILE )
$( MAKE) $( build) tools HOST_TOOLS_ALL = y
$( MAKE) $( build) = tools HOST_TOOLS_ALL = y
.PHONY : CHANGELOG
CHANGELOG :
@ -897,57 +920,52 @@ include/license.h: tools/bin2header COPYING
#########################################################################
unconfig :
@rm -f $( obj) include/config.h $( obj) include/config.mk \
$( obj) board/*/config.tmp $( obj) board/*/*/config.tmp \
$( obj) include/autoconf.mk $( obj) include/autoconf.mk.dep \
$( obj) include/spl-autoconf.mk \
$( obj) include/tpl-autoconf.mk
@rm -f include/config.h include/config.mk \
board/*/config.tmp board/*/*/config.tmp \
include/autoconf.mk include/autoconf.mk.dep \
include/spl-autoconf.mk \
include/tpl-autoconf.mk
%_config :: unconfig
@$( MKCONFIG) -A $( @:_config= )
s i n c l u d e $( obj ) . b o a r d s . d e p e n d
$(obj).boards.depend : boards .cfg
@awk '(NF && $$1 !~ /^#/) { print $$7 ": " $$7 "_config; $$(MAKE)" }' $< > $@
#########################################################################
#########################################################################
clean :
@rm -f $( obj) examples/standalone/atmel_df_pow2 \
$( obj) examples/standalone/hello_world \
$( obj) examples/standalone/interrupt \
$( obj) examples/standalone/mem_to_mem_idma2intr \
$( obj) examples/standalone/sched \
$( addprefix $( obj) examples/standalone/, smc91111_eeprom smc911x_eeprom) \
$( obj) examples/standalone/test_burst \
$( obj) examples/standalone/timer
@rm -f $( addprefix $( obj) examples/api/, demo demo.bin)
@rm -f $( obj) tools/bmp_logo $( obj) tools/easylogo/easylogo \
$( obj) tools/env/fw_printenv \
$( obj) tools/envcrc \
$( addprefix $( obj) tools/gdb/, gdbcont gdbsend) \
$( obj) tools/gen_eth_addr $( obj) tools/img2srec \
$( obj) tools/dumpimage \
$( addprefix $( obj) tools/, mkenvimage mkimage) \
$( obj) tools/mpc86x_clk \
$( addprefix $( obj) tools/, mk$( BOARD) spl mkexynosspl) \
$( obj) tools/mxsboot \
$( obj) tools/ncb $( obj) tools/ubsha1 \
$( obj) tools/kernel-doc/docproc \
$( obj) tools/proftool
@rm -f $( addprefix $( obj) board/cray/L1/, bootscript.c bootscript.image) \
$( obj) board/matrix_vision/*/bootscript.img \
$( obj) spl/board/samsung/$( BOARD) /tools/mk$( BOARD) spl \
$( obj) u-boot.lds \
$( addprefix $( obj) arch/blackfin/cpu/, init.lds init.elf)
@rm -f $( obj) include/bmp_logo.h
@rm -f $( obj) include/bmp_logo_data.h
@rm -f $( obj) lib/asm-offsets.s
@rm -f $( obj) include/generated/asm-offsets.h
@rm -f $( obj) $( CPUDIR) /$( SOC) /asm-offsets.s
@rm -f examples/standalone/atmel_df_pow2 \
examples/standalone/hello_world \
examples/standalone/interrupt \
examples/standalone/mem_to_mem_idma2intr \
examples/standalone/sched \
$( addprefix examples/standalone/, smc91111_eeprom smc911x_eeprom) \
examples/standalone/test_burst \
examples/standalone/timer
@rm -f $( addprefix examples/api/, demo demo.bin)
@rm -f tools/bmp_logo tools/easylogo/easylogo \
tools/env/fw_printenv \
tools/envcrc \
$( addprefix tools/gdb/, gdbcont gdbsend) \
tools/gen_eth_addr tools/img2srec \
tools/dumpimage \
$( addprefix tools/, mkenvimage mkimage) \
tools/mpc86x_clk \
$( addprefix tools/, mk$( BOARD) spl mkexynosspl) \
tools/mxsboot \
tools/ncb tools/ubsha1 \
tools/kernel-doc/docproc \
tools/proftool
@rm -f $( addprefix board/cray/L1/, bootscript.c bootscript.image) \
board/matrix_vision/*/bootscript.img \
spl/board/samsung/$( BOARD) /tools/mk$( BOARD) spl \
u-boot.lds \
$( addprefix arch/blackfin/cpu/, init.lds init.elf)
@rm -f include/bmp_logo.h
@rm -f include/bmp_logo_data.h
@rm -f lib/asm-offsets.s
@rm -f include/generated/asm-offsets.h
@rm -f $( CPUDIR) /$( SOC) /asm-offsets.s
@rm -f $( TIMESTAMP_FILE) $( VERSION_FILE)
@$( MAKE) -s -C doc/DocBook/ cleandocs
@$( MAKE) -f $( srctree) /doc/DocBook/Makefile cleandocs
@find $( OBJTREE) -type f \
\( -name 'core' -o -name '*.bak' -o -name '*~' -o -name '*.su' \
-o -name '*.o' -o -name '*.a' -o -name '*.exe' \
@ -962,38 +980,38 @@ clobber: tidy
@find $( OBJTREE) -type f \( -name '*.srec' \
-o -name '*.bin' -o -name u-boot.img \) \
-print0 | xargs -0 rm -f
@rm -f $( OBJS) $( obj) *.bak $( obj) ctags $( obj) etags $( obj) TAGS \
$( obj) cscope.* $( obj) *.*~
@rm -f $( obj) u-boot $( obj) u-boot.map $( obj) u-boot.hex $( ALL-y)
@rm -f $( obj) u-boot.kwb
@rm -f $( obj) u-boot.pbl
@rm -f $( obj) u-boot.imx
@rm -f $( obj) u-boot-with-spl.imx
@rm -f $( obj) u-boot-with-nand-spl.imx
@rm -f $( obj) u-boot.ubl
@rm -f $( obj) u-boot.ais
@rm -f $( obj) u-boot.dtb
@rm -f $( obj) u-boot.sb
@rm -f $( obj) u-boot.spr
@rm -f $( addprefix $( obj) nand_spl/, u-boot.lds u-boot.lst System.map)
@rm -f $( addprefix $( obj) nand_spl/, u-boot-nand_spl.lds u-boot-spl u-boot-spl.map)
@rm -f $( addprefix $( obj) spl/, u-boot-spl u-boot-spl.bin u-boot-spl.map)
@rm -f $( obj) spl/u-boot-spl.lds
@rm -f $( addprefix $( obj) tpl/, u-boot-tpl u-boot-tpl.bin u-boot-tpl.map)
@rm -f $( obj) tpl/u-boot-spl.lds
@rm -f $( obj) MLO MLO.byteswap
@rm -f $( obj) SPL
@rm -f $( obj) tools/xway-swap-bytes
@rm -fr $( obj) include/asm/proc $( obj) include/asm/arch $( obj) include/asm
@rm -fr $( obj) include/generated
@[ ! -d $( obj) nand_spl ] || find $( obj) nand_spl -name "*" -type l -print | xargs rm -f
@rm -f $( obj) dts/*.tmp
@rm -f $( addprefix $( obj) spl/, u-boot-spl.ais, u-boot-spl-pad.ais)
@rm -f $( OBJS) *.bak ctags etags TAGS \
cscope.* *.*~
@rm -f u-boot u-boot.map u-boot.hex $( ALL-y)
@rm -f u-boot.kwb
@rm -f u-boot.pbl
@rm -f u-boot.imx
@rm -f u-boot-with-spl.imx
@rm -f u-boot-with-nand-spl.imx
@rm -f u-boot.ubl
@rm -f u-boot.ais
@rm -f u-boot.dtb
@rm -f u-boot.sb
@rm -f u-boot.spr
@rm -f $( addprefix nand_spl/, u-boot.lds u-boot.lst System.map)
@rm -f $( addprefix nand_spl/, u-boot-nand_spl.lds u-boot-spl u-boot-spl.map)
@rm -f $( addprefix spl/, u-boot-spl u-boot-spl.bin u-boot-spl.map)
@rm -f spl/u-boot-spl.lds
@rm -f $( addprefix tpl/, u-boot-tpl u-boot-tpl.bin u-boot-tpl.map)
@rm -f tpl/u-boot-spl.lds
@rm -f MLO MLO.byteswap
@rm -f SPL
@rm -f tools/xway-swap-bytes
@rm -fr include/asm/proc include/asm/arch include/asm
@rm -fr include/generated
@[ ! -d nand_spl ] || find nand_spl -name "*" -type l -print | xargs rm -f
@rm -f dts/*.tmp
@rm -f $( addprefix spl/, u-boot-spl.ais, u-boot-spl-pad.ais)
m r p r o p e r \
distclean : clobber unconfig
i f n e q ( $( OBJTREE ) , $( SRCTREE ) )
rm -rf $( obj) *
rm -rf *
e n d i f
backup :
@ -1001,3 +1019,12 @@ backup:
gtar --force-local -zcvf ` LC_ALL = C date " + $$ F-%Y-%m-%d-%T.tar.gz " ` $$ F
#########################################################################
e n d i f # 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 )