• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1#
2# Copyright (c) 2015-2018, Google, Inc. All rights reserved
3#
4# Licensed under the Apache License, Version 2.0 (the "License");
5# you may not use this file except in compliance with the License.
6# You may obtain a copy of the License at
7#
8#      http://www.apache.org/licenses/LICENSE-2.0
9#
10# Unless required by applicable law or agreed to in writing, software
11# distributed under the License is distributed on an "AS IS" BASIS,
12# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13# See the License for the specific language governing permissions and
14# limitations under the License.
15#
16
17#
18#  This makefile containts rules for  building ATF image for Trusty.
19#  It is expected that it will be included by the project that requres ATF
20#  support and the caller will configure the following variables:
21#
22#      ATF_ROOT       - Root of arm-trusted-firmware project
23#      ATF_BUILD_BASE - location that will be used to store temp files and
24#                       build results.
25#      ATF_PLAT       - ATF platform to build
26#      ATF_DEBUG      - ATF debug level
27#      ATF_WITH_TRUSTY_GENERIC_SERVICES - Add Trusty generic services
28#      ATF_TOOLCHAIN_PREFIX - AArch64 toolchain to use for building ATF
29#
30#  The following variable is returned to the caller:
31#      ATF_OUT_DIR    - Directory containing ATF images
32#      ATF_BUILD_BASE - location that will be used to store temp files and
33#                       build results.
34#
35#
36
37# set location of resulting ATF image
38ifneq ($(ATF_DEBUG), 0)
39ATF_OUT_DIR := $(ATF_BUILD_BASE)/$(ATF_PLAT)/debug
40else
41ATF_OUT_DIR:=$(ATF_BUILD_BASE)/$(ATF_PLAT)/release
42endif
43ATF_BIN := $(ATF_OUT_DIR)/bl31.bin
44
45ATF_WITH_TRUSTY_GENERIC_SERVICES ?= false
46
47ifeq (true,$(call TOBOOL,$(HAFNIUM)))
48HAFNIUM_PROJECT_DIR := \
49       $(TRUSTY_TOP)/trusty/device/arm/generic-arm64/project/hafnium
50
51# We need to copy sp_layout.json and trusty.dts to the same directory as lk.bin
52# because TF-A parses sp_layout.json and reads the other files from the same
53# directory.
54LK_BIN_DIR := $(dir $(LK_BIN))
55HAFNIUM_SP_LAYOUT_FILES := \
56	$(LK_BIN_DIR)/sp_layout.json \
57	$(LK_BIN_DIR)/trusty.dts \
58
59$(HAFNIUM_SP_LAYOUT_FILES): $(LK_BIN_DIR)/%: $(HAFNIUM_PROJECT_DIR)/%
60	@$(MKDIR)
61	@cp $< $@
62
63# Add explicit dependencies for the layout files
64# because the TF-A build system needs them
65$(ATF_BIN): $(HAFNIUM_SP_LAYOUT_FILES)
66
67ATF_MAKE_ARGS := SPD=spmd
68ATF_MAKE_ARGS += SPMD_SPM_AT_SEL2=1
69ATF_MAKE_ARGS += SP_LAYOUT_FILE=$(LK_BIN_DIR)/sp_layout.json
70ATF_MAKE_ARGS += QEMU_TOS_FW_CONFIG_DTS=$(HAFNIUM_PROJECT_DIR)/tos_fw_config.dts
71ATF_MAKE_ARGS += QEMU_TB_FW_CONFIG_DTS=$(HAFNIUM_PROJECT_DIR)/tb_fw_config.dts
72
73# Symlink the Hafnium DTBs to where qemu will look for them.
74HAFNIUM_DTBS := tb_fw_config.dtb tos_fw_config.dtb
75HAFNIUM_DTBS_SRCS := $(addprefix $(ATF_OUT_DIR)/fdts/, $(HAFNIUM_DTBS))
76$(HAFNIUM_DTBS_SRCS): $(ATF_BIN)
77
78HAFNIUM_DTBS_OUT := $(addprefix $(ATF_OUT_DIR)/, $(HAFNIUM_DTBS))
79$(HAFNIUM_DTBS_OUT): $(ATF_OUT_DIR)/%.dtb: $(ATF_OUT_DIR)/fdts/%.dtb
80	$(NOECHO)ln -rsf $< $@
81
82EXTRA_BUILDDEPS += $(HAFNIUM_DTBS_OUT)
83EXTRA_ATF_SYMLINKS += $(addprefix $(ATF_OUT_DIR)/, $(HAFNIUM_DTBS))
84ATF_EXTRA_BINS += $(addprefix $(ATF_OUT_DIR)/fdts/, $(HAFNIUM_DTBS))
85
86else ifeq ($(SPMC_EL), 3)
87EL3SPMC_TOS_FW_CONFIG_DTS := \
88	$(TRUSTY_TOP)/trusty/device/arm/generic-arm64/project/el3spmc/tos_fw_config.dts
89
90EL3SPMC_TOS_FW_CONFIG_DTB_SRC := $(ATF_OUT_DIR)/fdts/tos_fw_config.dtb
91$(EL3SPMC_TOS_FW_CONFIG_DTB_SRC): $(ATF_BIN)
92
93EL3SPMC_TOS_FW_CONFIG_DTB_OUT := $(ATF_OUT_DIR)/tos_fw_config.dtb
94$(EL3SPMC_TOS_FW_CONFIG_DTB_OUT): $(EL3SPMC_TOS_FW_CONFIG_DTB_SRC)
95	$(NOECHO)ln -rsf $< $@
96
97EXTRA_BUILDDEPS += $(EL3SPMC_TOS_FW_CONFIG_DTB_OUT)
98EXTRA_ATF_SYMLINKS += $(ATF_OUT_DIR)/tos_fw_config.dtb
99ATF_EXTRA_BINS += $(ATF_OUT_DIR)/fdts/tos_fw_config.dtb
100
101ATF_MAKE_ARGS := SPD=spmd
102ATF_MAKE_ARGS += SPMC_AT_EL3=1
103ATF_MAKE_ARGS += SPMD_SPM_AT_SEL2=0
104ATF_MAKE_ARGS += QEMU_TOS_FW_CONFIG_DTS=$(EL3SPMC_TOS_FW_CONFIG_DTS)
105# The el3_spmc build system needs something in BL32, otherwise it
106# builds the TSP as the BL32 payload. The variable is not used for anything,
107# so it can be a placeholder.
108ATF_MAKE_ARGS += BL32=/dev/null
109else
110ATF_MAKE_ARGS := SPD=trusty
111ATF_MAKE_ARGS += SPMD_SPM_AT_SEL2=0
112endif
113ATF_MAKE_ARGS += CC=$(CLANG_BINDIR)/clang
114ATF_MAKE_ARGS += DTC=$(TRUSTY_TOP)/prebuilts/misc/linux-x86/dtc/dtc
115ATF_MAKE_ARGS += PYTHON=$(PY3)
116ATF_MAKE_ARGS += CROSS_COMPILE=$(ATF_TOOLCHAIN_PREFIX)
117ATF_MAKE_ARGS += PLAT=$(ATF_PLAT)
118ATF_MAKE_ARGS += DEBUG=$(ATF_DEBUG)
119ATF_MAKE_ARGS += BUILD_BASE=$(ATF_BUILD_BASE)
120ATF_MAKE_ARGS += QEMU_USE_GIC_DRIVER=QEMU_GICV$(GIC_VERSION)
121ATF_MAKE_ARGS += CTX_INCLUDE_FPREGS=1
122# On aarch32, we skip EL2, see 27d8e1e75a2f45d7c23
123ifeq (true,$(call TOBOOL,$(KERNEL_32BIT)))
124ATF_MAKE_ARGS += INIT_UNUSED_NS_EL2=1
125endif
126
127ifeq (true,$(call TOBOOL,$(ATF_WITH_TRUSTY_GENERIC_SERVICES)))
128ATF_MAKE_ARGS += TRUSTY_SPD_WITH_GENERIC_SERVICES=1
129endif
130
131$(ATF_BIN): ATF_ROOT:=$(ATF_ROOT)
132$(ATF_BIN): ATF_MAKE_ARGS:=$(ATF_MAKE_ARGS)
133$(ATF_BIN): .PHONY
134	$(MAKE) -C $(ATF_ROOT) $(ATF_MAKE_ARGS) all sp
135
136# Add ATF_BIN to the list of project dependencies
137EXTRA_BUILDDEPS += $(ATF_BIN)
138
139ATF_ROOT:=
140ATF_PLAT:=
141ATF_DEBUG:=
142ATF_WITH_TRUSTY_GENERIC_SERVICES:=
143ATF_TOOLCHAIN_PREFIX:=
144ATF_BIN:=
145ATF_MAKE_ARGS:=
146EL3SPMC_TOS_FW_CONFIG_DTS:=
147EL3SPMC_TOS_FW_CONFIG_DTB_SRC:=
148EL3SPMC_TOS_FW_CONFIG_DTB_OUT:=
149LK_BIN_DIR :=
150HAFNIUM_DTBS :=
151HAFNIUM_DTBS_SRCS :=
152HAFNIUM_DTBS_OUT :=
153HAFNIUM_PROJECT_DIR :=
154HAFNIUM_SP_LAYOUT_FILES :=
155