Update Makefiles to get proper dependency checking working.

This change requires all platforms to now specify a list of source files
rather than object files.

New source files should preferably be specified by using the path as
well and we should add this in the future for all files so we can remove
use of vpath. This is desirable because vpath hides issues like the fact
that BL2 currently pulls in a BL1 file bl1/aarch64/early_exceptions.S
and if in the future we added bl2/aarch64/early_exceptions.S then it's
likely only one of the two version would be used for both bootloaders.

This change also removes the 'dump' build target and simply gets
bootloaders to always generate a dump file. At the same time the -x
option is added so the section headers and symbols table are listed.

Fixes ARM-software/tf-issues#11

Change-Id: Ie38f7be76fed95756c8576cf3f3ea3b7015a18dc
Signed-off-by: Jon Medhurst <tixy@linaro.org>
This commit is contained in:
Jon Medhurst 2014-02-12 15:54:48 +00:00 committed by Dan Handley
parent cf6eeb8a60
commit 6d55d109a3
8 changed files with 221 additions and 238 deletions

307
Makefile
View File

@ -59,14 +59,14 @@ else
BUILD_TYPE := release
endif
BL_COMMON_OBJS := misc_helpers.o \
cache_helpers.o \
tlb_helpers.o \
xlat_helpers.o \
std.o \
bl_common.o \
platform_helpers.o \
io_storage.o
BL_COMMON_SOURCES := misc_helpers.S \
cache_helpers.S \
tlb_helpers.S \
xlat_helpers.c \
std.c \
bl_common.c \
platform_helpers.S \
io_storage.c
ARCH ?= aarch64
@ -77,10 +77,6 @@ SPD ?= none
BUILD_BASE := ./build
BUILD_PLAT := ${BUILD_BASE}/${PLAT}/${BUILD_TYPE}
BUILD_BL1 := ${BUILD_PLAT}/bl1
BUILD_BL2 := ${BUILD_PLAT}/bl2
BUILD_BL31 := ${BUILD_PLAT}/bl31
BUILD_DIRS := ${BUILD_BL1} ${BUILD_BL2} ${BUILD_BL31}
PLATFORMS := $(shell ls -I common plat/)
SPDS := $(shell ls -I none services/spd)
@ -96,7 +92,7 @@ endif
ifeq (${PLAT},all)
all: ${PLATFORMS}
else
all: msg_start bl1 bl2 bl31 fip
all: msg_start fip
endif
msg_start:
@ -132,20 +128,10 @@ ifneq (${SPD},none)
# variable to "yes"
endif
.PHONY: all msg_start ${PLATFORMS} dump clean realclean distclean bl1 bl2 bl31 cscope locate-checkpatch checkcodebase checkpatch fiptool fip locate-bl33
.PHONY: all msg_start ${PLATFORMS} clean realclean distclean cscope locate-checkpatch checkcodebase checkpatch fiptool fip locate-bl33
.SUFFIXES:
BL1_OBJS := $(addprefix ${BUILD_BL1}/,${BL1_OBJS} ${BL_COMMON_OBJS} ${PLAT_BL_COMMON_OBJS})
BL2_OBJS := $(addprefix ${BUILD_BL2}/,${BL2_OBJS} ${BL_COMMON_OBJS} ${PLAT_BL_COMMON_OBJS})
BL31_OBJS := $(addprefix ${BUILD_BL31}/,${BL31_OBJS} ${BL_COMMON_OBJS} ${PLAT_BL_COMMON_OBJS} ${SPD_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/ \
-Idrivers/io \
-Iinclude/${ARCH}/ \
@ -166,9 +152,6 @@ CFLAGS := -nostdinc -pedantic -ffreestanding -Wall \
-DDEBUG=${DEBUG} ${INCLUDES} ${CFLAGS}
LDFLAGS += --fatal-warnings -O1
BL1_LDFLAGS := -Map=${BL1_MAPFILE} --script ${BL1_LINKERFILE} --entry=${BL1_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}
vpath %.ld.S bl1:bl2:bl31
@ -197,16 +180,6 @@ OD := ${CROSS_COMPILE}objdump
NM := ${CROSS_COMPILE}nm
PP := ${CROSS_COMPILE}gcc -E ${CFLAGS}
bl1: ${BUILD_BL1} ${BUILD_PLAT}/bl1.bin
FIP_DEPS += ${BUILD_PLAT}/bl1.bin
bl2: ${BUILD_BL2} ${BUILD_PLAT}/bl2.bin
FIP_DEPS += ${BUILD_PLAT}/bl2.bin
bl31: ${BUILD_BL31} ${BUILD_PLAT}/bl31.bin
FIP_DEPS += ${BUILD_PLAT}/bl31.bin
BASE_COMMIT ?= origin/master
# Variables for use with Firmware Image Package
@ -241,53 +214,6 @@ FIP_DEPS += ${BL33}
endif
# If BL32 needs to be built, provide necessary build rules and targets
ifeq (${NEED_BL32},yes)
BUILD_BL32 := ${BUILD_PLAT}/bl32
BUILD_DIRS += ${BUILD_BL32}
BL32_OBJS := $(addprefix ${BUILD_BL32}/,${BL32_OBJS})
BL32_MAPFILE := $(addprefix ${BUILD_BL32}/,${BL32_MAPFILE})
BL32_LINKERFILE := $(addprefix ${BUILD_BL32}/,${BL32_LINKERFILE})
BL32_LDFLAGS := -Map=${BL32_MAPFILE} --script ${BL32_LINKERFILE} --entry=${BL32_ENTRY_POINT}
bl32: ${BUILD_BL32} ${BUILD_PLAT}/bl32.bin
all: bl32
dump: bl32_dump
.PHONY: bl32
# Add BL32 image to FIP's input image list
FIP_DEPS := bl32
FIP_ARGS := --bl32 ${BUILD_PLAT}/bl32.bin
${BUILD_BL32}/%.o: %.S
@echo " AS $<"
${Q}${AS} ${ASFLAGS} -c $< -o $@
${BUILD_BL32}/%.o: %.c
@echo " CC $<"
${Q}${CC} ${CFLAGS} -c $< -o $@
${BUILD_BL32}/%.ld: %.ld.S
@echo " PP $<"
${Q}${AS} ${ASFLAGS} -P -E $< -o $@
${BUILD_BL32}/bl32.elf: ${BL32_OBJS} ${BL32_LINKERFILE}
@echo " LD $@"
${Q}${LD} -o $@ ${LDFLAGS} ${BL32_LDFLAGS} ${BL32_OBJS}
${BUILD_PLAT}/bl32.bin: ${BUILD_BL32}/bl32.elf
@echo " BIN $@"
${Q}${OC} -O binary $< $@
@echo
@echo "Built $@ successfully"
@echo
bl32_dump:
${Q}${OD} -d ${BUILD_BL32}/bl32.elf > ${BUILD_BL32}/bl32.dump
endif
clean:
@echo " CLEAN"
${Q}rm -rf ${BUILD_PLAT}
@ -299,12 +225,6 @@ realclean distclean:
${Q}rm -f ${CURDIR}/cscope.*
${Q}${MAKE} --no-print-directory -C ${FIPTOOLPATH} clean
dump:
@echo " OBJDUMP"
${Q}${OD} -d ${BUILD_BL1}/bl1.elf > ${BUILD_BL1}/bl1.dump
${Q}${OD} -d ${BUILD_BL2}/bl2.elf > ${BUILD_BL2}/bl2.dump
${Q}${OD} -d ${BUILD_BL31}/bl31.elf > ${BUILD_BL31}/bl31.dump
checkcodebase: locate-checkpatch
@echo " CHECKING STYLE"
@if test -d .git ; then \
@ -323,86 +243,156 @@ ${FIPTOOL}:
@echo "Built $@ successfully"
@echo
${BUILD_DIRS}:
${Q}mkdir -p "$@"
define match_goals
$(strip $(foreach goal,$(1),$(filter $(goal),$(MAKECMDGOALS))))
endef
${BUILD_BL1}/%.o: %.S
@echo " AS $<"
${Q}${AS} ${ASFLAGS} -c $< -o $@
${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 $<"
${Q}${CC} ${CFLAGS} -c $< -o $@
${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 " PP $<"
${Q}${AS} ${ASFLAGS} -P -E $< -o $@
${BUILD_BL2}/%.ld: %.ld.S
@echo " PP $<"
${Q}${AS} ${ASFLAGS} -P -E $< -o $@
${BUILD_BL31}/%.ld: %.ld.S
@echo " PP $<"
${Q}${AS} ${ASFLAGS} -P -E $< -o $@
CLEANING := $(call match_goals,clean realclean distclean)
${BUILD_BL1}/bl1.elf: ${BL1_OBJS} ${BL1_LINKERFILE}
@echo " LD $@"
${Q}${LD} -o $@ ${LDFLAGS} ${BL1_LDFLAGS} ${BL1_OBJS}
define MAKE_C
${BUILD_BL2}/bl2.elf: ${BL2_OBJS} ${BL2_LINKERFILE}
@echo " LD $@"
${Q}${LD} -o $@ ${LDFLAGS} ${BL2_LDFLAGS} ${BL2_OBJS}
$(eval OBJ := $(1)/$(patsubst %.c,%.o,$(notdir $(2))))
$(eval PREREQUISITES := $(patsubst %.o,%.d,$(OBJ)))
${BUILD_BL31}/bl31.elf: ${BL31_OBJS} ${BL31_LINKERFILE}
@echo " LD $@"
${Q}${LD} -o $@ ${LDFLAGS} ${BL31_LDFLAGS} ${BL31_OBJS}
$(OBJ) : $(2)
@echo " CC $$<"
$$(Q)$$(CC) $$(CFLAGS) -c $$< -o $$@
${BUILD_PLAT}/bl1.bin: ${BUILD_BL1}/bl1.elf
@echo " BIN $@"
${Q}${OC} -O binary $< $@
@echo
@echo "Built $@ successfully"
@echo
${BUILD_PLAT}/bl2.bin: ${BUILD_BL2}/bl2.elf
@echo " BIN $@"
${Q}${OC} -O binary $< $@
@echo
@echo "Built $@ successfully"
@echo
$(PREREQUISITES) : $(2)
@echo " DEPS $$@"
@mkdir -p $(1)
$$(Q)$$(CC) $$(CFLAGS) -M -MT $(OBJ) -MF $$@ $$<
${BUILD_PLAT}/bl31.bin: ${BUILD_BL31}/bl31.elf
@echo " BIN $@"
${Q}${OC} -O binary $< $@
@echo
@echo "Built $@ successfully"
@echo
ifeq "$(CLEANING)" ""
-include $(PREREQUISITES)
endif
endef
define MAKE_S
$(eval OBJ := $(1)/$(patsubst %.S,%.o,$(notdir $(2))))
$(eval PREREQUISITES := $(patsubst %.o,%.d,$(OBJ)))
$(OBJ) : $(2)
@echo " AS $$<"
$$(Q)$$(AS) $$(ASFLAGS) -c $$< -o $$@
$(PREREQUISITES) : $(2)
@echo " DEPS $$@"
@mkdir -p $(1)
$$(Q)$$(AS) $$(ASFLAGS) -M -MT $(OBJ) -MF $$@ $$<
ifeq "$(CLEANING)" ""
-include $(PREREQUISITES)
endif
endef
define MAKE_LD
$(eval PREREQUISITES := $(1).d)
$(1) : $(2)
@echo " PP $$<"
$$(Q)$$(AS) $$(ASFLAGS) -P -E -o $$@ $$<
$(PREREQUISITES) : $(2)
@echo " DEPS $$@"
@mkdir -p $$(dir $$@)
$$(Q)$$(AS) $$(ASFLAGS) -M -MT $(1) -MF $$@ $$<
ifeq "$(CLEANING)" ""
-include $(PREREQUISITES)
endif
endef
define MAKE_OBJS
$(eval C_OBJS := $(filter %.c,$(2)))
$(eval REMAIN := $(filter-out %.c,$(2)))
$(eval $(foreach obj,$(C_OBJS),$(call MAKE_C,$(1),$(obj))))
$(eval S_OBJS := $(filter %.S,$(REMAIN)))
$(eval REMAIN := $(filter-out %.S,$(REMAIN)))
$(eval $(foreach obj,$(S_OBJS),$(call MAKE_S,$(1),$(obj))))
$(and $(REMAIN),$(error Unexpected source files present: $(REMAIN)))
endef
# NOTE: The line continuation '\' is required in the next define otherwise we
# end up with a line-feed characer at the end of the last c filename.
# Also bare this issue in mind if extending the list of supported filetypes.
define SOURCES_TO_OBJS
$(notdir $(patsubst %.c,%.o,$(filter %.c,$(1)))) \
$(notdir $(patsubst %.S,%.o,$(filter %.S,$(1))))
endef
define MAKE_BL
$(eval BUILD_DIR := ${BUILD_PLAT}/bl$(1))
$(eval SOURCES := $(BL$(1)_SOURCES) $(BL_COMMON_SOURCES) $(PLAT_BL_COMMON_SOURCES))
$(eval OBJS := $(addprefix $(BUILD_DIR)/,$(call SOURCES_TO_OBJS,$(SOURCES))))
$(eval LINKERFILE := $(BUILD_DIR)/bl$(1).ld)
$(eval MAPFILE := $(BUILD_DIR)/bl$(1).map)
$(eval ELF := $(BUILD_DIR)/bl$(1).elf)
$(eval DUMP := $(BUILD_DIR)/bl$(1).dump)
$(eval BIN := $(BUILD_PLAT)/bl$(1).bin)
$(eval $(call MAKE_OBJS,$(BUILD_DIR),$(SOURCES)))
$(eval $(call MAKE_LD,$(LINKERFILE),$(BL$(1)_LINKERFILE)))
$(BUILD_DIR) :
$$(Q)mkdir -p "$$@"
$(ELF) : $(OBJS) $(LINKERFILE)
@echo " LD $$@"
$$(Q)$$(LD) -o $$@ $$(LDFLAGS) -Map=$(MAPFILE) --script $(LINKERFILE) \
--entry=$(BL$(1)_ENTRY_POINT) $(OBJS)
$(DUMP) : $(ELF)
@echo " OD $$@"
$${Q}$${OD} -dx $$< > $$@
$(BIN) : $(ELF)
@echo " BIN $$@"
$$(Q)$$(OC) -O binary $$< $$@
@echo
@echo "Built $$@ successfully"
@echo
.PHONY : bl$(1)
bl$(1) : $(BUILD_DIR) $(BIN) $(DUMP)
all : bl$(1)
$(eval FIP_DEPS += $(if $2,$(BIN),))
$(eval FIP_ARGS += $(if $2,--bl$(1) $(BIN),))
endef
$(eval $(call MAKE_BL,1))
$(eval $(call MAKE_BL,2,in_fip))
BL31_SOURCES += ${SPD_SOURCES}
$(eval $(call MAKE_BL,31,in_fip))
ifeq (${NEED_BL32},yes)
$(eval $(call MAKE_BL,32,in_fip))
endif
${BUILD_PLAT}/fip.bin: locate-bl33 ${FIP_DEPS} ${FIPTOOL}
${Q}${FIPTOOL} --dump \
--bl2 ${BUILD_PLAT}/bl2.bin \
--bl31 ${BUILD_PLAT}/bl31.bin \
--bl33 ${BL33} \
${FIP_ARGS} \
--bl33 ${BL33} \
$@
@echo
@echo "Built $@ successfully"
@ -415,7 +405,7 @@ cscope:
${Q}cscope -b -q -k
help:
@echo "usage: ${MAKE} PLAT=<all|${HELP_PLATFORMS}> <all|bl1|bl2|bl31|distclean|clean|checkcodebase|checkpatch|dump>"
@echo "usage: ${MAKE} PLAT=<all|${HELP_PLATFORMS}> <all|bl1|bl2|bl31|distclean|clean|checkcodebase|checkpatch>"
@echo ""
@echo "PLAT is used to specify which platform you wish to build."
@echo ""
@ -430,7 +420,6 @@ help:
@echo " clean Clean the build for the selected platform"
@echo " cscope Generate cscope index"
@echo " distclean Remove all build artifacts for all platforms"
@echo " dump Generate object file dumps"
@echo " fiptool Build the Firmware Image Package(FIP) creation tool"
@echo ""
@echo "note: most build targets require PLAT to be set to a specific platform."

View File

@ -43,12 +43,11 @@ vpath %.S arch/${ARCH}/cpu \
lib/arch/${ARCH} \
${PLAT_BL1_S_VPATH}
BL1_OBJS += bl1_arch_setup.o \
bl1_entrypoint.o \
early_exceptions.o \
bl1_main.o \
cpu_helpers.o
BL1_SOURCES += bl1_arch_setup.c \
bl1_entrypoint.S \
early_exceptions.S \
bl1_main.c \
cpu_helpers.S
BL1_ENTRY_POINT := reset_handler
BL1_MAPFILE := bl1.map
BL1_LINKERFILE := bl1.ld
BL1_LINKERFILE := bl1.ld.S

View File

@ -40,14 +40,13 @@ vpath %.S lib/arch/${ARCH} \
lib/sync/locks/exclusive \
${PLAT_BL2_S_VPATH}
BL2_OBJS += bl2_entrypoint.o \
bl2_arch_setup.o \
bl2_main.o \
spinlock.o \
early_exceptions.o
BL2_SOURCES += bl2_entrypoint.S \
bl2_arch_setup.c \
bl2_main.c \
spinlock.S \
early_exceptions.S
BL2_ENTRY_POINT := bl2_entrypoint
BL2_MAPFILE := bl2.map
BL2_LINKERFILE := bl2.ld
BL2_LINKERFILE := bl2.ld.S
CFLAGS += $(DEFINES)

View File

@ -47,25 +47,24 @@ vpath %.S lib/arch/${ARCH} \
arch/system/gic/${ARCH} \
${PLAT_BL31_S_VPATH}
BL31_OBJS += bl31_arch_setup.o \
bl31_entrypoint.o \
runtime_exceptions.o \
bl31_main.o \
psci_entry.o \
psci_setup.o \
psci_common.o \
psci_afflvl_on.o \
psci_main.o \
psci_afflvl_off.o \
psci_afflvl_suspend.o \
spinlock.o \
gic_v3_sysregs.o \
bakery_lock.o \
runtime_svc.o \
early_exceptions.o \
context_mgmt.o \
context.o
BL31_SOURCES += bl31_arch_setup.c \
bl31_entrypoint.S \
runtime_exceptions.S \
bl31_main.c \
psci_entry.S \
psci_setup.c \
psci_common.c \
psci_afflvl_on.c \
psci_main.c \
psci_afflvl_off.c \
psci_afflvl_suspend.c \
spinlock.S \
gic_v3_sysregs.S \
bakery_lock.c \
runtime_svc.c \
early_exceptions.S \
context_mgmt.c \
context.S
BL31_ENTRY_POINT := bl31_entrypoint
BL31_MAPFILE := bl31.map
BL31_LINKERFILE := bl31.ld
BL31_LINKERFILE := bl31.ld.S

View File

@ -33,7 +33,6 @@ vpath %.c ${PLAT_BL2_C_VPATH}
vpath %.S ${PLAT_BL2_S_VPATH}
# TSP source files specific to FVP platform
BL32_OBJS += bl32_plat_setup.o \
bl32_setup_xlat.o \
plat_common.o \
${PLAT_BL_COMMON_OBJS}
BL32_SOURCES += bl32_plat_setup.c \
bl32_setup_xlat.c \
plat_common.c

View File

@ -38,16 +38,14 @@ vpath %.S lib/arch/${ARCH} \
include \
lib/sync/locks/exclusive
BL32_OBJS += tsp_entrypoint.o \
tsp_main.o \
tsp_request.o \
spinlock.o \
early_exceptions.o \
${BL_COMMON_OBJS}
BL32_SOURCES += tsp_entrypoint.S \
tsp_main.c \
tsp_request.S \
spinlock.S \
early_exceptions.S
BL32_ENTRY_POINT := tsp_entrypoint
BL32_MAPFILE := tsp.map
BL32_LINKERFILE := tsp.ld
BL32_LINKERFILE := tsp.ld.S
vpath %.ld.S ${BL32_ROOT}
vpath %.c ${BL32_ROOT}

View File

@ -57,35 +57,35 @@ PLAT_BL31_C_VPATH := drivers/arm/interconnect/cci-400 \
PLAT_BL31_S_VPATH := lib/semihosting/${ARCH}
PLAT_BL_COMMON_OBJS := semihosting_call.o \
mmio.o \
pl011.o \
semihosting.o \
sysreg_helpers.o \
plat_io_storage.o \
io_semihosting.o \
io_fip.o \
io_memmap.o
PLAT_BL_COMMON_SOURCES := semihosting_call.S \
mmio.c \
pl011.c \
semihosting.c \
sysreg_helpers.S \
plat_io_storage.c \
io_semihosting.c \
io_fip.c \
io_memmap.c
BL1_OBJS += bl1_plat_setup.o \
bl1_plat_helpers.o \
plat_helpers.o \
plat_common.o \
plat_setup_xlat.o \
cci400.o
BL1_SOURCES += bl1_plat_setup.c \
bl1_plat_helpers.S \
plat_helpers.S \
plat_common.c \
plat_setup_xlat.c \
cci400.c
BL2_OBJS += bl2_plat_setup.o \
plat_setup_xlat.o \
plat_common.o
BL2_SOURCES += bl2_plat_setup.c \
plat_setup_xlat.c \
plat_common.c
BL31_OBJS += bl31_plat_setup.o \
plat_helpers.o \
plat_setup_xlat.o \
plat_common.o \
plat_pm.o \
plat_topology.o \
plat_gic.o \
fvp_pwrc.o \
cci400.o \
gic_v2.o \
gic_v3.o
BL31_SOURCES += bl31_plat_setup.c \
plat_helpers.S \
plat_setup_xlat.c \
plat_common.c \
plat_pm.c \
plat_topology.c \
plat_gic.c \
fvp_pwrc.c \
cci400.c \
gic_v2.c \
gic_v3.c

View File

@ -32,10 +32,10 @@ TSPD_DIR := services/spd/tspd
SPD_INCLUDES := -Iinclude/spd/tspd \
-I${TSPD_DIR}
SPD_OBJS := tspd_common.o \
tspd_main.o \
tspd_pm.o \
tspd_helpers.o
SPD_SOURCES := tspd_common.c \
tspd_main.c \
tspd_pm.c \
tspd_helpers.S
vpath %.c ${TSPD_DIR}
vpath %.S ${TSPD_DIR}