about summary refs log tree commit diff
path: root/pkgs/development/compilers/llvm/13/default.nix
diff options
context:
space:
mode:
authorsternenseemann <sternenseemann@systemli.org>2022-01-07 02:30:01 +0100
committersternenseemann <sternenseemann@systemli.org>2022-01-07 14:42:41 +0100
commit766f5ffb761bc916ea0f270f472d04ab30664d52 (patch)
treed67895941f0a0760acdae057ce0b51450b84268d /pkgs/development/compilers/llvm/13/default.nix
parent17c5a15c89f2523b2543f946daa4d018e04d731a (diff)
llvmPackages_*: respect cc for target when choosing C++ flavour
llvmPackages_*.clang should check the default compiler for the package
set it is targeting (targetPackages.stdenv.cc) instead of the compiler
that has been used to build it (stdenv.cc) in order to get some sense of
whether to use libc++ or libstdc++.

Since we are now inspecting targetPackages in the llvmPackages.clang
attribute, we need to avoid using it in the cross stdenv — which just
forces us to explicitly request libcxxClang for darwin instead of
relying on the clang attribute to pick it for us.

We also need to do something similar for targetPackages.stdenv.cc: Here
the llvmPackages.clang logic would work as we want (inspect
targetPackages.stdenv.cc and if it doesn't exist, make the choice based
on stdenv.cc), but it gets locked in a cycle with the previous package.
We can easily break this, however: We know that the previous set had
clang and the next one doesn't exist, so we'd choose libcxxClang any day
of the week.
Diffstat (limited to 'pkgs/development/compilers/llvm/13/default.nix')
-rw-r--r--pkgs/development/compilers/llvm/13/default.nix6
1 files changed, 5 insertions, 1 deletions
diff --git a/pkgs/development/compilers/llvm/13/default.nix b/pkgs/development/compilers/llvm/13/default.nix
index a89c6dabe3912..bdc07a68742d5 100644
--- a/pkgs/development/compilers/llvm/13/default.nix
+++ b/pkgs/development/compilers/llvm/13/default.nix
@@ -93,7 +93,11 @@ let
     #   python3 = pkgs.python3;  # don't use python-boot
     # });
 
-    clang = if stdenv.cc.isGNU then tools.libstdcxxClang else tools.libcxxClang;
+    # pick clang appropriate for package set we are targeting
+    clang =
+      if (pkgs.targetPackages.stdenv or stdenv).cc.isGNU
+      then tools.libstdcxxClang
+      else tools.libcxxClang;
 
     libstdcxxClang = wrapCCWith rec {
       cc = tools.clang-unwrapped;