Repository navigation
Conversation
api_enums.cpp moved from the static common library into the shared kicommon library, which builds with -fvisibility=hidden. Its FromProtoEnum/ToProtoEnum specializations were never exported, and clang also keeps them local because their protobuf enum arguments are hidden. Linking _pcbnew.kiface on macOS failed with undefined ToProtoEnum<PCB_LAYER_ID, BoardLayer> and related symbols. Mark each specialization APIVISIBLE (default visibility on GCC/clang, empty on MSVC) so the kifaces resolve them from kicommon. Verified on macOS 26 arm64 with the Backplane runtime flags: full build, install, kicad-cli api-server, and PCB/schematic IPC smoke tests pass. Co-Authored-By: Claude Opus 5.5 <[email protected]>
The release workflow gains a macos-15 job beside the Linux one, and the draft release carries both archives under one SHA256SUMS. - scripts/backplane-macos-build.sh: KiCad.app against Homebrew with the Linux release's options, wxWidgets 3.2, libngspice, a staged Python.framework, KICAD_APPLE_MAKE_RELOCATEABLE_BUNDLE - scripts/backplane-macos-relocate.py: copies what still loads from Homebrew into the bundle, rewrites references, drops outside rpaths and symlinks, re-signs ad hoc; --check fails on anything left outside - scripts/backplane-macos-package.sh: the Linux layout (KiCad.app, bin/ launchers, share/kicad, manifest.json), tested after relocation with the IPC smoke and regression suites - scripts/backplane-fetch-libraries.sh: the pinned library fetch, shared - kicad/project_tree.cpp: a stock wxWidgets 3.2 on macOS (KICAD_STOCK_WX_MAC) uses the image list, not KiCad's backported SetStateImages Co-Authored-By: Claude Opus 5.5 <[email protected]>
PCB_PLOTTER::Plot called wxSafeYield() after each page. On macOS that opens a modal session (wxGUIEventLoop::BeginModalSession) on the active event loop; in kicad-cli api-server that loop is a wxConsoleEventLoop, so the modal window and then null were written over its dispatcher and the next turn of the loop crashed (EXC_BAD_ACCESS in wxConsoleEventLoop::DispatchTimeout): the second board job of a session always took the server down. Found with a hardware watchpoint on the dispatcher. A headless run has nothing to repaint: yield only in a GUI app (Pgm().IsGUI()). Verified on macOS 26 arm64: the relocated runtime passes the IPC smoke test and every regression suite (81 checks). Co-Authored-By: Claude Opus 5.5 <[email protected]>
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.
Builds the Backplane KiCad runtime for Apple-silicon Macs in the release workflow, beside the Linux one, and fixes the macOS crash that took the headless IPC server down. Stacked on #2 (its first commit is that PR's enum-visibility fix).
Release
macos-runtimejob (macos-15). The draft release now carriesbackplane-kicad-macos-arm64-<version>.tar.gznext to the Linux archive, under one combinedSHA256SUMS. The Linux job itself is unchanged.KiCad.app,bin/launchers (kicad-cli, kicad, pcbnew, eeschema...),share/kicadwith the pinned libraries,manifest.json(now withplatform).scripts/backplane-macos-build.sh: KiCad.app built against Homebrew with the Linux release's options. It uses wxWidgets 3.2 (what KiCad 10 targets; Homebrew's default is 3.3),libngspice, a stagedPython.framework(Homebrew'ssite-packagesis a symlink the install cannot copy over), andKICAD_APPLE_MAKE_RELOCATEABLE_BUNDLE.scripts/backplane-macos-relocate.py: copies what still loads from Homebrew into the bundle (mostly Python's extension modules), rewrites the references, drops outside rpaths and symlinks, and re-signs ad hoc.--checkfails if anything still points outside.scripts/backplane-macos-package.sh: assembles the archive, then tests it after moving the build away: the IPC smoke test, every regression suite, and the library smoke test.scripts/backplane-fetch-libraries.sh: the pinned library fetch as a script for the Mac job (the same steps as the Linux job's inline ones).protoc(36.2 → 7.36.2).Fixes
pcbnew/pcb_plotter.cpp: the plotter calledwxSafeYield()after each page. On macOS that opens a modal session on the active event loop. Inkicad-cli api-serverthat loop is a console loop, so the modal window, and then null, landed on its dispatcher pointer, and the next turn crashed (EXC_BAD_ACCESSinwxConsoleEventLoop::DispatchTimeout). The second board job of every session took the server down. Found with a hardware watchpoint. It now yields only in a GUI app (Pgm().IsGUI()); GUI builds behave as before.kicad/project_tree.cpp: theSetStateImagesbranch assumed every macOS build uses KiCad's patched wxWidgets 3.2. A stock 3.2 (KICAD_STOCK_WX_MAC, set by the Mac build script) takes the image-list path the other platforms use.Tested (macOS 26, arm64)
codesign --verify --deep --strictpasses.kicad-cli --version,api-server --help, the IPC smoke test and all 12 regression suites pass (81 checks).🤖 Generated with Claude Code