feat(windows): add an x86_64-windows cross target (#136)

* feat(windows): add an x86_64-windows cross target

- packages now go through forAllTargets, adding the "x86_64-windows"
  pseudo-system alongside the native ones.
- qt6.wrapQtAppsNoGuiHook is dropped for Windows and dontWrapQtApps set on
  each derivation. Both halves are needed: the hook does not evaluate for a
  mingw host, it would skip a PE anyway (wrap-qt-apps-hook.sh only handles ELF
  and Mach-O), and qtbase's setup hook hard-errors in qtPreHook without the
  flag.
- cmakeFlags pick up pkgs.logosQtCrossCmakeFlags, which is empty natively.
- meta.platforms widened to include windows.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>

* fix(windows): fail loudly when the generator binary is missing

The install test named only the unsuffixed `logos-cpp-generator` and had
no else-branch, so a mingw build — which produces
`logos-cpp-generator.exe` — copied nothing, succeeded, and shipped an
EMPTY $out/bin. The failure then surfaced in whichever consumer tried to
run the generator, nowhere near the cause.

Probe both names, and exit 1 with a directory listing if neither is
there. Verified: the Windows build now installs a real PE, and the
native build is unchanged.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>

* chore(deps): re-pin logos-nix, logos-protocol and logos-lidl to their merged revs

L1 (logos-nix) and L2 (logos-protocol, logos-lidl) are on their default
branches now, so the lock can name the merged revs instead of the pre-merge
branch tips it was resolving against while those PRs were open.

Co-authored-by: Cursor <cursoragent@cursor.com>

---------

Co-authored-by: Claude Opus 5 <noreply@anthropic.com>
Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
Dario Lipicar
2026-08-11 13:51:29 -03:00
committed by GitHub
co-authored by Cursor Claude Opus 5
parent 9d508292eb
commit e3744fb84c
6 changed files with 69 additions and 18 deletions
Generated
+27 -10
View File
@@ -12,11 +12,11 @@
]
},
"locked": {
"lastModified": 1785470541,
"narHash": "sha256-5fVAbSGMRhEfRXfhaoq26LZeJuziRT/NMFsfhtd0ogA=",
"lastModified": 1786415321,
"narHash": "sha256-Oe98SavQSVGBIY7WIc8RQ5l+Bl4KLsdmjb+PyscfdNw=",
"owner": "logos-co",
"repo": "logos-lidl",
"rev": "35f33d87b7d6c22d9d4658c58855ae887ce515f1",
"rev": "ffeebf2e90fa0c65e8c486988271fe0ca029d1e1",
"type": "github"
},
"original": {
@@ -27,14 +27,15 @@
},
"logos-nix": {
"inputs": {
"nixpkgs": "nixpkgs"
"nixpkgs": "nixpkgs",
"nixpkgs-windows": "nixpkgs-windows"
},
"locked": {
"lastModified": 1774455309,
"narHash": "sha256-3AN7aFnArdysrbQQ2UskWzjNSFADb4hDCsnx69Fa0ng=",
"lastModified": 1786399295,
"narHash": "sha256-Bl1A0UgsIXioZw5uEW8Jl5u7FfZcFMnpYlpsdezFwK0=",
"owner": "logos-co",
"repo": "logos-nix",
"rev": "e637a1f5e871244d1c2df1e3c52a067f2eb406f2",
"rev": "6e0f4a7120fced10829b0b3a698ff619a11d4605",
"type": "github"
},
"original": {
@@ -55,11 +56,11 @@
]
},
"locked": {
"lastModified": 1786381943,
"narHash": "sha256-/EsIMBCNs3BvssVP/lImCFjEar++cAtusMT7KSoe4VU=",
"lastModified": 1786452265,
"narHash": "sha256-yEBT+tG6jD26tcVixy3OYGO+gYmcyzrwR5uZVGqVTOs=",
"owner": "logos-co",
"repo": "logos-protocol",
"rev": "0183e8c26aa3e98ed3603258f2f640385bf61954",
"rev": "03842db5c1496f5ab29ba35ac0016b6b1f5048ba",
"type": "github"
},
"original": {
@@ -84,6 +85,22 @@
"type": "github"
}
},
"nixpkgs-windows": {
"locked": {
"lastModified": 1782723713,
"narHash": "sha256-oPXCU/SSUokcGaJREHibG1CBX3+s/W7orDWQOZDsEeQ=",
"owner": "NixOS",
"repo": "nixpkgs",
"rev": "b5aa0fbd538984f6e3d201be0005b4463d8b09f8",
"type": "github"
},
"original": {
"owner": "NixOS",
"repo": "nixpkgs",
"rev": "b5aa0fbd538984f6e3d201be0005b4463d8b09f8",
"type": "github"
}
},
"root": {
"inputs": {
"logos-lidl": "logos-lidl",
+5 -1
View File
@@ -17,12 +17,16 @@
outputs = { self, nixpkgs, logos-nix, logos-protocol, logos-lidl }:
let
systems = [ "aarch64-darwin" "x86_64-darwin" "aarch64-linux" "x86_64-linux" ];
# Adds the "x86_64-windows" pseudo-system; a cross derivation's `system`
# is its BUILD platform, so it evaluates anywhere and realises on Linux.
forAllTargets = logos-nix.lib.forAllTargets;
forAllSystems = f: nixpkgs.lib.genAttrs systems (system: f {
pkgs = import nixpkgs { inherit system; };
});
in
{
packages = forAllSystems ({ pkgs }:
packages = forAllTargets ({ pkgs, ... }:
let
# Common configuration
common = import ./nix/default.nix { inherit pkgs; };
+21 -3
View File
@@ -3,6 +3,10 @@
pkgs.stdenv.mkDerivation {
pname = "${common.pname}-generator";
# qtbase\'s setup hook errors in qtPreHook unless a wrapper hook ran or
# this is set; the wrapper hooks are absent on Windows (they cannot even
# evaluate for a mingw host) and would skip a PE anyway.
dontWrapQtApps = true;
version = common.version;
inherit src;
@@ -30,11 +34,25 @@ pkgs.stdenv.mkDerivation {
installPhase = ''
runHook preInstall
# Install generator binary
# Install generator binary.
#
# Probe both names and FAIL if neither is there. The unsuffixed-only test
# this replaces had no else-branch, so a mingw build (which produces
# logos-cpp-generator.exe) copied nothing, succeeded, and shipped an EMPTY
# $out/bin -- the failure then surfaced in whichever consumer tried to run
# the generator, nowhere near the cause.
mkdir -p $out/bin
if [ -f build-generator/bin/logos-cpp-generator ]; then
cp build-generator/bin/logos-cpp-generator $out/bin/
_gen=""
for _cand in build-generator/bin/logos-cpp-generator build-generator/bin/logos-cpp-generator.exe; do
if [ -f "$_cand" ]; then _gen="$_cand"; break; fi
done
if [ -z "$_gen" ]; then
echo "Error: logos-cpp-generator was not produced by the build" >&2
echo "Contents of build-generator/bin:" >&2
ls -la build-generator/bin 2>&1 >&2 || echo " (no such directory)" >&2
exit 1
fi
cp "$_gen" $out/bin/
# Shared C++/Qt codegen backend helpers for logos-qt-sdk's
# logos-qt-generator: the Qt type-name mapping (lidl_emit_common), the
+8 -4
View File
@@ -10,8 +10,8 @@
pkgs.cmake
pkgs.ninja
pkgs.pkg-config
pkgs.qt6.wrapQtAppsNoGuiHook
];
]
++ pkgs.lib.optional (!pkgs.stdenv.hostPlatform.isWindows) pkgs.qt6.wrapQtAppsNoGuiHook;
# Common runtime dependencies
buildInputs = [
@@ -41,12 +41,16 @@
];
# Common CMake flags
cmakeFlags = [ "-GNinja" ];
cmakeFlags = [ "-GNinja" ]
# Qt's host TOOLS (repc, moc, qmltyperegistrar) live in separate packages
# that must RUN on the build machine; logos-nix's Windows overlay exposes
# the flags pointing Qt at them. Absent -- so empty -- on native builds.
++ (pkgs.logosQtCrossCmakeFlags or [ ]);
# Metadata
meta = with pkgs.lib; {
description = "Logos C++ SDK Library and Code Generator";
platforms = platforms.unix;
platforms = platforms.unix ++ platforms.windows;
};
}
+4
View File
@@ -6,6 +6,10 @@
pkgs.stdenv.mkDerivation {
pname = "${common.pname}-headers";
# qtbase\'s setup hook errors in qtPreHook unless a wrapper hook ran or
# this is set; the wrapper hooks are absent on Windows (they cannot even
# evaluate for a mingw host) and would skip a PE anyway.
dontWrapQtApps = true;
version = common.version;
inherit src;
+4
View File
@@ -5,6 +5,10 @@
pkgs.stdenv.mkDerivation {
pname = "${common.pname}-lib";
# qtbase\'s setup hook errors in qtPreHook unless a wrapper hook ran or
# this is set; the wrapper hooks are absent on Windows (they cannot even
# evaluate for a mingw host) and would skip a PE anyway.
dontWrapQtApps = true;
version = common.version;
inherit src;