[meta] Move source generation responsibility into the meta crate itself;

This commit is contained in:
Benjamin Bouvier
2019-02-08 19:34:55 +01:00
committed by Dan Gohman
parent afa4a749c5
commit 25fdda6134
3 changed files with 102 additions and 89 deletions

View File

@@ -18,7 +18,7 @@ pub enum Isa {
impl Isa {
/// Creates isa target using name.
pub fn new(name: &str) -> Option<Self> {
pub fn from_name(name: &str) -> Option<Self> {
Isa::all()
.iter()
.cloned()
@@ -27,28 +27,20 @@ impl Isa {
}
/// Creates isa target from arch.
pub fn from_arch(arch: &str) -> Option<Isa> {
Isa::all()
.iter()
.cloned()
.filter(|isa| isa.is_arch_applicable(arch))
.next()
pub fn from_arch(arch: &str) -> Option<Self> {
match arch {
"riscv" => Some(Isa::Riscv),
"aarch64" => Some(Isa::Arm64),
x if ["x86_64", "i386", "i586", "i686"].contains(&x) => Some(Isa::X86),
x if x.starts_with("arm") || arch.starts_with("thumb") => Some(Isa::Arm32),
_ => None,
}
}
/// Returns all supported isa targets.
pub fn all() -> [Isa; 4] {
[Isa::Riscv, Isa::X86, Isa::Arm32, Isa::Arm64]
}
/// Checks if arch is applicable for the isa target.
fn is_arch_applicable(&self, arch: &str) -> bool {
match *self {
Isa::Riscv => arch == "riscv",
Isa::X86 => ["x86_64", "i386", "i586", "i686"].contains(&arch),
Isa::Arm32 => arch.starts_with("arm") || arch.starts_with("thumb"),
Isa::Arm64 => arch == "aarch64",
}
}
}
impl fmt::Display for Isa {
@@ -62,11 +54,13 @@ impl fmt::Display for Isa {
}
}
pub fn define_all(shared_settings: &SettingGroup) -> Vec<TargetIsa> {
vec![
riscv::define(shared_settings),
arm32::define(shared_settings),
arm64::define(shared_settings),
x86::define(shared_settings),
]
pub fn define(isas: &Vec<Isa>, shared_settings: &SettingGroup) -> Vec<TargetIsa> {
isas.iter()
.map(|isa| match isa {
Isa::Riscv => riscv::define(shared_settings),
Isa::X86 => x86::define(shared_settings),
Isa::Arm32 => arm32::define(shared_settings),
Isa::Arm64 => arm64::define(shared_settings),
})
.collect()
}