mirror of
https://github.com/ARM-software/arm-trusted-firmware.git
synced 2025-04-26 14:55:16 +00:00

When configuring GNU GCC as the C compiler, we usually use the GNU BFD linker directly to link by default. However, this complicates things because we also need to support LTO, which can only be done when linking is done via the C compiler, and we cannot change the linker later on if some other part of the build system wants to enable LTO. This change migrates the default choice of linker to GCC if the C compiler is GCC, in order to enable this use-case. This should have no impact on anything outside of the build system, as by default GCC merely acts as a wrapper around BFD. Change-Id: I40771be2b0571def67bbfde9e877e7629ec8cdaa Signed-off-by: Chris Kay <chris.kay@arm.com>
115 lines
2.9 KiB
Makefile
115 lines
2.9 KiB
Makefile
#
|
|
# Copyright (c) 2020, Renesas Electronics Corporation. All rights reserved.
|
|
#
|
|
# SPDX-License-Identifier: BSD-3-Clause
|
|
#
|
|
|
|
toolchains := aarch64
|
|
|
|
include ../../../make_helpers/toolchain.mk
|
|
|
|
###################################################
|
|
# makefile
|
|
###################################################
|
|
|
|
#output file name
|
|
FILE_NAME_SA0 = bootparam_sa0
|
|
FILE_NAME_SA6 = cert_header_sa6
|
|
|
|
OUTPUT_FILE_SA0 = $(FILE_NAME_SA0).elf
|
|
OUTPUT_FILE_SA6 = $(FILE_NAME_SA6).elf
|
|
|
|
#object file name
|
|
OBJ_FILE_SA0 = sa0.o
|
|
OBJ_FILE_SA6 = sa6.o
|
|
|
|
#linker script name
|
|
MEMORY_DEF_SA0 = sa0.ld.S
|
|
MEMORY_DEF_SA6 = sa6.ld.S
|
|
|
|
###################################################
|
|
# Convenience function for adding build definitions
|
|
# $(eval $(call add_define,FOO)) will have:
|
|
# -DFOO if $(FOO) is empty; -DFOO=$(FOO) otherwise
|
|
define add_define
|
|
DEFINES += -D$(1)$(if $(value $(1)),=$(value $(1)),)
|
|
endef
|
|
|
|
# Process RCAR_SA0_SIZE flag
|
|
ifndef RCAR_SA0_SIZE
|
|
RCAR_SA0_SIZE := 1
|
|
else
|
|
ifeq (${RCAR_SA0_SIZE},0)
|
|
RCAR_SA0_SIZE := 0
|
|
else
|
|
RCAR_SA0_SIZE := 1
|
|
endif
|
|
endif
|
|
$(eval $(call add_define,RCAR_SA0_SIZE))
|
|
|
|
# Process RCAR_SA6_TYPE flag
|
|
ifndef RCAR_SA6_TYPE
|
|
RCAR_SA6_TYPE := 0
|
|
else
|
|
ifeq (${RCAR_SA6_TYPE},0)
|
|
RCAR_SA6_TYPE := 0
|
|
else
|
|
RCAR_SA6_TYPE := 1
|
|
endif
|
|
endif
|
|
$(eval $(call add_define,RCAR_SA6_TYPE))
|
|
|
|
RCAR_VMA_ADJUST_ADDR := 0xE6320000
|
|
$(eval $(call add_define,RCAR_VMA_ADJUST_ADDR))
|
|
|
|
|
|
###################################################
|
|
|
|
#c compiler
|
|
CFLAGS += ${DEFINES}
|
|
CFLAGS += -nostdinc \
|
|
-I../../../include/lib/libc \
|
|
-I../../../include/lib/libc/aarch64
|
|
|
|
#clean
|
|
CL = rm -f
|
|
|
|
###################################################
|
|
.SUFFIXES : .s .c .o
|
|
|
|
###################################################
|
|
# command
|
|
|
|
.PHONY: all
|
|
all: $(OUTPUT_FILE_SA0) $(OUTPUT_FILE_SA6)
|
|
###################################################
|
|
# Linker
|
|
###################################################
|
|
$(OUTPUT_FILE_SA0) : $(MEMORY_DEF_SA0) $(OBJ_FILE_SA0)
|
|
$(aarch64-ld) $(OBJ_FILE_SA0) -nostdlib \
|
|
-T $(MEMORY_DEF_SA0) \
|
|
-o $(OUTPUT_FILE_SA0) \
|
|
-Wl,-Map $(FILE_NAME_SA0).map \
|
|
|
|
$(aarch64-oc) -O srec --adjust-vma=$(RCAR_VMA_ADJUST_ADDR) --srec-forceS3 $(OUTPUT_FILE_SA0) $(FILE_NAME_SA0).srec
|
|
$(aarch64-oc) -O binary --adjust-vma=$(RCAR_VMA_ADJUST_ADDR) --srec-forceS3 $(OUTPUT_FILE_SA0) $(FILE_NAME_SA0).bin
|
|
|
|
$(OUTPUT_FILE_SA6) : $(MEMORY_DEF_SA6) $(OBJ_FILE_SA6)
|
|
$(aarch64-ld) $(OBJ_FILE_SA6) -nostdlib \
|
|
-T $(MEMORY_DEF_SA6) \
|
|
-o $(OUTPUT_FILE_SA6) \
|
|
-Wl,-Map $(FILE_NAME_SA6).map \
|
|
|
|
$(aarch64-oc) -O srec --adjust-vma=$(RCAR_VMA_ADJUST_ADDR) --srec-forceS3 $(OUTPUT_FILE_SA6) $(FILE_NAME_SA6).srec
|
|
$(aarch64-oc) -O binary --adjust-vma=$(RCAR_VMA_ADJUST_ADDR) --srec-forceS3 $(OUTPUT_FILE_SA6) $(FILE_NAME_SA6).bin
|
|
|
|
###################################################
|
|
# Compile
|
|
###################################################
|
|
|
|
%.o: %.c
|
|
$(aarch64-cc) $(CPPFLAGS) $(CFLAGS) -c -o $@ $<
|
|
|
|
.PHONY: clean
|
|
clean:
|
|
$(CL) *.bin *.map *.srec *.elf *.o
|