diff options
author | Eric Seidel <gridaphobe@gmail.com> | 2015-02-03 14:41:12 -0800 |
---|---|---|
committer | Eric Seidel <gridaphobe@gmail.com> | 2015-02-03 14:58:10 -0800 |
commit | 4a467ec02bedf5ba811fc086e11cf41a51d45957 (patch) | |
tree | 8058ea1968ca15465ce294246c8329ab4d0593aa /pkgs/development/compilers/llvm/3.5 | |
parent | fe49487a0535b928c4c337a4f69d8578c500be64 (diff) | |
download | nixlib-4a467ec02bedf5ba811fc086e11cf41a51d45957.tar nixlib-4a467ec02bedf5ba811fc086e11cf41a51d45957.tar.gz nixlib-4a467ec02bedf5ba811fc086e11cf41a51d45957.tar.bz2 nixlib-4a467ec02bedf5ba811fc086e11cf41a51d45957.tar.lz nixlib-4a467ec02bedf5ba811fc086e11cf41a51d45957.tar.xz nixlib-4a467ec02bedf5ba811fc086e11cf41a51d45957.tar.zst nixlib-4a467ec02bedf5ba811fc086e11cf41a51d45957.zip |
move libcxx[abi] into llvm tree
Diffstat (limited to 'pkgs/development/compilers/llvm/3.5')
7 files changed, 167 insertions, 1 deletions
diff --git a/pkgs/development/compilers/llvm/3.5/default.nix b/pkgs/development/compilers/llvm/3.5/default.nix index c2c4b484e112..29e06768a738 100644 --- a/pkgs/development/compilers/llvm/3.5/default.nix +++ b/pkgs/development/compilers/llvm/3.5/default.nix @@ -1,4 +1,4 @@ -{ newScope, stdenv, isl, fetchurl }: +{ pkgs, newScope, stdenv, isl, fetchurl }: let callPackage = newScope (self // { inherit stdenv isl version fetch; }); @@ -33,5 +33,9 @@ let polly = callPackage ./polly.nix {}; dragonegg = callPackage ./dragonegg.nix {}; + + libcxx = callPackage ./libc++ { stdenv = pkgs.clangStdenv; }; + + libcxxabi = callPackage ./libc++abi { stdenv = pkgs.clangStdenv; }; }; in self diff --git a/pkgs/development/compilers/llvm/3.5/libc++/darwin.patch b/pkgs/development/compilers/llvm/3.5/libc++/darwin.patch new file mode 100644 index 000000000000..bf83f169cfc3 --- /dev/null +++ b/pkgs/development/compilers/llvm/3.5/libc++/darwin.patch @@ -0,0 +1,30 @@ +diff -ru -x '*~' libcxx-3.4.2.src-orig/lib/CMakeLists.txt libcxx-3.4.2.src/lib/CMakeLists.txt +--- libcxx-3.4.2.src-orig/lib/CMakeLists.txt 2013-11-15 18:18:57.000000000 +0100 ++++ libcxx-3.4.2.src/lib/CMakeLists.txt 2014-09-24 14:04:01.000000000 +0200 +@@ -56,7 +56,7 @@ + "-compatibility_version 1" + "-current_version ${LIBCXX_VERSION}" + "-install_name /usr/lib/libc++.1.dylib" +- "-Wl,-reexport_library,/usr/lib/libc++abi.dylib" ++ "-Wl,-reexport_library,${LIBCXX_LIBCXXABI_LIB_PATH}/libc++abi.dylib" + "-Wl,-unexported_symbols_list,${CMAKE_CURRENT_SOURCE_DIR}/libc++unexp.exp" + "/usr/lib/libSystem.B.dylib") + else() +@@ -64,14 +64,14 @@ + list(FIND ${CMAKE_OSX_ARCHITECTURES} "armv7" OSX_HAS_ARMV7) + if (OSX_HAS_ARMV7) + set(OSX_RE_EXPORT_LINE +- "${CMAKE_OSX_SYSROOT}/usr/lib/libc++abi.dylib" ++ "${CMAKE_OSX_SYSROOT}${LIBCXX_LIBCXXABI_LIB_PATH}/libc++abi.dylib" + "-Wl,-reexported_symbols_list,${CMAKE_CURRENT_SOURCE_DIR}/libc++sjlj-abi.exp") + else() + set(OSX_RE_EXPORT_LINE +- "-Wl,-reexport_library,${CMAKE_OSX_SYSROOT}/usr/lib/libc++abi.dylib") ++ "-Wl,-reexport_library,${CMAKE_OSX_SYSROOT}${LIBCXX_LIBCXXABI_LIB_PATH}/libc++abi.dylib") + endif() + else() +- set (OSX_RE_EXPORT_LINE "/usr/lib/libc++abi.dylib -Wl,-reexported_symbols_list,${CMAKE_CURRENT_SOURCE_DIR}/libc++abi${LIBCXX_LIBCPPABI_VERSION}.exp") ++ set (OSX_RE_EXPORT_LINE "${LIBCXX_LIBCXXABI_LIB_PATH}/libc++abi.dylib -Wl,-reexported_symbols_list,${CMAKE_CURRENT_SOURCE_DIR}/libc++abi${LIBCXX_LIBCPPABI_VERSION}.exp") + endif() + + list(APPEND link_flags diff --git a/pkgs/development/compilers/llvm/3.5/libc++/default.nix b/pkgs/development/compilers/llvm/3.5/libc++/default.nix new file mode 100644 index 000000000000..460d71922c60 --- /dev/null +++ b/pkgs/development/compilers/llvm/3.5/libc++/default.nix @@ -0,0 +1,48 @@ +{ lib, stdenv, fetchurl, cmake, libcxxabi, fixDarwinDylibNames }: + +let version = "3.5.0"; in + +stdenv.mkDerivation rec { + name = "libc++-${version}"; + + src = fetchurl { + 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; + + cmakeFlags = + [ "-DCMAKE_BUILD_TYPE=Release" + "-DLIBCXX_LIBCXXABI_INCLUDE_PATHS=${libcxxabi}/include" + "-DLIBCXX_LIBCXXABI_LIB_PATH=${libcxxabi}/lib" + "-DLIBCXX_LIBCPPABI_VERSION=2" + "-DLIBCXX_CXX_ABI=libcxxabi" + ]; + + enableParallelBuilding = true; + + inherit libcxxabi; + + setupHook = ./setup-hook.sh; + + meta = { + homepage = http://libcxx.llvm.org/; + description = "A new implementation of the C++ standard library, targeting C++11"; + license = "BSD"; + maintainers = [ stdenv.lib.maintainers.shlevy ]; + platforms = stdenv.lib.platforms.unix; + }; +} diff --git a/pkgs/development/compilers/llvm/3.5/libc++/setup-hook.sh b/pkgs/development/compilers/llvm/3.5/libc++/setup-hook.sh new file mode 100644 index 000000000000..8543d09d8f52 --- /dev/null +++ b/pkgs/development/compilers/llvm/3.5/libc++/setup-hook.sh @@ -0,0 +1,2 @@ +export NIX_CFLAGS_COMPILE+=" -isystem @out@/include/c++/v1 -stdlib=libc++" +export NIX_CFLAGS_LINK+=" -stdlib=libc++ -Wl,-rpath,@libcxxabi@/lib" diff --git a/pkgs/development/compilers/llvm/3.5/libc++abi/darwin.patch b/pkgs/development/compilers/llvm/3.5/libc++abi/darwin.patch new file mode 100644 index 000000000000..53ea8783f7a8 --- /dev/null +++ b/pkgs/development/compilers/llvm/3.5/libc++abi/darwin.patch @@ -0,0 +1,17 @@ +diff -ru -x '*~' libcxxabi-orig/lib/buildit libcxxabi/lib/buildit +--- libcxxabi-orig/lib/buildit 2014-09-18 16:54:14.000000000 +0200 ++++ libcxxabi/lib/buildit 2014-09-24 13:22:27.000000000 +0200 +@@ -51,12 +51,8 @@ + -dynamiclib -nodefaultlibs \ + -current_version ${RC_ProjectSourceVersion} \ + -compatibility_version 1 \ +- -install_name /usr/lib/libc++abi.dylib \ ++ -install_name $out/lib/libc++abi.dylib \ + -lSystem" +- if [ -f "${SDKROOT}/usr/local/lib/libCrashReporterClient.a" ] +- then +- LDSHARED_FLAGS+=" -lCrashReporterClient" +- fi + ;; + *-*-mingw*) + # FIXME: removing libgcc and libsupc++ dependencies means porting libcxxrt and LLVM/compiler-rt diff --git a/pkgs/development/compilers/llvm/3.5/libc++abi/default.nix b/pkgs/development/compilers/llvm/3.5/libc++abi/default.nix new file mode 100644 index 000000000000..492dbf3b06da --- /dev/null +++ b/pkgs/development/compilers/llvm/3.5/libc++abi/default.nix @@ -0,0 +1,53 @@ +{ stdenv, cmake, coreutils, fetchurl, libcxx, libunwind, llvm }: + +let version = "3.5.0"; in + +stdenv.mkDerivation { + name = "libc++abi-${version}"; + + src = fetchurl { + url = "http://llvm.org/releases/${version}/libcxxabi-${version}.src.tar.xz"; + sha256 = "1ndcpw3gfrzh7m1jac2qadhkrqgvb65cns69j9niydyj5mmbxijk"; + }; + + NIX_CFLAGS_LINK = "-L${libunwind}/lib"; + + buildInputs = [ coreutils cmake llvm ]; + + postUnpack = '' + unpackFile ${libcxx.src} + 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 + ''; + + installPhase = if stdenv.isDarwin + then '' + 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 + 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 + ''; + + meta = { + homepage = http://libcxxabi.llvm.org/; + description = "A new implementation of low level support for a standard C++ library"; + license = "BSD"; + maintainers = with stdenv.lib.maintainers; [ shlevy vlstill ]; + platforms = stdenv.lib.platforms.unix; + }; +} diff --git a/pkgs/development/compilers/llvm/3.5/libc++abi/no-stdc++.patch b/pkgs/development/compilers/llvm/3.5/libc++abi/no-stdc++.patch new file mode 100644 index 000000000000..ddc9778a486e --- /dev/null +++ b/pkgs/development/compilers/llvm/3.5/libc++abi/no-stdc++.patch @@ -0,0 +1,12 @@ +diff -ru -x '*~' libcxxabi-orig/lib/buildit libcxxabi/lib/buildit +--- libcxxabi-orig/lib/buildit 2014-09-18 16:54:14.000000000 +0200 ++++ libcxxabi/lib/buildit 2014-09-24 13:22:27.000000000 +0200 +@@ -70,7 +66,7 @@ + SOEXT=so + LDSHARED_FLAGS="-o libc++abi.so.1.0 \ + -shared -nodefaultlibs -Wl,-soname,libc++abi.so.1 \ +- -lpthread -lrt -lc -lstdc++" ++ -lpthread -lrt -lc" + ;; + esac + |