blob: 0a04f1e1e3822d75be4c470175487c55ca05edf9 [file] [log] [blame]
Matt Maf37a7012016-07-08 10:02:23 +08001################################################################################
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 := 64
7override COMPILE_NS_KERNEL := 64
8override COMPILE_S_USER := 64
9override COMPILE_S_KERNEL := 64
10
Victor Chong7a716512017-09-11 15:18:44 +010011include common.mk
Matt Maf37a7012016-07-08 10:02:23 +080012
13################################################################################
14# Paths to git projects and various binaries
15################################################################################
Jens Wiklander2795cfe2017-03-30 08:22:50 +020016ARM_TF_PATH ?= $(ROOT)/arm-trusted-firmware
Matt Maf37a7012016-07-08 10:02:23 +080017
Jens Wiklander2795cfe2017-03-30 08:22:50 +020018EDK2_PATH ?= $(ROOT)/edk2
19EDK2_BIN ?= $(EDK2_PATH)/Build/ArmVirtQemuKernel-AARCH64/DEBUG_GCC49/FV/QEMU_EFI.fd
Matt Maf37a7012016-07-08 10:02:23 +080020
Jens Wiklander2795cfe2017-03-30 08:22:50 +020021QEMU_PATH ?= $(ROOT)/qemu
Matt Maf37a7012016-07-08 10:02:23 +080022
Jens Wiklander2795cfe2017-03-30 08:22:50 +020023SOC_TERM_PATH ?= $(ROOT)/soc_term
24STRACE_PATH ?= $(ROOT)/strace
Matt Maf37a7012016-07-08 10:02:23 +080025
26DEBUG = 1
27
28################################################################################
29# Targets
30################################################################################
Igor Opaniuk4a2bf9a2017-07-04 22:30:48 +030031ifeq ($(CFG_TEE_BENCHMARK),y)
32all: benchmark-app
33clean: benchmark-app-clean
34endif
Victor Chong86840a42017-10-28 13:01:33 +010035all: arm-tf edk2 qemu soc-term linux update_rootfs optee-examples
Victor Chong5fc1f852017-05-22 07:30:47 +010036clean: arm-tf-clean busybox-clean edk2-clean linux-clean \
Matt Maf37a7012016-07-08 10:02:23 +080037 optee-os-clean optee-client-clean qemu-clean \
Igor Opaniuk584efe52017-08-07 01:41:48 +030038 soc-term-clean check-clean strace-clean optee-examples-clean
Matt Maf37a7012016-07-08 10:02:23 +080039
Victor Chong7a716512017-09-11 15:18:44 +010040include toolchain.mk
Matt Maf37a7012016-07-08 10:02:23 +080041
42################################################################################
43# ARM Trusted Firmware
44################################################################################
45ARM_TF_EXPORTS ?= \
Matt Maf37a7012016-07-08 10:02:23 +080046 CROSS_COMPILE="$(CCACHE)$(AARCH64_CROSS_COMPILE)"
47
48ARM_TF_FLAGS ?= \
Jens Wiklander177d0f22017-09-01 09:10:08 +020049 BL32=$(OPTEE_OS_HEADER_V2_BIN) \
50 BL32_EXTRA1=$(OPTEE_OS_PAGER_V2_BIN) \
51 BL32_EXTRA2=$(OPTEE_OS_PAGEABLE_V2_BIN) \
Matt Maf37a7012016-07-08 10:02:23 +080052 BL33=$(EDK2_BIN) \
53 ARM_TSP_RAM_LOCATION=tdram \
54 PLAT=qemu \
55 DEBUG=0 \
56 LOG_LEVEL=50 \
Matt Maf37a7012016-07-08 10:02:23 +080057 BL32_RAM_LOCATION=tdram \
58 SPD=opteed
59
60arm-tf: optee-os edk2
61 $(ARM_TF_EXPORTS) $(MAKE) -C $(ARM_TF_PATH) $(ARM_TF_FLAGS) all fip
Jens Wiklander177d0f22017-09-01 09:10:08 +020062 ln -sf $(OPTEE_OS_HEADER_V2_BIN) \
63 $(ARM_TF_PATH)/build/qemu/release/bl32.bin
64 ln -sf $(OPTEE_OS_PAGER_V2_BIN) \
65 $(ARM_TF_PATH)/build/qemu/release/bl32_extra1.bin
66 ln -sf $(OPTEE_OS_PAGEABLE_V2_BIN) \
67 $(ARM_TF_PATH)/build/qemu/release/bl32_extra2.bin
Jens Wiklander2795cfe2017-03-30 08:22:50 +020068 ln -sf $(EDK2_BIN) $(ARM_TF_PATH)/build/qemu/release/bl33.bin
Matt Maf37a7012016-07-08 10:02:23 +080069
70arm-tf-clean:
71 $(ARM_TF_EXPORTS) $(MAKE) -C $(ARM_TF_PATH) $(ARM_TF_FLAGS) clean
72
Matt Maf37a7012016-07-08 10:02:23 +080073################################################################################
74# QEMU
75################################################################################
76qemu:
Igor Opaniuk97d05292016-10-26 14:46:14 +030077 cd $(QEMU_PATH); ./configure --target-list=aarch64-softmmu\
78 $(QEMU_CONFIGURE_PARAMS_COMMON)
Matt Maf37a7012016-07-08 10:02:23 +080079 $(MAKE) -C $(QEMU_PATH)
80
81qemu-clean:
82 $(MAKE) -C $(QEMU_PATH) distclean
83
84################################################################################
85# Busybox
86################################################################################
87BUSYBOX_COMMON_TARGET = fvp
88BUSYBOX_CLEAN_COMMON_TARGET = fvp clean
89BUSYBOX_COMMON_CCDIR = $(AARCH64_PATH)
90
91busybox: busybox-common
92
93busybox-clean: busybox-clean-common
94
95busybox-cleaner: busybox-cleaner-common
96
97################################################################################
Jens Wiklander2795cfe2017-03-30 08:22:50 +020098# EDK2 / Tianocore
99################################################################################
Joakim Bechc94e95a2017-11-25 11:06:50 +0100100define edk2-env
101 export WORKSPACE=$(EDK2_PATH)
102endef
103
Jens Wiklander2795cfe2017-03-30 08:22:50 +0200104define edk2-call
Jerome Forissier571e2da2018-02-19 09:01:21 +0000105 GCC49_AARCH64_PREFIX=$(LEGACY_AARCH64_CROSS_COMPILE) \
106 build -n `getconf _NPROCESSORS_ONLN` -a AARCH64 \
107 -t GCC49 -p ArmVirtPkg/ArmVirtQemuKernel.dsc \
108 -b DEBUG
Jens Wiklander2795cfe2017-03-30 08:22:50 +0200109endef
110
111edk2: edk2-common
112
113edk2-clean: edk2-clean-common
114
115
116
117################################################################################
Matt Maf37a7012016-07-08 10:02:23 +0800118# Linux kernel
119################################################################################
120LINUX_DEFCONFIG_COMMON_ARCH := arm64
121LINUX_DEFCONFIG_COMMON_FILES := \
122 $(LINUX_PATH)/arch/arm64/configs/defconfig \
123 $(CURDIR)/kconfigs/qemu.conf
124
125linux-defconfig: $(LINUX_PATH)/.config
126
127LINUX_COMMON_FLAGS += ARCH=arm64
128
129linux: linux-common
130
131linux-defconfig-clean: linux-defconfig-clean-common
132
133LINUX_CLEAN_COMMON_FLAGS += ARCH=arm64
134
135linux-clean: linux-clean-common
136
137LINUX_CLEANER_COMMON_FLAGS += ARCH=arm64
138
139linux-cleaner: linux-cleaner-common
140
141################################################################################
142# OP-TEE
143################################################################################
144OPTEE_OS_COMMON_FLAGS += PLATFORM=vexpress-qemu_armv8a CFG_ARM64_core=y \
Etienne Carrierecc23f6b2016-10-21 10:16:00 +0200145 DEBUG=0 CFG_PM_DEBUG=0
Matt Maf37a7012016-07-08 10:02:23 +0800146optee-os: optee-os-common
147
148OPTEE_OS_CLEAN_COMMON_FLAGS += PLATFORM=vexpress-qemu_armv8a
149optee-os-clean: optee-os-clean-common
150
151optee-client: optee-client-common
152
153optee-client-clean: optee-client-clean-common
154
155################################################################################
156# Soc-term
157################################################################################
158soc-term:
159 $(MAKE) -C $(SOC_TERM_PATH)
160
161soc-term-clean:
162 $(MAKE) -C $(SOC_TERM_PATH) clean
163
164################################################################################
165# xtest / optee_test
166################################################################################
167xtest: xtest-common
168
169xtest-clean: xtest-clean-common
170
171xtest-patch: xtest-patch-common
172
173################################################################################
Igor Opaniuk584efe52017-08-07 01:41:48 +0300174# Sample applications / optee_examples
Victor Chong8519bcf2016-07-15 08:43:03 +0100175################################################################################
Igor Opaniuk584efe52017-08-07 01:41:48 +0300176optee-examples: optee-examples-common
Victor Chong8519bcf2016-07-15 08:43:03 +0100177
Igor Opaniuk584efe52017-08-07 01:41:48 +0300178optee-examples-clean: optee-examples-clean-common
Victor Chong8519bcf2016-07-15 08:43:03 +0100179
180################################################################################
Matt Maf37a7012016-07-08 10:02:23 +0800181# strace
182################################################################################
183strace:
184ifneq ("$(wildcard $(STRACE_PATH))","")
185 cd $(STRACE_PATH) && \
186 ./bootstrap && \
Joakim Becheed6aa92018-01-16 10:02:23 +0100187 ./configure --host=aarch64-linux-gnu CC=$(CROSS_COMPILE_NS_USER)gcc \
188 --enable-mpers=no && \
Matt Maf37a7012016-07-08 10:02:23 +0800189 CC=$(CROSS_COMPILE_NS_USER)gcc $(MAKE)
190endif
191
192strace-clean:
193ifneq ("$(wildcard $(STRACE_PATH))","")
Joel Andersonb60156e2018-02-24 12:57:04 -0500194 if [ -e $(STRACE_PATH)/Makefile ] ; then \
195 CC=$(CROSS_COMPILE_NS_USER)gcc \
196 $(MAKE) -C $(STRACE_PATH) clean && \
197 rm -f $(STRACE_PATH)/Makefile $(STRACE_PATH)/configure; \
198 fi
Matt Maf37a7012016-07-08 10:02:23 +0800199endif
200
201################################################################################
Igor Opaniuk4a2bf9a2017-07-04 22:30:48 +0300202# benchmark
203################################################################################
204benchmark-app: benchmark-app-common
205
206benchmark-app-clean: benchmark-app-clean-common
207
208################################################################################
Matt Maf37a7012016-07-08 10:02:23 +0800209# Root FS
210################################################################################
Victor Chong86840a42017-10-28 13:01:33 +0100211filelist-tee: strace filelist-tee-common
Matt Maf37a7012016-07-08 10:02:23 +0800212ifneq ("$(wildcard $(STRACE_PATH)/strace)","")
213 @echo "file /bin/strace $(STRACE_PATH)/strace 755 0 0" >> $(GEN_ROOTFS_FILELIST)
214endif
215
Etienne Carriere5e113512016-10-21 10:13:57 +0200216update_rootfs: update_rootfs-common
Matt Maf37a7012016-07-08 10:02:23 +0800217
218################################################################################
219# Run targets
220################################################################################
Matt Maf37a7012016-07-08 10:02:23 +0800221.PHONY: run
222# This target enforces updating root fs etc
223run: all
224 $(MAKE) run-only
225
226.PHONY: run-only
227run-only:
Jerome Forissierefd56292017-01-31 17:46:10 +0100228 $(call check-terminal)
Matt Maf37a7012016-07-08 10:02:23 +0800229 $(call run-help)
230 $(call launch-terminal,54320,"Normal World")
231 $(call launch-terminal,54321,"Secure World")
232 $(call wait-for-ports,54320,54321)
233 cd $(ARM_TF_PATH)/build/qemu/release && \
234 $(QEMU_PATH)/aarch64-softmmu/qemu-system-aarch64 \
235 -nographic \
236 -serial tcp:localhost:54320 -serial tcp:localhost:54321 \
237 -machine virt,secure=on -cpu cortex-a57 -m 1057 -bios $(ARM_TF_PATH)/build/qemu/release/bl1.bin \
Jerome Forissierd6970872017-01-31 15:16:21 +0100238 -s -S -semihosting-config enable,target=native -d unimp \
Matt Maf37a7012016-07-08 10:02:23 +0800239 -initrd $(GEN_ROOTFS_PATH)/filesystem.cpio.gz \
Jens Wiklander2795cfe2017-03-30 08:22:50 +0200240 -kernel $(LINUX_PATH)/arch/arm64/boot/Image -no-acpi \
Igor Opaniuk97d05292016-10-26 14:46:14 +0300241 -append 'console=ttyAMA0,38400 keep_bootcon root=/dev/vda2' \
242 $(QEMU_EXTRA_ARGS)
Matt Maf37a7012016-07-08 10:02:23 +0800243
244ifneq ($(filter check,$(MAKECMDGOALS)),)
245CHECK_DEPS := all
246endif
247
248ifneq ($(TIMEOUT),)
249check-args := --timeout $(TIMEOUT)
250endif
251
252check: $(CHECK_DEPS)
253 expect qemu-check.exp -- $(check-args) || \
254 (if [ "$(DUMP_LOGS_ON_ERROR)" ]; then \
255 echo "== $$PWD/serial0.log:"; \
256 cat serial0.log; \
257 echo "== end of $$PWD/serial0.log:"; \
258 echo "== $$PWD/serial1.log:"; \
259 cat serial1.log; \
260 echo "== end of $$PWD/serial1.log:"; \
261 fi; false)
262
263check-only: check
264
265check-clean:
266 rm -f serial0.log serial1.log