Skip to content

cmd/loopvec-toolexec: rewrite default builds on darwin, ios, android and windows - #9

Open
thesyncim wants to merge 1 commit into
mauri870:masterfrom
thesyncim:toolexec-default-pie
Open

thesyncim wants to merge 1 commit into
mauri870:masterfrom
thesyncim:toolexec-default-pie

Conversation

@thesyncim

@thesyncim thesyncim commented Nov 1, 2026 •

Copy link
Copy Markdown

On macOS the wrapper never rewrites anything. darwin builds PIE by default, the go command passes -shared to every compile, and -shared is on the unsupported list. The same goes for windows, ios and android (they're the targets where internal/platform.DefaultPIE is true). Seven of the eight toolexec scripts fail on macOS because of it.

The concern with -shared is that the nested simd build wouldn't match. But when PIE is the target's default, the nested build is PIE too. So -shared is now accepted when GOOS, which the go command sets for its tools, is one of those four. Anywhere else, an explicit -buildmode=pie is still skipped. toolexec_buildmode_pie.txt covers both sides: a default darwin build is rewritten and prints the same output, and -buildmode=pie on linux is skipped.

toolexec_tests_simd_dependency still fails on macOS, because it reads the parent go command from /proc. I left that alone.

Without this I couldn't use the wrapper on goav1 on a Mac at all.

…and windows

The wrapper leaves a package alone when its compile has -shared, since
the nested build of simd and its dependencies would not match its
objects. But -shared is also how the go command compiles a
position-independent executable, the default build mode on darwin, ios,
android and windows. There every default build was left alone, so
loopvec-toolexec rewrote nothing on macOS, and seven of the toolexec
scripts failed there.

On those targets the nested build is position-independent by default
too, so -shared is accepted. Elsewhere, where -buildmode=pie must be
asked for, it still leaves the package alone, as
toolexec_buildmode_pie.txt checks on linux. The go command sets GOOS for
the tools it runs.
@thesyncim
thesyncim force-pushed the toolexec-default-pie branch from 7f2af16 to 5403ba1 Compare November 1, 2026 13:36
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