8000 jdk-21, jdk-25, jdk-27: OpenJDK from source, booted by gen-5's reproduced boot JDKs; the JVM ladder leaves pkgs by bryan-minimal · Pull Request #913 · gominimal/pkgs · GitHub
[go: up one dir, main page]

Skip to content

jdk-21, jdk-25, jdk-27: OpenJDK from source, booted by gen-5's reproduced boot JDKs; the JVM ladder leaves pkgs - #913

Closed
bryan-minimal wants to merge 15 commits into
mainfrom
bryan/jdk-from-source
Closed

bryan-minimal wants to merge 15 commits into
mainfrom
bryan/jdk-from-source

Conversation

@bryan-minimal
@bryan-minimal bryan-minimal commented Oct 17, 2026 •
Copy link
Copy Markdown
Member

jdk-21, jdk-25 and jdk-27 build OpenJDK from the jdk21u/jdk25u/jdk27u tag archives on both arches, booted by openjdk-21, openjdk-25 and openjdk-26. Those three are now prebuilt boot JDKs from gen-5 of gominimal/bootstrap, pinned by sha, and the rest of the JVM ladder leaves pkgs.

What gen-5 is

The 28-rung ladder (jikes → classpath → jamvm → ant/ecj → icedtea-7/8 → openjdk-9 … 26) and its 51 support packages were ported to gominimal/bootstrap and built there from the hex0-rooted toolchain roots. Every rung was built on two independent machines per arch (amd64: an AMD c4d and an Intel c3; arm64: two Axions) and admitted only when both produced identical trees. The objects live in gs://minimal-bootstrap/gen-5/sha256/<sha>/…, public read and create-only, listed in generations/gen-5/manifest.json and MANIFEST.txt, and were verified anonymously after upload.

Getting there took five rounds of the two-machine compare; everything it found was build-time iteration over an unordered collection (directory order, identity hashes, Set.of's per-run salt, Class.getMethods()), none of which a two-round seal on one machine can see. The fixes are patches in bootstrap's overlays/jvm/.

Changed here

  • openjdk-21 (21.0.2), openjdk-25 (25.0.2), openjdk-26 (26.0.2.1): prebuilt specs, both arches, keeping the runtime deps the source rungs declared (zlib, freetype, the X libraries, …). jdk-21/25/27 and their BOOT=/usr/lib/openjdk-N are unchanged.
  • Removed: openjdk-9 … -20, -22, -23, -24, icedtea-7/8, jamvm-1.5.1/2.0.0, classpath-0.93/0.99/devel, ant-bootstrap-1.8.4, ecj-bootstrap-3.2.2, ecj4-bootstrap-4.2.1, jikes-1.22. Nothing outside the ladder imported them.
  • Merged with main (the rungs' conflicts resolve by deletion).

Cost

The ladder no longer rebuilds in every world: 26 packages gone from main, the three boot JDKs fetched instead of built. This CI run is the real test of the gen-5 boot JDKs as roots on both arches.

🤖 Generated with Claude Code

bryan-minimal and others added 10 commits October 16, 2026 20:43
The first three rungs get an aarch64 spec next to the x86_64 one, which
is unchanged (same spec hashes). On aarch64 each builds with the
toolchain gcc against the system glibc through build-aarch64.sh,
derived from build.sh: SR=/usr and the system loader instead of the
bedrock sysroot, no per-process loader wrappers, and config.sub /
config.guess refreshed from automake (the tarballs predate aarch64).
JamVM has no aarch64 port upstream; jamvm-1.5.1 applies Simon South's
(2020, carried by Guix) and regenerates its build system.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…vm-2.0.0, ecj4

Same treatment as the first three rungs (x86_64 spec hashes unchanged).
jamvm-2.0.0 adds Simon South's aarch64 port ahead of the two Guix fixes
it already carries, and regenerates its build system.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
icedtea-7's HotSpot drop already carries the AArch64 port; aarch64 adds
Guix's c++98 patch for sharedRuntime_aarch64.cpp. icedtea-8 drops the
duplicate call_VM_leaf_base using-declaration in
interp_masm_aarch64.hpp that gcc 11+ rejects (Guix's patch-for-aarch64).
x86_64 specs unchanged.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Same treatment as the earlier rungs (x86_64 spec hashes unchanged,
checked for all 17). OpenJDK knows aarch64, so no config.sub refresh;
each aarch64 build drops the duplicate call_VM_leaf_base
using-declaration in interp_masm_aarch64.hpp where a release has it
(gcc 11+ rejects it; Guix's patch-for-aarch64).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
ieeefp.h predates aarch64 and fails with 'Endianess not declared';
classpath-0.93/0.99/devel add the __aarch64__ case on aarch64 (Guix's
classpath-aarch64-support.patch, inserted with python3 since the
rungs carry no patch tool).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
glibc 2.42+ declares uabs(int) in <stdlib.h>, which collides with
HotSpot's own overloads in the aarch64 build; rename them to hs_uabs
as icedtea-8 already does.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
On aarch64 the bundled libpng enables its ARM NEON paths, but the JDK
build never compiles libpng's neon sources, so libsplashscreen fails to
link (png_init_filter_functions_neon). Prepend PNG_ARM_NEON_OPT=0 to
every bundled pngpriv.h in icedtea-7/8 and openjdk-9..25 on aarch64.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The x86_64 recipes pin the boot JVM to AVX2 against an AVX-512
miscompile; the option does not exist on aarch64, so every java step of
the build failed. Drop it from the aarch64 recipes.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
mip check --fix; spec hashes unchanged on both arches.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…f shipping Temurin

Same upstream tags Temurin builds from (jdk25u jdk-25.0.4.1-ga, jdk21u jdk-21.0.12.1-ga),
booted by the openjdk-25 / openjdk-21 rungs and compiled by the production toolchain on
both arches. Same /usr/lib/jvm layout, outputs and tests; CDS archives and src.zip are
left out because they do not reproduce.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@coderabbitai
coderabbitai Bot commented Oct 17, 2026
Copy link
Copy Markdown
Contributor

Important

Draft PR not reviewed

Draft PRs are not automatically reviewed by default.

  • Trigger a manual review

To automatically review draft PRs, update your CodeRabbit configuration:

reviews:
  auto_review:
    drafts: true
  • Autofix · Keep fixing CodeRabbit findings and required CI, and resolving merge conflicts

Comment @coderabbitai help to get the list of available commands.

bryan-minimal and others added 3 commits October 17, 2026 10:28
…configure; --with-source-date implies it)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
openjdk-26 (jdk26u jdk-26.0.2.1-ga) is the openjdk-25 rung moved up one, booted by
openjdk-25 on both arches. jdk-27 (jdk27u jdk-27-ga, Temurin's jdk-27+35) is booted by it,
same recipe as jdk-25.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
… bedrock gcc outside its loader wrapper

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…e ladder leaves pkgs

The 28-rung JVM ladder now lives in gominimal/bootstrap and is published as gen-5, where
each rung was built from source on the hex0-rooted toolchain and reproduced byte for byte
on two independent machines per arch. openjdk-21, openjdk-25 and openjdk-26 are the gen-5
tarballs pinned by sha, with the runtime deps the rungs declared; the other 15 openjdk
rungs and the 11 below them (jikes, classpath, jamvm, ant, ecj, icedtea) are removed.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
@bryan-minimal bryan-minimal changed the title jdk-21, jdk-25, jdk-27: build OpenJDK from source on the JVM ladder (+ openjdk-26 rung) jdk-21, jdk-25, jdk-27: OpenJDK from source, booted by gen-5's reproduced boot JDKs; the JVM ladder leaves pkgs Oct 28, 2026
…u ga tags

Merges main's Temurin bumps (#1137, #1138) into the from-source recipes: same versions
and build numbers, sources mirrored to staging-archives.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
@bryan-minimal
Copy link
Copy Markdown
Member Author

Superseded by #1242, which merges this branch and repoints every bootstrap pin at gen-11 of gominimal/bootstrap. Closing to stop the duplicate world rebuilds; the branch stays.

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

0