From cc277de81692cf72f067354ada6e84f5e996f6b8 Mon Sep 17 00:00:00 2001 From: Chris Kay Date: Fri, 20 Oct 2023 09:17:33 +0000 Subject: [PATCH] build: refactor toolchain detection This change refactors how we identify the toolchain, with the ultimate aim of eventually cleaning up the various mechanisms that we employ to configure default tools, identify the tools in use, and configure toolchain flags. To do this, we introduce three new concepts in this change: - Toolchain identifiers, - Tool class identifiers, and - Tool identifiers. Toolchain identifiers identify a configurable chain of tools targeting one platform/machine/architecture. Today, these are: - The host machine, which receives the `host` identifier, - The AArch32 architecture, which receives the `aarch32` identifier, and - The AArch64 architecture, which receivs the `aarch64` identifier. The tools in a toolchain may come from different vendors, and are not necessarily expected to come from one single toolchain distribution. In most cases it is perfectly valid to mix tools from different toolchain distributions, with some exceptions (notably, link-time optimization generally requires the compiler and the linker to be aligned). Tool class identifiers identify a class (or "role") of a tool. C compilers, assemblers and linkers are all examples of tool classes. Tool identifiers identify a specific tool recognized and supported by the build system. Every tool that can make up a part of a toolchain must receive a tool identifier. These new identifiers can be used to retrieve information about the toolchain in a more standardized fashion. For example, logic in a Makefile that should only execute when the C compiler is GNU GCC can now check the tool identifier for the C compiler in the relevant toolchain: ifeq ($($(ARCH)-cc-id),gnu-gcc) ... endif Change-Id: Icc23e43aaa32f4fd01d8187c5202f5012a634e7c Signed-off-by: Chris Kay --- Makefile | 6 + lib/romlib/Makefile | 4 + make_helpers/build_env.mk | 4 +- make_helpers/toolchain.mk | 343 ++++++++++++++++++++++ make_helpers/toolchains/aarch32.mk | 14 + make_helpers/toolchains/aarch64.mk | 14 + make_helpers/toolchains/host.mk | 14 + make_helpers/toolchains/rk3399-m0.mk | 14 + make_helpers/unix.mk | 3 + make_helpers/windows.mk | 3 + plat/rockchip/rk3399/drivers/m0/Makefile | 4 + tools/amlogic/Makefile | 4 + tools/cert_create/Makefile | 6 +- tools/encrypt_fw/Makefile | 2 + tools/fiptool/Makefile | 5 +- tools/marvell/doimage/Makefile | 4 + tools/nxp/create_pbl/Makefile | 3 + tools/renesas/rcar_layout_create/makefile | 4 + tools/renesas/rzg_layout_create/makefile | 4 + tools/sptool/Makefile | 5 +- tools/stm32image/Makefile | 5 +- 21 files changed, 458 insertions(+), 7 deletions(-) create mode 100644 make_helpers/toolchain.mk create mode 100644 make_helpers/toolchains/aarch32.mk create mode 100644 make_helpers/toolchains/aarch64.mk create mode 100644 make_helpers/toolchains/host.mk create mode 100644 make_helpers/toolchains/rk3399-m0.mk diff --git a/Makefile b/Makefile index fc4169757..7440f30fb 100644 --- a/Makefile +++ b/Makefile @@ -30,6 +30,12 @@ include ${MAKE_HELPERS_DIRECTORY}build_env.mk include ${MAKE_HELPERS_DIRECTORY}defaults.mk +################################################################################ +# Configure the toolchains used to build TF-A and its tools +################################################################################ + +include ${MAKE_HELPERS_DIRECTORY}toolchain.mk + # Assertions enabled for DEBUG builds by default ENABLE_ASSERTIONS := ${DEBUG} ENABLE_PMF := ${ENABLE_RUNTIME_INSTRUMENTATION} diff --git a/lib/romlib/Makefile b/lib/romlib/Makefile index 3b62aaa15..1ae90959d 100644 --- a/lib/romlib/Makefile +++ b/lib/romlib/Makefile @@ -4,6 +4,10 @@ # SPDX-License-Identifier: BSD-3-Clause # +toolchains := aarch64 + +include ../../make_helpers/toolchain.mk + AS = $(CROSS_COMPILE)gcc AR = $(CROSS_COMPILE)gcc-ar LD = $(CROSS_COMPILE)ld diff --git a/make_helpers/build_env.mk b/make_helpers/build_env.mk index 83093bd69..a545cd095 100644 --- a/make_helpers/build_env.mk +++ b/make_helpers/build_env.mk @@ -1,5 +1,5 @@ # -# Copyright (c) 2016, ARM Limited and Contributors. All rights reserved. +# Copyright (c) 2016-2024, Arm Limited and Contributors. All rights reserved. # # SPDX-License-Identifier: BSD-3-Clause # @@ -47,7 +47,7 @@ ifndef BUILD_ENV_MK endif endif endif - include ${MAKE_HELPERS_DIRECTORY}${ENV_FILE_TO_INCLUDE} + include $(dir $(lastword $(MAKEFILE_LIST)))${ENV_FILE_TO_INCLUDE} ENV_FILE_TO_INCLUDE := ifndef SHELL_COPY diff --git a/make_helpers/toolchain.mk b/make_helpers/toolchain.mk new file mode 100644 index 000000000..505630ee4 --- /dev/null +++ b/make_helpers/toolchain.mk @@ -0,0 +1,343 @@ +# +# Copyright (c) 2023-2024, Arm Limited and Contributors. All rights reserved. +# +# SPDX-License-Identifier: BSD-3-Clause +# + +# +# TF-A uses three toolchains: +# +# - The host toolchain (`host`) for building native tools +#  - The AArch32 toolchain (`aarch32`) for building Arm AArch32 images +# - The AArch64 toolchain (`aarch64`) for building Arm AArch64 images +# +# In the main Makefile only one of the two Arm toolchains is enabled in any +# given build, but individual tools and libraries may need access to both. +# + +toolchains ?= host $(ARCH) + +ifneq ($(filter host,$(toolchains)),) + host-cc := $(HOSTCC) + host-cpp := $(HOSTCPP) + + host-as := $(HOSTAS) + + host-ld := $(HOSTLD) + host-oc := $(HOSTOC) + host-od := $(HOSTOD) + host-ar := $(HOSTAR) + + host-dtc := $(HOSTDTC) +endif + +ifneq ($(filter aarch32,$(toolchains)),) + aarch32-cc := $(if $(filter-out default,$(origin CC)),$(CC)) + aarch32-cpp := $(if $(filter-out default,$(origin CPP)),$(CPP)) + + aarch32-as := $(if $(filter-out default,$(origin AS)),$(AS)) + + aarch32-ld := $(if $(filter-out default,$(origin LD)),$(LD)) + aarch32-oc := $(if $(filter-out default,$(origin OC)),$(OC)) + aarch32-od := $(if $(filter-out default,$(origin OD)),$(OD)) + aarch32-ar := $(if $(filter-out default,$(origin AR)),$(AR)) + + aarch32-dtc := $(if $(filter-out default,$(origin DTC)),$(DTC)) +endif + +ifneq ($(filter aarch64,$(toolchains)),) + aarch64-cc := $(if $(filter-out default,$(origin CC)),$(CC)) + aarch64-cpp := $(if $(filter-out default,$(origin CPP)),$(CPP)) + + aarch64-as := $(if $(filter-out default,$(origin AS)),$(AS)) + + aarch64-ld := $(if $(filter-out default,$(origin LD)),$(LD)) + aarch64-oc := $(if $(filter-out default,$(origin OC)),$(OC)) + aarch64-od := $(if $(filter-out default,$(origin OD)),$(OD)) + aarch64-ar := $(if $(filter-out default,$(origin AR)),$(AR)) + + aarch64-dtc := $(if $(filter-out default,$(origin DTC)),$(DTC)) +endif + +include $(dir $(lastword $(MAKEFILE_LIST)))build_env.mk +include $(addprefix $(dir $(lastword $(MAKEFILE_LIST)))toolchains/, \ + $(addsuffix .mk,$(toolchains))) + +# +# Configure tool classes that we recognize. +# +# In the context of this build system, a tool class identifies a specific role +# or type of tool in the toolchain. +# + +# C-related tools +tool-classes := cc # C compilers +tool-classes += cpp # C preprocessors + +# Assembly-related tools +tool-classes += as # Assemblers + +# Linking and object-handling tools +tool-classes += ld # Linkers +tool-classes += oc # Object copiers +tool-classes += od # Object dumpers +tool-classes += ar # Archivers + +# Other tools +tool-classes += dtc # Device tree compilers + +# +# Configure tools that we recognize. +# +# Here we declare the list of specific toolchain tools that we know how to +# interact with. We don't organize these into tool classes yet - that happens +# further down. +# + +# Arm Compiler for Embedded +tools := arm-clang # armclang +tools += arm-link # armlink +tools += arm-ar # armar +tools += arm-fromelf # fromelf + +# LLVM Project +tools += llvm-clang # clang +tools += llvm-lld # lld +tools += llvm-objcopy # llvm-objcopy +tools += llvm-objdump # llvm-objdump +tools += llvm-ar # llvm-ar + +# GNU Compiler Collection & GNU Binary Utilities +tools += gnu-gcc # gcc +tools += gnu-ld # ld +tools += gnu-objcopy # objcopy +tools += gnu-objdump # objdump +tools += gnu-ar # gcc-ar + +# Other tools +tools += dtc # Device Tree Compiler + +# +# Assign tools to tool classes. +# +# Multifunctional tools, i.e. tools which can perform multiple roles in a +# toolchain, may be specified in multiple tool class lists. For example, a C +# compiler which can also perform the role of a linker may be placed in both +# `tools-cc` and `tools-ld`. +# + +# C-related tools +tools-cc := arm-clang llvm-clang gnu-gcc # C compilers +tools-cpp := arm-clang llvm-clang gnu-gcc # C preprocessors + +# Assembly-related tools +tools-as := arm-clang llvm-clang gnu-gcc # Assemblers + +# Linking and object-handling tools +tools-ld := arm-clang arm-link llvm-clang llvm-lld gnu-gcc gnu-ld # Linkers +tools-oc := arm-fromelf llvm-objcopy gnu-objcopy # Object copiers +tools-od := arm-fromelf llvm-objdump gnu-objdump # Object dumpers +tools-ar := arm-ar llvm-ar gnu-ar # Archivers + +# Other tools +tools-dtc := dtc # Device tree compilers + +define check-tool-class-tools + $(eval tool-class := $(1)) + + ifndef tools-$(tool-class) + $$(error no tools registered to handle tool class `$(tool-class)`) + endif +endef + +$(foreach tool-class,$(tool-classes), \ + $(eval $(call check-tool-class-tools,$(tool-class)))) + +# +# Default tools for each toolchain. +# +# Toolchains can specify a default path to any given tool with a tool class. +# These values are used in the absence of user-specified values, and are +# configured by the parent Makefile using variables of the form: +# +# - $(toolchain)-$(tool-class)-default +# +# For example, the default C compiler for the AArch32 and AArch64 toolchains +# could be configured with: +# +# - aarch32-cc-default +# - aarch64-cc-default +# + +define check-toolchain-tool-class-default + $(eval toolchain := $(1)) + $(eval tool-class := $(2)) + + ifndef $(toolchain)-$(tool-class)-default + $$(error no default value specified for tool class `$(tool-class)` of toolchain `$(toolchain)`) + endif +endef + +define check-toolchain-tool-class-defaults + $(eval toolchain := $(1)) + + $(foreach tool-class,$(tool-classes), \ + $(eval $(call check-toolchain-tool-class-default,$(toolchain),$(tool-class)))) +endef + +$(foreach toolchain,$(toolchains), \ + $(eval $(call check-toolchain-tool-class-defaults,$(toolchain)))) + +# +# Helper functions to identify toolchain tools. +# +# The functions defined in this section return a tool identifier when given a +# path to a binary. We generally check a help or version string to more reliably +# identify tools than by looking at the path alone (e.g. `gcc` on macOS is +# actually Apple Clang). +# +# Each tool-guessing function (`guess-tool-$(tool)`) takes a single argument +# giving the path to the tool to guess, and returns a non-empty value if the +# tool corresponds to the tool identifier `$(tool)`: +# +# $(call guess-tool-llvm-clang,aarch64-none-elf-gcc) # +# $(call guess-tool-gnu-gcc,aarch64-none-elf-gcc) # +# +# The `guess-tool` function tries to find the corresponding tool identifier +# for a tool given its path. It takes two arguments: +# +# - $(1): a list of candidate tool identifiers to check +# - $(2): the path to the tool to identify +# +# If any of the guess functions corresponding to candidate tool identifiers +# return a non-empty value then the tool identifier of the first function to do +# so is returned: +# +# $(call guess-tool,gnu-gcc llvm-clang,armclang) # +# $(call guess-tool,gnu-gcc llvm-clang,clang-14) # llvm-clang +# $(call guess-tool,gnu-gcc llvm-clang,aarch64-none-elf-gcc-12) # gnu-gcc +# +# Tools are checked in the order that they appear in `tools-$(tool-class)`, and +# the first match is returned. +# + +# Arm Compiler for Embedded +guess-tool-arm-clang = $(shell $(1) --version 2>&1 | grep -o "Tool: armclang") +guess-tool-arm-link = $(shell $(1) --help 2>&1 | grep -o "Tool: armlink") +guess-tool-arm-fromelf = $(shell $(1) --help 2>&1 | grep -o "Tool: fromelf") +guess-tool-arm-ar = $(shell $(1) --version 2>&1 | grep -o "Tool: armar") + +# LLVM Project +guess-tool-llvm-clang = $(shell $(1) -v 2>&1 | grep -o "clang version") +guess-tool-llvm-lld = $(shell $(1) --help 2>&1 | grep -o "OVERVIEW: lld") +guess-tool-llvm-objcopy = $(shell $(1) --help 2>&1 | grep -o "llvm-objcopy tool") +guess-tool-llvm-objdump = $(shell $(1) --help 2>&1 | grep -o "llvm object file dumper") +guess-tool-llvm-ar = $(shell $(1) --help 2>&1 | grep -o "LLVM Archiver") + +# GNU Compiler Collection & GNU Binary Utilities +guess-tool-gnu-gcc = $(shell $(1) -v 2>&1 | grep -o "gcc version") +guess-tool-gnu-ld = $(shell $(1) -v 2>&1 | grep -o "GNU ld") +guess-tool-gnu-objcopy = $(shell $(1) --version 2>&1 | grep -o "GNU objcopy") +guess-tool-gnu-objdump = $(shell $(1) --version 2>&1 | grep -o "GNU objdump") +guess-tool-gnu-ar = $(shell $(1) --version 2>&1 | grep -o "GNU ar") + +# Other tools +guess-tool-dtc = $(shell $(1) --version 2>&1 | grep -o "Version: DTC") + +guess-tool = $(firstword $(foreach candidate,$(1), \ + $(if $(call guess-tool-$(candidate),$(2)),$(candidate)))) + +# +# Locate and identify tools belonging to each toolchain. +# +# Each tool class in each toolchain receives a variable of the form +# `$(toolchain)-$(tool)` giving the associated path to the program. For example: +# +# - `aarch64-ld` gives the linker for the AArch64 toolchain, +# - `aarch32-oc` gives the object copier for the AArch32 toolchain, and +# - `host-cc` gives the C compiler for the host toolchain. +# +# For each of these variables, if no program path is explicitly provided by the +# parent Makefile then the C compiler is queried (if supported) for its +# location. This is done via the `guess-$(tool)-$(tool-class)` set of functions. +# For example: +# +# - `guess-arm-clang-ld` guesses the linker via Arm Clang, +# - `guess-llvm-clang-as` guesses the assembler via LLVM Clang, and +# - `guess-gnu-gcc-od` guesses the object dumper via GNU GCC. +# +# If the C compiler cannot provide the location (or the tool class is the C +# compiler), then it is assigned the value of the `$(toolchain)-$(tool)-default` +# variable. +# + +guess-arm-clang-cpp = $(1) # Use the C compiler +guess-arm-clang-as = $(1) # Use the C compiler +guess-arm-clang-ld = # Fall back to `$(toolchain)-ld-default` +guess-arm-clang-oc = # Fall back to `$(toolchain)-oc-default` +guess-arm-clang-od = # Fall back to `$(toolchain)-od-default` +guess-arm-clang-ar = # Fall back to `$(toolchain)-ar-default` + +guess-llvm-clang-cpp = $(1) # Use the C compiler +guess-llvm-clang-as = $(1) # Use the C compiler +guess-llvm-clang-ld = $(shell $(1) --print-prog-name ld.lld 2>$(nul)) +guess-llvm-clang-oc = $(shell $(1) --print-prog-name llvm-objcopy 2>$(nul)) +guess-llvm-clang-od = $(shell $(1) --print-prog-name llvm-objdump 2>$(nul)) +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-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)) + +define locate-toolchain-tool-cc + $(eval toolchain := $(1)) + + $(toolchain)-cc := $$(strip \ + $$(or $$($(toolchain)-cc),$$($(toolchain)-cc-default))) + $(toolchain)-cc-id := $$(strip \ + $$(call guess-tool,$$(tools-cc),$$($(toolchain)-cc))) +endef + +define locate-toolchain-tool + $(eval toolchain := $(1)) + $(eval tool-class := $(2)) + + ifndef $(toolchain)-$(tool-class) + $(toolchain)-$(tool-class) := $$(strip \ + $$(call guess-$$($(toolchain)-cc-id)-$(tool-class),$$($(toolchain)-cc))) + + ifeq ($$($(toolchain)-$(tool-class)),) + $(toolchain)-$(tool-class) := $$(strip \ + $$($(toolchain)-$(tool-class)-default)) + endif + endif + + $(toolchain)-$(tool-class)-id := $$(strip \ + $$(call guess-tool,$$(tools-$(tool-class)),$$($$(toolchain)-$(tool-class)))) +endef + +define canonicalize-toolchain-tool-path + $(eval toolchain := $(1)) + $(eval tool-class := $(2)) + + $(toolchain)-$(tool-class) := $$(strip $$(or \ + $$(call which,$$($(toolchain)-$(tool-class))), \ + $$($(toolchain)-$(tool-class)))) +endef + +define locate-toolchain + $(eval toolchain := $(1)) + + $$(eval $$(call locate-toolchain-tool-cc,$(toolchain))) + $$(eval $$(call canonicalize-toolchain-tool-path,$(toolchain),cc)) + + $$(foreach tool-class,$$(filter-out cc,$$(tool-classes)), \ + $$(eval $$(call locate-toolchain-tool,$(toolchain),$$(tool-class))) \ + $$(eval $$(call canonicalize-toolchain-tool-path,$(toolchain),$$(tool-class)))) +endef + +$(foreach toolchain,$(toolchains), \ + $(eval $(call locate-toolchain,$(toolchain)))) diff --git a/make_helpers/toolchains/aarch32.mk b/make_helpers/toolchains/aarch32.mk new file mode 100644 index 000000000..226bc75e3 --- /dev/null +++ b/make_helpers/toolchains/aarch32.mk @@ -0,0 +1,14 @@ +# +# Copyright (c) 2023-2024, Arm Limited and Contributors. All rights reserved. +# +# SPDX-License-Identifier: BSD-3-Clause +# + +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-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 +aarch32-dtc-default := dtc diff --git a/make_helpers/toolchains/aarch64.mk b/make_helpers/toolchains/aarch64.mk new file mode 100644 index 000000000..15c575753 --- /dev/null +++ b/make_helpers/toolchains/aarch64.mk @@ -0,0 +1,14 @@ +# +# Copyright (c) 2023-2024, Arm Limited and Contributors. All rights reserved. +# +# SPDX-License-Identifier: BSD-3-Clause +# + +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-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 +aarch64-dtc-default := dtc diff --git a/make_helpers/toolchains/host.mk b/make_helpers/toolchains/host.mk new file mode 100644 index 000000000..fe3fc1c8d --- /dev/null +++ b/make_helpers/toolchains/host.mk @@ -0,0 +1,14 @@ +# +# Copyright (c) 2023, Arm Limited and Contributors. All rights reserved. +# +# SPDX-License-Identifier: BSD-3-Clause +# + +host-cc-default := gcc +host-cpp-default := gcc +host-as-default := gcc +host-ld-default := gcc +host-oc-default := objcopy +host-od-default := objdump +host-ar-default := gcc-ar +host-dtc-default := dtc diff --git a/make_helpers/toolchains/rk3399-m0.mk b/make_helpers/toolchains/rk3399-m0.mk new file mode 100644 index 000000000..c61b6e89b --- /dev/null +++ b/make_helpers/toolchains/rk3399-m0.mk @@ -0,0 +1,14 @@ +# +# Copyright (c) 2024, Arm Limited and Contributors. All rights reserved. +# +# SPDX-License-Identifier: BSD-3-Clause +# + +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-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 +rk3399-m0-dtc-default := dtc diff --git a/make_helpers/unix.mk b/make_helpers/unix.mk index 545ddfdea..d285799c3 100644 --- a/make_helpers/unix.mk +++ b/make_helpers/unix.mk @@ -57,4 +57,7 @@ ${1} : ${2} -${Q}rm -rf "${1}" endef + nul := /dev/null + + which = $(shell which $(1) 2>$(nul)) endif diff --git a/make_helpers/windows.mk b/make_helpers/windows.mk index ac0f94044..980abf095 100644 --- a/make_helpers/windows.mk +++ b/make_helpers/windows.mk @@ -68,6 +68,9 @@ ${1} : ${2} -@if exist "$(tmp_dir)" rd /Q /S "$(tmp_dir)" endef + nul := nul + + which = $(shell where $(1) 2>$(nul)) endif # Because git is not available from CMD.EXE, we need to avoid diff --git a/plat/rockchip/rk3399/drivers/m0/Makefile b/plat/rockchip/rk3399/drivers/m0/Makefile index 71548ba81..55f0a829a 100644 --- a/plat/rockchip/rk3399/drivers/m0/Makefile +++ b/plat/rockchip/rk3399/drivers/m0/Makefile @@ -4,6 +4,10 @@ # SPDX-License-Identifier: BSD-3-Clause # +toolchains := rk3399-m0 + +include ../../../../../make_helpers/toolchain.mk + # Cross Compile M0_CROSS_COMPILE ?= arm-none-eabi- diff --git a/tools/amlogic/Makefile b/tools/amlogic/Makefile index 1a1d1f812..d6d464b45 100644 --- a/tools/amlogic/Makefile +++ b/tools/amlogic/Makefile @@ -4,9 +4,13 @@ # SPDX-License-Identifier: BSD-3-Clause # https://spdx.org/licenses # + +toolchains := host + MAKE_HELPERS_DIRECTORY := ../../make_helpers/ include ${MAKE_HELPERS_DIRECTORY}build_macros.mk include ${MAKE_HELPERS_DIRECTORY}build_env.mk +include ${MAKE_HELPERS_DIRECTORY}toolchain.mk PROJECT := doimage${BIN_EXT} OBJECTS := doimage.o diff --git a/tools/cert_create/Makefile b/tools/cert_create/Makefile index b911d19d2..4203405de 100644 --- a/tools/cert_create/Makefile +++ b/tools/cert_create/Makefile @@ -1,5 +1,5 @@ # -# Copyright (c) 2015-2022, Arm Limited and Contributors. All rights reserved. +# Copyright (c) 2015-2024, Arm Limited and Contributors. All rights reserved. # # SPDX-License-Identifier: BSD-3-Clause # @@ -11,10 +11,13 @@ CRTTOOL ?= cert_create${BIN_EXT} BINARY := $(notdir ${CRTTOOL}) COT := tbbr +toolchains := host + MAKE_HELPERS_DIRECTORY := ../../make_helpers/ include ${MAKE_HELPERS_DIRECTORY}build_macros.mk include ${MAKE_HELPERS_DIRECTORY}build_env.mk include ${MAKE_HELPERS_DIRECTORY}defaults.mk +include ${MAKE_HELPERS_DIRECTORY}toolchain.mk ifneq (${PLAT},none) TF_PLATFORM_ROOT := ../../plat/ @@ -108,4 +111,3 @@ clean: realclean: clean $(call SHELL_DELETE,${BINARY}) - diff --git a/tools/encrypt_fw/Makefile b/tools/encrypt_fw/Makefile index 924e5feba..b530ccacb 100644 --- a/tools/encrypt_fw/Makefile +++ b/tools/encrypt_fw/Makefile @@ -11,11 +11,13 @@ ENCTOOL ?= encrypt_fw${BIN_EXT} BINARY := $(notdir ${ENCTOOL}) OPENSSL_DIR := /usr +toolchains := host MAKE_HELPERS_DIRECTORY := ../../make_helpers/ include ${MAKE_HELPERS_DIRECTORY}build_macros.mk include ${MAKE_HELPERS_DIRECTORY}build_env.mk include ${MAKE_HELPERS_DIRECTORY}defaults.mk +include ${MAKE_HELPERS_DIRECTORY}toolchain.mk OBJECTS := src/encrypt.o \ src/cmd_opt.o \ diff --git a/tools/fiptool/Makefile b/tools/fiptool/Makefile index fda7c7795..3cb89c683 100644 --- a/tools/fiptool/Makefile +++ b/tools/fiptool/Makefile @@ -1,13 +1,16 @@ # -# Copyright (c) 2014-2023, Arm Limited and Contributors. All rights reserved. +# Copyright (c) 2014-2024, Arm Limited and Contributors. All rights reserved. # # SPDX-License-Identifier: BSD-3-Clause # +toolchains := host + MAKE_HELPERS_DIRECTORY := ../../make_helpers/ include ${MAKE_HELPERS_DIRECTORY}build_macros.mk include ${MAKE_HELPERS_DIRECTORY}build_env.mk include ${MAKE_HELPERS_DIRECTORY}defaults.mk +include ${MAKE_HELPERS_DIRECTORY}toolchain.mk FIPTOOL ?= fiptool${BIN_EXT} PROJECT := $(notdir ${FIPTOOL}) diff --git a/tools/marvell/doimage/Makefile b/tools/marvell/doimage/Makefile index 9f0d89d3e..0766f59ae 100644 --- a/tools/marvell/doimage/Makefile +++ b/tools/marvell/doimage/Makefile @@ -4,6 +4,10 @@ # SPDX-License-Identifier: BSD-3-Clause # https://spdx.org/licenses +toolchains := host + +include ../../../make_helpers/toolchain.mk + PROJECT = doimage OBJECTS = doimage.o diff --git a/tools/nxp/create_pbl/Makefile b/tools/nxp/create_pbl/Makefile index f971a7462..61ba92f23 100644 --- a/tools/nxp/create_pbl/Makefile +++ b/tools/nxp/create_pbl/Makefile @@ -4,9 +4,12 @@ # SPDX-License-Identifier: BSD-3-Clause # +toolchains := host + MAKE_HELPERS_DIRECTORY := ../../../make_helpers/ include ${MAKE_HELPERS_DIRECTORY}build_macros.mk include ${MAKE_HELPERS_DIRECTORY}build_env.mk +include ${MAKE_HELPERS_DIRECTORY}toolchain.mk PROJECT_1 := create_pbl${BIN_EXT} OBJECTS_1 := create_pbl.o diff --git a/tools/renesas/rcar_layout_create/makefile b/tools/renesas/rcar_layout_create/makefile index 01b3d62f4..fefdb1973 100644 --- a/tools/renesas/rcar_layout_create/makefile +++ b/tools/renesas/rcar_layout_create/makefile @@ -4,6 +4,10 @@ # SPDX-License-Identifier: BSD-3-Clause # +toolchains := aarch64 + +include ../../../make_helpers/toolchain.mk + ################################################### # makefile ################################################### diff --git a/tools/renesas/rzg_layout_create/makefile b/tools/renesas/rzg_layout_create/makefile index 92a0557c0..9cab56fb7 100644 --- a/tools/renesas/rzg_layout_create/makefile +++ b/tools/renesas/rzg_layout_create/makefile @@ -4,6 +4,10 @@ # SPDX-License-Identifier: BSD-3-Clause # +toolchains := aarch64 + +include ../../../make_helpers/toolchain.mk + ################################################### # makefile ################################################### diff --git a/tools/sptool/Makefile b/tools/sptool/Makefile index 1fa85fb20..5dbcbadcf 100644 --- a/tools/sptool/Makefile +++ b/tools/sptool/Makefile @@ -1,12 +1,15 @@ # -# Copyright (c) 2018-2020, Arm Limited. All rights reserved. +# Copyright (c) 2018-2024, Arm Limited. All rights reserved. # # SPDX-License-Identifier: BSD-3-Clause # +toolchains := host + MAKE_HELPERS_DIRECTORY := ../../make_helpers/ include ${MAKE_HELPERS_DIRECTORY}build_macros.mk include ${MAKE_HELPERS_DIRECTORY}build_env.mk +include ${MAKE_HELPERS_DIRECTORY}toolchain.mk SPTOOL ?= sptool${BIN_EXT} PROJECT := $(notdir ${SPTOOL}) diff --git a/tools/stm32image/Makefile b/tools/stm32image/Makefile index 9c9b7b5fb..9dfe9cb43 100644 --- a/tools/stm32image/Makefile +++ b/tools/stm32image/Makefile @@ -1,12 +1,15 @@ # -# Copyright (c) 2017-2018, ARM Limited and Contributors. All rights reserved. +# Copyright (c) 2017-2024, Arm Limited and Contributors. All rights reserved. # # SPDX-License-Identifier: BSD-3-Clause # +toolchains := host + MAKE_HELPERS_DIRECTORY := ../../make_helpers/ include ${MAKE_HELPERS_DIRECTORY}build_macros.mk include ${MAKE_HELPERS_DIRECTORY}build_env.mk +include ${MAKE_HELPERS_DIRECTORY}toolchain.mk PROJECT := stm32image${BIN_EXT} OBJECTS := stm32image.o