|
|
|
@ -38,7 +38,13 @@ |
|
|
|
|
"x86_64-windows" = newBuildTarget { |
|
|
|
|
nixPkgsSystem = "x86_64-w64-mingw32"; |
|
|
|
|
rustTarget = "x86_64-pc-windows-gnu"; |
|
|
|
|
nativeBuildInputs = pkgsCross: [ pkgsCross.windows.pthreads ]; |
|
|
|
|
nativeBuildInputs = pkgsCross: [ |
|
|
|
|
pkgsCross.stdenv.cc |
|
|
|
|
pkgsCross.windows.pthreads |
|
|
|
|
]; |
|
|
|
|
rustFlags = pkgsCross: [ |
|
|
|
|
"-C" "link-arg=-L${pkgsCross.windows.pthreads}/lib" |
|
|
|
|
]; |
|
|
|
|
}; |
|
|
|
|
}; |
|
|
|
|
|
|
|
|
@ -62,12 +68,29 @@ |
|
|
|
|
# "$system.cross-$system" for every system. |
|
|
|
|
# |
|
|
|
|
eachCrossSystem = supportedSystems: callback: |
|
|
|
|
eachSystem supportedSystems (buildSystem: builtins.foldl' |
|
|
|
|
eachSystem supportedSystems (buildSystem: let |
|
|
|
|
pkgs = mkPkgs buildSystem null; |
|
|
|
|
crosses = builtins.foldl' |
|
|
|
|
(inner: targetSystem: inner // { |
|
|
|
|
"cross-${targetSystem}" = callback buildSystem targetSystem; |
|
|
|
|
}) |
|
|
|
|
{ default = callback buildSystem buildSystem; } |
|
|
|
|
supportedSystems |
|
|
|
|
supportedSystems; |
|
|
|
|
in |
|
|
|
|
crosses // (rec { |
|
|
|
|
default = callback buildSystem buildSystem; |
|
|
|
|
release = let |
|
|
|
|
bins = pkgs.symlinkJoin { |
|
|
|
|
name = "${default.name}-all-bins"; |
|
|
|
|
paths = builtins.attrValues crosses; |
|
|
|
|
}; |
|
|
|
|
in |
|
|
|
|
pkgs.runCommand "${default.name}-release" {} '' |
|
|
|
|
cp -rL "${bins}" "$out" |
|
|
|
|
chmod +w "$out"/bin |
|
|
|
|
(cd "$out"/bin && sha256sum * > sha256.txt) |
|
|
|
|
''; |
|
|
|
|
}) |
|
|
|
|
); |
|
|
|
|
|
|
|
|
|
mkPkgs = buildSystem: targetSystem: import nixpkgs ({ |
|
|
|
@ -82,20 +105,9 @@ |
|
|
|
|
})); |
|
|
|
|
|
|
|
|
|
mkToolchain = buildSystem: targetSystem: let |
|
|
|
|
debug = v: builtins.trace v v; |
|
|
|
|
buildTarget = buildTargets.${targetSystem}; |
|
|
|
|
rustTarget = buildTarget.rustTarget; |
|
|
|
|
#fenixPkgs = fenix.packages.${buildSystem}; |
|
|
|
|
|
|
|
|
|
# TODO prefer to use the nix flake fenix |
|
|
|
|
fenixPkgs = import ((mkPkgs buildSystem null).fetchFromGitHub { |
|
|
|
|
owner = "nix-community"; |
|
|
|
|
repo = "fenix"; |
|
|
|
|
rev = "81ab0b4f7ae9ebb57daa0edf119c4891806e4d3a"; |
|
|
|
|
hash = "sha256-bZmI7ytPAYLpyFNgj5xirDkKuAniOkj1xHdv5aIJ5GM="; |
|
|
|
|
}) { |
|
|
|
|
system = buildSystem; |
|
|
|
|
}; |
|
|
|
|
fenixPkgs = fenix.packages.${buildSystem}; |
|
|
|
|
|
|
|
|
|
# TODO I'd prefer to use the toolchain file |
|
|
|
|
# https://github.com/nix-community/fenix/issues/123 |
|
|
|
@ -145,7 +157,7 @@ |
|
|
|
|
|
|
|
|
|
# https://github.com/rust-lang/cargo/issues/4133 |
|
|
|
|
"-C" "linker=${TARGET_CC}" |
|
|
|
|
]; |
|
|
|
|
] ++ (buildTarget.rustFlags pkgsCross); |
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
in { |
|
|
|
@ -165,6 +177,17 @@ |
|
|
|
|
strictDeps = true; |
|
|
|
|
doCheck = false; |
|
|
|
|
release = true; |
|
|
|
|
postInstall = '' |
|
|
|
|
cd "$out"/bin |
|
|
|
|
for f in "$(ls)"; do |
|
|
|
|
if ext="$(echo "$f" | grep -oP '\.[a-z]+$')"; then |
|
|
|
|
base="$(echo "$f" | cut -d. -f1)" |
|
|
|
|
mv "$f" "$base-${targetSystem}$ext" |
|
|
|
|
else |
|
|
|
|
mv "$f" "$f-${targetSystem}" |
|
|
|
|
fi |
|
|
|
|
done |
|
|
|
|
''; |
|
|
|
|
} // (buildEnv buildSystem targetSystem)) |
|
|
|
|
); |
|
|
|
|
|
|
|
|
|