about summary refs log tree commit diff
path: root/third_party
diff options
context:
space:
mode:
authorsterni <sternenseemann@systemli.org>2021-10-07T19·57+0200
committersterni <sternenseemann@systemli.org>2021-10-10T10·03+0000
commit04f7cc3880912abb738d3d3bc20e7622a211f25e (patch)
treef140a021234bcfdfa2a64e2892fb5eb069595b43 /third_party
parentac17de3cbd2c5bcb1d12992c2fe5c6a554ab4716 (diff)
fix(3p): resolve linker issues with clang-compiled C++ packages r/2956
The point where this broke is likely when llvmPackages_11.stdenv started
respecting stdenv.hostPlatform.linker and thus using GNU binutils'
ld.bfd for linking. That linker can't deal with clang's C++ ABI.

To fix this we introduce a modified version of llvmPackages_11.stdenv
which uses llvmPackages_11.bintools for linking purposes (I also aim to
upstream this in some form, but am not sure about the details atm, so
we'll just do this in the tvl overlay for now). This is the precondition
for getting our C++ packages in //third_party to work
again. Additionally the following fixes were necessary:

* abseil-cpp needed to be updated (by overriding the version from
  nixpkgs for now, since I can't update the subtree on my own) to
  fulfill grpc's requirements (grpc 1.41.0 needs abseil-cpp LTS
  20210324).

* gtest needs a patch from nixpkgs which fixes the path to its include
  directory for CMake.

* We need to build re2 with clang as well, otherwise linking will fail.

Fixes b/132.

Change-Id: I7b64579fe96451547babe070fd35db398581e49d
Reviewed-on: https://cl.tvl.fyi/c/depot/+/3701
Tested-by: BuildkiteCI
Reviewed-by: lukegb <lukegb@tvl.fyi>
Reviewed-by: tazjin <mail@tazj.in>
Diffstat (limited to 'third_party')
-rw-r--r--third_party/abseil_cpp/default.nix11
-rw-r--r--third_party/glog/default.nix4
-rw-r--r--third_party/grpc/default.nix9
-rw-r--r--third_party/gtest/default.nix3
-rw-r--r--third_party/nix/default.nix5
-rw-r--r--third_party/overlays/tvl.nix7
-rw-r--r--third_party/protobuf/default.nix4
-rw-r--r--third_party/rapidcheck/default.nix2
-rw-r--r--third_party/re2/default.nix5
9 files changed, 31 insertions, 19 deletions
diff --git a/third_party/abseil_cpp/default.nix b/third_party/abseil_cpp/default.nix
index 5b99fbc56f..c4c1ca174e 100644
--- a/third_party/abseil_cpp/default.nix
+++ b/third_party/abseil_cpp/default.nix
@@ -1,7 +1,13 @@
 { pkgs, lib, ... }:
 
-let inherit (pkgs) cmake llvmPackages_11;
-in llvmPackages_11.libcxxStdenv.mkDerivation rec {
+let inherit (pkgs) cmake fullLlvm11Stdenv;
+in pkgs.abseil-cpp.override {
+  stdenv = fullLlvm11Stdenv;
+}
+
+/* TODO(tazjin): update abseil subtree
+
+fullLlvm11Stdenv.mkDerivation rec {
   pname = "abseil-cpp";
   version = "20200519-768eb2ca+tvl-1";
   src = ./.;
@@ -21,3 +27,4 @@ in llvmPackages_11.libcxxStdenv.mkDerivation rec {
     maintainers = [ maintainers.andersk ];
   };
 }
+*/
diff --git a/third_party/glog/default.nix b/third_party/glog/default.nix
index 9fe9ce484c..a28bcbaea9 100644
--- a/third_party/glog/default.nix
+++ b/third_party/glog/default.nix
@@ -1,7 +1,7 @@
 { pkgs, lib, ... }:
 
-let inherit (pkgs) llvmPackages_11 cmake;
-in llvmPackages_11.libcxxStdenv.mkDerivation {
+let inherit (pkgs) fullLlvm11Stdenv cmake;
+in fullLlvm11Stdenv.mkDerivation {
   name = "glog";
   version = "20200527-unstable";
   src = ./.;
diff --git a/third_party/grpc/default.nix b/third_party/grpc/default.nix
index 2914d8d8e7..c41e66e583 100644
--- a/third_party/grpc/default.nix
+++ b/third_party/grpc/default.nix
@@ -2,14 +2,11 @@
 
 (pkgs.grpc.override {
   protobuf = depot.third_party.protobuf;
-  stdenv = pkgs.llvmPackages_11.libcxxStdenv;
+  stdenv = pkgs.fullLlvm11Stdenv;
   abseil-cpp = depot.third_party.abseil_cpp;
+  re2 = depot.third_party.re2;
 }).overrideAttrs(orig: rec {
   cmakeFlags = orig.cmakeFlags ++ [
-    "-DCMAKE_CXX_STANDARD=17"
     "-DCMAKE_CXX_STANDARD_REQUIRED=ON"
   ];
-}) // {
-  # TODO(b/132): Reenable when linker errors are fixed.
-  meta.ci = false;
-}
+})
diff --git a/third_party/gtest/default.nix b/third_party/gtest/default.nix
index 5491450aa3..70516853ed 100644
--- a/third_party/gtest/default.nix
+++ b/third_party/gtest/default.nix
@@ -1,7 +1,7 @@
 { pkgs, ... }:
 
 (pkgs.gtest.override {
-  stdenv = pkgs.llvmPackages_11.libcxxStdenv;
+  stdenv = pkgs.fullLlvm11Stdenv;
 }).overrideAttrs(_: {
   src = pkgs.fetchFromGitHub {
     owner = "google";
@@ -9,5 +9,4 @@
     rev = "9dce5e5d878176dc0054ef381f5c6e705f43ef99";
     sha256 = "05xi61j7j251dzkgk9965lqpbacsy44iblzql941kw9d4nk0q6jl";
   };
-  patches = [];
 })
diff --git a/third_party/nix/default.nix b/third_party/nix/default.nix
index 909bff9be5..3fc89fc7eb 100644
--- a/third_party/nix/default.nix
+++ b/third_party/nix/default.nix
@@ -57,7 +57,7 @@ let
     cp ${pkgs.busybox}/bin/busybox $out/bin
   '';
 
-in lib.fix (self: pkgs.llvmPackages_11.libcxxStdenv.mkDerivation {
+in lib.fix (self: pkgs.fullLlvm11Stdenv.mkDerivation {
   pname = "tvix";
   version = "2.3.4";
   inherit src;
@@ -187,9 +187,6 @@ in lib.fix (self: pkgs.llvmPackages_11.libcxxStdenv.mkDerivation {
   # TODO(tazjin): integration test setup?
   # TODO(tazjin): docs generation?
 
-  # TODO(b/132): Reenable when linker errors are fixed.
-  meta.ci = false;
-
   passthru = {
     build-shell = self.overrideAttrs (up: rec {
       run_clang_tidy = pkgs.writeShellScriptBin "run-clang-tidy" ''
diff --git a/third_party/overlays/tvl.nix b/third_party/overlays/tvl.nix
index dac84b9fd1..ccf64924a2 100644
--- a/third_party/overlays/tvl.nix
+++ b/third_party/overlays/tvl.nix
@@ -22,6 +22,13 @@ self: super: {
     llvmPackages = self.llvmPackages_11;
   };
 
+  # stdenv which uses clang, lld and libc++; full is a slight exaggeration,
+  # we for example don't use LLVM's libunwind
+  fullLlvm11Stdenv = self.overrideCC self.stdenv
+    (self.llvmPackages_11.libcxxStdenv.cc.override {
+      inherit (self.llvmPackages_11) bintools;
+    });
+
   # Add our Emacs packages to the fixpoint
   emacsPackagesFor = emacs: (
     (super.emacsPackagesFor emacs).overrideScope' (eself: esuper: {
diff --git a/third_party/protobuf/default.nix b/third_party/protobuf/default.nix
index 569cb269b2..b30ff9de91 100644
--- a/third_party/protobuf/default.nix
+++ b/third_party/protobuf/default.nix
@@ -4,9 +4,9 @@
 pkgs.callPackage "${pkgs.path}/pkgs/development/libraries/protobuf/generic-v3.nix" {
   version = "3.12.2";
   sha256 = "1lp368aa206vpic9fmax4k6llnmf28plfvkkm4vqhgphmjqykvl2";
-  stdenv = pkgs.llvmPackages_11.libcxxStdenv;
+  stdenv = pkgs.fullLlvm11Stdenv;
   buildPackages = {
     inherit (pkgs) which;
-    stdenv = pkgs.llvmPackages_11.libcxxStdenv;
+    stdenv = pkgs.fullLlvm11Stdenv;
   };
 }
diff --git a/third_party/rapidcheck/default.nix b/third_party/rapidcheck/default.nix
index 79fd7fa123..ec8c01694d 100644
--- a/third_party/rapidcheck/default.nix
+++ b/third_party/rapidcheck/default.nix
@@ -1,7 +1,7 @@
 { pkgs, ... }:
 
 (pkgs.callPackage "${pkgs.path}/pkgs/development/libraries/rapidcheck" {
-  stdenv = pkgs.llvmPackages_11.libcxxStdenv;
+  stdenv = pkgs.fullLlvm11Stdenv;
 }).overrideAttrs (attrs: rec {
   # follows the versioning scheme of nixpkgs, since rapidcheck does not
   # provide versioned releases
diff --git a/third_party/re2/default.nix b/third_party/re2/default.nix
new file mode 100644
index 0000000000..62bce9e2ee
--- /dev/null
+++ b/third_party/re2/default.nix
@@ -0,0 +1,5 @@
+{ pkgs, ... }:
+
+pkgs.re2.override {
+  stdenv = pkgs.fullLlvm11Stdenv;
+}