blob: 8640609db2eca29a8052747ff5054b34f00836b0 [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)$(AARCH64_CROSS_COMPILE)"
7CROSS_COMPILE_NS_KERNEL ?= "$(CCACHE)$(AARCH64_CROSS_COMPILE)"
8CROSS_COMPILE_S_USER ?= "$(CCACHE)$(AARCH32_CROSS_COMPILE)"
9CROSS_COMPILE_S_KERNEL ?= "$(CCACHE)$(AARCH64_CROSS_COMPILE)"
10OPTEE_OS_BIN ?= $(OPTEE_OS_PATH)/out/arm-plat-hikey/core/tee.bin
11OPTEE_OS_TA_DEV_KIT_DIR ?= $(OPTEE_OS_PATH)/out/arm-plat-hikey/export-user_ta
12
Joakim Bech427dd632015-05-04 15:52:33 +020013################################################################################
14# Paths to git projects and various binaries
15################################################################################
16ARM_TF_PATH ?= $(ROOT)/arm-trusted-firmware
17ifeq ($(DEBUG),1)
18ARM_TF_BUILD ?= debug
19else
20ARM_TF_BUILD ?= release
21# In case user types something like 'make DEBUG=nonsensical ..',
22# we default to release build
23DEBUG = 0
24endif
25
26EDK2_PATH ?= $(ROOT)/edk2
27ifeq ($(DEBUG),1)
28EDK2_BIN ?= $(EDK2_PATH)/Build/HiKey/DEBUG_GCC49/FV/BL33_AP_UEFI.fd
29EDK2_BUILD ?= DEBUG
30else
31EDK2_BIN ?= $(EDK2_PATH)/Build/HiKey/RELEASE_GCC49/FV/BL33_AP_UEFI.fd
32EDK2_BUILD ?= RELEASE
33endif
34
35LINUX_PATH ?= $(ROOT)/linux
36LINUX_CONFIG_ADDLIST ?= $(LINUX_PATH)/kernel.config
37
Joakim Bech427dd632015-05-04 15:52:33 +020038GEN_ROOTFS_PATH ?= $(ROOT)/gen_rootfs
39GEN_ROOTFS_FILELIST ?= $(GEN_ROOTFS_PATH)/filelist-tee.txt
40
41MCUIMAGE_BIN ?=$(ROOT)/out/mcuimage.bin
42USBNETSH_PATH ?=$(ROOT)/out/usbnet.sh
43STRACE_PATH ?=$(ROOT)/strace
44BOOT_IMG ?=$(ROOT)/out/boot-fat.uefi.img
45LLOADER_PATH ?=$(ROOT)/l-loader
46
47################################################################################
Joakim Bech427dd632015-05-04 15:52:33 +020048# Targets
49################################################################################
50all: mcuimage arm-tf edk2 linux optee-os optee-client optee-linuxdriver xtest strace update_rootfs boot-img lloader
51
52clean: arm-tf-clean busybox-clean edk2-clean linux-clean optee-os-clean optee-client-clean optee-linuxdriver-clean xtest-clean strace-clean update_rootfs_clean boot-img-clean lloader-clean
53
54cleaner: clean mcuimage-cleaner busybox-cleaner linux-cleaner strace-cleaner
55
56-include toolchain.mk
57
58################################################################################
59# MCU Image
60################################################################################
61mcuimage:
62 @if [ ! -f "$(MCUIMAGE_BIN)" ]; then \
Pascal Brande4877c22015-08-25 09:26:38 +020063 mkdir -p `dirname $(MCUIMAGE_BIN)` ; \
Joakim Bech427dd632015-05-04 15:52:33 +020064 curl https://builds.96boards.org/releases/hikey/linaro/binaries/latest/mcuimage.bin -o $(MCUIMAGE_BIN); \
65 fi
66
67mcuimage-cleaner:
68 rm -f $(MCUIMAGE_BIN)
69
70################################################################################
71# ARM Trusted Firmware
72################################################################################
73arm-tf: mcuimage optee-os edk2
74 CFLAGS="-O0 -gdwarf-2" \
75 CROSS_COMPILE="$(CCACHE)$(AARCH64_CROSS_COMPILE)" \
76 BL32=$(OPTEE_OS_BIN) \
77 BL33=$(EDK2_BIN) \
78 NEED_BL30=yes \
79 BL30=$(MCUIMAGE_BIN) \
80 make -C $(ARM_TF_PATH) \
81 -j`getconf _NPROCESSORS_ONLN` \
82 DEBUG=$(DEBUG) \
83 PLAT=hikey \
84 SPD=opteed \
85 all fip
86
87arm-tf-clean:
88 CFLAGS="-O0 -gdwarf-2" \
89 CROSS_COMPILE="$(CCACHE)$(AARCH64_CROSS_COMPILE)" \
90 BL32=$(OPTEE_OS_BIN) \
91 BL33=$(EDK2_BIN) \
92 NEED_BL30=yes \
93 BL30=$(MCUIMAGE_BIN) \
94 make -C $(ARM_TF_PATH) \
95 -j`getconf _NPROCESSORS_ONLN` \
96 DEBUG=$(DEBUG) \
97 PLAT=hikey \
98 SPD=opteed \
99 clean
100
101################################################################################
102# Busybox
103################################################################################
104busybox:
105 @if [ ! -d "$(GEN_ROOTFS_PATH)/build" ]; then \
106 cd $(GEN_ROOTFS_PATH); \
107 CC_DIR=$(AARCH64_PATH) \
108 $(GEN_ROOTFS_PATH)/generate-cpio-rootfs.sh hikey nocpio; \
109 fi
110
111busybox-clean:
112 cd $(GEN_ROOTFS_PATH); \
113 $(GEN_ROOTFS_PATH)/generate-cpio-rootfs.sh hikey clean
114
115busybox-cleaner:
116 rm -rf $(GEN_ROOTFS_PATH)/build
117 rm -rf $(GEN_ROOTFS_PATH)/filelist-final.txt
118
119################################################################################
120# EDK2 / Tianocore
121################################################################################
122# Make sure edksetup.sh only will be called once and that we don't rebuild
123# BaseTools again and again.
124$(EDK2_PATH)/Conf/target.txt:
125 set -e; \
126 cd $(EDK2_PATH); $(BASH) edksetup.sh; \
127 make -C $(EDK2_PATH)/BaseTools clean; \
128 make -C $(EDK2_PATH)/BaseTools; \
129
130define edk2-common
131 GCC49_AARCH64_PREFIX=$(AARCH64_CROSS_COMPILE) \
132 make -C $(EDK2_PATH) \
133 -f HisiPkg/HiKeyPkg/Makefile EDK2_ARCH=AARCH64 \
134 EDK2_DSC=HisiPkg/HiKeyPkg/HiKey.dsc \
135 EDK2_TOOLCHAIN=GCC49 EDK2_BUILD=$(EDK2_BUILD)
136endef
137
138edk2: $(EDK2_PATH)/Conf/target.txt
139 @if [ ! -f "$(EDK2_BIN)" ]; then \
140 set -e; \
141 cd $(EDK2_PATH); \
142 $(BASH) edksetup.sh; \
143 $(call edk2-common); \
144 fi
145
146edk2-clean:
147 set -e; \
148 cd $(EDK2_PATH); \
149 $(BASH) edksetup.sh; \
150 $(call edk2-common) clean; \
151 make -C $(EDK2_PATH)/BaseTools clean;
152
153################################################################################
154# Linux kernel
155################################################################################
156$(LINUX_PATH)/.config:
157 echo "# This file is merged with the kernel's default configuration" > $(LINUX_CONFIG_ADDLIST)
158 echo "# Disabling BTRFS gets rid of the RAID6 performance tests at boot time." >> $(LINUX_CONFIG_ADDLIST)
159 echo "# This shaves off a few seconds." >> $(LINUX_CONFIG_ADDLIST)
160 echo "CONFIG_USB_NET_DM9601=y" >> $(LINUX_CONFIG_ADDLIST)
161 echo "# CONFIG_BTRFS_FS is not set" >> $(LINUX_CONFIG_ADDLIST)
162 echo "" >> $(LINUX_CONFIG_ADDLIST)
163 echo "# Enable ftrace as per https://github.com/OP-TEE/optee_os/blob/master/documentation/debug.md#2-ftrace" >> $(LINUX_CONFIG_ADDLIST)
164 echo "CONFIG_GENERIC_TRACER=y" >> $(LINUX_CONFIG_ADDLIST)
165 echo "CONFIG_FTRACE=y" >> $(LINUX_CONFIG_ADDLIST)
166 echo "CONFIG_FUNCTION_TRACER=y" >> $(LINUX_CONFIG_ADDLIST)
167 echo "CONFIG_FUNCTION_GRAPH_TRACER=y" >> $(LINUX_CONFIG_ADDLIST)
168 echo "CONFIG_FTRACE_SYSCALLS=y" >> $(LINUX_CONFIG_ADDLIST)
169 echo "CONFIG_BRANCH_PROFILE_NONE=y" >> $(LINUX_CONFIG_ADDLIST)
170 echo "CONFIG_STACK_TRACER=y" >> $(LINUX_CONFIG_ADDLIST)
171 echo "CONFIG_DYNAMIC_FTRACE=y" >> $(LINUX_CONFIG_ADDLIST)
172 echo "CONFIG_FUNCTION_PROFILER=y" >> $(LINUX_CONFIG_ADDLIST)
173 echo "CONFIG_FTRACE_MCOUNT_RECORD=y" >> $(LINUX_CONFIG_ADDLIST)
174 cd $(LINUX_PATH); \
175 LOCALVERSION= \
176 CROSS_COMPILE="$(CCACHE)$(AARCH64_CROSS_COMPILE)" \
177 ARCH=arm64 scripts/kconfig/merge_config.sh \
178 arch/arm64/configs/defconfig $(LINUX_CONFIG_ADDLIST);
179
180linux-defconfig: $(LINUX_PATH)/.config
181
182linux-gen_init_cpio: linux-defconfig
183 make -C $(LINUX_PATH)/usr \
184 CROSS_COMPILE="$(CCACHE)$(AARCH64_CROSS_COMPILE)" \
185 ARCH=arm64 \
186 LOCALVERSION= \
187 gen_init_cpio
188
189linux: linux-defconfig
190 make -C $(LINUX_PATH) \
191 CROSS_COMPILE="$(CCACHE)$(AARCH64_CROSS_COMPILE)" \
192 ARCH=arm64 \
193 LOCALVERSION= \
194 -j`getconf _NPROCESSORS_ONLN` \
195 Image modules dtbs
196
197linux-defconfig-clean:
198 @if [ -f "$(LINUX_PATH)/.config" ]; then \
199 rm $(LINUX_PATH)/.config; \
200 fi
201 @if [ -f "$(LINUX_CONFIG_ADDLIST)" ]; then \
202 rm $(LINUX_CONFIG_ADDLIST); \
203 fi
204
205linux-clean: linux-defconfig-clean
206 make -C $(LINUX_PATH) \
207 CROSS_COMPILE="$(CCACHE)$(AARCH64_CROSS_COMPILE)" \
208 ARCH=arm64 \
209 LOCALVERSION= \
210 -j`getconf _NPROCESSORS_ONLN` \
211 clean
212
213linux-cleaner: linux-defconfig-clean
214 make -C $(LINUX_PATH) \
215 CROSS_COMPILE="$(CCACHE)$(AARCH64_CROSS_COMPILE)" \
216 ARCH=arm64 \
217 LOCALVERSION= \
218 -j`getconf _NPROCESSORS_ONLN` \
219 distclean
220
221################################################################################
222# OP-TEE
223################################################################################
224optee-os:
Pascal Brand070d9552015-09-01 15:33:22 +0200225 $(MAKE) \
Joakim Bech427dd632015-05-04 15:52:33 +0200226 CFG_ARM64_core=y \
227 PLATFORM=hikey \
228 CFG_TEE_CORE_LOG_LEVEL=3 \
Pascal Brand070d9552015-09-01 15:33:22 +0200229 optee-os-common
Joakim Bech427dd632015-05-04 15:52:33 +0200230
231optee-os-clean:
Pascal Brand070d9552015-09-01 15:33:22 +0200232 $(MAKE) \
Joakim Bech427dd632015-05-04 15:52:33 +0200233 CFG_ARM64_core=y \
234 PLATFORM=hikey \
Pascal Brand070d9552015-09-01 15:33:22 +0200235 optee-os-clean-common
Joakim Bech427dd632015-05-04 15:52:33 +0200236
Pascal Brand070d9552015-09-01 15:33:22 +0200237optee-client: optee-client-common
238optee-client-clean: optee-client-clean-common
239optee-linuxdriver:
240 $(MAKE) ARCH=arm64 optee-linuxdriver-common
241optee-linuxdriver-clean: optee-linuxdriver-clean-common
Joakim Bech427dd632015-05-04 15:52:33 +0200242
243################################################################################
244# xtest / optee_test
245################################################################################
Pascal Brandd6536da2015-09-01 10:38:43 +0200246xtest: xtest-common
247xtest-clean: xtest-clean-common
248xtest-patch: xtest-patch-common
Pascal Brand294bfdf2015-08-25 09:27:13 +0200249
Joakim Bech427dd632015-05-04 15:52:33 +0200250################################################################################
251# strace
252################################################################################
253strace:
254 @if [ ! -f $(STRACE_PATH)/strace ]; then \
255 cd $(STRACE_PATH); \
256 ./bootstrap; \
257 ./configure --host=aarch64-linux-gnu CC="$(CCACHE)$(AARCH64_CROSS_COMPILE)gcc" LD=$(AARCH64_CROSS_COMPILE)ld; \
258 CC="$(CCACHE)$(AARCH64_CROSS_COMPILE)gcc" LD=$(AARCH64_CROSS_COMPILE)ld \
259 make -C $(STRACE_PATH); \
260 fi
261
262strace-clean:
263 @if [ -f $(STRACE_PATH)/strace ]; then \
264 CC="$(CCACHE)$(AARCH64_CROSS_COMPILE)gcc" LD=$(AARCH64_CROSS_COMPILE)ld \
265 make -C $(STRACE_PATH) clean; \
266 fi
267
268strace-cleaner:
269 rm -f $(STRACE_PATH)/Makefile $(STRACE_PATH)/configure
270
271################################################################################
272# Root FS
273################################################################################
274.PHONY: filelist-tee
275filelist-tee: xtest strace
276 @if [ ! -f "$(USBNETSH_PATH)" ]; then \
277 echo "#!/bin/sh" > $(USBNETSH_PATH); \
278 echo "#" >> $(USBNETSH_PATH); \
279 echo "# Script to bring eth0 up and start DHCP client" >> $(USBNETSH_PATH); \
280 echo "# Run it after plugging a USB ethernet adapter, for instance" >> $(USBNETSH_PATH); \
281 echo "" >> $(USBNETSH_PATH); \
282 echo "ip link set eth0 up" >> $(USBNETSH_PATH); \
283 echo "udhcpc -i eth0 -s /etc/udhcp/simple.script" >> $(USBNETSH_PATH); \
284 fi
285
286 @echo "# Files to add to filesystem.cpio.gz" > $(GEN_ROOTFS_FILELIST)
287 @echo "# Syntax: same as gen_rootfs/filelist.txt" >> $(GEN_ROOTFS_FILELIST)
288 @echo "" >> $(GEN_ROOTFS_FILELIST)
289
290 @echo "# Script called by udhcpc (DHCP client) to update the network configuration" >> $(GEN_ROOTFS_FILELIST)
291 @echo "dir /etc/udhcp 755 0 0" >> $(GEN_ROOTFS_FILELIST)
292 @echo "file /etc/udhcp/simple.script $(GEN_ROOTFS_PATH)/busybox/examples/udhcp/simple.script 755 0 0" >> $(GEN_ROOTFS_FILELIST)
293 @echo "" >> $(GEN_ROOTFS_FILELIST)
294
295 @echo "# Run this manually after plugging a USB to ethernet adapter" >> $(GEN_ROOTFS_FILELIST)
296 @echo "file /usbnet.sh $(USBNETSH_PATH) 755 0 0" >> $(GEN_ROOTFS_FILELIST)
297 @echo "" >> $(GEN_ROOTFS_FILELIST)
298
299 @echo "# xtest / optee_test" >> $(GEN_ROOTFS_FILELIST)
300 @find $(OPTEE_TEST_OUT_PATH) -type f -name "xtest" | sed 's/\(.*\)/file \/bin\/xtest \1 755 0 0/g' >> $(GEN_ROOTFS_FILELIST)
301 @echo "" >> $(GEN_ROOTFS_FILELIST)
302
303 @echo "# TAs" >> $(GEN_ROOTFS_FILELIST)
304 @echo "dir /lib/optee_armtz 755 0 0" >> $(GEN_ROOTFS_FILELIST)
305 @find $(OPTEE_TEST_OUT_PATH) -name "*.ta" | \
306 sed 's/\(.*\)\/\(.*\)/file \/lib\/optee_armtz\/\2 \1\/\2 444 0 0/g' >> $(GEN_ROOTFS_FILELIST)
307 @echo "" >> $(GEN_ROOTFS_FILELIST)
308
309 @echo "# Secure storage dig" >> $(GEN_ROOTFS_FILELIST)
310 @echo "dir /data 755 0 0" >> $(GEN_ROOTFS_FILELIST)
311 @echo "dir /data/tee 755 0 0" >> $(GEN_ROOTFS_FILELIST)
312 @echo "" >> $(GEN_ROOTFS_FILELIST)
313
314 @echo "# OP-TEE device" >> $(GEN_ROOTFS_FILELIST)
315 @echo "dir /lib/modules 755 0 0" >> $(GEN_ROOTFS_FILELIST)
316 @echo "dir /lib/modules/$(call KERNEL_VERSION) 755 0 0" >> $(GEN_ROOTFS_FILELIST)
317 @echo "file /lib/modules/$(call KERNEL_VERSION)/optee.ko $(OPTEE_LINUXDRIVER_PATH)/core/optee.ko 755 0 0" >> $(GEN_ROOTFS_FILELIST)
318 @echo "file /lib/modules/$(call KERNEL_VERSION)/optee_armtz.ko $(OPTEE_LINUXDRIVER_PATH)/armtz/optee_armtz.ko 755 0 0" >> $(GEN_ROOTFS_FILELIST)
319 @echo "" >> $(GEN_ROOTFS_FILELIST)
320
321 @echo "# OP-TEE Client" >> $(GEN_ROOTFS_FILELIST)
322 @echo "file /bin/tee-supplicant $(OPTEE_CLIENT_EXPORT)/bin/tee-supplicant 755 0 0" >> $(GEN_ROOTFS_FILELIST)
323 @echo "dir /lib/aarch64-linux-gnu 755 0 0" >> $(GEN_ROOTFS_FILELIST)
324 @echo "file /lib/aarch64-linux-gnu/libteec.so.1.0 $(OPTEE_CLIENT_EXPORT)/lib/libteec.so.1.0 755 0 0" >> $(GEN_ROOTFS_FILELIST)
325 @echo "slink /lib/aarch64-linux-gnu/libteec.so.1 libteec.so.1.0 755 0 0" >> $(GEN_ROOTFS_FILELIST)
326 @echo "slink /lib/aarch64-linux-gnu/libteec.so libteec.so.1 755 0 0" >> $(GEN_ROOTFS_FILELIST)
327 @echo "" >> $(GEN_ROOTFS_FILELIST)
328
329 @echo "# strace tool" >> $(GEN_ROOTFS_FILELIST)
330 @echo "file /bin/strace $(STRACE_PATH)/strace 755 0 0" >> $(GEN_ROOTFS_FILELIST)
331
332update_rootfs: busybox optee-client optee-linuxdriver filelist-tee linux-gen_init_cpio
333 cat $(GEN_ROOTFS_PATH)/filelist-final.txt | sed '/fbtest/d' > $(GEN_ROOTFS_PATH)/filelist-all.txt
334 cat $(GEN_ROOTFS_PATH)/filelist-all.txt $(GEN_ROOTFS_PATH)/filelist-tee.txt > $(GEN_ROOTFS_PATH)/filelist.tmp
335 cd $(GEN_ROOTFS_PATH); \
336 $(LINUX_PATH)/usr/gen_init_cpio $(GEN_ROOTFS_PATH)/filelist.tmp | gzip > $(GEN_ROOTFS_PATH)/filesystem.cpio.gz
337
338update_rootfs_clean:
339 cd $(GEN_ROOTFS_PATH); \
340 rm -f $(GEN_ROOTFS_PATH)/filesystem.cpio.gz $(GEN_ROOTFS_PATH)/filelist.tmp $(GEN_ROOTFS_PATH)/filelist-tee.txt $(GEN_ROOTFS_PATH)/filelist-all.txt; \
341 if [ -f "$(USBNETSH_PATH)" ]; then rm $(USBNETSH_PATH); fi;
342
343################################################################################
344# Boot Image
345################################################################################
346boot-img: linux update_rootfs
347 sudo -p "[sudo] Password:" true
348 if [ -d .tmpbootimg ] ; then sudo rm -rf .tmpbootimg ; fi
349 mkdir -p .tmpbootimg
350 dd if=/dev/zero of=$(BOOT_IMG) bs=512 count=131072 status=none
351 sudo mkfs.fat -n "BOOT IMG" $(BOOT_IMG) >/dev/null
352 sudo mount -o loop,rw,sync $(BOOT_IMG) .tmpbootimg
353 sudo cp $(LINUX_PATH)/arch/arm64/boot/Image $(LINUX_PATH)/arch/arm64/boot/dts/hi6220-hikey.dtb .tmpbootimg/
354 sudo cp $(GEN_ROOTFS_PATH)/filesystem.cpio.gz .tmpbootimg/initrd.img
355 sudo cp $(EDK2_PATH)/Build/HiKey/$(EDK2_BUILD)_GCC49/AARCH64/AndroidFastbootApp.efi .tmpbootimg/fastboot.efi
356 sudo umount .tmpbootimg
357 sudo rm -rf .tmpbootimg
358
359boot-img-clean:
360 rm -f $(BOOT_IMG)
361
362################################################################################
363# l-loader
364################################################################################
365lloader: arm-tf
366 if [ ! -h "$(LLOADER_PATH)/bl1.bin" ]; then \
367 ln -s $(ARM_TF_PATH)/build/hikey/$(ARM_TF_BUILD)/bl1.bin $(LLOADER_PATH)/bl1.bin; \
368 fi
369 make -C $(LLOADER_PATH) BL1=$(ARM_TF_PATH)/build/hikey/$(ARM_TF_BUILD)/bl1.bin CROSS_COMPILE="$(CCACHE)$(AARCH32_CROSS_COMPILE)"
370
371lloader-clean:
372 if [ -h "$(LLOADER_PATH)/bl1.bin" ]; then \
373 unlink $(LLOADER_PATH)/bl1.bin; \
374 fi
375 make -C $(LLOADER_PATH) clean;
376 if [ -f "$(LLOADER_PATH)/ptable.img" ]; then \
377 rm -f $(LLOADER_PATH)/ptable.img; \
378 rm -f $(LLOADER_PATH)/prm_ptable.img; \
379 rm -f $(LLOADER_PATH)/sec_ptable.img; \
380 fi
381 if [ -f "$(LLOADER_PATH)/l-loader" ]; then \
382 rm -f $(LLOADER_PATH)/l-loader; \
383 rm -f $(LLOADER_PATH)/temp.bin; \
384 rm -f $(LLOADER_PATH)/temp; \
385 fi