Give user's compiler flags precedence over default ones

The user can provide additional CFLAGS to use when building TF.
However, these custom CFLAGS are currently prepended to the
standard CFLAGS that are hardcoded in the TF build system. This
is an issue because when providing conflicting compiler flags
(e.g. different optimisations levels like -O1 and -O0), the last
one on the command line usually takes precedence. This means that
the user flags get overriden.

To address this problem, this patch separates the TF CFLAGS from
the user CFLAGS. The former are now stored in the TF_CFLAGS make
variable, whereas the CFLAGS make variable is untouched and reserved
for the user. The order of the 2 sets of flags is enforced when
invoking the compiler.

Fixes ARM-Software/tf-issues#350

Change-Id: Ib189f44555b885f1dffbec6015092f381600e560
This commit is contained in:
Sandrine Bailleux 2016-04-11 13:01:17 +01:00
parent 43b97eda25
commit 403973c95d
3 changed files with 9 additions and 9 deletions

View File

@ -136,7 +136,7 @@ export Q
$(eval $(call add_define,DEBUG)) $(eval $(call add_define,DEBUG))
ifneq (${DEBUG}, 0) ifneq (${DEBUG}, 0)
BUILD_TYPE := debug BUILD_TYPE := debug
CFLAGS += -g TF_CFLAGS += -g
ASFLAGS += -g -Wa,--gdwarf-2 ASFLAGS += -g -Wa,--gdwarf-2
# Use LOG_LEVEL_INFO by default for debug builds # Use LOG_LEVEL_INFO by default for debug builds
LOG_LEVEL := 40 LOG_LEVEL := 40
@ -179,12 +179,12 @@ ASFLAGS += -nostdinc -ffreestanding -Wa,--fatal-warnings \
-Werror -Wmissing-include-dirs \ -Werror -Wmissing-include-dirs \
-mgeneral-regs-only -D__ASSEMBLY__ \ -mgeneral-regs-only -D__ASSEMBLY__ \
${DEFINES} ${INCLUDES} ${DEFINES} ${INCLUDES}
CFLAGS += -nostdinc -ffreestanding -Wall \ TF_CFLAGS += -nostdinc -ffreestanding -Wall \
-Werror -Wmissing-include-dirs \ -Werror -Wmissing-include-dirs \
-mgeneral-regs-only -mstrict-align \ -mgeneral-regs-only -mstrict-align \
-std=c99 -c -Os \ -std=c99 -c -Os \
${DEFINES} ${INCLUDES} ${DEFINES} ${INCLUDES}
CFLAGS += -ffunction-sections -fdata-sections TF_CFLAGS += -ffunction-sections -fdata-sections
LDFLAGS += --fatal-warnings -O1 LDFLAGS += --fatal-warnings -O1
LDFLAGS += --gc-sections LDFLAGS += --gc-sections
@ -331,7 +331,7 @@ endif
# Check if -pedantic option should be used # Check if -pedantic option should be used
ifeq (${DISABLE_PEDANTIC},0) ifeq (${DISABLE_PEDANTIC},0)
CFLAGS += -pedantic TF_CFLAGS += -pedantic
endif endif
# Using the ARM Trusted Firmware BL2 implies that a BL33 image also needs to be # Using the ARM Trusted Firmware BL2 implies that a BL33 image also needs to be
@ -487,7 +487,7 @@ msg_start:
# Check if deprecated declarations should be treated as error or not. # Check if deprecated declarations should be treated as error or not.
ifeq (${ERROR_DEPRECATED},0) ifeq (${ERROR_DEPRECATED},0)
CFLAGS += -Wno-error=deprecated-declarations TF_CFLAGS += -Wno-error=deprecated-declarations
endif endif
# Expand build macros for the different images # Expand build macros for the different images

View File

@ -208,11 +208,11 @@ $(eval IMAGE := IMAGE_BL$(call uppercase,$(3)))
$(OBJ): $(2) $(OBJ): $(2)
@echo " CC $$<" @echo " CC $$<"
$$(Q)$$(CC) $$(CFLAGS) -D$(IMAGE) -c $$< -o $$@ $$(Q)$$(CC) $$(TF_CFLAGS) $$(CFLAGS) -D$(IMAGE) -c $$< -o $$@
$(PREREQUISITES): $(2) | bl$(3)_dirs $(PREREQUISITES): $(2) | bl$(3)_dirs
@echo " DEPS $$@" @echo " DEPS $$@"
$$(Q)$$(CC) $$(CFLAGS) -M -MT $(OBJ) -MF $$@ $$< $$(Q)$$(CC) $$(TF_CFLAGS) $$(CFLAGS) -M -MT $(OBJ) -MF $$@ $$<
ifdef IS_ANYTHING_TO_BUILD ifdef IS_ANYTHING_TO_BUILD
-include $(PREREQUISITES) -include $(PREREQUISITES)
@ -351,7 +351,7 @@ ifdef MAKE_BUILD_STRINGS
else else
@echo 'const char build_message[] = "Built : "$(BUILD_MESSAGE_TIMESTAMP); \ @echo 'const char build_message[] = "Built : "$(BUILD_MESSAGE_TIMESTAMP); \
const char version_string[] = "${VERSION_STRING}";' | \ const char version_string[] = "${VERSION_STRING}";' | \
$$(CC) $$(CFLAGS) -xc - -o $(BUILD_DIR)/build_message.o $$(CC) $$(TF_CFLAGS) $$(CFLAGS) -xc - -o $(BUILD_DIR)/build_message.o
endif endif
$$(Q)$$(LD) -o $$@ $$(LDFLAGS) -Map=$(MAPFILE) --script $(LINKERFILE) \ $$(Q)$$(LD) -o $$@ $$(LDFLAGS) -Map=$(MAPFILE) --script $(LINKERFILE) \
$(BUILD_DIR)/build_message.o $(OBJS) $(BUILD_DIR)/build_message.o $(OBJS)

View File

@ -104,6 +104,6 @@ BUILT_TIME_DATE_STRING = const char build_message[] = "Built : "${BUILD_MESSAGE_
VERSION_STRING_MESSAGE = const char version_string[] = "${VERSION_STRING}"; VERSION_STRING_MESSAGE = const char version_string[] = "${VERSION_STRING}";
define MAKE_BUILD_STRINGS define MAKE_BUILD_STRINGS
@echo $$(BUILT_TIME_DATE_STRING) $$(VERSION_STRING_MESSAGE) | \ @echo $$(BUILT_TIME_DATE_STRING) $$(VERSION_STRING_MESSAGE) | \
$$(CC) $$(CFLAGS) -x c - -o $1 $$(CC) $$(TF_CFLAGS) $$(CFLAGS) -x c - -o $1
endef endef