blob: 1721eee028b8c0d5a37a95ce26573d5afb0dea7a [file] [log] [blame]
Pascal Brandd6536da2015-09-01 10:38:43 +02001#
2# Common definition to all platforms
3#
4
Pascal Brand070d9552015-09-01 15:33:22 +02005BASH ?= bash
Pascal Brandd6536da2015-09-01 10:38:43 +02006ROOT ?= $(shell pwd)/..
7
Philip Attfield3f9250f2016-09-14 07:43:32 +02008BUILD_PATH ?= $(ROOT)/build
Pascal Brandd6536da2015-09-01 10:38:43 +02009LINUX_PATH ?= $(ROOT)/linux
Victor Chong9f0d1202016-04-23 16:28:31 +010010OPTEE_GENDRV_MODULE ?= $(LINUX_PATH)/drivers/tee/optee/optee.ko
Pascal Brand440ef9c2015-09-08 16:01:58 +020011GEN_ROOTFS_PATH ?= $(ROOT)/gen_rootfs
12GEN_ROOTFS_FILELIST ?= $(GEN_ROOTFS_PATH)/filelist-tee.txt
Pascal Brandd6536da2015-09-01 10:38:43 +020013OPTEE_OS_PATH ?= $(ROOT)/optee_os
14OPTEE_CLIENT_PATH ?= $(ROOT)/optee_client
15OPTEE_CLIENT_EXPORT ?= $(OPTEE_CLIENT_PATH)/out/export
Pascal Brandd6536da2015-09-01 10:38:43 +020016OPTEE_TEST_PATH ?= $(ROOT)/optee_test
17OPTEE_TEST_OUT_PATH ?= $(ROOT)/optee_test/out
Victor Chong8519bcf2016-07-15 08:43:03 +010018HELLOWORLD_PATH ?= $(ROOT)/hello_world
Pascal Brandd6536da2015-09-01 10:38:43 +020019
Etienne Carrierecc23f6b2016-10-21 10:16:00 +020020# default high verbosity. slow uarts shall specify lower if prefered
Pascal Brand23ef2052016-03-09 15:25:01 +010021CFG_TEE_CORE_LOG_LEVEL ?= 3
22
Pascal Brandd6536da2015-09-01 10:38:43 +020023CCACHE ?= $(shell which ccache) # Don't remove this comment (space is needed)
24
Igor Opaniuk97d05292016-10-26 14:46:14 +030025# Accessing a shared folder on the host from QEMU:
26# # Set QEMU_VIRTFS_ENABLE to 'y' and adjust QEMU_VIRTFS_HOST_DIR
27# # Then in QEMU, run:
28# # $ mount -t 9p -o trans=virtio host <mount_point>
29QEMU_VIRTFS_ENABLE ?= n
30QEMU_VIRTFS_HOST_DIR ?= $(ROOT)
Pascal Brand6044eb52016-02-23 15:48:31 +010031
32################################################################################
33# Check coherency of compilation mode
34################################################################################
35
36ifneq ($(COMPILE_NS_USER),)
37ifeq ($(COMPILE_NS_KERNEL),)
38$(error COMPILE_NS_KERNEL must be defined as COMPILE_NS_USER=$(COMPILE_NS_USER) is defined)
39endif
40ifeq (,$(filter $(COMPILE_NS_USER),32 64))
41$(error COMPILE_NS_USER=$(COMPILE_NS_USER) - Should be 32 or 64)
42endif
43endif
44
45ifneq ($(COMPILE_NS_KERNEL),)
46ifeq ($(COMPILE_NS_USER),)
47$(error COMPILE_NS_USER must be defined as COMPILE_NS_KERNEL=$(COMPILE_NS_KERNEL) is defined)
48endif
49ifeq (,$(filter $(COMPILE_NS_KERNEL),32 64))
50$(error COMPILE_NS_KERNEL=$(COMPILE_NS_KERNEL) - Should be 32 or 64)
51endif
52endif
53
54ifeq ($(COMPILE_NS_KERNEL),32)
55ifneq ($(COMPILE_NS_USER),32)
56$(error COMPILE_NS_USER=$(COMPILE_NS_USER) - Should be 32 as COMPILE_NS_KERNEL=$(COMPILE_NS_KERNEL))
57endif
58endif
59
60ifneq ($(COMPILE_S_USER),)
61ifeq ($(COMPILE_S_KERNEL),)
62$(error COMPILE_S_KERNEL must be defined as COMPILE_S_USER=$(COMPILE_S_USER) is defined)
63endif
64ifeq (,$(filter $(COMPILE_S_USER),32 64))
65$(error COMPILE_S_USER=$(COMPILE_S_USER) - Should be 32 or 64)
66endif
67endif
68
69ifneq ($(COMPILE_S_KERNEL),)
70OPTEE_OS_COMMON_EXTRA_FLAGS ?= O=out/arm
71OPTEE_OS_BIN ?= $(OPTEE_OS_PATH)/out/arm/core/tee.bin
72ifeq ($(COMPILE_S_USER),)
73$(error COMPILE_S_USER must be defined as COMPILE_S_KERNEL=$(COMPILE_S_KERNEL) is defined)
74endif
75ifeq (,$(filter $(COMPILE_S_KERNEL),32 64))
76$(error COMPILE_S_KERNEL=$(COMPILE_S_KERNEL) - Should be 32 or 64)
77endif
78endif
79
80ifeq ($(COMPILE_S_KERNEL),32)
81ifneq ($(COMPILE_S_USER),32)
82$(error COMPILE_S_USER=$(COMPILE_S_USER) - Should be 32 as COMPILE_S_KERNEL=$(COMPILE_S_KERNEL))
83endif
84endif
85
86
87################################################################################
88# set the compiler when COMPILE_xxx are defined
89################################################################################
Pascal Brandefe56592016-03-03 10:46:52 +010090CROSS_COMPILE_NS_USER ?= "$(CCACHE)$(AARCH$(COMPILE_NS_USER)_CROSS_COMPILE)"
91CROSS_COMPILE_NS_KERNEL ?= "$(CCACHE)$(AARCH$(COMPILE_NS_KERNEL)_CROSS_COMPILE)"
92CROSS_COMPILE_S_USER ?= "$(CCACHE)$(AARCH$(COMPILE_S_USER)_CROSS_COMPILE)"
93CROSS_COMPILE_S_KERNEL ?= "$(CCACHE)$(AARCH$(COMPILE_S_KERNEL)_CROSS_COMPILE)"
Pascal Brand6044eb52016-02-23 15:48:31 +010094
95ifeq ($(COMPILE_S_USER),32)
Pascal Brand6044eb52016-02-23 15:48:31 +010096OPTEE_OS_TA_DEV_KIT_DIR ?= $(OPTEE_OS_PATH)/out/arm/export-ta_arm32
97endif
98ifeq ($(COMPILE_S_USER),64)
Pascal Brand6044eb52016-02-23 15:48:31 +010099OPTEE_OS_TA_DEV_KIT_DIR ?= $(OPTEE_OS_PATH)/out/arm/export-ta_arm64
100endif
101
Pascal Brand6044eb52016-02-23 15:48:31 +0100102ifeq ($(COMPILE_S_KERNEL),64)
Pascal Brand6044eb52016-02-23 15:48:31 +0100103OPTEE_OS_COMMON_EXTRA_FLAGS += CFG_ARM64_core=y
104endif
105
106
Pascal Brandd6536da2015-09-01 10:38:43 +0200107################################################################################
Pascal Brand070d9552015-09-01 15:33:22 +0200108# defines, macros, configuration etc
109################################################################################
110define KERNEL_VERSION
Jerome Forissierae45fbf2015-09-04 09:40:17 +0200111$(shell cd $(LINUX_PATH) && $(MAKE) --no-print-directory kernelversion)
Pascal Brand070d9552015-09-01 15:33:22 +0200112endef
113DEBUG ?= 0
114
115################################################################################
Pascal Brandcb452602015-10-13 10:46:33 +0200116# default target is all
117################################################################################
118all:
119
120################################################################################
Pascal Brand440ef9c2015-09-08 16:01:58 +0200121# Busybox
122################################################################################
123BUSYBOX_COMMON_TARGET ?= TOBEDEFINED
124BUSYBOX_CLEAN_COMMON_TARGET ?= TOBEDEFINED
Pascal Brand440ef9c2015-09-08 16:01:58 +0200125
126busybox-common: linux
127 cd $(GEN_ROOTFS_PATH) && \
Pascal Brandefe56592016-03-03 10:46:52 +0100128 CROSS_COMPILE=$(CROSS_COMPILE_NS_USER) \
Pascal Brand440ef9c2015-09-08 16:01:58 +0200129 PATH=${PATH}:$(LINUX_PATH)/usr \
130 $(GEN_ROOTFS_PATH)/generate-cpio-rootfs.sh \
131 $(BUSYBOX_COMMON_TARGET)
132
133busybox-clean-common:
134 cd $(GEN_ROOTFS_PATH) && \
135 $(GEN_ROOTFS_PATH)/generate-cpio-rootfs.sh \
136 $(BUSYBOX_CLEAN_COMMON_TARGET)
137
138busybox-cleaner-common:
139 rm -rf $(GEN_ROOTFS_PATH)/build
140 rm -rf $(GEN_ROOTFS_PATH)/filelist-final.txt
Victor Chong87f5fcf2015-11-26 10:52:52 +0900141
Pascal Brande3d85982015-09-10 17:20:42 +0200142################################################################################
143# Linux
144################################################################################
145LINUX_COMMON_FLAGS ?= LOCALVERSION= CROSS_COMPILE=$(CROSS_COMPILE_NS_KERNEL)
146
147linux-common: linux-defconfig
148 $(MAKE) -C $(LINUX_PATH) $(LINUX_COMMON_FLAGS)
149
Jerome Forissiere1002382015-11-26 11:36:00 +0100150$(LINUX_PATH)/.config: $(LINUX_DEFCONFIG_COMMON_FILES)
151 cd $(LINUX_PATH) && \
152 ARCH=$(LINUX_DEFCONFIG_COMMON_ARCH) \
153 scripts/kconfig/merge_config.sh $(LINUX_DEFCONFIG_COMMON_FILES)
154
Pascal Brande3d85982015-09-10 17:20:42 +0200155linux-defconfig-clean-common:
Victor Chong87f5fcf2015-11-26 10:52:52 +0900156 rm -f $(LINUX_PATH)/.config
Pascal Brande3d85982015-09-10 17:20:42 +0200157
Victor Chong87f5fcf2015-11-26 10:52:52 +0900158# LINUX_CLEAN_COMMON_FLAGS can be defined in specific makefiles (hikey.mk,...)
159# if necessary
160
Pascal Brande3d85982015-09-10 17:20:42 +0200161linux-clean-common: linux-defconfig-clean
162 $(MAKE) -C $(LINUX_PATH) $(LINUX_CLEAN_COMMON_FLAGS) clean
163
Victor Chong87f5fcf2015-11-26 10:52:52 +0900164# LINUX_CLEANER_COMMON_FLAGS can be defined in specific makefiles (hikey.mk,...)
165# if necessary
Pascal Brande3d85982015-09-10 17:20:42 +0200166
167linux-cleaner-common: linux-defconfig-clean
Victor Chong87f5fcf2015-11-26 10:52:52 +0900168 $(MAKE) -C $(LINUX_PATH) $(LINUX_CLEANER_COMMON_FLAGS) distclean
Pascal Brande3d85982015-09-10 17:20:42 +0200169
Pascal Brand440ef9c2015-09-08 16:01:58 +0200170################################################################################
Pascal Brand9a0f50f2015-09-08 15:34:17 +0200171# EDK2 / Tianocore
172################################################################################
173# Make sure edksetup.sh only will be called once and that we don't rebuild
174# BaseTools again and again.
175$(EDK2_PATH)/Conf/target.txt:
176 set -e && cd $(EDK2_PATH) && $(BASH) edksetup.sh && \
177 $(MAKE) -j1 -C $(EDK2_PATH)/BaseTools
178
179edk2-common: $(EDK2_PATH)/Conf/target.txt
180 set -e && cd $(EDK2_PATH) && $(BASH) edksetup.sh && \
181 $(call edk2-call)
182
183edk2-clean-common:
184 set -e && cd $(EDK2_PATH) && $(BASH) edksetup.sh && \
185 $(call edk2-call) clean && \
186 $(MAKE) -j1 -C $(EDK2_PATH)/BaseTools clean && \
187 rm -f $(EDK2_PATH)/Conf/target.txt
Igor Opaniuk97d05292016-10-26 14:46:14 +0300188################################################################################
189# QEMU / QEMUv8
190################################################################################
191QEMU_CONFIGURE_PARAMS_COMMON = --cc="$(CCACHE)gcc" --extra-cflags="-Wno-error"
Pascal Brand9a0f50f2015-09-08 15:34:17 +0200192
Igor Opaniuk97d05292016-10-26 14:46:14 +0300193ifeq ($(QEMU_VIRTFS_ENABLE),y)
Jerome Forissier23b41312016-11-12 16:02:01 +0100194QEMU_CONFIGURE_PARAMS_COMMON += --enable-virtfs
Igor Opaniuk97d05292016-10-26 14:46:14 +0300195QEMU_EXTRA_ARGS +=\
196 -fsdev local,id=fsdev0,path=$(QEMU_VIRTFS_HOST_DIR),security_model=none \
197 -device virtio-9p-device,fsdev=fsdev0,mount_tag=host
198endif
Pascal Brand9a0f50f2015-09-08 15:34:17 +0200199################################################################################
Pascal Brand070d9552015-09-01 15:33:22 +0200200# OP-TEE
201################################################################################
Pascal Brand6044eb52016-02-23 15:48:31 +0100202OPTEE_OS_COMMON_FLAGS ?= \
203 $(OPTEE_OS_COMMON_EXTRA_FLAGS) \
204 CROSS_COMPILE=$(CROSS_COMPILE_S_USER) \
Jerome Forissierae45fbf2015-09-04 09:40:17 +0200205 CROSS_COMPILE_core=$(CROSS_COMPILE_S_KERNEL) \
Victor Chongbadc7922015-12-08 17:23:20 +0000206 CROSS_COMPILE_ta_arm64=$(AARCH64_CROSS_COMPILE) \
207 CROSS_COMPILE_ta_arm32=$(AARCH32_CROSS_COMPILE) \
Pascal Brand23ef2052016-03-09 15:25:01 +0100208 CFG_TEE_CORE_LOG_LEVEL=$(CFG_TEE_CORE_LOG_LEVEL) \
Jerome Forissierae45fbf2015-09-04 09:40:17 +0200209 DEBUG=$(DEBUG)
210
Pascal Brand070d9552015-09-01 15:33:22 +0200211optee-os-common:
Jerome Forissierae45fbf2015-09-04 09:40:17 +0200212 $(MAKE) -C $(OPTEE_OS_PATH) $(OPTEE_OS_COMMON_FLAGS)
213
Pascal Brand6044eb52016-02-23 15:48:31 +0100214OPTEE_OS_CLEAN_COMMON_FLAGS ?= $(OPTEE_OS_COMMON_EXTRA_FLAGS)
Pascal Brand070d9552015-09-01 15:33:22 +0200215
Victor Chong8519bcf2016-07-15 08:43:03 +0100216optee-os-clean-common: xtest-clean helloworld-clean
Jerome Forissierae45fbf2015-09-04 09:40:17 +0200217 $(MAKE) -C $(OPTEE_OS_PATH) $(OPTEE_OS_CLEAN_COMMON_FLAGS) clean
218
219OPTEE_CLIENT_COMMON_FLAGS ?= CROSS_COMPILE=$(CROSS_COMPILE_NS_USER)
Pascal Brand070d9552015-09-01 15:33:22 +0200220
221optee-client-common:
Jerome Forissierae45fbf2015-09-04 09:40:17 +0200222 $(MAKE) -C $(OPTEE_CLIENT_PATH) $(OPTEE_CLIENT_COMMON_FLAGS)
223
Victor Chong87f5fcf2015-11-26 10:52:52 +0900224# OPTEE_CLIENT_CLEAN_COMMON_FLAGS can be defined in specific makefiles
225# (hikey.mk,...) if necessary
Pascal Brand070d9552015-09-01 15:33:22 +0200226
227optee-client-clean-common:
Jerome Forissierae45fbf2015-09-04 09:40:17 +0200228 $(MAKE) -C $(OPTEE_CLIENT_PATH) $(OPTEE_CLIENT_CLEAN_COMMON_FLAGS) \
229 clean
230
Pascal Brand070d9552015-09-01 15:33:22 +0200231################################################################################
Pascal Brandd6536da2015-09-01 10:38:43 +0200232# xtest / optee_test
233################################################################################
Jerome Forissierae45fbf2015-09-04 09:40:17 +0200234XTEST_COMMON_FLAGS ?= CROSS_COMPILE_HOST=$(CROSS_COMPILE_NS_USER)\
235 CROSS_COMPILE_TA=$(CROSS_COMPILE_S_USER) \
236 TA_DEV_KIT_DIR=$(OPTEE_OS_TA_DEV_KIT_DIR) \
Etienne Carriere5e113512016-10-21 10:13:57 +0200237 OPTEE_CLIENT_EXPORT=$(OPTEE_CLIENT_EXPORT) \
Pascal Brand6044eb52016-02-23 15:48:31 +0100238 COMPILE_NS_USER=$(COMPILE_NS_USER) \
Jerome Forissierae45fbf2015-09-04 09:40:17 +0200239 O=$(OPTEE_TEST_OUT_PATH)
240
Pascal Brandd6536da2015-09-01 10:38:43 +0200241xtest-common: optee-os optee-client
Pascal Branddc83b9a2015-09-24 02:43:25 +0200242 $(MAKE) -C $(OPTEE_TEST_PATH) $(XTEST_COMMON_FLAGS)
Pascal Brandd6536da2015-09-01 10:38:43 +0200243
Victor Chong87f5fcf2015-11-26 10:52:52 +0900244XTEST_CLEAN_COMMON_FLAGS ?= TA_DEV_KIT_DIR=$(OPTEE_OS_TA_DEV_KIT_DIR)
Jerome Forissierae45fbf2015-09-04 09:40:17 +0200245
Pascal Brandd6536da2015-09-01 10:38:43 +0200246xtest-clean-common:
Pascal Branddc83b9a2015-09-24 02:43:25 +0200247 $(MAKE) -C $(OPTEE_TEST_PATH) $(XTEST_CLEAN_COMMON_FLAGS) clean
Pascal Brandd6536da2015-09-01 10:38:43 +0200248
Pascal Branddc83b9a2015-09-24 02:43:25 +0200249XTEST_PATCH_COMMON_FLAGS ?= $(XTEST_COMMON_FLAGS)
Jerome Forissierae45fbf2015-09-04 09:40:17 +0200250
Pascal Branddc83b9a2015-09-24 02:43:25 +0200251xtest-patch-common:
252 $(MAKE) -C $(OPTEE_TEST_PATH) $(XTEST_PATCH_COMMON_FLAGS) patch
Victor Chong8519bcf2016-07-15 08:43:03 +0100253
254################################################################################
255# hello_world
256################################################################################
257HELLOWORLD_COMMON_FLAGS ?= HOST_CROSS_COMPILE=$(CROSS_COMPILE_NS_USER)\
258 TA_CROSS_COMPILE=$(CROSS_COMPILE_S_USER) \
259 TA_DEV_KIT_DIR=$(OPTEE_OS_TA_DEV_KIT_DIR) \
260 TEEC_EXPORT=$(OPTEE_CLIENT_EXPORT)
261
262helloworld-common: optee-os optee-client
263 $(MAKE) -C $(HELLOWORLD_PATH) $(HELLOWORLD_COMMON_FLAGS)
264
265HELLOWORLD_CLEAN_COMMON_FLAGS ?= TA_DEV_KIT_DIR=$(OPTEE_OS_TA_DEV_KIT_DIR)
266
267helloworld-clean-common:
268 $(MAKE) -C $(HELLOWORLD_PATH) $(HELLOWORLD_CLEAN_COMMON_FLAGS) clean
Etienne Carriere5e113512016-10-21 10:13:57 +0200269
270################################################################################
271# rootfs
272################################################################################
273update_rootfs-common: busybox filelist-tee
274 cat $(GEN_ROOTFS_PATH)/filelist-final.txt > $(GEN_ROOTFS_PATH)/filelist.tmp
275 cat $(GEN_ROOTFS_FILELIST) >> $(GEN_ROOTFS_PATH)/filelist.tmp
276 cd $(GEN_ROOTFS_PATH) && \
277 $(LINUX_PATH)/usr/gen_init_cpio $(GEN_ROOTFS_PATH)/filelist.tmp | \
278 gzip > $(GEN_ROOTFS_PATH)/filesystem.cpio.gz
279
280update_rootfs-clean-common:
281 rm -f $(GEN_ROOTFS_PATH)/filesystem.cpio.gz
282 rm -f $(GEN_ROOTFS_PATH)/filelist-all.txt
283 rm -f $(GEN_ROOTFS_PATH)/filelist-tmp.txt
284 rm -f $(GEN_ROOTFS_FILELIST)
285
286filelist-tee-common: fl:=$(GEN_ROOTFS_FILELIST)
287filelist-tee-common: optee-client xtest helloworld
288 @echo "# filelist-tee-common /start" > $(fl)
289 @echo "dir /lib/optee_armtz 755 0 0" >> $(fl)
290 @echo "# xtest / optee_test" >> $(fl)
291 @find $(OPTEE_TEST_OUT_PATH) -type f -name "xtest" | \
292 sed 's/\(.*\)/file \/bin\/xtest \1 755 0 0/g' >> $(fl)
293 @find $(OPTEE_TEST_OUT_PATH) -name "*.ta" | \
294 sed 's/\(.*\)\/\(.*\)/file \/lib\/optee_armtz\/\2 \1\/\2 444 0 0/g' \
295 >> $(fl)
296 @if [ -e $(HELLOWORLD_PATH)/host/hello_world ]; then \
297 echo "file /bin/hello_world" \
298 "$(HELLOWORLD_PATH)/host/hello_world 755 0 0" >> $(fl); \
299 echo "file /lib/optee_armtz/8aaaf200-2450-11e4-abe20002a5d5c51b.ta" \
300 "$(HELLOWORLD_PATH)/ta/8aaaf200-2450-11e4-abe20002a5d5c51b.ta" \
301 "444 0 0" >> $(fl); \
302 fi
303 @echo "# Secure storage dir" >> $(fl)
304 @echo "dir /data 755 0 0" >> $(fl)
305 @echo "dir /data/tee 755 0 0" >> $(fl)
306 @if [ -e $(OPTEE_GENDRV_MODULE) ]; then \
307 echo "# OP-TEE device" >> $(fl); \
308 echo "dir /lib/modules 755 0 0" >> $(fl); \
309 echo "dir /lib/modules/$(call KERNEL_VERSION) 755 0 0" \
310 >> $(fl); \
311 echo "file /lib/modules/$(call KERNEL_VERSION)/optee.ko" \
312 "$(OPTEE_GENDRV_MODULE) 755 0 0" \
313 >> $(fl); \
314 fi
315 @echo "# OP-TEE Client" >> $(fl)
316 @echo "file /bin/tee-supplicant $(OPTEE_CLIENT_EXPORT)/bin/tee-supplicant 755 0 0" \
317 >> $(fl)
318 @echo "file /lib/libteec.so.1.0 $(OPTEE_CLIENT_EXPORT)/lib/libteec.so.1.0 755 0 0" \
319 >> $(fl)
320 @echo "slink /lib/libteec.so.1 libteec.so.1.0 755 0 0" >> $(fl)
321 @echo "slink /lib/libteec.so libteec.so.1 755 0 0" >> $(fl)
322 @if [ -e $(OPTEE_CLIENT_EXPORT)/lib/libsqlfs.so.1.0 ]; then \
323 echo "file /lib/libsqlfs.so.1.0" \
324 "$(OPTEE_CLIENT_EXPORT)/lib/libsqlfs.so.1.0 755 0 0" \
325 >> $(fl); \
326 echo "slink /lib/libsqlfs.so.1 libsqlfs.so.1.0 755 0 0" >> $(fl); \
327 echo "slink /lib/libsqlfs.so libsqlfs.so.1 755 0 0" >> $(fl); \
328 fi
329 @echo "# filelist-tee-common /end" >> $(fl)