xref: /aosp_15_r20/external/arm-trusted-firmware/make_helpers/plat_helpers.mk (revision 54fd6939e177f8ff529b10183254802c76df6d08)
1*54fd6939SJiyong Park#
2*54fd6939SJiyong Park# Copyright (c) 2016, ARM Limited and Contributors. All rights reserved.
3*54fd6939SJiyong Park#
4*54fd6939SJiyong Park# SPDX-License-Identifier: BSD-3-Clause
5*54fd6939SJiyong Park#
6*54fd6939SJiyong Park
7*54fd6939SJiyong Park################################################################################
8*54fd6939SJiyong Park# Helpers for finding and referencing platform directories
9*54fd6939SJiyong Park################################################################################
10*54fd6939SJiyong Park
11*54fd6939SJiyong Parkifndef PLAT_HELPERS_MK
12*54fd6939SJiyong Park    PLAT_HELPERS_MK := $(lastword $(MAKEFILE_LIST))
13*54fd6939SJiyong Park
14*54fd6939SJiyong Park    ifeq (${PLAT},)
15*54fd6939SJiyong Park        $(error "Error: Unknown platform. Please use PLAT=<platform name> to specify the platform")
16*54fd6939SJiyong Park    endif
17*54fd6939SJiyong Park
18*54fd6939SJiyong Park    # TF_PLATFORM_ROOT can be overridden for when building tools directly
19*54fd6939SJiyong Park    TF_PLATFORM_ROOT               ?= plat/
20*54fd6939SJiyong Park    PLAT_MAKEFILE               := platform.mk
21*54fd6939SJiyong Park
22*54fd6939SJiyong Park    # Generate the platforms list by recursively searching for all directories
23*54fd6939SJiyong Park    # under /plat containing a PLAT_MAKEFILE. Append each platform with a `|`
24*54fd6939SJiyong Park    # char and strip out the final '|'.
25*54fd6939SJiyong Park    ALL_PLATFORM_MK_FILES       := $(call rwildcard,${TF_PLATFORM_ROOT},${PLAT_MAKEFILE})
26*54fd6939SJiyong Park    ALL_PLATFORM_DIRS           := $(patsubst %/,%,$(dir ${ALL_PLATFORM_MK_FILES}))
27*54fd6939SJiyong Park    ALL_PLATFORMS               := $(sort $(notdir ${ALL_PLATFORM_DIRS}))
28*54fd6939SJiyong Park
29*54fd6939SJiyong Park    PLAT_MAKEFILE_FULL          := $(filter %/${PLAT}/${PLAT_MAKEFILE},${ALL_PLATFORM_MK_FILES})
30*54fd6939SJiyong Park    PLATFORM_LIST               := $(subst ${space},|,${ALL_PLATFORMS})
31*54fd6939SJiyong Park    ifeq ($(PLAT_MAKEFILE_FULL),)
32*54fd6939SJiyong Park        $(error "Error: Invalid platform. The following platforms are available: ${PLATFORM_LIST}")
33*54fd6939SJiyong Park    endif
34*54fd6939SJiyong Park
35*54fd6939SJiyong Park    # Record the directory where the platform make file was found.
36*54fd6939SJiyong Park    PLAT_DIR                    := $(dir ${PLAT_MAKEFILE_FULL})
37*54fd6939SJiyong Park
38*54fd6939SJiyong Parkendif
39