This repository was archived by the owner on Jul 21, 2026. It is now read-only.
make: add GNU build automation for Kandelo - #18
Merged
Conversation
brandonpayton
force-pushed
the
migrate/make-cli
branch
from
July 11, 2026 23:16
cb2775f to
bc4d6bd
Compare
brandonpayton
force-pushed
the
migrate/dash-shell
branch
2 times, most recently
from
July 12, 2026 01:08
b42c261 to
7a0f649
Compare
GNU Make's loadable-object API was disabled even though Kandelo supports Wasm side modules. Install the public header, mark the documented gmk API as visible, and exercise a compiled module that registers and runs a custom Make function. The runtime path depends on the SDK's explicit -ldl configure fact and the host's main-program handle support, so the tap PR remains gated on Automattic/kandelo#874 and #879.
brandonpayton
force-pushed
the
migrate/make-cli
branch
from
July 12, 2026 01:14
bc4d6bd to
d338c75
Compare
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 subscribe to this conversation on GitHub.
Already have an account?
Sign in.
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
MK_OS_ZOSwith a focused WebAssembly patch selecting the two-argumentmainand realenvironpath onlyposix_spawnimplementation using the package-specific synchronous-error runtime fact; the finished binary does not importkernel.kernel_forkand is intentionally not fork-instrumentedgnumake.h, mark only the documentedgmk_*API as public under Wasm, and test a compiled side module that registers and invokes a custom Make functionmake install, preserving the public header plus man/info documentation in the kegRoot cause and platform contracts
The original formula disabled loadable objects based on the incorrect assumption that Kandelo lacked
dlopen. Kandelo supports Wasm side modules, but two platform details were missing:AC_SEARCH_LIBS(dlopen)reportnone required, so Make omitted-ldland the SDK did not select its functionallibc/glue/dlopen.cimplementation; sdk: centralize cross-compile function availability kandelo#874 makes the-ldlrequirement authoritative;dlopen(NULL, ...); dlopen: expose the main program symbol scope kandelo#879 implements that main-program handle andRTLD_DEFAULTlookup in the shared Node/browser host path.The SDK intentionally does not make arbitrary executable symbols public. The formula's focused
gnumake.hpatch gives default visibility to GNU Make's five documented plugin entry points while leaving internal symbols hidden.Validation
Built from the formula source through Homebrew against ABI 18 with the pending platform stack from Automattic/kandelo#867, #874, and #879.
brew test automattic/kandelo-make-review/make --verbosegnumake.hgmk_add_functioncallback returning allocated dataplugin=Kandelogmk_*exportskernel.kernel_fork, and nowpk_fork_*exportsgit diff --checkThe normal browser nonzero-exit diagnostic path remains gated on Automattic/kandelo#875 so a failed recipe does not receive browser-only host text on guest stderr.
Source merge and bottle gates
The source formula may merge independently after review; it contains no bottle block or sidecar. Bottle construction, publication, and the installability claim remain gated on:
-ldlconfigure factdlopen(NULL)andRTLD_DEFAULTd338c75953b8181b62793f1822ebb1012c0101b2, after the Dash bottle is finalThe pthread fork-continuation fix and ABI 18 transition from #867 are merged.
Source review is complete and the source formula may merge now. The dependency and platform gates above still block bottle publication and any stock-guest installability claim.
Current-main restack
Replayed the two Make-owned commits from the old Dash branch onto tap main
ab96df6e97181338bb01e5aa767f7cf09b0c9460, which contains squash-merged Dash #14. The only conflict was the additive package catalog; the resolved README retains every current main entry and adds only Make.Every artifact-producing formula line after the support import is byte-identical to the previously validated
bc4d6bdhead (tail SHA-256579aad2e9b56e179e56bad655b4e34301a5f621dbe6208826be1f5c69815cd0d). The loadable-object follow-up retains stable patch ID6eb44606f6ecc6d0125df66d0b8797d15bb77ac2; the separate final commit changes only formula support loading to the installedTap.fetchpath.Current head:
d338c75953b8181b62793f1822ebb1012c0101b2. Throughscripts/dev-shell.sh, Homebrew Ruby syntax, literal formula loading,brew style, the support suite (21 runs/186 assertions),git diff --check, and current-main merge assertions passed. The main-relative diff contains onlyFormula/make.rband the Make README entry, and the worktree is clean. No source build, runtime result, or bottle is newly claimed by this restack.Independent review
Devil review completed. It found and corrected four material issues in the original revision: a false dynamic-loading boundary, missing standard installation outputs, hidden
gmk_*exports, and whitespace-invalid embedded patch context. No formula-local blocker remains after commitcb2775f; the listed platform/dependency gates remain external blockers.