Fix build template expansion
In the Makefile, the nanoapp build template has incorrect number of
dollar signs at several places, leading to incorrect expansion. This
causes the object files to be generated at a path without the target
name in it. As a result, when building more than one targets
concurrently, we have a race condition that can result in the corruption
of object files sometimes.
Bug: 207703544
Test: Repeated runs of build_chre.sh do not fail.
Test: After a build, check object files are now generated in per-target
locations.
Change-Id: I0abb14906676372a7f4c5ad7eab44498ec175545
diff --git a/build/build_template.mk b/build/build_template.mk
index a6d4b66..6083991 100644
--- a/build/build_template.mk
+++ b/build/build_template.mk
@@ -48,66 +48,66 @@
# Target Objects ###############################################################
# Source files.
-$$(1)_CC_SRCS = $$(filter %.cc, $(COMMON_SRCS) $(8))
-$$(1)_CPP_SRCS = $$(filter %.cpp, $(COMMON_SRCS) $(8))
-$$(1)_C_SRCS = $$(filter %.c, $(COMMON_SRCS) $(8))
-$$(1)_S_SRCS = $$(filter %.S, $(COMMON_SRCS) $(8))
+$(1)_CC_SRCS = $$(filter %.cc, $(COMMON_SRCS) $(8))
+$(1)_CPP_SRCS = $$(filter %.cpp, $(COMMON_SRCS) $(8))
+$(1)_C_SRCS = $$(filter %.c, $(COMMON_SRCS) $(8))
+$(1)_S_SRCS = $$(filter %.S, $(COMMON_SRCS) $(8))
# Object files.
-$$(1)_OBJS_DIR = $(1)_objs
-$$(1)_CC_OBJS = $$(patsubst %.cc, $(OUT)/$$($$(1)_OBJS_DIR)/%.o, \
- $$($$(1)_CC_SRCS))
-$$(1)_CPP_OBJS = $$(patsubst %.cpp, $(OUT)/$$($$(1)_OBJS_DIR)/%.o, \
- $$($$(1)_CPP_SRCS))
-$$(1)_C_OBJS = $$(patsubst %.c, $(OUT)/$$($$(1)_OBJS_DIR)/%.o, \
- $$($$(1)_C_SRCS))
-$$(1)_S_OBJS = $$(patsubst %.S, $(OUT)/$$($$(1)_OBJS_DIR)/%.o, \
- $$($$(1)_S_SRCS))
+$(1)_OBJS_DIR = $(1)_objs
+$(1)_CC_OBJS = $$(patsubst %.cc, $(OUT)/$$($(1)_OBJS_DIR)/%.o, \
+ $$($(1)_CC_SRCS))
+$(1)_CPP_OBJS = $$(patsubst %.cpp, $(OUT)/$$($(1)_OBJS_DIR)/%.o, \
+ $$($(1)_CPP_SRCS))
+$(1)_C_OBJS = $$(patsubst %.c, $(OUT)/$$($(1)_OBJS_DIR)/%.o, \
+ $$($(1)_C_SRCS))
+$(1)_S_OBJS = $$(patsubst %.S, $(OUT)/$$($(1)_OBJS_DIR)/%.o, \
+ $$($(1)_S_SRCS))
# Automatic dependency resolution Makefiles.
-$$(1)_CC_DEPS = $$(patsubst %.cc, $(OUT)/$$($$(1)_OBJS_DIR)/%.d, \
- $$($$(1)_CC_SRCS))
-$$(1)_CPP_DEPS = $$(patsubst %.cpp, $(OUT)/$$($$(1)_OBJS_DIR)/%.d, \
- $$($$(1)_CPP_SRCS))
-$$(1)_C_DEPS = $$(patsubst %.c, $(OUT)/$$($$(1)_OBJS_DIR)/%.d, \
- $$($$(1)_C_SRCS))
-$$(1)_S_DEPS = $$(patsubst %.S, $(OUT)/$$($$(1)_OBJS_DIR)/%.d, \
- $$($$(1)_S_SRCS))
+$(1)_CC_DEPS = $$(patsubst %.cc, $(OUT)/$$($(1)_OBJS_DIR)/%.d, \
+ $$($(1)_CC_SRCS))
+$(1)_CPP_DEPS = $$(patsubst %.cpp, $(OUT)/$$($(1)_OBJS_DIR)/%.d, \
+ $$($(1)_CPP_SRCS))
+$(1)_C_DEPS = $$(patsubst %.c, $(OUT)/$$($(1)_OBJS_DIR)/%.d, \
+ $$($(1)_C_SRCS))
+$(1)_S_DEPS = $$(patsubst %.S, $(OUT)/$$($(1)_OBJS_DIR)/%.d, \
+ $$($(1)_S_SRCS))
# Add object file directories.
-$$$(1)_DIRS = $$(sort $$(dir $$($$(1)_CC_OBJS) \
- $$($$(1)_CPP_OBJS) \
- $$($$(1)_C_OBJS) \
- $$($$(1)_S_OBJS)))
+$(1)_DIRS = $$(sort $$(dir $$($(1)_CC_OBJS) \
+ $$($(1)_CPP_OBJS) \
+ $$($(1)_C_OBJS) \
+ $$($(1)_S_OBJS)))
# Outputs ######################################################################
# Shared Object
-$$(1)_SO = $(OUT)/$$$(1)/$(OUTPUT_NAME).so
+$(1)_SO = $(OUT)/$(1)/$(OUTPUT_NAME).so
# Static Archive
-$$(1)_AR = $(OUT)/$$$(1)/$(OUTPUT_NAME).a
+$(1)_AR = $(OUT)/$(1)/$(OUTPUT_NAME).a
# Nanoapp Header
-$$(1)_HEADER = $$(if $(IS_NANOAPP_BUILD), $(OUT)/$$$(1)/$(OUTPUT_NAME).napp_header, )
+$(1)_HEADER = $$(if $(IS_NANOAPP_BUILD), $(OUT)/$(1)/$(OUTPUT_NAME).napp_header, )
# Optional Binary
-$$(1)_BIN = $$(if $(9), $(OUT)/$$$(1)/$(OUTPUT_NAME), )
+$(1)_BIN = $$(if $(9), $(OUT)/$(1)/$(OUTPUT_NAME), )
# Top-level Build Rule #########################################################
# Define the phony target.
.PHONY: $(1)_ar
-$(1)_ar: $$($$(1)_AR)
+$(1)_ar: $$($(1)_AR)
.PHONY: $(1)_so
-$(1)_so: $$($$(1)_SO)
+$(1)_so: $$($(1)_SO)
.PHONY: $(1)_bin
-$(1)_bin: $$($$(1)_BIN)
+$(1)_bin: $$($(1)_BIN)
.PHONY: $(1)_header
-$(1)_header: $$($$(1)_HEADER)
+$(1)_header: $$($(1)_HEADER)
.PHONY: $(1)
ifeq ($(IS_ARCHIVE_ONLY_BUILD),true)
@@ -163,7 +163,7 @@
#
# The highest order byte is reserved for platform-specific usage.
-$$($$(1)_HEADER): $$(OUT)/$$$(1) $$($$$(1)_DIRS)
+$$($(1)_HEADER): $$(OUT)/$(1) $$($(1)_DIRS)
printf "00000000 %.8x " `$(BE_TO_LE_SCRIPT) 0x00000001` > $$@
printf "%.8x " `$(BE_TO_LE_SCRIPT) 0x4f4e414e` >> $$@
printf "%.16x\n" `$(BE_TO_LE_SCRIPT) $(NANOAPP_ID)` >> $$@
@@ -181,22 +181,22 @@
# Compile ######################################################################
-$$($$(1)_CPP_OBJS): $(OUT)/$$($$(1)_OBJS_DIR)/%.o: %.cpp $(MAKEFILE_LIST)
+$$($(1)_CPP_OBJS): $(OUT)/$$($(1)_OBJS_DIR)/%.o: %.cpp $(MAKEFILE_LIST)
@echo " [CPP] $$<"
$(V)$(3) $(COMMON_CXX_CFLAGS) -DCHRE_FILENAME=\"$$(notdir $$<)\" $(2) -c \
$$< -o $$@
-$$($$(1)_CC_OBJS): $(OUT)/$$($$(1)_OBJS_DIR)/%.o: %.cc $(MAKEFILE_LIST)
+$$($(1)_CC_OBJS): $(OUT)/$$($(1)_OBJS_DIR)/%.o: %.cc $(MAKEFILE_LIST)
@echo " [CC] $$<"
$(V)$(3) $(COMMON_CXX_CFLAGS) -DCHRE_FILENAME=\"$$(notdir $$<)\" $(2) -c \
$$< -o $$@
-$$($$(1)_C_OBJS): $(OUT)/$$($$(1)_OBJS_DIR)/%.o: %.c $(MAKEFILE_LIST)
+$$($(1)_C_OBJS): $(OUT)/$$($(1)_OBJS_DIR)/%.o: %.c $(MAKEFILE_LIST)
@echo " [C] $$<"
$(V)$(3) $(COMMON_C_CFLAGS) -DCHRE_FILENAME=\"$$(notdir $$<)\" $(2) -c $$< \
-o $$@
-$$($$(1)_S_OBJS): $(OUT)/$$($$(1)_OBJS_DIR)/%.o: %.S $(MAKEFILE_LIST)
+$$($(1)_S_OBJS): $(OUT)/$$($(1)_OBJS_DIR)/%.o: %.S $(MAKEFILE_LIST)
@echo " [AS] $$<"
$(V)$(3) -DCHRE_FILENAME=\"$$(notdir $$<)\" $(2) -c $$< \
-o $$@
@@ -204,25 +204,25 @@
# Archive ######################################################################
# Add common and target-specific archive flags.
-$$$(1)_ARFLAGS = $(COMMON_ARFLAGS) \
+$(1)_ARFLAGS = $(COMMON_ARFLAGS) \
$(6)
-$$($$(1)_AR): $$($$(1)_CC_OBJS) $$($$(1)_CPP_OBJS) $$($$(1)_C_OBJS) \
- $$($$(1)_S_OBJS) | $$(OUT)/$$$(1) $$($$$(1)_DIRS)
- $(V)$(7) $$($$$(1)_ARFLAGS) $$@ $$(filter %.o, $$^)
+$$($(1)_AR): $$($(1)_CC_OBJS) $$($(1)_CPP_OBJS) $$($(1)_C_OBJS) \
+ $$($(1)_S_OBJS) | $$(OUT)/$(1) $$($(1)_DIRS)
+ $(V)$(7) $$($(1)_ARFLAGS) $$@ $$(filter %.o, $$^)
# Link #########################################################################
-$$($$(1)_SO): $$($$(1)_CC_DEPS) \
- $$($$(1)_CPP_DEPS) $$($$(1)_C_DEPS) $$($$(1)_S_DEPS) \
- $$($$(1)_CC_OBJS) $$($$(1)_CPP_OBJS) $$($$(1)_C_OBJS) \
- $$($$(1)_S_OBJS) | $$(OUT)/$$$(1) $$($$$(1)_DIRS)
+$$($(1)_SO): $$($(1)_CC_DEPS) \
+ $$($(1)_CPP_DEPS) $$($(1)_C_DEPS) $$($(1)_S_DEPS) \
+ $$($(1)_CC_OBJS) $$($(1)_CPP_OBJS) $$($(1)_C_OBJS) \
+ $$($(1)_S_OBJS) | $$(OUT)/$(1) $$($(1)_DIRS)
$(V)$(5) $(4) -o $$@ $(11) $$(filter %.o, $$^) $(12)
-$$($$(1)_BIN): $$($$(1)_CC_DEPS) \
- $$($$(1)_CPP_DEPS) $$($$(1)_C_DEPS) $$($$(1)_S_DEPS) \
- $$($$(1)_CC_OBJS) $$($$(1)_CPP_OBJS) $$($$(1)_C_OBJS) \
- $$($$(1)_S_OBJS) | $$(OUT)/$$$(1) $$($$$(1)_DIRS)
+$$($(1)_BIN): $$($(1)_CC_DEPS) \
+ $$($(1)_CPP_DEPS) $$($(1)_C_DEPS) $$($(1)_S_DEPS) \
+ $$($(1)_CC_OBJS) $$($(1)_CPP_OBJS) $$($(1)_C_OBJS) \
+ $$($(1)_S_OBJS) | $$(OUT)/$(1) $$($(1)_DIRS)
$(V)$(3) -o $$@ $(11) $$(filter %.o, $$^) $(12) $(10)
# Output Directories ###########################################################
@@ -230,27 +230,27 @@
$$($$$(1)_DIRS):
$(V)mkdir -p $$@
-$$(OUT)/$$$(1):
+$$(OUT)/$(1):
$(V)mkdir -p $$@
# Automatic Dependency Resolution ##############################################
-$$($$(1)_CC_DEPS): $(OUT)/$$($$(1)_OBJS_DIR)/%.d: %.cc
+$$($(1)_CC_DEPS): $(OUT)/$$($(1)_OBJS_DIR)/%.d: %.cc
$(V)mkdir -p $$(dir $$@)
$(V)$(3) $(DEP_CFLAGS) $(COMMON_CXX_CFLAGS) \
-DCHRE_FILENAME=\"$$(notdir $$<)\" $(2) -c $$< -o $$@
-$$($$(1)_CPP_DEPS): $(OUT)/$$($$(1)_OBJS_DIR)/%.d: %.cpp
+$$($(1)_CPP_DEPS): $(OUT)/$$($(1)_OBJS_DIR)/%.d: %.cpp
$(V)mkdir -p $$(dir $$@)
$(V)$(3) $(DEP_CFLAGS) $(COMMON_CXX_CFLAGS) \
-DCHRE_FILENAME=\"$$(notdir $$<)\" $(2) -c $$< -o $$@
-$$($$(1)_C_DEPS): $(OUT)/$$($$(1)_OBJS_DIR)/%.d: %.c
+$$($(1)_C_DEPS): $(OUT)/$$($(1)_OBJS_DIR)/%.d: %.c
$(V)mkdir -p $$(dir $$@)
$(V)$(3) $(DEP_CFLAGS) $(COMMON_C_CFLAGS) \
-DCHRE_FILENAME=\"$$(notdir $$<)\" $(2) -c $$< -o $$@
-$$($$(1)_S_DEPS): $(OUT)/$$($$(1)_OBJS_DIR)/%.d: %.S
+$$($(1)_S_DEPS): $(OUT)/$$($(1)_OBJS_DIR)/%.d: %.S
$(V)mkdir -p $$(dir $$@)
$(V)$(3) $(DEP_CFLAGS) \
-DCHRE_FILENAME=\"$$(notdir $$<)\" $(2) -c $$< -o $$@
@@ -259,10 +259,10 @@
# This avoids dependency generation from occuring for a debug target when a
# non-debug target is requested.
ifneq ($(filter $(1) all, $(MAKECMDGOALS)),)
--include $$(patsubst %.o, %.d, $$($$(1)_CC_DEPS))
--include $$(patsubst %.o, %.d, $$($$(1)_CPP_DEPS))
--include $$(patsubst %.o, %.d, $$($$(1)_C_DEPS))
--include $$(patsubst %.o, %.d, $$($$(1)_S_DEPS))
+-include $$(patsubst %.o, %.d, $$($(1)_CC_DEPS))
+-include $$(patsubst %.o, %.d, $$($(1)_CPP_DEPS))
+-include $$(patsubst %.o, %.d, $$($(1)_C_DEPS))
+-include $$(patsubst %.o, %.d, $$($(1)_S_DEPS))
endif
endef
@@ -275,33 +275,33 @@
# Default the nanoapp header flag values to signed if not overidden.
TARGET_NANOAPP_FLAGS ?= 0x00000001
-$(eval $(call BUILD_TEMPLATE, $(TARGET_NAME), \
- $(COMMON_CFLAGS) $(TARGET_CFLAGS_LOCAL), \
- $(TARGET_CC), \
- $(TARGET_SO_LDFLAGS), \
- $(TARGET_LD), \
- $(TARGET_ARFLAGS), \
- $(TARGET_AR), \
- $(TARGET_VARIANT_SRCS), \
- $(TARGET_BUILD_BIN), \
- $(TARGET_BIN_LDFLAGS), \
- $(TARGET_SO_EARLY_LIBS), \
- $(TARGET_SO_LATE_LIBS), \
- $(TARGET_PLATFORM_ID)))
+$(eval $(call BUILD_TEMPLATE,$(TARGET_NAME), \
+ $(COMMON_CFLAGS) $(TARGET_CFLAGS_LOCAL), \
+ $(TARGET_CC), \
+ $(TARGET_SO_LDFLAGS), \
+ $(TARGET_LD), \
+ $(TARGET_ARFLAGS), \
+ $(TARGET_AR), \
+ $(TARGET_VARIANT_SRCS), \
+ $(TARGET_BUILD_BIN), \
+ $(TARGET_BIN_LDFLAGS), \
+ $(TARGET_SO_EARLY_LIBS), \
+ $(TARGET_SO_LATE_LIBS), \
+ $(TARGET_PLATFORM_ID)))
# Debug Template Invocation ####################################################
-$(eval $(call BUILD_TEMPLATE, $(TARGET_NAME)_debug, \
- $(COMMON_CFLAGS) $(COMMON_DEBUG_CFLAGS) \
- $(TARGET_CFLAGS_LOCAL) $(TARGET_DEBUG_CFLAGS), \
- $(TARGET_CC), \
- $(TARGET_SO_LDFLAGS), \
- $(TARGET_LD), \
- $(TARGET_ARFLAGS), \
- $(TARGET_AR), \
- $(TARGET_VARIANT_SRCS), \
- $(TARGET_BUILD_BIN), \
- $(TARGET_BIN_LDFLAGS), \
- $(TARGET_SO_EARLY_LIBS), \
- $(TARGET_SO_LATE_LIBS), \
- $(TARGET_PLATFORM_ID)))
+$(eval $(call BUILD_TEMPLATE,$(TARGET_NAME)_debug, \
+ $(COMMON_CFLAGS) $(COMMON_DEBUG_CFLAGS) \
+ $(TARGET_CFLAGS_LOCAL) $(TARGET_DEBUG_CFLAGS), \
+ $(TARGET_CC), \
+ $(TARGET_SO_LDFLAGS), \
+ $(TARGET_LD), \
+ $(TARGET_ARFLAGS), \
+ $(TARGET_AR), \
+ $(TARGET_VARIANT_SRCS), \
+ $(TARGET_BUILD_BIN), \
+ $(TARGET_BIN_LDFLAGS), \
+ $(TARGET_SO_EARLY_LIBS), \
+ $(TARGET_SO_LATE_LIBS), \
+ $(TARGET_PLATFORM_ID)))