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