Skip to content

Splice the softfp shims before the sysroot leaves for stage 2 - #179

Merged
frangarcj merged 1 commit into
masterfrom
softfp-shim-in-sysroot
Aug 27, 2026
Merged

Splice the softfp shims before the sysroot leaves for stage 2#179
frangarcj merged 1 commit into
masterfrom
softfp-shim-in-sysroot

Conversation

@frangarcj

Copy link
Copy Markdown
Contributor

softfp-shim was a dependency of finalize-sdk only. A producer does not run finalize-sdk — it builds the sysroot target and hands the target half to stage 2 — so the stub archives it exported were never patched. The first softfp build in CI failed all eight stage 2 and stage 3 jobs on:

checking the softfp ABI shims (23 functions) resolve against the shim, not the raw stub
missing sceGxmSetViewport resolved against the softfp shim wrapper

The container builds this was verified in are single-stage, where finalize-sdk runs.

The fix names the target half once, in CMakeLists.txt, with the splice in it:

set(target_half_dependencies
    ${gcc_final_barrier} vita-headers newlib pthread-embedded samples
    ${version_info_file})
if(VITASDK_FLOAT_ABI STREQUAL "softfp" AND NOT VITASDK_STAGE1_DIR)
    list(APPEND target_half_dependencies softfp-shim)
endif()

ExportSysroot.cmake and FinalizeSdk.cmake both wait for that list instead of spelling the target half out separately. Stage 2 is excluded because it imports the archives already spliced and builds no components, so there is no softfp-shim target there.

The test checks both recipes take the list and that neither names softfp-shim itself, which is what let them drift.

🤖 Generated with Claude Code

The shims were a dependency of finalize-sdk and of nothing else. A producer
does not run finalize-sdk: it builds the sysroot target, tars the target half
and hands it to stage 2. So the archives it exported had never been patched,
and stage 2 failed the ABI contract test with

  checking the softfp ABI shims (23 functions) resolve against the shim
  missing sceGxmSetViewport resolved against the softfp shim wrapper

which is the check doing its job two jobs away from the cause. The first
softfp build in CI is where this surfaced; the container builds it was
verified in are single-stage, and there finalize-sdk runs.

The two lists were the problem, not the missing entry. They are mutually
exclusive -- a producer exports, everything else finalizes -- so anything
added to one and forgotten in the other stays invisible until something reads
the result. Name the target half once and let both wait for it; the splice
belongs to that list, at the point where the world is known to be softfp.

Stage 2 is excluded because it imports the archives already spliced and
builds no components, so there is no softfp-shim target there to wait for.

The test reads both recipes and refuses either naming the splice itself,
which is what let them drift.
@frangarcj
frangarcj merged commit cd2db96 into master Aug 27, 2026
19 of 25 checks passed
@frangarcj
frangarcj deleted the softfp-shim-in-sysroot branch August 27, 2026 17:58
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