blob: 8d3fbc4abdff273f56be649ba2f45c71e1002978 [file] [log] [blame]
Pascal Brandd6536da2015-09-01 10:38:43 +02001-include common.mk
2
3################################################################################
4# Mandatory definition to use common.mk
5################################################################################
6CROSS_COMPILE_NS_USER ?= "$(CCACHE)$(AARCH32_CROSS_COMPILE)"
7CROSS_COMPILE_NS_KERNEL ?= "$(CCACHE)$(AARCH32_CROSS_COMPILE)"
8CROSS_COMPILE_S_USER ?= "$(CCACHE)$(AARCH32_CROSS_COMPILE)"
9CROSS_COMPILE_S_KERNEL ?= "$(CCACHE)$(AARCH32_CROSS_COMPILE)"
10OPTEE_OS_BIN ?= $(OPTEE_OS_PATH)/out/arm-plat-vexpress/core/tee.bin
11OPTEE_OS_TA_DEV_KIT_DIR ?= $(OPTEE_OS_PATH)/out/arm-plat-vexpress/export-user_ta
Joakim Bech427dd632015-05-04 15:52:33 +020012
13################################################################################
14# Paths to git projects and various binaries
15################################################################################
Pascal Brandd6536da2015-09-01 10:38:43 +020016GEN_ROOTFS_PATH ?= $(ROOT)/gen_rootfs
17GEN_ROOTFS_FILELIST ?= $(GEN_ROOTFS_PATH)/filelist-tee.txt
Joakim Bech427dd632015-05-04 15:52:33 +020018
19BIOS_QEMU_PATH ?= $(ROOT)/bios_qemu_tz_arm
Joakim Bech427dd632015-05-04 15:52:33 +020020QEMU_PATH ?= $(ROOT)/qemu
21
22SOC_TERM_PATH ?= $(ROOT)/soc_term
23
24################################################################################
25# defines, macros, configuration etc
26################################################################################
27define KERNEL_VERSION
Jerome Forissier5160d6a2015-08-17 17:55:49 +020028$(shell cd $(LINUX_PATH) && $(MAKE) --no-print-directory kernelversion)
Joakim Bech427dd632015-05-04 15:52:33 +020029endef
30
Joakim Bech427dd632015-05-04 15:52:33 +020031################################################################################
32# Targets
33################################################################################
34all: bios-qemu linux optee-os optee-client optee-linuxdriver qemu soc-term xtest
35all-clean: bios-qemu-clean busybox-clean linux-clean optee-os-clean \
Jerome Forissierf080b5a2015-08-07 16:18:57 +020036 optee-client-clean optee-linuxdriver-clean qemu-clean soc-term-clean \
37 check-clean
Joakim Bech427dd632015-05-04 15:52:33 +020038
39-include toolchain.mk
40
41################################################################################
42# QEMU
43################################################################################
44define bios-qemu-common
45 make -C $(BIOS_QEMU_PATH) \
46 CROSS_COMPILE="$(CCACHE)$(AARCH32_CROSS_COMPILE)" \
47 O=$(ROOT)/out/bios-qemu \
48 BIOS_NSEC_BLOB=$(LINUX_PATH)/arch/arm/boot/zImage \
49 BIOS_NSEC_ROOTFS=$(GEN_ROOTFS_PATH)/filesystem.cpio.gz \
50 BIOS_SECURE_BLOB=$(OPTEE_OS_BIN) \
51 PLATFORM_FLAVOR=virt
52endef
53
54bios-qemu: linux update_rootfs optee-os
55 $(call bios-qemu-common)
56
57bios-qemu-clean:
58 $(call bios-qemu-common) clean
59
60qemu:
61 cd $(QEMU_PATH); ./configure --target-list=arm-softmmu --cc="$(CCACHE)gcc"
62 make -C $(QEMU_PATH) \
63 -j`getconf _NPROCESSORS_ONLN`
64
65qemu-clean:
66 make -C $(QEMU_PATH) distclean
67
68################################################################################
69# Busybox
70################################################################################
Jerome Forissier29406872015-08-07 17:25:58 +020071busybox: linux
Joakim Bech427dd632015-05-04 15:52:33 +020072 @if [ ! -d "$(GEN_ROOTFS_PATH)/build" ]; then \
73 cd $(GEN_ROOTFS_PATH); \
74 CC_DIR=$(AARCH32_PATH) \
75 PATH=${PATH}:$(LINUX_PATH)/usr \
76 $(GEN_ROOTFS_PATH)/generate-cpio-rootfs.sh vexpress; \
77 fi
78
79busybox-clean:
80 cd $(GEN_ROOTFS_PATH); \
81 $(GEN_ROOTFS_PATH)/generate-cpio-rootfs.sh vexpress clean
82
83
84################################################################################
85# Linux kernel
86################################################################################
87$(LINUX_PATH)/.config:
88 # Temporary fix until we have the driver integrated in the kernel
89 sed -i '/config ARM$$/a select DMA_SHARED_BUFFER' $(LINUX_PATH)/arch/arm/Kconfig;
90 make -C $(LINUX_PATH) ARCH=arm vexpress_defconfig
91
92linux-defconfig: $(LINUX_PATH)/.config
93
94linux: linux-defconfig
95 make -C $(LINUX_PATH) \
96 CROSS_COMPILE="$(CCACHE)$(AARCH32_CROSS_COMPILE)" \
97 LOCALVERSION= \
98 ARCH=arm \
99 -j`getconf _NPROCESSORS_ONLN`
100
101linux-clean:
102 make -C $(LINUX_PATH) \
103 CROSS_COMPILE="$(CCACHE)$(AARCH32_CROSS_COMPILE)" \
104 mrproper
105
106################################################################################
107# OP-TEE
108################################################################################
109optee-os:
110 make -C $(OPTEE_OS_PATH) \
111 CROSS_COMPILE="$(CCACHE)$(AARCH32_CROSS_COMPILE)" \
112 PLATFORM=vexpress \
113 PLATFORM_FLAVOR=qemu_virt \
114 CFG_TEE_CORE_LOG_LEVEL=3 \
115 DEBUG=1 \
116 -j`getconf _NPROCESSORS_ONLN`
117
118optee-os-clean:
119 make -C $(OPTEE_OS_PATH) \
120 PLATFORM=vexpress \
121 PLATFORM_FLAVOR=qemu_virt \
122 clean
123
124optee-client:
125 make -C $(OPTEE_CLIENT_PATH) \
126 CROSS_COMPILE="$(CCACHE)$(AARCH32_CROSS_COMPILE)" \
127 -j`getconf _NPROCESSORS_ONLN`
128
129optee-client-clean:
130 make -C $(OPTEE_CLIENT_PATH) clean
131
132optee-linuxdriver: linux
133 make -C $(LINUX_PATH) \
134 V=0 \
135 ARCH=arm \
136 CROSS_COMPILE="$(CCACHE)$(AARCH32_CROSS_COMPILE)" \
137 LOCALVERSION= \
138 M=$(OPTEE_LINUXDRIVER_PATH) modules
139
140optee-linuxdriver-clean:
141 make -C $(LINUX_PATH) \
142 M=$(OPTEE_LINUXDRIVER_PATH) clean
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################################################################################
Pascal Brandd6536da2015-09-01 10:38:43 +0200156xtest:
157 $(MAKE) xtest-common CFG_ARM32=y
Joakim Bech427dd632015-05-04 15:52:33 +0200158
Pascal Brandeab35592015-07-10 15:07:02 +0200159xtest-clean:
Pascal Brandd6536da2015-09-01 10:38:43 +0200160 $(MAKE) xtest-clean-common CFG_ARM32=y
Pascal Brandeab35592015-07-10 15:07:02 +0200161
Pascal Brandd6536da2015-09-01 10:38:43 +0200162xtest-patch:
163 $(MAKE) xtest-patch-common CFG_ARM32=y
164
Pascal Brandeab35592015-07-10 15:07:02 +0200165
Joakim Bech427dd632015-05-04 15:52:33 +0200166################################################################################
167# Root FS
168################################################################################
169.PHONY: filelist-tee
170filelist-tee:
171 @echo "# xtest / optee_test" > $(GEN_ROOTFS_FILELIST)
172 @find $(OPTEE_TEST_OUT_PATH) -type f -name "xtest" | sed 's/\(.*\)/file \/bin\/xtest \1 755 0 0/g' >> $(GEN_ROOTFS_FILELIST)
173 @echo "# TAs" >> $(GEN_ROOTFS_FILELIST)
174 @echo "dir /lib/optee_armtz 755 0 0" >> $(GEN_ROOTFS_FILELIST)
175 @find $(OPTEE_TEST_OUT_PATH) -name "*.ta" | \
176 sed 's/\(.*\)\/\(.*\)/file \/lib\/optee_armtz\/\2 \1\/\2 444 0 0/g' >> $(GEN_ROOTFS_FILELIST)
177 @echo "# Secure storage dig" >> $(GEN_ROOTFS_FILELIST)
178 @echo "dir /data 755 0 0" >> $(GEN_ROOTFS_FILELIST)
179 @echo "dir /data/tee 755 0 0" >> $(GEN_ROOTFS_FILELIST)
180 @echo "# OP-TEE device" >> $(GEN_ROOTFS_FILELIST)
181 @echo "dir /lib/modules 755 0 0" >> $(GEN_ROOTFS_FILELIST)
182 @echo "dir /lib/modules/$(call KERNEL_VERSION) 755 0 0" >> $(GEN_ROOTFS_FILELIST)
183 @echo "file /lib/modules/$(call KERNEL_VERSION)/optee.ko $(OPTEE_LINUXDRIVER_PATH)/core/optee.ko 755 0 0" >> $(GEN_ROOTFS_FILELIST)
184 @echo "file /lib/modules/$(call KERNEL_VERSION)/optee_armtz.ko $(OPTEE_LINUXDRIVER_PATH)/armtz/optee_armtz.ko 755 0 0" >> $(GEN_ROOTFS_FILELIST)
185 @echo "# OP-TEE Client" >> $(GEN_ROOTFS_FILELIST)
186 @echo "file /bin/tee-supplicant $(OPTEE_CLIENT_EXPORT)/bin/tee-supplicant 755 0 0" >> $(GEN_ROOTFS_FILELIST)
187 @echo "dir /lib/arm-linux-gnueabihf 755 0 0" >> $(GEN_ROOTFS_FILELIST)
188 @echo "file /lib/arm-linux-gnueabihf/libteec.so.1.0 $(OPTEE_CLIENT_EXPORT)/lib/libteec.so.1.0 755 0 0" >> $(GEN_ROOTFS_FILELIST)
189 @echo "slink /lib/arm-linux-gnueabihf/libteec.so.1 libteec.so.1.0 755 0 0" >> $(GEN_ROOTFS_FILELIST)
190 @echo "slink /lib/arm-linux-gnueabihf/libteec.so libteec.so.1 755 0 0" >> $(GEN_ROOTFS_FILELIST)
191
192update_rootfs: busybox optee-client optee-linuxdriver xtest filelist-tee
193 cat $(GEN_ROOTFS_PATH)/filelist-final.txt $(GEN_ROOTFS_PATH)/filelist-tee.txt > $(GEN_ROOTFS_PATH)/filelist.tmp
194 cd $(GEN_ROOTFS_PATH); \
195 $(LINUX_PATH)/usr/gen_init_cpio $(GEN_ROOTFS_PATH)/filelist.tmp | gzip > $(GEN_ROOTFS_PATH)/filesystem.cpio.gz
196
197################################################################################
198# Run targets
199################################################################################
200define run-help
201 @echo "Run QEMU"
202 @echo QEMU is now waiting to start the execution
203 @echo Start execution with either a \'c\' followed by \<enter\> in the QEMU console or
204 @echo attach a debugger and continue from there.
205 @echo
206 @echo To run xtest paste the following on the serial 0 prompt
207 @echo modprobe optee_armtz
208 @echo sleep 0.1
209 @echo tee-supplicant\&
210 @echo sleep 0.1
211 @echo xtest
212 @echo
213 @echo To run a single test case replace the xtest command with for instance
214 @echo xtest 2001
215endef
216
217.PHONY: run
218# This target enforces updating root fs etc
219run: | bios-qemu run-only
220
221.PHONY: run-only
222run-only:
223 $(call run-help)
224 @gnome-terminal -e "$(BASH) -c '$(SOC_TERM_PATH)/soc_term 54320; exec /bin/bash -i'" --title="Normal world"
225 @gnome-terminal -e "$(BASH) -c '$(SOC_TERM_PATH)/soc_term 54321; exec /bin/bash -i'" --title="Secure world"
226 @sleep 1
227 $(QEMU_PATH)/arm-softmmu/qemu-system-arm \
228 -nographic \
229 -serial tcp:localhost:54320 -serial tcp:localhost:54321 \
230 -s -S -machine virt -cpu cortex-a15 \
231 -m 1057 \
232 -bios $(ROOT)/out/bios-qemu/bios.bin
233
Jerome Forissierf080b5a2015-08-07 16:18:57 +0200234
235ifneq ($(filter check,$(MAKECMDGOALS)),)
236CHECK_DEPS := all
237endif
238
239check: $(CHECK_DEPS)
240 expect qemu-check.exp -- \
241 --bios $(ROOT)/out/bios-qemu/bios.bin
242
243check-only: check
244
245check-clean:
246 rm -f serial0.log serial1.log