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