aboutsummaryrefslogtreecommitdiff
path: root/make_helpers
diff options
context:
space:
mode:
authorMasahiro Yamada <yamada.masahiro@socionext.com>2016-12-22 14:02:27 +0900
committerMasahiro Yamada <yamada.masahiro@socionext.com>2017-01-05 11:39:16 +0900
commit710ea1d01a1031dab06af3835c76b510d45cd362 (patch)
tree9db9f939de0c288b24f8bf30bd0bc4c4ffe2dbc8 /make_helpers
parent59de50963cc49f6aa003bd10f5a20f766186c02a (diff)
downloadtrusted-firmware-a-710ea1d01a1031dab06af3835c76b510d45cd362.tar.gz
Build: generate .d file at the same time as object is created
Currently, .d files are generated before any objects are built. So, IS_ANYTHING_TO_BUILD flag is needed to avoid such processing for non-build targets. There is a cleverer way; just create a .d file simultaneously when the corresponding object is created. No need to have separate rules for .d files. This commit will also fix a bug; -D$(IMAGE) is defined for $(OBJ), but not for $(PREREQUISITES). So, .d files are generated with different macro sets from those for .o files, then wrong .d files are generated. For example, in lib/cpus/aarch64/cpu_helpers.S #if IMAGE_BL31 #include <cpu_data.h> #endif <cpu_data.h> is parsed for the object when built for BL31, but the .d file does not pick up that dependency. With this commit, the compiler will generate .o and .d at the same time, guaranteeing they are generated under the same circumstances. Signed-off-by: Masahiro Yamada <yamada.masahiro@socionext.com>
Diffstat (limited to 'make_helpers')
-rw-r--r--make_helpers/build_macros.mk61
1 files changed, 13 insertions, 48 deletions
diff --git a/make_helpers/build_macros.mk b/make_helpers/build_macros.mk
index dd8c2b5084..5de810b9db 100644
--- a/make_helpers/build_macros.mk
+++ b/make_helpers/build_macros.mk
@@ -184,24 +184,7 @@ endef
# Auxiliary macros to build TF images from sources
################################################################################
-# If no goal is specified in the command line, .DEFAULT_GOAL is used.
-# .DEFAULT_GOAL is defined in the main Makefile before including this file.
-ifeq ($(MAKECMDGOALS),)
-MAKECMDGOALS := $(.DEFAULT_GOAL)
-endif
-
-define match_goals
-$(strip $(foreach goal,$(1),$(filter $(goal),$(MAKECMDGOALS))))
-endef
-
-# List of rules that involve building things
-BUILD_TARGETS := all bl1 bl2 bl2u bl31 bl32 certificates fip
-
-# Does the list of goals specified on the command line include a build target?
-ifneq ($(call match_goals,${BUILD_TARGETS}),)
-IS_ANYTHING_TO_BUILD := 1
-endif
-
+MAKE_DEP = -Wp,-MD,$(DEP) -MT $$@
# MAKE_C builds a C source file and generates the dependency file
# $(1) = output directory
@@ -210,20 +193,14 @@ endif
define MAKE_C
$(eval OBJ := $(1)/$(patsubst %.c,%.o,$(notdir $(2))))
-$(eval PREREQUISITES := $(patsubst %.o,%.d,$(OBJ)))
+$(eval DEP := $(patsubst %.o,%.d,$(OBJ)))
$(eval IMAGE := IMAGE_BL$(call uppercase,$(3)))
-$(OBJ): $(2)
+$(OBJ): $(2) | bl$(3)_dirs
@echo " CC $$<"
- $$(Q)$$(CC) $$(TF_CFLAGS) $$(CFLAGS) -D$(IMAGE) -c $$< -o $$@
+ $$(Q)$$(CC) $$(TF_CFLAGS) $$(CFLAGS) -D$(IMAGE) $(MAKE_DEP) -c $$< -o $$@
-$(PREREQUISITES): $(2) | bl$(3)_dirs
- @echo " DEPS $$@"
- $$(Q)$$(CC) $$(TF_CFLAGS) $$(CFLAGS) -M -MT $(OBJ) -MF $$@ $$<
-
-ifdef IS_ANYTHING_TO_BUILD
--include $(PREREQUISITES)
-endif
+-include $(DEP)
endef
@@ -235,20 +212,14 @@ endef
define MAKE_S
$(eval OBJ := $(1)/$(patsubst %.S,%.o,$(notdir $(2))))
-$(eval PREREQUISITES := $(patsubst %.o,%.d,$(OBJ)))
+$(eval DEP := $(patsubst %.o,%.d,$(OBJ)))
$(eval IMAGE := IMAGE_BL$(call uppercase,$(3)))
-$(OBJ): $(2)
+$(OBJ): $(2) | bl$(3)_dirs
@echo " AS $$<"
- $$(Q)$$(AS) $$(ASFLAGS) -D$(IMAGE) -c $$< -o $$@
-
-$(PREREQUISITES): $(2) | bl$(3)_dirs
- @echo " DEPS $$@"
- $$(Q)$$(AS) $$(ASFLAGS) -M -MT $(OBJ) -MF $$@ $$<
+ $$(Q)$$(AS) $$(ASFLAGS) -D$(IMAGE) $(MAKE_DEP) -c $$< -o $$@
-ifdef IS_ANYTHING_TO_BUILD
--include $(PREREQUISITES)
-endif
+-include $(DEP)
endef
@@ -258,19 +229,13 @@ endef
# $(2) = input template
define MAKE_LD
-$(eval PREREQUISITES := $(1).d)
+$(eval DEP := $(1).d)
-$(1): $(2)
+$(1): $(2) | $(dir ${1})
@echo " PP $$<"
- $$(Q)$$(CPP) $$(CPPFLAGS) -P -D__ASSEMBLY__ -D__LINKER__ -o $$@ $$<
-
-$(PREREQUISITES): $(2) | $(dir ${1})
- @echo " DEPS $$@"
- $$(Q)$$(CPP) $$(CPPFLAGS) -D__ASSEMBLY__ -M -MT $(1) -MF $$@ $$<
+ $$(Q)$$(CPP) $$(CPPFLAGS) -P -D__ASSEMBLY__ -D__LINKER__ $(MAKE_DEP) -o $$@ $$<
-ifdef IS_ANYTHING_TO_BUILD
--include $(PREREQUISITES)
-endif
+-include $(DEP)
endef