Files
revng-revng/crossShell.nix
Your Name db6905c2a2 nix flake
2026-02-21 08:55:25 +01:00

161 lines
4.7 KiB
Nix

{ nixpkgs, system }:
let
pkgs = import nixpkgs { inherit system; };
crossCompiler = (
triple: binutilsVersion: binutilsHash: gccVersion:
let
crossNixpkgs = import nixpkgs {
crossSystem = {
config = triple;
};
inherit system;
};
pkgs2 = crossNixpkgs.buildPackages;
binutils_old_real = pkgs2.bintools.bintools.overrideAttrs {
version = binutilsVersion;
patches = [ ];
outputs = [
"out"
"info"
"man"
"dev"
]; # Omit lib
src = pkgs.fetchurl {
url = "mirror://gnu/binutils/binutils-${binutilsVersion}.tar.bz2";
hash = binutilsHash;
};
};
binutils_old = pkgs2.wrapBintoolsWith {
bintools = binutils_old_real;
};
pkgs3 = pkgs2 // {
#binutils = binutils_old;
#bintools = binutils_old;
# NOTE: we might want to use binutils_old for stdenvNoLibc as well, whih
# is currently otherwise built with non-custom versions of GCC/binutils
stdenv = pkgs2.stdenv // {
cc = pkgs2.stdenv.cc // {
bintools = binutils_old;
};
};
# TODO: we're not applying uclibc configuration. The following does not work:
# stdenvNoLibc = pkgs2.stdenvNoLibc // {
# hostPlatform = pkgs2.hostPlatform // {
# uclibc = pkgs2.hostPlatform.uclibc // {
# extraConfig = "${builtins.readFile ./uClibc.config}";
# };
# };
# };
};
in
(pkgs3.wrapCCWith {
cc = (
pkgs3.callPackage (nixpkgs + "/pkgs/development/compilers/gcc/default.nix") (
{
majorMinorVersion = gccVersion;
noSysDirs = true;
#binutils = binutils_old;
targetPackages = pkgs3;
libcCross = pkgs3.targetPackages.libc;
}
// (
if pkgs.lib.hasInfix "mingw" triple then
{
threadsCross = {
model = "win32";
package = null;
};
}
else
{ }
)
)
);
bintools = binutils_old;
})
);
in
[
# crossNixpkgs.buildPackages.gcc9
# (crossNixpkgs.buildPackages.gcc9.override {
# bintools = crossNixpkgs.buildPackages.gcc9.bintools.overrideAttrs {
# version = "2.35";
# bintools = crossNixpkgs.buildPackages.gcc9.bintools.bintools.overrideAttrs {
# version = "2.35";
# patches = [];
# outputs = [
# "out"
# "info"
# "man"
# "dev"
# ]; # Omit lib
# src = pkgs.fetchurl {
# url = "mirror://gnu/binutils/binutils-2.35.tar.bz2";
# hash = "sha256-fSRmD4cJNnBzjli8x7ewbxIcD8sMqPxENo1nWl75z/c=";
# };
# };
# };
# })
# (
# crossNixpkgs.buildPackages.pkgs.wrapCC (
# crossNixpkgs.buildPackages.pkgs.callPackage (<nixpkgs> + "/pkgs/development/compilers/gcc/default.nix") {
# majorMinorVersion = "9";
# noSysDirs = true;
# }
# )
# )
# TODO: pin musl version, we wanted 1.1.12, we're getting 1.2.5
# TODO: pin uclibc version, we wanted ???, we're getting ???
# We wanted GCC 9.2.0 (got 9.5.0)
(crossCompiler "mips-unknown-linux-musl" "2.35"
"sha256-fSRmD4cJNnBzjli8x7ewbxIcD8sMqPxENo1nWl75z/c="
"13"
)
(crossCompiler "mipsel-unknown-linux-musl" "2.35"
"sha256-fSRmD4cJNnBzjli8x7ewbxIcD8sMqPxENo1nWl75z/c="
"13"
)
# We wanted GCC 7.3.0 (got 9.5.0)
(crossCompiler "aarch64-unknown-linux-musl" "2.35"
"sha256-fSRmD4cJNnBzjli8x7ewbxIcD8sMqPxENo1nWl75z/c="
"13"
)
# We wanted GCC 9.2.0 (got 9.5.0)
(crossCompiler "armv7a-unknown-linux-uclibceabihf" "2.35"
"sha256-fSRmD4cJNnBzjli8x7ewbxIcD8sMqPxENo1nWl75z/c="
"13"
)
# We wanted GCC 11.2.0 (got 11.5.0)
(crossCompiler "x86_64-pc-linux-gnu" "2.39" "sha256-2iSoT+8iAQLdJAQt8G/eqFHCYUpTd/hu/6KPM7exYUg="
"13"
)
# We wanted GCC 9.2.0 (got 9.5.0)
(crossCompiler "i686-unknown-linux-musl" "2.35"
"sha256-fSRmD4cJNnBzjli8x7ewbxIcD8sMqPxENo1nWl75z/c="
"13"
)
# We wanted GCC 7.3.0 (got 9.5.0)
(crossCompiler "s390x-unknown-linux-musl" "2.35"
"sha256-fSRmD4cJNnBzjli8x7ewbxIcD8sMqPxENo1nWl75z/c="
"13"
)
# We wanted GCC 7.3.0 (got 9.5.0)
(crossCompiler "i686-w64-mingw32" "2.35" "sha256-fSRmD4cJNnBzjli8x7ewbxIcD8sMqPxENo1nWl75z/c=" "13")
# We wanted GCC 7.3.0 (got 9.5.0)
(crossCompiler "x86_64-w64-mingw32" "2.35" "sha256-fSRmD4cJNnBzjli8x7ewbxIcD8sMqPxENo1nWl75z/c="
"13"
)
# We wanted GCC 9.2.0 (got 9.5.0)
(crossCompiler "x86_64-unknown-linux-musl" "2.35"
"sha256-fSRmD4cJNnBzjli8x7ewbxIcD8sMqPxENo1nWl75z/c="
"13"
)
]