summaryrefslogtreecommitdiffstats
path: root/meta/conf/distro/include/lto.inc
diff options
context:
space:
mode:
Diffstat (limited to 'meta/conf/distro/include/lto.inc')
-rw-r--r--meta/conf/distro/include/lto.inc51
1 files changed, 51 insertions, 0 deletions
diff --git a/meta/conf/distro/include/lto.inc b/meta/conf/distro/include/lto.inc
new file mode 100644
index 0000000000..b8193725a1
--- /dev/null
+++ b/meta/conf/distro/include/lto.inc
@@ -0,0 +1,51 @@
+# To enable LTO, add following in local.conf
+# require conf/distro/include/lto.inc
+# DISTRO_FEATURES:append = " lto"
+#
+
+# Disable LTO for following packages
+LTO:pn-glibc = ""
+LTO:pn-gcc-runtime = ""
+LTO:pn-libgcc-initial = ""
+LTO:pn-libgcc = ""
+LTO:pn-libaio = ""
+LTO:pn-libpam = ""
+LTO:pn-elfutils = ""
+LTO:pn-perl = ""
+LTO:pn-busybox = ""
+LTO:pn-libxcrypt = ""
+LTO:pn-curl = ""
+LTO:pn-libcap = ""
+LTO:pn-libproxy = ""
+LTO:pn-libbsd = ""
+LTO:pn-perf = ""
+# webkit is not linking properly with LTO, disable until next time
+LTO:pn-webkitgtk = ""
+LTO:pn-xserver-xorg = ""
+LTO:pn-grub = ""
+LTO:pn-grub-efi = ""
+
+# Custom LTO flags
+# disable partitioning/streaming algorithm since its uses ASM
+# constructs not compatible with lto
+LTOEXTRA:pn-alsa-lib = "-flto-partition=none"
+
+LTOEXTRA ?= ""
+
+# Override it for additional or different options if needed e.g.
+# with clang thin-lto might be better for compile speed
+#
+# ffat-lto-objects
+# object files that contain both the intermediate
+# language and the object code. This makes them
+# usable for both LTO linking and normal linking
+#
+# -fuse-linker-plugin
+# ensures that libraries participate in LTO by supplying intermediate
+# code from .a files to linker
+LTO ?= "-flto -ffat-lto-objects -fuse-linker-plugin ${LTOEXTRA}"
+
+SELECTED_OPTIMIZATION:append = "${@bb.utils.contains('DISTRO_FEATURES', 'lto', ' ${LTO}', '', d)}"
+TARGET_LDFLAGS:append:class-target = "${@bb.utils.contains('DISTRO_FEATURES', 'lto', ' ${LTO}', '', d)}"
+
+SELECTED_OPTIMIZATION[vardeps] += "LTO LTOEXTRA"