llvm: 3.7.1 -> 3.8.0 (close #13801)

vcunat's review:
- let's not switch the default versions of llvm* for now
- the only changes I see is adding python to clang's buildInputs
and using the big so-file as discussed in #12759
(BUILD_SHARED_LIBS -> LLVM_LINK_LLVM_DYLIB)
- in future it will be nice to split libLLVM into a separate output

authored by Andrew Kelley and committed by Vladimír Čunát f5fe051c 58a65c01

+362
+55
pkgs/development/compilers/llvm/3.8/clang/default.nix
···
··· 1 + { stdenv, fetch, cmake, libxml2, libedit, llvm, version, clang-tools-extra_src, python }: 2 + 3 + let 4 + gcc = if stdenv.cc.isGNU then stdenv.cc.cc else stdenv.cc.cc.gcc; 5 + in stdenv.mkDerivation { 6 + name = "clang-${version}"; 7 + 8 + unpackPhase = '' 9 + unpackFile ${fetch "cfe" "1ybcac8hlr9vl3wg8s4v6cp0c0qgqnwprsv85lihbkq3vqv94504"} 10 + mv cfe-${version}.src clang 11 + sourceRoot=$PWD/clang 12 + unpackFile ${clang-tools-extra_src} 13 + mv clang-tools-extra-* $sourceRoot/tools/extra 14 + ''; 15 + 16 + buildInputs = [ cmake libedit libxml2 llvm python ]; 17 + 18 + cmakeFlags = [ 19 + "-DCMAKE_BUILD_TYPE=Release" 20 + "-DCMAKE_CXX_FLAGS=-std=c++11" 21 + ] ++ 22 + # Maybe with compiler-rt this won't be needed? 23 + (stdenv.lib.optional stdenv.isLinux "-DGCC_INSTALL_PREFIX=${gcc}") ++ 24 + (stdenv.lib.optional (stdenv.cc.libc != null) "-DC_INCLUDE_DIRS=${stdenv.cc.libc}/include"); 25 + 26 + patches = [ ./purity.patch ]; 27 + 28 + postPatch = '' 29 + sed -i -e 's/Args.hasArg(options::OPT_nostdlibinc)/true/' lib/Driver/Tools.cpp 30 + sed -i -e 's/DriverArgs.hasArg(options::OPT_nostdlibinc)/true/' lib/Driver/ToolChains.cpp 31 + ''; 32 + 33 + # Clang expects to find LLVMgold in its own prefix 34 + # Clang expects to find sanitizer libraries in its own prefix 35 + postInstall = '' 36 + ln -sv ${llvm}/lib/LLVMgold.so $out/lib 37 + ln -sv ${llvm}/lib/clang/${version}/lib $out/lib/clang/${version}/ 38 + ln -sv $out/bin/clang $out/bin/cpp 39 + ''; 40 + 41 + enableParallelBuilding = true; 42 + 43 + passthru = { 44 + isClang = true; 45 + } // stdenv.lib.optionalAttrs stdenv.isLinux { 46 + inherit gcc; 47 + }; 48 + 49 + meta = { 50 + description = "A c, c++, objective-c, and objective-c++ frontend for the llvm compiler"; 51 + homepage = http://llvm.org/; 52 + license = stdenv.lib.licenses.bsd3; 53 + platforms = stdenv.lib.platforms.all; 54 + }; 55 + }
+17
pkgs/development/compilers/llvm/3.8/clang/purity.patch
···
··· 1 + --- a/lib/Driver/Tools.cpp 2016-02-12 15:51:41.000000000 -0700 2 + +++ b/lib/Driver/Tools.cpp 2016-03-08 15:39:06.790111122 -0700 3 + @@ -8833,15 +8833,6 @@ 4 + CmdArgs.push_back("-shared"); 5 + } 6 + 7 + - if (Arch == llvm::Triple::arm || Arch == llvm::Triple::armeb || 8 + - Arch == llvm::Triple::thumb || Arch == llvm::Triple::thumbeb || 9 + - (!Args.hasArg(options::OPT_static) && 10 + - !Args.hasArg(options::OPT_shared))) { 11 + - CmdArgs.push_back("-dynamic-linker"); 12 + - CmdArgs.push_back(Args.MakeArgString( 13 + - D.DyldPrefix + getLinuxDynamicLinker(Args, ToolChain))); 14 + - } 15 + - 16 + CmdArgs.push_back("-o"); 17 + CmdArgs.push_back(Output.getFilename());
+35
pkgs/development/compilers/llvm/3.8/default.nix
···
··· 1 + { newScope, stdenv, isl, fetchurl, overrideCC, wrapCC }: 2 + let 3 + callPackage = newScope (self // { inherit stdenv isl version fetch; }); 4 + 5 + version = "3.8.0"; 6 + 7 + fetch = fetch_v version; 8 + fetch_v = ver: name: sha256: fetchurl { 9 + url = "http://llvm.org/releases/${ver}/${name}-${ver}.src.tar.xz"; 10 + inherit sha256; 11 + }; 12 + 13 + compiler-rt_src = fetch "compiler-rt" "1c2nkp9563873ffz22qmhc0wakgj428pch8rmhym8agjamz3ily8"; 14 + clang-tools-extra_src = fetch "clang-tools-extra" "1i0yrgj8qrzjjswraz0i55lg92ljpqhvjr619d268vka208aigdg"; 15 + 16 + self = { 17 + llvm = callPackage ./llvm.nix { 18 + inherit compiler-rt_src stdenv; 19 + }; 20 + 21 + clang-unwrapped = callPackage ./clang { 22 + inherit clang-tools-extra_src stdenv; 23 + }; 24 + 25 + clang = wrapCC self.clang-unwrapped; 26 + 27 + stdenv = overrideCC stdenv self.clang; 28 + 29 + lldb = callPackage ./lldb.nix {}; 30 + 31 + libcxx = callPackage ./libc++ {}; 32 + 33 + libcxxabi = callPackage ./libc++abi.nix {}; 34 + }; 35 + in self
+30
pkgs/development/compilers/llvm/3.8/libc++/darwin.patch
···
··· 1 + diff -ru -x '*~' libcxx-3.4.2.src-orig/lib/CMakeLists.txt libcxx-3.4.2.src/lib/CMakeLists.txt 2 + --- libcxx-3.4.2.src-orig/lib/CMakeLists.txt 2013-11-15 18:18:57.000000000 +0100 3 + +++ libcxx-3.4.2.src/lib/CMakeLists.txt 2014-09-24 14:04:01.000000000 +0200 4 + @@ -56,7 +56,7 @@ 5 + "-compatibility_version 1" 6 + "-current_version ${LIBCXX_VERSION}" 7 + "-install_name /usr/lib/libc++.1.dylib" 8 + - "-Wl,-reexport_library,/usr/lib/libc++abi.dylib" 9 + + "-Wl,-reexport_library,${LIBCXX_LIBCXXABI_LIB_PATH}/libc++abi.dylib" 10 + "-Wl,-unexported_symbols_list,${CMAKE_CURRENT_SOURCE_DIR}/libc++unexp.exp" 11 + "/usr/lib/libSystem.B.dylib") 12 + else() 13 + @@ -64,14 +64,14 @@ 14 + list(FIND ${CMAKE_OSX_ARCHITECTURES} "armv7" OSX_HAS_ARMV7) 15 + if (OSX_HAS_ARMV7) 16 + set(OSX_RE_EXPORT_LINE 17 + - "${CMAKE_OSX_SYSROOT}/usr/lib/libc++abi.dylib" 18 + + "${CMAKE_OSX_SYSROOT}${LIBCXX_LIBCXXABI_LIB_PATH}/libc++abi.dylib" 19 + "-Wl,-reexported_symbols_list,${CMAKE_CURRENT_SOURCE_DIR}/libc++sjlj-abi.exp") 20 + else() 21 + set(OSX_RE_EXPORT_LINE 22 + - "-Wl,-reexport_library,${CMAKE_OSX_SYSROOT}/usr/lib/libc++abi.dylib") 23 + + "-Wl,-reexport_library,${CMAKE_OSX_SYSROOT}${LIBCXX_LIBCXXABI_LIB_PATH}/libc++abi.dylib") 24 + endif() 25 + else() 26 + - set (OSX_RE_EXPORT_LINE "/usr/lib/libc++abi.dylib -Wl,-reexported_symbols_list,${CMAKE_CURRENT_SOURCE_DIR}/libc++abi${LIBCXX_LIBCPPABI_VERSION}.exp") 27 + + 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") 28 + endif() 29 + 30 + list(APPEND link_flags
+40
pkgs/development/compilers/llvm/3.8/libc++/default.nix
···
··· 1 + { lib, stdenv, fetch, cmake, libcxxabi, fixDarwinDylibNames, version }: 2 + 3 + stdenv.mkDerivation rec { 4 + name = "libc++-${version}"; 5 + 6 + src = fetch "libcxx" "0i7iyzk024krda5spfpfi8jksh83yp3bxqkal0xp76ffi11bszrm"; 7 + 8 + postUnpack = '' 9 + unpackFile ${libcxxabi.src} 10 + ''; 11 + 12 + preConfigure = '' 13 + # Get headers from the cxxabi source so we can see private headers not installed by the cxxabi package 14 + cmakeFlagsArray=($cmakeFlagsArray -DLIBCXX_CXX_ABI_INCLUDE_PATHS="$NIX_BUILD_TOP/libcxxabi-${version}.src/include") 15 + ''; 16 + 17 + patches = [ ./darwin.patch ]; 18 + 19 + buildInputs = [ cmake libcxxabi ] ++ lib.optional stdenv.isDarwin fixDarwinDylibNames; 20 + 21 + cmakeFlags = 22 + [ "-DCMAKE_BUILD_TYPE=Release" 23 + "-DLIBCXX_LIBCXXABI_LIB_PATH=${libcxxabi}/lib" 24 + "-DLIBCXX_LIBCPPABI_VERSION=2" 25 + "-DLIBCXX_CXX_ABI=libcxxabi" 26 + ]; 27 + 28 + enableParallelBuilding = true; 29 + 30 + linkCxxAbi = stdenv.isLinux; 31 + 32 + setupHook = ./setup-hook.sh; 33 + 34 + meta = { 35 + homepage = http://libcxx.llvm.org/; 36 + description = "A new implementation of the C++ standard library, targeting C++11"; 37 + license = "BSD"; 38 + platforms = stdenv.lib.platforms.unix; 39 + }; 40 + }
+3
pkgs/development/compilers/llvm/3.8/libc++/setup-hook.sh
···
··· 1 + linkCxxAbi="@linkCxxAbi@" 2 + export NIX_CXXSTDLIB_COMPILE+=" -isystem @out@/include/c++/v1" 3 + export NIX_CXXSTDLIB_LINK=" -stdlib=libc++${linkCxxAbi:+" -lc++abi"}"
+47
pkgs/development/compilers/llvm/3.8/libc++abi.nix
···
··· 1 + { stdenv, cmake, fetch, libcxx, libunwind, llvm, version }: 2 + 3 + stdenv.mkDerivation { 4 + name = "libc++abi-${version}"; 5 + 6 + src = fetch "libcxxabi" "0ambfcmr2nh88hx000xb7yjm9lsqjjz49w5mlf6dlxzmj3nslzx4"; 7 + 8 + buildInputs = [ cmake ] ++ stdenv.lib.optional (!stdenv.isDarwin && !stdenv.isFreeBSD) libunwind; 9 + 10 + postUnpack = '' 11 + unpackFile ${libcxx.src} 12 + unpackFile ${llvm.src} 13 + export NIX_CFLAGS_COMPILE+=" -I$PWD/include" 14 + export cmakeFlags="-DLLVM_PATH=$PWD/$(ls -d llvm-*) -DLIBCXXABI_LIBCXX_INCLUDES=$PWD/$(ls -d libcxx-*)/include" 15 + '' + stdenv.lib.optionalString stdenv.isDarwin '' 16 + export TRIPLE=x86_64-apple-darwin 17 + ''; 18 + 19 + installPhase = if stdenv.isDarwin 20 + then '' 21 + for file in lib/*.dylib; do 22 + # this should be done in CMake, but having trouble figuring out 23 + # the magic combination of necessary CMake variables 24 + # if you fancy a try, take a look at 25 + # http://www.cmake.org/Wiki/CMake_RPATH_handling 26 + install_name_tool -id $out/$file $file 27 + done 28 + make install 29 + install -d 755 $out/include 30 + install -m 644 ../include/*.h $out/include 31 + '' 32 + else '' 33 + install -d -m 755 $out/include $out/lib 34 + install -m 644 lib/libc++abi.so.1.0 $out/lib 35 + install -m 644 ../include/cxxabi.h $out/include 36 + ln -s libc++abi.so.1.0 $out/lib/libc++abi.so 37 + ln -s libc++abi.so.1.0 $out/lib/libc++abi.so.1 38 + ''; 39 + 40 + meta = { 41 + homepage = http://libcxxabi.llvm.org/; 42 + description = "A new implementation of low level support for a standard C++ library"; 43 + license = "BSD"; 44 + maintainers = with stdenv.lib.maintainers; [ vlstill ]; 45 + platforms = stdenv.lib.platforms.unix; 46 + }; 47 + }
+49
pkgs/development/compilers/llvm/3.8/lldb.nix
···
··· 1 + { stdenv 2 + , fetch 3 + , cmake 4 + , zlib 5 + , ncurses 6 + , swig 7 + , which 8 + , libedit 9 + , llvm 10 + , clang-unwrapped 11 + , python 12 + , version 13 + }: 14 + 15 + stdenv.mkDerivation { 16 + name = "lldb-${version}"; 17 + 18 + src = fetch "lldb" "008fdbyza13ym3v0xpans4z4azw4y16hcbgrrnc4rx2mxwaw62ws"; 19 + 20 + patchPhase = '' 21 + sed -i 's|/usr/bin/env||' \ 22 + scripts/Python/finish-swig-Python-LLDB.sh \ 23 + scripts/Python/build-swig-Python.sh 24 + ''; 25 + 26 + buildInputs = [ cmake python which swig ncurses zlib libedit ]; 27 + 28 + preConfigure = '' 29 + export CXXFLAGS="-pthread" 30 + export LDFLAGS="-ldl" 31 + ''; 32 + 33 + cmakeFlags = [ 34 + "-DCMAKE_BUILD_TYPE=Release" 35 + "-DLLDB_PATH_TO_LLVM_BUILD=${llvm}" 36 + "-DLLDB_PATH_TO_CLANG_BUILD=${clang-unwrapped}" 37 + "-DPYTHON_VERSION_MAJOR=2" 38 + "-DPYTHON_VERSION_MINOR=7" 39 + ]; 40 + 41 + enableParallelBuilding = true; 42 + 43 + meta = { 44 + description = "A next-generation high-performance debugger"; 45 + homepage = http://llvm.org/; 46 + license = stdenv.lib.licenses.bsd3; 47 + platforms = stdenv.lib.platforms.all; 48 + }; 49 + }
+80
pkgs/development/compilers/llvm/3.8/llvm.nix
···
··· 1 + { stdenv 2 + , fetch 3 + , perl 4 + , groff 5 + , cmake 6 + , python 7 + , libffi 8 + , binutils 9 + , libxml2 10 + , valgrind 11 + , ncurses 12 + , version 13 + , zlib 14 + , compiler-rt_src 15 + , libcxxabi 16 + , debugVersion ? false 17 + , enableSharedLibraries ? !stdenv.isDarwin 18 + }: 19 + 20 + let 21 + src = fetch "llvm" "0ikfq0gxac8xpvxj23l4hk8f12ydx48fljgrz1gl9xp0ks704nsm"; 22 + in stdenv.mkDerivation rec { 23 + name = "llvm-${version}"; 24 + 25 + unpackPhase = '' 26 + unpackFile ${src} 27 + mv llvm-${version}.src llvm 28 + sourceRoot=$PWD/llvm 29 + unpackFile ${compiler-rt_src} 30 + mv compiler-rt-* $sourceRoot/projects/compiler-rt 31 + ''; 32 + 33 + buildInputs = [ perl groff cmake libxml2 python libffi ] 34 + ++ stdenv.lib.optional stdenv.isDarwin libcxxabi; 35 + 36 + propagatedBuildInputs = [ ncurses zlib ]; 37 + 38 + # hacky fix: created binaries need to be run before installation 39 + preBuild = '' 40 + mkdir -p $out/ 41 + ln -sv $PWD/lib $out 42 + ''; 43 + 44 + cmakeFlags = with stdenv; [ 45 + "-DCMAKE_BUILD_TYPE=${if debugVersion then "Debug" else "Release"}" 46 + "-DLLVM_INSTALL_UTILS=ON" # Needed by rustc 47 + "-DLLVM_BUILD_TESTS=ON" 48 + "-DLLVM_ENABLE_FFI=ON" 49 + "-DLLVM_ENABLE_RTTI=ON" 50 + ] ++ stdenv.lib.optional enableSharedLibraries [ 51 + "-DLLVM_LINK_LLVM_DYLIB=ON" 52 + ] ++ stdenv.lib.optional (!isDarwin) 53 + "-DLLVM_BINUTILS_INCDIR=${binutils}/include" 54 + ++ stdenv.lib.optionals ( isDarwin) [ 55 + "-DLLVM_ENABLE_LIBCXX=ON" 56 + "-DCAN_TARGET_i386=false" 57 + ]; 58 + 59 + postBuild = '' 60 + rm -fR $out 61 + 62 + paxmark m bin/{lli,llvm-rtdyld} 63 + 64 + paxmark m unittests/ExecutionEngine/JIT/JITTests 65 + paxmark m unittests/ExecutionEngine/MCJIT/MCJITTests 66 + paxmark m unittests/Support/SupportTests 67 + ''; 68 + 69 + enableParallelBuilding = true; 70 + 71 + passthru.src = src; 72 + 73 + meta = { 74 + description = "Collection of modular and reusable compiler and toolchain technologies"; 75 + homepage = http://llvm.org/; 76 + license = stdenv.lib.licenses.bsd3; 77 + maintainers = with stdenv.lib.maintainers; [ lovek323 raskin viric ]; 78 + platforms = stdenv.lib.platforms.all; 79 + }; 80 + }
+6
pkgs/top-level/all-packages.nix
··· 3921 3922 clang = llvmPackages.clang; 3923 3924 clang_37 = llvmPackages_37.clang; 3925 clang_36 = llvmPackages_36.clang; 3926 clang_35 = wrapCC llvmPackages_35.clang; ··· 4418 4419 llvm = llvmPackages.llvm; 4420 4421 llvm_37 = llvmPackages_37.llvm; 4422 llvm_36 = llvmPackages_36.llvm; 4423 llvm_35 = llvmPackages_35.llvm; ··· 4442 }; 4443 4444 llvmPackages_37 = callPackage ../development/compilers/llvm/3.7 { 4445 inherit (stdenvAdapters) overrideCC; 4446 }; 4447
··· 3921 3922 clang = llvmPackages.clang; 3923 3924 + clang_38 = llvmPackages_38.clang; 3925 clang_37 = llvmPackages_37.clang; 3926 clang_36 = llvmPackages_36.clang; 3927 clang_35 = wrapCC llvmPackages_35.clang; ··· 4419 4420 llvm = llvmPackages.llvm; 4421 4422 + llvm_38 = llvmPackages_38.llvm; 4423 llvm_37 = llvmPackages_37.llvm; 4424 llvm_36 = llvmPackages_36.llvm; 4425 llvm_35 = llvmPackages_35.llvm; ··· 4444 }; 4445 4446 llvmPackages_37 = callPackage ../development/compilers/llvm/3.7 { 4447 + inherit (stdenvAdapters) overrideCC; 4448 + }; 4449 + 4450 + llvmPackages_38 = callPackage ../development/compilers/llvm/3.8 { 4451 inherit (stdenvAdapters) overrideCC; 4452 }; 4453