Use mix compilation mode on all platforms

Reviewed-by: Jerome Forissier <jerome.forissier@linaro.org>
Reviewed-by: Joakim Bech <joakim.bech@linaro.org>
Signed-off-by: Pascal Brand <pascal.brand@st.com>
diff --git a/common.mk b/common.mk
index 76f492c..7d146ae 100644
--- a/common.mk
+++ b/common.mk
@@ -5,15 +5,6 @@
 BASH ?= bash
 ROOT ?= $(shell pwd)/..
 
-#
-# Must declare in platform specific makefiles:
-# - CROSS_COMPILE_NS_USER / CROSS_COMPILE_NS_KERNEL
-# - CROSS_COMPILE_S_USER / CROSS_COMPILE_S_KERNEL
-#
-# - OPTEE_OS_BIN
-# - OPTEE_OS_TA_DEV_KIT_DIR
-#
-
 LINUX_PATH			?= $(ROOT)/linux
 GEN_ROOTFS_PATH			?= $(ROOT)/gen_rootfs
 GEN_ROOTFS_FILELIST		?= $(GEN_ROOTFS_PATH)/filelist-tee.txt
@@ -85,35 +76,19 @@
 ################################################################################
 # set the compiler when COMPILE_xxx are defined
 ################################################################################
-
-ifeq ($(COMPILE_NS_USER),32)
-CROSS_COMPILE_NS_USER	?= "$(CCACHE)$(AARCH32_CROSS_COMPILE)"
-endif
-ifeq ($(COMPILE_NS_USER),64)
-CROSS_COMPILE_NS_USER	?= "$(CCACHE)$(AARCH64_CROSS_COMPILE)"
-endif
-
-ifeq ($(COMPILE_NS_KERNEL),32)
-CROSS_COMPILE_NS_KERNEL	?= "$(CCACHE)$(AARCH32_CROSS_COMPILE)"
-endif
-ifeq ($(COMPILE_NS_KERNEL),64)
-CROSS_COMPILE_NS_KERNEL	?= "$(CCACHE)$(AARCH64_CROSS_COMPILE)"
-endif
+CROSS_COMPILE_NS_USER   ?= "$(CCACHE)$(AARCH$(COMPILE_NS_USER)_CROSS_COMPILE)"
+CROSS_COMPILE_NS_KERNEL ?= "$(CCACHE)$(AARCH$(COMPILE_NS_KERNEL)_CROSS_COMPILE)"
+CROSS_COMPILE_S_USER    ?= "$(CCACHE)$(AARCH$(COMPILE_S_USER)_CROSS_COMPILE)"
+CROSS_COMPILE_S_KERNEL  ?= "$(CCACHE)$(AARCH$(COMPILE_S_KERNEL)_CROSS_COMPILE)"
 
 ifeq ($(COMPILE_S_USER),32)
-CROSS_COMPILE_S_USER	?= "$(CCACHE)$(AARCH32_CROSS_COMPILE)"
 OPTEE_OS_TA_DEV_KIT_DIR	?= $(OPTEE_OS_PATH)/out/arm/export-ta_arm32
 endif
 ifeq ($(COMPILE_S_USER),64)
-CROSS_COMPILE_S_USER	?= "$(CCACHE)$(AARCH64_CROSS_COMPILE)"
 OPTEE_OS_TA_DEV_KIT_DIR	?= $(OPTEE_OS_PATH)/out/arm/export-ta_arm64
 endif
 
-ifeq ($(COMPILE_S_KERNEL),32)
-CROSS_COMPILE_S_KERNEL	?= "$(CCACHE)$(AARCH32_CROSS_COMPILE)"
-endif
 ifeq ($(COMPILE_S_KERNEL),64)
-CROSS_COMPILE_S_KERNEL		?= "$(CCACHE)$(AARCH64_CROSS_COMPILE)"
 OPTEE_OS_COMMON_EXTRA_FLAGS	+= CFG_ARM64_core=y
 endif
 
@@ -136,11 +111,10 @@
 ################################################################################
 BUSYBOX_COMMON_TARGET		?= TOBEDEFINED
 BUSYBOX_CLEAN_COMMON_TARGET	?= TOBEDEFINED
-BUSYBOX_COMMON_CCDIR		?= TOBEDEFINED
 
 busybox-common: linux
 	cd $(GEN_ROOTFS_PATH) &&  \
-		CC_DIR=$(BUSYBOX_COMMON_CCDIR) \
+		CROSS_COMPILE=$(CROSS_COMPILE_NS_USER) \
 		PATH=${PATH}:$(LINUX_PATH)/usr \
 		$(GEN_ROOTFS_PATH)/generate-cpio-rootfs.sh \
 			$(BUSYBOX_COMMON_TARGET)
diff --git a/fvp.mk b/fvp.mk
index 08bece4..86ce0a0 100644
--- a/fvp.mk
+++ b/fvp.mk
@@ -5,9 +5,8 @@
 # Application), NS_KERNEL (Non Secure Kernel), S_KERNEL (Secure Kernel) and
 # S_USER (Secure User - TA) are compiled
 ################################################################################
-
-COMPILE_NS_USER   := 64
-COMPILE_NS_KERNEL := 64
+COMPILE_NS_USER   ?= 64
+override COMPILE_NS_KERNEL := 64
 COMPILE_S_USER    ?= 64
 COMPILE_S_KERNEL  ?= 64
 
@@ -59,9 +58,8 @@
 ################################################################################
 # Busybox
 ################################################################################
-BUSYBOX_COMMON_TARGET = fvp-aarch64
-BUSYBOX_CLEAN_COMMON_TARGET = fvp-aarch64 clean
-BUSYBOX_COMMON_CCDIR = $(AARCH64_PATH)
+BUSYBOX_COMMON_TARGET = fvp
+BUSYBOX_CLEAN_COMMON_TARGET = fvp clean
 
 busybox: busybox-common
 
@@ -147,6 +145,13 @@
 ################################################################################
 # Root FS
 ################################################################################
+ifeq ($(COMPILE_NS_USER),32)
+ROOTFS_LIBPATH	?= "/lib/arm-linux-gnueabihf"
+endif
+ifeq ($(COMPILE_NS_USER),64)
+ROOTFS_LIBPATH	?= "/lib/aarch64-linux-gnu"
+endif
+
 .PHONY: filelist-tee
 filelist-tee:
 	@echo "# xtest / optee_test" > $(GEN_ROOTFS_FILELIST)
@@ -165,10 +170,10 @@
 	@echo "file /lib/modules/$(call KERNEL_VERSION)/optee_armtz.ko $(OPTEE_LINUXDRIVER_PATH)/armtz/optee_armtz.ko 755 0 0" >> $(GEN_ROOTFS_FILELIST)
 	@echo "# OP-TEE Client" >> $(GEN_ROOTFS_FILELIST)
 	@echo "file /bin/tee-supplicant $(OPTEE_CLIENT_EXPORT)/bin/tee-supplicant 755 0 0" >> $(GEN_ROOTFS_FILELIST)
-	@echo "dir /lib/aarch64-linux-gnu 755 0 0" >> $(GEN_ROOTFS_FILELIST)
-	@echo "file /lib/aarch64-linux-gnu/libteec.so.1.0 $(OPTEE_CLIENT_EXPORT)/lib/libteec.so.1.0 755 0 0" >> $(GEN_ROOTFS_FILELIST)
-	@echo "slink /lib/aarch64-linux-gnu/libteec.so.1 libteec.so.1.0 755 0 0" >> $(GEN_ROOTFS_FILELIST)
-	@echo "slink /lib/aarch64-linux-gnu/libteec.so libteec.so.1 755 0 0" >> $(GEN_ROOTFS_FILELIST)
+	@echo "dir $(ROOTFS_LIBPATH) 755 0 0" >> $(GEN_ROOTFS_FILELIST)
+	@echo "file $(ROOTFS_LIBPATH)/libteec.so.1.0 $(OPTEE_CLIENT_EXPORT)/lib/libteec.so.1.0 755 0 0" >> $(GEN_ROOTFS_FILELIST)
+	@echo "slink $(ROOTFS_LIBPATH)/libteec.so.1 libteec.so.1.0 755 0 0" >> $(GEN_ROOTFS_FILELIST)
+	@echo "slink $(ROOTFS_LIBPATH)/libteec.so libteec.so.1 755 0 0" >> $(GEN_ROOTFS_FILELIST)
 
 update_rootfs: busybox optee-client optee-linuxdriver xtest filelist-tee
 	cat $(GEN_ROOTFS_PATH)/filelist-final.txt $(GEN_ROOTFS_PATH)/filelist-tee.txt > $(GEN_ROOTFS_PATH)/filelist.tmp
diff --git a/hikey.mk b/hikey.mk
index 39f9e53..35f46d1 100644
--- a/hikey.mk
+++ b/hikey.mk
@@ -1,14 +1,12 @@
 ################################################################################
-# User-defined variables
-# Edit so these match your target
-# NOTE: If making changes after a build, please clean before rebuilding!
+# Following variables defines how the NS_USER (Non Secure User - Client
+# Application), NS_KERNEL (Non Secure Kernel), S_KERNEL (Secure Kernel) and
+# S_USER (Secure User - TA) are compiled
 ################################################################################
-# Non-secure user mode (root fs binaries): 32 or 64-bit [default 64]
-NSU ?= 64
-# Secure kernel (OP-TEE OS): 32 or 64-bit [default 64]
-SK ?= 64
-# Secure user mode (Trusted Apps): 32 or 64-bit [default 32, requires SK=64 for 64]
-SU ?= 32
+COMPILE_NS_USER   ?= 64
+override COMPILE_NS_KERNEL := 64
+COMPILE_S_USER    ?= 32
+COMPILE_S_KERNEL  ?= 64
 
 # Normal/secure world console UARTs: 3 or 0 [default 3]
 CFG_NW_CONSOLE_UART ?= 3
@@ -22,32 +20,11 @@
 ################################################################################
 # Mandatory definition to use common.mk
 ################################################################################
-ifeq ($(SK),32)
-ifeq ($(SU),64)
-$(error 64-bit secure user mode requires 64-bit secure kernel, i.e. SK=64)
-endif
-endif
-
-ifeq ($(NSU),64)
-CROSS_COMPILE_NS_USER		?= "$(CCACHE)$(AARCH64_CROSS_COMPILE)"
+ifeq ($(COMPILE_NS_USER),64)
 MULTIARCH			:= aarch64-linux-gnu
 else
-CROSS_COMPILE_NS_USER		?= "$(CCACHE)$(AARCH32_CROSS_COMPILE)"
 MULTIARCH			:= arm-linux-gnueabihf
 endif
-CROSS_COMPILE_NS_KERNEL		?= "$(CCACHE)$(AARCH64_CROSS_COMPILE)"
-ifeq ($(SU),64)
-CROSS_COMPILE_S_USER		?= "$(CCACHE)$(AARCH64_CROSS_COMPILE)"
-else
-CROSS_COMPILE_S_USER		?= "$(CCACHE)$(AARCH32_CROSS_COMPILE)"
-endif
-ifeq ($(SK),64)
-CROSS_COMPILE_S_KERNEL		?= "$(CCACHE)$(AARCH64_CROSS_COMPILE)"
-else
-CROSS_COMPILE_S_KERNEL		?= "$(CCACHE)$(AARCH32_CROSS_COMPILE)"
-endif
-OPTEE_OS_BIN 			?= $(OPTEE_OS_PATH)/out/arm-plat-hikey/core/tee.bin
-OPTEE_OS_TA_DEV_KIT_DIR		?= $(OPTEE_OS_PATH)/out/arm-plat-hikey/export-ta_arm$(SU)
 
 ################################################################################
 # Paths to git projects and various binaries
@@ -130,11 +107,6 @@
 ################################################################################
 BUSYBOX_COMMON_TARGET = hikey nocpio
 BUSYBOX_CLEAN_COMMON_TARGET = hikey clean
-ifeq ($(NSU),64)
-BUSYBOX_COMMON_CCDIR = $(AARCH64_PATH)
-else
-BUSYBOX_COMMON_CCDIR = $(AARCH32_PATH)
-endif
 
 busybox: busybox-common
 
@@ -217,11 +189,6 @@
 OPTEE_OS_COMMON_FLAGS += PLATFORM=hikey CFG_TEE_TA_LOG_LEVEL=3 CFG_CONSOLE_UART=$(CFG_SW_CONSOLE_UART)
 OPTEE_OS_CLEAN_COMMON_FLAGS += PLATFORM=hikey
 
-ifeq ($(SK),64)
-OPTEE_OS_COMMON_FLAGS += CFG_ARM64_core=y
-OPTEE_OS_CLEAN_COMMON_FLAGS += CFG_ARM64_core=y
-endif
-
 optee-os: optee-os-common
 
 .PHONY: optee-os-clean
@@ -242,10 +209,6 @@
 ################################################################################
 # xtest / optee_test
 ################################################################################
-ifeq ($(NSU),32)
-XTEST_COMMON_FLAGS += CFG_ARM32=y
-XTEST_CLEAN_COMMON_FLAGS += CFG_ARM32=y
-endif
 
 xtest: xtest-common
 
@@ -289,8 +252,8 @@
 	cd $(STRACE_PATH); \
 	./bootstrap; \
 	set -e; \
-	./configure --host=$(MULTIARCH) CC="$(CCACHE)$(AARCH64_CROSS_COMPILE)gcc" LD=$(AARCH64_CROSS_COMPILE)ld; \
-	CC="$(CCACHE)$(AARCH64_CROSS_COMPILE)gcc" LD=$(AARCH64_CROSS_COMPILE)ld $(MAKE) -C $(STRACE_PATH)
+	./configure --host=$(MULTIARCH) CC="$(CCACHE)$(AARCH$(COMPILE_NS_USER)_CROSS_COMPILE)gcc" LD=$(AARCH$(COMPILE_NS_USER)_CROSS_COMPILE)ld; \
+	CC="$(CCACHE)$(AARCH$(COMPILE_NS_USER)_CROSS_COMPILE)gcc" LD=$(AARCH$(COMPILE_NS_USER)_CROSS_COMPILE)ld $(MAKE) -C $(STRACE_PATH)
 
 .PHONY: strace-clean
 strace-clean:
diff --git a/juno.mk b/juno.mk
index 8a4ce27..d2ddfd4 100644
--- a/juno.mk
+++ b/juno.mk
@@ -1,18 +1,18 @@
+################################################################################
+# Following variables defines how the NS_USER (Non Secure User - Client
+# Application), NS_KERNEL (Non Secure Kernel), S_KERNEL (Secure Kernel) and
+# S_USER (Secure User - TA) are compiled
+################################################################################
+override COMPILE_NS_USER   := 64
+override COMPILE_NS_KERNEL := 64
+override COMPILE_S_USER    := 64
+override COMPILE_S_KERNEL  := 64
+
 DEBUG ?= 0
 
 -include common.mk
 
 ################################################################################
-# Mandatory definition to use common.mk
-################################################################################
-CROSS_COMPILE_NS_USER	?= "$(CCACHE)$(AARCH64_CROSS_COMPILE)"
-CROSS_COMPILE_NS_KERNEL	?= "$(CCACHE)$(AARCH64_CROSS_COMPILE)"
-CROSS_COMPILE_S_USER	?= "$(CCACHE)$(AARCH64_CROSS_COMPILE)"
-CROSS_COMPILE_S_KERNEL	?= "$(CCACHE)$(AARCH64_CROSS_COMPILE)"
-OPTEE_OS_BIN		?= $(OPTEE_OS_PATH)/out/arm-plat-vexpress/core/tee.bin
-OPTEE_OS_TA_DEV_KIT_DIR	?= $(OPTEE_OS_PATH)/out/arm-plat-vexpress/export-ta_arm64
-
-################################################################################
 # Paths to git projects and various binaries
 ################################################################################
 ARM_TF_PATH		?= $(ROOT)/arm-trusted-firmware
@@ -55,9 +55,8 @@
 ################################################################################
 # Busybox
 ################################################################################
-BUSYBOX_COMMON_TARGET = fvp-aarch64
-BUSYBOX_CLEAN_COMMON_TARGET = fvp-aarch64 clean
-BUSYBOX_COMMON_CCDIR = $(AARCH64_PATH)
+BUSYBOX_COMMON_TARGET = fvp
+BUSYBOX_CLEAN_COMMON_TARGET = fvp clean
 
 busybox: busybox-common
 
@@ -111,7 +110,7 @@
 ################################################################################
 # OP-TEE
 ################################################################################
-OPTEE_OS_COMMON_FLAGS += PLATFORM=vexpress-juno CFG_ARM64_core=y
+OPTEE_OS_COMMON_FLAGS += PLATFORM=vexpress-juno
 optee-os: optee-os-common
 
 OPTEE_OS_CLEAN_COMMON_FLAGS += PLATFORM=vexpress-juno
diff --git a/mediatek.mk b/mediatek.mk
index 4e91935..26d3610 100644
--- a/mediatek.mk
+++ b/mediatek.mk
@@ -1,14 +1,14 @@
--include common.mk
+################################################################################
+# Following variables defines how the NS_USER (Non Secure User - Client
+# Application), NS_KERNEL (Non Secure Kernel), S_KERNEL (Secure Kernel) and
+# S_USER (Secure User - TA) are compiled
+################################################################################
+override COMPILE_NS_USER   := 64
+override COMPILE_NS_KERNEL := 64
+override COMPILE_S_USER    := 32
+override COMPILE_S_KERNEL  := 64
 
-################################################################################
-# Mandatory definition to use common.mk
-################################################################################
-CROSS_COMPILE_NS_USER		?= "$(CCACHE)$(AARCH64_CROSS_COMPILE)"
-CROSS_COMPILE_NS_KERNEL		?= "$(CCACHE)$(AARCH64_CROSS_COMPILE)"
-CROSS_COMPILE_S_USER		?= "$(CCACHE)$(AARCH32_CROSS_COMPILE)"
-CROSS_COMPILE_S_KERNEL		?= "$(CCACHE)$(AARCH64_CROSS_COMPILE)"
-OPTEE_OS_BIN 			?= $(OPTEE_OS_PATH)/out/arm-plat-mediatek/core/tee-pager.bin
-OPTEE_OS_TA_DEV_KIT_DIR		?= $(OPTEE_OS_PATH)/out/arm-plat-mediatek/export-ta_arm32
+-include common.mk
 
 ################################################################################
 # Paths to git projects and various binaries
@@ -30,7 +30,6 @@
 ################################################################################
 BUSYBOX_COMMON_TARGET = mt8173-evb
 BUSYBOX_CLEAN_COMMON_TARGET = mt8173-evb clean
-BUSYBOX_COMMON_CCDIR = $(AARCH64_PATH)
 
 busybox: busybox-common
 
@@ -65,10 +64,10 @@
 ################################################################################
 # OP-TEE
 ################################################################################
-OPTEE_OS_COMMON_FLAGS += PLATFORM=mediatek-mt8173 CFG_ARM64_core=y
+OPTEE_OS_COMMON_FLAGS += PLATFORM=mediatek-mt8173
 optee-os: optee-os-common
 
-OPTEE_OS_CLEAN_COMMON_FLAGS += PLATFORM=mediatek-mt8173 CFG_ARM64_core=y
+OPTEE_OS_CLEAN_COMMON_FLAGS += PLATFORM=mediatek-mt8173
 optee-os-clean: optee-os-clean-common
 
 optee-client: optee-client-common
diff --git a/qemu.mk b/qemu.mk
index f20194d..445662f 100644
--- a/qemu.mk
+++ b/qemu.mk
@@ -1,21 +1,14 @@
--include common.mk
+################################################################################
+# Following variables defines how the NS_USER (Non Secure User - Client
+# Application), NS_KERNEL (Non Secure Kernel), S_KERNEL (Secure Kernel) and
+# S_USER (Secure User - TA) are compiled
+################################################################################
+override COMPILE_NS_USER   := 32
+override COMPILE_NS_KERNEL := 32
+override COMPILE_S_USER    := 32
+override COMPILE_S_KERNEL  := 32
 
-################################################################################
-# Mandatory definition to use common.mk
-################################################################################
-ifneq ($(CROSS_COMPILE),)
-CROSS_COMPILE_NS_USER		?= "$(CROSS_COMPILE)"
-CROSS_COMPILE_NS_KERNEL		?= "$(CROSS_COMPILE)"
-CROSS_COMPILE_S_USER		?= "$(CROSS_COMPILE)"
-CROSS_COMPILE_S_KERNEL		?= "$(CROSS_COMPILE)"
-else
-CROSS_COMPILE_NS_USER		?= "$(CCACHE)$(AARCH32_CROSS_COMPILE)"
-CROSS_COMPILE_NS_KERNEL		?= "$(CCACHE)$(AARCH32_CROSS_COMPILE)"
-CROSS_COMPILE_S_USER		?= "$(CCACHE)$(AARCH32_CROSS_COMPILE)"
-CROSS_COMPILE_S_KERNEL		?= "$(CCACHE)$(AARCH32_CROSS_COMPILE)"
-endif
-OPTEE_OS_BIN			?= $(OPTEE_OS_PATH)/out/arm-plat-vexpress/core/tee.bin
-OPTEE_OS_TA_DEV_KIT_DIR		?= $(OPTEE_OS_PATH)/out/arm-plat-vexpress/export-ta_arm32
+-include common.mk
 
 ################################################################################
 # Paths to git projects and various binaries
@@ -68,7 +61,6 @@
 ################################################################################
 BUSYBOX_COMMON_TARGET = vexpress
 BUSYBOX_CLEAN_COMMON_TARGET = vexpress clean
-BUSYBOX_COMMON_CCDIR = $(AARCH32_PATH)
 
 busybox: busybox-common
 
@@ -131,13 +123,10 @@
 ################################################################################
 # xtest / optee_test
 ################################################################################
-XTEST_COMMON_FLAGS += CFG_ARM32=y
 xtest: xtest-common
 
-XTEST_CLEAN_COMMON_FLAGS += CFG_ARM32=y
 xtest-clean: xtest-clean-common
 
-XTEST_PATCH_COMMON_FLAGS += CFG_ARM32=y
 xtest-patch: xtest-patch-common
 
 ################################################################################