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