From 6c8f1f525335cb9c1ee2553d214c944c8f4f97ad Mon Sep 17 00:00:00 2001 From: Konstantin Fickel Date: Tue, 7 Apr 2026 13:49:45 +0200 Subject: [PATCH] feat: add Windows cross-compilation and release artifacts - Add mkWindowsCraneLib using x86_64-pc-windows-gnu target - Add mkStreamdWindows using mingw-w64 toolchain for cross-compilation - Export streamd-windows package from flake - Add Windows build step and .exe artifact to release workflow --- .forgejo/workflows/release.yml | 5 +++++ flake.nix | 35 +++++++++++++++++++++++++++++++++- 2 files changed, 39 insertions(+), 1 deletion(-) diff --git a/.forgejo/workflows/release.yml b/.forgejo/workflows/release.yml index 7c93504..bef91f5 100644 --- a/.forgejo/workflows/release.yml +++ b/.forgejo/workflows/release.yml @@ -49,12 +49,17 @@ jobs: if: steps.version.outputs.SKIP != 'true' run: nix build .#streamd-musl -o result-musl + - name: Build Windows binary + if: steps.version.outputs.SKIP != 'true' + run: nix build .#streamd-windows -o result-windows + - name: Prepare release artifacts if: steps.version.outputs.SKIP != 'true' run: | mkdir -p release cp result-deb release/streamd_${{ steps.version.outputs.VERSION }}_amd64.deb cp result-musl/bin/streamd release/streamd-${{ steps.version.outputs.VERSION }}-linux-x86_64 + cp result-windows/bin/streamd.exe release/streamd-${{ steps.version.outputs.VERSION }}-windows-x86_64.exe - name: Create release if: steps.version.outputs.SKIP != 'true' diff --git a/flake.nix b/flake.nix index 38723ae..12cdf69 100644 --- a/flake.nix +++ b/flake.nix @@ -132,6 +132,38 @@ in craneLib.buildPackage (commonArgs // { inherit cargoArtifacts; }); + mkWindowsCraneLib = + system: + let + pkgs = mkPkgs system; + toolchain = pkgs.rust-bin.stable.latest.default.override { + targets = [ "x86_64-pc-windows-gnu" ]; + }; + in + (crane.mkLib pkgs).overrideToolchain toolchain; + + mkStreamdWindows = + system: + let + pkgs = mkPkgs system; + pkgsCross = pkgs.pkgsCross.mingwW64; + craneLib = mkWindowsCraneLib system; + commonArgs = { + src = craneLib.path ./.; + pname = "streamd"; + inherit version; + strictDeps = true; + CARGO_BUILD_TARGET = "x86_64-pc-windows-gnu"; + CC_x86_64_pc_windows_gnu = "${pkgsCross.stdenv.cc}/bin/x86_64-w64-mingw32-gcc"; + CARGO_TARGET_X86_64_PC_WINDOWS_GNU_LINKER = "${pkgsCross.stdenv.cc}/bin/x86_64-w64-mingw32-gcc"; + nativeBuildInputs = [ pkgsCross.stdenv.cc ]; + buildInputs = [ pkgsCross.windows.pthreads ]; + doCheck = false; + }; + cargoArtifacts = craneLib.buildDepsOnly commonArgs; + in + craneLib.buildPackage (commonArgs // { inherit cargoArtifacts; }); + mkStreamdDeb = system: let @@ -181,9 +213,10 @@ streamd = mkStreamd system; streamd-musl = mkStreamdMusl system; streamd-deb = mkStreamdDeb system; + streamd-windows = mkStreamdWindows system; in { - inherit streamd streamd-musl streamd-deb; + inherit streamd streamd-musl streamd-deb streamd-windows; default = streamd; } );