blob: ba78cbd2d9f6bb1d1111dd1da1997345be99aa1d [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################################################################################
7ARM_TF_PATH ?= $(ROOT)/arm-trusted-firmware
8
9EDK2_PATH ?= $(ROOT)/edk2
10EDK2_BIN ?= $(EDK2_PATH)/Build/ArmVExpress-FVP-AArch64/RELEASE_GCC49/FV/FVP_AARCH64_EFI.fd
11
12LINUX_PATH ?= $(ROOT)/linux
13
14OPTEE_OS_PATH ?= $(ROOT)/optee_os
15OPTEE_OS_BIN ?= $(OPTEE_OS_PATH)/out/arm-plat-vexpress/core/tee.bin
16
17OPTEE_CLIENT_PATH ?= $(ROOT)/optee_client
18OPTEE_CLIENT_EXPORT ?= $(OPTEE_CLIENT_PATH)/out/export
19OPTEE_LINUXDRIVER_PATH ?= $(ROOT)/optee_linuxdriver
20
21OPTEE_TEST_PATH ?= $(ROOT)/optee_test
22OPTEE_TEST_OUT_PATH ?= $(ROOT)/out/optee_test
23
24GEN_ROOTFS_PATH ?= $(ROOT)/gen_rootfs
25GEN_ROOTFS_FILELIST ?= $(GEN_ROOTFS_PATH)/filelist-tee.txt
26
27FOUNDATION_PATH ?= $(ROOT)/Foundation_Platformpkg
28
29################################################################################
30# defines, macros, configuration etc
31################################################################################
32define KERNEL_VERSION
33$(shell cd $(LINUX_PATH) && make kernelversion)
34endef
35
36CCACHE ?= $(shell which ccache) # Don't remove this comment (space is needed)
37
38################################################################################
39# Targets
40################################################################################
41all: arm-tf edk2 linux optee-os optee-client optee-linuxdriver generate-dtb xtest
42all-clean: arm-tf-clean busybox-clean edk2-clean optee-os-clean \
43 optee-client-clean optee-linuxdriver-clean
44
45
46-include toolchain.mk
47
48################################################################################
49# ARM Trusted Firmware
50################################################################################
51arm-tf: optee-os edk2
52 CFLAGS="-O0 -gdwarf-2" \
53 CROSS_COMPILE="$(CCACHE)$(AARCH64_NONE_CROSS_COMPILE)" \
54 BL32=$(OPTEE_OS_BIN) \
55 BL33=$(EDK2_BIN) \
56 make -C $(ARM_TF_PATH) \
57 -j`getconf _NPROCESSORS_ONLN` \
58 DEBUG=0 \
59 FVP_TSP_RAM_LOCATION=tdram \
60 FVP_SHARED_DATA_LOCATION=tdram \
61 PLAT=fvp \
62 SPD=opteed \
63 all fip
64
65arm-tf-clean:
66 make -C $(ARM_TF_PATH) clean
67
68################################################################################
69# Busybox
70################################################################################
71busybox:
72 @if [ ! -d "$(GEN_ROOTFS_PATH)/build" ]; then \
73 cd $(GEN_ROOTFS_PATH); \
74 CC_DIR=$(AARCH64_PATH) \
75 PATH=${PATH}:$(LINUX_PATH)/usr \
76 $(GEN_ROOTFS_PATH)/generate-cpio-rootfs.sh fvp-aarch64; \
77 fi
78
79busybox-clean:
80 cd $(GEN_ROOTFS_PATH); \
81 $(GEN_ROOTFS_PATH)/generate-cpio-rootfs.sh fvp-aarch64 clean
82
83################################################################################
84# EDK2 / Tianocore
85################################################################################
86# Make sure edksetup.sh only will be called once and that we don't rebuild
87# BaseTools again and again.
88$(EDK2_PATH)/Conf/target.txt:
89 cd $(EDK2_PATH); $(BASH) edksetup.sh; \
90 make -C $(EDK2_PATH)/BaseTools clean; \
91 make -C $(EDK2_PATH)/BaseTools; \
92
93define edk2-common
94 GCC49_AARCH64_PREFIX=$(AARCH64_NONE_CROSS_COMPILE) \
95 make -C $(EDK2_PATH) \
96 -f ArmPlatformPkg/Scripts/Makefile EDK2_ARCH=AARCH64 \
97 EDK2_DSC=ArmPlatformPkg/ArmVExpressPkg/ArmVExpress-FVP-AArch64.dsc \
98 EDK2_TOOLCHAIN=GCC49 EDK2_BUILD=RELEASE \
99 EDK2_MACROS="-n 6 -D ARM_FOUNDATION_FVP=1"
100endef
101
102edk2: $(EDK2_PATH)/Conf/target.txt
103 $(call edk2-common)
104
105edk2-clean:
106 $(call edk2-common) clean
107 cd $(EDK2_PATH); \
108 make -C BaseTools clean
109
110################################################################################
111# Linux kernel
112################################################################################
113$(LINUX_PATH)/.config:
114 # Temporary fix until we have the driver integrated in the kernel
115 sed -i '/config ARM64$$/a select DMA_SHARED_BUFFER' $(LINUX_PATH)/arch/arm64/Kconfig;
116 make -C $(LINUX_PATH) ARCH=arm64 defconfig
117
118linux-defconfig: $(LINUX_PATH)/.config
119
120linux: linux-defconfig
121 make -C $(LINUX_PATH) \
122 CROSS_COMPILE="$(CCACHE)$(AARCH64_NONE_CROSS_COMPILE)" \
123 LOCALVERSION= \
124 ARCH=arm64 \
125 -j`getconf _NPROCESSORS_ONLN`
126
127################################################################################
128# OP-TEE
129################################################################################
130optee-os:
131 make -C $(OPTEE_OS_PATH) \
132 CROSS_COMPILE="$(CCACHE)$(AARCH32_CROSS_COMPILE)" \
133 PLATFORM=vexpress \
134 PLATFORM_FLAVOR=fvp \
135 CFG_TEE_CORE_LOG_LEVEL=3 \
136 DEBUG=1 \
137 -j`getconf _NPROCESSORS_ONLN`
138
139optee-os-clean:
140 make -C $(OPTEE_OS_PATH) \
141 PLATFORM=vexpress \
142 PLATFORM_FLAVOR=fvp \
143 clean
144
145optee-client:
146 make -C $(OPTEE_CLIENT_PATH) \
147 CROSS_COMPILE="$(CCACHE)$(AARCH64_CROSS_COMPILE)" \
148 -j`getconf _NPROCESSORS_ONLN`
149
150optee-client-clean:
151 make -C $(OPTEE_CLIENT_PATH) clean
152
153optee-linuxdriver: linux
154 make -C $(LINUX_PATH) \
155 V=0 \
156 ARCH=arm64 \
157 CROSS_COMPILE="$(CCACHE)$(AARCH64_CROSS_COMPILE)" \
158 LOCALVERSION= \
159 M=$(OPTEE_LINUXDRIVER_PATH) modules
160
161optee-linuxdriver-clean:
162 make -C $(LINUX_PATH) \
163 M=$(OPTEE_LINUXDRIVER_PATH) clean
164
165generate-dtb:
166 $(LINUX_PATH)/scripts/dtc/dtc \
167 -O dtb \
168 -o $(FOUNDATION_PATH)/fdt.dtb \
169 -b 0 \
170 -i . $(OPTEE_LINUXDRIVER_PATH)/fdts/fvp-foundation-gicv2-psci.dts
171
172################################################################################
173# xtest / optee_test
174################################################################################
175xtest: optee-os optee-client
176 @if [ -d "$(OPTEE_TEST_PATH)" ]; then \
177 make -C $(OPTEE_TEST_PATH) \
178 -j`getconf _NPROCESSORS_ONLN` \
179 CROSS_COMPILE_HOST="$(CCACHE)$(AARCH64_CROSS_COMPILE)" \
180 CROSS_COMPILE_TA="$(CCACHE)$(AARCH32_CROSS_COMPILE)" \
181 TA_DEV_KIT_DIR=$(OPTEE_OS_PATH)/out/arm-plat-vexpress/export-user_ta \
182 O=$(OPTEE_TEST_OUT_PATH); \
183 fi
184
185################################################################################
186# Root FS
187################################################################################
188.PHONY: filelist-tee
189filelist-tee:
190 @echo "# xtest / optee_test" > $(GEN_ROOTFS_FILELIST)
191 @find $(OPTEE_TEST_OUT_PATH) -type f -name "xtest" | sed 's/\(.*\)/file \/bin\/xtest \1 755 0 0/g' >> $(GEN_ROOTFS_FILELIST)
192 @echo "# TAs" >> $(GEN_ROOTFS_FILELIST)
193 @echo "dir /lib/optee_armtz 755 0 0" >> $(GEN_ROOTFS_FILELIST)
194 @find $(OPTEE_TEST_OUT_PATH) -name "*.ta" | \
195 sed 's/\(.*\)\/\(.*\)/file \/lib\/optee_armtz\/\2 \1\/\2 444 0 0/g' >> $(GEN_ROOTFS_FILELIST)
196 @echo "# Secure storage dig" >> $(GEN_ROOTFS_FILELIST)
197 @echo "dir /data 755 0 0" >> $(GEN_ROOTFS_FILELIST)
198 @echo "dir /data/tee 755 0 0" >> $(GEN_ROOTFS_FILELIST)
199 @echo "# OP-TEE device" >> $(GEN_ROOTFS_FILELIST)
200 @echo "dir /lib/modules 755 0 0" >> $(GEN_ROOTFS_FILELIST)
201 @echo "dir /lib/modules/$(call KERNEL_VERSION) 755 0 0" >> $(GEN_ROOTFS_FILELIST)
202 @echo "file /lib/modules/$(call KERNEL_VERSION)/optee.ko $(OPTEE_LINUXDRIVER_PATH)/core/optee.ko 755 0 0" >> $(GEN_ROOTFS_FILELIST)
203 @echo "file /lib/modules/$(call KERNEL_VERSION)/optee_armtz.ko $(OPTEE_LINUXDRIVER_PATH)/armtz/optee_armtz.ko 755 0 0" >> $(GEN_ROOTFS_FILELIST)
204 @echo "# OP-TEE Client" >> $(GEN_ROOTFS_FILELIST)
205 @echo "file /bin/tee-supplicant $(OPTEE_CLIENT_EXPORT)/bin/tee-supplicant 755 0 0" >> $(GEN_ROOTFS_FILELIST)
206 @echo "dir /lib/aarch64-linux-gnu 755 0 0" >> $(GEN_ROOTFS_FILELIST)
207 @echo "file /lib/aarch64-linux-gnu/libteec.so.1.0 $(OPTEE_CLIENT_EXPORT)/lib/libteec.so.1.0 755 0 0" >> $(GEN_ROOTFS_FILELIST)
208 @echo "slink /lib/aarch64-linux-gnu/libteec.so.1 libteec.so.1.0 755 0 0" >> $(GEN_ROOTFS_FILELIST)
209 @echo "slink /lib/aarch64-linux-gnu/libteec.so libteec.so.1 755 0 0" >> $(GEN_ROOTFS_FILELIST)
210
211update_rootfs: busybox optee-client optee-linuxdriver xtest filelist-tee
212 cat $(GEN_ROOTFS_PATH)/filelist-final.txt $(GEN_ROOTFS_PATH)/filelist-tee.txt > $(GEN_ROOTFS_PATH)/filelist.tmp
213 cd $(GEN_ROOTFS_PATH); \
214 $(LINUX_PATH)/usr/gen_init_cpio $(GEN_ROOTFS_PATH)/filelist.tmp | gzip > $(GEN_ROOTFS_PATH)/filesystem.cpio.gz
215
216################################################################################
217# Run targets
218################################################################################
219# This target enforces updating root fs etc
220run: | update_rootfs run-only
221
222run-only:
223 @ln -sf $(LINUX_PATH)/arch/arm64/boot/Image $(FOUNDATION_PATH)
224 @ln -sf $(GEN_ROOTFS_PATH)/filesystem.cpio.gz $(FOUNDATION_PATH)
225 @cd $(FOUNDATION_PATH); \
226 $(FOUNDATION_PATH)/models/Linux64_GCC-4.1/Foundation_Platform \
227 --cores=4 \
228 --secure-memory \
229 --visualization \
230 --gicv3 \
231 --data="$(ARM_TF_PATH)/build/fvp/release/bl1.bin"@0x0 \
232 --data="$(ARM_TF_PATH)/build/fvp/release/fip.bin"@0x8000000