mirror of
https://github.com/ARM-software/arm-trusted-firmware.git
synced 2025-04-16 17:44:19 +00:00
Make:Remove calls to shell from makefiles.
As an initial stage of making Trusted Firmware build environment more portable, we remove most uses of the $(shell ) function and replace them with more portable make function based solutions. Note that the setting of BUILD_STRING still uses $(shell ) since it's not possible to reimplement this as a make function. Avoiding invocation of this on incompatible host platforms will be implemented separately. Change-Id: I768e2f9a265c78814a4adf2edee4cc46cda0f5b8
This commit is contained in:
parent
4c51badfb5
commit
231c14702c
5 changed files with 97 additions and 34 deletions
33
Makefile
33
Makefile
|
@ -37,7 +37,8 @@ VERSION_MINOR := 2
|
|||
# Default goal is build all images
|
||||
.DEFAULT_GOAL := all
|
||||
|
||||
include make_helpers/build_macros.mk
|
||||
MAKE_HELPERS_DIRECTORY := make_helpers/
|
||||
include ${MAKE_HELPERS_DIRECTORY}build_macros.mk
|
||||
|
||||
################################################################################
|
||||
# Default values for build configurations
|
||||
|
@ -111,9 +112,10 @@ CHECK_IGNORE := --ignore COMPLEX_MACRO \
|
|||
CHECKPATCH_ARGS := --no-tree --no-signoff ${CHECK_IGNORE}
|
||||
CHECKCODE_ARGS := --no-patch --no-tree --no-signoff ${CHECK_IGNORE}
|
||||
# Do not check the coding style on C library files
|
||||
CHECK_PATHS := $(shell ls -I include -I lib) \
|
||||
$(addprefix include/,$(shell ls -I stdlib include)) \
|
||||
$(addprefix lib/,$(shell ls -I stdlib lib))
|
||||
INCLUDE_DIRS_TO_CHECK := $(sort $(filter-out include/stdlib, $(wildcard include/*)))
|
||||
LIB_DIRS_TO_CHECK := $(sort $(filter-out lib/stdlib, $(wildcard lib/*)))
|
||||
ROOT_DIRS_TO_CHECK := $(sort $(filter-out lib include, $(wildcard *))))
|
||||
CHECK_PATHS := ${ROOT_DIRS_TO_CHECK} ${INCLUDE_DIRS_TO_CHECK} ${LIB_DIRS_TO_CHECK}
|
||||
|
||||
|
||||
################################################################################
|
||||
|
@ -235,17 +237,12 @@ INCLUDES += -Iinclude/bl1 \
|
|||
# Generic definitions
|
||||
################################################################################
|
||||
|
||||
include ${MAKE_HELPERS_DIRECTORY}plat_helpers.mk
|
||||
|
||||
BUILD_BASE := ./build
|
||||
BUILD_PLAT := ${BUILD_BASE}/${PLAT}/${BUILD_TYPE}
|
||||
|
||||
PLAT_MAKEFILE := platform.mk
|
||||
# Generate the platforms list by recursively searching for all directories
|
||||
# under /plat containing a PLAT_MAKEFILE. Append each platform with a `|`
|
||||
# char and strip out the final '|'.
|
||||
PLATFORMS := $(shell find plat/ -name '${PLAT_MAKEFILE}' -print0 | \
|
||||
sed -r 's%[^\x00]*\/([^/]*)\/${PLAT_MAKEFILE}\x00%\1|%g' | \
|
||||
sed -r 's/\|$$//')
|
||||
SPDS := $(shell ls -I none services/spd)
|
||||
SPDS := $(sort $(filter-out none, $(patsubst services/spd/%,%,$(wildcard services/spd/*))))
|
||||
|
||||
# Platforms providing their own TBB makefile may override this value
|
||||
INCLUDE_TBBR_MK := 1
|
||||
|
@ -261,7 +258,7 @@ ifdef EL3_PAYLOAD_BASE
|
|||
$(warning "The SPD and its BL32 companion will be present but ignored.")
|
||||
endif
|
||||
# We expect to locate an spd.mk under the specified SPD directory
|
||||
SPD_MAKE := $(shell m="services/spd/${SPD}/${SPD}.mk"; [ -f "$$m" ] && echo "$$m")
|
||||
SPD_MAKE := $(wildcard services/spd/${SPD}/${SPD}.mk)
|
||||
|
||||
ifeq (${SPD_MAKE},)
|
||||
$(error Error: No services/spd/${SPD}/${SPD}.mk located)
|
||||
|
@ -286,14 +283,6 @@ endif
|
|||
# makefile may use all previous definitions in this file)
|
||||
################################################################################
|
||||
|
||||
ifeq (${PLAT},)
|
||||
$(error "Error: Unknown platform. Please use PLAT=<platform name> to specify the platform")
|
||||
endif
|
||||
PLAT_MAKEFILE_FULL := $(shell find plat/ -wholename '*/${PLAT}/${PLAT_MAKEFILE}')
|
||||
ifeq ($(PLAT_MAKEFILE_FULL),)
|
||||
$(error "Error: Invalid platform. The following platforms are available: ${PLATFORMS}")
|
||||
endif
|
||||
|
||||
include ${PLAT_MAKEFILE_FULL}
|
||||
|
||||
# If the platform has not defined ENABLE_PLAT_COMPAT, then enable it by default
|
||||
|
@ -622,7 +611,7 @@ cscope:
|
|||
${Q}cscope -b -q -k
|
||||
|
||||
help:
|
||||
@echo "usage: ${MAKE} PLAT=<${PLATFORMS}> [OPTIONS] [TARGET]"
|
||||
@echo "usage: ${MAKE} PLAT=<${PLATFORM_LIST}> [OPTIONS] [TARGET]"
|
||||
@echo ""
|
||||
@echo "PLAT is used to specify which platform you wish to build."
|
||||
@echo "If no platform is specified, PLAT defaults to: ${DEFAULT_PLAT}"
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
#
|
||||
# Copyright (c) 2013-2014, ARM Limited and Contributors. All rights reserved.
|
||||
# Copyright (c) 2013-2016, ARM Limited and Contributors. All rights reserved.
|
||||
#
|
||||
# Redistribution and use in source and binary forms, with or without
|
||||
# modification, are permitted provided that the following conditions are met:
|
||||
|
@ -52,8 +52,8 @@ $(eval $(call add_define,TSP_INIT_ASYNC))
|
|||
# Include the platform-specific TSP Makefile
|
||||
# If no platform-specific TSP Makefile exists, it means TSP is not supported
|
||||
# on this platform.
|
||||
TSP_PLAT_MAKEFILE := $(shell find plat/ -wholename '*/${PLAT}/tsp/tsp-${PLAT}.mk')
|
||||
ifeq (,$(wildcard ${TSP_PLAT_MAKEFILE}))
|
||||
TSP_PLAT_MAKEFILE := $(wildcard ${PLAT_DIR}/tsp/tsp-${PLAT}.mk)
|
||||
ifeq (,${TSP_PLAT_MAKEFILE})
|
||||
$(error TSP is not supported on platform ${PLAT})
|
||||
else
|
||||
include ${TSP_PLAT_MAKEFILE}
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
#
|
||||
# Copyright (c) 2015, ARM Limited and Contributors. All rights reserved.
|
||||
# Copyright (c) 2015-2016, ARM Limited and Contributors. All rights reserved.
|
||||
#
|
||||
# Redistribution and use in source and binary forms, with or without
|
||||
# modification, are permitted provided that the following conditions are met:
|
||||
|
@ -28,6 +28,17 @@
|
|||
# POSSIBILITY OF SUCH DAMAGE.
|
||||
#
|
||||
|
||||
# Some utility macros for manipulating awkward (whitespace) characters.
|
||||
blank :=
|
||||
space :=${blank} ${blank}
|
||||
|
||||
# A user defined function to recursively search for a filename below a directory
|
||||
# $1 is the directory root of the recursive search (blank for current directory).
|
||||
# $2 is the file name to search for.
|
||||
define rwildcard
|
||||
$(strip $(foreach d,$(wildcard ${1}*),$(call rwildcard,${d}/,${2}) $(filter $(subst *,%,%${2}),${d})))
|
||||
endef
|
||||
|
||||
# This table is used in converting lower case to upper case.
|
||||
uppercase_table:=a,A b,B c,C d,D e,E f,F g,G h,H i,I j,J k,K l,L m,M n,N o,O p,P q,Q r,R s,S t,T u,U v,V w,W x,X y,Y z,Z
|
||||
|
||||
|
|
62
make_helpers/plat_helpers.mk
Normal file
62
make_helpers/plat_helpers.mk
Normal file
|
@ -0,0 +1,62 @@
|
|||
#
|
||||
# Copyright (c) 2016, ARM Limited and Contributors. All rights reserved.
|
||||
#
|
||||
# Redistribution and use in source and binary forms, with or without
|
||||
# modification, are permitted provided that the following conditions are met:
|
||||
#
|
||||
# Redistributions of source code must retain the above copyright notice, this
|
||||
# list of conditions and the following disclaimer.
|
||||
#
|
||||
# Redistributions in binary form must reproduce the above copyright notice,
|
||||
# this list of conditions and the following disclaimer in the documentation
|
||||
# and/or other materials provided with the distribution.
|
||||
#
|
||||
# Neither the name of ARM nor the names of its contributors may be used
|
||||
# to endorse or promote products derived from this software without specific
|
||||
# prior written permission.
|
||||
#
|
||||
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||
# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
|
||||
# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||
# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
||||
# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||
# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
||||
# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||
# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||
# POSSIBILITY OF SUCH DAMAGE.
|
||||
#
|
||||
|
||||
################################################################################
|
||||
# Helpers for finding and referencing platform directories
|
||||
################################################################################
|
||||
|
||||
ifndef PLAT_HELPERS_MK
|
||||
PLAT_HELPERS_MK := $(lastword $(MAKEFILE_LIST))
|
||||
|
||||
ifeq (${PLAT},)
|
||||
$(error "Error: Unknown platform. Please use PLAT=<platform name> to specify the platform")
|
||||
endif
|
||||
|
||||
# PLATFORM_ROOT can be overridden for when building tools directly
|
||||
PLATFORM_ROOT ?= plat/
|
||||
PLAT_MAKEFILE := platform.mk
|
||||
|
||||
# Generate the platforms list by recursively searching for all directories
|
||||
# under /plat containing a PLAT_MAKEFILE. Append each platform with a `|`
|
||||
# char and strip out the final '|'.
|
||||
ALL_PLATFORM_MK_FILES := $(call rwildcard,${PLATFORM_ROOT},${PLAT_MAKEFILE})
|
||||
ALL_PLATFORM_DIRS := $(patsubst %/,%,$(dir ${ALL_PLATFORM_MK_FILES}))
|
||||
ALL_PLATFORMS := $(sort $(notdir ${ALL_PLATFORM_DIRS}))
|
||||
|
||||
PLAT_MAKEFILE_FULL := $(filter %/${PLAT}/${PLAT_MAKEFILE},${ALL_PLATFORM_MK_FILES})
|
||||
PLATFORM_LIST := $(subst ${space},|,${ALL_PLATFORMS})
|
||||
ifeq ($(PLAT_MAKEFILE_FULL),)
|
||||
$(error "Error: Invalid platform. The following platforms are available: ${PLATFORM_LIST}")
|
||||
endif
|
||||
|
||||
# Record the directory where the platform make file was found.
|
||||
PLAT_DIR := $(dir ${PLAT_MAKEFILE_FULL})
|
||||
|
||||
endif
|
|
@ -47,15 +47,16 @@ OBJECTS := src/cert.o \
|
|||
|
||||
CFLAGS := -Wall -std=c99
|
||||
|
||||
# Check the platform
|
||||
ifeq (${PLAT},none)
|
||||
$(error "Error: Unknown platform. Please use PLAT=<platform name> to specify the platform")
|
||||
endif
|
||||
PLAT_MAKEFILE := platform.mk
|
||||
PLAT_INCLUDE := $(shell find ../../plat/ -wholename '*/${PLAT}/${PLAT_MAKEFILE}' | \
|
||||
sed 's/${PLAT_MAKEFILE}/include/')
|
||||
MAKE_HELPERS_DIRECTORY := ../../make_helpers/
|
||||
include ${MAKE_HELPERS_DIRECTORY}build_macros.mk
|
||||
|
||||
PLATFORM_ROOT := ../../plat/
|
||||
include ${MAKE_HELPERS_DIRECTORY}plat_helpers.mk
|
||||
|
||||
PLAT_INCLUDE := $(wildcard ${PLAT_DIR}include)
|
||||
|
||||
ifeq ($(PLAT_INCLUDE),)
|
||||
$(error "Error: Invalid platform '${PLAT}'")
|
||||
$(error "Error: Invalid platform '${PLAT}' has no include directory.")
|
||||
endif
|
||||
|
||||
ifeq (${DEBUG},1)
|
||||
|
|
Loading…
Add table
Reference in a new issue