Auto merge of #129831 - matthiaskrgr:rollup-befq6zx, r=matthiaskrgr · patricklam/verify-rust-std@d432698 (original) (raw)
1
1
`` //! Compiles the profiler part of the compiler-rt library.
``
2
2
`//!
`
3
``
`-
//! See the build.rs for libcompiler_builtins crate for details.
`
``
3
`+
//! Loosely based on:
`
``
4
`` +
//! - LLVM's compiler-rt/lib/profile/CMakeLists.txt
``
``
5
`+
//! - https://github.com/rust-lang/compiler-builtins/blob/master/build.rs.
`
4
6
``
5
7
`use std::env;
`
6
8
`use std::path::PathBuf;
`
7
9
``
8
10
`fn main() {
`
9
``
`-
println!("cargo:rerun-if-env-changed=LLVM_PROFILER_RT_LIB");
`
10
``
`-
if let Ok(rt) = env::var("LLVM_PROFILER_RT_LIB") {
`
11
``
`-
println!("cargo:rustc-link-lib=static:+verbatim={rt}");
`
``
11
`+
if let Ok(rt) = tracked_env_var("LLVM_PROFILER_RT_LIB") {
`
``
12
`+
println!("cargo::rustc-link-lib=static:+verbatim={rt}");
`
12
13
`return;
`
13
14
`}
`
14
15
``
15
16
`let target_os = env::var("CARGO_CFG_TARGET_OS").expect("CARGO_CFG_TARGET_OS was not set");
`
16
17
`let target_env = env::var("CARGO_CFG_TARGET_ENV").expect("CARGO_CFG_TARGET_ENV was not set");
`
17
18
`let cfg = &mut cc::Build::new();
`
18
19
``
19
``
`` -
// FIXME: rerun-if-changed directives are not currently emitted and the build script
``
20
``
`-
// will not rerun on changes in these source files or headers included into them.
`
21
``
`-
let mut profile_sources = vec![
`
``
20
`+
let profile_sources = vec![
`
``
21
`+
// tidy-alphabetical-start
`
22
22
`"GCDAProfiling.c",
`
23
23
`"InstrProfiling.c",
`
24
24
`"InstrProfilingBuffer.c",
`
25
25
`"InstrProfilingFile.c",
`
``
26
`+
"InstrProfilingInternal.c",
`
26
27
`"InstrProfilingMerge.c",
`
27
28
`"InstrProfilingMergeFile.c",
`
28
29
`"InstrProfilingNameVar.c",
`
`@@ -37,15 +38,13 @@ fn main() {
`
37
38
`"InstrProfilingValue.c",
`
38
39
`"InstrProfilingVersionVar.c",
`
39
40
`"InstrProfilingWriter.c",
`
40
``
`-
// These files were added in LLVM 11.
`
41
``
`-
"InstrProfilingInternal.c",
`
42
``
`-
"InstrProfilingBiasVar.c",
`
``
41
`+
"WindowsMMap.c",
`
``
42
`+
// tidy-alphabetical-end
`
43
43
`];
`
44
44
``
45
45
`if target_env == "msvc" {
`
46
46
`// Don't pull in extra libraries on MSVC
`
47
47
` cfg.flag("/Zl");
`
48
``
`-
profile_sources.push("WindowsMMap.c");
`
49
48
` cfg.define("strdup", Some("_strdup"));
`
50
49
` cfg.define("open", Some("_open"));
`
51
50
` cfg.define("fdopen", Some("_fdopen"));
`
`@@ -60,8 +59,6 @@ fn main() {
`
60
59
`if target_os != "windows" {
`
61
60
` cfg.flag("-fvisibility=hidden");
`
62
61
` cfg.define("COMPILER_RT_HAS_UNAME", Some("1"));
`
63
``
`-
} else {
`
64
``
`-
profile_sources.push("WindowsMMap.c");
`
65
62
`}
`
66
63
`}
`
67
64
``
`@@ -80,26 +77,33 @@ fn main() {
`
80
77
`}
`
81
78
``
82
79
`` // Get the LLVM compiler-rt directory from bootstrap.
``
83
``
`-
println!("cargo:rerun-if-env-changed=RUST_COMPILER_RT_FOR_PROFILER");
`
84
``
`-
let root = PathBuf::from(env::var("RUST_COMPILER_RT_FOR_PROFILER").unwrap_or_else(|_| {
`
85
``
`-
let path = "../../src/llvm-project/compiler-rt";
`
86
``
`-
println!("RUST_COMPILER_RT_FOR_PROFILER was not set; falling back to {path:?}");
`
87
``
`-
path.to_owned()
`
88
``
`-
}));
`
``
80
`+
let root = PathBuf::from(tracked_env_var_or_fallback(
`
``
81
`+
"RUST_COMPILER_RT_FOR_PROFILER",
`
``
82
`+
"../../src/llvm-project/compiler-rt",
`
``
83
`+
));
`
89
84
``
90
85
`let src_root = root.join("lib").join("profile");
`
91
86
`assert!(src_root.exists(), "profiler runtime source directory not found: {src_root:?}");
`
92
``
`-
let mut n_sources_found = 0u32;
`
93
``
`-
for src in profile_sources {
`
94
``
`-
let path = src_root.join(src);
`
95
``
`-
if path.exists() {
`
96
``
`-
cfg.file(path);
`
97
``
`-
n_sources_found += 1;
`
98
``
`-
}
`
``
87
`+
println!("cargo::rerun-if-changed={}", src_root.display());
`
``
88
`+
for file in profile_sources {
`
``
89
`+
cfg.file(src_root.join(file));
`
99
90
`}
`
100
``
`-
assert!(n_sources_found > 0, "couldn't find any profiler runtime source files in {src_root:?}");
`
101
91
``
102
``
`-
cfg.include(root.join("include"));
`
``
92
`+
let include = root.join("include");
`
``
93
`+
println!("cargo::rerun-if-changed={}", include.display());
`
``
94
`+
cfg.include(include);
`
``
95
+
103
96
` cfg.warnings(false);
`
104
97
` cfg.compile("profiler-rt");
`
105
98
`}
`
``
99
+
``
100
`+
fn tracked_env_var(key: &str) -> Result<String, env::VarError> {
`
``
101
`+
println!("cargo::rerun-if-env-changed={key}");
`
``
102
`+
env::var(key)
`
``
103
`+
}
`
``
104
`+
fn tracked_env_var_or_fallback(key: &str, fallback: &str) -> String {
`
``
105
`+
tracked_env_var(key).unwrap_or_else(|_| {
`
``
106
`+
println!("cargo::warning={key} was not set; falling back to {fallback:?}");
`
``
107
`+
fallback.to_owned()
`
``
108
`+
})
`
``
109
`+
}
`