core/pkgs/by-name/ll/llvm/packages.nix
2024-06-30 09:16:52 +01:00

183 lines
5.9 KiB
Nix

{ ... }:
res: pkgs: super:
with pkgs; {
lld = llvmPackages.lld;
lld_12 = llvmPackages_12.lld;
lld_13 = llvmPackages_13.lld;
lld_14 = llvmPackages_14.lld;
lld_15 = llvmPackages_15.lld;
lld_16 = llvmPackages_16.lld;
lld_17 = llvmPackages_17.lld;
lldb = llvmPackages.lldb;
lldb_12 = llvmPackages_12.lldb;
lldb_13 = llvmPackages_13.lldb;
lldb_14 = llvmPackages_14.lldb;
lldb_15 = llvmPackages_15.lldb;
lldb_16 = llvmPackages_16.lldb;
lldb_17 = llvmPackages_17.lldb;
llvm = llvmPackages.llvm;
llvm_12 = llvmPackages_12.llvm;
llvm_13 = llvmPackages_13.llvm;
llvm_14 = llvmPackages_14.llvm;
llvm_15 = llvmPackages_15.llvm;
llvm_16 = llvmPackages_16.llvm;
llvm_17 = llvmPackages_17.llvm;
mlir_16 = llvmPackages_16.mlir;
mlir_17 = llvmPackages_17.mlir;
libllvm = llvmPackages.libllvm;
llvm-manpages = llvmPackages.llvm-manpages;
llvmPackages =
let
# This returns the minimum supported version for the platform. The
# assumption is that or any later version is good.
choose =
platform:
if platform.isDarwin then
16
else if platform.isFreeBSD then
12
else if platform.isAndroid then
12
else if platform.isLinux then
17
else if platform.isWasm then
16
# For unknown systems, assume the latest version is required.
else
17;
# We take the "max of the mins". Why? Since those are lower bounds of the
# supported version set, this is like intersecting those sets and then
# taking the min bound of that.
minSupported = toString (
lib.trivial.max (choose stdenv.hostPlatform) (choose stdenv.targetPlatform)
);
in
pkgs.${"llvmPackages_${minSupported}"};
llvmPackages_12 = recurseIntoAttrs (
callPackage ./12 ({
inherit (stdenvAdapters) overrideCC;
buildLlvmTools = buildPackages.llvmPackages_12.tools;
targetLlvmLibraries = targetPackages.llvmPackages_12.libraries or llvmPackages_12.libraries;
targetLlvm = targetPackages.llvmPackages_12.llvm or llvmPackages_12.llvm;
})
);
llvmPackages_13 = recurseIntoAttrs (
callPackage ./13 ({
inherit (stdenvAdapters) overrideCC;
buildLlvmTools = buildPackages.llvmPackages_13.tools;
targetLlvmLibraries = targetPackages.llvmPackages_13.libraries or llvmPackages_13.libraries;
targetLlvm = targetPackages.llvmPackages_13.llvm or llvmPackages_13.llvm;
stdenv = if stdenv.cc.cc.isGNU or false then gcc12Stdenv else stdenv; # does not build with gcc13
})
);
llvmPackages_14 = recurseIntoAttrs (
callPackage ./14 ({
inherit (stdenvAdapters) overrideCC;
buildLlvmTools = buildPackages.llvmPackages_14.tools;
targetLlvmLibraries = targetPackages.llvmPackages_14.libraries or llvmPackages_14.libraries;
targetLlvm = targetPackages.llvmPackages_14.llvm or llvmPackages_14.llvm;
})
);
llvmPackages_15 = recurseIntoAttrs (
callPackage ./15 ({
inherit (stdenvAdapters) overrideCC;
buildLlvmTools = buildPackages.llvmPackages_15.tools;
targetLlvmLibraries = targetPackages.llvmPackages_15.libraries or llvmPackages_15.libraries;
targetLlvm = targetPackages.llvmPackages_15.llvm or llvmPackages_15.llvm;
})
);
llvmPackages_16 = recurseIntoAttrs (
callPackage ./16 ({
inherit (stdenvAdapters) overrideCC;
buildLlvmTools = buildPackages.llvmPackages_16.tools;
targetLlvmLibraries = targetPackages.llvmPackages_16.libraries or llvmPackages_16.libraries;
targetLlvm = targetPackages.llvmPackages_16.llvm or llvmPackages_16.llvm;
})
);
llvmPackages_17 = recurseIntoAttrs (
callPackage ./17 ({
inherit (stdenvAdapters) overrideCC;
buildLlvmTools = buildPackages.llvmPackages_17.tools;
targetLlvmLibraries = targetPackages.llvmPackages_17.libraries or llvmPackages_17.libraries;
targetLlvm = targetPackages.llvmPackages_17.llvm or llvmPackages_17.llvm;
})
);
inherit
(rec {
llvmPackages_18 = recurseIntoAttrs (
callPackage ./18 ({
inherit (stdenvAdapters) overrideCC;
buildLlvmTools = buildPackages.llvmPackages_18.tools;
targetLlvmLibraries = targetPackages.llvmPackages_18.libraries or llvmPackages_18.libraries;
targetLlvm = targetPackages.llvmPackages_18.llvm or llvmPackages_18.llvm;
})
);
clang_18 = llvmPackages_18.clang;
lld_18 = llvmPackages_18.lld;
lldb_18 = llvmPackages_18.lldb;
llvm_18 = llvmPackages_18.llvm;
# TODO: Fix clang-tools override
# clang-tools_18 = callPackage ../development/tools/clang-tools {
# llvmPackages = llvmPackages_18;
# };
})
llvmPackages_18
clang_18
lld_18
lldb_18
llvm_18
clang-tools_18
;
wrapClangMulti =
clang:
if stdenv.targetPlatform.system == "x86_64-linux" then
callPackage ./multi.nix {
inherit clang;
gcc32 = pkgsi686Linux.gcc;
gcc64 = pkgs.gcc;
}
else
throw "Multilib ${clang.cc.name} not supported for '${stdenv.targetPlatform.system}'";
clang_multi = wrapClangMulti clang;
clangMultiStdenv = overrideCC stdenv buildPackages.clang_multi;
libclang = llvmPackages.libclang;
clang-manpages = llvmPackages.clang-manpages;
clang-sierraHack = clang.override {
name = "clang-wrapper-with-reexport-hack";
bintools = darwin.binutils.override { useMacosReexportHack = true; };
};
clang = llvmPackages.clang;
clang_12 = llvmPackages_12.clang;
clang_13 = llvmPackages_13.clang;
clang_14 = llvmPackages_14.clang;
clang_15 = llvmPackages_15.clang;
clang_16 = llvmPackages_16.clang;
clang_17 = llvmPackages_17.clang;
#Use this instead of stdenv to build with clang
clangStdenv = if stdenv.cc.isClang then stdenv else lowPrio llvmPackages.stdenv;
clang-sierraHack-stdenv = overrideCC stdenv buildPackages.clang-sierraHack;
libcxxStdenv = if stdenv.isDarwin then stdenv else lowPrio llvmPackages.libcxxStdenv;
}