diff options
author | Marek BehĂșn <marek.behun@nic.cz> | 2021-05-20 13:24:03 +0200 |
---|---|---|
committer | Tom Rini <trini@konsulko.com> | 2021-05-24 14:21:30 -0400 |
commit | c1094987d1dc4701646c5f3aa254e7a92a02d305 (patch) | |
tree | 5d2bbcee39b8adff66ac767d8bde1bcb6283dfe7 /Kconfig | |
parent | 958f2e57eff72b5156f7b08b9c1415fb7e12833d (diff) | |
download | u-boot-c1094987d1dc4701646c5f3aa254e7a92a02d305.tar.gz |
build: support building with Link Time Optimizations
Add plumbing for building U-Boot with Link Time Optimizations.
When building with LTO, $(PLATFORM_LIBS) has to be in --whole-archive /
--no-whole-archive group, otherwise some functions declared in assembly
may not be resolved and linking may fail.
Note: clang may throw away linker list symbols it thinks are unused when
compiling with LTO. To force these symbols to be included, we refer to
them via the __ADDRESSABLE macro in a C file generated from compiled
built-in.o files before linking.
Signed-off-by: Marek BehĂșn <marek.behun@nic.cz>
Reviewed-by: Simon Glass <sjg@chromium.org>
Diffstat (limited to 'Kconfig')
-rw-r--r-- | Kconfig | 24 |
1 files changed, 24 insertions, 0 deletions
@@ -85,6 +85,30 @@ config SPL_OPTIMIZE_INLINING do what it thinks is best, which is desirable in some cases for size reasons. +config ARCH_SUPPORTS_LTO + bool + +config LTO + bool "Enable Link Time Optimizations" + depends on ARCH_SUPPORTS_LTO + default n + help + This option enables Link Time Optimization (LTO), a mechanism which + allows the compiler to optimize between different compilation units. + + This can optimize away dead code paths, resulting in smaller binary + size (if CC_OPTIMIZE_FOR_SIZE is enabled). + + This option is not available for every architecture and may + introduce bugs. + + Currently, when compiling with GCC, due to a weird bug regarding + jobserver, the final linking will not respect make's --jobs argument. + Instead all available processors will be used (as reported by the + nproc command). + + If unsure, say n. + config TPL_OPTIMIZE_INLINING bool "Allow compiler to uninline functions marked 'inline' in TPL" depends on TPL |