From f1477d4ad879a1244b782b27c1c653ca9f35cc7a Mon Sep 17 00:00:00 2001 From: Evan Lloyd Date: Wed, 2 Dec 2015 18:33:55 +0000 Subject: [PATCH] Make:Make shell commands more portable Macros are inserted to replace direct invocations of commands that are problematic on some build environments. (e.g. Some environments expect \ in paths instead of /.) The changes take into account mismatched command mappings across environments. The new helper file unix.mk retains existing makefile behaviour on unix like build environments by providing the following macro definitions: SHELL_COPY cp -f SHELL_COPY_TREE cp -rf SHELL_DELETE rm -f SHELL_DELETE_ALL rm -rf MAKE_PREREQ_DIR mkdir -p (As make target) SHELL_REMOVE_DIR rm -rf Change-Id: I1b5ca5e1208e78230b15284c4af00c1c006cffcb --- Makefile | 19 ++++----- make_helpers/unix.mk | 81 ++++++++++++++++++++++++++++++++++++++ tools/cert_create/Makefile | 7 ++-- tools/fip_create/Makefile | 15 ++++--- 4 files changed, 104 insertions(+), 18 deletions(-) create mode 100644 make_helpers/unix.mk diff --git a/Makefile b/Makefile index 26cfd5ed7..8502e2ed0 100644 --- a/Makefile +++ b/Makefile @@ -39,6 +39,7 @@ VERSION_MINOR := 2 MAKE_HELPERS_DIRECTORY := make_helpers/ include ${MAKE_HELPERS_DIRECTORY}build_macros.mk +include ${MAKE_HELPERS_DIRECTORY}unix.mk ################################################################################ # Default values for build configurations @@ -535,14 +536,14 @@ endif clean: @echo " CLEAN" - ${Q}rm -rf ${BUILD_PLAT} + $(call SHELL_REMOVE_DIR,${BUILD_PLAT}) ${Q}${MAKE} --no-print-directory -C ${FIPTOOLPATH} clean ${Q}${MAKE} PLAT=${PLAT} --no-print-directory -C ${CRTTOOLPATH} clean realclean distclean: @echo " REALCLEAN" - ${Q}rm -rf ${BUILD_BASE} - ${Q}rm -f ${CURDIR}/cscope.* + $(call SHELL_REMOVE_DIR,${BUILD_BASE}) + $(call SHELL_DELETE_ALL, ${CURDIR}/cscope.*) ${Q}${MAKE} --no-print-directory -C ${FIPTOOLPATH} clean ${Q}${MAKE} PLAT=${PLAT} --no-print-directory -C ${CRTTOOLPATH} clean @@ -563,24 +564,24 @@ certtool: ${CRTTOOL} .PHONY: ${CRTTOOL} ${CRTTOOL}: ${Q}${MAKE} PLAT=${PLAT} --no-print-directory -C ${CRTTOOLPATH} - @echo + @${ECHO_BLANK_LINE} @echo "Built $@ successfully" - @echo + @${ECHO_BLANK_LINE} ifneq (${GENERATE_COT},0) certificates: ${CRT_DEPS} ${CRTTOOL} ${Q}${CRTTOOL} ${CRT_ARGS} - @echo + @${ECHO_BLANK_LINE} @echo "Built $@ successfully" @echo "Certificates can be found in ${BUILD_PLAT}" - @echo + @${ECHO_BLANK_LINE} endif ${BUILD_PLAT}/${FIP_NAME}: ${FIP_DEPS} ${FIPTOOL} ${Q}${FIPTOOL} --dump ${FIP_ARGS} $@ - @echo + @${ECHO_BLANK_LINE} @echo "Built $@ successfully" - @echo + @${ECHO_BLANK_LINE} ifneq (${GENERATE_COT},0) fwu_certificates: ${FWU_CRT_DEPS} ${CRTTOOL} diff --git a/make_helpers/unix.mk b/make_helpers/unix.mk new file mode 100644 index 000000000..ab604357c --- /dev/null +++ b/make_helpers/unix.mk @@ -0,0 +1,81 @@ +# +# 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. +# +# + +# Trusted Firmware shell command definitions for a Unix style environment. + +ifndef UNIX_MK + UNIX_MK := $(lastword $(MAKEFILE_LIST)) + + ECHO_BLANK_LINE := echo + + DIR_DELIM := / + PATH_SEP := : + + # These defines provide Unix style equivalents of the shell commands + # required by the Trusted Firmware build environment. + + # ${1} is the file to be copied. + # ${2} is the destination file name. + define SHELL_COPY + ${Q}cp -f "${1}" "${2}" + endef + + # ${1} is the directory to be copied. + # ${2} is the destination directory path. + define SHELL_COPY_TREE + ${Q}cp -rf "${1}" "${2}" + endef + + # ${1} is the file to be deleted. + define SHELL_DELETE + -${Q}rm -f "${1}" + endef + + # ${1} is a space delimited list of files to be deleted. + # Note that we do not quote ${1}, as multiple parameters may be passed. + define SHELL_DELETE_ALL + -${Q}rm -rf ${1} + endef + + # ${1} is the directory to be generated. + # ${2} is optional, and allows a prerequisite to be specified. + define MAKE_PREREQ_DIR + +${1} : ${2} + ${Q}mkdir -p "${1}" + + endef + + define SHELL_REMOVE_DIR + -${Q}rm -rf "${1}" + endef + +endif diff --git a/tools/cert_create/Makefile b/tools/cert_create/Makefile index accd5fcd4..b19d618e2 100644 --- a/tools/cert_create/Makefile +++ b/tools/cert_create/Makefile @@ -49,6 +49,7 @@ CFLAGS := -Wall -std=c99 MAKE_HELPERS_DIRECTORY := ../../make_helpers/ include ${MAKE_HELPERS_DIRECTORY}build_macros.mk +include ${MAKE_HELPERS_DIRECTORY}unix.mk PLATFORM_ROOT := ../../plat/ include ${MAKE_HELPERS_DIRECTORY}plat_helpers.mk @@ -77,7 +78,6 @@ LIB_DIR := -L ${OPENSSL_DIR}/lib LIB := -lssl -lcrypto CC := gcc -RM := rm -rf .PHONY: all clean realclean @@ -95,7 +95,8 @@ ${BINARY}: ${OBJECTS} Makefile ${Q}${CC} -c ${CFLAGS} ${INC_DIR} $< -o $@ clean: - ${Q}${RM} -f src/build_msg.o ${OBJECTS} + $(call SHELL_DELETE_ALL, src/build_msg.o ${OBJECTS}) realclean: clean - ${Q}${RM} -f ${BINARY} + $(call SHELL_DELETE, ${BINARY}) + diff --git a/tools/fip_create/Makefile b/tools/fip_create/Makefile index c72bae535..9f0bf7ac2 100644 --- a/tools/fip_create/Makefile +++ b/tools/fip_create/Makefile @@ -1,5 +1,5 @@ # -# Copyright (c) 2014, ARM Limited and Contributors. All rights reserved. +# Copyright (c) 2014-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,10 @@ # POSSIBILITY OF SUCH DAMAGE. # +MAKE_HELPERS_DIRECTORY := ../../make_helpers/ +include ${MAKE_HELPERS_DIRECTORY}build_macros.mk +include ${MAKE_HELPERS_DIRECTORY}unix.mk + PROJECT = fip_create OBJECTS = fip_create.o @@ -43,7 +47,6 @@ endif INCLUDE_PATHS = -I. CC := gcc -RM := rm -rf .PHONY: all clean @@ -52,14 +55,14 @@ all: ${PROJECT} ${PROJECT}: ${OBJECTS} Makefile @echo " LD $@" ${Q}${CC} ${OBJECTS} -o $@ - @echo + @${ECHO_BLANK_LINE} @echo "Built $@ successfully" - @echo + @${ECHO_BLANK_LINE} %.o: %.c %.h Makefile @echo " CC $<" ${Q}${CC} -c ${CFLAGS} ${INCLUDE_PATHS} $< -o $@ clean: - ${Q}${RM} ${PROJECT} - ${Q}${RM} ${OBJECTS} + $(call SHELL_DELETE_ALL, ${PROJECT} ${OBJECTS}) +