cup_cli/config/languages/
mod.rs1mod c;
2mod cuda;
3mod cxx;
4mod hip;
5mod objc;
6mod objcxx;
7
8use std::path::Path;
9
10pub use c::CStandard;
11pub use cuda::CUDAStandard;
12pub use cxx::CXXStandard;
13pub use hip::HIPStandard;
14pub use objc::OBJCStandard;
15pub use objcxx::OBJCXXStandard;
16
17use crate::config::Shelling;
18
19#[derive(Debug, Clone, Default, serde::Serialize, serde::Deserialize)]
20pub struct LanguageConfig {
21 pub c: Option<CStandard>,
22 pub cxx: Option<CXXStandard>,
23 pub csharp: Option<String>,
24 pub cuda: Option<CUDAStandard>,
25 pub objc: Option<OBJCStandard>,
26 pub objcxx: Option<OBJCXXStandard>,
27 pub fortran: Option<String>,
28 pub hip: Option<HIPStandard>,
29 pub ispc: Option<String>,
30 pub swift: Option<String>,
31 pub asm: Option<String>,
32 pub asm_nasm: Option<String>,
33 pub asm_marmasm: Option<String>,
34 pub asm_masm: Option<String>,
35 pub asm_att: Option<String>,
36}
37
38impl<P: AsRef<Path>> Shelling<Language, P> for LanguageConfig {
39 fn shelling(self, _base: P) -> Language {
40 Language {
41 c: self.c.unwrap_or_default(),
42 cxx: self.cxx.unwrap_or_default(),
43 csharp: self.csharp.is_some(),
44 cuda: self.cuda,
45 objc: self.objc,
46 objcxx: self.objcxx,
47 fortran: self.fortran.is_some(),
48 hip: self.hip,
49 ispc: self.ispc.is_some(),
50 swift: self.swift.is_some(),
51 asm: self.asm.is_some(),
52 asm_nasm: self.asm_nasm.is_some(),
53 asm_marmasm: self.asm_marmasm.is_some(),
54 asm_masm: self.asm_masm.is_some(),
55 asm_att: self.asm_att.is_some(),
56 }
57 }
58}
59
60#[derive(Debug, Clone)]
61pub struct Language {
62 pub c: CStandard,
63 pub cxx: CXXStandard,
64 pub cuda: Option<CUDAStandard>,
65 pub objc: Option<OBJCStandard>,
66 pub objcxx: Option<OBJCXXStandard>,
67 pub hip: Option<HIPStandard>,
68 pub csharp: bool,
69 pub fortran: bool,
70 pub ispc: bool,
71 pub swift: bool,
72 pub asm: bool,
73 pub asm_nasm: bool,
74 pub asm_marmasm: bool,
75 pub asm_masm: bool,
76 pub asm_att: bool,
77}