From 292b0251ff9227ced35ef0c31d1edd85820ed0ef Mon Sep 17 00:00:00 2001 From: Simon Friis Vindum Date: Fri, 28 Aug 2026 15:48:12 +0200 Subject: [PATCH] Rust: Enable LTO for the extractor --- misc/bazel/rust.bzl | 26 +++++++++++++++++++++++++- rust/extractor/BUILD.bazel | 1 + 2 files changed, 26 insertions(+), 1 deletion(-) diff --git a/misc/bazel/rust.bzl b/misc/bazel/rust.bzl index 97afee4ba1c1..9142776318cc 100644 --- a/misc/bazel/rust.bzl +++ b/misc/bazel/rust.bzl @@ -1,17 +1,41 @@ load("@rules_rust//rust:defs.bzl", "rust_binary") load("@semmle_code//buildutils-internal:glibc_symbols_check.bzl", "glibc_symbols_check") load("@semmle_code//buildutils-internal:lipo.bzl", "universal_binary") +load("@semmle_code//buildutils-internal:transitions.bzl", "forward_binary_from_transition", "get_transition_attrs") + +def _full_lto_transition_impl(_settings, _attr): + return {"@rules_rust//rust/settings:lto": "fat"} + +_full_lto_transition = transition( + implementation = _full_lto_transition_impl, + inputs = [], + outputs = ["@rules_rust//rust/settings:lto"], +) + +_full_lto_binary = rule( + implementation = forward_binary_from_transition, + attrs = get_transition_attrs(_full_lto_transition), +) def codeql_rust_binary( name, + full_lto = False, target_compatible_with = None, visibility = None, symbols_test = True, **kwargs): rust_label_name = "single_arch/" + name + binary_dep = ":" + rust_label_name + if full_lto: + lto_label_name = "full_lto/" + name + _full_lto_binary( + name = lto_label_name, + dep = binary_dep, + ) + binary_dep = ":" + lto_label_name universal_binary( name = name, - dep = ":" + rust_label_name, + dep = binary_dep, target_compatible_with = target_compatible_with, visibility = visibility, ) diff --git a/rust/extractor/BUILD.bazel b/rust/extractor/BUILD.bazel index 52b551f6335d..d3ae10fe39e8 100644 --- a/rust/extractor/BUILD.bazel +++ b/rust/extractor/BUILD.bazel @@ -11,6 +11,7 @@ codeql_rust_binary( "src/qltest_cargo.mustache", "src/nightly-toolchain/rust-toolchain.toml", ], + full_lto = True, proc_macro_deps = all_crate_deps( proc_macro = True, ) + [