//@ only-linux
//@ ignore-cross-compile

use run_make_support::llvm::llvm_bin_dir;
use run_make_support::{
    cmd, env_var, has_extension, llvm_filecheck, rustc, shallow_find_files, source_root,
};

fn main() {
    // `-Ccodegen-units=16 -Copt-level=2` is used here to trigger thin LTO
    // across codegen units to test deduplication of the named metadata
    // (see `LLVMRustPrepareThinLTOImport` for details).
    rustc()
        .emit("link,obj")
        .arg("-")
        .arg("-Csave-temps")
        .codegen_units(16)
        .opt_level("2")
        .target(&env_var("TARGET"))
        .stdin("fn main(){}")
        .run();

    // `llvm-dis` is used here since `--emit=llvm-ir` does not emit LLVM IR
    // for temporary outputs.
    let files = shallow_find_files(".", |path| has_extension(path, "bc"));
    cmd(llvm_bin_dir().join("llvm-dis")).args(files).run();

    // Check LLVM IR files (including temporary outputs) have `!llvm.ident`
    // named metadata, reusing the related codegen test.
    let llvm_ident_path = source_root().join("tests/codegen/llvm-ident.rs");
    let files = shallow_find_files(".", |path| has_extension(path, "ll"));
    for file in files {
        llvm_filecheck().input_file(file).arg(&llvm_ident_path).run();
    }
}
