Skip to content
GitLab
Menu
Projects
Groups
Snippets
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Sign in / Register
Toggle navigation
Menu
Open sidebar
adam.huang
Arm Trusted Firmware
Commits
84bd7a43
Commit
84bd7a43
authored
Dec 04, 2019
by
Soby Mathew
Committed by
TrustedFirmware Code Review
Dec 04, 2019
Browse files
Merge "Enable Link Time Optimization in GCC" into integration
parents
87b582ef
edbce9aa
Changes
4
Show whitespace changes
Inline
Side-by-side
Makefile
View file @
84bd7a43
...
...
@@ -204,6 +204,18 @@ LD = $(LINKER)
AS
=
$(CC)
-c
-x
assembler-with-cpp
$
(
TF_CFLAGS_
$(ARCH)
)
CPP
=
$(CC)
-E
PP
=
$(CC)
-E
else
ifneq
($(findstring gcc,$(notdir $(CC))),)
TF_CFLAGS_aarch32
=
$
(
march32-directive
)
TF_CFLAGS_aarch64
=
$
(
march64-directive
)
ifeq
($(ENABLE_LTO),1)
# Enable LTO only for aarch64
ifeq
(${ARCH},aarch64)
LTO_CFLAGS
=
-flto
# Use gcc as a wrapper for the ld, recommended for LTO
LINKER
:=
${CROSS_COMPILE}
gcc
endif
endif
LD
=
$(LINKER)
else
TF_CFLAGS_aarch32
=
$
(
march32-directive
)
TF_CFLAGS_aarch64
=
$
(
march64-directive
)
...
...
@@ -301,11 +313,28 @@ GCC_V_OUTPUT := $(shell $(CC) -v 2>&1)
ifneq
($(findstring armlink,$(notdir $(LD))),)
TF_LDFLAGS
+=
--diag_error
=
warning
--lto_level
=
O1
TF_LDFLAGS
+=
--remove
--info
=
unused,unusedsymbols
TF_LDFLAGS
+=
$
(
TF_LDFLAGS_
$(ARCH)
)
else
ifneq
($(findstring gcc,$(notdir $(LD))),)
# Pass ld options with Wl or Xlinker switches
TF_LDFLAGS
+=
-Wl
,--fatal-warnings
-O1
TF_LDFLAGS
+=
-Wl
,--gc-sections
ifeq
($(ENABLE_LTO),1)
ifeq
(${ARCH},aarch64)
TF_LDFLAGS
+=
-flto
-fuse-linker-plugin
endif
endif
# GCC automatically adds fix-cortex-a53-843419 flag when used to link
# which breaks some builds, so disable if errata fix is not explicitly enabled
ifneq
(${ERRATA_A53_843419},1)
TF_LDFLAGS
+=
-mno-fix-cortex-a53-843419
endif
TF_LDFLAGS
+=
-nostdlib
TF_LDFLAGS
+=
$(
subst
--
,-Xlinker
--
,
$
(
TF_LDFLAGS_
$(ARCH)
))
else
TF_LDFLAGS
+=
--fatal-warnings
-O1
TF_LDFLAGS
+=
--gc-sections
endif
TF_LDFLAGS
+=
$
(
TF_LDFLAGS_
$(ARCH)
)
endif
DTC_FLAGS
+=
-I
dts
-O
dtb
DTC_CPPFLAGS
+=
-nostdinc
-Iinclude
-undef
-x
assembler-with-cpp
...
...
@@ -406,7 +435,11 @@ endif
ifeq
($(ENABLE_PIE),1)
TF_CFLAGS
+=
-fpie
ifneq
($(findstring gcc,$(notdir $(LD))),)
TF_LDFLAGS
+=
-Wl
,-pie
-Wl
,--no-dynamic-linker
else
TF_LDFLAGS
+=
-pie
--no-dynamic-linker
endif
else
PIE_FOUND
:=
$(
findstring
--enable-default-pie
,
${GCC_V_OUTPUT}
)
ifneq
($(PIE_FOUND),)
...
...
docs/getting_started/build-options.rst
View file @
84bd7a43
...
...
@@ -196,6 +196,10 @@ Common build options
builds, but this behaviour can be overridden in each platform's Makefile or
in the build command line.
- ``ENABLE_LTO``: Boolean option to enable Link Time Optimization (LTO)
support in GCC for TF-A. This option is currently only supported for
AArch64. Default is 0.
- ``ENABLE_MPAM_FOR_LOWER_ELS``: Boolean option to enable lower ELs to use MPAM
feature. MPAM is an optional Armv8.4 extension that enables various memory
system components and resources to define partitions; software running at
...
...
make_helpers/build_macros.mk
View file @
84bd7a43
...
...
@@ -236,7 +236,7 @@ $(eval BL_CFLAGS := $(BL$(call uppercase,$(3))_CFLAGS))
$(OBJ)
:
$(2) $(filter-out %.d
,
$(MAKEFILE_LIST)) | bl$(3)_dirs
$
$(ECHO)
" CC
$$
<"
$
$(Q)
$
$(CC)
$
$(TF_CFLAGS)
$
$(CFLAGS)
$(BL_CFLAGS)
-D
$(IMAGE)
$(MAKE_DEP)
-c
$$
<
-o
$$
@
$
$(Q)
$
$(CC)
$
$(LTO_CFLAGS)
$
$(TF_CFLAGS)
$
$(CFLAGS)
$(BL_CFLAGS)
-D
$(IMAGE)
$(MAKE_DEP)
-c
$$
<
-o
$$
@
-include
$(DEP)
...
...
@@ -433,6 +433,10 @@ ifneq ($(findstring armlink,$(notdir $(LD))),)
--map
--list
=
"
$(MAPFILE)
"
--scatter
=
${PLAT_DIR}
/scat/bl
${1}
.scat
\
$(LDPATHS)
$(LIBWRAPPER)
$(LDLIBS)
$(BL_LIBS)
\
$(BUILD_DIR)
/build_message.o
$(OBJS)
else
ifneq
($(findstring gcc,$(notdir $(LD))),)
$$(Q)$$(LD)
-o
$$@
$$(TF_LDFLAGS)
$$(LDFLAGS)
-Wl,
-Map
=
$(MAPFILE)
\
-Wl
,-T
$(LINKERFILE)
$(BUILD_DIR)
/build_message.o
\
$(OBJS)
$(LDPATHS)
$(LIBWRAPPER)
$(LDLIBS)
$(BL_LIBS)
else
$$(Q)$$(LD)
-o
$$@
$$(TF_LDFLAGS)
$$(LDFLAGS)
-Map
=
$(MAPFILE)
\
--script
$(LINKERFILE)
$(BUILD_DIR)
/build_message.o
\
...
...
make_helpers/defaults.mk
View file @
84bd7a43
...
...
@@ -239,3 +239,6 @@ SANITIZE_UB := off
# implementation variant using the ARMv8.1-LSE compare-and-swap instruction.
# Default: disabled
USE_SPINLOCK_CAS
:=
0
# Enable Link Time Optimization
ENABLE_LTO
:=
0
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment