Skip to content
GitLab
Menu
Projects
Groups
Snippets
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Sign in / Register
Toggle navigation
Menu
Open sidebar
adam.huang
Arm Trusted Firmware
Commits
368bb87b
Commit
368bb87b
authored
Oct 27, 2015
by
danh-arm
Browse files
Merge pull request #417 from jcastillo-arm/jc/makefile_2
Makefile rework and bug fix #2
parents
8d91ecfe
88154678
Changes
5
Expand all
Show whitespace changes
Inline
Side-by-side
Makefile
View file @
368bb87b
This diff is collapsed.
Click to expand it.
docs/porting-guide.md
View file @
368bb87b
...
...
@@ -1567,11 +1567,6 @@ inclusion or exclusion of certain BL stages from the FIP image. These flags
need to be defined in the platform makefile which will get included by the
build system.
*
**NEED_BL30**
This flag if defined by the platform mandates that a BL3-0 binary should
be included in the FIP image. The path to the BL3-0 binary can be specified
by the
`BL30`
build option (see build options in the [User Guide]).
*
**NEED_BL33**
By default, this flag is defined
`yes`
by the build system and
`BL33`
build option should be supplied as a build option. The platform has the option
...
...
make_helpers/build_macros.mk
0 → 100644
View file @
368bb87b
#
# Copyright (c) 2015, 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.
#
# Convenience function for adding build definitions
# $(eval $(call add_define,FOO)) will have:
# -DFOO if $(FOO) is empty; -DFOO=$(FOO) otherwise
define
add_define
DEFINES
+=
-D
$(1)
$(
if
$(
value
$(1)
)
,
=
$(
value
$(1)
)
,
)
endef
# Convenience function for verifying option has a boolean value
# $(eval $(call assert_boolean,FOO)) will assert FOO is 0 or 1
define
assert_boolean
$(and
$(patsubst
0,,$(value
$(1))),$(patsubst
1,,$(value
$(1))),$(error
$(1)
must
be
boolean))
endef
# IMG_LINKERFILE defines the linker script corresponding to a BL stage
# $(1) = BL stage (2, 30, 31, 32, 33)
define
IMG_LINKERFILE
${BUILD_DIR}/bl$(1).ld
endef
# IMG_MAPFILE defines the output file describing the memory map corresponding
# to a BL stage
# $(1) = BL stage (2, 30, 31, 32, 33)
define
IMG_MAPFILE
${BUILD_DIR}/bl$(1).map
endef
# IMG_ELF defines the elf file corresponding to a BL stage
# $(1) = BL stage (2, 30, 31, 32, 33)
define
IMG_ELF
${BUILD_DIR}/bl$(1).elf
endef
# IMG_DUMP defines the symbols dump file corresponding to a BL stage
# $(1) = BL stage (2, 30, 31, 32, 33)
define
IMG_DUMP
${BUILD_DIR}/bl$(1).dump
endef
# IMG_BIN defines the default image file corresponding to a BL stage
# $(1) = BL stage (2, 30, 31, 32, 33)
define
IMG_BIN
${BUILD_PLAT}/bl$(1).bin
endef
# FIP_ADD_PAYLOAD appends the command line arguments required by the FIP tool
# to package a new payload. Optionally, it adds the dependency on this payload
# $(1) = payload filename (i.e. bl31.bin)
# $(2) = command line option for the specified payload (i.e. --bl31)
# $(3) = fip target dependency (optional) (i.e. bl31)
define
FIP_ADD_PAYLOAD
$(eval
FIP_ARGS
+=
$(2)
$(1)
)
$(eval
$(if
$(3),
FIP_DEPS
+=
$(3)
))
endef
# CERT_ADD_CMD_OPT adds a new command line option to the cert_create invokation
# $(1) = parameter filename
# $(2) = cert_create command line option for the specified parameter
# $(3) = input parameter (false if empty)
define
CERT_ADD_CMD_OPT
$(eval
$(if
$(3),
CRT_DEPS
+=
$(1)
))
$(eval
CRT_ARGS
+=
$(2)
$(1)
)
endef
# FIP_ADD_IMG allows the platform to specify an image to be packed in the FIP
# using a build option. It also adds a dependency on the image file, aborting
# the build if the file does not exist.
# $(1) = build option to specify the image filename (BL30, BL33, etc)
# $(2) = command line option for the fip_create tool (bl30, bl33, etc)
# Example:
# $(eval $(call FIP_ADD_IMG,BL33,--bl33))
define
FIP_ADD_IMG
CRT_DEPS
+=
check_
$(1)
FIP_DEPS
+=
check_
$(1)
$(call
FIP_ADD_PAYLOAD,$(value
$(1)),$(2))
check_$(1)
:
$
$(
if
$(
value
$(1)
)
,,
$
$(
error
"Platform '
${PLAT}
' requires
$(1)
. Please set
$(1)
to point to the right file"
))
endef
################################################################################
# Auxiliary macros to build TF images from sources
################################################################################
# If no goal is specified in the command line, .DEFAULT_GOAL is used.
# .DEFAULT_GOAL is defined in the main Makefile before including this file.
ifeq
($(MAKECMDGOALS),)
MAKECMDGOALS
:=
$
(
.DEFAULT_GOAL
)
endif
define
match_goals
$(strip
$(foreach
goal,$(1),$(filter
$(goal),$(MAKECMDGOALS))))
endef
# List of rules that involve building things
BUILD_TARGETS
:=
all bl1 bl2 bl31 bl32 certificates fip
# Does the list of goals specified on the command line include a build target?
ifneq
($(call match_goals,${BUILD_TARGETS}),)
IS_ANYTHING_TO_BUILD
:=
1
endif
# MAKE_C builds a C source file and generates the dependency file
# $(1) = output directory
# $(2) = source file (%.c)
# $(3) = BL stage (2, 30, 31, 32, 33)
define
MAKE_C
$(eval OBJ
:
= $(1)/$(patsubst %.c
,
%.o
,
$(notdir $(2))))
$(eval PREREQUISITES
:
= $(patsubst %.o
,
%.d
,
$(OBJ)))
$(OBJ)
:
$(2)
@
echo
" CC
$$
<"
$
$(Q)
$
$(CC)
$
$(CFLAGS)
-DIMAGE_BL
$(3)
-c
$$
<
-o
$$
@
$(PREREQUISITES)
:
$(2)
@
echo
" DEPS
$$
@"
@
mkdir
-p
$(1)
$
$(Q)
$
$(CC)
$
$(CFLAGS)
-M
-MT
$(OBJ)
-MF
$$
@
$$
<
ifdef
IS_ANYTHING_TO_BUILD
-include
$(PREREQUISITES)
endif
endef
# MAKE_S builds an assembly source file and generates the dependency file
# $(1) = output directory
# $(2) = assembly file (%.S)
# $(3) = BL stage (2, 30, 31, 32, 33)
define
MAKE_S
$(eval OBJ
:
= $(1)/$(patsubst %.S
,
%.o
,
$(notdir $(2))))
$(eval PREREQUISITES
:
= $(patsubst %.o
,
%.d
,
$(OBJ)))
$(OBJ)
:
$(2)
@
echo
" AS
$$
<"
$
$(Q)
$
$(AS)
$
$(ASFLAGS)
-DIMAGE_BL
$(3)
-c
$$
<
-o
$$
@
$(PREREQUISITES)
:
$(2)
@
echo
" DEPS
$$
@"
@
mkdir
-p
$(1)
$
$(Q)
$
$(AS)
$
$(ASFLAGS)
-M
-MT
$(OBJ)
-MF
$$
@
$$
<
ifdef
IS_ANYTHING_TO_BUILD
-include
$(PREREQUISITES)
endif
endef
# MAKE_LD generate the linker script using the C preprocessor
# $(1) = output linker script
# $(2) = input template
define
MAKE_LD
$(eval PREREQUISITES
:
= $(1).d)
$(1)
:
$(2)
@
echo
" PP
$$
<"
$
$(Q)
$
$(AS)
$
$(ASFLAGS)
-P
-E
-D__LINKER__
-o
$$
@
$$
<
$(PREREQUISITES)
:
$(2)
@
echo
" DEPS
$$
@"
@
mkdir
-p
$
$(
dir
$$
@
)
$
$(Q)
$
$(AS)
$
$(ASFLAGS)
-M
-MT
$(1)
-MF
$$
@
$$
<
ifdef
IS_ANYTHING_TO_BUILD
-include
$(PREREQUISITES)
endif
endef
# MAKE_OBJS builds both C and assembly source files
# $(1) = output directory
# $(2) = list of source files (both C and assembly)
# $(3) = BL stage (2, 30, 31, 32, 33)
define
MAKE_OBJS
$(eval C_OBJS
:
= $(filter %.c
,
$(2)))
$(eval REMAIN
:
= $(filter-out %.c
,
$(2)))
$(eval
$(foreach
obj,$(C_OBJS),$(call
MAKE_C,$(1),$(obj),$(3))))
$(eval S_OBJS
:
= $(filter %.S
,
$(REMAIN)))
$(eval REMAIN
:
= $(filter-out %.S
,
$(REMAIN)))
$(eval
$(foreach
obj,$(S_OBJS),$(call
MAKE_S,$(1),$(obj),$(3))))
$(and $(REMAIN),$(error Unexpected source files present
:
$(REMAIN)))
endef
# NOTE: The line continuation '\' is required in the next define otherwise we
# end up with a line-feed characer at the end of the last c filename.
# Also bare this issue in mind if extending the list of supported filetypes.
define
SOURCES_TO_OBJS
$(notdir
$(patsubst
%.c,%.o,$(filter
%.c,$(1))))
\
$(notdir
$(patsubst
%.S,%.o,$(filter
%.S,$(1))))
endef
# MAKE_TOOL_ARGS macro defines the command line arguments for the FIP tool for
# each BL image. Arguments:
# $(1) = BL stage (2, 30, 31, 32, 33)
# $(2) = Binary file
# $(3) = In FIP (false if empty)
define
MAKE_TOOL_ARGS
$(if
$(3),$(eval
$(call
FIP_ADD_PAYLOAD,$(2),--bl$(1),bl$(1))))
endef
# MAKE_BL macro defines the targets and options to build each BL image.
# Arguments:
# $(1) = BL stage (2, 30, 31, 32, 33)
# $(2) = In FIP (false if empty)
define
MAKE_BL
$(eval BUILD_DIR
:
= ${BUILD_PLAT}/bl$(1))
$(eval SOURCES
:
= $(BL$(1)_SOURCES) $(BL_COMMON_SOURCES) $(PLAT_BL_COMMON_SOURCES))
$(eval OBJS
:
= $(addprefix $(BUILD_DIR)/
,
$(call SOURCES_TO_OBJS
,
$(SOURCES))))
$(eval LINKERFILE
:
= $(call IMG_LINKERFILE
,
$(1)))
$(eval MAPFILE
:
= $(call IMG_MAPFILE
,
$(1)))
$(eval ELF
:
= $(call IMG_ELF
,
$(1)))
$(eval DUMP
:
= $(call IMG_DUMP
,
$(1)))
$(eval BIN
:
= $(call IMG_BIN
,
$(1)))
$(eval
$(call
MAKE_OBJS,$(BUILD_DIR),$(SOURCES),$(1)))
$(eval
$(call
MAKE_LD,$(LINKERFILE),$(BL$(1)_LINKERFILE)))
$(BUILD_DIR)
:
$
$(Q)
mkdir
-p
"
$$
@"
$(ELF)
:
$(OBJS) $(LINKERFILE)
@
echo
" LD
$$
@"
@
echo
'const char build_message[] = "Built : "__TIME__", "__DATE__; \
const char version_string[] = "
${VERSION_STRING}
";'
|
\
$
$(CC)
$
$(CFLAGS)
-xc
-
-o
$(BUILD_DIR)
/build_message.o
$
$(Q)
$
$(LD)
-o
$$
@
$
$(LDFLAGS)
-Map
=
$(MAPFILE)
--script
$(LINKERFILE)
\
$(BUILD_DIR)
/build_message.o
$(OBJS)
$(DUMP)
:
$(ELF)
@
echo
" OD
$$
@"
$
${Q}
$
${OD}
-dx
$$
<
>
$$
@
$(BIN)
:
$(ELF)
@
echo
" BIN
$$
@"
$
$(Q)
$
$(OC)
-O
binary
$$
<
$$
@
@
echo
@
echo
"Built
$$
@ successfully"
@
echo
.PHONY
:
bl$(1)
bl$(1)
:
$(BUILD_DIR) $(BIN) $(DUMP)
all
:
bl$(1)
$(eval
$(call
MAKE_TOOL_ARGS,$(1),$(BIN),$(2)))
endef
make_helpers/tbbr/tbbr_tools.mk
0 → 100644
View file @
368bb87b
#
# Copyright (c) 2015, 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.
#
# This file defines the keys and certificates that must be created to establish
# a Chain of Trust following the TBBR document. These definitions include the
# command line options passed to the cert_create and fip_create tools.
#
# Expected environment:
#
# BUILD_PLAT: output directory
# NEED_BL32: indicates whether BL3-2 is needed by the platform
# BL2: image filename (optional). Default is IMG_BIN(2) (see macro IMG_BIN)
# BL30: image filename (optional). Default is IMG_BIN(30)
# BL31: image filename (optional). Default is IMG_BIN(31)
# BL32: image filename (optional). Default is IMG_BIN(32)
# BL33: image filename (optional). Default is IMG_BIN(33)
#
# Build options added by this file:
#
# KEY_ALG
# ROT_KEY
# TRUSTED_WORLD_KEY
# NON_TRUSTED_WORLD_KEY
# BL30_KEY
# BL31_KEY
# BL32_KEY
# BL33_KEY
#
# Certificate generation tool default parameters
TRUSTED_KEY_CERT
:=
${BUILD_PLAT}
/trusted_key.crt
# Add Trusted Key certificate to the fip_create and cert_create command line options
$(eval
$(call
FIP_ADD_PAYLOAD,${TRUSTED_KEY_CERT},--trusted-key-cert))
$(eval
$(call
CERT_ADD_CMD_OPT,${TRUSTED_KEY_CERT},--trusted-key-cert))
# Add the keys to the cert_create command line options (private keys are NOT
# packed in the FIP). Developers can use their own keys by specifying the proper
# build option in the command line when building the Trusted Firmware
$(if
${KEY_ALG},$(eval
$(call
CERT_ADD_CMD_OPT,${KEY_ALG},--key-alg)))
$(if
${ROT_KEY},$(eval
$(call
CERT_ADD_CMD_OPT,${ROT_KEY},--rot-key)))
$(if
${TRUSTED_WORLD_KEY},$(eval
$(call
CERT_ADD_CMD_OPT,${TRUSTED_WORLD_KEY},--trusted-world-key)))
$(if
${NON_TRUSTED_WORLD_KEY},$(eval
$(call
CERT_ADD_CMD_OPT,${NON_TRUSTED_WORLD_KEY},--non-trusted-world-key)))
# Add the BL2 CoT (image cert + image)
$(if
${BL2},$(eval
$(call
CERT_ADD_CMD_OPT,${BL2},--bl2,true)),\
$(eval
$(call
CERT_ADD_CMD_OPT,$(call
IMG_BIN,2),--bl2,true)))
$(eval
$(call
CERT_ADD_CMD_OPT,${BUILD_PLAT}/bl2.crt,--bl2-cert))
$(eval
$(call
FIP_ADD_PAYLOAD,${BUILD_PLAT}/bl2.crt,--bl2-cert))
# Add the BL30 CoT (key cert + img cert + image)
ifneq
(${BL30},)
$(eval
$(call
CERT_ADD_CMD_OPT,${BL30},--bl30,true))
$(if
${BL30_KEY},$(eval
$(call
CERT_ADD_CMD_OPT,${BL30_KEY},--bl30-key)))
$(eval
$(call
CERT_ADD_CMD_OPT,${BUILD_PLAT}/bl30.crt,--bl30-cert))
$(eval
$(call
CERT_ADD_CMD_OPT,${BUILD_PLAT}/bl30_key.crt,--bl30-key-cert))
$(eval
$(call
FIP_ADD_PAYLOAD,${BUILD_PLAT}/bl30.crt,--bl30-cert))
$(eval
$(call
FIP_ADD_PAYLOAD,${BUILD_PLAT}/bl30_key.crt,--bl30-key-cert))
endif
# Add the BL31 CoT (key cert + img cert + image)
$(if
${BL31},$(eval
$(call
CERT_ADD_CMD_OPT,${BL31},--bl31,true)),\
$(eval
$(call
CERT_ADD_CMD_OPT,$(call
IMG_BIN,31),--bl31,true)))
$(if
${BL31_KEY},$(eval
$(call
CERT_ADD_CMD_OPT,${BL31_KEY},--bl31-key)))
$(eval
$(call
CERT_ADD_CMD_OPT,${BUILD_PLAT}/bl31.crt,--bl31-cert))
$(eval
$(call
CERT_ADD_CMD_OPT,${BUILD_PLAT}/bl31_key.crt,--bl31-key-cert))
$(eval
$(call
FIP_ADD_PAYLOAD,${BUILD_PLAT}/bl31.crt,--bl31-cert))
$(eval
$(call
FIP_ADD_PAYLOAD,${BUILD_PLAT}/bl31_key.crt,--bl31-key-cert))
# Add the BL32 CoT (key cert + img cert + image)
ifeq
(${NEED_BL32},yes)
$(if
${BL32},$(eval
$(call
CERT_ADD_CMD_OPT,${BL32},--bl32,true)),\
$(eval
$(call
CERT_ADD_CMD_OPT,$(call
IMG_BIN,32),--bl32,true)))
$(if
${BL32_KEY},$(eval
$(call
CERT_ADD_CMD_OPT,${BL32_KEY},--bl32-key)))
$(eval
$(call
CERT_ADD_CMD_OPT,${BUILD_PLAT}/bl32.crt,--bl32-cert))
$(eval
$(call
CERT_ADD_CMD_OPT,${BUILD_PLAT}/bl32_key.crt,--bl32-key-cert))
$(eval
$(call
FIP_ADD_PAYLOAD,${BUILD_PLAT}/bl32.crt,--bl32-cert))
$(eval
$(call
FIP_ADD_PAYLOAD,${BUILD_PLAT}/bl32_key.crt,--bl32-key-cert))
endif
# Add the BL33 CoT (key cert + img cert + image)
ifneq
(${BL33},)
$(eval
$(call
CERT_ADD_CMD_OPT,${BL33},--bl33,true))
$(if
${BL33_KEY},$(eval
$(call
CERT_ADD_CMD_OPT,${BL33_KEY},--bl33-key)))
$(eval
$(call
CERT_ADD_CMD_OPT,${BUILD_PLAT}/bl33.crt,--bl33-cert))
$(eval
$(call
CERT_ADD_CMD_OPT,${BUILD_PLAT}/bl33_key.crt,--bl33-key-cert))
$(eval
$(call
FIP_ADD_PAYLOAD,${BUILD_PLAT}/bl33.crt,--bl33-cert))
$(eval
$(call
FIP_ADD_PAYLOAD,${BUILD_PLAT}/bl33_key.crt,--bl33-key-cert))
endif
plat/arm/css/common/css_common.mk
View file @
368bb87b
...
...
@@ -53,7 +53,8 @@ ifneq (${RESET_TO_BL31},0)
Please
set
RESET_TO_BL31
to
0.")
endif
NEED_BL30
:=
yes
# Subsystems require a BL30 image
$(eval
$(call
FIP_ADD_IMG,BL30,--bl30))
# Enable option to detect whether the SCP ROM firmware in use predates version
# 1.7.0 and therefore, is incompatible.
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment