summaryrefslogtreecommitdiffstats
path: root/debian/patches/u-profiler.patch
diff options
context:
space:
mode:
Diffstat (limited to 'debian/patches/u-profiler.patch')
-rw-r--r--debian/patches/u-profiler.patch139
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 {