Skip to content

Full-GUI builds for Windows ARM64 + Linux RISC-V 64 (deps: opticaldiscs 0.5, libchdman 0.288.8)#49

Merged
danifunker merged 2 commits into
mainfrom
winarm-riscv64-gui-builds
Jun 30, 2026
Merged

Full-GUI builds for Windows ARM64 + Linux RISC-V 64 (deps: opticaldiscs 0.5, libchdman 0.288.8)#49
danifunker merged 2 commits into
mainfrom
winarm-riscv64-gui-builds

Conversation

@danifunker

Copy link
Copy Markdown
Owner

Summary

Promotes Windows ARM64 and Linux RISC-V 64 to first-class, full desktop-app builds, unblocked by the libchdman-rs bump. Both new CI legs passed green on the first run (run 28443141702).

Two commits:

1. deps: opticaldiscs 0.4.2 → 0.5, libchdman-rs 0.288.5 → 0.288.8

  • opticaldiscs 0.5 changes FileEntry::type_code/creator_code from Option<String> (lossy display string) to Option<[u8; 4]> (raw Finder bytes), adding type_code_string()/creator_code_string() for display.
  • Fixes a latent extraction bug: the optical AppleDouble/MacBinary export rebuilt the Finder type/creator from the display string, so a non-printable 4-byte creator (e.g. Prince of Persia's 50 6F C4 50, rendered "0x506FC450") was corrupted to b"0x50". The fourcc/fourcc_bytes reparse helpers are deleted; raw fields are used directly; display sites use the new *_string() methods.
  • libchdman-rs 0.288.8 publishes aarch64-pc-windows-msvc and riscv64gc-unknown-linux-gnu prebuilts — the only blocker to GUI builds on those targets. Both deps still dedupe to a single libchdman copy.
  • Verified locally (--features optical): build, 44 test suites, clippy -D warnings, fmt --check all clean; cargo tree -i libchdman-rs → single 0.288.8.

2. ci: first-class full-GUI builds for Windows ARM64 and Linux RISC-V 64

  • build-windows-arm64 (was build-rb-cli-win-arm64, CLI-only): one default-feature build on the x64 Windows runner now produces both rusty-backup.exe and rb-cli.exe; packages a portable GUI zip alongside the rb-cli zip. Build-only (continue-on-error) since an ARM64 exe can't run on the x64 host.
  • build-gui-linux-riscv64 (new): cross-compiles the default-feature GUI for riscv64gc against a riscv64 GTK/GL sysroot installed via dpkg multiarch (ubuntu-ports), links through g++ (libchdman is C++), and ships a plain dynamically-linked tarball — not a self-contained AppImage, since there's no riscv64 runner to package one. continue-on-error.
  • Downloads table: Windows ARM64 and RISC-V 64 promoted into the main first-class table (App + rb-cli columns); their rb-cli rows moved up out of the "other CPU architectures" table, which now lists only PowerPC. Nothing removed from the chart.

Verification

riscv64 GUI binary confirmed a genuine RISC-V GTK app:

ELF 64-bit LSB pie executable, UCB RISC-V, RVC, double-float ABI ... interpreter /lib/ld-linux-riscv64-lp64d.so.1
NEEDED  libgtk-3.so.0, libgobject-2.0, libglib-2.0, libstdc++.so.6, libgcc_s, libm, libc

All four new artifacts uploaded (GUI: ~30 MB win-arm64 zip / ~32 MB riscv64 tarball; plus the two rb-cli builds).

Notes

  • Both new jobs are continue-on-error, so a future breakage on these niche legs can't block the desktop release.
  • Merging to main triggers the real Release run that publishes these as downloads.

🤖 Generated with Claude Code

danifunker and others added 2 commits June 30, 2026 08:02
opticaldiscs 0.5 changes FileEntry::type_code/creator_code from
Option<String> (lossy display string) to Option<[u8; 4]> (raw Finder
bytes), and adds type_code_string()/creator_code_string() for display.

This fixes a latent extraction bug: the optical AppleDouble/MacBinary
export rebuilt the Finder type/creator from the display string, so a
non-printable 4-byte creator (e.g. Prince of Persia's 50 6F C4 50, shown
as "0x506FC450") was corrupted to b"0x50". With the raw bytes available
the fourcc/fourcc_bytes reparse helpers are deleted and the raw fields
are used directly; display sites switch to the *_string() methods.

libchdman-rs 0.288.8 publishes aarch64-pc-windows-msvc and
riscv64gc-unknown-linux-gnu prebuilts (prep for full GUI builds on those
targets); both it and opticaldiscs 0.5 still dedupe to one libchdman copy.

Verified with --features optical: build, 44 test suites, clippy -D
warnings, fmt --check all clean; cargo tree -i libchdman-rs shows a
single 0.288.8.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
libchdman-rs 0.288.8 now publishes aarch64-pc-windows-msvc and
riscv64gc-unknown-linux-gnu prebuilts, removing the only blocker to a
full desktop app on those targets.

- build-rb-cli-win-arm64 -> build-windows-arm64: was a CLI-only slim
  cross-build; now one default-feature build (GUI + chd + optical) on the
  x64 Windows runner produces both rusty-backup.exe and rb-cli.exe.
  Packages a portable GUI zip alongside the existing rb-cli zip.
  Build-only (continue-on-error) since an ARM64 exe can't run on the host.
- build-gui-linux-riscv64 (new): cross-compiles the default-feature GUI
  for riscv64gc against a riscv64 GTK/GL sysroot installed via dpkg
  multiarch (ubuntu-ports), links through g++ for libstdc++ (libchdman is
  C++), and ships a plain dynamically-linked tarball (not a self-contained
  AppImage — no riscv64 runner to package one). continue-on-error.

Downloads table: Windows ARM64 and RISC-V 64 promoted into the main
first-class table (App + rb-cli columns); their rb-cli rows moved up out
of the "other CPU architectures" table, which now lists only PowerPC.
Nothing removed from the chart. Expected-asset checks and release `needs`
updated; the release job stays branch-gated to main, so feature-branch
pushes build+upload artifacts for diagnosis without publishing a release.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@danifunker danifunker merged commit a5963dd into main Jun 30, 2026
18 checks passed
@danifunker danifunker deleted the winarm-riscv64-gui-builds branch June 30, 2026 12:30
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant