Skip to content
GitLab
Menu
Projects
Groups
Snippets
Help
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
5 years ago
by
Soby Mathew
Committed by
TrustedFirmware Code Review
5 years ago
Browse files
Options
Download
Plain Diff
Merge "Enable Link Time Optimization in GCC" into integration
parents
87b582ef
edbce9aa
Changes
4
Show whitespace changes
Inline
Side-by-side
Showing
4 changed files
Makefile
+35
-2
Makefile
docs/getting_started/build-options.rst
+4
-0
docs/getting_started/build-options.rst
make_helpers/build_macros.mk
+5
-1
make_helpers/build_macros.mk
make_helpers/defaults.mk
+3
-0
make_helpers/defaults.mk
with
47 additions
and
3 deletions
+47
-3
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),)
...
...
This diff is collapsed.
Click to expand it.
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
...
...
This diff is collapsed.
Click to expand it.
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
\
...
...
This diff is collapsed.
Click to expand it.
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
This diff is collapsed.
Click to expand it.
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
Menu
Projects
Groups
Snippets
Help