Target.dhall
1 --| Target Triple Types 2 --| 3 --| Real triples, real architectures. No strings. 4 5 let Arch = 6 < x86_64 7 | aarch64 8 | wasm32 9 | riscv64 10 > 11 12 let OS = 13 < linux 14 | darwin 15 | wasi 16 | none 17 > 18 19 let ABI = 20 < gnu 21 | musl 22 | eabi 23 | unknown 24 > 25 26 let Cpu = 27 < generic 28 | native 29 -- x86_64 30 | znver3 -- AMD Zen 3 31 | znver4 -- AMD Zen 4 32 | skylake 33 | icelake_server 34 | sapphirerapids 35 -- aarch64 36 | cortex_a78ae -- Jetson Orin 37 | neoverse_n1 -- Graviton 2 38 | neoverse_v1 -- Graviton 3 39 | apple_m1 40 | apple_m2 41 | apple_m3 42 > 43 44 let Triple = 45 { arch : Arch 46 , os : OS 47 , abi : ABI 48 , cpu : Cpu 49 } 50 51 let tripleToString 52 : Triple -> Text 53 = \(t : Triple) -> 54 let archStr = 55 merge 56 { x86_64 = "x86_64" 57 , aarch64 = "aarch64" 58 , wasm32 = "wasm32" 59 , riscv64 = "riscv64" 60 } 61 t.arch 62 63 let osStr = 64 merge 65 { linux = "unknown-linux" 66 , darwin = "apple-darwin" 67 , wasi = "wasi" 68 , none = "unknown-none" 69 } 70 t.os 71 72 let abiStr = 73 merge 74 { gnu = "gnu" 75 , musl = "musl" 76 , eabi = "eabi" 77 , unknown = "" 78 } 79 t.abi 80 81 in "${archStr}-${osStr}${if abiStr == "" then "" else "-${abiStr}"}" 82 83 -- Common targets 84 let x86_64_linux = 85 { arch = Arch.x86_64 86 , os = OS.linux 87 , abi = ABI.gnu 88 , cpu = Cpu.generic 89 } 90 91 let aarch64_linux = 92 { arch = Arch.aarch64 93 , os = OS.linux 94 , abi = ABI.gnu 95 , cpu = Cpu.generic 96 } 97 98 let wasm32_wasi = 99 { arch = Arch.wasm32 100 , os = OS.wasi 101 , abi = ABI.unknown 102 , cpu = Cpu.generic 103 } 104 105 let orin = 106 { arch = Arch.aarch64 107 , os = OS.linux 108 , abi = ABI.gnu 109 , cpu = Cpu.cortex_a78ae 110 } 111 112 in { Arch 113 , OS 114 , ABI 115 , Cpu 116 , Triple 117 , tripleToString 118 , x86_64_linux 119 , aarch64_linux 120 , wasm32_wasi 121 , orin 122 }