blob: f74d27807ba1fe9bc7fb72ca4ea398c05cbaeae4 [file] [log] [blame]
SY Chiuddd3d822015-07-21 10:10:01 +08001BASH := $(shell which bash)
2ROOT ?= $(subst /build/,,$(shell pwd)/)
3
4################################################################################
5# Paths to git projects and various binaries
6################################################################################
7LINUX_PATH ?= $(ROOT)/linux
8LINUX_PATCH_PATH ?= $(ROOT)/patches-upstream
9
10OPTEE_OS_PATH ?= $(ROOT)/optee_os
11OPTEE_OS_BIN ?= $(OPTEE_OS_PATH)/out/arm-plat-mediatek/core/tee-pager.bin
12
13OPTEE_CLIENT_PATH ?= $(ROOT)/optee_client
14OPTEE_CLIENT_EXPORT ?= $(OPTEE_CLIENT_PATH)/out/export
15OPTEE_LINUXDRIVER_PATH ?= $(ROOT)/optee_linuxdriver
16
17OPTEE_TEST_PATH ?= $(ROOT)/optee_test
18OPTEE_TEST_OUT_PATH ?= $(ROOT)/out/optee_test
19
20GEN_ROOTFS_PATH ?= $(ROOT)/gen_rootfs
21GEN_ROOTFS_FILELIST ?= $(GEN_ROOTFS_PATH)/filelist-tee.txt
22
23MTK_TOOLS_PATH ?= $(ROOT)/mtk_tools
24
25################################################################################
26# defines, macros, configuration etc
27################################################################################
28define KERNEL_VERSION
29$(shell cd $(LINUX_PATH) && make kernelversion)
30endef
31
32CCACHE ?= $(shell which ccache) # Don't remove this comment (space is needed)
33
34################################################################################
35# Targets
36################################################################################
37all: linux optee-os optee-client optee-linuxdriver xtest
38all-clean: busybox-clean optee-os-clean \
39 optee-client-clean optee-linuxdriver-clean
40
41
42-include toolchain.mk
43
44################################################################################
45# Busybox
46################################################################################
47busybox:
48 @if [ ! -d "$(GEN_ROOTFS_PATH)/build" ]; then \
49 cd $(GEN_ROOTFS_PATH); \
50 CC_DIR=$(AARCH64_PATH) \
51 PATH=${PATH}:$(LINUX_PATH)/usr \
52 $(GEN_ROOTFS_PATH)/generate-cpio-rootfs.sh mt8173-evb; \
53 fi
54
55busybox-clean:
56 cd $(GEN_ROOTFS_PATH); \
57 $(GEN_ROOTFS_PATH)/generate-cpio-rootfs.sh mt8173-evb clean
58
59################################################################################
60# Linux kernel
61################################################################################
62.ONESHELL:
63$(LINUX_PATCH_PATH)/.patched:
64 cd $(LINUX_PATH); \
65 $(LINUX_PATCH_PATH)/patch-all.sh
66 touch $@
67
68$(LINUX_PATH)/.config:
69 # Temporary fix until we have the driver integrated in the kernel
70 sed -i '/config ARM64$$/a select DMA_SHARED_BUFFER' $(LINUX_PATH)/arch/arm64/Kconfig;
71 make -C $(LINUX_PATH) ARCH=arm64 defconfig
72
73linux-defconfig: $(LINUX_PATH)/.config
74linux-patched: $(LINUX_PATCH_PATH)/.patched
75
76linux: linux-defconfig linux-patched
77 make -C $(LINUX_PATH) \
78 CROSS_COMPILE="$(CCACHE)$(AARCH64_NONE_CROSS_COMPILE)" \
79 LOCALVERSION= \
80 ARCH=arm64 \
81 -j`getconf _NPROCESSORS_ONLN`
82
83################################################################################
84# OP-TEE
85################################################################################
86optee-os:
87 make -C $(OPTEE_OS_PATH) \
88 CROSS_COMPILE="$(CCACHE)$(AARCH32_CROSS_COMPILE)" \
89 CROSS_COMPILE_core="$(CCACHE)$(AARCH64_CROSS_COMPILE)" \
90 CFG_ARM64_core=y \
91 PLATFORM=mediatek \
92 PLATFORM_FLAVOR=mt8173 \
93 CFG_TEE_CORE_LOG_LEVEL=4 \
94 DEBUG=0 \
95 -j`getconf _NPROCESSORS_ONLN`
96
97optee-os-clean:
98 make -C $(OPTEE_OS_PATH) \
99 PLATFORM=mediatek \
100 PLATFORM_FLAVOR=mt8173 \
101 clean
102
103optee-client:
104 make -C $(OPTEE_CLIENT_PATH) \
105 CROSS_COMPILE="$(CCACHE)$(AARCH64_CROSS_COMPILE)" \
106 -j`getconf _NPROCESSORS_ONLN`
107
108optee-client-clean:
109 make -C $(OPTEE_CLIENT_PATH) clean
110
111optee-linuxdriver: linux
112 make -C $(LINUX_PATH) \
113 V=0 \
114 ARCH=arm64 \
115 CROSS_COMPILE="$(CCACHE)$(AARCH64_CROSS_COMPILE)" \
116 LOCALVERSION= \
117 M=$(OPTEE_LINUXDRIVER_PATH) modules
118
119optee-linuxdriver-clean:
120 make -C $(LINUX_PATH) \
121 M=$(OPTEE_LINUXDRIVER_PATH) clean
122
123################################################################################
124# xtest / optee_test
125################################################################################
126xtest: optee-os optee-client
127 @if [ -d "$(OPTEE_TEST_PATH)" ]; then \
128 make -C $(OPTEE_TEST_PATH) \
129 -j`getconf _NPROCESSORS_ONLN` \
130 CROSS_COMPILE_HOST="$(CCACHE)$(AARCH64_CROSS_COMPILE)" \
131 CROSS_COMPILE_TA="$(CCACHE)$(AARCH32_CROSS_COMPILE)" \
132 TA_DEV_KIT_DIR=$(OPTEE_OS_PATH)/out/arm-plat-mediatek/export-user_ta \
133 O=$(OPTEE_TEST_OUT_PATH); \
134 fi
135
136xtest-clean:
137 @if [ -d "$(OPTEE_TEST_PATH)" ]; then \
138 rm -rf $(OPTEE_TEST_OUT_PATH); \
139 fi
140
141################################################################################
142# Root FS
143################################################################################
144.PHONY: filelist-tee
145filelist-tee:
146 @echo "# xtest / optee_test" > $(GEN_ROOTFS_FILELIST)
147 @find $(OPTEE_TEST_OUT_PATH) -type f -name "xtest" | sed 's/\(.*\)/file \/bin\/xtest \1 755 0 0/g' >> $(GEN_ROOTFS_FILELIST)
148 @echo "# TAs" >> $(GEN_ROOTFS_FILELIST)
149 @echo "dir /lib/optee_armtz 755 0 0" >> $(GEN_ROOTFS_FILELIST)
150 @find $(OPTEE_TEST_OUT_PATH) -name "*.ta" | \
151 sed 's/\(.*\)\/\(.*\)/file \/lib\/optee_armtz\/\2 \1\/\2 444 0 0/g' >> $(GEN_ROOTFS_FILELIST)
152 @echo "# Secure storage dig" >> $(GEN_ROOTFS_FILELIST)
153 @echo "dir /data 755 0 0" >> $(GEN_ROOTFS_FILELIST)
154 @echo "dir /data/tee 755 0 0" >> $(GEN_ROOTFS_FILELIST)
155 @echo "# OP-TEE device" >> $(GEN_ROOTFS_FILELIST)
156 @echo "dir /lib/modules 755 0 0" >> $(GEN_ROOTFS_FILELIST)
157 @echo "dir /lib/modules/$(call KERNEL_VERSION) 755 0 0" >> $(GEN_ROOTFS_FILELIST)
158 @echo "file /lib/modules/$(call KERNEL_VERSION)/optee.ko $(OPTEE_LINUXDRIVER_PATH)/core/optee.ko 755 0 0" >> $(GEN_ROOTFS_FILELIST)
159 @echo "file /lib/modules/$(call KERNEL_VERSION)/optee_armtz.ko $(OPTEE_LINUXDRIVER_PATH)/armtz/optee_armtz.ko 755 0 0" >> $(GEN_ROOTFS_FILELIST)
160 @echo "# OP-TEE Client" >> $(GEN_ROOTFS_FILELIST)
161 @echo "file /bin/tee-supplicant $(OPTEE_CLIENT_EXPORT)/bin/tee-supplicant 755 0 0" >> $(GEN_ROOTFS_FILELIST)
162 @echo "dir /lib/aarch64-linux-gnu 755 0 0" >> $(GEN_ROOTFS_FILELIST)
163 @echo "file /lib/aarch64-linux-gnu/libteec.so.1.0 $(OPTEE_CLIENT_EXPORT)/lib/libteec.so.1.0 755 0 0" >> $(GEN_ROOTFS_FILELIST)
164 @echo "slink /lib/aarch64-linux-gnu/libteec.so.1 libteec.so.1.0 755 0 0" >> $(GEN_ROOTFS_FILELIST)
165 @echo "slink /lib/aarch64-linux-gnu/libteec.so libteec.so.1 755 0 0" >> $(GEN_ROOTFS_FILELIST)
166
167update_rootfs: busybox optee-client optee-linuxdriver xtest filelist-tee
168 cat $(GEN_ROOTFS_PATH)/filelist-final.txt $(GEN_ROOTFS_PATH)/filelist-tee.txt > $(GEN_ROOTFS_PATH)/filelist.tmp
169 cd $(GEN_ROOTFS_PATH); \
170 $(LINUX_PATH)/usr/gen_init_cpio $(GEN_ROOTFS_PATH)/filelist.tmp | gzip > $(GEN_ROOTFS_PATH)/filesystem.cpio.gz
171
172################################################################################
173# Image Tools
174################################################################################
175.PHONY: build_image flash_image run
176build-image: update_rootfs optee-os
177 cd $(MTK_TOOLS_PATH); \
178 ./build_trustzone.sh $(OPTEE_OS_BIN); \
179 ./build_bootimg.sh $(LINUX_PATH) $(GEN_ROOTFS_PATH)/filesystem.cpio.gz
180
181flash-image: build-image
182 @echo "Please press reset button ..."
183 @cd $(MTK_TOOLS_PATH); \
184 ./fastboot flash boot ./boot.img; \
185 ./fastboot flash TEE1 ./trustzone.bin
186 @echo "Please press reset button again..."
187
188run: flash-image