summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--pkgs/os-specific/darwin/cctools/port.nix10
-rw-r--r--pkgs/os-specific/darwin/libtapi/default.nix29
-rw-r--r--pkgs/top-level/darwin-packages.nix4
3 files changed, 40 insertions, 3 deletions
diff --git a/pkgs/os-specific/darwin/cctools/port.nix b/pkgs/os-specific/darwin/cctools/port.nix
index caf85b227be..b379933f3c8 100644
--- a/pkgs/os-specific/darwin/cctools/port.nix
+++ b/pkgs/os-specific/darwin/cctools/port.nix
@@ -2,6 +2,7 @@
 , libcxxabi, libuuid, llvm
 , libobjc ? null, maloader ? null
 , enableDumpNormalizedLibArgs ? false
+, enableTapiSupport ? stdenv.hostPlatform != stdenv.targetPlatform, libtapi
 }:
 
 let
@@ -52,7 +53,8 @@ let
 
     nativeBuildInputs = [ autoconf automake libtool_2 autoreconfHook ];
     buildInputs = [ libuuid ]
-      ++ stdenv.lib.optionals stdenv.isDarwin [ libcxxabi libobjc ];
+      ++ stdenv.lib.optionals stdenv.isDarwin [ libcxxabi libobjc ]
+      ++ stdenv.lib.optional enableTapiSupport libtapi;
 
     patches = [
       ./ld-rpath-nonfinal.patch ./ld-ignore-rpath-link.patch
@@ -74,7 +76,11 @@ let
     # TODO(@Ericson2314): Always pass "--target" and always targetPrefix.
     configurePlatforms = [ "build" "host" ]
       ++ stdenv.lib.optional (stdenv.targetPlatform != stdenv.hostPlatform) "target";
-    configureFlags = [ "--disable-clang-as" ];
+    configureFlags = [ "--disable-clang-as" ]
+      ++ stdenv.lib.optionals enableTapiSupport [
+        "--enable-tapi-support"
+        "--with-libtapi=${libtapi}"
+      ];
 
     postPatch = ''
       sed -i -e 's/addStandardLibraryDirectories = true/addStandardLibraryDirectories = false/' cctools/ld64/src/ld/Options.cpp
diff --git a/pkgs/os-specific/darwin/libtapi/default.nix b/pkgs/os-specific/darwin/libtapi/default.nix
new file mode 100644
index 00000000000..e68e77f55af
--- /dev/null
+++ b/pkgs/os-specific/darwin/libtapi/default.nix
@@ -0,0 +1,29 @@
+{ lib, stdenv, fetchFromGitHub, cmake, python }:
+
+stdenv.mkDerivation {
+  name = "libtapi";
+  src = fetchFromGitHub {
+    owner = "tpoechtrager";
+    repo = "apple-libtapi";
+    rev = "e56673694db395e25b31808b4fbb9a7005e6875f";
+    sha256 = "1lnl1af9sszp9wxfk0wljrpdmwcx83j0w5c0y4qw4pqrdkdgwks7";
+  };
+
+  nativeBuildInputs = [ cmake python ];
+
+  preConfigure = ''
+    cd src/apple-llvm/src
+  '';
+
+  cmakeFlags = [ "-DLLVM_INCLUDE_TESTS=OFF" ];
+
+  buildFlags = "libtapi";
+
+  installTarget = "install-libtapi";
+
+  meta = with lib; {
+    license = licenses.apsl20;
+    maintainers = with maintainers; [ matthewbauer ];
+  };
+
+}
diff --git a/pkgs/top-level/darwin-packages.nix b/pkgs/top-level/darwin-packages.nix
index 5ff97aa4440..2a82af19fa2 100644
--- a/pkgs/top-level/darwin-packages.nix
+++ b/pkgs/top-level/darwin-packages.nix
@@ -27,7 +27,7 @@ in
   };
 
   cctools = callPackage ../os-specific/darwin/cctools/port.nix {
-    inherit (darwin) libobjc maloader;
+    inherit (darwin) libobjc maloader libtapi;
     stdenv = if stdenv.isDarwin then stdenv else pkgs.libcxxStdenv;
     libcxxabi = pkgs.libcxxabi;
   };
@@ -79,4 +79,6 @@ in
 
   darling = callPackage ../os-specific/darwin/darling/default.nix { };
 
+  libtapi = callPackage ../os-specific/darwin/libtapi {};
+
 })