1# 2# Copyright (c) 2016, ARM Limited and Contributors. All rights reserved. 3# 4# Redistribution and use in source and binary forms, with or without 5# modification, are permitted provided that the following conditions are met: 6# 7# Redistributions of source code must retain the above copyright notice, this 8# list of conditions and the following disclaimer. 9# 10# Redistributions in binary form must reproduce the above copyright notice, 11# this list of conditions and the following disclaimer in the documentation 12# and/or other materials provided with the distribution. 13# 14# Neither the name of ARM nor the names of its contributors may be used 15# to endorse or promote products derived from this software without specific 16# prior written permission. 17# 18# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 19# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 20# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 21# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE 22# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 23# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 24# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 25# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 26# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 27# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 28# POSSIBILITY OF SUCH DAMAGE. 29# 30 31################################################################################ 32# Helpers for finding and referencing platform directories 33################################################################################ 34 35ifndef PLAT_HELPERS_MK 36 PLAT_HELPERS_MK := $(lastword $(MAKEFILE_LIST)) 37 38 ifeq (${PLAT},) 39 $(error "Error: Unknown platform. Please use PLAT=<platform name> to specify the platform") 40 endif 41 42 # PLATFORM_ROOT can be overridden for when building tools directly 43 PLATFORM_ROOT ?= plat/ 44 PLAT_MAKEFILE := platform.mk 45 46 # Generate the platforms list by recursively searching for all directories 47 # under /plat containing a PLAT_MAKEFILE. Append each platform with a `|` 48 # char and strip out the final '|'. 49 ALL_PLATFORM_MK_FILES := $(call rwildcard,${PLATFORM_ROOT},${PLAT_MAKEFILE}) 50 ALL_PLATFORM_DIRS := $(patsubst %/,%,$(dir ${ALL_PLATFORM_MK_FILES})) 51 ALL_PLATFORMS := $(sort $(notdir ${ALL_PLATFORM_DIRS})) 52 53 PLAT_MAKEFILE_FULL := $(filter %/${PLAT}/${PLAT_MAKEFILE},${ALL_PLATFORM_MK_FILES}) 54 PLATFORM_LIST := $(subst ${space},|,${ALL_PLATFORMS}) 55 ifeq ($(PLAT_MAKEFILE_FULL),) 56 $(error "Error: Invalid platform. The following platforms are available: ${PLATFORM_LIST}") 57 endif 58 59 # Record the directory where the platform make file was found. 60 PLAT_DIR := $(dir ${PLAT_MAKEFILE_FULL}) 61 62endif 63