1# These can be passed to nixpkgs as either the `localSystem` or
2# `crossSystem`. They are put here for user convenience, but also used by cross
3# tests and linux cross stdenv building, so handle with care!
4{ lib }:
5let
6 platforms = import ./platforms.nix { inherit lib; };
7
8 riscv = bits: {
9 config = "riscv${bits}-unknown-linux-gnu";
10 };
11in
12
13rec {
14 #
15 # Linux
16 #
17 powernv = {
18 config = "powerpc64le-unknown-linux-gnu";
19 };
20 musl-power = {
21 config = "powerpc64le-unknown-linux-musl";
22 };
23
24 ppc64 = {
25 config = "powerpc64-unknown-linux-gnuabielfv2";
26 };
27 ppc64-musl = {
28 config = "powerpc64-unknown-linux-musl";
29 gcc = { abi = "elfv2"; };
30 };
31
32 sheevaplug = {
33 config = "armv5tel-unknown-linux-gnueabi";
34 } // platforms.sheevaplug;
35
36 raspberryPi = {
37 config = "armv6l-unknown-linux-gnueabihf";
38 } // platforms.raspberrypi;
39
40 remarkable1 = {
41 config = "armv7l-unknown-linux-gnueabihf";
42 } // platforms.zero-gravitas;
43
44 remarkable2 = {
45 config = "armv7l-unknown-linux-gnueabihf";
46 } // platforms.zero-sugar;
47
48 armv7l-hf-multiplatform = {
49 config = "armv7l-unknown-linux-gnueabihf";
50 };
51
52 aarch64-multiplatform = {
53 config = "aarch64-unknown-linux-gnu";
54 };
55
56 armv7a-android-prebuilt = {
57 config = "armv7a-unknown-linux-androideabi";
58 rustc.config = "armv7-linux-androideabi";
59 sdkVer = "28";
60 ndkVer = "24";
61 useAndroidPrebuilt = true;
62 } // platforms.armv7a-android;
63
64 aarch64-android-prebuilt = {
65 config = "aarch64-unknown-linux-android";
66 rustc.config = "aarch64-linux-android";
67 sdkVer = "28";
68 ndkVer = "24";
69 useAndroidPrebuilt = true;
70 };
71
72 aarch64-android = {
73 config = "aarch64-unknown-linux-android";
74 sdkVer = "30";
75 ndkVer = "24";
76 libc = "bionic";
77 useAndroidPrebuilt = false;
78 useLLVM = true;
79 };
80
81 pogoplug4 = {
82 config = "armv5tel-unknown-linux-gnueabi";
83 } // platforms.pogoplug4;
84
85 ben-nanonote = {
86 config = "mipsel-unknown-linux-uclibc";
87 } // platforms.ben_nanonote;
88
89 fuloongminipc = {
90 config = "mipsel-unknown-linux-gnu";
91 } // platforms.fuloong2f_n32;
92
93 # can execute on 32bit chip
94 mips-linux-gnu = { config = "mips-unknown-linux-gnu"; } // platforms.gcc_mips32r2_o32;
95 mipsel-linux-gnu = { config = "mipsel-unknown-linux-gnu"; } // platforms.gcc_mips32r2_o32;
96 mipsisa32r6-linux-gnu = { config = "mipsisa32r6-unknown-linux-gnu"; } // platforms.gcc_mips32r6_o32;
97 mipsisa32r6el-linux-gnu = { config = "mipsisa32r6el-unknown-linux-gnu"; } // platforms.gcc_mips32r6_o32;
98
99 # require 64bit chip (for more registers, 64-bit floating point, 64-bit "long long") but use 32bit pointers
100 mips64-linux-gnuabin32 = { config = "mips64-unknown-linux-gnuabin32"; } // platforms.gcc_mips64r2_n32;
101 mips64el-linux-gnuabin32 = { config = "mips64el-unknown-linux-gnuabin32"; } // platforms.gcc_mips64r2_n32;
102 mipsisa64r6-linux-gnuabin32 = { config = "mipsisa64r6-unknown-linux-gnuabin32"; } // platforms.gcc_mips64r6_n32;
103 mipsisa64r6el-linux-gnuabin32 = { config = "mipsisa64r6el-unknown-linux-gnuabin32"; } // platforms.gcc_mips64r6_n32;
104
105 # 64bit pointers
106 mips64-linux-gnuabi64 = { config = "mips64-unknown-linux-gnuabi64"; } // platforms.gcc_mips64r2_64;
107 mips64el-linux-gnuabi64 = { config = "mips64el-unknown-linux-gnuabi64"; } // platforms.gcc_mips64r2_64;
108 mipsisa64r6-linux-gnuabi64 = { config = "mipsisa64r6-unknown-linux-gnuabi64"; } // platforms.gcc_mips64r6_64;
109 mipsisa64r6el-linux-gnuabi64 = { config = "mipsisa64r6el-unknown-linux-gnuabi64"; } // platforms.gcc_mips64r6_64;
110
111 muslpi = raspberryPi // {
112 config = "armv6l-unknown-linux-musleabihf";
113 };
114
115 aarch64-multiplatform-musl = {
116 config = "aarch64-unknown-linux-musl";
117 };
118
119 gnu64 = { config = "x86_64-unknown-linux-gnu"; };
120 gnu32 = { config = "i686-unknown-linux-gnu"; };
121
122 musl64 = { config = "x86_64-unknown-linux-musl"; };
123 musl32 = { config = "i686-unknown-linux-musl"; };
124
125 riscv64 = riscv "64";
126 riscv32 = riscv "32";
127
128 riscv64-embedded = {
129 config = "riscv64-none-elf";
130 libc = "newlib";
131 };
132
133 riscv32-embedded = {
134 config = "riscv32-none-elf";
135 libc = "newlib";
136 };
137
138 mmix = {
139 config = "mmix-unknown-mmixware";
140 libc = "newlib";
141 };
142
143 rx-embedded = {
144 config = "rx-none-elf";
145 libc = "newlib";
146 };
147
148 msp430 = {
149 config = "msp430-elf";
150 libc = "newlib";
151 };
152
153 avr = {
154 config = "avr";
155 };
156
157 vc4 = {
158 config = "vc4-elf";
159 libc = "newlib";
160 };
161
162 or1k = {
163 config = "or1k-elf";
164 libc = "newlib";
165 };
166
167 m68k = {
168 config = "m68k-unknown-linux-gnu";
169 };
170
171 s390 = {
172 config = "s390-unknown-linux-gnu";
173 };
174
175 s390x = {
176 config = "s390x-unknown-linux-gnu";
177 };
178
179 arm-embedded = {
180 config = "arm-none-eabi";
181 libc = "newlib";
182 };
183 armhf-embedded = {
184 config = "arm-none-eabihf";
185 libc = "newlib";
186 # GCC8+ does not build without this
187 # (https://www.mail-archive.com/gcc-bugs@gcc.gnu.org/msg552339.html):
188 gcc = {
189 arch = "armv5t";
190 fpu = "vfp";
191 };
192 };
193
194 aarch64-embedded = {
195 config = "aarch64-none-elf";
196 libc = "newlib";
197 };
198
199 aarch64be-embedded = {
200 config = "aarch64_be-none-elf";
201 libc = "newlib";
202 };
203
204 ppc-embedded = {
205 config = "powerpc-none-eabi";
206 libc = "newlib";
207 };
208
209 ppcle-embedded = {
210 config = "powerpcle-none-eabi";
211 libc = "newlib";
212 };
213
214 i686-embedded = {
215 config = "i686-elf";
216 libc = "newlib";
217 };
218
219 x86_64-embedded = {
220 config = "x86_64-elf";
221 libc = "newlib";
222 };
223
224 #
225 # Redox
226 #
227
228 x86_64-unknown-redox = {
229 config = "x86_64-unknown-redox";
230 libc = "relibc";
231 };
232
233 #
234 # Darwin
235 #
236
237 iphone64 = {
238 config = "aarch64-apple-ios";
239 # config = "aarch64-apple-darwin14";
240 sdkVer = "14.3";
241 xcodeVer = "12.3";
242 xcodePlatform = "iPhoneOS";
243 useiOSPrebuilt = true;
244 };
245
246 iphone32 = {
247 config = "armv7a-apple-ios";
248 # config = "arm-apple-darwin10";
249 sdkVer = "14.3";
250 xcodeVer = "12.3";
251 xcodePlatform = "iPhoneOS";
252 useiOSPrebuilt = true;
253 };
254
255 iphone64-simulator = {
256 config = "x86_64-apple-ios";
257 # config = "x86_64-apple-darwin14";
258 sdkVer = "14.3";
259 xcodeVer = "12.3";
260 xcodePlatform = "iPhoneSimulator";
261 darwinPlatform = "ios-simulator";
262 useiOSPrebuilt = true;
263 };
264
265 iphone32-simulator = {
266 config = "i686-apple-ios";
267 # config = "i386-apple-darwin11";
268 sdkVer = "14.3";
269 xcodeVer = "12.3";
270 xcodePlatform = "iPhoneSimulator";
271 darwinPlatform = "ios-simulator";
272 useiOSPrebuilt = true;
273 };
274
275 aarch64-darwin = {
276 config = "aarch64-apple-darwin";
277 xcodePlatform = "MacOSX";
278 platform = {};
279 };
280
281 x86_64-darwin = {
282 config = "x86_64-apple-darwin";
283 xcodePlatform = "MacOSX";
284 platform = {};
285 };
286
287 #
288 # Windows
289 #
290
291 # 32 bit mingw-w64
292 mingw32 = {
293 config = "i686-w64-mingw32";
294 libc = "msvcrt"; # This distinguishes the mingw (non posix) toolchain
295 };
296
297 # 64 bit mingw-w64
298 mingwW64 = {
299 # That's the triplet they use in the mingw-w64 docs.
300 config = "x86_64-w64-mingw32";
301 libc = "msvcrt"; # This distinguishes the mingw (non posix) toolchain
302 };
303
304 # BSDs
305
306 x86_64-freebsd = {
307 config = "x86_64-unknown-freebsd13";
308 useLLVM = true;
309 };
310
311 x86_64-netbsd = {
312 config = "x86_64-unknown-netbsd";
313 };
314
315 # this is broken and never worked fully
316 x86_64-netbsd-llvm = {
317 config = "x86_64-unknown-netbsd";
318 useLLVM = true;
319 };
320
321 #
322 # WASM
323 #
324
325 wasi32 = {
326 config = "wasm32-unknown-wasi";
327 useLLVM = true;
328 };
329
330 # Ghcjs
331 ghcjs = {
332 config = "js-unknown-ghcjs";
333 };
334}