diff options
Diffstat (limited to 'debian/patches/u-profiler.patch')
-rw-r--r-- | debian/patches/u-profiler.patch | 139 |
1 files changed, 0 insertions, 139 deletions
diff --git a/debian/patches/u-profiler.patch b/debian/patches/u-profiler.patch deleted file mode 100644 index e7c1a3ced..000000000 --- a/debian/patches/u-profiler.patch +++ /dev/null @@ -1,139 +0,0 @@ -From d0b58f40a0e669897fafb614299d2a989997eda7 Mon Sep 17 00:00:00 2001 -From: Josh Stone <jistone@redhat.com> -Date: Tue, 25 Jul 2023 13:11:50 -0700 -Subject: [PATCH] Allow using external builds of the compiler-rt profile lib - -This changes the bootstrap config `target.*.profiler` from a plain bool -to also allow a string, which will be used as a path to the pre-built -profiling runtime for that target. Then `profiler_builtins/build.rs` -reads that in a `LLVM_PROFILER_RT_LIB` environment variable. ---- - config.example.toml | 6 ++++-- - library/profiler_builtins/build.rs | 6 ++++++ - src/bootstrap/compile.rs | 4 ++++ - src/bootstrap/config.rs | 30 ++++++++++++++++++++++++------ - 4 files changed, 38 insertions(+), 8 deletions(-) - -Index: rust/config.example.toml -=================================================================== ---- rust.orig/config.example.toml -+++ rust/config.example.toml -@@ -752,8 +752,10 @@ changelog-seen = 2 - # This option will override the same option under [build] section. - #sanitizers = build.sanitizers (bool) - --# Build the profiler runtime for this target(required when compiling with options that depend --# on this runtime, such as `-C profile-generate` or `-C instrument-coverage`). -+# When true, build the profiler runtime for this target(required when compiling -+# with options that depend on this runtime, such as `-C profile-generate` or -+# `-C instrument-coverage`). This may also be given a path to an existing build -+# of the profiling runtime library from LLVM's compiler-rt. - # This option will override the same option under [build] section. - #profiler = build.profiler (bool) - -Index: rust/library/profiler_builtins/build.rs -=================================================================== ---- rust.orig/library/profiler_builtins/build.rs -+++ rust/library/profiler_builtins/build.rs -@@ -6,6 +6,12 @@ use std::env; - use std::path::Path; - - fn main() { -+ println!("cargo:rerun-if-env-changed=LLVM_PROFILER_RT_LIB"); -+ if let Ok(rt) = env::var("LLVM_PROFILER_RT_LIB") { -+ println!("cargo:rustc-link-lib=static:+verbatim={rt}"); -+ return; -+ } -+ - let target = env::var("TARGET").expect("TARGET was not set"); - let cfg = &mut cc::Build::new(); - -Index: rust/src/bootstrap/compile.rs -=================================================================== ---- rust.orig/src/bootstrap/compile.rs -+++ rust/src/bootstrap/compile.rs -@@ -336,6 +336,10 @@ pub fn std_cargo(builder: &Builder<'_>, - cargo.env("MACOSX_DEPLOYMENT_TARGET", target); - } - -+ if let Some(path) = builder.config.profiler_path(target) { -+ cargo.env("LLVM_PROFILER_RT_LIB", path); -+ } -+ - // Determine if we're going to compile in optimized C intrinsics to - // the `compiler-builtins` crate. These intrinsics live in LLVM's - // `compiler-rt` repository, but our `src/llvm-project` submodule isn't -Index: rust/src/bootstrap/config.rs -=================================================================== ---- rust.orig/src/bootstrap/config.rs -+++ rust/src/bootstrap/config.rs -@@ -533,7 +533,7 @@ pub struct Target { - pub linker: Option<PathBuf>, - pub ndk: Option<PathBuf>, - pub sanitizers: Option<bool>, -- pub profiler: Option<bool>, -+ pub profiler: Option<StringOrBool>, - pub rpath: Option<bool>, - pub crt_static: Option<bool>, - pub musl_root: Option<PathBuf>, -@@ -862,9 +862,9 @@ define_config! { - } - } - --#[derive(Debug, Deserialize)] -+#[derive(Clone, Debug, Deserialize)] - #[serde(untagged)] --enum StringOrBool { -+pub enum StringOrBool { - String(String), - Bool(bool), - } -@@ -976,6 +976,12 @@ define_config! { - } - } - -+impl StringOrBool { -+ fn is_string_or_true(&self) -> bool { -+ matches!(self, Self::String(_) | Self::Bool(true)) -+ } -+} -+ - define_config! { - /// TOML representation of how each build target is configured. - struct TomlTarget { -@@ -991,7 +997,7 @@ define_config! { - llvm_libunwind: Option<String> = "llvm-libunwind", - android_ndk: Option<String> = "android-ndk", - sanitizers: Option<bool> = "sanitizers", -- profiler: Option<bool> = "profiler", -+ profiler: Option<StringOrBool> = "profiler", - rpath: Option<bool> = "rpath", - crt_static: Option<bool> = "crt-static", - musl_root: Option<String> = "musl-root", -@@ -1887,12 +1893,24 @@ impl Config { - self.target_config.values().any(|t| t.sanitizers == Some(true)) || self.sanitizers - } - -+ pub fn profiler_path(&self, target: TargetSelection) -> Option<&str> { -+ match self.target_config.get(&target)?.profiler.as_ref()? { -+ StringOrBool::String(s) => Some(s), -+ StringOrBool::Bool(_) => None, -+ } -+ } -+ - pub fn profiler_enabled(&self, target: TargetSelection) -> bool { -- self.target_config.get(&target).map(|t| t.profiler).flatten().unwrap_or(self.profiler) -+ self.target_config -+ .get(&target) -+ .and_then(|t| t.profiler.as_ref()) -+ .map(StringOrBool::is_string_or_true) -+ .unwrap_or(self.profiler) - } - - pub fn any_profiler_enabled(&self) -> bool { -- self.target_config.values().any(|t| t.profiler == Some(true)) || self.profiler -+ self.target_config.values().any(|t| matches!(&t.profiler, Some(p) if p.is_string_or_true())) -+ || self.profiler - } - - pub fn rpath_enabled(&self, target: TargetSelection) -> bool { |