From bbfa2f97014de8aa928485a07b722d792b09238f Mon Sep 17 00:00:00 2001 From: John Ericson Date: Mon, 19 Mar 2018 00:16:25 -0400 Subject: [PATCH] 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. --- lib/systems/inspect.nix | 4 +++- lib/systems/parse.nix | 18 +++++++++++++----- 2 files changed, 16 insertions(+), 6 deletions(-) diff --git a/lib/systems/inspect.nix b/lib/systems/inspect.nix index ab220af46e3..4cdd2629547 100644 --- a/lib/systems/inspect.nix +++ b/lib/systems/inspect.nix @@ -21,9 +21,11 @@ rec { LittleEndian = { cpu = { significantByte = significantBytes.littleEndian; }; }; BSD = { kernel = { families = { inherit (kernelFamilies) bsd; }; }; }; + Darwin = { kernel = { families = { inherit (kernelFamilies) darwin; }; }; }; Unix = [ BSD Darwin Linux SunOS Hurd Cygwin ]; - Darwin = { kernel = kernels.darwin; }; + MacOS = { kernel = kernels.macos; }; + iOS = { kernel = kernels.ios; }; Linux = { kernel = kernels.linux; }; SunOS = { kernel = kernels.solaris; }; FreeBSD = { kernel = kernels.freebsd; }; diff --git a/lib/systems/parse.nix b/lib/systems/parse.nix index 03d052f5f19..641a7f5d758 100644 --- a/lib/systems/parse.nix +++ b/lib/systems/parse.nix @@ -134,6 +134,7 @@ rec { kernelFamilies = setTypes types.openKernelFamily { bsd = {}; + darwin = {}; }; ################################################################################ @@ -149,7 +150,10 @@ rec { types.kernel = enum (attrValues kernels); 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; }; }; hurd = { execFormat = elf; families = { }; }; linux = { execFormat = elf; families = { }; }; @@ -159,9 +163,13 @@ rec { solaris = { execFormat = elf; families = { }; }; windows = { execFormat = pe; families = { }; }; } // { # 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. - darwin10 = kernels.darwin; - darwin14 = kernels.darwin; + darwin10 = kernels.macos; + darwin14 = kernels.macos; + watchos = kernels.ios; + tvos = kernels.ios; win32 = kernels.windows; }; @@ -263,8 +271,8 @@ rec { mkSystemFromString = s: mkSystemFromSkeleton (mkSkeletonFromList (lib.splitString "-" s)); doubleFromSystem = { cpu, vendor, kernel, abi, ... }: - if abi == abis.cygnus - then "${cpu.name}-cygwin" + /**/ if abi == abis.cygnus then "${cpu.name}-cygwin" + else if kernel.families ? darwin then "${cpu.name}-darwin" else "${cpu.name}-${kernel.name}"; tripleFromSystem = { cpu, vendor, kernel, abi, ... } @ sys: assert isSystem sys; let