@@ 1,206 1,215 @@
-{ lowPrio, newScope, pkgs, stdenv, cmake, gccForLibs
-, libxml2, python3, isl, fetchurl, overrideCC, wrapCCWith, wrapBintoolsWith
-, buildPackages
+{ lowPrio, newScope, pkgs, 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
, genodePackages ? null }:
let
release_version = "11.0.0";
- version = release_version; # differentiating these (variables) is important for RCs
+ version =
+ release_version; # 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}/${name}-${version}.src.tar.xz";
- inherit sha256;
- };
-
- clang-tools-extra_src = fetch "clang-tools-extra" "02bcwwn54661madhq4nxc069s7p7pj5gpqi8ww50w3anbpviilzy";
-
- 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"
- ln -s "${targetLlvmLibraries.compiler-rt.out}/share" "$rsrc/share"
- echo "-resource-dir=$rsrc" >> $out/nix-support/cc-cflags
- '' + stdenv.lib.optionalString (stdenv.targetPlatform.isLinux && !(stdenv.targetPlatform.useLLVM or false)) ''
- echo "--gcc-toolchain=${gccForLibs}" >> $out/nix-support/cc-cflags
- '';
- in {
-
- llvm = callPackage ./llvm.nix { };
-
- clang-unwrapped = callPackage ./clang {
- inherit (tools) lld;
- inherit clang-tools-extra_src;
+ fetch = name: sha256:
+ fetchurl {
+ url =
+ "https://github.com/llvm/llvm-project/releases/download/llvmorg-${release_version}/${name}-${version}.src.tar.xz";
+ inherit sha256;
};
- # 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;
- # libstdcxx is taken from gcc in an ad-hoc way in cc-wrapper.
- libcxx = null;
- 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.
+ clang-tools-extra_src = fetch "clang-tools-extra"
+ "02bcwwn54661madhq4nxc069s7p7pj5gpqi8ww50w3anbpviilzy";
+
+ 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"
+ ln -s "${targetLlvmLibraries.compiler-rt.out}/share" "$rsrc/share"
+ echo "-resource-dir=$rsrc" >> $out/nix-support/cc-cflags
+ '' + stdenv.lib.optionalString (stdenv.targetPlatform.isLinux
+ && !(stdenv.targetPlatform.useLLVM or false)) ''
+ echo "--gcc-toolchain=${gccForLibs}" >> $out/nix-support/cc-cflags
+ '';
+ in {
+
+ llvm = callPackage ./llvm.nix { };
+
+ clang-unwrapped = callPackage ./clang {
+ inherit (tools) lld;
+ inherit clang-tools-extra_src;
+ };
- bintools = callPackage ./bintools.nix {};
+ # 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;
+ # libstdcxx is taken from gcc in an ad-hoc way in cc-wrapper.
+ libcxx = null;
+ extraPackages = [ targetLlvmLibraries.compiler-rt ];
+ extraBuildCommands = mkExtraBuildCommands cc;
+ };
- lldClang = wrapCCWith rec {
- cc = tools.clang-unwrapped;
- libcxx = targetLlvmLibraries.libcxx;
- bintools = wrapBintoolsWith {
- inherit (tools) bintools;
+ libcxxClang = wrapCCWith rec {
+ cc = tools.clang-unwrapped;
+ libcxx = targetLlvmLibraries.libcxx;
+ extraPackages =
+ [ targetLlvmLibraries.libcxxabi targetLlvmLibraries.compiler-rt ];
+ extraBuildCommands = mkExtraBuildCommands cc;
};
- 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
- '' + stdenv.lib.optionalString stdenv.targetPlatform.isGenode ''
- echo "-I${genodeBase}/include" >> $out/nix-support/cc-cflags
- echo "--sysroot=${genodeBase}" >> $out/nix-support/cc-cflags
- echo "-L ${genodeBase}" >> $out/nix-support/cc-cflags
- '' + mkExtraBuildCommands cc;
- };
- lldClangNoLibcxx = wrapCCWith rec {
- cc = tools.clang-unwrapped;
- libcxx = null;
- bintools = wrapBintoolsWith {
- inherit (tools) bintools;
+ 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 = if stdenv.targetPlatform.isGenode then
+ wrapCCWith rec {
+ cc = tools.clang-unwrapped;
+ extraBuildCommands = ''
+ echo "--gcc-toolchain=${genodePackages.genodeSources.toolchain.cc}" >> $out/nix-support/cc-cflags
+ echo "--sysroot=${genodePackages.genodeSources.genodeBase}" >> $out/nix-support/cc-cflags
+ echo "-I${genodePackages.genodeSources.genodeBase}/include" >> $out/nix-support/cc-cflags
+ echo "-L ${genodePackages.genodeSources.genodeBase}" >> $out/nix-support/cc-cflags
+ '';
+ }
+ else
+ 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
+ '' + stdenv.lib.optionalString stdenv.targetPlatform.isGenode ''
+ echo "-I${genodePackages.genodeSources.genodeBase}/include" >> $out/nix-support/cc-cflags
+ echo "--sysroot=${genodePackages.genodeSources.genodeBase}" >> $out/nix-support/cc-cflags
+ echo "-L ${genodePackages.genodeSources.genodeBase}" >> $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
+ '' + stdenv.lib.optionalString stdenv.targetPlatform.isGenode ''
+ echo "-I${genodePackages.genodeSources.genodeBase}/include" >> $out/nix-support/cc-cflags
+ echo "--sysroot=${genodePackages.genodeSources.genodeBase}" >> $out/nix-support/cc-cflags
+ echo "-L${genodePackages.genodeSources.genodeBase}" >> $out/nix-support/cc-cflags
+ echo "-noposix" >> $out/nix-support/cc-cflags
+ '' + mkExtraBuildCommands cc;
};
- 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
- '' + stdenv.lib.optionalString stdenv.targetPlatform.isGenode ''
- echo "-I${genodeBase}/include" >> $out/nix-support/cc-cflags
- echo "--sysroot=${genodeBase}" >> $out/nix-support/cc-cflags
- echo "-L${genodeBase}" >> $out/nix-support/cc-cflags
- echo "-noposix" >> $out/nix-support/cc-cflags
- '' + mkExtraBuildCommands cc;
- };
- lldClangNoLibc = wrapCCWith rec {
- cc = tools.clang-unwrapped;
- libcxx = null;
- bintools = wrapBintoolsWith {
- inherit (tools) bintools;
- libc = null;
+ 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;
};
- 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;
+ lldClangNoCompilerRt = wrapCCWith {
+ cc = tools.clang-unwrapped;
+ libcxx = null;
+ bintools = wrapBintoolsWith {
+ inherit (tools) bintools;
+ libc = null;
+ };
+ extraPackages = [ ];
+ extraBuildCommands = ''
+ echo "-nostartfiles" >> $out/nix-support/cc-cflags
+ '';
};
- 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 {
+ 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;
- }));
+ compiler-rt = callPackage ./compiler-rt.nix ({ }
+ // (stdenv.lib.optionalAttrs (stdenv.hostPlatform.useLLVM or false) {
+ stdenv = overrideCC stdenv buildLlvmTools.lldClangNoCompilerRt;
+ }));
- stdenv = overrideCC stdenv buildLlvmTools.clang;
+ stdenv = overrideCC stdenv buildLlvmTools.clang;
- libcxxStdenv = overrideCC stdenv buildLlvmTools.libcxxClang;
+ libcxxStdenv = overrideCC stdenv buildLlvmTools.libcxxClang;
- libcxx = callPackage ./libc++ ({} //
- (stdenv.lib.optionalAttrs (stdenv.hostPlatform.useLLVM or false) {
- stdenv = overrideCC stdenv buildLlvmTools.lldClangNoLibcxx;
- }));
+ 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;
- }));
+ 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 {};
+ openmp = callPackage ./openmp.nix { };
- libunwind = callPackage ./libunwind.nix ({} //
- (stdenv.lib.optionalAttrs (stdenv.hostPlatform.useLLVM or false) {
- stdenv = overrideCC stdenv buildLlvmTools.lldClangNoLibcxx;
- }));
+ libunwind = callPackage ./libunwind.nix ({ }
+ // (stdenv.lib.optionalAttrs (stdenv.hostPlatform.useLLVM or false) {
+ stdenv = overrideCC stdenv buildLlvmTools.lldClangNoLibcxx;
+ }));
- });
+ });
in { inherit tools libraries; } // libraries // tools