cc-wrapper: add libcxx for libcxxClang

clang needs to find headers + libraries for compiling with libc++. We
need to add a libcxx argument to cc-wrapper. This means you do not
have to pass in c++ headers directly.

This resolves the last case remaining of #30670. Darwin clang++ now
works properly.

Fixes #30670
This commit is contained in:
Matthew Bauer 2019-01-26 10:17:57 -05:00
parent cb14f1404a
commit 77550df8e6
4 changed files with 12 additions and 5 deletions

View File

@ -13,6 +13,7 @@
, extraPackages ? [], extraBuildCommands ? "" , extraPackages ? [], extraBuildCommands ? ""
, isGNU ? false, isClang ? cc.isClang or false, gnugrep ? null , isGNU ? false, isClang ? cc.isClang or false, gnugrep ? null
, buildPackages ? {} , buildPackages ? {}
, libcxx ? null
}: }:
with stdenvNoCC.lib; with stdenvNoCC.lib;
@ -44,8 +45,11 @@ let
# The wrapper scripts use 'cat' and 'grep', so we may need coreutils. # The wrapper scripts use 'cat' and 'grep', so we may need coreutils.
coreutils_bin = if nativeTools then "" else getBin coreutils; coreutils_bin = if nativeTools then "" else getBin coreutils;
default_cxx_stdlib_compile = optionalString (targetPlatform.isLinux && !(cc.isGNU or false) && !nativeTools && cc ? gcc) default_cxx_stdlib_compile = if (targetPlatform.isLinux && !(cc.isGNU or false) && !nativeTools && cc ? gcc) then
"-isystem $(echo -n ${cc.gcc}/include/c++/*) -isystem $(echo -n ${cc.gcc}/include/c++/*)/$(${cc.gcc}/bin/gcc -dumpmachine)"; "-isystem $(echo -n ${cc.gcc}/include/c++/*) -isystem $(echo -n ${cc.gcc}/include/c++/*)/$(${cc.gcc}/bin/gcc -dumpmachine)"
else if targetPlatform.isDarwin && (libcxx != null) && (cc.isClang or false) then
"-isystem ${libcxx}/include/c++/v1"
else "";
# The "infix salt" is a arbitrary string added in the middle of env vars # The "infix salt" is a arbitrary string added in the middle of env vars
# defined by cc-wrapper's hooks so that multiple cc-wrappers can be used # defined by cc-wrapper's hooks so that multiple cc-wrappers can be used
@ -256,9 +260,9 @@ stdenv.mkDerivation {
echo "$ccLDFlags" > $out/nix-support/cc-ldflags echo "$ccLDFlags" > $out/nix-support/cc-ldflags
echo "$ccCFlags" > $out/nix-support/cc-cflags echo "$ccCFlags" > $out/nix-support/cc-cflags
'' '' + optionalString (targetPlatform.isDarwin && (libcxx != null) && (cc.isClang or false)) ''
echo " -L${libcxx}/lib" >> $out/nix-support/cc-ldflags
+ optionalString propagateDoc '' '' + optionalString propagateDoc ''
## ##
## Man page and info support ## Man page and info support
## ##

View File

@ -59,6 +59,7 @@ let
libcxxClang = wrapCCWith rec { libcxxClang = wrapCCWith rec {
cc = tools.clang-unwrapped; cc = tools.clang-unwrapped;
libcxx = targetLlvmLibraries.libcxx;
extraPackages = [ extraPackages = [
targetLlvmLibraries.libcxx targetLlvmLibraries.libcxx
targetLlvmLibraries.libcxxabi targetLlvmLibraries.libcxxabi

View File

@ -59,6 +59,7 @@ let
libcxxClang = wrapCCWith rec { libcxxClang = wrapCCWith rec {
cc = tools.clang-unwrapped; cc = tools.clang-unwrapped;
libcxx = targetLlvmLibraries.libcxx;
extraPackages = [ extraPackages = [
targetLlvmLibraries.libcxx targetLlvmLibraries.libcxx
targetLlvmLibraries.libcxxabi targetLlvmLibraries.libcxxabi

View File

@ -59,6 +59,7 @@ let
libcxxClang = wrapCCWith rec { libcxxClang = wrapCCWith rec {
cc = tools.clang-unwrapped; cc = tools.clang-unwrapped;
libcxx = targetLlvmLibraries.libcxx;
extraPackages = [ extraPackages = [
targetLlvmLibraries.libcxx targetLlvmLibraries.libcxx
targetLlvmLibraries.libcxxabi targetLlvmLibraries.libcxxabi