blob: 96a8be97f2e45a64d34408e1cc29ee65c6a3cc40 [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################################################################################
Pascal Brand9a0f50f2015-09-08 15:34:17 +0200122define edk2-call
Joakim Bech427dd632015-05-04 15:52:33 +0200123 GCC49_AARCH64_PREFIX=$(AARCH64_CROSS_COMPILE) \
Pascal Brand9a0f50f2015-09-08 15:34:17 +0200124 $(MAKE) -j1 -C $(EDK2_PATH) \
Joakim Bech427dd632015-05-04 15:52:33 +0200125 -f HisiPkg/HiKeyPkg/Makefile EDK2_ARCH=AARCH64 \
126 EDK2_DSC=HisiPkg/HiKeyPkg/HiKey.dsc \
127 EDK2_TOOLCHAIN=GCC49 EDK2_BUILD=$(EDK2_BUILD)
128endef
129
Pascal Brand9a0f50f2015-09-08 15:34:17 +0200130edk2: edk2-common
Joakim Bech427dd632015-05-04 15:52:33 +0200131
Pascal Brand9a0f50f2015-09-08 15:34:17 +0200132edk2-clean: edk2-clean-common
Joakim Bech427dd632015-05-04 15:52:33 +0200133
134################################################################################
135# Linux kernel
136################################################################################
137$(LINUX_PATH)/.config:
138 echo "# This file is merged with the kernel's default configuration" > $(LINUX_CONFIG_ADDLIST)
139 echo "# Disabling BTRFS gets rid of the RAID6 performance tests at boot time." >> $(LINUX_CONFIG_ADDLIST)
140 echo "# This shaves off a few seconds." >> $(LINUX_CONFIG_ADDLIST)
141 echo "CONFIG_USB_NET_DM9601=y" >> $(LINUX_CONFIG_ADDLIST)
142 echo "# CONFIG_BTRFS_FS is not set" >> $(LINUX_CONFIG_ADDLIST)
143 echo "" >> $(LINUX_CONFIG_ADDLIST)
144 echo "# Enable ftrace as per https://github.com/OP-TEE/optee_os/blob/master/documentation/debug.md#2-ftrace" >> $(LINUX_CONFIG_ADDLIST)
145 echo "CONFIG_GENERIC_TRACER=y" >> $(LINUX_CONFIG_ADDLIST)
146 echo "CONFIG_FTRACE=y" >> $(LINUX_CONFIG_ADDLIST)
147 echo "CONFIG_FUNCTION_TRACER=y" >> $(LINUX_CONFIG_ADDLIST)
148 echo "CONFIG_FUNCTION_GRAPH_TRACER=y" >> $(LINUX_CONFIG_ADDLIST)
149 echo "CONFIG_FTRACE_SYSCALLS=y" >> $(LINUX_CONFIG_ADDLIST)
150 echo "CONFIG_BRANCH_PROFILE_NONE=y" >> $(LINUX_CONFIG_ADDLIST)
151 echo "CONFIG_STACK_TRACER=y" >> $(LINUX_CONFIG_ADDLIST)
152 echo "CONFIG_DYNAMIC_FTRACE=y" >> $(LINUX_CONFIG_ADDLIST)
153 echo "CONFIG_FUNCTION_PROFILER=y" >> $(LINUX_CONFIG_ADDLIST)
154 echo "CONFIG_FTRACE_MCOUNT_RECORD=y" >> $(LINUX_CONFIG_ADDLIST)
155 cd $(LINUX_PATH); \
156 LOCALVERSION= \
157 CROSS_COMPILE="$(CCACHE)$(AARCH64_CROSS_COMPILE)" \
158 ARCH=arm64 scripts/kconfig/merge_config.sh \
159 arch/arm64/configs/defconfig $(LINUX_CONFIG_ADDLIST);
160
161linux-defconfig: $(LINUX_PATH)/.config
162
163linux-gen_init_cpio: linux-defconfig
164 make -C $(LINUX_PATH)/usr \
165 CROSS_COMPILE="$(CCACHE)$(AARCH64_CROSS_COMPILE)" \
166 ARCH=arm64 \
167 LOCALVERSION= \
168 gen_init_cpio
169
170linux: linux-defconfig
171 make -C $(LINUX_PATH) \
172 CROSS_COMPILE="$(CCACHE)$(AARCH64_CROSS_COMPILE)" \
173 ARCH=arm64 \
174 LOCALVERSION= \
175 -j`getconf _NPROCESSORS_ONLN` \
176 Image modules dtbs
177
178linux-defconfig-clean:
179 @if [ -f "$(LINUX_PATH)/.config" ]; then \
180 rm $(LINUX_PATH)/.config; \
181 fi
182 @if [ -f "$(LINUX_CONFIG_ADDLIST)" ]; then \
183 rm $(LINUX_CONFIG_ADDLIST); \
184 fi
185
186linux-clean: linux-defconfig-clean
187 make -C $(LINUX_PATH) \
188 CROSS_COMPILE="$(CCACHE)$(AARCH64_CROSS_COMPILE)" \
189 ARCH=arm64 \
190 LOCALVERSION= \
191 -j`getconf _NPROCESSORS_ONLN` \
192 clean
193
194linux-cleaner: linux-defconfig-clean
195 make -C $(LINUX_PATH) \
196 CROSS_COMPILE="$(CCACHE)$(AARCH64_CROSS_COMPILE)" \
197 ARCH=arm64 \
198 LOCALVERSION= \
199 -j`getconf _NPROCESSORS_ONLN` \
200 distclean
201
202################################################################################
203# OP-TEE
204################################################################################
Jerome Forissierae45fbf2015-09-04 09:40:17 +0200205OPTEE_OS_COMMON_FLAGS += PLATFORM=hikey CFG_ARM64_core=y
206optee-os: optee-os-common
Joakim Bech427dd632015-05-04 15:52:33 +0200207
Jerome Forissierae45fbf2015-09-04 09:40:17 +0200208OPTEE_OS_CLEAN_COMMON_FLAGS += PLATFORM=hikey CFG_ARM64_core=y
209optee-os-clean: optee-os-clean-common
Joakim Bech427dd632015-05-04 15:52:33 +0200210
Pascal Brand070d9552015-09-01 15:33:22 +0200211optee-client: optee-client-common
Jerome Forissierae45fbf2015-09-04 09:40:17 +0200212
Pascal Brand070d9552015-09-01 15:33:22 +0200213optee-client-clean: optee-client-clean-common
Jerome Forissierae45fbf2015-09-04 09:40:17 +0200214
215OPTEE_LINUXDRIVER_COMMON_FLAGS += ARCH=arm64
216optee-linuxdriver: optee-linuxdriver-common
217
218OPTEE_LINUXDRIVER_CLEAN_COMMON_FLAGS += ARCH=arm64
Pascal Brand070d9552015-09-01 15:33:22 +0200219optee-linuxdriver-clean: optee-linuxdriver-clean-common
Joakim Bech427dd632015-05-04 15:52:33 +0200220
221################################################################################
222# xtest / optee_test
223################################################################################
Pascal Brandd6536da2015-09-01 10:38:43 +0200224xtest: xtest-common
225xtest-clean: xtest-clean-common
226xtest-patch: xtest-patch-common
Pascal Brand294bfdf2015-08-25 09:27:13 +0200227
Joakim Bech427dd632015-05-04 15:52:33 +0200228################################################################################
229# strace
230################################################################################
231strace:
232 @if [ ! -f $(STRACE_PATH)/strace ]; then \
233 cd $(STRACE_PATH); \
234 ./bootstrap; \
235 ./configure --host=aarch64-linux-gnu CC="$(CCACHE)$(AARCH64_CROSS_COMPILE)gcc" LD=$(AARCH64_CROSS_COMPILE)ld; \
236 CC="$(CCACHE)$(AARCH64_CROSS_COMPILE)gcc" LD=$(AARCH64_CROSS_COMPILE)ld \
237 make -C $(STRACE_PATH); \
238 fi
239
240strace-clean:
241 @if [ -f $(STRACE_PATH)/strace ]; then \
242 CC="$(CCACHE)$(AARCH64_CROSS_COMPILE)gcc" LD=$(AARCH64_CROSS_COMPILE)ld \
243 make -C $(STRACE_PATH) clean; \
244 fi
245
246strace-cleaner:
247 rm -f $(STRACE_PATH)/Makefile $(STRACE_PATH)/configure
248
249################################################################################
250# Root FS
251################################################################################
252.PHONY: filelist-tee
253filelist-tee: xtest strace
254 @if [ ! -f "$(USBNETSH_PATH)" ]; then \
255 echo "#!/bin/sh" > $(USBNETSH_PATH); \
256 echo "#" >> $(USBNETSH_PATH); \
257 echo "# Script to bring eth0 up and start DHCP client" >> $(USBNETSH_PATH); \
258 echo "# Run it after plugging a USB ethernet adapter, for instance" >> $(USBNETSH_PATH); \
259 echo "" >> $(USBNETSH_PATH); \
260 echo "ip link set eth0 up" >> $(USBNETSH_PATH); \
261 echo "udhcpc -i eth0 -s /etc/udhcp/simple.script" >> $(USBNETSH_PATH); \
262 fi
263
264 @echo "# Files to add to filesystem.cpio.gz" > $(GEN_ROOTFS_FILELIST)
265 @echo "# Syntax: same as gen_rootfs/filelist.txt" >> $(GEN_ROOTFS_FILELIST)
266 @echo "" >> $(GEN_ROOTFS_FILELIST)
267
268 @echo "# Script called by udhcpc (DHCP client) to update the network configuration" >> $(GEN_ROOTFS_FILELIST)
269 @echo "dir /etc/udhcp 755 0 0" >> $(GEN_ROOTFS_FILELIST)
270 @echo "file /etc/udhcp/simple.script $(GEN_ROOTFS_PATH)/busybox/examples/udhcp/simple.script 755 0 0" >> $(GEN_ROOTFS_FILELIST)
271 @echo "" >> $(GEN_ROOTFS_FILELIST)
272
273 @echo "# Run this manually after plugging a USB to ethernet adapter" >> $(GEN_ROOTFS_FILELIST)
274 @echo "file /usbnet.sh $(USBNETSH_PATH) 755 0 0" >> $(GEN_ROOTFS_FILELIST)
275 @echo "" >> $(GEN_ROOTFS_FILELIST)
276
277 @echo "# xtest / optee_test" >> $(GEN_ROOTFS_FILELIST)
278 @find $(OPTEE_TEST_OUT_PATH) -type f -name "xtest" | sed 's/\(.*\)/file \/bin\/xtest \1 755 0 0/g' >> $(GEN_ROOTFS_FILELIST)
279 @echo "" >> $(GEN_ROOTFS_FILELIST)
280
281 @echo "# TAs" >> $(GEN_ROOTFS_FILELIST)
282 @echo "dir /lib/optee_armtz 755 0 0" >> $(GEN_ROOTFS_FILELIST)
283 @find $(OPTEE_TEST_OUT_PATH) -name "*.ta" | \
284 sed 's/\(.*\)\/\(.*\)/file \/lib\/optee_armtz\/\2 \1\/\2 444 0 0/g' >> $(GEN_ROOTFS_FILELIST)
285 @echo "" >> $(GEN_ROOTFS_FILELIST)
286
287 @echo "# Secure storage dig" >> $(GEN_ROOTFS_FILELIST)
288 @echo "dir /data 755 0 0" >> $(GEN_ROOTFS_FILELIST)
289 @echo "dir /data/tee 755 0 0" >> $(GEN_ROOTFS_FILELIST)
290 @echo "" >> $(GEN_ROOTFS_FILELIST)
291
292 @echo "# OP-TEE device" >> $(GEN_ROOTFS_FILELIST)
293 @echo "dir /lib/modules 755 0 0" >> $(GEN_ROOTFS_FILELIST)
294 @echo "dir /lib/modules/$(call KERNEL_VERSION) 755 0 0" >> $(GEN_ROOTFS_FILELIST)
295 @echo "file /lib/modules/$(call KERNEL_VERSION)/optee.ko $(OPTEE_LINUXDRIVER_PATH)/core/optee.ko 755 0 0" >> $(GEN_ROOTFS_FILELIST)
296 @echo "file /lib/modules/$(call KERNEL_VERSION)/optee_armtz.ko $(OPTEE_LINUXDRIVER_PATH)/armtz/optee_armtz.ko 755 0 0" >> $(GEN_ROOTFS_FILELIST)
297 @echo "" >> $(GEN_ROOTFS_FILELIST)
298
299 @echo "# OP-TEE Client" >> $(GEN_ROOTFS_FILELIST)
300 @echo "file /bin/tee-supplicant $(OPTEE_CLIENT_EXPORT)/bin/tee-supplicant 755 0 0" >> $(GEN_ROOTFS_FILELIST)
301 @echo "dir /lib/aarch64-linux-gnu 755 0 0" >> $(GEN_ROOTFS_FILELIST)
302 @echo "file /lib/aarch64-linux-gnu/libteec.so.1.0 $(OPTEE_CLIENT_EXPORT)/lib/libteec.so.1.0 755 0 0" >> $(GEN_ROOTFS_FILELIST)
303 @echo "slink /lib/aarch64-linux-gnu/libteec.so.1 libteec.so.1.0 755 0 0" >> $(GEN_ROOTFS_FILELIST)
304 @echo "slink /lib/aarch64-linux-gnu/libteec.so libteec.so.1 755 0 0" >> $(GEN_ROOTFS_FILELIST)
305 @echo "" >> $(GEN_ROOTFS_FILELIST)
306
307 @echo "# strace tool" >> $(GEN_ROOTFS_FILELIST)
308 @echo "file /bin/strace $(STRACE_PATH)/strace 755 0 0" >> $(GEN_ROOTFS_FILELIST)
309
310update_rootfs: busybox optee-client optee-linuxdriver filelist-tee linux-gen_init_cpio
311 cat $(GEN_ROOTFS_PATH)/filelist-final.txt | sed '/fbtest/d' > $(GEN_ROOTFS_PATH)/filelist-all.txt
312 cat $(GEN_ROOTFS_PATH)/filelist-all.txt $(GEN_ROOTFS_PATH)/filelist-tee.txt > $(GEN_ROOTFS_PATH)/filelist.tmp
313 cd $(GEN_ROOTFS_PATH); \
314 $(LINUX_PATH)/usr/gen_init_cpio $(GEN_ROOTFS_PATH)/filelist.tmp | gzip > $(GEN_ROOTFS_PATH)/filesystem.cpio.gz
315
316update_rootfs_clean:
317 cd $(GEN_ROOTFS_PATH); \
318 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; \
319 if [ -f "$(USBNETSH_PATH)" ]; then rm $(USBNETSH_PATH); fi;
320
321################################################################################
322# Boot Image
323################################################################################
324boot-img: linux update_rootfs
325 sudo -p "[sudo] Password:" true
326 if [ -d .tmpbootimg ] ; then sudo rm -rf .tmpbootimg ; fi
327 mkdir -p .tmpbootimg
328 dd if=/dev/zero of=$(BOOT_IMG) bs=512 count=131072 status=none
329 sudo mkfs.fat -n "BOOT IMG" $(BOOT_IMG) >/dev/null
330 sudo mount -o loop,rw,sync $(BOOT_IMG) .tmpbootimg
331 sudo cp $(LINUX_PATH)/arch/arm64/boot/Image $(LINUX_PATH)/arch/arm64/boot/dts/hi6220-hikey.dtb .tmpbootimg/
332 sudo cp $(GEN_ROOTFS_PATH)/filesystem.cpio.gz .tmpbootimg/initrd.img
333 sudo cp $(EDK2_PATH)/Build/HiKey/$(EDK2_BUILD)_GCC49/AARCH64/AndroidFastbootApp.efi .tmpbootimg/fastboot.efi
334 sudo umount .tmpbootimg
335 sudo rm -rf .tmpbootimg
336
337boot-img-clean:
338 rm -f $(BOOT_IMG)
339
340################################################################################
341# l-loader
342################################################################################
343lloader: arm-tf
344 if [ ! -h "$(LLOADER_PATH)/bl1.bin" ]; then \
345 ln -s $(ARM_TF_PATH)/build/hikey/$(ARM_TF_BUILD)/bl1.bin $(LLOADER_PATH)/bl1.bin; \
346 fi
347 make -C $(LLOADER_PATH) BL1=$(ARM_TF_PATH)/build/hikey/$(ARM_TF_BUILD)/bl1.bin CROSS_COMPILE="$(CCACHE)$(AARCH32_CROSS_COMPILE)"
348
349lloader-clean:
350 if [ -h "$(LLOADER_PATH)/bl1.bin" ]; then \
351 unlink $(LLOADER_PATH)/bl1.bin; \
352 fi
353 make -C $(LLOADER_PATH) clean;
354 if [ -f "$(LLOADER_PATH)/ptable.img" ]; then \
355 rm -f $(LLOADER_PATH)/ptable.img; \
356 rm -f $(LLOADER_PATH)/prm_ptable.img; \
357 rm -f $(LLOADER_PATH)/sec_ptable.img; \
358 fi
359 if [ -f "$(LLOADER_PATH)/l-loader" ]; then \
360 rm -f $(LLOADER_PATH)/l-loader; \
361 rm -f $(LLOADER_PATH)/temp.bin; \
362 rm -f $(LLOADER_PATH)/temp; \
363 fi