use crate::os_cmd::{MiniStr, presets::cargo_build::flags::try_into_mini_arg};
#[derive(Debug, Clone)]
pub enum LinkerFlavor {
EmscriptenEmcc,
GCC,
LD,
MSVC,
WasmLD,
DarwinLLVMLLD,
GNUbinutilsLLVMLLD,
MSLinkExeLLD,
Ignore,
}
impl From<&str> for LinkerFlavor {
fn from(value: &str) -> Self {
use LinkerFlavor::*;
match value {
"em" => EmscriptenEmcc,
"gcc" => GCC,
"ld" => LD,
"msvc" => MSVC,
"wasm-ld" => WasmLD,
"ld64.lld" => DarwinLLVMLLD,
"ld.lld" => GNUbinutilsLLVMLLD,
"lld-link" => MSLinkExeLLD,
_ => Ignore,
}
}
}
impl LinkerFlavor {
pub const fn as_str(&self) -> &str {
use LinkerFlavor::*;
match self {
EmscriptenEmcc => "em",
GCC => "gcc",
LD => "ld",
MSVC => "msvc",
WasmLD => "wasm-ld",
DarwinLLVMLLD => "ld64.lld",
GNUbinutilsLLVMLLD => "ld.lld",
MSLinkExeLLD => "lld-link",
Ignore => "",
}
}
}
impl AsRef<str> for LinkerFlavor {
fn as_ref(&self) -> &str {
self.as_str()
}
}
impl From<LinkerFlavor> for Option<MiniStr> {
fn from(value: LinkerFlavor) -> Self {
try_into_mini_arg("linker-flavor", value)
}
}
impl Default for LinkerFlavor {
fn default() -> Self {
Self::Ignore
}
}