lib: Split Darwin into macOS and iOS

I noticed LLVM accepts `ios` as its own OS in platform triples; a
recent change as far as I know. I see it also accepts `macos*` for macOS
(formerly OS X). If it's now customary to distinguish iOS like so
(rather than guessing from the aarch, lets add both so our OSes are
still disjoint, and make Darwin a family instead.

But changing the config everywhere would probably be a mass rebuild, and
I'm not sure how well other software supports OSes besides "darwin", so
I'm keeping that the default name for macOS for now.
This commit is contained in:
John Ericson 2018-03-19 00:16:25 -04:00
parent 2fa2197a96
commit bbfa2f9701
2 changed files with 16 additions and 6 deletions

View file

@ -21,9 +21,11 @@ rec {
LittleEndian = { cpu = { significantByte = significantBytes.littleEndian; }; }; LittleEndian = { cpu = { significantByte = significantBytes.littleEndian; }; };
BSD = { kernel = { families = { inherit (kernelFamilies) bsd; }; }; }; BSD = { kernel = { families = { inherit (kernelFamilies) bsd; }; }; };
Darwin = { kernel = { families = { inherit (kernelFamilies) darwin; }; }; };
Unix = [ BSD Darwin Linux SunOS Hurd Cygwin ]; Unix = [ BSD Darwin Linux SunOS Hurd Cygwin ];
Darwin = { kernel = kernels.darwin; }; MacOS = { kernel = kernels.macos; };
iOS = { kernel = kernels.ios; };
Linux = { kernel = kernels.linux; }; Linux = { kernel = kernels.linux; };
SunOS = { kernel = kernels.solaris; }; SunOS = { kernel = kernels.solaris; };
FreeBSD = { kernel = kernels.freebsd; }; FreeBSD = { kernel = kernels.freebsd; };

View file

@ -134,6 +134,7 @@ rec {
kernelFamilies = setTypes types.openKernelFamily { kernelFamilies = setTypes types.openKernelFamily {
bsd = {}; bsd = {};
darwin = {};
}; };
################################################################################ ################################################################################
@ -149,7 +150,10 @@ rec {
types.kernel = enum (attrValues kernels); types.kernel = enum (attrValues kernels);
kernels = with execFormats; with kernelFamilies; setTypes types.openKernel { kernels = with execFormats; with kernelFamilies; setTypes types.openKernel {
darwin = { execFormat = macho; families = { }; }; # TODO(@Ericson2314): Don't want to mass-rebuild yet to keeping 'darwin' as
# the nnormalized name for macOS.
macos = { execFormat = macho; families = { inherit darwin; }; name = "darwin"; };
ios = { execFormat = macho; families = { inherit darwin; }; };
freebsd = { execFormat = elf; families = { inherit bsd; }; }; freebsd = { execFormat = elf; families = { inherit bsd; }; };
hurd = { execFormat = elf; families = { }; }; hurd = { execFormat = elf; families = { }; };
linux = { execFormat = elf; families = { }; }; linux = { execFormat = elf; families = { }; };
@ -159,9 +163,13 @@ rec {
solaris = { execFormat = elf; families = { }; }; solaris = { execFormat = elf; families = { }; };
windows = { execFormat = pe; families = { }; }; windows = { execFormat = pe; families = { }; };
} // { # aliases } // { # aliases
# 'darwin' is the kernel for all of them. We choose macOS by default.
darwin = kernels.macos;
# TODO(@Ericson2314): Handle these Darwin version suffixes more generally. # TODO(@Ericson2314): Handle these Darwin version suffixes more generally.
darwin10 = kernels.darwin; darwin10 = kernels.macos;
darwin14 = kernels.darwin; darwin14 = kernels.macos;
watchos = kernels.ios;
tvos = kernels.ios;
win32 = kernels.windows; win32 = kernels.windows;
}; };
@ -263,8 +271,8 @@ rec {
mkSystemFromString = s: mkSystemFromSkeleton (mkSkeletonFromList (lib.splitString "-" s)); mkSystemFromString = s: mkSystemFromSkeleton (mkSkeletonFromList (lib.splitString "-" s));
doubleFromSystem = { cpu, vendor, kernel, abi, ... }: doubleFromSystem = { cpu, vendor, kernel, abi, ... }:
if abi == abis.cygnus /**/ if abi == abis.cygnus then "${cpu.name}-cygwin"
then "${cpu.name}-cygwin" else if kernel.families ? darwin then "${cpu.name}-darwin"
else "${cpu.name}-${kernel.name}"; else "${cpu.name}-${kernel.name}";
tripleFromSystem = { cpu, vendor, kernel, abi, ... } @ sys: assert isSystem sys; let tripleFromSystem = { cpu, vendor, kernel, abi, ... } @ sys: assert isSystem sys; let