blob: 9a59faed4ca0828b5a2c14f1c2236b0e87d5cafc [file] [log] [blame]
Evan Lloydf2697142015-12-02 18:17:37 +00001#
Yann Gautier05f92a32025-01-17 11:02:50 +01002# Copyright (c) 2016-2025, ARM Limited and Contributors. All rights reserved.
Evan Lloydf2697142015-12-02 18:17:37 +00003#
dp-armfa3cf0b2017-05-03 09:38:09 +01004# SPDX-License-Identifier: BSD-3-Clause
Evan Lloydf2697142015-12-02 18:17:37 +00005#
6
7################################################################################
8# Helpers for finding and referencing platform directories
9################################################################################
10
11ifndef PLAT_HELPERS_MK
12 PLAT_HELPERS_MK := $(lastword $(MAKEFILE_LIST))
13
14 ifeq (${PLAT},)
15 $(error "Error: Unknown platform. Please use PLAT=<platform name> to specify the platform")
16 endif
17
Heyi Guo335433a2018-03-01 18:57:58 +080018 # TF_PLATFORM_ROOT can be overridden for when building tools directly
19 TF_PLATFORM_ROOT ?= plat/
Evan Lloydf2697142015-12-02 18:17:37 +000020 PLAT_MAKEFILE := platform.mk
Andrey Skvortsov89c3a142024-02-18 11:43:12 +030021 PLAT_DEFAULTS_MAKEFILE := platform_defaults.mk
Evan Lloydf2697142015-12-02 18:17:37 +000022
23 # Generate the platforms list by recursively searching for all directories
24 # under /plat containing a PLAT_MAKEFILE. Append each platform with a `|`
25 # char and strip out the final '|'.
Heyi Guo335433a2018-03-01 18:57:58 +080026 ALL_PLATFORM_MK_FILES := $(call rwildcard,${TF_PLATFORM_ROOT},${PLAT_MAKEFILE})
Andrey Skvortsov89c3a142024-02-18 11:43:12 +030027 ALL_PLATFORM_MK_DEF_FILES := $(call rwildcard,${TF_PLATFORM_ROOT},${PLAT_DEFAULTS_MAKEFILE})
Evan Lloydf2697142015-12-02 18:17:37 +000028 ALL_PLATFORM_DIRS := $(patsubst %/,%,$(dir ${ALL_PLATFORM_MK_FILES}))
29 ALL_PLATFORMS := $(sort $(notdir ${ALL_PLATFORM_DIRS}))
30
31 PLAT_MAKEFILE_FULL := $(filter %/${PLAT}/${PLAT_MAKEFILE},${ALL_PLATFORM_MK_FILES})
Andrey Skvortsov89c3a142024-02-18 11:43:12 +030032 PLAT_DEFAULTS_MAKEFILE_FULL := $(filter %/${PLAT}/${PLAT_DEFAULTS_MAKEFILE},${ALL_PLATFORM_MK_DEF_FILES})
Evan Lloydf2697142015-12-02 18:17:37 +000033 PLATFORM_LIST := $(subst ${space},|,${ALL_PLATFORMS})
34 ifeq ($(PLAT_MAKEFILE_FULL),)
Yann Gautier05f92a32025-01-17 11:02:50 +010035 $(error "Error: Invalid platform (${PLAT}). The following platforms are available: ${PLATFORM_LIST}")
Evan Lloydf2697142015-12-02 18:17:37 +000036 endif
37
38 # Record the directory where the platform make file was found.
39 PLAT_DIR := $(dir ${PLAT_MAKEFILE_FULL})
40
41endif