diff --git a/pkgs/development/compilers/gcc/libstdc++-hook.sh b/pkgs/development/compilers/gcc/libstdc++-hook.sh new file mode 100644 index 00000000000..2d30c845b5a --- /dev/null +++ b/pkgs/development/compilers/gcc/libstdc++-hook.sh @@ -0,0 +1,2 @@ +export NIX_CXXSTDLIB_COMPILE+="-isystem $(echo -n @gcc@/include/c++/*) -isystem $(echo -n @gcc@/include/c++/*)/$(@gcc@/bin/gcc -dumpmachine)" +export NIX_CXXSTDLIB_LINK=" -stdlib=libstdc++" diff --git a/pkgs/development/compilers/llvm/4/default.nix b/pkgs/development/compilers/llvm/4/default.nix index 9e5bccff355..11a9a46c15e 100644 --- a/pkgs/development/compilers/llvm/4/default.nix +++ b/pkgs/development/compilers/llvm/4/default.nix @@ -1,4 +1,8 @@ -{ lowPrio, newScope, stdenv, cmake, libxml2, python2, isl, fetchurl, overrideCC, wrapCC, darwin, ccWrapperFun }: +{ lowPrio, newScope, stdenv, targetPlatform, cmake, libstdcxxHook +, libxml2, python2, isl, fetchurl, overrideCC, wrapCC, ccWrapperFun +, darwin +}: + let callPackage = newScope (self // { inherit stdenv cmake libxml2 python2 isl release_version version fetch; }); @@ -46,7 +50,12 @@ let extraPackages = [ self.libcxx self.libcxxabi ]; }; - stdenv = overrideCC stdenv self.clang; + stdenv = stdenv.override (drv: { + allowedRequisites = null; + cc = self.clang; + # Use the gcc libstdc++ when targeting linux. + extraBuildInputs = if stdenv.cc.isGNU then [ libstdcxxHook ] else drv.extraBuildInputs; + }); libcxxStdenv = overrideCC stdenv self.libcxxClang; @@ -58,4 +67,5 @@ let libcxxabi = callPackage ./libc++abi.nix {}; }; + in self diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index 2f4fb44653d..1aa06ccfa11 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -5360,6 +5360,10 @@ with pkgs; gccApple = throw "gccApple is no longer supported"; + libstdcxxHook = makeSetupHook + { substitutions = { gcc = gcc-unwrapped; }; } + ../development/compilers/gcc/libstdc++-hook.sh; + # Can't just overrideCC, because then the stdenv-cross mkDerivation will be # thrown away. TODO: find a better solution for this. crossLibcStdenv = buildPackages.makeStdenvCross {