From 7da313e10a2b73b05f27a2f6bfeafa1c1d37ce8b Mon Sep 17 00:00:00 2001 From: toonn Date: Tue, 13 Apr 2021 20:54:01 +0200 Subject: [PATCH 1/7] bootstrap-tools: Fix xnu python3 patch This patch only affects the xnu included in the bootstrap-tools to avoid a stdenv rebuild. --- pkgs/stdenv/darwin/fixed-xnu-python3.patch | 41 +++++++++++++++++++++ pkgs/stdenv/darwin/make-bootstrap-tools.nix | 12 ++++-- 2 files changed, 50 insertions(+), 3 deletions(-) create mode 100644 pkgs/stdenv/darwin/fixed-xnu-python3.patch diff --git a/pkgs/stdenv/darwin/fixed-xnu-python3.patch b/pkgs/stdenv/darwin/fixed-xnu-python3.patch new file mode 100644 index 000000000000..9f29376187f4 --- /dev/null +++ b/pkgs/stdenv/darwin/fixed-xnu-python3.patch @@ -0,0 +1,41 @@ +diff --git a/bsd/kern/makekdebugevents.py b/bsd/kern/makekdebugevents.py +index 73b2db4..d354ba0 100755 +--- a/bsd/kern/makekdebugevents.py ++++ b/bsd/kern/makekdebugevents.py +@@ -5,7 +5,7 @@ + # named kd_events[] or these mappings. + # Required to generate a header file used by DEVELOPMENT and DEBUG kernels. + # +- ++ + import sys + import re + +@@ -21,18 +21,18 @@ code_table = [] + # scan file to generate internal table + with open(trace_code_file, 'rt') as codes: + for line in codes: +- m = id_name_pattern.match(line) +- if m: ++ m = id_name_pattern.match(line) ++ if m: + code_table += [(int(m.group(1),base=16), m.group(2))] + + # emit typedef: +-print "typedef struct {" +-print " uint32_t id;" +-print " const char *name;" +-print "} kd_event_t;" ++print("typedef struct {") ++print(" uint32_t id;") ++print(" const char *name;") ++print("} kd_event_t;") + # emit structure declaration and sorted initialization: +-print "kd_event_t kd_events[] = {" ++print("kd_event_t kd_events[] = {") + for mapping in sorted(code_table, key=lambda x: x[0]): +- print " {0x%x, \"%s\"}," % mapping +-print "};" ++ print(" {0x%x, \"%s\"}," % mapping) ++print("};") + diff --git a/pkgs/stdenv/darwin/make-bootstrap-tools.nix b/pkgs/stdenv/darwin/make-bootstrap-tools.nix index 3af444a2e52c..e8a2dd640f0a 100644 --- a/pkgs/stdenv/darwin/make-bootstrap-tools.nix +++ b/pkgs/stdenv/darwin/make-bootstrap-tools.nix @@ -26,6 +26,12 @@ in rec { # Avoid messing with libkrb5 and libnghttp2. curl_ = curlMinimal.override (args: { gssSupport = false; http2Support = false; }); + # Avoid stdenv rebuild. + Libsystem_ = darwin.Libsystem.override (args: + { xnu = darwin.xnu.overrideAttrs (oldAttrs: + { patches = [ ./fixed-xnu-python3.patch ]; }); + }); + build = stdenv.mkDerivation { name = "stdenv-bootstrap-tools"; @@ -37,12 +43,12 @@ in rec { ${lib.optionalString stdenv.targetPlatform.isx86_64 '' # Copy libSystem's .o files for various low-level boot stuff. - cp -d ${darwin.Libsystem}/lib/*.o $out/lib + cp -d ${Libsystem_}/lib/*.o $out/lib # Resolv is actually a link to another package, so let's copy it properly - cp -L ${darwin.Libsystem}/lib/libresolv.9.dylib $out/lib + cp -L ${Libsystem_}/lib/libresolv.9.dylib $out/lib - cp -rL ${darwin.Libsystem}/include $out + cp -rL ${Libsystem_}/include $out chmod -R u+w $out/include cp -rL ${darwin.ICU}/include* $out/include cp -rL ${libiconv}/include/* $out/include From 3b8782a80652c02d060b91cb1001ccb8dfeb9cd8 Mon Sep 17 00:00:00 2001 From: toonn Date: Mon, 19 Apr 2021 20:44:10 +0200 Subject: [PATCH 2/7] bootstrap-tools: Add bootstrapFiles argument I was having a hard time testing new bootstrapFiles because `make-bootstrap-tools.nix` imports `pkgspath` but does not pass anything but the current system. This is merely for convenience and I'm not entirely certain it's a sensible thing to do, maybe generating new bootstrapFiles while overriding the current bootstrapFiles isn't something you're supposed to do? --- pkgs/stdenv/darwin/make-bootstrap-tools.nix | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) diff --git a/pkgs/stdenv/darwin/make-bootstrap-tools.nix b/pkgs/stdenv/darwin/make-bootstrap-tools.nix index e8a2dd640f0a..1889863ee744 100644 --- a/pkgs/stdenv/darwin/make-bootstrap-tools.nix +++ b/pkgs/stdenv/darwin/make-bootstrap-tools.nix @@ -1,10 +1,17 @@ -{ pkgspath ? ../../.., test-pkgspath ? pkgspath, system ? builtins.currentSystem, crossSystem ? null }: +{ pkgspath ? ../../.., test-pkgspath ? pkgspath +, system ? builtins.currentSystem, crossSystem ? null, bootstrapFiles ? null +}: -let - pkgs = import pkgspath ({ inherit system; } // (if (crossSystem != null) then { inherit crossSystem; } else {})); -in - -with pkgs; +let cross = if crossSystem != null + then { inherit crossSystem; } + else {}; + custom-bootstrap = if bootstrapFiles != null + then { stdenvStages = args: + let args' = args // { bootstrapFiles = bootstrapFiles; }; + in (import "${pkgspath}/pkgs/stdenv/darwin" args').stagesDarwin; + } + else {}; +in with import pkgspath ({ inherit system; } // cross // custom-bootstrap); let llvmPackageSet = if stdenv.hostPlatform.isAarch64 then "llvmPackages_11" else "llvmPackages_7"; From 4a2698221baa64754258e8a24706b4c1aeadf59a Mon Sep 17 00:00:00 2001 From: toonn Date: Tue, 13 Apr 2021 19:22:29 +0200 Subject: [PATCH 3/7] bootstrap-tools: Update to LLVM 11 --- pkgs/stdenv/darwin/make-bootstrap-tools.nix | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/pkgs/stdenv/darwin/make-bootstrap-tools.nix b/pkgs/stdenv/darwin/make-bootstrap-tools.nix index 1889863ee744..6af3315dc3e4 100644 --- a/pkgs/stdenv/darwin/make-bootstrap-tools.nix +++ b/pkgs/stdenv/darwin/make-bootstrap-tools.nix @@ -14,8 +14,7 @@ let cross = if crossSystem != null in with import pkgspath ({ inherit system; } // cross // custom-bootstrap); let - llvmPackageSet = if stdenv.hostPlatform.isAarch64 then "llvmPackages_11" else "llvmPackages_7"; - llvmPackages = pkgs."${llvmPackageSet}"; + llvmPackages = llvmPackages_11; storePrefixLen = builtins.stringLength builtins.storeDir; in rec { coreutils_ = coreutils.override (args: { From d259fcc3e25e33f6fa0bdf3a943730a80c29fe55 Mon Sep 17 00:00:00 2001 From: toonn Date: Mon, 19 Apr 2021 16:54:50 +0200 Subject: [PATCH 4/7] bootstrap-tools: Include libclang-cpp.dylib Credits to @LnL7, this is based on commit ae68f1c447d775e64d6e16a33f2affe591c419bf from PR #85151. --- pkgs/stdenv/darwin/make-bootstrap-tools.nix | 1 + 1 file changed, 1 insertion(+) diff --git a/pkgs/stdenv/darwin/make-bootstrap-tools.nix b/pkgs/stdenv/darwin/make-bootstrap-tools.nix index 6af3315dc3e4..7abce18ac1ba 100644 --- a/pkgs/stdenv/darwin/make-bootstrap-tools.nix +++ b/pkgs/stdenv/darwin/make-bootstrap-tools.nix @@ -99,6 +99,7 @@ in rec { cp -d ${llvmPackages.clang-unwrapped}/bin/clang* $out/bin cp -rd ${llvmPackages.clang-unwrapped.lib}/lib/* $out/lib + cp -d ${llvmPackages.libclang}/lib/libclang-cpp.dylib $out/lib cp -d ${llvmPackages.libcxx}/lib/libc++*.dylib $out/lib cp -d ${llvmPackages.libcxxabi}/lib/libc++abi*.dylib $out/lib cp -d ${llvmPackages.compiler-rt}/lib/darwin/libclang_rt* $out/lib/darwin From fa49e70c1b441657eb5d7c5d78777fa4db3764dd Mon Sep 17 00:00:00 2001 From: toonn Date: Mon, 19 Apr 2021 17:01:02 +0200 Subject: [PATCH 5/7] bootstrap-tools: Include libclang-cpp.11.1.dylib too We need to include the library with the version suffix because `libclang-cpp.dylib` is just a symlink. --- pkgs/stdenv/darwin/make-bootstrap-tools.nix | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkgs/stdenv/darwin/make-bootstrap-tools.nix b/pkgs/stdenv/darwin/make-bootstrap-tools.nix index 7abce18ac1ba..7e72e4fa643d 100644 --- a/pkgs/stdenv/darwin/make-bootstrap-tools.nix +++ b/pkgs/stdenv/darwin/make-bootstrap-tools.nix @@ -99,7 +99,7 @@ in rec { cp -d ${llvmPackages.clang-unwrapped}/bin/clang* $out/bin cp -rd ${llvmPackages.clang-unwrapped.lib}/lib/* $out/lib - cp -d ${llvmPackages.libclang}/lib/libclang-cpp.dylib $out/lib + cp -d ${llvmPackages.libclang}/lib/libclang-cpp*.dylib $out/lib cp -d ${llvmPackages.libcxx}/lib/libc++*.dylib $out/lib cp -d ${llvmPackages.libcxxabi}/lib/libc++abi*.dylib $out/lib cp -d ${llvmPackages.compiler-rt}/lib/darwin/libclang_rt* $out/lib/darwin From 336d82617f1cdd2f5ae77e262afa3f88f5a5e578 Mon Sep 17 00:00:00 2001 From: toonn Date: Wed, 21 Apr 2021 18:34:13 +0200 Subject: [PATCH 6/7] bootstrap-tools: Patch TargetConditionals.h `TargetConditionals.h` was missing several definitions, like `TARGET_OS_TV` that are part of SDK 10.12 at least. And one that doesn't seem to occur in any SDK afaict, `TARGET_OS_EMBEDDED_OTHER`. I added the definitions from SDK 10.12 verbatim and defined `TARGET_OS_EMBEDDED_OTHER` to be equal to `0`. This is a modified version of a patch to avoid a stdenv rebuild. --- pkgs/stdenv/darwin/make-bootstrap-tools.nix | 40 ++++++++++++++++++++- 1 file changed, 39 insertions(+), 1 deletion(-) diff --git a/pkgs/stdenv/darwin/make-bootstrap-tools.nix b/pkgs/stdenv/darwin/make-bootstrap-tools.nix index 7e72e4fa643d..f73a028bcacd 100644 --- a/pkgs/stdenv/darwin/make-bootstrap-tools.nix +++ b/pkgs/stdenv/darwin/make-bootstrap-tools.nix @@ -33,9 +33,47 @@ in rec { curl_ = curlMinimal.override (args: { gssSupport = false; http2Support = false; }); # Avoid stdenv rebuild. - Libsystem_ = darwin.Libsystem.override (args: + Libsystem_ = (darwin.Libsystem.override (args: { xnu = darwin.xnu.overrideAttrs (oldAttrs: { patches = [ ./fixed-xnu-python3.patch ]; }); + })).overrideAttrs (oldAttrs: + { installPhase = oldAttrs.installPhase + '' + cat < $out/include/TargetConditionals.h + #ifndef __TARGETCONDITIONALS__ + #define __TARGETCONDITIONALS__ + #define TARGET_OS_MAC 1 + #define TARGET_OS_WIN32 0 + #define TARGET_OS_UNIX 0 + #define TARGET_OS_OSX 1 + #define TARGET_OS_IPHONE 0 + #define TARGET_OS_IOS 0 + #define TARGET_OS_WATCH 0 + #define TARGET_OS_BRIDGE 0 + #define TARGET_OS_TV 0 + #define TARGET_OS_SIMULATOR 0 + #define TARGET_OS_EMBEDDED 0 + #define TARGET_OS_EMBEDDED_OTHER 0 /* Used in configd */ + #define TARGET_IPHONE_SIMULATOR TARGET_OS_SIMULATOR /* deprecated */ + #define TARGET_OS_NANO TARGET_OS_WATCH /* deprecated */ + + #define TARGET_CPU_PPC 0 + #define TARGET_CPU_PPC64 0 + #define TARGET_CPU_68K 0 + #define TARGET_CPU_X86 0 + #define TARGET_CPU_X86_64 1 + #define TARGET_CPU_ARM 0 + #define TARGET_CPU_ARM64 0 + #define TARGET_CPU_MIPS 0 + #define TARGET_CPU_SPARC 0 + #define TARGET_CPU_ALPHA 0 + #define TARGET_RT_MAC_CFM 0 + #define TARGET_RT_MAC_MACHO 1 + #define TARGET_RT_LITTLE_ENDIAN 1 + #define TARGET_RT_BIG_ENDIAN 0 + #define TARGET_RT_64_BIT 1 + #endif /* __TARGETCONDITIONALS__ */ + EOF + ''; }); build = stdenv.mkDerivation { From c7b433acf9cc080d7ebd8d2daa9bacde216ae570 Mon Sep 17 00:00:00 2001 From: toonn Date: Tue, 18 May 2021 12:15:47 +0200 Subject: [PATCH 7/7] bootstrap-tools: libclang-cpp already included Changes to llvmPackages have caused the `libclang-cpp*.dylib` files to be included in the `clang-unwrapped.lib` output. So we no longer need to copy them from libclang. --- pkgs/stdenv/darwin/make-bootstrap-tools.nix | 1 - 1 file changed, 1 deletion(-) diff --git a/pkgs/stdenv/darwin/make-bootstrap-tools.nix b/pkgs/stdenv/darwin/make-bootstrap-tools.nix index f73a028bcacd..08b4372a0a11 100644 --- a/pkgs/stdenv/darwin/make-bootstrap-tools.nix +++ b/pkgs/stdenv/darwin/make-bootstrap-tools.nix @@ -137,7 +137,6 @@ in rec { cp -d ${llvmPackages.clang-unwrapped}/bin/clang* $out/bin cp -rd ${llvmPackages.clang-unwrapped.lib}/lib/* $out/lib - cp -d ${llvmPackages.libclang}/lib/libclang-cpp*.dylib $out/lib cp -d ${llvmPackages.libcxx}/lib/libc++*.dylib $out/lib cp -d ${llvmPackages.libcxxabi}/lib/libc++abi*.dylib $out/lib cp -d ${llvmPackages.compiler-rt}/lib/darwin/libclang_rt* $out/lib/darwin