You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Thanks for the report — reproduced, and the cause is a stale libs/nistcurves
submodule checkout rather than anything in your build command.
The fix for you
git submodule update --init --recursive
then re-run make BACKEND=uci. If it still fails, git submodule status will
show a + in front of the libs/nistcurves line, which means the checked-out
commit differs from the one this repo pins; git submodule update --force --init --recursive will overwrite it.
The member name in your output is the tell. nistcurves-p256-verify.a at the
pinned v0.11.2 contains zp_config_p256verify.o — upstream gave each archive
its own per-variant ZP object in v0.9.0. A bare zp_config.o, which is what
your run found, only exists in that archive at v0.5.0 – v0.8.0. None of
those releases supports the CONTRACT_ZP_DEFINES make variable at all (it
landed upstream in v0.10.0), so the -D nistcurves_zp_ptr2=0x3d we pass is
silently discarded, the symbol is never defined, and the post-check reports it
absent.
So your libs/nistcurves is somewhere in v0.5.0–v0.8.0 while your c64-https
tree is at or near master.
Reproduced by taking a genuinely fresh clone of master, then moving only the
submodule checkout and re-running the wrapper:
libs/nistcurves checkout
result
v0.6.0 / v0.8.0
ERROR: zp_config.o exports nistcurves_zp_ptr2 = <absent> — your line, character for character
For the record, master itself is fine: a fresh git clone + git submodule update --init libs/nistcurves libs/x25519 + make BACKEND=uci
links build/c64-https.prg here at 9114ff7. And every commit in this repo's
history that uses CONTRACT_ZP_DEFINES already pins v0.11.2, so there is no
commit you could have landed on where the script and the submodule disagree.
What we're fixing on our side
The message blames CONTRACT_ZP_DEFINES — a knob you never touched — when the
real cause is a submodule four-plus releases behind the gitlink. That is a bad
error and we're fixing it:
tools/integration/build_nistcurves_p256.sh gets a preflight that checks the
submodule's working checkout before invoking make, and fails with the git submodule update remedy named directly.
tools/check_upstream_pins.py reads the gitlink via git ls-tree by design
(so it works on a submodule that was never --init'd), which means it would
have told you "v0.11.2, no drift" while your working tree said otherwise. It
gets a mode that compares the two.
Activity
JC-000 commentedon Aug 22, 2026
Thanks for the report — reproduced, and the cause is a stale
libs/nistcurvessubmodule checkout rather than anything in your build command.
The fix for you
then re-run
make BACKEND=uci. If it still fails,git submodule statuswillshow a
+in front of thelibs/nistcurvesline, which means the checked-outcommit differs from the one this repo pins;
git submodule update --force --init --recursivewill overwrite it.You should end up at:
Why that error, specifically
The member name in your output is the tell.
nistcurves-p256-verify.aat thepinned v0.11.2 contains
zp_config_p256verify.o— upstream gave each archiveits own per-variant ZP object in v0.9.0. A bare
zp_config.o, which is whatyour run found, only exists in that archive at v0.5.0 – v0.8.0. None of
those releases supports the
CONTRACT_ZP_DEFINESmake variable at all (itlanded upstream in v0.10.0), so the
-D nistcurves_zp_ptr2=0x3dwe pass issilently discarded, the symbol is never defined, and the post-check reports it
absent.
So your
libs/nistcurvesis somewhere in v0.5.0–v0.8.0 while your c64-httpstree is at or near master.
Reproduced by taking a genuinely fresh clone of master, then moving only the
submodule checkout and re-running the wrapper:
libs/nistcurvescheckoutERROR: zp_config.o exports nistcurves_zp_ptr2 = <absent>— your line, character for characterERROR: zp_config_p256verify.o exports nistcurves_zp_ptr2 = <absent>For the record, master itself is fine: a fresh
git clone+git submodule update --init libs/nistcurves libs/x25519+make BACKEND=ucilinks
build/c64-https.prghere at9114ff7. And every commit in this repo'shistory that uses
CONTRACT_ZP_DEFINESalready pins v0.11.2, so there is nocommit you could have landed on where the script and the submodule disagree.
What we're fixing on our side
The message blames
CONTRACT_ZP_DEFINES— a knob you never touched — when thereal cause is a submodule four-plus releases behind the gitlink. That is a bad
error and we're fixing it:
tools/integration/build_nistcurves_p256.shgets a preflight that checks thesubmodule's working checkout before invoking
make, and fails with thegit submodule updateremedy named directly.tools/check_upstream_pins.pyreads the gitlink viagit ls-treeby design(so it works on a submodule that was never
--init'd), which means it wouldhave told you "v0.11.2, no drift" while your working tree said otherwise. It
gets a mode that compares the two.
Leaving this open until that lands.
Merge pull request #125 from JC-000/fix/stale-submodule-preflight