File: rmake.rs

package info (click to toggle)
rustc 1.89.0%2Bdfsg1-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 906,624 kB
  • sloc: xml: 158,148; python: 34,888; javascript: 19,595; sh: 19,221; ansic: 13,046; cpp: 7,144; asm: 4,376; makefile: 692; lisp: 174; sql: 15
file content (42 lines) | stat: -rw-r--r-- 1,458 bytes parent folder | download | duplicates (12)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
// Checks debuginfo compression both for the always-enabled zlib, and when the optional zstd is
// enabled:
// - via rustc's `debuginfo-compression`,
// - and via rust-lld's `compress-debug-sections`

//@ needs-llvm-zstd: we want LLVM/LLD to be built with zstd support
//@ needs-rust-lld: the system linker will most likely not support zstd
//@ only-linux
//@ ignore-cross-compile

use run_make_support::{Rustc, llvm_readobj, run_in_tmpdir};

fn check_compression(compression: &str, to_find: &str) {
    // check compressed debug sections via rustc flag
    prepare_and_check(to_find, |rustc| {
        rustc.arg(&format!("-Zdebuginfo-compression={compression}"))
    });

    // check compressed debug sections via rust-lld flag
    prepare_and_check(to_find, |rustc| {
        rustc.link_arg(&format!("-Wl,--compress-debug-sections={compression}"))
    });
}

fn prepare_and_check<F: FnOnce(&mut Rustc) -> &mut Rustc>(to_find: &str, prepare_rustc: F) {
    run_in_tmpdir(|| {
        let mut rustc = Rustc::new();
        rustc
            .arg("-Zlinker-features=+lld")
            .arg("-Clink-self-contained=+linker")
            .arg("-Zunstable-options")
            .arg("-Cdebuginfo=full")
            .input("main.rs");
        prepare_rustc(&mut rustc).run();
        llvm_readobj().arg("-t").arg("main").run().assert_stdout_contains(to_find);
    });
}

fn main() {
    check_compression("zlib", "ZLIB");
    check_compression("zstd", "ZSTD");
}