blob: 754e7b2aab4f0219db11786e59bf23fd9a0fff5d [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
11-include common.mk
12
13################################################################################
14# Paths to git projects and various binaries
15################################################################################
16ARM_TF_PATH ?= $(ROOT)/arm-trusted-firmware
17
18EDK2_PATH ?= $(ROOT)/edk2
19EDK2_BIN ?= $(EDK2_PATH)/QEMU_EFI.fd
20
21QEMU_PATH ?= $(ROOT)/qemu
22
23SOC_TERM_PATH ?= $(ROOT)/soc_term
24STRACE_PATH ?= $(ROOT)/strace
25
26DEBUG = 1
27
28################################################################################
29# Targets
30################################################################################
31all: arm-tf qemu soc-term linux strace update_rootfs
32all-clean: arm-tf-clean busybox-clean linux-clean \
33 optee-os-clean optee-client-clean qemu-clean \
34 soc-term-clean check-clean strace-clean
35
36-include toolchain.mk
37
38################################################################################
39# ARM Trusted Firmware
40################################################################################
41ARM_TF_EXPORTS ?= \
42 CFLAGS="-O0 -gdwarf-2" \
43 CROSS_COMPILE="$(CCACHE)$(AARCH64_CROSS_COMPILE)"
44
45ARM_TF_FLAGS ?= \
46 BL32=$(OPTEE_OS_BIN) \
47 BL33=$(EDK2_BIN) \
48 ARM_TSP_RAM_LOCATION=tdram \
49 PLAT=qemu \
50 DEBUG=0 \
51 LOG_LEVEL=50 \
52 ERROR_DEPRECATED=1 \
53 BL32_RAM_LOCATION=tdram \
54 SPD=opteed
55
56arm-tf: optee-os edk2
57 $(ARM_TF_EXPORTS) $(MAKE) -C $(ARM_TF_PATH) $(ARM_TF_FLAGS) all fip
58
59arm-tf-clean:
60 $(ARM_TF_EXPORTS) $(MAKE) -C $(ARM_TF_PATH) $(ARM_TF_FLAGS) clean
61
62# FIXME: This is just too rough, we should build this just as we're doing for
63# FVP.
64edk2: optee-os
65ifeq ("$(wildcard $(EDK2_BIN))","")
66 mkdir -p $(EDK2_PATH)
67 wget -O $(EDK2_BIN) \
Jens Wiklander4acd3292016-10-05 18:47:35 +020068 http://snapshots.linaro.org/components/kernel/leg-virt-tianocore-edk2-upstream/716/QEMU-KERNEL-AARCH64/RELEASE_GCC49/QEMU_EFI.fd
Matt Maf37a7012016-07-08 10:02:23 +080069endif
70 mkdir -p $(ARM_TF_PATH)/build/qemu/release
71 ln -sf $(OPTEE_OS_BIN) $(ARM_TF_PATH)/build/qemu/release/bl32.bin
72 ln -sf $(EDK2_BIN) $(ARM_TF_PATH)/build/qemu/release/bl33.bin
73
74################################################################################
75# QEMU
76################################################################################
77qemu:
Igor Opaniuk97d05292016-10-26 14:46:14 +030078 cd $(QEMU_PATH); ./configure --target-list=aarch64-softmmu\
79 $(QEMU_CONFIGURE_PARAMS_COMMON)
Matt Maf37a7012016-07-08 10:02:23 +080080 $(MAKE) -C $(QEMU_PATH)
81
82qemu-clean:
83 $(MAKE) -C $(QEMU_PATH) distclean
84
85################################################################################
86# Busybox
87################################################################################
88BUSYBOX_COMMON_TARGET = fvp
89BUSYBOX_CLEAN_COMMON_TARGET = fvp clean
90BUSYBOX_COMMON_CCDIR = $(AARCH64_PATH)
91
92busybox: busybox-common
93
94busybox-clean: busybox-clean-common
95
96busybox-cleaner: busybox-cleaner-common
97
98################################################################################
99# Linux kernel
100################################################################################
101LINUX_DEFCONFIG_COMMON_ARCH := arm64
102LINUX_DEFCONFIG_COMMON_FILES := \
103 $(LINUX_PATH)/arch/arm64/configs/defconfig \
104 $(CURDIR)/kconfigs/qemu.conf
105
106linux-defconfig: $(LINUX_PATH)/.config
107
108LINUX_COMMON_FLAGS += ARCH=arm64
109
110linux: linux-common
111
112linux-defconfig-clean: linux-defconfig-clean-common
113
114LINUX_CLEAN_COMMON_FLAGS += ARCH=arm64
115
116linux-clean: linux-clean-common
117
118LINUX_CLEANER_COMMON_FLAGS += ARCH=arm64
119
120linux-cleaner: linux-cleaner-common
121
122################################################################################
123# OP-TEE
124################################################################################
125OPTEE_OS_COMMON_FLAGS += PLATFORM=vexpress-qemu_armv8a CFG_ARM64_core=y \
Etienne Carrierecc23f6b2016-10-21 10:16:00 +0200126 DEBUG=0 CFG_PM_DEBUG=0
Matt Maf37a7012016-07-08 10:02:23 +0800127optee-os: optee-os-common
128
129OPTEE_OS_CLEAN_COMMON_FLAGS += PLATFORM=vexpress-qemu_armv8a
130optee-os-clean: optee-os-clean-common
131
132optee-client: optee-client-common
133
134optee-client-clean: optee-client-clean-common
135
136################################################################################
137# Soc-term
138################################################################################
139soc-term:
140 $(MAKE) -C $(SOC_TERM_PATH)
141
142soc-term-clean:
143 $(MAKE) -C $(SOC_TERM_PATH) clean
144
145################################################################################
146# xtest / optee_test
147################################################################################
148xtest: xtest-common
149
150xtest-clean: xtest-clean-common
151
152xtest-patch: xtest-patch-common
153
154################################################################################
Victor Chong8519bcf2016-07-15 08:43:03 +0100155# hello_world
156################################################################################
157helloworld: helloworld-common
158
159helloworld-clean: helloworld-clean-common
160
161################################################################################
Matt Maf37a7012016-07-08 10:02:23 +0800162# strace
163################################################################################
164strace:
165ifneq ("$(wildcard $(STRACE_PATH))","")
166 cd $(STRACE_PATH) && \
167 ./bootstrap && \
168 ./configure --host=aarch64-linux-gnu CC=$(CROSS_COMPILE_NS_USER)gcc && \
169 CC=$(CROSS_COMPILE_NS_USER)gcc $(MAKE)
170endif
171
172strace-clean:
173ifneq ("$(wildcard $(STRACE_PATH))","")
174 CC=$(CROSS_COMPILE_NS_USER)gcc \
175 $(MAKE) -C $(STRACE_PATH) clean && \
176 rm -f $(STRACE_PATH)/Makefile $(STRACE_PATH)/configure
177endif
178
179################################################################################
180# Root FS
181################################################################################
Etienne Carriere5e113512016-10-21 10:13:57 +0200182filelist-tee: filelist-tee-common
Matt Maf37a7012016-07-08 10:02:23 +0800183ifneq ("$(wildcard $(STRACE_PATH)/strace)","")
184 @echo "file /bin/strace $(STRACE_PATH)/strace 755 0 0" >> $(GEN_ROOTFS_FILELIST)
185endif
186
Etienne Carriere5e113512016-10-21 10:13:57 +0200187update_rootfs: update_rootfs-common
Matt Maf37a7012016-07-08 10:02:23 +0800188
189################################################################################
190# Run targets
191################################################################################
192define run-help
Matt Maf37a7012016-07-08 10:02:23 +0800193 @echo
Jerome Forissierd6970872017-01-31 15:16:21 +0100194 @echo \* QEMU is now waiting to start the execution
195 @echo \* Start execution with either a \'c\' followed by \<enter\> in the QEMU console or
196 @echo \* attach a debugger and continue from there.
197 @echo \*
198 @echo \* To run OP-TEE tests, use the xtest command in the \'Normal World\' terminal
199 @echo \* Enter \'xtest -h\' for help.
Matt Maf37a7012016-07-08 10:02:23 +0800200 @echo
Matt Maf37a7012016-07-08 10:02:23 +0800201endef
202
203define launch-terminal
204 @nc -z 127.0.0.1 $(1) || \
205 xterm -title $(2) -e $(BASH) -c "$(SOC_TERM_PATH)/soc_term $(1)" &
206endef
207
208define wait-for-ports
209 @while ! nc -z 127.0.0.1 $(1) || ! nc -z 127.0.0.1 $(2); do sleep 1; done
210endef
211
212.PHONY: run
213# This target enforces updating root fs etc
214run: all
215 $(MAKE) run-only
216
217.PHONY: run-only
218run-only:
219 $(call run-help)
220 $(call launch-terminal,54320,"Normal World")
221 $(call launch-terminal,54321,"Secure World")
222 $(call wait-for-ports,54320,54321)
223 cd $(ARM_TF_PATH)/build/qemu/release && \
224 $(QEMU_PATH)/aarch64-softmmu/qemu-system-aarch64 \
225 -nographic \
226 -serial tcp:localhost:54320 -serial tcp:localhost:54321 \
227 -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 +0100228 -s -S -semihosting-config enable,target=native -d unimp \
Matt Maf37a7012016-07-08 10:02:23 +0800229 -initrd $(GEN_ROOTFS_PATH)/filesystem.cpio.gz \
230 -kernel $(LINUX_PATH)/arch/arm64/boot/Image \
Igor Opaniuk97d05292016-10-26 14:46:14 +0300231 -append 'console=ttyAMA0,38400 keep_bootcon root=/dev/vda2' \
232 $(QEMU_EXTRA_ARGS)
Matt Maf37a7012016-07-08 10:02:23 +0800233
234ifneq ($(filter check,$(MAKECMDGOALS)),)
235CHECK_DEPS := all
236endif
237
238ifneq ($(TIMEOUT),)
239check-args := --timeout $(TIMEOUT)
240endif
241
242check: $(CHECK_DEPS)
243 expect qemu-check.exp -- $(check-args) || \
244 (if [ "$(DUMP_LOGS_ON_ERROR)" ]; then \
245 echo "== $$PWD/serial0.log:"; \
246 cat serial0.log; \
247 echo "== end of $$PWD/serial0.log:"; \
248 echo "== $$PWD/serial1.log:"; \
249 cat serial1.log; \
250 echo "== end of $$PWD/serial1.log:"; \
251 fi; false)
252
253check-only: check
254
255check-clean:
256 rm -f serial0.log serial1.log