From f3aeb3b0ab3e8da1dcdce567e1e608e4268f49a2 Mon Sep 17 00:00:00 2001 From: Dan Peebles Date: Sat, 18 Mar 2017 15:05:55 -0400 Subject: [PATCH] llvm-39: a couple of improvements Splits outputs in clang like we do in 3.8 and 4.0 to avoid runtime dependency on Python in the main derivation. I also disable TSAN on Darwin to maintain consistency with 4.0, which disables it because it forces an unfree dependency in the stdenv. --- .../compilers/llvm/3.9/clang/default.nix | 11 +++++++++++ pkgs/development/compilers/llvm/3.9/llvm.nix | 16 +++++++++------- 2 files changed, 20 insertions(+), 7 deletions(-) diff --git a/pkgs/development/compilers/llvm/3.9/clang/default.nix b/pkgs/development/compilers/llvm/3.9/clang/default.nix index 677c4a526ea4..55938ca016e6 100644 --- a/pkgs/development/compilers/llvm/3.9/clang/default.nix +++ b/pkgs/development/compilers/llvm/3.9/clang/default.nix @@ -29,12 +29,23 @@ let sed -i -e 's/DriverArgs.hasArg(options::OPT_nostdlibinc)/true/' lib/Driver/ToolChains.cpp ''; + outputs = [ "out" "python" ]; + # Clang expects to find LLVMgold in its own prefix # Clang expects to find sanitizer libraries in its own prefix postInstall = '' ln -sv ${llvm}/lib/LLVMgold.so $out/lib ln -sv ${llvm}/lib/clang/${version}/lib $out/lib/clang/${version}/ ln -sv $out/bin/clang $out/bin/cpp + + mkdir -p $python/bin $python/share/clang/ + mv $out/bin/{git-clang-format,scan-view} $python/bin + if [ -e $out/bin/set-xcode-analyzer ]; then + mv $out/bin/set-xcode-analyzer $python/bin + fi + mv $out/share/clang/*.py $python/share/clang + + rm $out/bin/c-index-test ''; enableParallelBuilding = true; diff --git a/pkgs/development/compilers/llvm/3.9/llvm.nix b/pkgs/development/compilers/llvm/3.9/llvm.nix index 62f1514e2315..2c47ec5127f9 100644 --- a/pkgs/development/compilers/llvm/3.9/llvm.nix +++ b/pkgs/development/compilers/llvm/3.9/llvm.nix @@ -40,8 +40,7 @@ in stdenv.mkDerivation rec { outputs = [ "out" ] ++ stdenv.lib.optional enableSharedLibraries "lib"; buildInputs = [ perl groff cmake libxml2 python libffi ] - ++ stdenv.lib.optionals stdenv.isDarwin - [ libcxxabi darwin.cctools darwin.apple_sdk.libs.xpc ]; + ++ stdenv.lib.optionals stdenv.isDarwin [ libcxxabi ]; propagatedBuildInputs = [ ncurses zlib ]; @@ -53,11 +52,15 @@ in stdenv.mkDerivation rec { sha256 = "11sq86spw41v72f676igksapdlsgh7fiqp5qkkmgfj0ndqcn9skf"; }} '' - # hacky fix: New LLVM releases require a newer OS X SDK than - # 10.9. This is a temporary measure until nixpkgs darwin support is - # updated. + # TSAN requires XPC on Darwin, which we have no public/free source files for. We can depend on the Apple frameworks + # to get it, but they're unfree. Since LLVM is rather central to the stdenv, we patch out TSAN support so that Hydra + # can build this. If we didn't do it, basically the entire nixpkgs on Darwin would have an unfree dependency and we'd + # get no binary cache for the entire platform. If you really find yourself wanting the TSAN, make this controllable by + # a flag and turn the flag off during the stdenv build. I realize that this LLVM isn't used in the stdenv but I want to + # keep it consistent with 4.0. We really shouldn't be copying and pasting all this code around... + stdenv.lib.optionalString stdenv.isDarwin '' - sed -i 's/os_trace(\(.*\)");$/printf(\1\\n");/g' ./projects/compiler-rt/lib/sanitizer_common/sanitizer_mac.cc + substituteInPlace ./projects/compiler-rt/cmake/config-ix.cmake \ + --replace 'set(COMPILER_RT_HAS_TSAN TRUE)' 'set(COMPILER_RT_HAS_TSAN FALSE)' '' # Patch llvm-config to return correct library path based on --link-{shared,static}. + stdenv.lib.optionalString (enableSharedLibraries) '' @@ -85,7 +88,6 @@ in stdenv.mkDerivation rec { ++ stdenv.lib.optionals (isDarwin) [ "-DLLVM_ENABLE_LIBCXX=ON" "-DCAN_TARGET_i386=false" - "-DCMAKE_LIBTOOL=${darwin.cctools}/bin/libtool" ]; postBuild = ''