diff options
Diffstat (limited to 'pkgs/development/compilers/llvm/7/default.nix')
-rw-r--r-- | pkgs/development/compilers/llvm/7/default.nix | 53 |
1 files changed, 37 insertions, 16 deletions
diff --git a/pkgs/development/compilers/llvm/7/default.nix b/pkgs/development/compilers/llvm/7/default.nix index 5dbe4e0d8f3..4d01ea2fae9 100644 --- a/pkgs/development/compilers/llvm/7/default.nix +++ b/pkgs/development/compilers/llvm/7/default.nix @@ -3,6 +3,17 @@ , libxml2, python3, isl, fetchurl, overrideCC, wrapCCWith, wrapBintoolsWith , buildLlvmTools # tools, but from the previous stage, for cross , targetLlvmLibraries # libraries, but from the next stage, for cross +# This is the default binutils, but with *this* version of LLD rather +# than the default LLVM verion's, if LLD is the choice. We use these for +# the `useLLVM` bootstrapping below. +, bootBintoolsNoLibc ? + if stdenv.targetPlatform.linker == "lld" + then null + else pkgs.bintoolsNoLibc +, bootBintools ? + if stdenv.targetPlatform.linker == "lld" + then null + else pkgs.bintools }: let @@ -35,6 +46,15 @@ let ln -s "${targetLlvmLibraries.compiler-rt.out}/lib" "$rsrc/lib" ''; + bintoolsNoLibc' = + if bootBintoolsNoLibc == null + then tools.bintoolsNoLibc + else bootBintoolsNoLibc; + bintools' = + if bootBintools == null + then tools.bintools + else bootBintools; + in { libllvm = callPackage ./llvm { @@ -123,10 +143,10 @@ let bintools = tools.bintools-unwrapped; }; - lldClang = wrapCCWith rec { + clangUseLLVM = wrapCCWith rec { cc = tools.clang-unwrapped; libcxx = targetLlvmLibraries.libcxx; - inherit (tools) bintools; + bintools = bintools'; extraPackages = [ targetLlvmLibraries.libcxxabi targetLlvmLibraries.compiler-rt @@ -145,10 +165,10 @@ let '' + mkExtraBuildCommands cc; }; - lldClangNoLibcxx = wrapCCWith rec { + clangNoLibcxx = wrapCCWith rec { cc = tools.clang-unwrapped; libcxx = null; - inherit (tools) bintools; + bintools = bintools'; extraPackages = [ targetLlvmLibraries.compiler-rt ]; @@ -159,10 +179,10 @@ let '' + mkExtraBuildCommands cc; }; - lldClangNoLibc = wrapCCWith rec { + clangNoLibc = wrapCCWith rec { cc = tools.clang-unwrapped; libcxx = null; - bintools = tools.bintoolsNoLibc; + bintools = bintoolsNoLibc'; extraPackages = [ targetLlvmLibraries.compiler-rt ]; @@ -172,20 +192,20 @@ let '' + mkExtraBuildCommands cc; }; - lldClangNoCompilerRt = wrapCCWith rec { + clangNoCompilerRt = wrapCCWith rec { cc = tools.clang-unwrapped; libcxx = null; - bintools = tools.bintoolsNoLibc; + bintools = bintoolsNoLibc'; extraPackages = [ ]; extraBuildCommands = '' echo "-nostartfiles" >> $out/nix-support/cc-cflags '' + mkExtraBuildCommands0 cc; }; - lldClangNoCompilerRtWithLibc = wrapCCWith rec { + clangNoCompilerRtWithLibc = wrapCCWith rec { cc = tools.clang-unwrapped; libcxx = null; - inherit (tools) bintools; + bintools = bintools'; extraPackages = [ ]; extraBuildCommands = mkExtraBuildCommands0 cc; }; @@ -199,19 +219,20 @@ let compiler-rt-libc = callPackage ./compiler-rt { inherit llvm_meta; stdenv = if stdenv.hostPlatform.useLLVM or false - then overrideCC stdenv buildLlvmTools.lldClangNoCompilerRtWithLibc + then overrideCC stdenv buildLlvmTools.clangNoCompilerRtWithLibc else stdenv; }; compiler-rt-no-libc = callPackage ./compiler-rt { inherit llvm_meta; stdenv = if stdenv.hostPlatform.useLLVM or false - then overrideCC stdenv buildLlvmTools.lldClangNoCompilerRt + then overrideCC stdenv buildLlvmTools.clangNoCompilerRt else stdenv; }; # N.B. condition is safe because without useLLVM both are the same. - compiler-rt = if stdenv.hostPlatform.isAndroid + compiler-rt = + if stdenv.hostPlatform.isAndroid || (stdenv.hostPlatform != stdenv.buildPlatform && stdenv.hostPlatform.isDarwin) then libraries.compiler-rt-libc else libraries.compiler-rt-no-libc; @@ -222,14 +243,14 @@ let libcxx = callPackage ./libcxx { inherit llvm_meta; stdenv = if stdenv.hostPlatform.useLLVM or false - then overrideCC stdenv buildLlvmTools.lldClangNoLibcxx + then overrideCC stdenv buildLlvmTools.clangNoLibcxx else stdenv; }; libcxxabi = callPackage ./libcxxabi { inherit llvm_meta; stdenv = if stdenv.hostPlatform.useLLVM or false - then overrideCC stdenv buildLlvmTools.lldClangNoLibcxx + then overrideCC stdenv buildLlvmTools.clangNoLibcxx else stdenv; }; @@ -237,7 +258,7 @@ let inherit llvm_meta; inherit (buildLlvmTools) llvm; stdenv = if stdenv.hostPlatform.useLLVM or false - then overrideCC stdenv buildLlvmTools.lldClangNoLibcxx + then overrideCC stdenv buildLlvmTools.clangNoLibcxx else stdenv; }; |