diff options
Diffstat (limited to 'pkgs/development/compilers/llvm/7/default.nix')
| -rw-r--r-- | pkgs/development/compilers/llvm/7/default.nix | 46 |
1 files changed, 30 insertions, 16 deletions
diff --git a/pkgs/development/compilers/llvm/7/default.nix b/pkgs/development/compilers/llvm/7/default.nix index 2170177117e1..7aa3f9099cc9 100644 --- a/pkgs/development/compilers/llvm/7/default.nix +++ b/pkgs/development/compilers/llvm/7/default.nix @@ -1,6 +1,5 @@ { lowPrio, newScope, pkgs, lib, stdenv, cmake, gccForLibs , libxml2, python3, isl, fetchurl, overrideCC, wrapCCWith, wrapBintoolsWith -, buildPackages , buildLlvmTools # tools, but from the previous stage, for cross , targetLlvmLibraries # libraries, but from the next stage, for cross }: @@ -18,42 +17,51 @@ let clang-tools-extra_src = fetch "clang-tools-extra" "0lb4kdh7j2fhfz8kd6iv5df7m3pikiryk1vvwsf87spc90n09q0w"; tools = lib.makeExtensible (tools: let - callPackage = newScope (tools // { inherit stdenv cmake libxml2 python3 isl release_version version fetch; }); - mkExtraBuildCommands = cc: '' + callPackage = newScope (tools // { inherit stdenv cmake libxml2 python3 isl release_version version fetch buildLlvmTools; }); + mkExtraBuildCommands0 = cc: '' rsrc="$out/resource-root" mkdir "$rsrc" - ln -s "${cc}/lib/clang/${release_version}/include" "$rsrc" - ln -s "${targetLlvmLibraries.compiler-rt.out}/lib" "$rsrc/lib" + ln -s "${cc.lib}/lib/clang/${release_version}/include" "$rsrc" echo "-resource-dir=$rsrc" >> $out/nix-support/cc-cflags ''; + mkExtraBuildCommands = cc: mkExtraBuildCommands0 cc + '' + ln -s "${targetLlvmLibraries.compiler-rt.out}/lib" "$rsrc/lib" + ''; + in { - llvm = callPackage ./llvm { }; + libllvm = callPackage ./llvm { }; + + # `llvm` historically had the binaries. When choosing an output explicitly, + # we need to reintroduce `outputUnspecified` to get the expected behavior e.g. of lib.get* + llvm = tools.libllvm.out // { outputUnspecified = true; }; + + libllvm-polly = callPackage ./llvm { enablePolly = true; }; - llvm-polly = callPackage ./llvm { enablePolly = true; }; + llvm-polly = tools.libllvm-polly.lib // { outputUnspecified = true; }; - clang-unwrapped = callPackage ./clang { - inherit (tools) lld; + libclang = callPackage ./clang { inherit clang-tools-extra_src; }; + + clang-unwrapped = tools.libclang.out // { outputUnspecified = true; }; + clang-polly-unwrapped = callPackage ./clang { inherit clang-tools-extra_src; - llvm = tools.llvm-polly; + libllvm = tools.libllvm-polly; enablePolly = true; }; - llvm-manpages = lowPrio (tools.llvm.override { + llvm-manpages = lowPrio (tools.libllvm.override { enableManpages = true; python3 = pkgs.python3; # don't use python-boot }); - clang-manpages = lowPrio (tools.clang-unwrapped.override { + clang-manpages = lowPrio (tools.libclang.override { enableManpages = true; python3 = pkgs.python3; # don't use python-boot }); - libclang = tools.clang-unwrapped.lib; - clang = if stdenv.cc.isGNU then tools.libstdcxxClang else tools.libcxxClang; libstdcxxClang = wrapCCWith rec { @@ -141,7 +149,7 @@ let '' + mkExtraBuildCommands cc; }; - lldClangNoCompilerRt = wrapCCWith { + lldClangNoCompilerRt = wrapCCWith rec { cc = tools.clang-unwrapped; libcxx = null; bintools = wrapBintoolsWith { @@ -151,7 +159,7 @@ let extraPackages = [ ]; extraBuildCommands = '' echo "-nostartfiles" >> $out/nix-support/cc-cflags - ''; + '' + mkExtraBuildCommands0 cc; }; }); @@ -181,6 +189,12 @@ let libunwind = libraries.libunwind; })); + libunwind = callPackage ./libunwind ({ + inherit (buildLlvmTools) llvm; + } // lib.optionalAttrs (stdenv.hostPlatform.useLLVM or false) { + stdenv = overrideCC stdenv buildLlvmTools.lldClangNoLibcxx; + }); + openmp = callPackage ./openmp.nix {}; }); |
