From d434e47b802880bc9f0bfae2e8927618afff4179 Mon Sep 17 00:00:00 2001 From: kulst Date: Wed, 3 Jun 2026 20:59:17 +0200 Subject: [PATCH] Silence llbc's output by default to prevent rustc's linker output warning Make the linker quiet by default and add linker command line arguments for explicit verbosity control: - no flag: no tracing output is emitted during successful links - `-v`: emit informational linker diagnostics - `-vv`: emit tracing-level linker diagnostics Also adjust the tracing formatter to produce linker-style output by disabling ANSI color sequences and omitting timestamps, tracing levels, and tracing targets. --- .../src/bin/llvm-bitcode-linker.rs | 32 ++++++++++++++++--- 1 file changed, 28 insertions(+), 4 deletions(-) diff --git a/src/tools/llvm-bitcode-linker/src/bin/llvm-bitcode-linker.rs b/src/tools/llvm-bitcode-linker/src/bin/llvm-bitcode-linker.rs index 608c6605304f4..9116b38ed0796 100644 --- a/src/tools/llvm-bitcode-linker/src/bin/llvm-bitcode-linker.rs +++ b/src/tools/llvm-bitcode-linker/src/bin/llvm-bitcode-linker.rs @@ -1,7 +1,9 @@ use std::path::PathBuf; -use clap::Parser; +use anyhow::anyhow; +use clap::{ArgAction, Parser}; use llvm_bitcode_linker::{Optimization, Session, Target}; +use tracing::level_filters::LevelFilter; #[derive(Debug, Parser)] /// Linker for embedded code without any system dependencies @@ -46,13 +48,29 @@ pub struct Args { /// The optimization level #[arg(short = 'O', value_enum, default_value = "0")] optimization: Optimization, + + /// Increase linker diagnostic verbosity (-v = info, -vv = debug) + #[arg(short = 'v', long = "verbose", action = ArgAction::Count)] + verbose: u8, } fn main() -> anyhow::Result<()> { - tracing_subscriber::FmtSubscriber::builder().with_max_level(tracing::Level::DEBUG).init(); - let args = Args::parse(); + let max_tracing_level = match args.verbose { + 0 => LevelFilter::OFF, + 1 => LevelFilter::INFO, + _ => LevelFilter::TRACE, + }; + + tracing_subscriber::FmtSubscriber::builder() + .with_max_level(max_tracing_level) + .with_target(false) + .without_time() + .with_level(false) + .with_ansi(false) + .init(); + let mut linker = Session::new(args.target, args.target_cpu, args.target_feature, args.output); linker.add_exported_symbols(args.export_symbol); @@ -61,5 +79,11 @@ fn main() -> anyhow::Result<()> { linker.add_file(rlib); } - linker.lto(args.optimization, args.debug) + let hint = if max_tracing_level < LevelFilter::ERROR { + "Pass `-v` to llvm-bitcode-linker for additional diagnostic output." + } else { + "" + }; + + linker.lto(args.optimization, args.debug).map_err(|err| anyhow!("{err}\n{hint}")) }