From 5721c4fa47f6aa99c039bbceab40392d5110794e Mon Sep 17 00:00:00 2001 From: Randy Eckenrode Date: Mon, 30 Sep 2024 09:12:53 -0400 Subject: [PATCH] darwin: add libSystem The new Darwin SDK pattern relies on an effectively empty, stub libc implementation. The actual libSystem to be linked is located dynamically based on the active SDK for the target. Independent build, host, and target SDKs are all supported by Darwin. The stub libSystem contains empty `include` and `lib` folders to avoid warnings from wrappers that add those paths unconditionally, which can turn into errors when a package is building with warnings-as-errors. While it would be nice if a fallback libc could be provided, SDK headers are not compatible between framework versions. Providing a fallback risks mixing headers from different frameworks, which can result in hard to diagnose errors involving semicolons or other punctuation. --- pkgs/os-specific/darwin/libSystem/default.nix | 13 +++++++++++++ pkgs/top-level/darwin-packages.nix | 2 ++ 2 files changed, 15 insertions(+) create mode 100644 pkgs/os-specific/darwin/libSystem/default.nix diff --git a/pkgs/os-specific/darwin/libSystem/default.nix b/pkgs/os-specific/darwin/libSystem/default.nix new file mode 100644 index 000000000000..1dea8e846fdf --- /dev/null +++ b/pkgs/os-specific/darwin/libSystem/default.nix @@ -0,0 +1,13 @@ +{ stdenvNoCC }: + +# Darwin dynamically determines the `libSystem` to use based on the SDK found at `DEVELOPER_DIR`. +# By default, this will be `apple-sdk` or one of the versioned variants. +stdenvNoCC.mkDerivation { + pname = "libSystem"; + version = "B"; + + # Silence linker warnings due a missing `lib` (which is added by cc-wrapper). + buildCommand = '' + mkdir -p "$out/include" "$out/lib" + ''; +} diff --git a/pkgs/top-level/darwin-packages.nix b/pkgs/top-level/darwin-packages.nix index 30d5ef83061a..0d3cf4033efa 100644 --- a/pkgs/top-level/darwin-packages.nix +++ b/pkgs/top-level/darwin-packages.nix @@ -148,6 +148,8 @@ impure-cmds // appleSourcePackages // chooseLibs // { # Removes propagated packages from the stdenv, so those packages can be built without depending upon themselves. bootstrapStdenv = mkBootstrapStdenv pkgs.stdenv; + libSystem = callPackage ../os-specific/darwin/libSystem { }; + # TODO(@connorbaker): See https://github.com/NixOS/nixpkgs/issues/229389. cf-private = self.apple_sdk.frameworks.CoreFoundation;