Rework common.mk

The code added by commits d6536da64deb ("Commonlize xtest compilation
among all platforms") and 070d95595e1d1 ("common build: optee
components") introduces race conditions that break parallel build (make
-jX). This is due to manually launching a make sub-process to run the
-common targets, and can be fixed by just declaring a dependency
instead. Specific flags are appended to common flags, rather than
passed as arguments to a new "make" sub-process.

So, basically:

 foo-common:
 	$(MAKE) -C foo_dir [A=a B=B]

 foo:
 	$(MAKE) foo-common [C=c]

is turned into:

 FOO_COMMON_FLAGS ?= A=a B=b
 foo-common:
 	$(MAKE) -C foo_dir $(FOO_COMMON_FLAGS)

 FOO_COMMON_FLAGS += C=c
 foo: foo-common

At the same time this allows foo: to override flags, for instance
set A=aa in the above example (prior to this, A=a would have had a
higher priority).

Signed-off-by: Jerome Forissier <jerome.forissier@linaro.org>
Signed-off-by: Pascal Brand <pascal.brand@st.com>
Reviewed-by: Jerome Forissier <jerome.forissier@linaro.org>
diff --git a/common.mk b/common.mk
index 24a03a5..c736ed6 100644
--- a/common.mk
+++ b/common.mk
@@ -28,74 +28,74 @@
 # defines, macros, configuration etc
 ################################################################################
 define KERNEL_VERSION
-$(shell cd $(LINUX_PATH) && make --no-print-directory kernelversion)
+$(shell cd $(LINUX_PATH) && $(MAKE) --no-print-directory kernelversion)
 endef
 DEBUG ?= 0
 
 ################################################################################
 # OP-TEE
 ################################################################################
+OPTEE_OS_COMMON_FLAGS ?= CROSS_COMPILE=$(CROSS_COMPILE_S_USER) \
+	CROSS_COMPILE_core=$(CROSS_COMPILE_S_KERNEL) \
+	CFG_TEE_CORE_LOG_LEVEL=3 \
+	DEBUG=$(DEBUG)
+
 optee-os-common:
-	make -C $(OPTEE_OS_PATH) \
-		CROSS_COMPILE=$(CROSS_COMPILE_S_USER) \
-		CROSS_COMPILE_core=$(CROSS_COMPILE_S_KERNEL) \
-		CFG_TEE_CORE_LOG_LEVEL=3 \
-		DEBUG=$(DEBUG) \
+	$(MAKE) -C $(OPTEE_OS_PATH) $(OPTEE_OS_COMMON_FLAGS)
+
+OPTEE_OS_CLEAN_COMMON_FLAGS ?= $(OPTEE_OS_COMMON_FLAGS)
 
 optee-os-clean-common:
-	make -C $(OPTEE_OS_PATH) \
-		clean
+	$(MAKE) -C $(OPTEE_OS_PATH) $(OPTEE_OS_CLEAN_COMMON_FLAGS) clean
+
+OPTEE_CLIENT_COMMON_FLAGS ?= CROSS_COMPILE=$(CROSS_COMPILE_NS_USER)
 
 optee-client-common:
-	make -C $(OPTEE_CLIENT_PATH) \
-		CROSS_COMPILE=$(CROSS_COMPILE_NS_USER)
+	$(MAKE) -C $(OPTEE_CLIENT_PATH) $(OPTEE_CLIENT_COMMON_FLAGS)
+
+OPTEE_CLIENT_CLEAN_COMMON_FLAGS ?= $(OPTEE_CLIENT_COMMON_FLAGS)
 
 optee-client-clean-common:
-	make -C $(OPTEE_CLIENT_PATH) clean
+	$(MAKE) -C $(OPTEE_CLIENT_PATH) $(OPTEE_CLIENT_CLEAN_COMMON_FLAGS) \
+		clean
+
+OPTEE_LINUXDRIVER_COMMON_FLAGS ?= CROSS_COMPILE=$(CROSS_COMPILE_NS_KERNEL) \
+	LOCALVERSION= M=$(OPTEE_LINUXDRIVER_PATH)
 
 optee-linuxdriver-common: linux
-	make -C $(LINUX_PATH) \
-		CROSS_COMPILE=$(CROSS_COMPILE_NS_KERNEL) \
-		LOCALVERSION= \
-		M=$(OPTEE_LINUXDRIVER_PATH) modules
+	$(MAKE) -C $(LINUX_PATH) $(OPTEE_LINUXDRIVER_COMMON_FLAGS) modules
+
+OPTEE_LINUXDRIVER_CLEAN_COMMON_FLAGS ?= $(OPTEE_LINUXDRIVER_COMMON_FLAGS)
 
 optee-linuxdriver-clean-common:
-	make -C $(LINUX_PATH) \
-		M=$(OPTEE_LINUXDRIVER_PATH) clean
+	$(MAKE) -C $(LINUX_PATH) $(OPTEE_LINUXDRIVER_CLEAN_COMMON_FLAGS) clean
 
 ################################################################################
 # xtest / optee_test
 ################################################################################
+XTEST_COMMON_FLAGS ?= CROSS_COMPILE_HOST=$(CROSS_COMPILE_NS_USER)\
+	CROSS_COMPILE_TA=$(CROSS_COMPILE_S_USER) \
+	TA_DEV_KIT_DIR=$(OPTEE_OS_TA_DEV_KIT_DIR) \
+	CFG_DEV_PATH=$(ROOT) \
+	O=$(OPTEE_TEST_OUT_PATH)
+
 xtest-common: optee-os optee-client
 	@if [ -d "$(OPTEE_TEST_PATH)" ]; then \
-		$(MAKE) -C $(OPTEE_TEST_PATH) \
-			CROSS_COMPILE_HOST=$(CROSS_COMPILE_NS_USER) \
-			CROSS_COMPILE_TA=$(CROSS_COMPILE_S_USER) \
-			TA_DEV_KIT_DIR=$(OPTEE_OS_TA_DEV_KIT_DIR) \
-			CFG_DEV_PATH=$(ROOT) \
-			O=$(OPTEE_TEST_OUT_PATH); \
+		$(MAKE) -C $(OPTEE_TEST_PATH) $(XTEST_COMMON_FLAGS); \
 	fi
 
+XTEST_CLEAN_COMMON_FLAGS ?= $(XTEST_COMMON_FLAGS)
+
 xtest-clean-common:
 	@if [ -d "$(OPTEE_TEST_PATH)" ]; then \
-		$(MAKE) -C $(OPTEE_TEST_PATH) \
-			CROSS_COMPILE_HOST=$(CROSS_COMPILE_NS_USER) \
-			CROSS_COMPILE_TA=$(CROSS_COMPILE_S_USER) \
-			TA_DEV_KIT_DIR=$(OPTEE_OS_TA_DEV_KIT_DIR) \
-			CFG_DEV_PATH=$(ROOT) \
-			O=$(OPTEE_TEST_OUT_PATH) \
-				clean; \
+		$(MAKE) -C $(OPTEE_TEST_PATH) $(XTEST_CLEAN_COMMON_FLAGS) clean; \
 	fi
 
+XTEST_PATCH_COMMON_FLAGS ?= $(XTEST_COMMON_FLAGS) \
+	CFG_OPTEE_TEST_PATH=$(OPTEE_TEST_PATH)
+
 xtest-patch-common: optee-os optee-client
 	@if [ -d "$(OPTEE_TEST_PATH)" ]; then \
-		$(MAKE) -C $(OPTEE_TEST_PATH) \
-			CROSS_COMPILE_HOST=$(CROSS_COMPILE_NS_USER) \
-			CROSS_COMPILE_TA=$(CROSS_COMPILE_S_USER) \
-			TA_DEV_KIT_DIR=$(OPTEE_OS_TA_DEV_KIT_DIR) \
-			CFG_ARM32=y \
-			CFG_DEV_PATH=$(ROOT) \
-			CFG_OPTEE_TEST_PATH=$(OPTEE_TEST_PATH) \
-			O=$(OPTEE_TEST_OUT_PATH) \
-				patch; \
+		$(MAKE) -C $(OPTEE_TEST_PATH) $(XTEST_PATCH_COMMON_FLAGS) \
+			patch; \
 	fi