mirror of https://github.com/rust-lang/rust.git
LLVM Bitcode Linker: Add as a linker known to the compiler
This commit is contained in:
parent
af42d2a4b2
commit
43f2055af5
|
@ -24,6 +24,7 @@ use rustc_span::symbol::Symbol;
|
||||||
use rustc_target::spec::crt_objects::CrtObjects;
|
use rustc_target::spec::crt_objects::CrtObjects;
|
||||||
use rustc_target::spec::LinkSelfContainedComponents;
|
use rustc_target::spec::LinkSelfContainedComponents;
|
||||||
use rustc_target::spec::LinkSelfContainedDefault;
|
use rustc_target::spec::LinkSelfContainedDefault;
|
||||||
|
use rustc_target::spec::LinkerFlavorCli;
|
||||||
use rustc_target::spec::{Cc, LinkOutputKind, LinkerFlavor, Lld, PanicStrategy};
|
use rustc_target::spec::{Cc, LinkOutputKind, LinkerFlavor, Lld, PanicStrategy};
|
||||||
use rustc_target::spec::{RelocModel, RelroLevel, SanitizerSet, SplitDebuginfo};
|
use rustc_target::spec::{RelocModel, RelroLevel, SanitizerSet, SplitDebuginfo};
|
||||||
|
|
||||||
|
@ -1350,6 +1351,7 @@ pub fn linker_and_flavor(sess: &Session) -> (PathBuf, LinkerFlavor) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
LinkerFlavor::Bpf => "bpf-linker",
|
LinkerFlavor::Bpf => "bpf-linker",
|
||||||
|
LinkerFlavor::Llbc => "llvm-bitcode-linker",
|
||||||
LinkerFlavor::Ptx => "rust-ptx-linker",
|
LinkerFlavor::Ptx => "rust-ptx-linker",
|
||||||
}),
|
}),
|
||||||
flavor,
|
flavor,
|
||||||
|
@ -1367,8 +1369,17 @@ pub fn linker_and_flavor(sess: &Session) -> (PathBuf, LinkerFlavor) {
|
||||||
|
|
||||||
// linker and linker flavor specified via command line have precedence over what the target
|
// linker and linker flavor specified via command line have precedence over what the target
|
||||||
// specification specifies
|
// specification specifies
|
||||||
let linker_flavor =
|
let linker_flavor = match sess.opts.cg.linker_flavor {
|
||||||
sess.opts.cg.linker_flavor.map(|flavor| sess.target.linker_flavor.with_cli_hints(flavor));
|
// The linker flavors that are non-target specific can be directly translated to LinkerFlavor
|
||||||
|
Some(LinkerFlavorCli::Llbc) => Some(LinkerFlavor::Llbc),
|
||||||
|
Some(LinkerFlavorCli::Ptx) => Some(LinkerFlavor::Ptx),
|
||||||
|
// The linker flavors that corresponds to targets needs logic that keeps the base LinkerFlavor
|
||||||
|
_ => sess
|
||||||
|
.opts
|
||||||
|
.cg
|
||||||
|
.linker_flavor
|
||||||
|
.map(|flavor| sess.target.linker_flavor.with_cli_hints(flavor)),
|
||||||
|
};
|
||||||
if let Some(ret) = infer_from(sess, sess.opts.cg.linker.clone(), linker_flavor) {
|
if let Some(ret) = infer_from(sess, sess.opts.cg.linker.clone(), linker_flavor) {
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
@ -2338,8 +2349,12 @@ fn add_order_independent_options(
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
if flavor == LinkerFlavor::Ptx {
|
if flavor == LinkerFlavor::Llbc {
|
||||||
// Provide the linker with fallback to internal `target-cpu`.
|
cmd.arg("--target");
|
||||||
|
cmd.arg(sess.target.llvm_target.as_ref());
|
||||||
|
cmd.arg("--target-cpu");
|
||||||
|
cmd.arg(&codegen_results.crate_info.target_cpu);
|
||||||
|
} else if flavor == LinkerFlavor::Ptx {
|
||||||
cmd.arg("--fallback-arch");
|
cmd.arg("--fallback-arch");
|
||||||
cmd.arg(&codegen_results.crate_info.target_cpu);
|
cmd.arg(&codegen_results.crate_info.target_cpu);
|
||||||
} else if flavor == LinkerFlavor::Bpf {
|
} else if flavor == LinkerFlavor::Bpf {
|
||||||
|
|
|
@ -153,6 +153,7 @@ pub fn get_linker<'a>(
|
||||||
LinkerFlavor::Msvc(..) => Box::new(MsvcLinker { cmd, sess }) as Box<dyn Linker>,
|
LinkerFlavor::Msvc(..) => Box::new(MsvcLinker { cmd, sess }) as Box<dyn Linker>,
|
||||||
LinkerFlavor::EmCc => Box::new(EmLinker { cmd, sess }) as Box<dyn Linker>,
|
LinkerFlavor::EmCc => Box::new(EmLinker { cmd, sess }) as Box<dyn Linker>,
|
||||||
LinkerFlavor::Bpf => Box::new(BpfLinker { cmd, sess }) as Box<dyn Linker>,
|
LinkerFlavor::Bpf => Box::new(BpfLinker { cmd, sess }) as Box<dyn Linker>,
|
||||||
|
LinkerFlavor::Llbc => Box::new(LlbcLinker { cmd, sess }) as Box<dyn Linker>,
|
||||||
LinkerFlavor::Ptx => Box::new(PtxLinker { cmd, sess }) as Box<dyn Linker>,
|
LinkerFlavor::Ptx => Box::new(PtxLinker { cmd, sess }) as Box<dyn Linker>,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1824,7 +1825,7 @@ impl<'a> Linker for PtxLinker<'a> {
|
||||||
}
|
}
|
||||||
|
|
||||||
Lto::No => {}
|
Lto::No => {}
|
||||||
};
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fn output_filename(&mut self, path: &Path) {
|
fn output_filename(&mut self, path: &Path) {
|
||||||
|
@ -1862,6 +1863,104 @@ impl<'a> Linker for PtxLinker<'a> {
|
||||||
fn linker_plugin_lto(&mut self) {}
|
fn linker_plugin_lto(&mut self) {}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// The `self-contained` LLVM bitcode linker
|
||||||
|
pub struct LlbcLinker<'a> {
|
||||||
|
cmd: Command,
|
||||||
|
sess: &'a Session,
|
||||||
|
}
|
||||||
|
|
||||||
|
impl<'a> Linker for LlbcLinker<'a> {
|
||||||
|
fn cmd(&mut self) -> &mut Command {
|
||||||
|
&mut self.cmd
|
||||||
|
}
|
||||||
|
|
||||||
|
fn set_output_kind(&mut self, _output_kind: LinkOutputKind, _out_filename: &Path) {}
|
||||||
|
|
||||||
|
fn link_dylib_by_name(&mut self, _name: &str, _verbatim: bool, _as_needed: bool) {
|
||||||
|
panic!("external dylibs not supported")
|
||||||
|
}
|
||||||
|
|
||||||
|
fn link_staticlib_by_name(
|
||||||
|
&mut self,
|
||||||
|
_name: &str,
|
||||||
|
_verbatim: bool,
|
||||||
|
_whole_archive: bool,
|
||||||
|
_search_paths: &SearchPaths,
|
||||||
|
) {
|
||||||
|
panic!("staticlibs not supported")
|
||||||
|
}
|
||||||
|
|
||||||
|
fn link_staticlib_by_path(&mut self, path: &Path, _whole_archive: bool) {
|
||||||
|
self.cmd.arg(path);
|
||||||
|
}
|
||||||
|
|
||||||
|
fn include_path(&mut self, path: &Path) {
|
||||||
|
self.cmd.arg("-L").arg(path);
|
||||||
|
}
|
||||||
|
|
||||||
|
fn debuginfo(&mut self, _strip: Strip, _: &[PathBuf]) {
|
||||||
|
self.cmd.arg("--debug");
|
||||||
|
}
|
||||||
|
|
||||||
|
fn add_object(&mut self, path: &Path) {
|
||||||
|
self.cmd.arg(path);
|
||||||
|
}
|
||||||
|
|
||||||
|
fn optimize(&mut self) {
|
||||||
|
match self.sess.opts.optimize {
|
||||||
|
OptLevel::No => "-O0",
|
||||||
|
OptLevel::Less => "-O1",
|
||||||
|
OptLevel::Default => "-O2",
|
||||||
|
OptLevel::Aggressive => "-O3",
|
||||||
|
OptLevel::Size => "-Os",
|
||||||
|
OptLevel::SizeMin => "-Oz",
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
fn output_filename(&mut self, path: &Path) {
|
||||||
|
self.cmd.arg("-o").arg(path);
|
||||||
|
}
|
||||||
|
|
||||||
|
fn framework_path(&mut self, _path: &Path) {
|
||||||
|
panic!("frameworks not supported")
|
||||||
|
}
|
||||||
|
|
||||||
|
fn full_relro(&mut self) {}
|
||||||
|
|
||||||
|
fn partial_relro(&mut self) {}
|
||||||
|
|
||||||
|
fn no_relro(&mut self) {}
|
||||||
|
|
||||||
|
fn gc_sections(&mut self, _keep_metadata: bool) {}
|
||||||
|
|
||||||
|
fn no_gc_sections(&mut self) {}
|
||||||
|
|
||||||
|
fn pgo_gen(&mut self) {}
|
||||||
|
|
||||||
|
fn no_crt_objects(&mut self) {}
|
||||||
|
|
||||||
|
fn no_default_libraries(&mut self) {}
|
||||||
|
|
||||||
|
fn control_flow_guard(&mut self) {}
|
||||||
|
|
||||||
|
fn ehcont_guard(&mut self) {}
|
||||||
|
|
||||||
|
fn export_symbols(&mut self, _tmpdir: &Path, _crate_type: CrateType, symbols: &[String]) {
|
||||||
|
match _crate_type {
|
||||||
|
CrateType::Cdylib => {
|
||||||
|
for sym in symbols {
|
||||||
|
self.cmd.arg("--export-symbol").arg(sym);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
_ => (),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fn subsystem(&mut self, _subsystem: &str) {}
|
||||||
|
|
||||||
|
fn linker_plugin_lto(&mut self) {}
|
||||||
|
}
|
||||||
|
|
||||||
pub struct BpfLinker<'a> {
|
pub struct BpfLinker<'a> {
|
||||||
cmd: Command,
|
cmd: Command,
|
||||||
sess: &'a Session,
|
sess: &'a Session,
|
||||||
|
|
|
@ -123,6 +123,8 @@ pub enum LinkerFlavor {
|
||||||
Bpf,
|
Bpf,
|
||||||
/// Linker tool for Nvidia PTX.
|
/// Linker tool for Nvidia PTX.
|
||||||
Ptx,
|
Ptx,
|
||||||
|
/// LLVM bitcode linker that can be used as a `self-contained` linker
|
||||||
|
Llbc,
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Linker flavors available externally through command line (`-Clinker-flavor`)
|
/// Linker flavors available externally through command line (`-Clinker-flavor`)
|
||||||
|
@ -141,6 +143,7 @@ pub enum LinkerFlavorCli {
|
||||||
EmCc,
|
EmCc,
|
||||||
Bpf,
|
Bpf,
|
||||||
Ptx,
|
Ptx,
|
||||||
|
Llbc,
|
||||||
|
|
||||||
// Legacy stable values
|
// Legacy stable values
|
||||||
Gcc,
|
Gcc,
|
||||||
|
@ -160,6 +163,7 @@ impl LinkerFlavorCli {
|
||||||
| LinkerFlavorCli::Msvc(Lld::Yes)
|
| LinkerFlavorCli::Msvc(Lld::Yes)
|
||||||
| LinkerFlavorCli::EmCc
|
| LinkerFlavorCli::EmCc
|
||||||
| LinkerFlavorCli::Bpf
|
| LinkerFlavorCli::Bpf
|
||||||
|
| LinkerFlavorCli::Llbc
|
||||||
| LinkerFlavorCli::Ptx => true,
|
| LinkerFlavorCli::Ptx => true,
|
||||||
LinkerFlavorCli::Gcc
|
LinkerFlavorCli::Gcc
|
||||||
| LinkerFlavorCli::Ld
|
| LinkerFlavorCli::Ld
|
||||||
|
@ -219,6 +223,7 @@ impl LinkerFlavor {
|
||||||
LinkerFlavorCli::Msvc(lld) => LinkerFlavor::Msvc(lld),
|
LinkerFlavorCli::Msvc(lld) => LinkerFlavor::Msvc(lld),
|
||||||
LinkerFlavorCli::EmCc => LinkerFlavor::EmCc,
|
LinkerFlavorCli::EmCc => LinkerFlavor::EmCc,
|
||||||
LinkerFlavorCli::Bpf => LinkerFlavor::Bpf,
|
LinkerFlavorCli::Bpf => LinkerFlavor::Bpf,
|
||||||
|
LinkerFlavorCli::Llbc => LinkerFlavor::Llbc,
|
||||||
LinkerFlavorCli::Ptx => LinkerFlavor::Ptx,
|
LinkerFlavorCli::Ptx => LinkerFlavor::Ptx,
|
||||||
|
|
||||||
// Below: legacy stable values
|
// Below: legacy stable values
|
||||||
|
@ -258,6 +263,7 @@ impl LinkerFlavor {
|
||||||
LinkerFlavor::Msvc(..) => LinkerFlavorCli::Msvc(Lld::No),
|
LinkerFlavor::Msvc(..) => LinkerFlavorCli::Msvc(Lld::No),
|
||||||
LinkerFlavor::EmCc => LinkerFlavorCli::Em,
|
LinkerFlavor::EmCc => LinkerFlavorCli::Em,
|
||||||
LinkerFlavor::Bpf => LinkerFlavorCli::Bpf,
|
LinkerFlavor::Bpf => LinkerFlavorCli::Bpf,
|
||||||
|
LinkerFlavor::Llbc => LinkerFlavorCli::Llbc,
|
||||||
LinkerFlavor::Ptx => LinkerFlavorCli::Ptx,
|
LinkerFlavor::Ptx => LinkerFlavorCli::Ptx,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -272,6 +278,7 @@ impl LinkerFlavor {
|
||||||
LinkerFlavor::Msvc(lld) => LinkerFlavorCli::Msvc(lld),
|
LinkerFlavor::Msvc(lld) => LinkerFlavorCli::Msvc(lld),
|
||||||
LinkerFlavor::EmCc => LinkerFlavorCli::EmCc,
|
LinkerFlavor::EmCc => LinkerFlavorCli::EmCc,
|
||||||
LinkerFlavor::Bpf => LinkerFlavorCli::Bpf,
|
LinkerFlavor::Bpf => LinkerFlavorCli::Bpf,
|
||||||
|
LinkerFlavor::Llbc => LinkerFlavorCli::Llbc,
|
||||||
LinkerFlavor::Ptx => LinkerFlavorCli::Ptx,
|
LinkerFlavor::Ptx => LinkerFlavorCli::Ptx,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -286,6 +293,7 @@ impl LinkerFlavor {
|
||||||
LinkerFlavorCli::Msvc(lld) => (Some(Cc::No), Some(lld)),
|
LinkerFlavorCli::Msvc(lld) => (Some(Cc::No), Some(lld)),
|
||||||
LinkerFlavorCli::EmCc => (Some(Cc::Yes), Some(Lld::Yes)),
|
LinkerFlavorCli::EmCc => (Some(Cc::Yes), Some(Lld::Yes)),
|
||||||
LinkerFlavorCli::Bpf | LinkerFlavorCli::Ptx => (None, None),
|
LinkerFlavorCli::Bpf | LinkerFlavorCli::Ptx => (None, None),
|
||||||
|
LinkerFlavorCli::Llbc => (None, None),
|
||||||
|
|
||||||
// Below: legacy stable values
|
// Below: legacy stable values
|
||||||
LinkerFlavorCli::Gcc => (Some(Cc::Yes), None),
|
LinkerFlavorCli::Gcc => (Some(Cc::Yes), None),
|
||||||
|
@ -340,7 +348,7 @@ impl LinkerFlavor {
|
||||||
LinkerFlavor::WasmLld(cc) => LinkerFlavor::WasmLld(cc_hint.unwrap_or(cc)),
|
LinkerFlavor::WasmLld(cc) => LinkerFlavor::WasmLld(cc_hint.unwrap_or(cc)),
|
||||||
LinkerFlavor::Unix(cc) => LinkerFlavor::Unix(cc_hint.unwrap_or(cc)),
|
LinkerFlavor::Unix(cc) => LinkerFlavor::Unix(cc_hint.unwrap_or(cc)),
|
||||||
LinkerFlavor::Msvc(lld) => LinkerFlavor::Msvc(lld_hint.unwrap_or(lld)),
|
LinkerFlavor::Msvc(lld) => LinkerFlavor::Msvc(lld_hint.unwrap_or(lld)),
|
||||||
LinkerFlavor::EmCc | LinkerFlavor::Bpf | LinkerFlavor::Ptx => self,
|
LinkerFlavor::EmCc | LinkerFlavor::Bpf | LinkerFlavor::Llbc | LinkerFlavor::Ptx => self,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -355,8 +363,8 @@ impl LinkerFlavor {
|
||||||
pub fn check_compatibility(self, cli: LinkerFlavorCli) -> Option<String> {
|
pub fn check_compatibility(self, cli: LinkerFlavorCli) -> Option<String> {
|
||||||
let compatible = |cli| {
|
let compatible = |cli| {
|
||||||
// The CLI flavor should be compatible with the target if:
|
// The CLI flavor should be compatible with the target if:
|
||||||
// 1. they are counterparts: they have the same principal flavor.
|
|
||||||
match (self, cli) {
|
match (self, cli) {
|
||||||
|
// 1. they are counterparts: they have the same principal flavor.
|
||||||
(LinkerFlavor::Gnu(..), LinkerFlavorCli::Gnu(..))
|
(LinkerFlavor::Gnu(..), LinkerFlavorCli::Gnu(..))
|
||||||
| (LinkerFlavor::Darwin(..), LinkerFlavorCli::Darwin(..))
|
| (LinkerFlavor::Darwin(..), LinkerFlavorCli::Darwin(..))
|
||||||
| (LinkerFlavor::WasmLld(..), LinkerFlavorCli::WasmLld(..))
|
| (LinkerFlavor::WasmLld(..), LinkerFlavorCli::WasmLld(..))
|
||||||
|
@ -364,11 +372,14 @@ impl LinkerFlavor {
|
||||||
| (LinkerFlavor::Msvc(..), LinkerFlavorCli::Msvc(..))
|
| (LinkerFlavor::Msvc(..), LinkerFlavorCli::Msvc(..))
|
||||||
| (LinkerFlavor::EmCc, LinkerFlavorCli::EmCc)
|
| (LinkerFlavor::EmCc, LinkerFlavorCli::EmCc)
|
||||||
| (LinkerFlavor::Bpf, LinkerFlavorCli::Bpf)
|
| (LinkerFlavor::Bpf, LinkerFlavorCli::Bpf)
|
||||||
|
| (LinkerFlavor::Llbc, LinkerFlavorCli::Llbc)
|
||||||
| (LinkerFlavor::Ptx, LinkerFlavorCli::Ptx) => return true,
|
| (LinkerFlavor::Ptx, LinkerFlavorCli::Ptx) => return true,
|
||||||
|
// 2. The linker flavor is independent of target and compatible
|
||||||
|
(LinkerFlavor::Ptx, LinkerFlavorCli::Llbc) => return true,
|
||||||
_ => {}
|
_ => {}
|
||||||
}
|
}
|
||||||
|
|
||||||
// 2. or, the flavor is legacy and survives this roundtrip.
|
// 3. or, the flavor is legacy and survives this roundtrip.
|
||||||
cli == self.with_cli_hints(cli).to_cli()
|
cli == self.with_cli_hints(cli).to_cli()
|
||||||
};
|
};
|
||||||
(!compatible(cli)).then(|| {
|
(!compatible(cli)).then(|| {
|
||||||
|
@ -387,6 +398,7 @@ impl LinkerFlavor {
|
||||||
| LinkerFlavor::Unix(..)
|
| LinkerFlavor::Unix(..)
|
||||||
| LinkerFlavor::EmCc
|
| LinkerFlavor::EmCc
|
||||||
| LinkerFlavor::Bpf
|
| LinkerFlavor::Bpf
|
||||||
|
| LinkerFlavor::Llbc
|
||||||
| LinkerFlavor::Ptx => LldFlavor::Ld,
|
| LinkerFlavor::Ptx => LldFlavor::Ld,
|
||||||
LinkerFlavor::Darwin(..) => LldFlavor::Ld64,
|
LinkerFlavor::Darwin(..) => LldFlavor::Ld64,
|
||||||
LinkerFlavor::WasmLld(..) => LldFlavor::Wasm,
|
LinkerFlavor::WasmLld(..) => LldFlavor::Wasm,
|
||||||
|
@ -412,6 +424,7 @@ impl LinkerFlavor {
|
||||||
| LinkerFlavor::Msvc(_)
|
| LinkerFlavor::Msvc(_)
|
||||||
| LinkerFlavor::Unix(_)
|
| LinkerFlavor::Unix(_)
|
||||||
| LinkerFlavor::Bpf
|
| LinkerFlavor::Bpf
|
||||||
|
| LinkerFlavor::Llbc
|
||||||
| LinkerFlavor::Ptx => false,
|
| LinkerFlavor::Ptx => false,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -431,6 +444,7 @@ impl LinkerFlavor {
|
||||||
| LinkerFlavor::Msvc(_)
|
| LinkerFlavor::Msvc(_)
|
||||||
| LinkerFlavor::Unix(_)
|
| LinkerFlavor::Unix(_)
|
||||||
| LinkerFlavor::Bpf
|
| LinkerFlavor::Bpf
|
||||||
|
| LinkerFlavor::Llbc
|
||||||
| LinkerFlavor::Ptx => false,
|
| LinkerFlavor::Ptx => false,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -480,6 +494,7 @@ linker_flavor_cli_impls! {
|
||||||
(LinkerFlavorCli::Msvc(Lld::No)) "msvc"
|
(LinkerFlavorCli::Msvc(Lld::No)) "msvc"
|
||||||
(LinkerFlavorCli::EmCc) "em-cc"
|
(LinkerFlavorCli::EmCc) "em-cc"
|
||||||
(LinkerFlavorCli::Bpf) "bpf"
|
(LinkerFlavorCli::Bpf) "bpf"
|
||||||
|
(LinkerFlavorCli::Llbc) "llbc"
|
||||||
(LinkerFlavorCli::Ptx) "ptx"
|
(LinkerFlavorCli::Ptx) "ptx"
|
||||||
|
|
||||||
// Legacy stable flavors
|
// Legacy stable flavors
|
||||||
|
@ -2205,6 +2220,7 @@ fn add_link_args_iter(
|
||||||
| LinkerFlavor::Unix(..)
|
| LinkerFlavor::Unix(..)
|
||||||
| LinkerFlavor::EmCc
|
| LinkerFlavor::EmCc
|
||||||
| LinkerFlavor::Bpf
|
| LinkerFlavor::Bpf
|
||||||
|
| LinkerFlavor::Llbc
|
||||||
| LinkerFlavor::Ptx => {}
|
| LinkerFlavor::Ptx => {}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -56,7 +56,10 @@ impl Target {
|
||||||
LinkerFlavor::Msvc(..) => {
|
LinkerFlavor::Msvc(..) => {
|
||||||
assert_matches!(flavor, LinkerFlavor::Msvc(..))
|
assert_matches!(flavor, LinkerFlavor::Msvc(..))
|
||||||
}
|
}
|
||||||
LinkerFlavor::EmCc | LinkerFlavor::Bpf | LinkerFlavor::Ptx => {
|
LinkerFlavor::EmCc
|
||||||
|
| LinkerFlavor::Bpf
|
||||||
|
| LinkerFlavor::Ptx
|
||||||
|
| LinkerFlavor::Llbc => {
|
||||||
assert_eq!(flavor, self.linker_flavor)
|
assert_eq!(flavor, self.linker_flavor)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue