blob: 1b1930e8bf50c0ea9f63e70224c93fd177175dfa [file] [log] [blame]
Joakim Bech427dd632015-05-04 15:52:33 +02001BASH := $(shell which bash)
2ROOT ?= $(subst /build/,,$(shell pwd)/)
3
4################################################################################
5# Paths to git projects and various binaries
6################################################################################
7LINUX_PATH ?= $(ROOT)/linux
8
9OPTEE_OS_PATH ?= $(ROOT)/optee_os
10OPTEE_OS_BIN ?= $(OPTEE_OS_PATH)/out/arm-plat-vexpress/core/tee.bin
11
12OPTEE_CLIENT_PATH ?= $(ROOT)/optee_client
13OPTEE_CLIENT_EXPORT ?= $(OPTEE_CLIENT_PATH)/out/export
14OPTEE_LINUXDRIVER_PATH ?= $(ROOT)/optee_linuxdriver
15
16OPTEE_TEST_PATH ?= $(ROOT)/optee_test
17OPTEE_TEST_OUT_PATH ?= $(ROOT)/out/optee_test
18
19GEN_ROOTFS_PATH ?= $(ROOT)/gen_rootfs
20GEN_ROOTFS_FILELIST ?= $(GEN_ROOTFS_PATH)/filelist-tee.txt
21
22BIOS_QEMU_PATH ?= $(ROOT)/bios_qemu_tz_arm
23
24QEMU_PATH ?= $(ROOT)/qemu
25
26SOC_TERM_PATH ?= $(ROOT)/soc_term
27
28################################################################################
29# defines, macros, configuration etc
30################################################################################
31define KERNEL_VERSION
32$(shell cd $(LINUX_PATH) && make kernelversion)
33endef
34
35CCACHE ?= $(shell which ccache) # Don't remove this comment (space is needed)
36
37################################################################################
38# Targets
39################################################################################
40all: bios-qemu linux optee-os optee-client optee-linuxdriver qemu soc-term xtest
41all-clean: bios-qemu-clean busybox-clean linux-clean optee-os-clean \
Jerome Forissierf080b5a2015-08-07 16:18:57 +020042 optee-client-clean optee-linuxdriver-clean qemu-clean soc-term-clean \
43 check-clean
Joakim Bech427dd632015-05-04 15:52:33 +020044
45-include toolchain.mk
46
47################################################################################
48# QEMU
49################################################################################
50define bios-qemu-common
51 make -C $(BIOS_QEMU_PATH) \
52 CROSS_COMPILE="$(CCACHE)$(AARCH32_CROSS_COMPILE)" \
53 O=$(ROOT)/out/bios-qemu \
54 BIOS_NSEC_BLOB=$(LINUX_PATH)/arch/arm/boot/zImage \
55 BIOS_NSEC_ROOTFS=$(GEN_ROOTFS_PATH)/filesystem.cpio.gz \
56 BIOS_SECURE_BLOB=$(OPTEE_OS_BIN) \
57 PLATFORM_FLAVOR=virt
58endef
59
60bios-qemu: linux update_rootfs optee-os
61 $(call bios-qemu-common)
62
63bios-qemu-clean:
64 $(call bios-qemu-common) clean
65
66qemu:
67 cd $(QEMU_PATH); ./configure --target-list=arm-softmmu --cc="$(CCACHE)gcc"
68 make -C $(QEMU_PATH) \
69 -j`getconf _NPROCESSORS_ONLN`
70
71qemu-clean:
72 make -C $(QEMU_PATH) distclean
73
74################################################################################
75# Busybox
76################################################################################
Jerome Forissier29406872015-08-07 17:25:58 +020077busybox: linux
Joakim Bech427dd632015-05-04 15:52:33 +020078 @if [ ! -d "$(GEN_ROOTFS_PATH)/build" ]; then \
79 cd $(GEN_ROOTFS_PATH); \
80 CC_DIR=$(AARCH32_PATH) \
81 PATH=${PATH}:$(LINUX_PATH)/usr \
82 $(GEN_ROOTFS_PATH)/generate-cpio-rootfs.sh vexpress; \
83 fi
84
85busybox-clean:
86 cd $(GEN_ROOTFS_PATH); \
87 $(GEN_ROOTFS_PATH)/generate-cpio-rootfs.sh vexpress clean
88
89
90################################################################################
91# Linux kernel
92################################################################################
93$(LINUX_PATH)/.config:
94 # Temporary fix until we have the driver integrated in the kernel
95 sed -i '/config ARM$$/a select DMA_SHARED_BUFFER' $(LINUX_PATH)/arch/arm/Kconfig;
96 make -C $(LINUX_PATH) ARCH=arm vexpress_defconfig
97
98linux-defconfig: $(LINUX_PATH)/.config
99
100linux: linux-defconfig
101 make -C $(LINUX_PATH) \
102 CROSS_COMPILE="$(CCACHE)$(AARCH32_CROSS_COMPILE)" \
103 LOCALVERSION= \
104 ARCH=arm \
105 -j`getconf _NPROCESSORS_ONLN`
106
107linux-clean:
108 make -C $(LINUX_PATH) \
109 CROSS_COMPILE="$(CCACHE)$(AARCH32_CROSS_COMPILE)" \
110 mrproper
111
112################################################################################
113# OP-TEE
114################################################################################
115optee-os:
116 make -C $(OPTEE_OS_PATH) \
117 CROSS_COMPILE="$(CCACHE)$(AARCH32_CROSS_COMPILE)" \
118 PLATFORM=vexpress \
119 PLATFORM_FLAVOR=qemu_virt \
120 CFG_TEE_CORE_LOG_LEVEL=3 \
121 DEBUG=1 \
122 -j`getconf _NPROCESSORS_ONLN`
123
124optee-os-clean:
125 make -C $(OPTEE_OS_PATH) \
126 PLATFORM=vexpress \
127 PLATFORM_FLAVOR=qemu_virt \
128 clean
129
130optee-client:
131 make -C $(OPTEE_CLIENT_PATH) \
132 CROSS_COMPILE="$(CCACHE)$(AARCH32_CROSS_COMPILE)" \
133 -j`getconf _NPROCESSORS_ONLN`
134
135optee-client-clean:
136 make -C $(OPTEE_CLIENT_PATH) clean
137
138optee-linuxdriver: linux
139 make -C $(LINUX_PATH) \
140 V=0 \
141 ARCH=arm \
142 CROSS_COMPILE="$(CCACHE)$(AARCH32_CROSS_COMPILE)" \
143 LOCALVERSION= \
144 M=$(OPTEE_LINUXDRIVER_PATH) modules
145
146optee-linuxdriver-clean:
147 make -C $(LINUX_PATH) \
148 M=$(OPTEE_LINUXDRIVER_PATH) clean
149
150################################################################################
151# Soc-term
152################################################################################
153soc-term:
154 make -C $(SOC_TERM_PATH)
155
156soc-term-clean:
157 make -C $(SOC_TERM_PATH) clean
158
159################################################################################
160# xtest / optee_test
161################################################################################
162xtest: optee-os optee-client
163 @if [ -d "$(OPTEE_TEST_PATH)" ]; then \
164 make -C $(OPTEE_TEST_PATH) \
165 -j`getconf _NPROCESSORS_ONLN` \
166 CROSS_COMPILE_HOST="$(CCACHE)$(AARCH32_CROSS_COMPILE)" \
167 CROSS_COMPILE_TA="$(CCACHE)$(AARCH32_CROSS_COMPILE)" \
168 TA_DEV_KIT_DIR=$(OPTEE_OS_PATH)/out/arm-plat-vexpress/export-user_ta \
Pascal Brandeab35592015-07-10 15:07:02 +0200169 CFG_ARM32=y \
170 CFG_DEV_PATH=$(ROOT) \
Joakim Bech427dd632015-05-04 15:52:33 +0200171 O=$(OPTEE_TEST_OUT_PATH); \
172 fi
173
Pascal Brandeab35592015-07-10 15:07:02 +0200174xtest-clean:
175 @if [ -d "$(OPTEE_TEST_PATH)" ]; then \
176 make -C $(OPTEE_TEST_PATH) \
177 -j`getconf _NPROCESSORS_ONLN` \
178 CROSS_COMPILE_HOST="$(CCACHE)$(AARCH32_CROSS_COMPILE)" \
179 CROSS_COMPILE_TA="$(CCACHE)$(AARCH32_CROSS_COMPILE)" \
180 TA_DEV_KIT_DIR=$(OPTEE_OS_PATH)/out/arm-plat-vexpress/export-user_ta \
181 CFG_ARM32=y \
182 CFG_DEV_PATH=$(ROOT) \
183 O=$(OPTEE_TEST_OUT_PATH) \
184 clean; \
185 fi
186
187xtest-patch: optee-os optee-client
188 @if [ -d "$(OPTEE_TEST_PATH)" ]; then \
189 make -C $(OPTEE_TEST_PATH) \
190 -j`getconf _NPROCESSORS_ONLN` \
191 CROSS_COMPILE_HOST="$(CCACHE)$(AARCH32_CROSS_COMPILE)" \
192 CROSS_COMPILE_TA="$(CCACHE)$(AARCH32_CROSS_COMPILE)" \
193 TA_DEV_KIT_DIR=$(OPTEE_OS_PATH)/out/arm-plat-vexpress/export-user_ta \
194 CFG_ARM32=y \
195 CFG_DEV_PATH=$(ROOT) \
196 CFG_OPTEE_TEST_PATH=$(OPTEE_TEST_PATH) \
197 O=$(OPTEE_TEST_OUT_PATH) \
198 patch; \
199 fi
200
Joakim Bech427dd632015-05-04 15:52:33 +0200201################################################################################
202# Root FS
203################################################################################
204.PHONY: filelist-tee
205filelist-tee:
206 @echo "# xtest / optee_test" > $(GEN_ROOTFS_FILELIST)
207 @find $(OPTEE_TEST_OUT_PATH) -type f -name "xtest" | sed 's/\(.*\)/file \/bin\/xtest \1 755 0 0/g' >> $(GEN_ROOTFS_FILELIST)
208 @echo "# TAs" >> $(GEN_ROOTFS_FILELIST)
209 @echo "dir /lib/optee_armtz 755 0 0" >> $(GEN_ROOTFS_FILELIST)
210 @find $(OPTEE_TEST_OUT_PATH) -name "*.ta" | \
211 sed 's/\(.*\)\/\(.*\)/file \/lib\/optee_armtz\/\2 \1\/\2 444 0 0/g' >> $(GEN_ROOTFS_FILELIST)
212 @echo "# Secure storage dig" >> $(GEN_ROOTFS_FILELIST)
213 @echo "dir /data 755 0 0" >> $(GEN_ROOTFS_FILELIST)
214 @echo "dir /data/tee 755 0 0" >> $(GEN_ROOTFS_FILELIST)
215 @echo "# OP-TEE device" >> $(GEN_ROOTFS_FILELIST)
216 @echo "dir /lib/modules 755 0 0" >> $(GEN_ROOTFS_FILELIST)
217 @echo "dir /lib/modules/$(call KERNEL_VERSION) 755 0 0" >> $(GEN_ROOTFS_FILELIST)
218 @echo "file /lib/modules/$(call KERNEL_VERSION)/optee.ko $(OPTEE_LINUXDRIVER_PATH)/core/optee.ko 755 0 0" >> $(GEN_ROOTFS_FILELIST)
219 @echo "file /lib/modules/$(call KERNEL_VERSION)/optee_armtz.ko $(OPTEE_LINUXDRIVER_PATH)/armtz/optee_armtz.ko 755 0 0" >> $(GEN_ROOTFS_FILELIST)
220 @echo "# OP-TEE Client" >> $(GEN_ROOTFS_FILELIST)
221 @echo "file /bin/tee-supplicant $(OPTEE_CLIENT_EXPORT)/bin/tee-supplicant 755 0 0" >> $(GEN_ROOTFS_FILELIST)
222 @echo "dir /lib/arm-linux-gnueabihf 755 0 0" >> $(GEN_ROOTFS_FILELIST)
223 @echo "file /lib/arm-linux-gnueabihf/libteec.so.1.0 $(OPTEE_CLIENT_EXPORT)/lib/libteec.so.1.0 755 0 0" >> $(GEN_ROOTFS_FILELIST)
224 @echo "slink /lib/arm-linux-gnueabihf/libteec.so.1 libteec.so.1.0 755 0 0" >> $(GEN_ROOTFS_FILELIST)
225 @echo "slink /lib/arm-linux-gnueabihf/libteec.so libteec.so.1 755 0 0" >> $(GEN_ROOTFS_FILELIST)
226
227update_rootfs: busybox optee-client optee-linuxdriver xtest filelist-tee
228 cat $(GEN_ROOTFS_PATH)/filelist-final.txt $(GEN_ROOTFS_PATH)/filelist-tee.txt > $(GEN_ROOTFS_PATH)/filelist.tmp
229 cd $(GEN_ROOTFS_PATH); \
230 $(LINUX_PATH)/usr/gen_init_cpio $(GEN_ROOTFS_PATH)/filelist.tmp | gzip > $(GEN_ROOTFS_PATH)/filesystem.cpio.gz
231
232################################################################################
233# Run targets
234################################################################################
235define run-help
236 @echo "Run QEMU"
237 @echo QEMU is now waiting to start the execution
238 @echo Start execution with either a \'c\' followed by \<enter\> in the QEMU console or
239 @echo attach a debugger and continue from there.
240 @echo
241 @echo To run xtest paste the following on the serial 0 prompt
242 @echo modprobe optee_armtz
243 @echo sleep 0.1
244 @echo tee-supplicant\&
245 @echo sleep 0.1
246 @echo xtest
247 @echo
248 @echo To run a single test case replace the xtest command with for instance
249 @echo xtest 2001
250endef
251
252.PHONY: run
253# This target enforces updating root fs etc
254run: | bios-qemu run-only
255
256.PHONY: run-only
257run-only:
258 $(call run-help)
259 @gnome-terminal -e "$(BASH) -c '$(SOC_TERM_PATH)/soc_term 54320; exec /bin/bash -i'" --title="Normal world"
260 @gnome-terminal -e "$(BASH) -c '$(SOC_TERM_PATH)/soc_term 54321; exec /bin/bash -i'" --title="Secure world"
261 @sleep 1
262 $(QEMU_PATH)/arm-softmmu/qemu-system-arm \
263 -nographic \
264 -serial tcp:localhost:54320 -serial tcp:localhost:54321 \
265 -s -S -machine virt -cpu cortex-a15 \
266 -m 1057 \
267 -bios $(ROOT)/out/bios-qemu/bios.bin
268
Jerome Forissierf080b5a2015-08-07 16:18:57 +0200269
270ifneq ($(filter check,$(MAKECMDGOALS)),)
271CHECK_DEPS := all
272endif
273
274check: $(CHECK_DEPS)
275 expect qemu-check.exp -- \
276 --bios $(ROOT)/out/bios-qemu/bios.bin
277
278check-only: check
279
280check-clean:
281 rm -f serial0.log serial1.log