2017-05-24 01:04:15 +03:00
|
|
|
# These can be passed to nixpkgs as either the `localSystem` or
|
|
|
|
# `crossSystem`. They are put here for user convenience, but also used by cross
|
|
|
|
# tests and linux cross stdenv building, so handle with care!
|
2017-07-29 03:05:35 +03:00
|
|
|
{ lib }:
|
2018-11-14 08:03:31 +03:00
|
|
|
let
|
|
|
|
platforms = import ./platforms.nix { inherit lib; };
|
|
|
|
|
|
|
|
riscv = bits: {
|
|
|
|
config = "riscv${bits}-unknown-linux-gnu";
|
|
|
|
};
|
|
|
|
in
|
2017-05-24 01:04:15 +03:00
|
|
|
|
|
|
|
rec {
|
|
|
|
#
|
|
|
|
# Linux
|
|
|
|
#
|
2018-08-21 22:31:34 +03:00
|
|
|
powernv = {
|
|
|
|
config = "powerpc64le-unknown-linux-gnu";
|
|
|
|
};
|
|
|
|
musl-power = {
|
|
|
|
config = "powerpc64le-unknown-linux-musl";
|
|
|
|
};
|
2017-05-24 01:04:15 +03:00
|
|
|
|
2021-03-16 05:22:57 +03:00
|
|
|
ppc64 = {
|
|
|
|
config = "powerpc64-unknown-linux-gnu";
|
|
|
|
gcc = { abi = "elfv2"; }; # for gcc configuration
|
2021-01-30 06:23:04 +03:00
|
|
|
};
|
|
|
|
ppc64-musl = {
|
|
|
|
config = "powerpc64-unknown-linux-musl";
|
|
|
|
gcc = { abi = "elfv2"; }; # for gcc configuration
|
|
|
|
};
|
|
|
|
|
2019-08-14 00:52:01 +03:00
|
|
|
sheevaplug = {
|
2017-05-30 03:12:06 +03:00
|
|
|
config = "armv5tel-unknown-linux-gnueabi";
|
2021-01-23 04:33:55 +03:00
|
|
|
} // platforms.sheevaplug;
|
2017-05-24 01:04:15 +03:00
|
|
|
|
2019-08-14 00:52:01 +03:00
|
|
|
raspberryPi = {
|
2017-05-24 01:04:15 +03:00
|
|
|
config = "armv6l-unknown-linux-gnueabihf";
|
2021-01-23 04:33:55 +03:00
|
|
|
} // platforms.raspberrypi;
|
2017-05-24 01:04:15 +03:00
|
|
|
|
2020-11-18 05:48:08 +03:00
|
|
|
remarkable1 = {
|
|
|
|
config = "armv7l-unknown-linux-gnueabihf";
|
2021-01-23 04:33:55 +03:00
|
|
|
} // platforms.zero-gravitas;
|
2020-11-18 05:48:08 +03:00
|
|
|
|
2020-11-30 10:01:58 +03:00
|
|
|
remarkable2 = {
|
|
|
|
config = "armv7l-unknown-linux-gnueabihf";
|
2021-01-23 04:33:55 +03:00
|
|
|
} // platforms.zero-sugar;
|
2020-11-30 10:01:58 +03:00
|
|
|
|
2019-08-14 00:52:01 +03:00
|
|
|
armv7l-hf-multiplatform = {
|
2018-10-06 07:59:31 +03:00
|
|
|
config = "armv7l-unknown-linux-gnueabihf";
|
2017-05-24 01:04:15 +03:00
|
|
|
};
|
|
|
|
|
2019-08-14 00:52:01 +03:00
|
|
|
aarch64-multiplatform = {
|
2017-05-24 01:04:15 +03:00
|
|
|
config = "aarch64-unknown-linux-gnu";
|
|
|
|
};
|
|
|
|
|
2019-08-14 00:52:01 +03:00
|
|
|
armv7a-android-prebuilt = {
|
2018-05-12 00:35:56 +03:00
|
|
|
config = "armv7a-unknown-linux-androideabi";
|
2021-04-09 10:17:54 +03:00
|
|
|
rustc.config = "armv7-linux-androideabi";
|
2020-08-13 08:10:21 +03:00
|
|
|
sdkVer = "29";
|
2020-09-08 16:33:09 +03:00
|
|
|
ndkVer = "21";
|
2018-05-12 00:35:56 +03:00
|
|
|
useAndroidPrebuilt = true;
|
2021-01-23 04:33:55 +03:00
|
|
|
} // platforms.armv7a-android;
|
2018-05-12 00:35:56 +03:00
|
|
|
|
2019-08-14 00:52:01 +03:00
|
|
|
aarch64-android-prebuilt = {
|
2017-02-17 08:36:10 +03:00
|
|
|
config = "aarch64-unknown-linux-android";
|
2021-04-09 10:17:54 +03:00
|
|
|
rustc.config = "aarch64-linux-android";
|
2020-08-13 08:10:21 +03:00
|
|
|
sdkVer = "29";
|
2020-09-08 16:33:09 +03:00
|
|
|
ndkVer = "21";
|
2017-02-17 08:36:10 +03:00
|
|
|
useAndroidPrebuilt = true;
|
|
|
|
};
|
|
|
|
|
2021-05-06 07:15:34 +03:00
|
|
|
aarch64-android = {
|
|
|
|
config = "aarch64-unknown-linux-android";
|
|
|
|
sdkVer = "30";
|
|
|
|
ndkVer = "21";
|
|
|
|
libc = "bionic";
|
|
|
|
useAndroidPrebuilt = false;
|
|
|
|
useLLVM = true;
|
|
|
|
};
|
|
|
|
|
2019-08-14 00:52:01 +03:00
|
|
|
pogoplug4 = {
|
2017-12-05 22:17:00 +03:00
|
|
|
config = "armv5tel-unknown-linux-gnueabi";
|
2021-01-23 04:33:55 +03:00
|
|
|
} // platforms.pogoplug4;
|
2017-05-24 01:04:15 +03:00
|
|
|
|
2019-08-14 00:52:01 +03:00
|
|
|
ben-nanonote = {
|
2018-05-10 05:40:27 +03:00
|
|
|
config = "mipsel-unknown-linux-uclibc";
|
2021-01-23 04:33:55 +03:00
|
|
|
} // platforms.ben_nanonote;
|
2018-05-10 05:40:27 +03:00
|
|
|
|
2019-08-14 00:52:01 +03:00
|
|
|
fuloongminipc = {
|
2017-12-05 13:27:45 +03:00
|
|
|
config = "mipsel-unknown-linux-gnu";
|
2021-01-23 04:33:55 +03:00
|
|
|
} // platforms.fuloong2f_n32;
|
2017-05-24 01:04:15 +03:00
|
|
|
|
2022-03-11 07:27:46 +03:00
|
|
|
# MIPS ABI table transcribed from here: https://wiki.debian.org/Multiarch/Tuples
|
|
|
|
|
|
|
|
# can execute on 32bit chip
|
|
|
|
mips-linux-gnu = { config = "mips-linux-gnu"; } // platforms.gcc_mips32r2_o32;
|
|
|
|
mipsel-linux-gnu = { config = "mipsel-linux-gnu"; } // platforms.gcc_mips32r2_o32;
|
|
|
|
mipsisa32r6-linux-gnu = { config = "mipsisa32r6-linux-gnu"; } // platforms.gcc_mips32r6_o32;
|
|
|
|
mipsisa32r6el-linux-gnu = { config = "mipsisa32r6el-linux-gnu"; } // platforms.gcc_mips32r6_o32;
|
|
|
|
|
|
|
|
# require 64bit chip (for more registers, 64-bit floating point, 64-bit "long long") but use 32bit pointers
|
|
|
|
mips64-linux-gnuabin32 = { config = "mips64-linux-gnuabin32"; } // platforms.gcc_mips64r2_n32;
|
|
|
|
mips64el-linux-gnuabin32 = { config = "mips64el-linux-gnuabin32"; } // platforms.gcc_mips64r2_n32;
|
|
|
|
mipsisa64r6-linux-gnuabin32 = { config = "mipsisa64r6-linux-gnuabin32"; } // platforms.gcc_mips64r6_n32;
|
|
|
|
mipsisa64r6el-linux-gnuabin32 = { config = "mipsisa64r6el-linux-gnuabin32"; } // platforms.gcc_mips64r6_n32;
|
|
|
|
|
|
|
|
# 64bit pointers
|
|
|
|
mips64-linux-gnuabi64 = { config = "mips64-linux-gnuabi64"; } // platforms.gcc_mips64r2_64;
|
|
|
|
mips64el-linux-gnuabi64 = { config = "mips64el-linux-gnuabi64"; } // platforms.gcc_mips64r2_64;
|
|
|
|
mipsisa64r6-linux-gnuabi64 = { config = "mipsisa64r6-linux-gnuabi64"; } // platforms.gcc_mips64r6_64;
|
|
|
|
mipsisa64r6el-linux-gnuabi64 = { config = "mipsisa64r6el-linux-gnuabi64"; } // platforms.gcc_mips64r6_64;
|
lib/systems: add mips64el definitions
MIPS has a large space of {architecture,abi,endianness}; this commit
adds all of them to lib/systems/platforms.nix so we can be done with
it.
Currently lib/systems/inspect.nix has a single "isMips" predicate,
which is a bit ambiguous now that we will have both mips32 and mips64
support, with the latter having two ABIs. Let's add four new
predicates (isMips32, isMips64, isMips64n32, and isMips64n64) and
treat the now-ambiguous isMips as deprecated in favor of the
more-specific predicates. These predicates are used mainly for
enabling/disabling target-specific workarounds, and it is extremely
rare that a platform-specific workaround is needed, and both mips32
and mips64 need exactly the same workaround.
The separate predicates (isMips64n32 and isMips64n64) for ABI
distinctions are, unfortunately, useful. Boost's user-scheduled
threading (used by nix) does does not currently supports mips64n32,
which is a very desirable ABI on routers since they rarely have
more than 2**32 bytes of DRAM.
2022-02-21 07:32:52 +03:00
|
|
|
|
2018-02-11 23:20:14 +03:00
|
|
|
muslpi = raspberryPi // {
|
|
|
|
config = "armv6l-unknown-linux-musleabihf";
|
|
|
|
};
|
|
|
|
|
2021-01-23 04:33:55 +03:00
|
|
|
aarch64-multiplatform-musl = {
|
2018-02-11 23:20:14 +03:00
|
|
|
config = "aarch64-unknown-linux-musl";
|
|
|
|
};
|
|
|
|
|
2019-05-05 10:23:12 +03:00
|
|
|
gnu64 = { config = "x86_64-unknown-linux-gnu"; };
|
|
|
|
gnu32 = { config = "i686-unknown-linux-gnu"; };
|
|
|
|
|
2018-02-11 23:20:14 +03:00
|
|
|
musl64 = { config = "x86_64-unknown-linux-musl"; };
|
|
|
|
musl32 = { config = "i686-unknown-linux-musl"; };
|
|
|
|
|
2018-02-18 08:09:25 +03:00
|
|
|
riscv64 = riscv "64";
|
|
|
|
riscv32 = riscv "32";
|
|
|
|
|
2019-07-26 02:31:35 +03:00
|
|
|
riscv64-embedded = {
|
|
|
|
config = "riscv64-none-elf";
|
|
|
|
libc = "newlib";
|
|
|
|
};
|
|
|
|
|
|
|
|
riscv32-embedded = {
|
|
|
|
config = "riscv32-none-elf";
|
|
|
|
libc = "newlib";
|
|
|
|
};
|
|
|
|
|
2020-11-04 17:13:06 +03:00
|
|
|
mmix = {
|
|
|
|
config = "mmix-unknown-mmixware";
|
|
|
|
libc = "newlib";
|
|
|
|
};
|
|
|
|
|
2022-05-23 03:52:36 +03:00
|
|
|
rx-embedded = {
|
|
|
|
config = "rx-none-elf";
|
|
|
|
libc = "newlib";
|
|
|
|
};
|
|
|
|
|
2019-03-26 05:17:37 +03:00
|
|
|
msp430 = {
|
|
|
|
config = "msp430-elf";
|
|
|
|
libc = "newlib";
|
|
|
|
};
|
|
|
|
|
2018-10-16 00:11:20 +03:00
|
|
|
avr = {
|
2018-10-12 23:09:59 +03:00
|
|
|
config = "avr";
|
2018-10-16 00:11:20 +03:00
|
|
|
};
|
|
|
|
|
2019-11-02 18:47:38 +03:00
|
|
|
vc4 = {
|
|
|
|
config = "vc4-elf";
|
|
|
|
libc = "newlib";
|
|
|
|
};
|
|
|
|
|
2020-11-09 23:06:44 +03:00
|
|
|
or1k = {
|
|
|
|
config = "or1k-elf";
|
|
|
|
libc = "newlib";
|
|
|
|
};
|
|
|
|
|
2021-07-23 21:20:02 +03:00
|
|
|
m68k = {
|
|
|
|
config = "m68k-unknown-linux-gnu";
|
|
|
|
};
|
|
|
|
|
2021-07-23 21:20:02 +03:00
|
|
|
s390 = {
|
|
|
|
config = "s390-unknown-linux-gnu";
|
|
|
|
};
|
|
|
|
|
2021-09-07 12:10:38 +03:00
|
|
|
s390x = {
|
|
|
|
config = "s390x-unknown-linux-gnu";
|
|
|
|
};
|
|
|
|
|
2018-10-16 00:11:20 +03:00
|
|
|
arm-embedded = {
|
|
|
|
config = "arm-none-eabi";
|
|
|
|
libc = "newlib";
|
|
|
|
};
|
2018-12-03 02:47:53 +03:00
|
|
|
armhf-embedded = {
|
|
|
|
config = "arm-none-eabihf";
|
|
|
|
libc = "newlib";
|
2021-01-29 11:59:40 +03:00
|
|
|
# GCC8+ does not build without this
|
|
|
|
# (https://www.mail-archive.com/gcc-bugs@gcc.gnu.org/msg552339.html):
|
|
|
|
gcc = {
|
|
|
|
arch = "armv5t";
|
|
|
|
fpu = "vfp";
|
|
|
|
};
|
2018-12-03 02:47:53 +03:00
|
|
|
};
|
2018-10-16 00:11:20 +03:00
|
|
|
|
|
|
|
aarch64-embedded = {
|
|
|
|
config = "aarch64-none-elf";
|
|
|
|
libc = "newlib";
|
|
|
|
};
|
2019-01-30 05:01:24 +03:00
|
|
|
|
2018-11-09 17:06:31 +03:00
|
|
|
aarch64be-embedded = {
|
|
|
|
config = "aarch64_be-none-elf";
|
|
|
|
libc = "newlib";
|
2018-11-09 17:08:28 +03:00
|
|
|
};
|
2018-10-16 00:11:20 +03:00
|
|
|
|
|
|
|
ppc-embedded = {
|
|
|
|
config = "powerpc-none-eabi";
|
|
|
|
libc = "newlib";
|
2018-10-12 23:09:59 +03:00
|
|
|
};
|
2019-01-30 05:01:24 +03:00
|
|
|
|
2018-11-09 17:06:31 +03:00
|
|
|
ppcle-embedded = {
|
|
|
|
config = "powerpcle-none-eabi";
|
|
|
|
libc = "newlib";
|
|
|
|
};
|
2018-02-18 08:09:25 +03:00
|
|
|
|
2018-10-30 21:46:01 +03:00
|
|
|
i686-embedded = {
|
|
|
|
config = "i686-elf";
|
|
|
|
libc = "newlib";
|
|
|
|
};
|
|
|
|
|
|
|
|
x86_64-embedded = {
|
|
|
|
config = "x86_64-elf";
|
|
|
|
libc = "newlib";
|
|
|
|
};
|
|
|
|
|
2020-07-21 23:11:36 +03:00
|
|
|
#
|
|
|
|
# Redox
|
|
|
|
#
|
|
|
|
|
|
|
|
x86_64-unknown-redox = {
|
|
|
|
config = "x86_64-unknown-redox";
|
|
|
|
libc = "relibc";
|
|
|
|
};
|
|
|
|
|
2017-05-24 01:04:15 +03:00
|
|
|
#
|
|
|
|
# Darwin
|
|
|
|
#
|
|
|
|
|
|
|
|
iphone64 = {
|
2018-05-01 08:14:58 +03:00
|
|
|
config = "aarch64-apple-ios";
|
|
|
|
# config = "aarch64-apple-darwin14";
|
2021-01-20 07:41:39 +03:00
|
|
|
sdkVer = "14.3";
|
|
|
|
xcodeVer = "12.3";
|
2018-06-26 05:18:23 +03:00
|
|
|
xcodePlatform = "iPhoneOS";
|
2018-05-01 08:14:58 +03:00
|
|
|
useiOSPrebuilt = true;
|
2017-05-24 01:04:15 +03:00
|
|
|
};
|
|
|
|
|
|
|
|
iphone32 = {
|
2018-05-01 19:57:07 +03:00
|
|
|
config = "armv7a-apple-ios";
|
2018-05-01 08:14:58 +03:00
|
|
|
# config = "arm-apple-darwin10";
|
2021-01-20 07:41:39 +03:00
|
|
|
sdkVer = "14.3";
|
|
|
|
xcodeVer = "12.3";
|
2018-06-26 05:18:23 +03:00
|
|
|
xcodePlatform = "iPhoneOS";
|
2018-05-01 08:14:58 +03:00
|
|
|
useiOSPrebuilt = true;
|
|
|
|
};
|
|
|
|
|
|
|
|
iphone64-simulator = {
|
|
|
|
config = "x86_64-apple-ios";
|
|
|
|
# config = "x86_64-apple-darwin14";
|
2021-01-20 07:41:39 +03:00
|
|
|
sdkVer = "14.3";
|
|
|
|
xcodeVer = "12.3";
|
2018-06-26 05:18:23 +03:00
|
|
|
xcodePlatform = "iPhoneSimulator";
|
2021-04-10 12:11:16 +03:00
|
|
|
darwinPlatform = "ios-simulator";
|
2018-05-01 08:14:58 +03:00
|
|
|
useiOSPrebuilt = true;
|
|
|
|
};
|
|
|
|
|
|
|
|
iphone32-simulator = {
|
|
|
|
config = "i686-apple-ios";
|
|
|
|
# config = "i386-apple-darwin11";
|
2021-01-20 07:41:39 +03:00
|
|
|
sdkVer = "14.3";
|
|
|
|
xcodeVer = "12.3";
|
2018-06-26 05:18:23 +03:00
|
|
|
xcodePlatform = "iPhoneSimulator";
|
2021-04-10 12:11:16 +03:00
|
|
|
darwinPlatform = "ios-simulator";
|
2018-05-01 08:14:58 +03:00
|
|
|
useiOSPrebuilt = true;
|
2017-05-24 01:04:15 +03:00
|
|
|
};
|
|
|
|
|
2021-01-09 16:38:45 +03:00
|
|
|
aarch64-darwin = {
|
|
|
|
config = "aarch64-apple-darwin";
|
|
|
|
xcodePlatform = "MacOSX";
|
|
|
|
platform = {};
|
|
|
|
};
|
|
|
|
|
2021-11-10 22:37:34 +03:00
|
|
|
x86_64-darwin = {
|
|
|
|
config = "x86_64-apple-darwin";
|
|
|
|
xcodePlatform = "MacOSX";
|
|
|
|
platform = {};
|
|
|
|
};
|
|
|
|
|
2017-05-24 01:04:15 +03:00
|
|
|
#
|
|
|
|
# Windows
|
|
|
|
#
|
|
|
|
|
|
|
|
# 32 bit mingw-w64
|
|
|
|
mingw32 = {
|
2019-11-11 04:02:44 +03:00
|
|
|
config = "i686-w64-mingw32";
|
2017-05-24 01:04:15 +03:00
|
|
|
libc = "msvcrt"; # This distinguishes the mingw (non posix) toolchain
|
|
|
|
};
|
|
|
|
|
|
|
|
# 64 bit mingw-w64
|
|
|
|
mingwW64 = {
|
|
|
|
# That's the triplet they use in the mingw-w64 docs.
|
2019-11-11 04:02:44 +03:00
|
|
|
config = "x86_64-w64-mingw32";
|
2017-05-24 01:04:15 +03:00
|
|
|
libc = "msvcrt"; # This distinguishes the mingw (non posix) toolchain
|
|
|
|
};
|
2018-07-28 19:29:02 +03:00
|
|
|
|
|
|
|
# BSDs
|
|
|
|
|
2020-05-20 04:57:03 +03:00
|
|
|
x86_64-netbsd = {
|
|
|
|
config = "x86_64-unknown-netbsd";
|
|
|
|
libc = "nblibc";
|
|
|
|
};
|
|
|
|
|
2021-12-10 01:08:40 +03:00
|
|
|
# this is broken and never worked fully
|
2020-05-20 04:57:03 +03:00
|
|
|
x86_64-netbsd-llvm = {
|
2018-07-28 19:29:02 +03:00
|
|
|
config = "x86_64-unknown-netbsd";
|
|
|
|
libc = "nblibc";
|
2020-05-20 04:57:03 +03:00
|
|
|
useLLVM = true;
|
2018-07-28 19:29:02 +03:00
|
|
|
};
|
2019-01-30 05:01:24 +03:00
|
|
|
|
|
|
|
#
|
|
|
|
# WASM
|
|
|
|
#
|
|
|
|
|
|
|
|
wasi32 = {
|
|
|
|
config = "wasm32-unknown-wasi";
|
|
|
|
useLLVM = true;
|
|
|
|
};
|
|
|
|
|
2019-08-23 19:53:22 +03:00
|
|
|
# Ghcjs
|
|
|
|
ghcjs = {
|
|
|
|
config = "js-unknown-ghcjs";
|
|
|
|
};
|
2017-05-24 01:04:15 +03:00
|
|
|
}
|