diff options
| author | Jesse Meyer <jesse.r.meyer@me.com> | 2026-02-01 09:04:53 -0500 |
|---|---|---|
| committer | Jesse Meyer <jesse.r.meyer@me.com> | 2026-02-03 20:16:20 -0500 |
| commit | 43ad4a1d9f18a89822e1b9f554adef1a228136db (patch) | |
| tree | ca7a569d1e5adc6fa3f1d7eb6c1a5fe36b175715 /src/main.cpp | |
| parent | f7901cffc9f4983259586241d5b336cdb6377b9c (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.cpp | 14 |
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: { |