summaryrefslogtreecommitdiffstats
path: root/lib
diff options
context:
space:
mode:
authorJohn Ericson <git@JohnEricson.me>2022-11-13 21:35:17 -0500
committerGitHub <noreply@github.com>2022-11-13 21:35:17 -0500
commitcd27a5b4361e496fafa8a2b31ab0795dfd9e23ed (patch)
tree1c6da00b8fcfa36dc59f5c3a3abb3930a594406a /lib
parent92ad187a934f82e5a38e7959bd22104ee10fd73f (diff)
parent0afe9d1f70434c02b1efb84629b75385a57936cf (diff)
Merge pull request #82131 from Ericson2314/bsd-cross
FreeBSD packages: Init at 13.1
Diffstat (limited to 'lib')
-rw-r--r--lib/systems/default.nix3
-rw-r--r--lib/systems/doubles.nix2
-rw-r--r--lib/systems/examples.nix7
-rw-r--r--lib/systems/inspect.nix2
-rw-r--r--lib/systems/parse.nix15
-rw-r--r--lib/tests/systems.nix6
6 files changed, 24 insertions, 11 deletions
diff --git a/lib/systems/default.nix b/lib/systems/default.nix
index 4af3d612f81b..ca5186ca4768 100644
--- a/lib/systems/default.nix
+++ b/lib/systems/default.nix
@@ -47,9 +47,10 @@ rec {
else if final.isUClibc then "uclibc"
else if final.isAndroid then "bionic"
else if final.isLinux /* default */ then "glibc"
+ else if final.isFreeBSD then "fblibc"
+ else if final.isNetBSD then "nblibc"
else if final.isAvr then "avrlibc"
else if final.isNone then "newlib"
- else if final.isNetBSD then "nblibc"
# TODO(@Ericson2314) think more about other operating systems
else "native/impure";
# Choose what linker we wish to use by default. Someday we might also
diff --git a/lib/systems/doubles.nix b/lib/systems/doubles.nix
index 709b67607f7b..23a44d02e85e 100644
--- a/lib/systems/doubles.nix
+++ b/lib/systems/doubles.nix
@@ -13,7 +13,7 @@ let
"x86_64-darwin" "i686-darwin" "aarch64-darwin" "armv7a-darwin"
# FreeBSD
- "i686-freebsd" "x86_64-freebsd"
+ "i686-freebsd13" "x86_64-freebsd13"
# Genode
"aarch64-genode" "i686-genode" "x86_64-genode"
diff --git a/lib/systems/examples.nix b/lib/systems/examples.nix
index 0d9f67037764..de5adad3ca52 100644
--- a/lib/systems/examples.nix
+++ b/lib/systems/examples.nix
@@ -303,15 +303,18 @@ rec {
# BSDs
+ x86_64-freebsd = {
+ config = "x86_64-unknown-freebsd13";
+ useLLVM = true;
+ };
+
x86_64-netbsd = {
config = "x86_64-unknown-netbsd";
- libc = "nblibc";
};
# this is broken and never worked fully
x86_64-netbsd-llvm = {
config = "x86_64-unknown-netbsd";
- libc = "nblibc";
useLLVM = true;
};
diff --git a/lib/systems/inspect.nix b/lib/systems/inspect.nix
index ee213438e048..4e0bb8e672e9 100644
--- a/lib/systems/inspect.nix
+++ b/lib/systems/inspect.nix
@@ -59,7 +59,7 @@ rec {
isiOS = { kernel = kernels.ios; };
isLinux = { kernel = kernels.linux; };
isSunOS = { kernel = kernels.solaris; };
- isFreeBSD = { kernel = kernels.freebsd; };
+ isFreeBSD = { kernel = { name = "freebsd"; }; };
isNetBSD = { kernel = kernels.netbsd; };
isOpenBSD = { kernel = kernels.openbsd; };
isWindows = { kernel = kernels.windows; };
diff --git a/lib/systems/parse.nix b/lib/systems/parse.nix
index ac450534fe1e..d8ba251503a6 100644
--- a/lib/systems/parse.nix
+++ b/lib/systems/parse.nix
@@ -290,7 +290,11 @@ rec {
# the normalized name for macOS.
macos = { execFormat = macho; families = { inherit darwin; }; name = "darwin"; };
ios = { execFormat = macho; families = { inherit darwin; }; };
- freebsd = { execFormat = elf; families = { inherit bsd; }; };
+ # A tricky thing about FreeBSD is that there is no stable ABI across
+ # versions. That means that putting in the version as part of the
+ # config string is paramount.
+ freebsd12 = { execFormat = elf; families = { inherit bsd; }; name = "freebsd"; version = 12; };
+ freebsd13 = { execFormat = elf; families = { inherit bsd; }; name = "freebsd"; version = 13; };
linux = { execFormat = elf; families = { }; };
netbsd = { execFormat = elf; families = { inherit bsd; }; };
none = { execFormat = unknown; families = { }; };
@@ -431,6 +435,8 @@ rec {
then { cpu = elemAt l 0; vendor = elemAt l 1; kernel = "redox"; }
else if (elemAt l 2 == "mmixware")
then { cpu = elemAt l 0; vendor = elemAt l 1; kernel = "mmixware"; }
+ else if hasPrefix "freebsd" (elemAt l 2)
+ then { cpu = elemAt l 0; vendor = elemAt l 1; kernel = elemAt l 2; }
else if hasPrefix "netbsd" (elemAt l 2)
then { cpu = elemAt l 0; vendor = elemAt l 1; kernel = elemAt l 2; }
else if (elem (elemAt l 2) ["eabi" "eabihf" "elf"])
@@ -485,10 +491,13 @@ rec {
mkSystemFromString = s: mkSystemFromSkeleton (mkSkeletonFromList (lib.splitString "-" s));
+ kernelName = kernel:
+ kernel.name + toString (kernel.version or "");
+
doubleFromSystem = { cpu, kernel, abi, ... }:
/**/ if abi == abis.cygnus then "${cpu.name}-cygwin"
else if kernel.families ? darwin then "${cpu.name}-darwin"
- else "${cpu.name}-${kernel.name}";
+ else "${cpu.name}-${kernelName kernel}";
tripleFromSystem = { cpu, vendor, kernel, abi, ... } @ sys: assert isSystem sys; let
optExecFormat =
@@ -496,7 +505,7 @@ rec {
gnuNetBSDDefaultExecFormat cpu != kernel.execFormat)
kernel.execFormat.name;
optAbi = lib.optionalString (abi != abis.unknown) "-${abi.name}";
- in "${cpu.name}-${vendor.name}-${kernel.name}${optExecFormat}${optAbi}";
+ in "${cpu.name}-${vendor.name}-${kernelName kernel}${optExecFormat}${optAbi}";
################################################################################
diff --git a/lib/tests/systems.nix b/lib/tests/systems.nix
index 4175dc68841e..27c5ff565ca0 100644
--- a/lib/tests/systems.nix
+++ b/lib/tests/systems.nix
@@ -16,17 +16,17 @@ with lib.systems.doubles; lib.runTests {
testall = mseteq all (linux ++ darwin ++ freebsd ++ openbsd ++ netbsd ++ illumos ++ wasi ++ windows ++ embedded ++ mmix ++ js ++ genode ++ redox);
testarm = mseteq arm [ "armv5tel-linux" "armv6l-linux" "armv6l-netbsd" "armv6l-none" "armv7a-linux" "armv7a-netbsd" "armv7l-linux" "armv7l-netbsd" "arm-none" "armv7a-darwin" ];
- testi686 = mseteq i686 [ "i686-linux" "i686-freebsd" "i686-genode" "i686-netbsd" "i686-openbsd" "i686-cygwin" "i686-windows" "i686-none" "i686-darwin" ];
+ testi686 = mseteq i686 [ "i686-linux" "i686-freebsd13" "i686-genode" "i686-netbsd" "i686-openbsd" "i686-cygwin" "i686-windows" "i686-none" "i686-darwin" ];
testmips = mseteq mips [ "mips64el-linux" "mipsel-linux" "mipsel-netbsd" ];
testmmix = mseteq mmix [ "mmix-mmixware" ];
testriscv = mseteq riscv [ "riscv32-linux" "riscv64-linux" "riscv32-netbsd" "riscv64-netbsd" "riscv32-none" "riscv64-none" ];
testriscv32 = mseteq riscv32 [ "riscv32-linux" "riscv32-netbsd" "riscv32-none" ];
testriscv64 = mseteq riscv64 [ "riscv64-linux" "riscv64-netbsd" "riscv64-none" ];
- testx86_64 = mseteq x86_64 [ "x86_64-linux" "x86_64-darwin" "x86_64-freebsd" "x86_64-genode" "x86_64-redox" "x86_64-openbsd" "x86_64-netbsd" "x86_64-cygwin" "x86_64-solaris" "x86_64-windows" "x86_64-none" ];
+ testx86_64 = mseteq x86_64 [ "x86_64-linux" "x86_64-darwin" "x86_64-freebsd13" "x86_64-genode" "x86_64-redox" "x86_64-openbsd" "x86_64-netbsd" "x86_64-cygwin" "x86_64-solaris" "x86_64-windows" "x86_64-none" ];
testcygwin = mseteq cygwin [ "i686-cygwin" "x86_64-cygwin" ];
testdarwin = mseteq darwin [ "x86_64-darwin" "i686-darwin" "aarch64-darwin" "armv7a-darwin" ];
- testfreebsd = mseteq freebsd [ "i686-freebsd" "x86_64-freebsd" ];
+ testfreebsd = mseteq freebsd [ "i686-freebsd13" "x86_64-freebsd13" ];
testgenode = mseteq genode [ "aarch64-genode" "i686-genode" "x86_64-genode" ];
testredox = mseteq redox [ "x86_64-redox" ];
testgnu = mseteq gnu (linux /* ++ kfreebsd ++ ... */);