Repository navigation
Cross-platform build, packaging and macOS runtime fixes - #17
Merged
Merged
Conversation
- CMakePresets.json: dev (Ninja Multi-Config) plus linux/macos-arm64/macos-x64/windows release presets; all read VCPKG_ROOT and QT_ROOT_DIR from the environment. Replaces the per-OS preset files and the tracked CMakeUserPresets.json. - vcpkg overlay triplets (static, release-only) in cmake/triplets; oneDPL headers fetched by CMake. - Install layout per platform: macOS .app with bundled Vulkan loader + MoltenVK, flat Windows folder (windeployqt, MSVC runtime), Linux FHS tree for linuxdeploy. - main.cpp finds configs/shaders relative to the executable and points Qt at the bundled Vulkan loader on macOS. - packaging/: Linux AppImage script, macOS sign/DMG/notarize script + entitlements, Windows resource file. - GitHub Actions workflow builds all four packages; tags v* create a draft release. - Removes the old doc/deploy scripts; README gains Download and Build-from-source sections. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- Qt's prebuilt macOS binaries are configured without Vulkan (no QVulkanWindow). packaging/macos/build-qt.sh builds qtbase + qtdeclarative 6.12.0 from source against Vulkan-Headers 1.3.296, asserts Vulkan is enabled, and disables the QML JIT. CI caches the install per arch, saving it right after the build. - With no JIT, the hardened runtime needs no exceptions: entitlements file removed. - Linux: install the X11/XRandR/Wayland headers vcpkg's vulkan-loader compiles against. - README: macOS Qt and Linux header requirements. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
stapler validate failed with NSURLErrorDomain -1005 (exit 68) talking to api.apple-cloudkit.com after notarization was Accepted and stapling succeeded. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The pool held MAX_FRAMES_IN_FLIGHT uniform-buffer descriptors but createDescriptorSets allocates MAX_FRAMES_IN_FLIGHT * setCount sets of one descriptor each. Windows drivers tolerated the overrun; MoltenVK 1.4 (Metal 3 argument buffers) enforces the pool size, so vkAllocateDescriptorSets failed in initResources and atomix aborted at startup on macOS. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Qt's cocoa plugin answers -[CALayer display] with a synchronous expose, QGuiApplication synthesizes a QPaintEvent from it, and QVulkanWindow renders on Paint. On MoltenVK that frame blocks in -[CAMetalLayer nextDrawable] inside the CA transaction commit while the Metal completion thread waits to present, so the main thread hangs and the window never appears (seen on macOS 27.2 / M4 Pro). Swallow Paint on macOS and requestUpdate() instead; the display link delivers that on the main queue outside the display cycle. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Resolve conflicts in favour of the new build system: src/CMakeLists.txt keeps the build-system version (no per-machine Qt/oneDPL paths; bundle properties already set), and the old doc/deploy/mac files (macdeploy.sh, Info.plist.in, atomix.entitlements) are dropped, since packaging/macos/package-dmg.sh replaces them and the hardened runtime needs no entitlements with the QML JIT disabled. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Replaces the per-machine build (hardcoded Qt/oneDPL paths, hand-run deploy scripts) with a portable CMake-presets + vcpkg build and a GitHub Actions pipeline that produces release packages for all four targets. Also fixes two macOS runtime bugs found while testing the packages.
Build and CI
linux-release,macos-arm64-release,macos-x64-release,windows-release), vcpkg manifest with custom triplets, no hardcoded per-machine paths..github/workflows/build.ymlbuilds on every push/PR and uploads 4 packages as artifacts:packaging/linux/build-appimage.sh)packaging/macos/package-dmg.sh; Qt is built from source with Vulkan viapackaging/macos/build-qt.sh, plus MoltenVK)v*tag runs areleasejob that attaches all four packages to a draft prerelease.main.cppfindsconfigs/andshaders/relative to the executable.doc/deployscripts are removed; thepackaging/scripts supersede them. README gains Download and Build-from-source sections.macOS runtime fixes
nextDrawableduring the CA commit, so the window never appeared (macOS: hang with no window after initSwapChainResources (MoltenVK nextDrawable in CA display cycle) #9, already closed and verified on arm64 hardware).Tested
Open follow-ups
🤖 Generated with Claude Code