summary refs log tree commit diff
path: root/pkgs/development/compilers/llvm/3.5
diff options
context:
space:
mode:
authorEric Seidel <gridaphobe@gmail.com>2015-02-03 14:41:12 -0800
committerEric Seidel <gridaphobe@gmail.com>2015-02-03 14:58:10 -0800
commit4a467ec02bedf5ba811fc086e11cf41a51d45957 (patch)
tree8058ea1968ca15465ce294246c8329ab4d0593aa /pkgs/development/compilers/llvm/3.5
parentfe49487a0535b928c4c337a4f69d8578c500be64 (diff)
downloadnixlib-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')
-rw-r--r--pkgs/development/compilers/llvm/3.5/default.nix6
-rw-r--r--pkgs/development/compilers/llvm/3.5/libc++/darwin.patch30
-rw-r--r--pkgs/development/compilers/llvm/3.5/libc++/default.nix48
-rw-r--r--pkgs/development/compilers/llvm/3.5/libc++/setup-hook.sh2
-rw-r--r--pkgs/development/compilers/llvm/3.5/libc++abi/darwin.patch17
-rw-r--r--pkgs/development/compilers/llvm/3.5/libc++abi/default.nix53
-rw-r--r--pkgs/development/compilers/llvm/3.5/libc++abi/no-stdc++.patch12
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
+