/ docs / rfc / aleph-008-continuity / dhall / Target.dhall
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      }