aboutsummaryrefslogtreecommitdiff
path: root/src/main.cpp
diff options
context:
space:
mode:
authorJesse Meyer <jesse.r.meyer@me.com>2026-02-01 09:04:53 -0500
committerJesse Meyer <jesse.r.meyer@me.com>2026-02-03 20:16:20 -0500
commit43ad4a1d9f18a89822e1b9f554adef1a228136db (patch)
treeca7a569d1e5adc6fa3f1d7eb6c1a5fe36b175715 /src/main.cpp
parentf7901cffc9f4983259586241d5b336cdb6377b9c (diff)
Add ThinLTO support via -lto:thin and -lto:thin-files flags
- Add -lto:thin and -lto:thin-files CLI flags with validation - Emit LLVM bitcode (.bc) instead of object files when LTO is enabled - Pass -flto=thin and -flto-jobs to clang/lld linkers - Guard linkage corrections to skip declarations without definitions (required for LTO where declarations appear across modules) - Allow module-per-file with LTO even at higher optimization levels Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Diffstat (limited to 'src/main.cpp')
-rw-r--r--src/main.cpp14
1 files changed, 14 insertions, 0 deletions
diff --git a/src/main.cpp b/src/main.cpp
index 624869e65..feaf55f4b 100644
--- a/src/main.cpp
+++ b/src/main.cpp
@@ -413,6 +413,7 @@ enum BuildFlagKind {
BuildFlag_Tilde,
BuildFlag_Sanitize,
+ BuildFlag_LTO,
#if defined(GB_SYSTEM_WINDOWS)
BuildFlag_IgnoreVsSearch,
@@ -643,6 +644,7 @@ gb_internal bool parse_build_flags(Array<String> args) {
#endif
add_flag(&build_flags, BuildFlag_Sanitize, str_lit("sanitize"), BuildFlagParam_String, Command__does_build, true);
+ add_flag(&build_flags, BuildFlag_LTO, str_lit("lto"), BuildFlagParam_String, Command__does_build);
#if defined(GB_SYSTEM_WINDOWS)
@@ -1636,6 +1638,18 @@ gb_internal bool parse_build_flags(Array<String> args) {
}
break;
+ case BuildFlag_LTO:
+ GB_ASSERT(value.kind == ExactValue_String);
+ if (str_eq_ignore_case(value.value_string, str_lit("thin"))) {
+ build_context.lto_kind = LTO_Thin;
+ } else if (str_eq_ignore_case(value.value_string, str_lit("thin-files"))) {
+ build_context.lto_kind = LTO_Thin_Files;
+ } else {
+ gb_printf_err("-lto:<string> options are 'thin' and 'thin-files'\n");
+ bad_flags = true;
+ }
+ break;
+
#if defined(GB_SYSTEM_WINDOWS)
case BuildFlag_IgnoreVsSearch: {