Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
31 changes: 24 additions & 7 deletions lib/systems/examples.nix
Original file line number Diff line number Diff line change
Expand Up @@ -341,32 +341,49 @@ rec {
# Windows
#

# 32 bit mingw-w64
mingw32 = {
# mingw-w64 with MSVCRT for i686
mingw-msvcrt-i686 = {
config = "i686-w64-mingw32";
libc = "msvcrt"; # This distinguishes the mingw (non posix) toolchain
};

# 64 bit mingw-w64
mingwW64 = {
# mingw-w64 with MSVCRT for x86_64
mingw-msvcrt-x86_64 = {
# That's the triplet they use in the mingw-w64 docs.
config = "x86_64-w64-mingw32";
libc = "msvcrt"; # This distinguishes the mingw (non posix) toolchain
};

ucrt64 = {
# mingw-w64 with UCRT for x86_64, default compiler
mingw-ucrt-x86_64 = {
config = "x86_64-w64-mingw32";
libc = "ucrt"; # This distinguishes the mingw (non posix) toolchain
};

# LLVM-based mingw-w64 for ARM
ucrtAarch64 = {
# mingw-w64 with UCRT for x86_64, LLVM
mingw-ucrt-x86_64-llvm = {
config = "x86_64-w64-mingw32";
libc = "ucrt";
rust.rustcTarget = "x86_64-pc-windows-gnullvm";
useLLVM = true;
};

# mingw-w64 with ucrt for Aarch64, default compiler (which is LLVM
# because GCC does not support this platform yet).
mingw-ucrt-aarch64 = {
config = "aarch64-w64-mingw32";
libc = "ucrt";
rust.rustcTarget = "aarch64-pc-windows-gnullvm";
useLLVM = true;
};

# mingw-64 back compat
# TODO: Warn after 26.05, and remove after 26.11.
mingw32 = mingw-msvcrt-i686;
mingwW64 = mingw-msvcrt-x86_64;
ucrt64 = mingw-ucrt-x86_64;
ucrtAarch64 = mingw-ucrt-aarch64;

# Target the MSVC ABI
x86_64-windows = {
config = "x86_64-pc-windows-msvc";
Expand Down
11 changes: 6 additions & 5 deletions pkgs/top-level/release-cross.nix
Original file line number Diff line number Diff line change
Expand Up @@ -205,11 +205,12 @@ in
}
);

# Test some cross builds on 32 bit mingw-w64
crossMingw32 = mapTestOnCross systems.examples.mingw32 windowsCommon;

# Test some cross builds on 64 bit mingw-w64
crossMingwW64 = mapTestOnCross systems.examples.mingwW64 windowsCommon;
# Test some cross builds on various mingw-w64 platforms
crossMingw32 = mapTestOnCross systems.examples.mingw-msvcrt-i686 windowsCommon;
cross-mingw-msvcrt-x86_64 = mapTestOnCross systems.examples.mingw-msvcrt-x86_64 windowsCommon;
cross-mingw-ucrt-x86_64 = mapTestOnCross systems.examples.mingw-ucrt-x86_64 windowsCommon;
cross-mingw-ucrt-x86_64-llvm = mapTestOnCross systems.examples.mingw-ucrt-x86_64-llvm windowsCommon;
cross-mingw-ucrt-aarch64 = mapTestOnCross systems.examples.mingw-ucrt-aarch64 windowsCommon;
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Do we really need all of these on Hydra?

Copy link
Member

@Eveeifyeve Eveeifyeve Jan 7, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yes it would have helped us on the journey of creating this pr and catching issues earlier eg. this pr. This is also will be required for building bash needed for the stdenv for windows migrating it to powershell = hundreds of thousands of packages not working.

Copy link
Member

@Ericson2314 Ericson2314 Jan 8, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

These are currently very small jobsets, so I am hoping that it should be fine.

If we ever cross-compile more stuff at scale, I might only do (UCRT-LLVM) * (x86_64, Aarch64). How does that sound?

(I am hoping we'll eventually do more native compilation at scale, and we fund-raise around this, and have more or fewer package sets accordingly.)


x86_64-cygwin = mapTestOnCross systems.examples.x86_64-cygwin cygwinCommon;

Expand Down
Loading