From 2f1c5e7eb1775b252fa4998e10093b8ac34ca699 Mon Sep 17 00:00:00 2001 From: Chris Kay Date: Wed, 21 Feb 2024 12:52:46 +0000 Subject: [PATCH] build: use GCC to link by default 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 --- lib/romlib/Makefile | 5 +++-- make_helpers/toolchain.mk | 2 +- make_helpers/toolchains/aarch32.mk | 2 +- make_helpers/toolchains/aarch64.mk | 2 +- make_helpers/toolchains/rk3399-m0.mk | 2 +- tools/renesas/rcar_layout_create/makefile | 8 ++++---- tools/renesas/rzg_layout_create/makefile | 8 ++++---- 7 files changed, 15 insertions(+), 14 deletions(-) diff --git a/lib/romlib/Makefile b/lib/romlib/Makefile index f11e5779e..62cbf3e0c 100644 --- a/lib/romlib/Makefile +++ b/lib/romlib/Makefile @@ -30,9 +30,10 @@ else Q := endif -LDFLAGS := --gc-sections -O1 +LDFLAGS := -Wl,--gc-sections -nostdlib + ifeq ($(DEBUG),1) - LDFLAGS += -Map=$(MAPFILE) + LDFLAGS += -Wl,-Map=$(MAPFILE) endif ifeq (${ARM_ARCH_MINOR},0) diff --git a/make_helpers/toolchain.mk b/make_helpers/toolchain.mk index 7255509ab..5c77782da 100644 --- a/make_helpers/toolchain.mk +++ b/make_helpers/toolchain.mk @@ -287,7 +287,7 @@ guess-llvm-clang-ar = $(shell $(1) --print-prog-name llvm-ar 2>$(nul)) guess-gnu-gcc-cpp = $(1) # Use the C compiler guess-gnu-gcc-as = $(1) # Use the C compiler -guess-gnu-gcc-ld = $(if $(filter 1,$(ENABLE_LTO)),$(1),$(shell $(1) --print-prog-name ld.bfd 2>$(nul))) +guess-gnu-gcc-ld = $(1) # Use the C compiler guess-gnu-gcc-oc = $(shell $(1) --print-prog-name objcopy 2>$(nul)) guess-gnu-gcc-od = $(shell $(1) --print-prog-name objdump 2>$(nul)) guess-gnu-gcc-ar = $(patsubst %$(notdir $(1)),%$(subst gcc,gcc-ar,$(notdir $(1))),$(1)) diff --git a/make_helpers/toolchains/aarch32.mk b/make_helpers/toolchains/aarch32.mk index 226bc75e3..3475c91fb 100644 --- a/make_helpers/toolchains/aarch32.mk +++ b/make_helpers/toolchains/aarch32.mk @@ -7,7 +7,7 @@ aarch32-cc-default := $(or $(CROSS_COMPILE),arm-none-eabi-)gcc aarch32-cpp-default := $(or $(CROSS_COMPILE),arm-none-eabi-)gcc aarch32-as-default := $(or $(CROSS_COMPILE),arm-none-eabi-)gcc -aarch32-ld-default := $(or $(CROSS_COMPILE),arm-none-eabi-)ld.bfd +aarch32-ld-default := $(or $(CROSS_COMPILE),arm-none-eabi-)gcc aarch32-oc-default := $(or $(CROSS_COMPILE),arm-none-eabi-)objcopy aarch32-od-default := $(or $(CROSS_COMPILE),arm-none-eabi-)objdump aarch32-ar-default := $(or $(CROSS_COMPILE),arm-none-eabi-)gcc-ar diff --git a/make_helpers/toolchains/aarch64.mk b/make_helpers/toolchains/aarch64.mk index 15c575753..d83d9187e 100644 --- a/make_helpers/toolchains/aarch64.mk +++ b/make_helpers/toolchains/aarch64.mk @@ -7,7 +7,7 @@ aarch64-cc-default := $(or $(CROSS_COMPILE),aarch64-none-elf-)gcc aarch64-cpp-default := $(or $(CROSS_COMPILE),aarch64-none-elf-)gcc aarch64-as-default := $(or $(CROSS_COMPILE),aarch64-none-elf-)gcc -aarch64-ld-default := $(or $(CROSS_COMPILE),aarch64-none-elf-)ld.bfd +aarch64-ld-default := $(or $(CROSS_COMPILE),aarch64-none-elf-)gcc aarch64-oc-default := $(or $(CROSS_COMPILE),aarch64-none-elf-)objcopy aarch64-od-default := $(or $(CROSS_COMPILE),aarch64-none-elf-)objdump aarch64-ar-default := $(or $(CROSS_COMPILE),aarch64-none-elf-)gcc-ar diff --git a/make_helpers/toolchains/rk3399-m0.mk b/make_helpers/toolchains/rk3399-m0.mk index c61b6e89b..f57d6583c 100644 --- a/make_helpers/toolchains/rk3399-m0.mk +++ b/make_helpers/toolchains/rk3399-m0.mk @@ -7,7 +7,7 @@ rk3399-m0-cc-default := $(or $(M0_CROSS_COMPILE),arm-none-eabi-)gcc rk3399-m0-cpp-default := $(or $(M0_CROSS_COMPILE),arm-none-eabi-)gcc rk3399-m0-as-default := $(or $(M0_CROSS_COMPILE),arm-none-eabi-)gcc -rk3399-m0-ld-default := $(or $(M0_CROSS_COMPILE),arm-none-eabi-)ld.bfd +rk3399-m0-ld-default := $(or $(M0_CROSS_COMPILE),arm-none-eabi-)gcc rk3399-m0-oc-default := $(or $(M0_CROSS_COMPILE),arm-none-eabi-)objcopy rk3399-m0-od-default := $(or $(M0_CROSS_COMPILE),arm-none-eabi-)objdump rk3399-m0-ar-default := $(or $(M0_CROSS_COMPILE),arm-none-eabi-)gcc-ar diff --git a/tools/renesas/rcar_layout_create/makefile b/tools/renesas/rcar_layout_create/makefile index baa6e7e75..919c1de70 100644 --- a/tools/renesas/rcar_layout_create/makefile +++ b/tools/renesas/rcar_layout_create/makefile @@ -89,19 +89,19 @@ all: $(OUTPUT_FILE_SA0) $(OUTPUT_FILE_SA6) # Linker ################################################### $(OUTPUT_FILE_SA0) : $(MEMORY_DEF_SA0) $(OBJ_FILE_SA0) - $(aarch64-ld) $(OBJ_FILE_SA0) \ + $(aarch64-ld) $(OBJ_FILE_SA0) -nostdlib \ -T $(MEMORY_DEF_SA0) \ -o $(OUTPUT_FILE_SA0) \ - -Map $(FILE_NAME_SA0).map \ + -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) \ + $(aarch64-ld) $(OBJ_FILE_SA6) -nostdlib \ -T $(MEMORY_DEF_SA6) \ -o $(OUTPUT_FILE_SA6) \ - -Map $(FILE_NAME_SA6).map \ + -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 diff --git a/tools/renesas/rzg_layout_create/makefile b/tools/renesas/rzg_layout_create/makefile index 4cab5fba9..e1c242de3 100644 --- a/tools/renesas/rzg_layout_create/makefile +++ b/tools/renesas/rzg_layout_create/makefile @@ -86,19 +86,19 @@ all: $(OUTPUT_FILE_SA0) $(OUTPUT_FILE_SA6) # Linker ################################################### $(OUTPUT_FILE_SA0) : $(MEMORY_DEF_SA0) $(OBJ_FILE_SA0) - $(aarch64-ld) $(OBJ_FILE_SA0) \ + $(aarch64-ld) $(OBJ_FILE_SA0) -nostdlib \ -T $(MEMORY_DEF_SA0) \ -o $(OUTPUT_FILE_SA0) \ - -Map $(FILE_NAME_SA0).map \ + -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) \ + $(aarch64-ld) $(OBJ_FILE_SA6) -nostdlib \ -T $(MEMORY_DEF_SA6) \ -o $(OUTPUT_FILE_SA6) \ - -Map $(FILE_NAME_SA6).map \ + -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