aboutsummaryrefslogtreecommitdiff
path: root/nixpkgs/pkgs/development/compilers/llvm/11/default.nix
diff options
context:
space:
mode:
Diffstat (limited to 'nixpkgs/pkgs/development/compilers/llvm/11/default.nix')
-rw-r--r--nixpkgs/pkgs/development/compilers/llvm/11/default.nix195
1 files changed, 195 insertions, 0 deletions
diff --git a/nixpkgs/pkgs/development/compilers/llvm/11/default.nix b/nixpkgs/pkgs/development/compilers/llvm/11/default.nix
new file mode 100644
index 00000000000..cbb3df9f687
--- /dev/null
+++ b/nixpkgs/pkgs/development/compilers/llvm/11/default.nix
@@ -0,0 +1,195 @@
+{ lowPrio, newScope, pkgs, stdenv, cmake
+, 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
+}:
+
+let
+ release_version = "11.0.0";
+ candidate = "rc2";
+ version = "${release_version}${candidate}"; # differentiating these (variables) is important for RCs
+ targetConfig = stdenv.targetPlatform.config;
+
+ fetch = name: sha256: fetchurl {
+ url = "https://github.com/llvm/llvm-project/releases/download/llvmorg-${release_version}-${candidate}/${name}-${version}.src.tar.xz";
+ inherit sha256;
+ };
+
+ clang-tools-extra_src = fetch "clang-tools-extra" "0bg2a9nmkdbj5qfd0vvqj8bgchcx1yzmylxxgvh8y5hhj4fz13fs";
+
+ tools = stdenv.lib.makeExtensible (tools: let
+ callPackage = newScope (tools // { inherit stdenv cmake libxml2 python3 isl release_version version fetch; });
+ mkExtraBuildCommands = 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"
+ echo "-resource-dir=$rsrc" >> $out/nix-support/cc-cflags
+ '' + stdenv.lib.optionalString (stdenv.targetPlatform.isLinux && tools.clang-unwrapped ? gcc && !(stdenv.targetPlatform.useLLVM or false)) ''
+ echo "--gcc-toolchain=${tools.clang-unwrapped.gcc}" >> $out/nix-support/cc-cflags
+ '';
+ in {
+
+ llvm = callPackage ./llvm.nix { };
+
+ clang-unwrapped = callPackage ./clang {
+ inherit (tools) lld;
+ inherit clang-tools-extra_src;
+ };
+
+ # disabled until recommonmark supports sphinx 3
+ #Llvm-manpages = lowPrio (tools.llvm.override {
+ # enableManpages = true;
+ # python3 = pkgs.python3; # don't use python-boot
+ #});
+
+ clang-manpages = lowPrio (tools.clang-unwrapped.override {
+ enableManpages = true;
+ python3 = pkgs.python3; # don't use python-boot
+ });
+
+ # disabled until recommonmark supports sphinx 3
+ # lldb-manpages = lowPrio (tools.lldb.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 {
+ cc = tools.clang-unwrapped;
+ libcxx = null; # libstdcxx is smuggled in with clang.gcc
+ extraPackages = [
+ targetLlvmLibraries.compiler-rt
+ ];
+ extraBuildCommands = mkExtraBuildCommands cc;
+ };
+
+ libcxxClang = wrapCCWith rec {
+ cc = tools.clang-unwrapped;
+ libcxx = targetLlvmLibraries.libcxx;
+ extraPackages = [
+ targetLlvmLibraries.libcxxabi
+ targetLlvmLibraries.compiler-rt
+ ];
+ extraBuildCommands = mkExtraBuildCommands cc;
+ };
+
+ lld = callPackage ./lld.nix {};
+
+ lldb = callPackage ./lldb.nix {};
+
+ # Below, is the LLVM bootstrapping logic. It handles building a
+ # fully LLVM toolchain from scratch. No GCC toolchain should be
+ # pulled in. As a consequence, it is very quick to build different
+ # targets provided by LLVM and we can also build for what GCC
+ # doesnโ€™t support like LLVM. Probably we should move to some other
+ # file.
+
+ bintools = callPackage ./bintools.nix {};
+
+ lldClang = wrapCCWith rec {
+ cc = tools.clang-unwrapped;
+ libcxx = targetLlvmLibraries.libcxx;
+ bintools = wrapBintoolsWith {
+ inherit (tools) bintools;
+ };
+ extraPackages = [
+ targetLlvmLibraries.libcxxabi
+ targetLlvmLibraries.compiler-rt
+ ] ++ stdenv.lib.optionals (!stdenv.targetPlatform.isWasm) [
+ targetLlvmLibraries.libunwind
+ ];
+ extraBuildCommands = ''
+ echo "-rtlib=compiler-rt -Wno-unused-command-line-argument" >> $out/nix-support/cc-cflags
+ echo "-B${targetLlvmLibraries.compiler-rt}/lib" >> $out/nix-support/cc-cflags
+ '' + stdenv.lib.optionalString (!stdenv.targetPlatform.isWasm) ''
+ echo "--unwindlib=libunwind" >> $out/nix-support/cc-cflags
+ '' + stdenv.lib.optionalString stdenv.targetPlatform.isWasm ''
+ echo "-fno-exceptions" >> $out/nix-support/cc-cflags
+ '' + mkExtraBuildCommands cc;
+ };
+
+ lldClangNoLibcxx = wrapCCWith rec {
+ cc = tools.clang-unwrapped;
+ libcxx = null;
+ bintools = wrapBintoolsWith {
+ inherit (tools) bintools;
+ };
+ extraPackages = [
+ targetLlvmLibraries.compiler-rt
+ ];
+ extraBuildCommands = ''
+ echo "-rtlib=compiler-rt" >> $out/nix-support/cc-cflags
+ echo "-B${targetLlvmLibraries.compiler-rt}/lib" >> $out/nix-support/cc-cflags
+ echo "-nostdlib++" >> $out/nix-support/cc-cflags
+ '' + mkExtraBuildCommands cc;
+ };
+
+ lldClangNoLibc = wrapCCWith rec {
+ cc = tools.clang-unwrapped;
+ libcxx = null;
+ bintools = wrapBintoolsWith {
+ inherit (tools) bintools;
+ libc = null;
+ };
+ extraPackages = [
+ targetLlvmLibraries.compiler-rt
+ ];
+ extraBuildCommands = ''
+ echo "-rtlib=compiler-rt" >> $out/nix-support/cc-cflags
+ echo "-B${targetLlvmLibraries.compiler-rt}/lib" >> $out/nix-support/cc-cflags
+ '' + mkExtraBuildCommands cc;
+ };
+
+ lldClangNoCompilerRt = wrapCCWith {
+ cc = tools.clang-unwrapped;
+ libcxx = null;
+ bintools = wrapBintoolsWith {
+ inherit (tools) bintools;
+ libc = null;
+ };
+ extraPackages = [ ];
+ extraBuildCommands = ''
+ echo "-nostartfiles" >> $out/nix-support/cc-cflags
+ '';
+ };
+
+ });
+
+ libraries = stdenv.lib.makeExtensible (libraries: let
+ callPackage = newScope (libraries // buildLlvmTools // { inherit stdenv cmake libxml2 python3 isl release_version version fetch; });
+ in {
+
+ compiler-rt = callPackage ./compiler-rt.nix ({} //
+ (stdenv.lib.optionalAttrs (stdenv.hostPlatform.useLLVM or false) {
+ stdenv = overrideCC stdenv buildLlvmTools.lldClangNoCompilerRt;
+ }));
+
+ stdenv = overrideCC stdenv buildLlvmTools.clang;
+
+ libcxxStdenv = overrideCC stdenv buildLlvmTools.libcxxClang;
+
+ libcxx = callPackage ./libc++ ({} //
+ (stdenv.lib.optionalAttrs (stdenv.hostPlatform.useLLVM or false) {
+ stdenv = overrideCC stdenv buildLlvmTools.lldClangNoLibcxx;
+ }));
+
+ libcxxabi = callPackage ./libc++abi.nix ({} //
+ (stdenv.lib.optionalAttrs (stdenv.hostPlatform.useLLVM or false) {
+ stdenv = overrideCC stdenv buildLlvmTools.lldClangNoLibcxx;
+ libunwind = libraries.libunwind;
+ }));
+
+ openmp = callPackage ./openmp.nix {};
+
+ libunwind = callPackage ./libunwind.nix ({} //
+ (stdenv.lib.optionalAttrs (stdenv.hostPlatform.useLLVM or false) {
+ stdenv = overrideCC stdenv buildLlvmTools.lldClangNoLibcxx;
+ }));
+
+ });
+
+in { inherit tools libraries; } // libraries // tools