forked from mirrors/nixpkgs
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:
parent
cb14f1404a
commit
77550df8e6
|
@ -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
|
||||||
##
|
##
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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
|
||||||
|
|
Loading…
Reference in a new issue