mirror of
https://github.com/isledecomp/isle.git
synced 2026-02-28 06:57:37 +00:00
88 lines
2.3 KiB
Nix
88 lines
2.3 KiB
Nix
{
|
|
fetchzip,
|
|
fetchFromGitHub,
|
|
dockerTools,
|
|
runCommand,
|
|
winePackages,
|
|
wineWowPackages,
|
|
bashInteractive,
|
|
lib,
|
|
|
|
withNinja ? false,
|
|
}:
|
|
let
|
|
cmake-windows = fetchzip rec {
|
|
pname = "cmake-windows";
|
|
version = "3.26.6";
|
|
url = "https://github.com/Kitware/CMake/releases/download/v${version}/cmake-${version}-windows-i386.zip";
|
|
hash = "sha256-nRARroW7KOKkf2orpk0RuB6Bdm7lJandKnW8el15mhE=";
|
|
};
|
|
msvc420 = fetchFromGitHub {
|
|
owner = "itsmattkc";
|
|
repo = "MSVC420";
|
|
rev = "df2c13aad74c094988c6c7e784234c2e778a0e91";
|
|
hash = "sha256-y9j9yRryXuTVCQrhokqMzfo4DGVGG9dE3I+Sqb/tGhY=";
|
|
};
|
|
ninja-win = fetchzip rec {
|
|
pname = "ninja-win";
|
|
version = "1.12.1";
|
|
url = "https://github.com/ninja-build/ninja/releases/download/v${version}/ninja-win.zip";
|
|
hash = "sha256-8iRfRUPWesU9/itcr5xAON4Ed3AUcXGP5pz350tE3r4=";
|
|
stripRoot = false;
|
|
postFetch = ''
|
|
mkdir -p $out/bin
|
|
mv $out/ninja.exe $out/bin
|
|
'';
|
|
};
|
|
|
|
wine = if withNinja then wineWowPackages.minimal else winePackages.minimal;
|
|
simpleWinePrefix =
|
|
runCommand "simple-wine-prefix"
|
|
{
|
|
nativeBuildInputs = [ wine ];
|
|
}
|
|
''
|
|
export WINEPREFIX=$out/root/.wine
|
|
mkdir -p $WINEPREFIX
|
|
wineboot
|
|
|
|
setenv() {
|
|
wine reg ADD 'HKCU\Environment' /v "$1" /d "$2" /f
|
|
# wine doesn't set it synchronously, server gets cut off by docker if you
|
|
# don't give it enough time
|
|
sleep 0.5
|
|
}
|
|
setenv PATH 'C:\bin;C:\windows\system32'
|
|
setenv INCLUDE 'C:\include;C:\msvc\mfc\include'
|
|
setenv LIB 'C:\msvc\lib;C:\msvc\mfc\lib'
|
|
setenv TMP 'Z:\build'
|
|
setenv TEMP 'Z:\build'
|
|
|
|
ln -s /bin $WINEPREFIX/drive_c/bin
|
|
ln -s /include $WINEPREFIX/drive_c/include
|
|
ln -s ${msvc420} $WINEPREFIX/drive_c/msvc
|
|
'';
|
|
|
|
entrypoint = runCommand "isle-entrypoint" { } ''
|
|
mkdir -p $out
|
|
builder="${if withNinja then "Ninja" else "NMake Makefiles"}"
|
|
substituteAll ${../docker/entrypoint.sh} $out/entrypoint.sh
|
|
'';
|
|
in
|
|
dockerTools.streamLayeredImage {
|
|
name = "isle-builder";
|
|
contents = [
|
|
bashInteractive
|
|
entrypoint
|
|
|
|
cmake-windows
|
|
msvc420
|
|
simpleWinePrefix
|
|
wine
|
|
] ++ lib.optional withNinja ninja-win;
|
|
|
|
tag = "isle";
|
|
|
|
config.ENTRYPOINT = [ "./entrypoint.sh" ];
|
|
}
|