8000 jvm ladder on aarch64 by bryan-minimal · Pull Request #910 · gominimal/pkgs · GitHub
[go: up one dir, main page]

Skip to content

jvm ladder on aarch64 - #910

Draft
bryan-minimal wants to merge 9 commits into
mainfrom
bryan/jvm-ladder-arm
Draft

bryan-minimal wants to merge 9 commits into
mainfrom
bryan/jvm-ladder-arm

Conversation

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

Brings the whole JVM bootstrap ladder to aarch64: jikes → classpath-0.93 → jamvm-1.5.1 → ant/ecj → classpath-0.99/devel → jamvm-2.0.0 → ecj4 → icedtea-7 → icedtea-8 → openjdk-9 … 25. That is all 28 rungs.

  • x86_64 is untouched: every rung keeps the same spec hash (checked with mip dump for all 28). The aarch64 recipe lives in a separate build-aarch64.sh, selected by cmd, so arm iterations never rebuild amd64.
  • aarch64 toolchain: the toolchain gcc (hex0-rooted) against the system glibc. build-aarch64.sh is derived mechanically from build.sh: SR=/usr, the system loader /usr/lib/ld-linux-aarch64.so.1, and no bedrock loader wrappers. The pre-OpenJDK tarballs get config.sub/config.guess refreshed from automake, because they predate aarch64.
  • Ports and fixes, all from Guix's aarch64 bootstrap:
    • JamVM: Simon South's aarch64 port for 1.5.1 and 2.0.0, plus autoreconf.
    • icedtea-7: the HotSpot c++98 patch.
    • icedtea-8 and openjdk-9+: the call_VM_leaf_base duplicate-declaration fix in interp_masm_aarch64.hpp, applied only where a release has the duplicate.

Not in scope: packages/jdk (still the Temurin bindist on both arches).

Result

All 28 rungs build on aarch64 in the sandbox. Runs on 15749809 and c2eaa8cb: every rung uploaded with signed provenance, and package checks passed with 0 failures. The arm openjdk-25 artifact is 149 MB zstd (sha256 75fff8fc…).

aarch64-only fixes found along the way, on top of the ports above:

  • classpath fdlibm: ieeefp.h gets an __aarch64__ endianness case.
  • icedtea-7: HotSpot's uabs is renamed to hs_uabs, because glibc 2.42+ declares uabs.
  • Bundled libpng: PNG_ARM_NEON_OPT=0, because the JDK build never compiles libpng's NEON sources.
  • openjdk-10/11: no -XX:UseAVX=2. It is an x86-only workaround, and the aarch64 JVM rejects the option.

🤖 Generated with Claude Code

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>
@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 16, 2026 20:44
…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>
@bryan-minimal bryan-minimal changed the title jvm ladder on aarch64 (WIP) jvm ladder on aarch64 Oct 17, 2026
bryan-minimal and others added 5 commits October 16, 2026 21:55
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>
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