about summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--pkgs/applications/editors/emacs-modes/emacs-clang-complete-async/default.nix4
-rw-r--r--pkgs/build-support/clang-wrapper/builder.sh3
-rw-r--r--pkgs/build-support/clang-wrapper/clang-wrapper.sh10
-rw-r--r--pkgs/build-support/clang-wrapper/default.nix3
-rw-r--r--pkgs/build-support/clang-wrapper/ld-wrapper.sh3
-rw-r--r--pkgs/development/compilers/llvm/clang-purity.patch162
-rw-r--r--pkgs/development/compilers/llvm/clang-tablegen-dir.patch9
-rw-r--r--pkgs/development/compilers/llvm/clang.nix41
-rw-r--r--pkgs/development/compilers/llvm/default.nix2
-rw-r--r--pkgs/development/compilers/llvm/dragonegg.nix8
-rw-r--r--pkgs/development/compilers/llvm/full.nix89
-rw-r--r--pkgs/development/libraries/isl/0.12.2.nix20
-rw-r--r--pkgs/development/libraries/libc++/default.nix45
-rw-r--r--pkgs/development/libraries/libc++abi/default.nix39
-rw-r--r--pkgs/top-level/all-packages.nix28
-rw-r--r--pkgs/top-level/release-python.nix1
16 files changed, 191 insertions, 276 deletions
diff --git a/pkgs/applications/editors/emacs-modes/emacs-clang-complete-async/default.nix b/pkgs/applications/editors/emacs-modes/emacs-clang-complete-async/default.nix
index 9db6e4cb73644..6d10244a87956 100644
--- a/pkgs/applications/editors/emacs-modes/emacs-clang-complete-async/default.nix
+++ b/pkgs/applications/editors/emacs-modes/emacs-clang-complete-async/default.nix
@@ -1,4 +1,4 @@
-{ clangStdenv, fetchgit, llvm, clangUnwrapped }:
+{ clangStdenv, fetchgit, llvmFull }:
 
 clangStdenv.mkDerivation {
   name = "emacs-clang-complete-async-20130218";
@@ -8,7 +8,7 @@ clangStdenv.mkDerivation {
     sha256 = "1c8zqi6axbsb951azz9iqx3j52j30nd9ypv396hvids3g02cirrf";
   };
 
-  buildInputs = [ llvm clangUnwrapped ];
+  buildInputs = [ llvmFull ];
 
   installPhase = ''
     mkdir -p $out/bin
diff --git a/pkgs/build-support/clang-wrapper/builder.sh b/pkgs/build-support/clang-wrapper/builder.sh
index 3f90b9d32bd04..0cdb2b96135eb 100644
--- a/pkgs/build-support/clang-wrapper/builder.sh
+++ b/pkgs/build-support/clang-wrapper/builder.sh
@@ -59,13 +59,16 @@ doSubstitute() {
     local src=$1
     local dst=$2
     local uselibcxx=
+    local uselibcxxabi=
     if test -n "$libcxx" && echo $dst | fgrep ++; then uselibcxx=$libcxx; fi
+    if test -n "$libcxxabi" && echo $dst | fgrep ++; then uselibcxxabi=$libcxxabi; fi
     # Can't use substitute() here, because replace may not have been
     # built yet (in the bootstrap).
     sed \
         -e "s^@out@^$out^g" \
         -e "s^@shell@^$shell^g" \
         -e "s^@libcxx@^$uselibcxx^g" \
+        -e "s^@libcxxabi@^$uselibcxxabi^g" \
         -e "s^@clang@^$clang^g" \
         -e "s^@clangProg@^$clangProg^g" \
         -e "s^@binutils@^$binutils^g" \
diff --git a/pkgs/build-support/clang-wrapper/clang-wrapper.sh b/pkgs/build-support/clang-wrapper/clang-wrapper.sh
index 84067844cad87..b39aa2d721e89 100644
--- a/pkgs/build-support/clang-wrapper/clang-wrapper.sh
+++ b/pkgs/build-support/clang-wrapper/clang-wrapper.sh
@@ -76,11 +76,12 @@ if test "$NIX_ENFORCE_PURITY" = "1" -a -n "$NIX_STORE"; then
         n=$((n + 1))
     done
     params=("${rest[@]}")
+    NIX_CFLAGS_COMPILE="$NIX_CFLAGS_COMPILE --sysroot=/var/empty"
 fi
 
 if test -n "@libcxx@"; then
     NIX_CFLAGS_COMPILE="$NIX_CFLAGS_COMPILE -isystem@libcxx@/include/c++/v1 -stdlib=libc++"
-    NIX_CFLAGS_LINK="$NIX_CFLAGS_LINK -L@libcxx@/lib -stdlib=libc++ -lc++abi"
+    NIX_CFLAGS_LINK="$NIX_CFLAGS_LINK -L@libcxx@/lib -stdlib=libc++ -L@libcxxabi@/lib -lc++abi"
 fi
 
 # Add the flags for the C compiler proper.
@@ -137,13 +138,6 @@ if test -n "$NIX_CLANG_WRAPPER_EXEC_HOOK"; then
     source "$NIX_CLANG_WRAPPER_EXEC_HOOK"
 fi
 
-# We nuke LD_LIBRARY_PATH here, because clang dynamically links to LLVM.
-# Unfortunately, when such clang is used to build LLVM again, it can get in
-# trouble temporarily binding to the build-directory versions of the libraries
-# (the buildsystem sets LD_LIBRARY_PATH).  That is very undesirable and can
-# cause mysterious failures.
-LD_LIBRARY_PATH=
-
 # Call the real `clang'.  Filter out warnings from stderr about unused
 # `-B' flags, since they confuse some programs.  Deep bash magic to
 # apply grep to stderr (by swapping stdin/stderr twice).
diff --git a/pkgs/build-support/clang-wrapper/default.nix b/pkgs/build-support/clang-wrapper/default.nix
index 1b2a02fa86a48..05b8194697e16 100644
--- a/pkgs/build-support/clang-wrapper/default.nix
+++ b/pkgs/build-support/clang-wrapper/default.nix
@@ -34,6 +34,9 @@ stdenv.mkDerivation {
   addFlags = ./add-flags;
   
   inherit nativeTools nativeLibc nativePrefix clang clangVersion libcxx;
+
+  libcxxabi = libcxx.abi or null;
+
   gcc = clang.gcc;
   libc = if nativeLibc then null else libc;
   binutils = if nativeTools then null else binutils;
diff --git a/pkgs/build-support/clang-wrapper/ld-wrapper.sh b/pkgs/build-support/clang-wrapper/ld-wrapper.sh
index 48378778ba9e8..ae45c62d460a7 100644
--- a/pkgs/build-support/clang-wrapper/ld-wrapper.sh
+++ b/pkgs/build-support/clang-wrapper/ld-wrapper.sh
@@ -32,6 +32,9 @@ if test "$NIX_ENFORCE_PURITY" = "1" -a -n "$NIX_STORE" \
             # We cannot skip this; barf.
             echo "impure path \`$p' used in link" >&2
             exit 1
+        elif test "${p:0:9}" = "--sysroot"; then
+            # Our ld is not built with sysroot support (Can we fix that?)
+            :
         else
             rest=("${rest[@]}" "$p")
         fi
diff --git a/pkgs/development/compilers/llvm/clang-purity.patch b/pkgs/development/compilers/llvm/clang-purity.patch
deleted file mode 100644
index e82305189e8fb..0000000000000
--- a/pkgs/development/compilers/llvm/clang-purity.patch
+++ /dev/null
@@ -1,162 +0,0 @@
-diff -Naur cfe-3.3.src-orig/lib/Driver/ToolChains.cpp cfe-3.3.src/lib/Driver/ToolChains.cpp
---- cfe-3.3.src-orig/lib/Driver/ToolChains.cpp	2013-05-06 12:26:41.000000000 -0400
-+++ cfe-3.3.src/lib/Driver/ToolChains.cpp	2013-06-21 19:28:12.120364372 -0400
-@@ -2318,17 +2318,6 @@
-                       Paths);
-     }
-   }
--  addPathIfExists(SysRoot + "/lib/" + MultiarchTriple, Paths);
--  addPathIfExists(SysRoot + "/lib/../" + Multilib, Paths);
--  addPathIfExists(SysRoot + "/usr/lib/" + MultiarchTriple, Paths);
--  addPathIfExists(SysRoot + "/usr/lib/../" + Multilib, Paths);
--
--  // Try walking via the GCC triple path in case of multiarch GCC
--  // installations with strange symlinks.
--  if (GCCInstallation.isValid())
--    addPathIfExists(SysRoot + "/usr/lib/" + GCCInstallation.getTriple().str() +
--                    "/../../" + Multilib, Paths);
--
-   // Add the non-multilib suffixed paths (if potentially different).
-   if (GCCInstallation.isValid()) {
-     const std::string &LibPath = GCCInstallation.getParentLibPath();
-@@ -2341,8 +2330,6 @@
-       addPathIfExists(LibPath, Paths);
-     }
-   }
--  addPathIfExists(SysRoot + "/lib", Paths);
--  addPathIfExists(SysRoot + "/usr/lib", Paths);
- 
-   IsPIEDefault = SanitizerArgs(*this, Args).hasZeroBaseShadow();
- }
-@@ -2395,9 +2382,6 @@
-   if (DriverArgs.hasArg(options::OPT_nostdinc))
-     return;
- 
--  if (!DriverArgs.hasArg(options::OPT_nostdlibinc))
--    addSystemInclude(DriverArgs, CC1Args, SysRoot + "/usr/local/include");
--
-   if (!DriverArgs.hasArg(options::OPT_nobuiltininc)) {
-     llvm::sys::Path P(D.ResourceDir);
-     P.appendComponent("include");
-@@ -2479,26 +2463,6 @@
-     "/usr/include/powerpc64-linux-gnu"
-   };
-   ArrayRef<StringRef> MultiarchIncludeDirs;
--  if (getTriple().getArch() == llvm::Triple::x86_64) {
--    MultiarchIncludeDirs = X86_64MultiarchIncludeDirs;
--  } else if (getTriple().getArch() == llvm::Triple::x86) {
--    MultiarchIncludeDirs = X86MultiarchIncludeDirs;
--  } else if (getTriple().getArch() == llvm::Triple::aarch64) {
--    MultiarchIncludeDirs = AArch64MultiarchIncludeDirs;
--  } else if (getTriple().getArch() == llvm::Triple::arm) {
--    if (getTriple().getEnvironment() == llvm::Triple::GNUEABIHF)
--      MultiarchIncludeDirs = ARMHFMultiarchIncludeDirs;
--    else
--      MultiarchIncludeDirs = ARMMultiarchIncludeDirs;
--  } else if (getTriple().getArch() == llvm::Triple::mips) {
--    MultiarchIncludeDirs = MIPSMultiarchIncludeDirs;
--  } else if (getTriple().getArch() == llvm::Triple::mipsel) {
--    MultiarchIncludeDirs = MIPSELMultiarchIncludeDirs;
--  } else if (getTriple().getArch() == llvm::Triple::ppc) {
--    MultiarchIncludeDirs = PPCMultiarchIncludeDirs;
--  } else if (getTriple().getArch() == llvm::Triple::ppc64) {
--    MultiarchIncludeDirs = PPC64MultiarchIncludeDirs;
--  }
-   for (ArrayRef<StringRef>::iterator I = MultiarchIncludeDirs.begin(),
-                                      E = MultiarchIncludeDirs.end();
-        I != E; ++I) {
-@@ -2510,13 +2474,6 @@
- 
-   if (getTriple().getOS() == llvm::Triple::RTEMS)
-     return;
--
--  // Add an include of '/include' directly. This isn't provided by default by
--  // system GCCs, but is often used with cross-compiling GCCs, and harmless to
--  // add even when Clang is acting as-if it were a system compiler.
--  addExternCSystemInclude(DriverArgs, CC1Args, SysRoot + "/include");
--
--  addExternCSystemInclude(DriverArgs, CC1Args, SysRoot + "/usr/include");
- }
- 
- /// \brief Helper to add the three variant paths for a libstdc++ installation.
-diff -Naur cfe-3.3.src-orig/lib/Driver/Tools.cpp cfe-3.3.src/lib/Driver/Tools.cpp
---- cfe-3.3.src-orig/lib/Driver/Tools.cpp	2013-05-30 14:01:30.000000000 -0400
-+++ cfe-3.3.src/lib/Driver/Tools.cpp	2013-06-21 19:30:51.604726574 -0400
-@@ -5976,43 +5976,6 @@
-     }
-   }
- 
--  if (ToolChain.getArch() == llvm::Triple::arm ||
--      ToolChain.getArch() == llvm::Triple::thumb ||
--      (!Args.hasArg(options::OPT_static) &&
--       !Args.hasArg(options::OPT_shared))) {
--    CmdArgs.push_back("-dynamic-linker");
--    if (isAndroid)
--      CmdArgs.push_back("/system/bin/linker");
--    else if (ToolChain.getArch() == llvm::Triple::x86)
--      CmdArgs.push_back("/lib/ld-linux.so.2");
--    else if (ToolChain.getArch() == llvm::Triple::aarch64)
--      CmdArgs.push_back("/lib/ld-linux-aarch64.so.1");
--    else if (ToolChain.getArch() == llvm::Triple::arm ||
--             ToolChain.getArch() == llvm::Triple::thumb) {
--      if (ToolChain.getTriple().getEnvironment() == llvm::Triple::GNUEABIHF)
--        CmdArgs.push_back("/lib/ld-linux-armhf.so.3");
--      else
--        CmdArgs.push_back("/lib/ld-linux.so.3");
--    }
--    else if (ToolChain.getArch() == llvm::Triple::mips ||
--             ToolChain.getArch() == llvm::Triple::mipsel)
--      CmdArgs.push_back("/lib/ld.so.1");
--    else if (ToolChain.getArch() == llvm::Triple::mips64 ||
--             ToolChain.getArch() == llvm::Triple::mips64el) {
--      if (hasMipsN32ABIArg(Args))
--        CmdArgs.push_back("/lib32/ld.so.1");
--      else
--        CmdArgs.push_back("/lib64/ld.so.1");
--    }
--    else if (ToolChain.getArch() == llvm::Triple::ppc)
--      CmdArgs.push_back("/lib/ld.so.1");
--    else if (ToolChain.getArch() == llvm::Triple::ppc64 ||
--	     ToolChain.getArch() == llvm::Triple::systemz)
--      CmdArgs.push_back("/lib64/ld64.so.1");
--    else
--      CmdArgs.push_back("/lib64/ld-linux-x86-64.so.2");
--  }
--
-   CmdArgs.push_back("-o");
-   CmdArgs.push_back(Output.getFilename());
- 
-diff -Naur cfe-3.3.src-orig/lib/Frontend/InitHeaderSearch.cpp cfe-3.3.src/lib/Frontend/InitHeaderSearch.cpp
---- cfe-3.3.src-orig/lib/Frontend/InitHeaderSearch.cpp	2013-04-29 21:21:43.000000000 -0400
-+++ cfe-3.3.src/lib/Frontend/InitHeaderSearch.cpp	2013-06-21 19:32:47.627016565 -0400
-@@ -225,20 +225,6 @@
-                                             const HeaderSearchOptions &HSOpts) {
-   llvm::Triple::OSType os = triple.getOS();
- 
--  if (HSOpts.UseStandardSystemIncludes) {
--    switch (os) {
--    case llvm::Triple::FreeBSD:
--    case llvm::Triple::NetBSD:
--    case llvm::Triple::OpenBSD:
--    case llvm::Triple::Bitrig:
--      break;
--    default:
--      // FIXME: temporary hack: hard-coded paths.
--      AddPath("/usr/local/include", System, false);
--      break;
--    }
--  }
--
-   // Builtin includes use #include_next directives and should be positioned
-   // just prior C include dirs.
-   if (HSOpts.UseBuiltinIncludes) {
-@@ -332,9 +318,6 @@
-   default:
-     break;
-   }
--
--  if ( os != llvm::Triple::RTEMS )
--    AddPath("/usr/include", ExternCSystem, false);
- }
- 
- void InitHeaderSearch::
diff --git a/pkgs/development/compilers/llvm/clang-tablegen-dir.patch b/pkgs/development/compilers/llvm/clang-tablegen-dir.patch
deleted file mode 100644
index de6a468b239f6..0000000000000
--- a/pkgs/development/compilers/llvm/clang-tablegen-dir.patch
+++ /dev/null
@@ -1,9 +0,0 @@
---- a/utils/TableGen/CMakeLists.txt       (revision 190146)
-+++ b/utils/TableGen/CMakeLists.txt       (working copy)
-@@ -1,4 +1,5 @@
- set(LLVM_LINK_COMPONENTS Support)
-+set(LLVM_TOOLS_BINARY_DIR ${CMAKE_CURRENT_BINARY_DIR})
- 
- add_tablegen(clang-tblgen CLANG
-   ClangASTNodesEmitter.cpp
-
diff --git a/pkgs/development/compilers/llvm/clang.nix b/pkgs/development/compilers/llvm/clang.nix
deleted file mode 100644
index 8c178c9ce0371..0000000000000
--- a/pkgs/development/compilers/llvm/clang.nix
+++ /dev/null
@@ -1,41 +0,0 @@
-{ stdenv, fetchurl, perl, groff, llvm, cmake, libxml2, python }:
-
-let
-  version = "3.3";
-  gccReal = if (stdenv.gcc.gcc or null) == null then stdenv.gcc else stdenv.gcc.gcc;
-in
-
-stdenv.mkDerivation {
-  name = "clang-${version}";
-
-  buildInputs = [ perl llvm groff cmake libxml2 python ];
-
-  patches = [ ./clang-tablegen-dir.patch ] ++
-            stdenv.lib.optional (stdenv.gcc.libc != null) ./clang-purity.patch;
-
-  cmakeFlags = [
-    "-DCLANG_PATH_TO_LLVM_BUILD=${llvm}"
-    "-DCMAKE_BUILD_TYPE=Release"
-    "-DLLVM_TARGETS_TO_BUILD=all"
-    "-DGCC_INSTALL_PREFIX=${gccReal}"
-  ] ++ stdenv.lib.optionals (stdenv.gcc.libc != null) [
-    "-DC_INCLUDE_DIRS=${stdenv.gcc.libc}/include/"
-  ];
-
-  enableParallelBuilding = true;
-
-  src = fetchurl {
-      url = "http://llvm.org/releases/${version}/cfe-${version}.src.tar.gz";
-      sha256 = "15mrvw43s4frk1j49qr4v5viq68h8qlf10qs6ghd6mrsmgj5vddi";
-  };
-
-  passthru = { gcc = stdenv.gcc.gcc; };
-
-  meta = {
-    homepage = http://clang.llvm.org/;
-    description = "A C language family frontend for LLVM";
-    license = "BSD";
-    maintainers = with stdenv.lib.maintainers; [viric shlevy];
-    platforms = with stdenv.lib.platforms; all;
-  };
-}
diff --git a/pkgs/development/compilers/llvm/default.nix b/pkgs/development/compilers/llvm/default.nix
index 7ef7adfa324ea..1a8fa30974993 100644
--- a/pkgs/development/compilers/llvm/default.nix
+++ b/pkgs/development/compilers/llvm/default.nix
@@ -41,7 +41,7 @@ stdenv.mkDerivation rec {
     description = "Collection of modular and reusable compiler and toolchain technologies";
     homepage    = http://llvm.org/;
     license     = licenses.bsd3;
-    maintainers = with maintainers; [ lovek323 raskin shlevy viric ];
+    maintainers = with maintainers; [ lovek323 raskin viric ];
     platforms   = platforms.all;
   };
 }
diff --git a/pkgs/development/compilers/llvm/dragonegg.nix b/pkgs/development/compilers/llvm/dragonegg.nix
index 737b9533a089b..38d3546d9819a 100644
--- a/pkgs/development/compilers/llvm/dragonegg.nix
+++ b/pkgs/development/compilers/llvm/dragonegg.nix
@@ -1,18 +1,18 @@
-{stdenv, fetchurl, llvm, gmp, mpfr, mpc}:
+{stdenv, fetchurl, llvm, gmp, mpfr, mpc, ncurses, zlib}:
 
 stdenv.mkDerivation rec {
-  version = "3.3";
+  version = "3.4";
   name = "dragonegg-${version}";
 
   src = fetchurl {
     url = "http://llvm.org/releases/${version}/${name}.src.tar.gz";
-    sha256 = "1kfryjaz5hxh3q6m50qjrwnyjb3smg2zyh025lhz9km3x4kshlri";
+    sha256 = "1733czbvby1ww3xkwcwmm0km0bpwhfyxvf56wb0zv5gksp3kbgrl";
   };
 
   # The gcc the plugin will be built for (the same used building dragonegg)
   GCC = "gcc";
 
-  buildInputs = [ llvm gmp mpfr mpc ];
+  buildInputs = [ llvm gmp mpfr mpc ncurses zlib ];
 
   installPhase = ''
     mkdir -p $out/lib $out/share/doc/${name}
diff --git a/pkgs/development/compilers/llvm/full.nix b/pkgs/development/compilers/llvm/full.nix
new file mode 100644
index 0000000000000..c3ca879c5527e
--- /dev/null
+++ b/pkgs/development/compilers/llvm/full.nix
@@ -0,0 +1,89 @@
+{ stdenv
+, fetchurl
+, perl, groff
+, cmake
+, libxml2
+, python
+, libffi
+, zlib
+, ncurses
+, isl
+, gmp
+, doxygen
+, binutils_gold
+, swig
+, which
+, libedit
+, valgrind
+}:
+
+let
+  version = "3.4";
+
+  fetch = name: sha256: fetchurl {
+    url = "http://llvm.org/releases/${version}/${name}-${version}.src.tar.gz";
+    inherit sha256;
+  };
+
+  inherit (stdenv.lib) concatStrings mapAttrsToList;
+in stdenv.mkDerivation {
+  name = "llvm-full-${version}";
+
+  unpackPhase = ''
+    unpackFile ${fetch "llvm" "0a169ba045r4apb9cv6ncrwl83l7yiajnzirkcdlhj1cd4nn3995"}
+    mv llvm-${version} llvm
+    sourceRoot=$PWD/llvm
+    ${concatStrings (mapAttrsToList (name: { location, sha256 }: ''
+      unpackFile ${fetch name sha256}
+      mv ${name}-${version} $sourceRoot/${location}
+    '') {
+      clang = { location = "tools/clang"; sha256 = "06rb4j1ifbznl3gfhl98s7ilj0ns01p7y7zap4p7ynmqnc6pia92"; };
+      clang-tools-extra = { location = "tools/clang/tools/extra"; sha256 = "1d1822mwxxl9agmyacqjw800kzz5x8xr0sdmi8fgx5xfa5sii1ds"; };
+      compiler-rt = { location = "projects/compiler-rt"; sha256 = "0p5b6varxdqn7q3n77xym63hhq4qqxd2981pfpa65r1w72qqjz7k"; };
+      lld = { location = "tools/lld"; sha256 = "1sd4scqynryfrmcc4h0ljgwn2dgjmbbmf38z50ya6l0janpd2nxz"; };
+      lldb = { location = "tools/lldb"; sha256 = "0h8cmjrhjhigk7k2qll1pcf6jfgmbdzkzfz2i048pkfg851s0x4g"; };
+      polly = { location = "tools/polly"; sha256 = "1rqflmgzg1vzjm0r32c5ck8x3q0qm3g0hh8ggbjazh6x7nvmy6lz"; };
+    })}
+    sed -i 's|/usr/bin/env||' \
+      $sourceRoot/tools/lldb/scripts/Python/finish-swig-Python-LLDB.sh \
+      $sourceRoot/tools/lldb/scripts/Python/build-swig-Python.sh
+  '';
+
+  buildInputs = [ perl
+                  groff
+                  cmake
+                  libxml2
+                  python
+                  libffi
+                  zlib
+                  ncurses
+                  isl
+                  gmp
+                  doxygen
+                  swig
+                  which
+                  libedit
+                  valgrind
+                ];
+
+  cmakeFlags = [
+    "-DCMAKE_BUILD_TYPE=Release"
+    "-DLLVM_ENABLE_FFI=ON"
+    "-DGCC_INSTALL_PREFIX=${stdenv.gcc.gcc}"
+    "-DC_INCLUDE_DIRS=${stdenv.gcc.libc}/include/"
+    "-DLLVM_BINUTILS_INCDIR=${binutils_gold}/include"
+    "-DCMAKE_CXX_FLAGS=-std=c++11"
+  ];
+
+  passthru.gcc = stdenv.gcc.gcc;
+
+  enableParallelBuilding = true;
+
+  meta = {
+    description = "Collection of modular and reusable compiler and toolchain technologies";
+    homepage    = http://llvm.org/;
+    license     = stdenv.lib.licenses.bsd3;
+    maintainers = [ stdenv.lib.maintainers.shlevy ];
+    platforms   = stdenv.lib.platforms.all;
+  };
+}
diff --git a/pkgs/development/libraries/isl/0.12.2.nix b/pkgs/development/libraries/isl/0.12.2.nix
new file mode 100644
index 0000000000000..995cd0510b4c3
--- /dev/null
+++ b/pkgs/development/libraries/isl/0.12.2.nix
@@ -0,0 +1,20 @@
+{ stdenv, fetchurl, gmp }:
+
+stdenv.mkDerivation rec {
+  name = "isl-0.12.2"; # CLooG 0.16.3 fails to build with ISL 0.08.
+
+  src = fetchurl {
+    url = "http://isl.gforge.inria.fr/${name}.tar.bz2";
+    sha256 = "1d0zs64yw6fzs6b7kxq6nh9kvas16h8b43agwh30118jjzpdpczl";
+  };
+
+  buildInputs = [ gmp ];
+
+  meta = {
+    homepage = http://www.kotnet.org/~skimo/isl/;
+    license = "LGPLv2.1";
+    description = "A library for manipulating sets and relations of integer points bounded by linear constraints";
+    maintainers = [ stdenv.lib.maintainers.shlevy ];
+    platforms = stdenv.lib.platforms.all;
+  };
+}
diff --git a/pkgs/development/libraries/libc++/default.nix b/pkgs/development/libraries/libc++/default.nix
index 1d4ef158113a8..964d3727f8f28 100644
--- a/pkgs/development/libraries/libc++/default.nix
+++ b/pkgs/development/libraries/libc++/default.nix
@@ -1,46 +1,26 @@
-{ stdenv, fetchsvn, cmake, libunwind }:
+{ stdenv, fetchurl, fetchsvn, cmake, libcxxabi }:
 
-let rev = "190100"; in
+let
+  version = "3.4";
 
-stdenv.mkDerivation rec {
-  name = "libc++-pre${rev}";
+in stdenv.mkDerivation rec {
+  name = "libc++-${version}";
 
-  src = fetchsvn {
-    url = "http://llvm.org/svn/llvm-project/libcxx/trunk";
-    inherit rev;
-    sha256 = "0hnfvzzrkj797kp9sk2yncvbmiyx0d72k8bys3z7l6i47d37xv03";
+  src = fetchurl {
+    url = "http://llvm.org/releases/${version}/libcxx-${version}.src.tar.gz";
+    sha256 = "1sqd5qhqj7qnn9zjxx9bv7ky4f7xgmh9sbgd53y1kszhg41217xx";
   };
 
-  cxxabi = fetchsvn {
-    url = "http://llvm.org/svn/llvm-project/libcxxabi/trunk";
-    inherit rev;
-    sha256 = "1kdyvngwd229cgmcqpawaf0qizas8bqc0g8s08fmbgwsrh1qrryp";
-  };
-
-  buildInputs = [ cmake ];
-
-  preConfigure = ''
-      sed -i 's/;cxa_demangle.h//' CMakeLists.txt
-      cp -R ${cxxabi} cxxabi
-      chmod u+w -R cxxabi # umm
-      (export NIX_CFLAGS_COMPILE="-I${libunwind}/include -I$PWD/include";
-       export NIX_CFLAGS_LINK="-L${libunwind}/lib -lunwind";
-       cd cxxabi/lib
-       sed -e s,-lstdc++,, -i buildit # do not link to libstdc++!
-       ./buildit
-       mkdir -p $out/lib && cp libc++abi.so.1.0 $out/lib
-       cd $out/lib
-       ln -s libc++abi.so.1.0 libc++abi.so
-       ln -s libc++abi.so.1.0 libc++abi.so.1)
-  '';
+  buildInputs = [ cmake libcxxabi ];
 
   cmakeFlags = [ "-DCMAKE_BUILD_TYPE=Release"
-                 "-DLIBCXX_LIBCXXABI_INCLUDE_PATHS=${cxxabi}/include"
+                 "-DLIBCXX_LIBCXXABI_INCLUDE_PATHS=${libcxxabi}/include"
                  "-DLIBCXX_CXX_ABI=libcxxabi" ];
-  buildPhase = ''NIX_CFLAGS_LINK="-L$out/lib -lc++abi" make'';
 
   enableParallelBuilding = true;
 
+  passthru.abi = libcxxabi;
+
   meta = {
     homepage = http://libcxx.llvm.org/;
     description = "A new implementation of the C++ standard library, targeting C++11";
@@ -49,4 +29,3 @@ stdenv.mkDerivation rec {
     platforms = stdenv.lib.platforms.all;
   };
 }
-
diff --git a/pkgs/development/libraries/libc++abi/default.nix b/pkgs/development/libraries/libc++abi/default.nix
new file mode 100644
index 0000000000000..51d18a7b907f5
--- /dev/null
+++ b/pkgs/development/libraries/libc++abi/default.nix
@@ -0,0 +1,39 @@
+{ stdenv, fetchsvn, libcxx, libunwind }:
+let
+  rev = "199626";
+in stdenv.mkDerivation {
+  name = "libcxxabi-pre-${rev}";
+
+  src = fetchsvn {
+    url = http://llvm.org/svn/llvm-project/libcxxabi/trunk;
+    rev = "199626";
+    sha256 = "0h1x1s40x5r65ar53rv34lmgcfil3zxaknqr64dka1mz29xhhrxy";
+  };
+
+  NIX_CFLAGS_LINK="-L${libunwind}/lib -lunwind";
+
+  postUnpack = ''
+    unpackFile ${libcxx.src}
+    export NIX_CFLAGS_COMPILE="-I${libunwind}/include -I$PWD/include -I$(readlink -f libcxx-*)/include"
+  '';
+
+  installPhase = ''
+    install -d -m 755 $out/include $out/lib
+    install -m 644 lib/libc++abi.so.1.0 $out/lib
+    install -m 644 include/cxxabi.h $out/include
+    ln -s libc++abi.so.1.0 $out/lib/libc++abi.so
+    ln -s libc++abi.so.1.0 $out/lib/libc++abi.so.1
+  '';
+
+  patchPhase = "sed -e s,-lstdc++,, -i lib/buildit";
+
+  buildPhase = "(cd lib; ./buildit)";
+
+  meta = {
+    homepage = http://libcxxabi.llvm.org/;
+    description = "A new implementation of low level support for a standard C++ library";
+    license = "BSD";
+    maintainers = stdenv.lib.maintainers.shlevy;
+    platforms = stdenv.lib.platforms.all;
+  };
+}
diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix
index 6c40c042f81b9..39ce332ea8797 100644
--- a/pkgs/top-level/all-packages.nix
+++ b/pkgs/top-level/all-packages.nix
@@ -1193,6 +1193,7 @@ let
   ised = callPackage ../tools/misc/ised {};
 
   isl = callPackage ../development/libraries/isl { };
+  isl_0_12 = callPackage ../development/libraries/isl/0.12.2.nix { };
 
   isync = callPackage ../tools/networking/isync { };
 
@@ -2298,18 +2299,10 @@ let
 
   ccl = builderDefsPackage ../development/compilers/ccl {};
 
-  clangUnwrapped = callPackage ../development/compilers/llvm/clang.nix {
-    stdenv = if stdenv.isDarwin
-      then stdenvAdapters.overrideGCC stdenv gccApple
-      else stdenvAdapters.overrideGCC stdenv gcc47;
-  };
-
-  clang = wrapClang clangUnwrapped;
+  clang = wrapClang llvmFull;
 
-  libcxxLLVM = callPackage ../development/compilers/llvm { stdenv = libcxxStdenv; version="3.3"; };
-  clangSelf = clangWrapSelf (callPackage ../development/compilers/llvm/clang.nix {
+  llvmFullSelf = clangWrapSelf (llvmFull.override {
      stdenv = libcxxStdenv;
-     llvm = libcxxLLVM;
   });
 
   clangWrapSelf = build: (import ../build-support/clang-wrapper) {
@@ -2325,7 +2318,7 @@ let
 
   #Use this instead of stdenv to build with clang
   clangStdenv = lowPrio (stdenvAdapters.overrideGCC stdenv clang);
-  libcxxStdenv = stdenvAdapters.overrideGCC stdenv (clangWrapSelf clangUnwrapped);
+  libcxxStdenv = stdenvAdapters.overrideGCC stdenv (clangWrapSelf llvmFull);
 
   clean = callPackage ../development/compilers/clean { };
 
@@ -2918,6 +2911,10 @@ let
       else stdenv;
   };
   llvm_33 = llvm_34.override { version = "3.3"; };
+  llvmFull = callPackage ../development/compilers/llvm/full.nix {
+    stdenv = stdenvAdapters.overrideGCC stdenv gcc47;
+    isl = isl_0_12;
+  };
 
   mentorToolchains = recurseIntoAttrs (
     callPackage_i686 ../development/compilers/mentor {}
@@ -3170,9 +3167,9 @@ let
   };
 
   wrapClangWith = clangWrapper: glibc: baseClang: clangWrapper {
-    nativeTools = stdenv ? gcc && stdenv.gcc.nativeTools;
-    nativeLibc = stdenv ? gcc && stdenv.gcc.nativeLibc;
-    nativePrefix = if stdenv ? gcc then stdenv.gcc.nativePrefix else "";
+    nativeTools = stdenv.gcc.nativeTools or false;
+    nativeLibc = stdenv.gcc.nativeLibc or false;
+    nativePrefix = stdenv.gcc.nativePrefix or "";
     clang = baseClang;
     libc = glibc;
     shell = bash;
@@ -3620,6 +3617,7 @@ let
   csslint = callPackage ../development/web/csslint { };
 
   libcxx = callPackage ../development/libraries/libc++ { stdenv = pkgs.clangStdenv; };
+  libcxxabi = callPackage ../development/libraries/libc++abi { stdenv = pkgs.clangStdenv; };
 
   dejagnu = callPackage ../development/tools/misc/dejagnu { };
 
@@ -4131,7 +4129,7 @@ let
 
   dssi = callPackage ../development/libraries/dssi {};
 
-  dragonegg = callPackage ../development/compilers/llvm/dragonegg.nix { };
+  dragonegg = callPackage ../development/compilers/llvm/dragonegg.nix { llvm = llvmFull; stdenv = overrideGCC stdenv gcc47; };
 
   dxflib = callPackage ../development/libraries/dxflib {};
 
diff --git a/pkgs/top-level/release-python.nix b/pkgs/top-level/release-python.nix
index aecb3c85aee8c..e371d894ae1cb 100644
--- a/pkgs/top-level/release-python.nix
+++ b/pkgs/top-level/release-python.nix
@@ -153,7 +153,6 @@ let
   cinepaint = { type = "job"; systems = ["x86_64-linux"]; schedulingPriority = 4; };
   ciopfs = { type = "job"; systems = ["x86_64-linux"]; schedulingPriority = 4; };
   clang = { type = "job"; systems = ["x86_64-linux"]; schedulingPriority = 4; };
-  clangUnwrapped = { type = "job"; systems = ["x86_64-linux"]; schedulingPriority = 4; };
   clanlib = { type = "job"; systems = ["x86_64-linux"]; schedulingPriority = 4; };
   classpath = { type = "job"; systems = ["x86_64-linux"]; schedulingPriority = 4; };
   clearsilver = { type = "job"; systems = ["x86_64-linux"]; schedulingPriority = 4; };