core/pkgs/by-name/ll/llvm/packages.nix
2024-05-13 22:24:10 +01:00

170 lines
5.8 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;
}