Issue error when -C link-self-contained option is used on unsupported platforms

Document supported targets for `-C link-self-contained`

Move `LinkSelfContainedDefault::True` from wasm_base to wasm32_wasi
This commit is contained in:
StackDoubleFlow 2022-11-07 22:42:07 -06:00
parent dedfb9c214
commit 0b6dce4309
No known key found for this signature in database
GPG Key ID: 201D340A82F2DBFC
6 changed files with 16 additions and 7 deletions

View File

@ -1588,6 +1588,9 @@ fn detect_self_contained_mingw(sess: &Session) -> bool {
/// We only provide such support for a very limited number of targets. /// We only provide such support for a very limited number of targets.
fn self_contained(sess: &Session, crate_type: CrateType) -> bool { fn self_contained(sess: &Session, crate_type: CrateType) -> bool {
if let Some(self_contained) = sess.opts.cg.link_self_contained { if let Some(self_contained) = sess.opts.cg.link_self_contained {
if sess.target.link_self_contained == LinkSelfContainedDefault::False {
sess.emit_err(errors::UnsupportedLinkSelfContained);
}
return self_contained; return self_contained;
} }

View File

@ -530,3 +530,7 @@ pub enum AppleSdkRootError<'a> {
pub struct ReadFileError { pub struct ReadFileError {
pub message: std::io::Error, pub message: std::io::Error,
} }
#[derive(Diagnostic)]
#[diag(codegen_ssa_unsupported_link_self_contained)]
pub struct UnsupportedLinkSelfContained;

View File

@ -184,3 +184,5 @@ codegen_ssa_unsupported_arch = unsupported arch `{$arch}` for os `{$os}`
codegen_ssa_apple_sdk_error_sdk_path = failed to get {$sdk_name} SDK path: {error} codegen_ssa_apple_sdk_error_sdk_path = failed to get {$sdk_name} SDK path: {error}
codegen_ssa_read_file = failed to read file: {message} codegen_ssa_read_file = failed to read file: {message}
codegen_ssa_unsupported_link_self_contained = option `-C link-self-contained` is not supported on this target

View File

@ -72,7 +72,8 @@
//! best we can with this target. Don't start relying on too much here unless //! best we can with this target. Don't start relying on too much here unless
//! you know what you're getting in to! //! you know what you're getting in to!
use super::{crt_objects, wasm_base, Cc, LinkerFlavor, Target}; use super::crt_objects::{self, LinkSelfContainedDefault};
use super::{wasm_base, Cc, LinkerFlavor, Target};
pub fn target() -> Target { pub fn target() -> Target {
let mut options = wasm_base::options(); let mut options = wasm_base::options();
@ -83,6 +84,9 @@ pub fn target() -> Target {
options.pre_link_objects_self_contained = crt_objects::pre_wasi_self_contained(); options.pre_link_objects_self_contained = crt_objects::pre_wasi_self_contained();
options.post_link_objects_self_contained = crt_objects::post_wasi_self_contained(); 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;
// Right now this is a bit of a workaround but we're currently saying that // 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 // the target by default has a static crt which we're taking as a signal
// for "use the bundled crt". If that's turned off then the system's crt // for "use the bundled crt". If that's turned off then the system's crt

View File

@ -1,4 +1,3 @@
use super::crt_objects::LinkSelfContainedDefault;
use super::{cvs, Cc, LinkerFlavor, PanicStrategy, RelocModel, TargetOptions, TlsModel}; use super::{cvs, Cc, LinkerFlavor, PanicStrategy, RelocModel, TargetOptions, TlsModel};
pub fn options() -> TargetOptions { pub fn options() -> TargetOptions {
@ -95,9 +94,6 @@ macro_rules! args {
pre_link_args, pre_link_args,
// FIXME: Figure out cases in which WASM needs to link with a native toolchain.
link_self_contained: LinkSelfContainedDefault::True,
// This has no effect in LLVM 8 or prior, but in LLVM 9 and later when // This has no effect in LLVM 8 or prior, but in LLVM 9 and later when
// PIC code is implemented this has quite a drastic effect if it stays // PIC code is implemented this has quite a drastic effect if it stays
// at the default, `pic`. In an effort to keep wasm binaries as minimal // at the default, `pic`. In an effort to keep wasm binaries as minimal

View File

@ -210,8 +210,8 @@ metrics.
## link-self-contained ## link-self-contained
On targets that support it this flag controls whether the linker will use libraries and objects On `windows-gnu`, `linux-musl`, and `wasi` targets, this flag controls whether the
shipped with Rust instead or those in the system. linker will use libraries and objects shipped with Rust instead or those in the system.
It takes one of the following values: It takes one of the following values:
* no value: rustc will use heuristic to disable self-contained mode if system has necessary tools. * no value: rustc will use heuristic to disable self-contained mode if system has necessary tools.