79 lines
3.7 KiB
Diff
79 lines
3.7 KiB
Diff
From 461f64c60ec897d8e9caa85190ac27fe81871ebf Mon Sep 17 00:00:00 2001
|
|
From: Josh Stone <jistone@redhat.com>
|
|
Date: Thu, 28 Sep 2023 18:18:16 -0700
|
|
Subject: [PATCH 2/2] set an external library path for wasm32-wasi
|
|
|
|
---
|
|
compiler/rustc_codegen_ssa/src/back/link.rs | 9 +++++++++
|
|
compiler/rustc_target/src/spec/mod.rs | 2 ++
|
|
compiler/rustc_target/src/spec/wasm32_wasi.rs | 6 +++++-
|
|
3 files changed, 16 insertions(+), 1 deletion(-)
|
|
|
|
diff --git a/compiler/rustc_codegen_ssa/src/back/link.rs b/compiler/rustc_codegen_ssa/src/back/link.rs
|
|
index c4a0f6291e7f..9421f2fda303 100644
|
|
--- a/compiler/rustc_codegen_ssa/src/back/link.rs
|
|
+++ b/compiler/rustc_codegen_ssa/src/back/link.rs
|
|
@@ -1490,6 +1490,12 @@ fn get_object_file_path(sess: &Session, name: &str, self_contained: bool) -> Pat
|
|
return file_path;
|
|
}
|
|
}
|
|
+ if let Some(lib_path) = &sess.target.options.external_lib_path {
|
|
+ let file_path = Path::new(lib_path.as_ref()).join(name);
|
|
+ if file_path.exists() {
|
|
+ return file_path;
|
|
+ }
|
|
+ }
|
|
for search_path in fs.search_paths() {
|
|
let file_path = search_path.dir.join(name);
|
|
if file_path.exists() {
|
|
@@ -1982,6 +1988,9 @@ fn add_library_search_dirs(cmd: &mut dyn Linker, sess: &Session, self_contained:
|
|
let lib_path = sess.target_filesearch(PathKind::All).get_self_contained_lib_path();
|
|
cmd.include_path(&fix_windows_verbatim_for_gcc(&lib_path));
|
|
}
|
|
+ if let Some(lib_path) = &sess.target.options.external_lib_path {
|
|
+ cmd.include_path(Path::new(lib_path.as_ref()));
|
|
+ }
|
|
}
|
|
|
|
/// Add options making relocation sections in the produced ELF files read-only
|
|
diff --git a/compiler/rustc_target/src/spec/mod.rs b/compiler/rustc_target/src/spec/mod.rs
|
|
index 1bcb1f353159..33d9c54922cb 100644
|
|
--- a/compiler/rustc_target/src/spec/mod.rs
|
|
+++ b/compiler/rustc_target/src/spec/mod.rs
|
|
@@ -1701,6 +1701,7 @@ pub struct TargetOptions {
|
|
/// Objects to link before and after all other object code.
|
|
pub pre_link_objects: CrtObjects,
|
|
pub post_link_objects: CrtObjects,
|
|
+ pub external_lib_path: Option<StaticCow<str>>,
|
|
/// Same as `(pre|post)_link_objects`, but when self-contained linking mode is enabled.
|
|
pub pre_link_objects_self_contained: CrtObjects,
|
|
pub post_link_objects_self_contained: CrtObjects,
|
|
@@ -2175,6 +2176,7 @@ fn default() -> TargetOptions {
|
|
relro_level: RelroLevel::None,
|
|
pre_link_objects: Default::default(),
|
|
post_link_objects: Default::default(),
|
|
+ external_lib_path: None,
|
|
pre_link_objects_self_contained: Default::default(),
|
|
post_link_objects_self_contained: Default::default(),
|
|
link_self_contained: LinkSelfContainedDefault::False,
|
|
diff --git a/compiler/rustc_target/src/spec/wasm32_wasi.rs b/compiler/rustc_target/src/spec/wasm32_wasi.rs
|
|
index a0476d542e64..ad7160bf5fcd 100644
|
|
--- a/compiler/rustc_target/src/spec/wasm32_wasi.rs
|
|
+++ b/compiler/rustc_target/src/spec/wasm32_wasi.rs
|
|
@@ -85,7 +85,11 @@ pub fn target() -> Target {
|
|
options.post_link_objects_self_contained = crt_objects::post_wasi_self_contained();
|
|
|
|
// FIXME: Figure out cases in which WASM needs to link with a native toolchain.
|
|
- options.link_self_contained = LinkSelfContainedDefault::True;
|
|
+ options.link_self_contained = LinkSelfContainedDefault::False;
|
|
+
|
|
+ options.pre_link_objects = options.pre_link_objects_self_contained.clone();
|
|
+ options.post_link_objects = options.post_link_objects_self_contained.clone();
|
|
+ options.external_lib_path = Some("/usr/wasm32-wasi/lib/wasm32-wasi".into());
|
|
|
|
// Right now this is a bit of a workaround but we're currently saying that
|
|
// the target by default has a static crt which we're taking as a signal
|
|
--
|
|
2.41.0
|
|
|