From 26db0bb15fafe8ddcfd5a4f4d6de589a831dd055 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=A9mi=20Verschelde?= Date: Tue, 10 Sep 2024 12:29:19 +0200 Subject: [PATCH] SCons: Make `lto=auto` prefer ThinLTO over full LTO for LLVM targets This speeds up build time considerably for these platforms compared to using `lto=full`, which is sadly single-threaded with LLVM, unlike GCC. Changes to default behavior of `lto=auto` (i.e. `production=yes`): - Linux: Prefer ThinLTO for LLVM - Web: Prefer ThinLTO - Windows: Prefer ThinLTO for llvm-mingw The following LLVM targets don't use LTO by default currently, which needs to be assessed further (gains from LLVM LTO on performance need to be weighed against the potential size increase from heavy inlining): - Android - iOS - macOS - Windows clang-cl --- platform/linuxbsd/detect.py | 4 ++-- platform/web/detect.py | 4 ++-- platform/windows/detect.py | 4 ++-- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/platform/linuxbsd/detect.py b/platform/linuxbsd/detect.py index ce497bfa501..75e05f1ddd4 100644 --- a/platform/linuxbsd/detect.py +++ b/platform/linuxbsd/detect.py @@ -184,8 +184,8 @@ def configure(env: "SConsEnvironment"): # LTO - if env["lto"] == "auto": # Full LTO for production. - env["lto"] = "full" + if env["lto"] == "auto": # Enable LTO for production. + env["lto"] = "thin" if env["use_llvm"] else "full" if env["lto"] != "none": if env["lto"] == "thin": diff --git a/platform/web/detect.py b/platform/web/detect.py index 0620c93f491..87315a405f2 100644 --- a/platform/web/detect.py +++ b/platform/web/detect.py @@ -117,8 +117,8 @@ def configure(env: "SConsEnvironment"): # LTO - if env["lto"] == "auto": # Full LTO for production. - env["lto"] = "full" + if env["lto"] == "auto": # Enable LTO for production. + env["lto"] = "thin" if env["lto"] != "none": if env["lto"] == "thin": diff --git a/platform/windows/detect.py b/platform/windows/detect.py index 5893858dd9e..943de74a3e9 100644 --- a/platform/windows/detect.py +++ b/platform/windows/detect.py @@ -762,8 +762,8 @@ def configure_mingw(env: "SConsEnvironment"): ## LTO - if env["lto"] == "auto": # Full LTO for production with MinGW. - env["lto"] = "full" + if env["lto"] == "auto": # Enable LTO for production with MinGW. + env["lto"] = "thin" if env["use_llvm"] else "full" if env["lto"] != "none": if env["lto"] == "thin":