Skip to main content

lasm/
target.rs

1use target_lexicon::{Architecture, OperatingSystem, Triple};
2
3/// Target architecture and platform for LASM compilation.
4/// Currently only Native is supported
5#[derive(Clone, Debug, PartialEq, Eq, Hash)]
6pub enum Target {
7    /// Native, your current architecture and platform. This is the default target
8    Native,
9    /// Unimplemented
10    X86_64,
11    /// Unimplemented
12    AArch64,
13}
14
15impl Target {
16    /// Internal helper to convert Target to a target_lexicon Triple, used for code generation and optimization.
17    pub fn to_triple(&self) -> Triple {
18        match self {
19            Target::Native => Triple::host(),
20            Target::X86_64 => Triple {
21                architecture: Architecture::X86_64,
22                vendor: target_lexicon::Vendor::Unknown,
23                operating_system: OperatingSystem::Linux,
24                environment: target_lexicon::Environment::Unknown,
25                binary_format: target_lexicon::BinaryFormat::Elf,
26            },
27            Target::AArch64 => Triple {
28                architecture: Architecture::Aarch64(target_lexicon::Aarch64Architecture::Aarch64),
29                vendor: target_lexicon::Vendor::Unknown,
30                operating_system: OperatingSystem::Linux,
31                environment: target_lexicon::Environment::Unknown,
32                binary_format: target_lexicon::BinaryFormat::Elf,
33            },
34        }
35    }
36}
37
38impl Default for Target {
39    fn default() -> Self {
40        Target::Native
41    }
42}