blob: 22e1da89f2a7eeae787725796a0296f0c46660b0 [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################################################################################
Jens Wiklander2795cfe2017-03-30 08:22:50 +020031all: arm-tf edk2 qemu soc-term linux strace update_rootfs
Victor Chong5fc1f852017-05-22 07:30:47 +010032clean: arm-tf-clean busybox-clean edk2-clean linux-clean \
Matt Maf37a7012016-07-08 10:02:23 +080033 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
Jens Wiklander2795cfe2017-03-30 08:22:50 +020058 ln -sf $(OPTEE_OS_BIN) $(ARM_TF_PATH)/build/qemu/release/bl32.bin
59 ln -sf $(EDK2_BIN) $(ARM_TF_PATH)/build/qemu/release/bl33.bin
Matt Maf37a7012016-07-08 10:02:23 +080060
61arm-tf-clean:
62 $(ARM_TF_EXPORTS) $(MAKE) -C $(ARM_TF_PATH) $(ARM_TF_FLAGS) clean
63
Matt Maf37a7012016-07-08 10:02:23 +080064################################################################################
65# QEMU
66################################################################################
67qemu:
Igor Opaniuk97d05292016-10-26 14:46:14 +030068 cd $(QEMU_PATH); ./configure --target-list=aarch64-softmmu\
69 $(QEMU_CONFIGURE_PARAMS_COMMON)
Matt Maf37a7012016-07-08 10:02:23 +080070 $(MAKE) -C $(QEMU_PATH)
71
72qemu-clean:
73 $(MAKE) -C $(QEMU_PATH) distclean
74
75################################################################################
76# Busybox
77################################################################################
78BUSYBOX_COMMON_TARGET = fvp
79BUSYBOX_CLEAN_COMMON_TARGET = fvp clean
80BUSYBOX_COMMON_CCDIR = $(AARCH64_PATH)
81
82busybox: busybox-common
83
84busybox-clean: busybox-clean-common
85
86busybox-cleaner: busybox-cleaner-common
87
88################################################################################
Jens Wiklander2795cfe2017-03-30 08:22:50 +020089# EDK2 / Tianocore
90################################################################################
91define edk2-call
92 GCC49_AARCH64_PREFIX=$(LEGACY_AARCH64_CROSS_COMPILE) \
Joakim Bechb7047902017-04-06 00:20:15 +020093 $(MAKE) -j1 -C $(EDK2_PATH) \
94 -f ArmPlatformPkg/Scripts/Makefile EDK2_ARCH=AARCH64 \
95 EDK2_DSC=ArmVirtPkg/ArmVirtQemuKernel.dsc \
96 EDK2_TOOLCHAIN=GCC49 EDK2_BUILD=DEBUG \
97 EDK2_MACROS="-n 6"
Jens Wiklander2795cfe2017-03-30 08:22:50 +020098endef
99
100edk2: edk2-common
101
102edk2-clean: edk2-clean-common
103
104
105
106################################################################################
Matt Maf37a7012016-07-08 10:02:23 +0800107# Linux kernel
108################################################################################
109LINUX_DEFCONFIG_COMMON_ARCH := arm64
110LINUX_DEFCONFIG_COMMON_FILES := \
111 $(LINUX_PATH)/arch/arm64/configs/defconfig \
112 $(CURDIR)/kconfigs/qemu.conf
113
114linux-defconfig: $(LINUX_PATH)/.config
115
116LINUX_COMMON_FLAGS += ARCH=arm64
117
118linux: linux-common
119
120linux-defconfig-clean: linux-defconfig-clean-common
121
122LINUX_CLEAN_COMMON_FLAGS += ARCH=arm64
123
124linux-clean: linux-clean-common
125
126LINUX_CLEANER_COMMON_FLAGS += ARCH=arm64
127
128linux-cleaner: linux-cleaner-common
129
130################################################################################
131# OP-TEE
132################################################################################
133OPTEE_OS_COMMON_FLAGS += PLATFORM=vexpress-qemu_armv8a CFG_ARM64_core=y \
Etienne Carrierecc23f6b2016-10-21 10:16:00 +0200134 DEBUG=0 CFG_PM_DEBUG=0
Matt Maf37a7012016-07-08 10:02:23 +0800135optee-os: optee-os-common
136
137OPTEE_OS_CLEAN_COMMON_FLAGS += PLATFORM=vexpress-qemu_armv8a
138optee-os-clean: optee-os-clean-common
139
140optee-client: optee-client-common
141
142optee-client-clean: optee-client-clean-common
143
144################################################################################
145# Soc-term
146################################################################################
147soc-term:
148 $(MAKE) -C $(SOC_TERM_PATH)
149
150soc-term-clean:
151 $(MAKE) -C $(SOC_TERM_PATH) clean
152
153################################################################################
154# xtest / optee_test
155################################################################################
156xtest: xtest-common
157
158xtest-clean: xtest-clean-common
159
160xtest-patch: xtest-patch-common
161
162################################################################################
Victor Chong8519bcf2016-07-15 08:43:03 +0100163# hello_world
164################################################################################
165helloworld: helloworld-common
166
167helloworld-clean: helloworld-clean-common
168
169################################################################################
Matt Maf37a7012016-07-08 10:02:23 +0800170# strace
171################################################################################
172strace:
173ifneq ("$(wildcard $(STRACE_PATH))","")
174 cd $(STRACE_PATH) && \
175 ./bootstrap && \
176 ./configure --host=aarch64-linux-gnu CC=$(CROSS_COMPILE_NS_USER)gcc && \
177 CC=$(CROSS_COMPILE_NS_USER)gcc $(MAKE)
178endif
179
180strace-clean:
181ifneq ("$(wildcard $(STRACE_PATH))","")
182 CC=$(CROSS_COMPILE_NS_USER)gcc \
183 $(MAKE) -C $(STRACE_PATH) clean && \
184 rm -f $(STRACE_PATH)/Makefile $(STRACE_PATH)/configure
185endif
186
187################################################################################
188# Root FS
189################################################################################
Etienne Carriere5e113512016-10-21 10:13:57 +0200190filelist-tee: filelist-tee-common
Matt Maf37a7012016-07-08 10:02:23 +0800191ifneq ("$(wildcard $(STRACE_PATH)/strace)","")
192 @echo "file /bin/strace $(STRACE_PATH)/strace 755 0 0" >> $(GEN_ROOTFS_FILELIST)
193endif
194
Etienne Carriere5e113512016-10-21 10:13:57 +0200195update_rootfs: update_rootfs-common
Matt Maf37a7012016-07-08 10:02:23 +0800196
197################################################################################
198# Run targets
199################################################################################
Matt Maf37a7012016-07-08 10:02:23 +0800200.PHONY: run
201# This target enforces updating root fs etc
202run: all
203 $(MAKE) run-only
204
205.PHONY: run-only
206run-only:
Jerome Forissierefd56292017-01-31 17:46:10 +0100207 $(call check-terminal)
Matt Maf37a7012016-07-08 10:02:23 +0800208 $(call run-help)
209 $(call launch-terminal,54320,"Normal World")
210 $(call launch-terminal,54321,"Secure World")
211 $(call wait-for-ports,54320,54321)
212 cd $(ARM_TF_PATH)/build/qemu/release && \
213 $(QEMU_PATH)/aarch64-softmmu/qemu-system-aarch64 \
214 -nographic \
215 -serial tcp:localhost:54320 -serial tcp:localhost:54321 \
216 -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 +0100217 -s -S -semihosting-config enable,target=native -d unimp \
Matt Maf37a7012016-07-08 10:02:23 +0800218 -initrd $(GEN_ROOTFS_PATH)/filesystem.cpio.gz \
Jens Wiklander2795cfe2017-03-30 08:22:50 +0200219 -kernel $(LINUX_PATH)/arch/arm64/boot/Image -no-acpi \
Igor Opaniuk97d05292016-10-26 14:46:14 +0300220 -append 'console=ttyAMA0,38400 keep_bootcon root=/dev/vda2' \
221 $(QEMU_EXTRA_ARGS)
Matt Maf37a7012016-07-08 10:02:23 +0800222
223ifneq ($(filter check,$(MAKECMDGOALS)),)
224CHECK_DEPS := all
225endif
226
227ifneq ($(TIMEOUT),)
228check-args := --timeout $(TIMEOUT)
229endif
230
231check: $(CHECK_DEPS)
232 expect qemu-check.exp -- $(check-args) || \
233 (if [ "$(DUMP_LOGS_ON_ERROR)" ]; then \
234 echo "== $$PWD/serial0.log:"; \
235 cat serial0.log; \
236 echo "== end of $$PWD/serial0.log:"; \
237 echo "== $$PWD/serial1.log:"; \
238 cat serial1.log; \
239 echo "== end of $$PWD/serial1.log:"; \
240 fi; false)
241
242check-only: check
243
244check-clean:
245 rm -f serial0.log serial1.log