From 6f7632a7bddf32d6888780f254827cb52a3e6a90 Mon Sep 17 00:00:00 2001 From: Eric Seidel Date: Tue, 3 Feb 2015 14:02:59 -0800 Subject: [PATCH] update libcxx[abi] to 3.5 --- pkgs/build-support/cc-wrapper/default.nix | 5 +-- pkgs/development/libraries/libc++/default.nix | 16 ++++++-- .../libraries/libc++abi/default.nix | 40 ++++++++++--------- 3 files changed, 36 insertions(+), 25 deletions(-) diff --git a/pkgs/build-support/cc-wrapper/default.nix b/pkgs/build-support/cc-wrapper/default.nix index 0faec6aec21b..5d05b5eff869 100644 --- a/pkgs/build-support/cc-wrapper/default.nix +++ b/pkgs/build-support/cc-wrapper/default.nix @@ -9,7 +9,6 @@ , cc ? null, libc ? null, binutils ? null, coreutils ? null, shell ? stdenv.shell , zlib ? null, extraPackages ? [] , setupHook ? ./setup-hook.sh -, libcxx ? null, libcxxabi ? null }: with stdenv.lib; @@ -35,7 +34,7 @@ stdenv.mkDerivation { preferLocalBuild = true; - inherit cc shell libcxx libcxxabi; + inherit cc shell; libc = if nativeLibc then null else libc; binutils = if nativeTools then null else binutils; # The wrapper scripts use 'cat', so we may need coreutils. @@ -88,7 +87,7 @@ stdenv.mkDerivation { '' + (if nativeTools then '' - ccPath="${nativePrefix}/bin" + ccPath="${if stdenv.isDarwin then cc else nativePrefix}/bin" ldPath="${nativePrefix}/bin" '' else '' echo $cc > $out/nix-support/orig-cc diff --git a/pkgs/development/libraries/libc++/default.nix b/pkgs/development/libraries/libc++/default.nix index 99e9bfe1de2e..86f03e6a8da7 100644 --- a/pkgs/development/libraries/libc++/default.nix +++ b/pkgs/development/libraries/libc++/default.nix @@ -1,15 +1,25 @@ { lib, stdenv, fetchurl, cmake, libcxxabi, fixDarwinDylibNames }: -let version = "3.4.2"; in +let version = "3.5.0"; in stdenv.mkDerivation rec { name = "libc++-${version}"; src = fetchurl { - url = "http://llvm.org/releases/${version}/libcxx-${version}.src.tar.gz"; - sha256 = "0z3jdvgcq995khkpis5c5vaxhbmvbqjlalbhn09k6pgb5zp46rc2"; + url = "http://llvm.org/releases/${version}/libcxx-${version}.src.tar.xz"; + sha256 = "1h5is2jd802344kddm45jcm7bra51llsiv9r34h0rrb3ba2dlic0"; }; + # instead of allowing libc++ to link with /usr/lib/libc++abi.dylib, + # force it to link with our copy + preConfigure = stdenv.lib.optionalString stdenv.isDarwin '' + substituteInPlace lib/CMakeLists.txt \ + --replace 'OSX_RE_EXPORT_LINE "/usr/lib/libc++abi.dylib' \ + 'OSX_RE_EXPORT_LINE "${libcxxabi}/lib/libc++abi.dylib' \ + --replace '"''${CMAKE_OSX_SYSROOT}/usr/lib/libc++abi.dylib"' \ + '"${libcxxabi}/lib/libc++abi.dylib"' + ''; + patches = [ ./darwin.patch ]; buildInputs = [ cmake libcxxabi ] ++ lib.optional stdenv.isDarwin fixDarwinDylibNames; diff --git a/pkgs/development/libraries/libc++abi/default.nix b/pkgs/development/libraries/libc++abi/default.nix index cbfe8e8f6659..492dbf3b06da 100644 --- a/pkgs/development/libraries/libc++abi/default.nix +++ b/pkgs/development/libraries/libc++abi/default.nix @@ -1,46 +1,48 @@ -{ lib, stdenv, fetchurl, libcxx, coreutils, gnused }: +{ stdenv, cmake, coreutils, fetchurl, libcxx, libunwind, llvm }: -let rev = "199626"; in +let version = "3.5.0"; in stdenv.mkDerivation { - name = "libc++abi-${rev}"; + name = "libc++abi-${version}"; src = fetchurl { - url = "http://tarballs.nixos.org/libcxxabi-${rev}.tar.bz2"; - sha256 = "09wr6qwgmdzbmgfkdzfhph9giy0zd6fp3s017fcfy4g0prjn5s4c"; + url = "http://llvm.org/releases/${version}/libcxxabi-${version}.src.tar.xz"; + sha256 = "1ndcpw3gfrzh7m1jac2qadhkrqgvb65cns69j9niydyj5mmbxijk"; }; - patches = [ ./no-stdc++.patch ./darwin.patch ]; + NIX_CFLAGS_LINK = "-L${libunwind}/lib"; - buildInputs = [ coreutils ]; + buildInputs = [ coreutils cmake llvm ]; postUnpack = '' unpackFile ${libcxx.src} - cp -r libcxx-*/include libcxxabi*/ - '' + lib.optionalString stdenv.isDarwin '' + export NIX_CFLAGS_COMPILE+=" -I${libunwind}/include -I$PWD/include" + export cmakeFlags="-DLIBCXXABI_LIBCXX_INCLUDES=$(${coreutils}/bin/readlink -f libcxx-*)/include" + '' + stdenv.lib.optionalString stdenv.isDarwin '' export TRIPLE=x86_64-apple-darwin - # Hack: NIX_CFLAGS_COMPILE doesn't work here because clang++ isn't - # wrapped at this point. - export CXX="clang++ -D_LIBCXX_DYNAMIC_FALLBACK=1" - unset SDKROOT ''; installPhase = if stdenv.isDarwin then '' - install -d -m 755 $out/include $out/lib - install -m 644 lib/libc++abi.dylib $out/lib - install -m 644 include/cxxabi.h $out/include + for file in lib/*; do + # this should be done in CMake, but having trouble figuring out + # the magic combination of necessary CMake variables + # if you fancy a try, take a look at + # http://www.cmake.org/Wiki/CMake_RPATH_handling + install_name_tool -id $out/$file $file + done + make install + install -d 755 $out/include + install -m 644 ../include/cxxabi.h $out/include '' else '' 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 + 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 ''; - buildPhase = "(cd lib; ./buildit)"; - meta = { homepage = http://libcxxabi.llvm.org/; description = "A new implementation of low level support for a standard C++ library";