blob: 05ff887b359f2c8ed135f9ce8a0a7ea8586bb2e5 [file] [log] [blame]
Pascal Brandefe56592016-03-03 10:46:52 +01001################################################################################
2# Following variables defines how the NS_USER (Non Secure User - Client
3# Application), NS_KERNEL (Non Secure Kernel), S_KERNEL (Secure Kernel) and
4# S_USER (Secure User - TA) are compiled
5################################################################################
6override COMPILE_NS_USER := 32
7override COMPILE_NS_KERNEL := 32
8override COMPILE_S_USER := 32
9override COMPILE_S_KERNEL := 32
Pascal Brandd6536da2015-09-01 10:38:43 +020010
Victor Chong7a716512017-09-11 15:18:44 +010011include common.mk
Joakim Bech427dd632015-05-04 15:52:33 +020012
13################################################################################
14# Paths to git projects and various binaries
15################################################################################
Etienne Carriere46ddff22018-04-27 10:13:49 +020016ARM_TF_PATH ?= $(ROOT)/arm-trusted-firmware
Joakim Bech427dd632015-05-04 15:52:33 +020017BIOS_QEMU_PATH ?= $(ROOT)/bios_qemu_tz_arm
Joakim Bech427dd632015-05-04 15:52:33 +020018QEMU_PATH ?= $(ROOT)/qemu
Jens Wiklander37ab51d2017-09-14 12:09:37 +020019BINARIES_PATH ?= $(ROOT)/out/bin
Joakim Bech427dd632015-05-04 15:52:33 +020020
21SOC_TERM_PATH ?= $(ROOT)/soc_term
22
Pascal Brand070d9552015-09-01 15:33:22 +020023DEBUG = 1
Joakim Bech427dd632015-05-04 15:52:33 +020024
Joakim Bech427dd632015-05-04 15:52:33 +020025################################################################################
26# Targets
27################################################################################
Etienne Carriere46ddff22018-04-27 10:13:49 +020028all: arm-tf bios-qemu qemu soc-term linux
29clean: arm-tf-clean bios-qemu-clean linux-clean optee-os-clean \
Jens Wiklandereed314d2018-02-07 14:25:24 +010030 qemu-clean soc-term-clean check-clean buildroot-clean
Joakim Bech427dd632015-05-04 15:52:33 +020031
Victor Chong7a716512017-09-11 15:18:44 +010032include toolchain.mk
Joakim Bech427dd632015-05-04 15:52:33 +020033
34################################################################################
Etienne Carriere46ddff22018-04-27 10:13:49 +020035# ARM Trusted Firmware
36################################################################################
37ARM_TF_EXPORTS ?= \
38 CROSS_COMPILE="$(CCACHE)$(AARCH32_CROSS_COMPILE)"
39
40ARM_TF_DEBUG ?= $(DEBUG)
41ifeq ($(ARM_TF_DEBUG),0)
42ARM_TF_LOGLVL ?= 30
43ARM_TF_OUT = $(ARM_TF_PATH)/build/qemu/release
44else
45ARM_TF_LOGLVL ?= 50
46ARM_TF_OUT = $(ARM_TF_PATH)/build/qemu/debug
47endif
48
49ARM_TF_FLAGS ?= \
50 BL32=$(OPTEE_OS_HEADER_V2_BIN) \
51 BL32_EXTRA1=$(OPTEE_OS_PAGER_V2_BIN) \
52 BL32_EXTRA2=$(OPTEE_OS_PAGEABLE_V2_BIN) \
53 BL33=$(ROOT)/out/bios-qemu/bios.bin \
54 ARM_ARCH_MAJOR=7 \
55 ARCH=aarch32 \
56 PLAT=qemu \
57 DEBUG=$(ARM_TF_DEBUG) \
58 ENABLE_ASSERTIONS=$(ARM_TF_DEBUG) \
59 LOG_LEVEL=$(ARM_TF_LOGLVL) \
60 MULTI_CONSOLE_API=0 \
61 ARM_TSP_RAM_LOCATION=tdram \
62 BL32_RAM_LOCATION=tdram \
63 AARCH32_SP=optee
64
65arm-tf: optee-os bios-qemu
66 $(ARM_TF_EXPORTS) $(MAKE) -C $(ARM_TF_PATH) $(ARM_TF_FLAGS) all fip
67 ln -sf $(ARM_TF_OUT)/bl1.bin $(BINARIES_PATH)
68 ln -sf $(ARM_TF_OUT)/bl2.bin $(BINARIES_PATH)
69 ln -sf $(OPTEE_OS_HEADER_V2_BIN) $(BINARIES_PATH)/bl32.bin
70 ln -sf $(OPTEE_OS_PAGER_V2_BIN) $(BINARIES_PATH)/bl32_extra1.bin
71 ln -sf $(OPTEE_OS_PAGEABLE_V2_BIN) $(BINARIES_PATH)/bl32_extra2.bin
72 ln -sf $(ROOT)/out/bios-qemu/bios.bin $(BINARIES_PATH)/bl33.bin
73
74arm-tf-clean:
75 $(ARM_TF_EXPORTS) $(MAKE) -C $(ARM_TF_PATH) $(ARM_TF_FLAGS) clean
76
77################################################################################
Joakim Bech427dd632015-05-04 15:52:33 +020078# QEMU
79################################################################################
80define bios-qemu-common
Jerome Forissier2660ff22015-09-03 10:20:00 +020081 +$(MAKE) -C $(BIOS_QEMU_PATH) \
82 CROSS_COMPILE=$(CROSS_COMPILE_NS_USER) \
Joakim Bech427dd632015-05-04 15:52:33 +020083 O=$(ROOT)/out/bios-qemu \
Joakim Bech427dd632015-05-04 15:52:33 +020084 PLATFORM_FLAVOR=virt
85endef
86
Jens Wiklandereed314d2018-02-07 14:25:24 +010087bios-qemu: buildroot optee-os linux
Joakim Bech427dd632015-05-04 15:52:33 +020088 $(call bios-qemu-common)
Etienne Carriere46ddff22018-04-27 10:13:49 +020089 ln -sf $(ROOT)/out/bios-qemu/bios.bin $(BINARIES_PATH)
Joakim Bech427dd632015-05-04 15:52:33 +020090
91bios-qemu-clean:
92 $(call bios-qemu-common) clean
93
94qemu:
Igor Opaniuk97d05292016-10-26 14:46:14 +030095 cd $(QEMU_PATH); ./configure --target-list=arm-softmmu\
96 $(QEMU_CONFIGURE_PARAMS_COMMON)
Jerome Forissier2660ff22015-09-03 10:20:00 +020097 $(MAKE) -C $(QEMU_PATH)
Joakim Bech427dd632015-05-04 15:52:33 +020098
99qemu-clean:
Jerome Forissier2660ff22015-09-03 10:20:00 +0200100 $(MAKE) -C $(QEMU_PATH) distclean
Joakim Bech427dd632015-05-04 15:52:33 +0200101
102################################################################################
Joakim Bech427dd632015-05-04 15:52:33 +0200103# Linux kernel
104################################################################################
Jerome Forissiere1002382015-11-26 11:36:00 +0100105LINUX_DEFCONFIG_COMMON_ARCH := arm
106LINUX_DEFCONFIG_COMMON_FILES := \
107 $(LINUX_PATH)/arch/arm/configs/vexpress_defconfig \
108 $(CURDIR)/kconfigs/qemu.conf
Joakim Bech427dd632015-05-04 15:52:33 +0200109
110linux-defconfig: $(LINUX_PATH)/.config
111
Pascal Brande3d85982015-09-10 17:20:42 +0200112LINUX_COMMON_FLAGS += ARCH=arm
Joakim Bech427dd632015-05-04 15:52:33 +0200113
Pascal Brande3d85982015-09-10 17:20:42 +0200114linux: linux-common
Etienne Carriere46ddff22018-04-27 10:13:49 +0200115 mkdir -p $(BINARIES_PATH)
116 ln -sf $(LINUX_PATH)/arch/arm/boot/zImage $(BINARIES_PATH)
Pascal Brande3d85982015-09-10 17:20:42 +0200117
118linux-defconfig-clean: linux-defconfig-clean-common
119
120LINUX_CLEAN_COMMON_FLAGS += ARCH=arm
121
122linux-clean: linux-clean-common
123
124LINUX_CLEANER_COMMON_FLAGS += ARCH=arm
125
126linux-cleaner: linux-cleaner-common
Joakim Bech427dd632015-05-04 15:52:33 +0200127
128################################################################################
129# OP-TEE
130################################################################################
Jerome Forissierae45fbf2015-09-04 09:40:17 +0200131OPTEE_OS_COMMON_FLAGS += PLATFORM=vexpress-qemu_virt
132optee-os: optee-os-common
Joakim Bech427dd632015-05-04 15:52:33 +0200133
Jerome Forissierae45fbf2015-09-04 09:40:17 +0200134OPTEE_OS_CLEAN_COMMON_FLAGS += PLATFORM=vexpress-qemu_virt
135optee-os-clean: optee-os-clean-common
Joakim Bech427dd632015-05-04 15:52:33 +0200136
Pascal Brand070d9552015-09-01 15:33:22 +0200137optee-client: optee-client-common
Jerome Forissierae45fbf2015-09-04 09:40:17 +0200138
Pascal Brand070d9552015-09-01 15:33:22 +0200139optee-client-clean: optee-client-clean-common
Jerome Forissierae45fbf2015-09-04 09:40:17 +0200140
Joakim Bech427dd632015-05-04 15:52:33 +0200141################################################################################
142# Soc-term
143################################################################################
144soc-term:
Jerome Forissier2660ff22015-09-03 10:20:00 +0200145 $(MAKE) -C $(SOC_TERM_PATH)
Joakim Bech427dd632015-05-04 15:52:33 +0200146
147soc-term-clean:
Jerome Forissier2660ff22015-09-03 10:20:00 +0200148 $(MAKE) -C $(SOC_TERM_PATH) clean
Joakim Bech427dd632015-05-04 15:52:33 +0200149
150################################################################################
Joakim Bech427dd632015-05-04 15:52:33 +0200151# Run targets
152################################################################################
Joakim Bech427dd632015-05-04 15:52:33 +0200153.PHONY: run
154# This target enforces updating root fs etc
Jerome Forissierae45fbf2015-09-04 09:40:17 +0200155run: all
Etienne Carriere46ddff22018-04-27 10:13:49 +0200156 ln -sf $(ROOT)/out-br/images/rootfs.cpio.gz $(BINARIES_PATH)/
Jerome Forissierae45fbf2015-09-04 09:40:17 +0200157 $(MAKE) run-only
Joakim Bech427dd632015-05-04 15:52:33 +0200158
159.PHONY: run-only
160run-only:
Jerome Forissierefd56292017-01-31 17:46:10 +0100161 $(call check-terminal)
Joakim Bech427dd632015-05-04 15:52:33 +0200162 $(call run-help)
SY Chiuc8d61452015-09-17 16:42:17 +0800163 $(call launch-terminal,54320,"Normal World")
164 $(call launch-terminal,54321,"Secure World")
Peter Maydellc8bcc902015-10-29 16:31:52 +0000165 $(call wait-for-ports,54320,54321)
Jens Wiklander37ab51d2017-09-14 12:09:37 +0200166 (cd $(BINARIES_PATH) && $(QEMU_PATH)/arm-softmmu/qemu-system-arm \
Joakim Bech427dd632015-05-04 15:52:33 +0200167 -nographic \
168 -serial tcp:localhost:54320 -serial tcp:localhost:54321 \
Victor Chong6f0c0eb2016-01-24 07:43:33 +0000169 -s -S -machine virt -machine secure=on -cpu cortex-a15 \
Jens Wiklander37ab51d2017-09-14 12:09:37 +0200170 -d unimp -semihosting-config enable,target=native \
Joakim Bech427dd632015-05-04 15:52:33 +0200171 -m 1057 \
Etienne Carriere46ddff22018-04-27 10:13:49 +0200172 -bios bl1.bin \
Jens Wiklander37ab51d2017-09-14 12:09:37 +0200173 $(QEMU_EXTRA_ARGS) )
Joakim Bech427dd632015-05-04 15:52:33 +0200174
Jerome Forissierf080b5a2015-08-07 16:18:57 +0200175
176ifneq ($(filter check,$(MAKECMDGOALS)),)
177CHECK_DEPS := all
178endif
179
Jerome Forissier7a9463c2015-08-20 10:53:48 +0200180check-args := --bios $(ROOT)/out/bios-qemu/bios.bin
181ifneq ($(TIMEOUT),)
182check-args += --timeout $(TIMEOUT)
183endif
184
Jerome Forissier0a60a9d2017-10-13 13:35:47 +0200185QEMU_SMP ?= 1
Jerome Forissierf080b5a2015-08-07 16:18:57 +0200186check: $(CHECK_DEPS)
Jerome Forissiercdc6fe02017-09-20 11:43:51 +0200187 cd $(BINARIES_PATH) && \
188 export QEMU=$(ROOT)/qemu/arm-softmmu/qemu-system-arm && \
Jerome Forissier2a90dde2017-10-13 13:32:45 +0200189 export QEMU_SMP=$(QEMU_SMP) && \
Jerome Forissiercdc6fe02017-09-20 11:43:51 +0200190 expect $(ROOT)/build/qemu-check.exp -- $(check-args) || \
Jerome Forissier2660ff22015-09-03 10:20:00 +0200191 (if [ "$(DUMP_LOGS_ON_ERROR)" ]; then \
192 echo "== $$PWD/serial0.log:"; \
193 cat serial0.log; \
194 echo "== end of $$PWD/serial0.log:"; \
195 echo "== $$PWD/serial1.log:"; \
196 cat serial1.log; \
197 echo "== end of $$PWD/serial1.log:"; \
198 fi; false)
Jerome Forissierf080b5a2015-08-07 16:18:57 +0200199
200check-only: check
201
202check-clean:
203 rm -f serial0.log serial1.log