diff options
| author | Matthias Krüger <matthias.krueger@famsik.de> | 2024-03-15 10:14:53 +0100 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2024-03-15 10:14:53 +0100 |
| commit | 2b8fc6fd54ce7f58a6ec804aa586d6b6b0b4f97d (patch) | |
| tree | 762f9b9eb5ddbb1c64941bbc5d9021fd3175aa87 | |
| parent | ee03c286cfdca26fa5b2a4ee40957625d2c826ff (diff) | |
| parent | f46aceaaf75e6072e4e7227d71bcbf0119201212 (diff) | |
| download | rust-2b8fc6fd54ce7f58a6ec804aa586d6b6b0b4f97d.tar.gz rust-2b8fc6fd54ce7f58a6ec804aa586d6b6b0b4f97d.zip | |
Rollup merge of #121207 - chriswailes:z-external-clangrt, r=michaelwoerister
Add `-Z external-clangrt` This adds the unstable `-Z external-clangrt` flag that will prevent rustc from emitting linker paths for the in-tree LLVM sanitizer runtime library.
| -rw-r--r-- | compiler/rustc_codegen_ssa/src/back/link.rs | 29 | ||||
| -rw-r--r-- | compiler/rustc_session/src/options.rs | 2 |
2 files changed, 21 insertions, 10 deletions
diff --git a/compiler/rustc_codegen_ssa/src/back/link.rs b/compiler/rustc_codegen_ssa/src/back/link.rs index 1406a7d9b5c..f5e8d5fc92a 100644 --- a/compiler/rustc_codegen_ssa/src/back/link.rs +++ b/compiler/rustc_codegen_ssa/src/back/link.rs @@ -1216,20 +1216,29 @@ fn add_sanitizer_libraries( crate_type: CrateType, linker: &mut dyn Linker, ) { + if sess.target.is_like_android { + // Sanitizer runtime libraries are provided dynamically on Android + // targets. + return; + } + + if sess.opts.unstable_opts.external_clangrt { + // Linking against in-tree sanitizer runtimes is disabled via + // `-Z external-clangrt` + return; + } + + if matches!(crate_type, CrateType::Rlib | CrateType::Staticlib) { + return; + } + // On macOS and Windows using MSVC the runtimes are distributed as dylibs // which should be linked to both executables and dynamic libraries. // Everywhere else the runtimes are currently distributed as static // libraries which should be linked to executables only. - let needs_runtime = !sess.target.is_like_android - && match crate_type { - CrateType::Executable => true, - CrateType::Dylib | CrateType::Cdylib | CrateType::ProcMacro => { - sess.target.is_like_osx || sess.target.is_like_msvc - } - CrateType::Rlib | CrateType::Staticlib => false, - }; - - if !needs_runtime { + if matches!(crate_type, CrateType::Dylib | CrateType::Cdylib | CrateType::ProcMacro) + && !(sess.target.is_like_osx || sess.target.is_like_msvc) + { return; } diff --git a/compiler/rustc_session/src/options.rs b/compiler/rustc_session/src/options.rs index 9c03bdb2187..b0bd5e75735 100644 --- a/compiler/rustc_session/src/options.rs +++ b/compiler/rustc_session/src/options.rs @@ -1645,6 +1645,8 @@ options! { "emit the bc module with thin LTO info (default: yes)"), export_executable_symbols: bool = (false, parse_bool, [TRACKED], "export symbols from executables, as if they were dynamic libraries"), + external_clangrt: bool = (false, parse_bool, [UNTRACKED], + "rely on user specified linker commands to find clangrt"), extra_const_ub_checks: bool = (false, parse_bool, [TRACKED], "turns on more checks to detect const UB, which can be slow (default: no)"), #[rustc_lint_opt_deny_field_access("use `Session::fewer_names` instead of this field")] |
