blob: fdc785f36006a8b1bd43feaff0904e2cf05d9803 [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################################################################################
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
Jens Wiklander2795cfe2017-03-30 08:22:50 +020035all: arm-tf edk2 qemu soc-term linux strace update_rootfs
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 \
38 soc-term-clean check-clean strace-clean
39
40-include toolchain.mk
41
42################################################################################
43# ARM Trusted Firmware
44################################################################################
45ARM_TF_EXPORTS ?= \
46 CFLAGS="-O0 -gdwarf-2" \
47 CROSS_COMPILE="$(CCACHE)$(AARCH64_CROSS_COMPILE)"
48
49ARM_TF_FLAGS ?= \
50 BL32=$(OPTEE_OS_BIN) \
51 BL33=$(EDK2_BIN) \
52 ARM_TSP_RAM_LOCATION=tdram \
53 PLAT=qemu \
54 DEBUG=0 \
55 LOG_LEVEL=50 \
56 ERROR_DEPRECATED=1 \
57 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 Wiklander2795cfe2017-03-30 08:22:50 +020062 ln -sf $(OPTEE_OS_BIN) $(ARM_TF_PATH)/build/qemu/release/bl32.bin
63 ln -sf $(EDK2_BIN) $(ARM_TF_PATH)/build/qemu/release/bl33.bin
Matt Maf37a7012016-07-08 10:02:23 +080064
65arm-tf-clean:
66 $(ARM_TF_EXPORTS) $(MAKE) -C $(ARM_TF_PATH) $(ARM_TF_FLAGS) clean
67
Matt Maf37a7012016-07-08 10:02:23 +080068################################################################################
69# QEMU
70################################################################################
71qemu:
Igor Opaniuk97d05292016-10-26 14:46:14 +030072 cd $(QEMU_PATH); ./configure --target-list=aarch64-softmmu\
73 $(QEMU_CONFIGURE_PARAMS_COMMON)
Matt Maf37a7012016-07-08 10:02:23 +080074 $(MAKE) -C $(QEMU_PATH)
75
76qemu-clean:
77 $(MAKE) -C $(QEMU_PATH) distclean
78
79################################################################################
80# Busybox
81################################################################################
82BUSYBOX_COMMON_TARGET = fvp
83BUSYBOX_CLEAN_COMMON_TARGET = fvp clean
84BUSYBOX_COMMON_CCDIR = $(AARCH64_PATH)
85
86busybox: busybox-common
87
88busybox-clean: busybox-clean-common
89
90busybox-cleaner: busybox-cleaner-common
91
92################################################################################
Jens Wiklander2795cfe2017-03-30 08:22:50 +020093# EDK2 / Tianocore
94################################################################################
95define edk2-call
96 GCC49_AARCH64_PREFIX=$(LEGACY_AARCH64_CROSS_COMPILE) \
Joakim Bechb7047902017-04-06 00:20:15 +020097 $(MAKE) -j1 -C $(EDK2_PATH) \
98 -f ArmPlatformPkg/Scripts/Makefile EDK2_ARCH=AARCH64 \
99 EDK2_DSC=ArmVirtPkg/ArmVirtQemuKernel.dsc \
100 EDK2_TOOLCHAIN=GCC49 EDK2_BUILD=DEBUG \
101 EDK2_MACROS="-n 6"
Jens Wiklander2795cfe2017-03-30 08:22:50 +0200102endef
103
104edk2: edk2-common
105
106edk2-clean: edk2-clean-common
107
108
109
110################################################################################
Matt Maf37a7012016-07-08 10:02:23 +0800111# Linux kernel
112################################################################################
113LINUX_DEFCONFIG_COMMON_ARCH := arm64
114LINUX_DEFCONFIG_COMMON_FILES := \
115 $(LINUX_PATH)/arch/arm64/configs/defconfig \
116 $(CURDIR)/kconfigs/qemu.conf
117
118linux-defconfig: $(LINUX_PATH)/.config
119
120LINUX_COMMON_FLAGS += ARCH=arm64
121
122linux: linux-common
123
124linux-defconfig-clean: linux-defconfig-clean-common
125
126LINUX_CLEAN_COMMON_FLAGS += ARCH=arm64
127
128linux-clean: linux-clean-common
129
130LINUX_CLEANER_COMMON_FLAGS += ARCH=arm64
131
132linux-cleaner: linux-cleaner-common
133
134################################################################################
135# OP-TEE
136################################################################################
137OPTEE_OS_COMMON_FLAGS += PLATFORM=vexpress-qemu_armv8a CFG_ARM64_core=y \
Etienne Carrierecc23f6b2016-10-21 10:16:00 +0200138 DEBUG=0 CFG_PM_DEBUG=0
Matt Maf37a7012016-07-08 10:02:23 +0800139optee-os: optee-os-common
140
141OPTEE_OS_CLEAN_COMMON_FLAGS += PLATFORM=vexpress-qemu_armv8a
142optee-os-clean: optee-os-clean-common
143
144optee-client: optee-client-common
145
146optee-client-clean: optee-client-clean-common
147
148################################################################################
149# Soc-term
150################################################################################
151soc-term:
152 $(MAKE) -C $(SOC_TERM_PATH)
153
154soc-term-clean:
155 $(MAKE) -C $(SOC_TERM_PATH) clean
156
157################################################################################
158# xtest / optee_test
159################################################################################
160xtest: xtest-common
161
162xtest-clean: xtest-clean-common
163
164xtest-patch: xtest-patch-common
165
166################################################################################
Victor Chong8519bcf2016-07-15 08:43:03 +0100167# hello_world
168################################################################################
169helloworld: helloworld-common
170
171helloworld-clean: helloworld-clean-common
172
173################################################################################
Matt Maf37a7012016-07-08 10:02:23 +0800174# strace
175################################################################################
176strace:
177ifneq ("$(wildcard $(STRACE_PATH))","")
178 cd $(STRACE_PATH) && \
179 ./bootstrap && \
180 ./configure --host=aarch64-linux-gnu CC=$(CROSS_COMPILE_NS_USER)gcc && \
181 CC=$(CROSS_COMPILE_NS_USER)gcc $(MAKE)
182endif
183
184strace-clean:
185ifneq ("$(wildcard $(STRACE_PATH))","")
186 CC=$(CROSS_COMPILE_NS_USER)gcc \
187 $(MAKE) -C $(STRACE_PATH) clean && \
188 rm -f $(STRACE_PATH)/Makefile $(STRACE_PATH)/configure
189endif
190
191################################################################################
Igor Opaniuk4a2bf9a2017-07-04 22:30:48 +0300192# benchmark
193################################################################################
194benchmark-app: benchmark-app-common
195
196benchmark-app-clean: benchmark-app-clean-common
197
198################################################################################
Matt Maf37a7012016-07-08 10:02:23 +0800199# Root FS
200################################################################################
Etienne Carriere5e113512016-10-21 10:13:57 +0200201filelist-tee: filelist-tee-common
Matt Maf37a7012016-07-08 10:02:23 +0800202ifneq ("$(wildcard $(STRACE_PATH)/strace)","")
203 @echo "file /bin/strace $(STRACE_PATH)/strace 755 0 0" >> $(GEN_ROOTFS_FILELIST)
204endif
205
Etienne Carriere5e113512016-10-21 10:13:57 +0200206update_rootfs: update_rootfs-common
Matt Maf37a7012016-07-08 10:02:23 +0800207
208################################################################################
209# Run targets
210################################################################################
Matt Maf37a7012016-07-08 10:02:23 +0800211.PHONY: run
212# This target enforces updating root fs etc
213run: all
214 $(MAKE) run-only
215
216.PHONY: run-only
217run-only:
Jerome Forissierefd56292017-01-31 17:46:10 +0100218 $(call check-terminal)
Matt Maf37a7012016-07-08 10:02:23 +0800219 $(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 \
Jens Wiklander2795cfe2017-03-30 08:22:50 +0200230 -kernel $(LINUX_PATH)/arch/arm64/boot/Image -no-acpi \
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