The macOS packager treated each library install name as a load command, so
@executable_path self-ids failed the portability check. FreeBSD configure
requires Qt6 Charts and Svg. Android libretro could not link the prebuilt
OpenSSL archive until Poly1305 SVE2 binds locally, matching yuzu-android.
Integrate the Android build fixes with the current release artifact gate, require valid release signing for published APKs, and ignore keystores repository-wide.
Consolidate the duplicate Android build scripts (the legacy one generated a nonexistent lowercase Gradle task name). Fix per-flavor ABI filters so chromeOS builds x86_64 only, move legacy sourceSets to the android extension, and align the compileSdk suppress flag. Repair the malformed JDK/cache step in verify.yml and drop the dead repo gate in android-build.yml. Add release-signing validation with debug-signed warnings, keystore secret wiring plus APK signature checks in release.yml, and update the Android build docs.
* fix(macos): port MoltenVK Apple Silicon path and GPU init guards
Port applicable patches from dougchansan/suyu-v0.0.4#1 onto drippu:
bundled MoltenVK for the suyu target, recursive CAMetalLayer search in
the Qt frontend, SDL Metal layer (not NSView), and shared GPU/process
unwind guards. CMake targets remain suyu/suyu-cmd; the packaged artifact
is drippu.app.
Co-authored-by: Dallin Bland <SourCreamCulture@users.noreply.github.com>
* fix(macos): create CAMetalLayer when Qt VulkanSurface walk is empty
VulkanRenderWidget still uses QWindow::VulkanSurface, which often leaves a
QContainerLayer and no CAMetalLayer. Walk the layer tree first, then
alloc/init a CAMetalLayer, setWantsLayer, and setLayer on the NSView.
Log critically if attachment still fails; vulkan_surface continues to
refuse a null layer.
Replace the dead USE_SYSTEM_MOLTENVK CI flag with YUZU_USE_BUNDLED_MOLTENVK=OFF
so release.yml matches brew molten-vk.
Co-authored-by: Dallin Bland <SourCreamCulture@users.noreply.github.com>
* ci(macos): PR MoltenVK smoke on Apple Silicon Qt path
Add macos-15 pull_request CI that builds suyu, suyu-cmd, and a focused
macos_moltenvk_smoke using the live Qt GetWindowSystemInfo CAMetalLayer
attach plus Vulkan metal surface creation. The job fails unless the log
shows MoltenVK device init. Also set SDL_WINDOW_METAL on the live SDL
Vulkan window and document brew vs bundled MoltenVK plus LIBVULKAN_PATH
for suyu-cmd.
Co-authored-by: Dallin Bland <SourCreamCulture@users.noreply.github.com>
* ci(macos): drive live VulkanRenderWidget MoltenVK device+swapchain
Fix Qt 6 void QWindow::create() so the smoke compiles. Host a
QApplication VulkanRenderWidget, snapshot InitRenderTarget WSI before
addWidget, load MoltenVK from suyu.app Frameworks with LIBVULKAN_PATH
unset, and require CreateDevice plus swapchain on that surface. PR CI
uses bundled MoltenVK (ON) and runs the binary from inside the app.
Co-authored-by: Dallin Bland <SourCreamCulture@users.noreply.github.com>
* fix(macos): hide unused suyu-cmd recomp lambda from -Werror
place_one is only called from SUYU_CMD_STATIC_RECOMP and Win32 DLL
loaders. Wrap it and the usings only it needs so macOS -Werror=unused
does not fail suyu-cmd. Windows and static-recomp paths are unchanged.
Co-authored-by: Dallin Bland <SourCreamCulture@users.noreply.github.com>
* fix(macos): link frontend_common into MoltenVK smoke
place_one is already ifdef-guarded. The smoke now compiles but fails to
link PlayTimeManager, which core's NS query service expects from
frontend_common (same as suyu-cmd).
Co-authored-by: Dallin Bland <SourCreamCulture@users.noreply.github.com>
---------
Co-authored-by: Cursor Agent <cursoragent@cursor.com>
Co-authored-by: Dallin Bland <SourCreamCulture@users.noreply.github.com>
* test(ci): add release publication gate regression
Drive the Publish Release job the way GitHub Actions would. The check
evaluates job `if`/`needs` from `.github/workflows/release.yml` and runs
the job's shell against a stub `gh`. Required platform failures still
publish. The rolling `v0.04-latest` tag is deleted before the empty
artifact check. The release notes have no commit, toolchain, or checksum
metadata.
Co-authored-by: Dallin Bland <SourCreamCulture@users.noreply.github.com>
* fix(ci): gate release publish on required results
Replace if: always() with !cancelled() plus required job results so a
Windows, Linux, macOS, Android, or libretro failure cannot replace a
release. Keep FreeBSD and libretro-android optional. Stop deleting
v0.04-latest. Publish v0.04-<date>-<sha> with commit, toolchain, and
SHA-256 metadata. Call exporter smoke and the Catch2 tests from both
pull-request CI and the release needs list.
Co-authored-by: Dallin Bland <SourCreamCulture@users.noreply.github.com>
* chore(ci): drop leftover always() lecture from the gate check
Delete the module docstring that still taught if: always() after
release.yml stopped using it. GitHub's default success() wrap lives in
apply_github_default_success. Publish is forbidden from deleting a tag
at all, not only from deleting before the empty check.
Co-authored-by: Dallin Bland <SourCreamCulture@users.noreply.github.com>
* test(ci): reject gh prerelease as latest
GitHub returns HTTP 422 Latest release cannot be draft or prerelease
when gh release create passes --prerelease with --latest, then runs
cleanupDraftRelease. The gate stub now fails the same way.
Co-authored-by: Dallin Bland <SourCreamCulture@users.noreply.github.com>
* fix(ci): stop marking prereleases as latest
Remove --latest from publish_release.sh. GitHub forbids a prerelease
from being the latest release and gh then deletes the draft.
Co-authored-by: Dallin Bland <SourCreamCulture@users.noreply.github.com>
---------
Co-authored-by: Cursor Agent <cursoragent@cursor.com>
Co-authored-by: Dallin Bland <SourCreamCulture@users.noreply.github.com>
devel/libusb was deprecated into the FreeBSD base system in 2013 and has produced no binary package since; pkg install failed with 'No packages available to install matching libusb'. FreeBSD 15+ already provides the libusb API in base, which is what the project's own CMakeLists.txt comment already assumes.
Only the Linux .so was produced, so no suyu_libretro.dll ever reached the release. RetroArch loads .dll on Windows and .so on Linux, so both are shipped.
All build jobs were using dist/ as staging dir, which collides with
the repo's own dist/ folder containing resources/icons/translations.
This caused libretro tar.gz to contain 625 resource files instead of
just suyu_libretro.so. Renamed libretro artifact for clarity.
GitHub runners may not have cmake 3.31. Lower to 3.22 which covers
all features actually used. Add cmake --version for debugging.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Revert include(DownloadExternals) from root CMakeLists (caused configure
failures across all platforms)
- Fix Windows boost header patch to use printf instead of broken heredoc
- macOS uses USE_SYSTEM_MOLTENVK=ON so DownloadExternals not needed
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>