Skip to content

Windows Xilinx Platform Cable driver packaging

The Windows release has a single canonical Xilinx Platform Cable USB driver package:

xilinx-platform-cable-windows.zip

It is built once from the pinned externals/libwdi and externals/xilinx-usb-driver sources. The build verifies its SHA-256 checksum before openFPGALoader packaging starts.

Portable ZIP

The canonical driver archive and its checksum are embedded unchanged in:

share/openFPGALoader/drivers/
  xilinx-platform-cable-windows.zip
  xilinx-platform-cable-windows.zip.sha256

The Windows portable ZIP build is required to fail if either file is missing or the checksum does not match. This prevents publishing a Windows package that silently omits the Xilinx Platform Cable driver payload.

Windows installer

The installer job downloads only the portable openFPGALoader ZIP. It verifies and extracts that ZIP, then verifies the embedded XPCU driver archive again. The Inno Setup build consumes exactly that embedded archive; there is no second driver build and no independent driver artifact dependency.

The installer always carries the compressed driver archive under the application share/openFPGALoader/drivers tree. When the user selects Install Xilinx Platform Cable USB drivers, the package is additionally expanded into the installer input area and the bundled PowerShell installation helper is executed after installation.

act on Windows / Docker Desktop

act runs the workflow inside a Linux container, while Docker Desktop runs the Docker daemon outside that container. Runtime bind mounts therefore cannot blindly reuse paths such as /mnt/d/openFPGALoader.

externals/xilinx-usb-driver/docker-build.sh probes Docker Desktop's daemon-visible paths (/host_mnt/<drive>/... and /run/desktop/mnt/host/<drive>/...) and exports those locations to Compose. The same rule is used by the main Windows cross-build. This avoids empty /src mounts and the resulting libwdi exit 127 failures.

Inno Setup container output

The pinned Inno Setup Docker image runs Wine as an unprivileged user. For that reason the compiler does not write temporary .e32.tmp files directly into the host workspace bind mount. build-windows-installer.sh creates a temporary Docker named volume at /out, passes it to Inno Setup as Z:\out, and mounts dist/docker-windows read-only while compiling. After compilation a small Alpine container copies the finished openFPGALoader-<version>-win64-setup.exe back to the normal dist/docker-windows artifact directory and the temporary volume is removed.