blob: 6ae28e7e4f7a3f9ad1eb772d60dc885572923ca4 [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################################################################################
Jens Wiklanderef1f69d2018-03-15 17:27:39 +010031all: arm-tf qemu soc-term linux buildroot
32clean: arm-tf-clean edk2-clean linux-clean optee-os-clean qemu-clean \
33 soc-term-clean check-clean buildroot-clean
Matt Maf37a7012016-07-08 10:02:23 +080034
Victor Chong7a716512017-09-11 15:18:44 +010035include toolchain.mk
Matt Maf37a7012016-07-08 10:02:23 +080036
37################################################################################
38# ARM Trusted Firmware
39################################################################################
40ARM_TF_EXPORTS ?= \
Matt Maf37a7012016-07-08 10:02:23 +080041 CROSS_COMPILE="$(CCACHE)$(AARCH64_CROSS_COMPILE)"
42
43ARM_TF_FLAGS ?= \
Jens Wiklander177d0f22017-09-01 09:10:08 +020044 BL32=$(OPTEE_OS_HEADER_V2_BIN) \
45 BL32_EXTRA1=$(OPTEE_OS_PAGER_V2_BIN) \
46 BL32_EXTRA2=$(OPTEE_OS_PAGEABLE_V2_BIN) \
Matt Maf37a7012016-07-08 10:02:23 +080047 BL33=$(EDK2_BIN) \
48 ARM_TSP_RAM_LOCATION=tdram \
49 PLAT=qemu \
50 DEBUG=0 \
51 LOG_LEVEL=50 \
Matt Maf37a7012016-07-08 10:02:23 +080052 BL32_RAM_LOCATION=tdram \
53 SPD=opteed
54
55arm-tf: optee-os edk2
56 $(ARM_TF_EXPORTS) $(MAKE) -C $(ARM_TF_PATH) $(ARM_TF_FLAGS) all fip
Jens Wiklander177d0f22017-09-01 09:10:08 +020057 ln -sf $(OPTEE_OS_HEADER_V2_BIN) \
58 $(ARM_TF_PATH)/build/qemu/release/bl32.bin
59 ln -sf $(OPTEE_OS_PAGER_V2_BIN) \
60 $(ARM_TF_PATH)/build/qemu/release/bl32_extra1.bin
61 ln -sf $(OPTEE_OS_PAGEABLE_V2_BIN) \
62 $(ARM_TF_PATH)/build/qemu/release/bl32_extra2.bin
Jens Wiklander2795cfe2017-03-30 08:22:50 +020063 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################################################################################
Jens Wiklander2795cfe2017-03-30 08:22:50 +020080# EDK2 / Tianocore
81################################################################################
Joakim Bechc94e95a2017-11-25 11:06:50 +010082define edk2-env
83 export WORKSPACE=$(EDK2_PATH)
84endef
85
Jens Wiklander2795cfe2017-03-30 08:22:50 +020086define edk2-call
Joakim Becha6416ed2018-05-23 08:34:59 +020087 GCC49_AARCH64_PREFIX=$(AARCH64_CROSS_COMPILE) \
Jerome Forissier571e2da2018-02-19 09:01:21 +000088 build -n `getconf _NPROCESSORS_ONLN` -a AARCH64 \
89 -t GCC49 -p ArmVirtPkg/ArmVirtQemuKernel.dsc \
90 -b DEBUG
Jens Wiklander2795cfe2017-03-30 08:22:50 +020091endef
92
93edk2: edk2-common
94
95edk2-clean: edk2-clean-common
96
97
98
99################################################################################
Matt Maf37a7012016-07-08 10:02:23 +0800100# Linux kernel
101################################################################################
102LINUX_DEFCONFIG_COMMON_ARCH := arm64
103LINUX_DEFCONFIG_COMMON_FILES := \
104 $(LINUX_PATH)/arch/arm64/configs/defconfig \
105 $(CURDIR)/kconfigs/qemu.conf
106
107linux-defconfig: $(LINUX_PATH)/.config
108
109LINUX_COMMON_FLAGS += ARCH=arm64
110
111linux: linux-common
112
113linux-defconfig-clean: linux-defconfig-clean-common
114
115LINUX_CLEAN_COMMON_FLAGS += ARCH=arm64
116
117linux-clean: linux-clean-common
118
119LINUX_CLEANER_COMMON_FLAGS += ARCH=arm64
120
121linux-cleaner: linux-cleaner-common
122
123################################################################################
124# OP-TEE
125################################################################################
126OPTEE_OS_COMMON_FLAGS += PLATFORM=vexpress-qemu_armv8a CFG_ARM64_core=y \
Etienne Carrierecc23f6b2016-10-21 10:16:00 +0200127 DEBUG=0 CFG_PM_DEBUG=0
Matt Maf37a7012016-07-08 10:02:23 +0800128optee-os: optee-os-common
129
130OPTEE_OS_CLEAN_COMMON_FLAGS += PLATFORM=vexpress-qemu_armv8a
131optee-os-clean: optee-os-clean-common
132
133optee-client: optee-client-common
134
135optee-client-clean: optee-client-clean-common
136
137################################################################################
138# Soc-term
139################################################################################
140soc-term:
141 $(MAKE) -C $(SOC_TERM_PATH)
142
143soc-term-clean:
144 $(MAKE) -C $(SOC_TERM_PATH) clean
145
Matt Maf37a7012016-07-08 10:02:23 +0800146
147################################################################################
148# Run targets
149################################################################################
Matt Maf37a7012016-07-08 10:02:23 +0800150.PHONY: run
151# This target enforces updating root fs etc
152run: all
153 $(MAKE) run-only
154
155.PHONY: run-only
156run-only:
Jerome Forissierefd56292017-01-31 17:46:10 +0100157 $(call check-terminal)
Matt Maf37a7012016-07-08 10:02:23 +0800158 $(call run-help)
159 $(call launch-terminal,54320,"Normal World")
160 $(call launch-terminal,54321,"Secure World")
161 $(call wait-for-ports,54320,54321)
162 cd $(ARM_TF_PATH)/build/qemu/release && \
163 $(QEMU_PATH)/aarch64-softmmu/qemu-system-aarch64 \
164 -nographic \
165 -serial tcp:localhost:54320 -serial tcp:localhost:54321 \
166 -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 +0100167 -s -S -semihosting-config enable,target=native -d unimp \
Jens Wiklanderef1f69d2018-03-15 17:27:39 +0100168 -initrd $(ROOT)/out-br/images/rootfs.cpio.gz \
Jens Wiklander2795cfe2017-03-30 08:22:50 +0200169 -kernel $(LINUX_PATH)/arch/arm64/boot/Image -no-acpi \
Igor Opaniuk97d05292016-10-26 14:46:14 +0300170 -append 'console=ttyAMA0,38400 keep_bootcon root=/dev/vda2' \
171 $(QEMU_EXTRA_ARGS)
Matt Maf37a7012016-07-08 10:02:23 +0800172
173ifneq ($(filter check,$(MAKECMDGOALS)),)
174CHECK_DEPS := all
175endif
176
177ifneq ($(TIMEOUT),)
178check-args := --timeout $(TIMEOUT)
179endif
180
181check: $(CHECK_DEPS)
182 expect qemu-check.exp -- $(check-args) || \
183 (if [ "$(DUMP_LOGS_ON_ERROR)" ]; then \
184 echo "== $$PWD/serial0.log:"; \
185 cat serial0.log; \
186 echo "== end of $$PWD/serial0.log:"; \
187 echo "== $$PWD/serial1.log:"; \
188 cat serial1.log; \
189 echo "== end of $$PWD/serial1.log:"; \
190 fi; false)
191
192check-only: check
193
194check-clean:
195 rm -f serial0.log serial1.log