mirror of
https://github.com/ARM-software/arm-trusted-firmware.git
synced 2025-04-22 20:38:03 +00:00
Generate build products in sub-directories
A single binary can be compiled using a command such as: make CROSS_COMPILE=aarch64-none-elf- bl1 Also make use of brackets consistent in the Makefile. Change-Id: I2180fdb473411ef7cffe39670a7b2de82def812e
This commit is contained in:
parent
375ae68e8d
commit
eaaeece2b0
3 changed files with 130 additions and 67 deletions
166
Makefile
166
Makefile
|
@ -31,30 +31,40 @@
|
||||||
# Decrease the verbosity of the make script
|
# Decrease the verbosity of the make script
|
||||||
# can be made verbose by passing V=1 at the make command line
|
# can be made verbose by passing V=1 at the make command line
|
||||||
ifdef V
|
ifdef V
|
||||||
KBUILD_VERBOSE = $(V)
|
KBUILD_VERBOSE = ${V}
|
||||||
else
|
else
|
||||||
KBUILD_VERBOSE = 0
|
KBUILD_VERBOSE = 0
|
||||||
endif
|
endif
|
||||||
|
|
||||||
ifeq "$(KBUILD_VERBOSE)" "0"
|
ifeq "${KBUILD_VERBOSE}" "0"
|
||||||
Q=@
|
Q=@
|
||||||
else
|
else
|
||||||
Q=
|
Q=
|
||||||
endif
|
endif
|
||||||
|
|
||||||
DEBUG ?= 0
|
DEBUG ?= 0
|
||||||
BL_COMMON_OBJS = misc_helpers.o cache_helpers.o tlb_helpers.o \
|
|
||||||
|
ifneq (${DEBUG}, 0)
|
||||||
|
BUILD_TYPE := debug
|
||||||
|
else
|
||||||
|
BUILD_TYPE := release
|
||||||
|
endif
|
||||||
|
|
||||||
|
BL_COMMON_OBJS := misc_helpers.o cache_helpers.o tlb_helpers.o \
|
||||||
semihosting_call.o mmio.o pl011.o semihosting.o \
|
semihosting_call.o mmio.o pl011.o semihosting.o \
|
||||||
std.o bl_common.o platform_helpers.o sysreg_helpers.o
|
std.o bl_common.o platform_helpers.o sysreg_helpers.o
|
||||||
|
|
||||||
ARCH := aarch64
|
ARCH := aarch64
|
||||||
|
PLAT := fvp
|
||||||
|
|
||||||
all: $(patsubst %,%.bin,bl1 bl2 bl31) ;
|
BUILD_BASE:=./build
|
||||||
|
BUILD:=${BUILD_BASE}/${PLAT}/${BUILD_TYPE}
|
||||||
|
BUILD_BL1:=${BUILD}/bl1
|
||||||
|
BUILD_BL2:=${BUILD}/bl2
|
||||||
|
BUILD_BL31:=${BUILD}/bl31
|
||||||
|
BUILD_DIRS:=${BUILD_BL1} ${BUILD_BL2} ${BUILD_BL31}
|
||||||
|
|
||||||
|
all: bl1 bl2 bl31
|
||||||
#$(info $(filter bl2.%, $(MAKECMDGOALS)))
|
|
||||||
#$(info $(filter bl1.%, $(MAKECMDGOALS)))
|
|
||||||
#$(info $(MAKECMDGOALS))
|
|
||||||
|
|
||||||
$(info Including bl1.mk)
|
$(info Including bl1.mk)
|
||||||
include bl1/bl1.mk
|
include bl1/bl1.mk
|
||||||
|
@ -65,7 +75,19 @@ include bl2/bl2.mk
|
||||||
$(info Including bl31.mk)
|
$(info Including bl31.mk)
|
||||||
include bl31/bl31.mk
|
include bl31/bl31.mk
|
||||||
|
|
||||||
OBJS += $(BL_COMMON_OBJS)
|
.PHONY: dump clean realclean distclean bl1 bl2 bl31
|
||||||
|
.SUFFIXES:
|
||||||
|
|
||||||
|
|
||||||
|
BL1_OBJS := $(addprefix ${BUILD_BL1}/,${BL1_OBJS} ${BL_COMMON_OBJS})
|
||||||
|
BL2_OBJS := $(addprefix ${BUILD_BL2}/,${BL2_OBJS} ${BL_COMMON_OBJS})
|
||||||
|
BL31_OBJS := $(addprefix ${BUILD_BL31}/,${BL31_OBJS} ${BL_COMMON_OBJS})
|
||||||
|
BL1_MAPFILE := $(addprefix ${BUILD_BL1}/,${BL1_MAPFILE})
|
||||||
|
BL2_MAPFILE := $(addprefix ${BUILD_BL2}/,${BL2_MAPFILE})
|
||||||
|
BL31_MAPFILE := $(addprefix ${BUILD_BL31}/,${BL31_MAPFILE})
|
||||||
|
BL1_LINKERFILE := $(addprefix ${BUILD_BL1}/,${BL1_LINKERFILE})
|
||||||
|
BL2_LINKERFILE := $(addprefix ${BUILD_BL2}/,${BL2_LINKERFILE})
|
||||||
|
BL31_LINKERFILE := $(addprefix ${BUILD_BL31}/,${BL31_LINKERFILE})
|
||||||
|
|
||||||
INCLUDES += -Ilib/include/ -Iinclude/aarch64/ -Iinclude/ \
|
INCLUDES += -Ilib/include/ -Iinclude/aarch64/ -Iinclude/ \
|
||||||
-Idrivers/arm/interconnect/cci-400/ \
|
-Idrivers/arm/interconnect/cci-400/ \
|
||||||
|
@ -77,9 +99,9 @@ ASFLAGS += -D__ASSEMBLY__ $(INCLUDES)
|
||||||
CFLAGS := -Wall -std=c99 -c -Os -DDEBUG=$(DEBUG) $(INCLUDES) ${CFLAGS}
|
CFLAGS := -Wall -std=c99 -c -Os -DDEBUG=$(DEBUG) $(INCLUDES) ${CFLAGS}
|
||||||
|
|
||||||
LDFLAGS += -O1
|
LDFLAGS += -O1
|
||||||
BL1_LDFLAGS := -Map=$(BL1_MAPFILE) --script $(BL1_LINKERFILE) --entry=$(BL1_ENTRY_POINT)
|
BL1_LDFLAGS := -Map=${BL1_MAPFILE} --script ${BL1_LINKERFILE} --entry=${BL1_ENTRY_POINT}
|
||||||
BL2_LDFLAGS := -Map=$(BL2_MAPFILE) --script $(BL2_LINKERFILE) --entry=$(BL2_ENTRY_POINT)
|
BL2_LDFLAGS := -Map=${BL2_MAPFILE} --script ${BL2_LINKERFILE} --entry=${BL2_ENTRY_POINT}
|
||||||
BL31_LDFLAGS := -Map=$(BL31_MAPFILE) --script $(BL31_LINKERFILE) --entry=$(BL31_ENTRY_POINT)
|
BL31_LDFLAGS := -Map=${BL31_MAPFILE} --script ${BL31_LINKERFILE} --entry=${BL31_ENTRY_POINT}
|
||||||
|
|
||||||
|
|
||||||
vpath %.ld.S bl1:bl2:bl31
|
vpath %.ld.S bl1:bl2:bl31
|
||||||
|
@ -88,7 +110,7 @@ vpath %.c bl1/${ARCH}:bl2/${ARCH}:bl31/${ARCH}
|
||||||
vpath %.S bl1/${ARCH}:bl2/${ARCH}:bl31/${ARCH}
|
vpath %.S bl1/${ARCH}:bl2/${ARCH}:bl31/${ARCH}
|
||||||
|
|
||||||
|
|
||||||
ifneq ($(DEBUG), 0)
|
ifneq (${DEBUG}, 0)
|
||||||
#CFLAGS += -g -O0
|
#CFLAGS += -g -O0
|
||||||
CFLAGS += -g
|
CFLAGS += -g
|
||||||
# -save-temps -fverbose-asm
|
# -save-temps -fverbose-asm
|
||||||
|
@ -96,74 +118,102 @@ ASFLAGS += -g -Wa,--gdwarf-2
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
|
||||||
CC = $(CROSS_COMPILE)gcc
|
CC := ${CROSS_COMPILE}gcc
|
||||||
CPP = $(CROSS_COMPILE)cpp
|
CPP := ${CROSS_COMPILE}cpp
|
||||||
AS = $(CROSS_COMPILE)gcc
|
AS := ${CROSS_COMPILE}gcc
|
||||||
AR = $(CROSS_COMPILE)ar
|
AR := ${CROSS_COMPILE}ar
|
||||||
LD = $(CROSS_COMPILE)ld
|
LD := ${CROSS_COMPILE}ld
|
||||||
OC = $(CROSS_COMPILE)objcopy
|
OC := ${CROSS_COMPILE}objcopy
|
||||||
OD = $(CROSS_COMPILE)objdump
|
OD := ${CROSS_COMPILE}objdump
|
||||||
NM = $(CROSS_COMPILE)nm
|
NM := ${CROSS_COMPILE}nm
|
||||||
PP = $(CROSS_COMPILE)gcc -E $(CFLAGS)
|
PP := ${CROSS_COMPILE}gcc -E ${CFLAGS}
|
||||||
|
|
||||||
|
|
||||||
distclean: clean
|
bl1: ${BUILD_BL1} ${BUILD}/bl1.bin
|
||||||
@echo " DISTCLEAN"
|
bl2: ${BUILD_BL2} ${BUILD}/bl2.bin
|
||||||
$(Q)rm -rf *.zi
|
bl31: ${BUILD_BL31} ${BUILD}/bl31.bin
|
||||||
$(Q)rm -rf *.dump
|
|
||||||
$(Q)rm -rf *.bin
|
|
||||||
$(Q)rm -f *.axf
|
|
||||||
$(Q)rm -f *.i *.s
|
|
||||||
$(Q)rm -f *.ar
|
|
||||||
$(Q)rm -f *.map
|
|
||||||
$(Q)rm -f *.scf
|
|
||||||
$(Q)rm -f *.txt
|
|
||||||
$(Q)rm -f *.elf
|
|
||||||
$(Q)rm -rf *.bin
|
|
||||||
$(Q)rm -f $(LISTFILE)
|
|
||||||
|
|
||||||
clean:
|
clean:
|
||||||
@echo " CLEAN"
|
@echo " CLEAN"
|
||||||
$(Q)rm -f *.o *.ld
|
${Q}rm -rf ${BUILD}
|
||||||
|
|
||||||
.PHONY: dump
|
realclean distclean:
|
||||||
|
@echo " REALCLEAN"
|
||||||
|
${Q}rm -rf ${BUILD_BASE}
|
||||||
|
|
||||||
dump:
|
dump:
|
||||||
@echo " OBJDUMP"
|
@echo " OBJDUMP"
|
||||||
$(OD) -d bl1.elf > bl1.dump
|
${Q}${OD} -d ${BUILD_BL1}/bl1.elf > ${BUILD_BL1}/bl1.dump
|
||||||
$(OD) -d bl2.elf > bl2.dump
|
${Q}${OD} -d ${BUILD_BL2}/bl2.elf > ${BUILD_BL2}/bl2.dump
|
||||||
$(OD) -d bl31.elf > bl31.dump
|
${Q}${OD} -d ${BUILD_BL31}/bl31.elf > ${BUILD_BL31}/bl31.dump
|
||||||
|
|
||||||
%.o: %.S
|
${BUILD_DIRS}:
|
||||||
|
${Q}mkdir -p "$@"
|
||||||
|
|
||||||
|
|
||||||
|
${BUILD_BL1}/%.o: %.S
|
||||||
@echo " AS $<"
|
@echo " AS $<"
|
||||||
$(Q)$(AS) $(ASFLAGS) -c $< -o $@
|
${Q}${AS} ${ASFLAGS} -c $< -o $@
|
||||||
|
|
||||||
%.o: %.c
|
${BUILD_BL2}/%.o: %.S
|
||||||
|
@echo " AS $<"
|
||||||
|
${Q}${AS} ${ASFLAGS} -c $< -o $@
|
||||||
|
|
||||||
|
${BUILD_BL31}/%.o: %.S
|
||||||
|
@echo " AS $<"
|
||||||
|
${Q}${AS} ${ASFLAGS} -c $< -o $@
|
||||||
|
|
||||||
|
${BUILD_BL1}/%.o: %.c
|
||||||
@echo " CC $<"
|
@echo " CC $<"
|
||||||
$(Q)$(CC) $(CFLAGS) -c $< -o $@
|
${Q}${CC} ${CFLAGS} -c $< -o $@
|
||||||
|
|
||||||
%.ld: %.ld.S
|
${BUILD_BL2}/%.o: %.c
|
||||||
|
@echo " CC $<"
|
||||||
|
${Q}${CC} ${CFLAGS} -c $< -o $@
|
||||||
|
|
||||||
|
${BUILD_BL31}/%.o: %.c
|
||||||
|
@echo " CC $<"
|
||||||
|
${Q}${CC} ${CFLAGS} -c $< -o $@
|
||||||
|
|
||||||
|
${BUILD_BL1}/%.ld: %.ld.S
|
||||||
@echo " LDS $<"
|
@echo " LDS $<"
|
||||||
$(Q)$(AS) $(ASFLAGS) -P -E $< -o $@
|
${Q}${AS} ${ASFLAGS} -P -E $< -o $@
|
||||||
|
|
||||||
|
${BUILD_BL2}/%.ld: %.ld.S
|
||||||
|
@echo " LDS $<"
|
||||||
|
${Q}${AS} ${ASFLAGS} -P -E $< -o $@
|
||||||
|
|
||||||
|
${BUILD_BL31}/%.ld: %.ld.S
|
||||||
|
@echo " LDS $<"
|
||||||
|
${Q}${AS} ${ASFLAGS} -P -E $< -o $@
|
||||||
|
|
||||||
|
|
||||||
bl1.elf: $(OBJS) $(BL1_OBJS) bl1.ld
|
${BUILD_BL1}/bl1.elf: ${BL1_OBJS} ${BL1_LINKERFILE}
|
||||||
@echo " LD $@"
|
@echo " LD $@"
|
||||||
$(Q)$(LD) -o $@ $(LDFLAGS) $(BL1_LDFLAGS) $(OBJS) $(BL1_OBJS)
|
${Q}${LD} -o $@ ${LDFLAGS} ${BL1_LDFLAGS} ${BL1_OBJS}
|
||||||
|
|
||||||
|
${BUILD_BL2}/bl2.elf: ${BL2_OBJS} ${BL2_LINKERFILE}
|
||||||
|
@echo " LD $@"
|
||||||
|
${Q}${LD} -o $@ ${LDFLAGS} ${BL2_LDFLAGS} ${BL2_OBJS}
|
||||||
|
|
||||||
|
${BUILD_BL31}/bl31.elf: ${BL31_OBJS} ${BL31_LINKERFILE}
|
||||||
|
@echo " LD $@"
|
||||||
|
${Q}${LD} -o $@ ${LDFLAGS} ${BL31_LDFLAGS} ${BL31_OBJS}
|
||||||
|
|
||||||
|
${BUILD}/bl1.bin: ${BUILD_BL1}/bl1.elf
|
||||||
|
${Q}${OC} -O binary $< $@
|
||||||
|
@echo
|
||||||
@echo "Built $@ successfully"
|
@echo "Built $@ successfully"
|
||||||
@echo
|
@echo
|
||||||
|
|
||||||
bl2.elf: $(OBJS) $(BL2_OBJS) bl2.ld
|
${BUILD}/bl2.bin: ${BUILD_BL2}/bl2.elf
|
||||||
@echo " LD $@"
|
${Q}${OC} -O binary $< $@
|
||||||
$(Q)$(LD) -o $@ $(LDFLAGS) $(BL2_LDFLAGS) $(OBJS) $(BL2_OBJS)
|
@echo
|
||||||
@echo "Built $@ successfully"
|
@echo "Built $@ successfully"
|
||||||
@echo
|
@echo
|
||||||
|
|
||||||
bl31.elf: $(OBJS) $(BL31_OBJS) bl31.ld
|
${BUILD}/bl31.bin: ${BUILD_BL31}/bl31.elf
|
||||||
@echo " LD $@"
|
${Q}${OC} -O binary $< $@
|
||||||
$(Q)$(LD) -o $@ $(LDFLAGS) $(BL31_LDFLAGS) $(OBJS) $(BL31_OBJS)
|
@echo
|
||||||
@echo "Built $@ successfully"
|
@echo "Built $@ successfully"
|
||||||
@echo
|
@echo
|
||||||
|
|
||||||
%.bin: %.elf
|
|
||||||
$(OC) -O binary $< $@
|
|
||||||
|
|
|
@ -24,6 +24,8 @@ Detailed changes since last release
|
||||||
Base FVPs have been increased from 2GB to 4GB. This resolves the issue of
|
Base FVPs have been increased from 2GB to 4GB. This resolves the issue of
|
||||||
failing to start user-space when using a RAM-disk file-system.
|
failing to start user-space when using a RAM-disk file-system.
|
||||||
|
|
||||||
|
* Build products are now created in a separate build directory tree.
|
||||||
|
|
||||||
|
|
||||||
ARM Trusted Firmware - version 0.2
|
ARM Trusted Firmware - version 0.2
|
||||||
==================================
|
==================================
|
||||||
|
|
|
@ -87,19 +87,30 @@ To build the software for the FVPs, follow these steps:
|
||||||
By default this produces a release version of the build. To produce a debug
|
By default this produces a release version of the build. To produce a debug
|
||||||
version instead, refer to the "Debugging options" section below.
|
version instead, refer to the "Debugging options" section below.
|
||||||
|
|
||||||
The build creates ELF and raw binary files in the current directory. It
|
The build process creates products in a `build` directory tree, building
|
||||||
generates the following boot loader binary files from the ELF files:
|
the objects and binaries for each boot loader stage in separate
|
||||||
|
sub-directories. The following boot loader binary files are created from
|
||||||
|
the corresponding ELF files:
|
||||||
|
|
||||||
* `bl1.bin`
|
* `build/<platform>/<build-type>/bl1.bin`
|
||||||
* `bl2.bin`
|
* `build/<platform>/<build-type>/bl2.bin`
|
||||||
* `bl31.bin`
|
* `build/<platform>/<build-type>/bl31.bin`
|
||||||
|
|
||||||
4. Copy the above 3 boot loader binary files to the directory where the FVPs
|
... where `<platform>` currently defaults to `fvp` and `<build-type>` is
|
||||||
are launched from. Symbolic links of the same names may be created instead.
|
either `debug` or `release`.
|
||||||
|
|
||||||
5. (Optional) To clean the build directory use
|
4. Copy the three boot loader binary files to the directory from which the FVP
|
||||||
|
will be launched. Symbolic links of the same names may be created instead.
|
||||||
|
|
||||||
make distclean
|
5. (Optional) Build products for a specific build variant can be removed using:
|
||||||
|
|
||||||
|
make DEBUG=<D> clean
|
||||||
|
|
||||||
|
... where `<D>` is `0` or `1`, as specified when building.
|
||||||
|
|
||||||
|
The build tree can be removed completely using:
|
||||||
|
|
||||||
|
make realclean
|
||||||
|
|
||||||
|
|
||||||
#### Debugging options
|
#### Debugging options
|
||||||
|
|
Loading…
Add table
Reference in a new issue