{"id":2231684,"url":"http://patchwork.ozlabs.org/api/patches/2231684/?format=json","web_url":"http://patchwork.ozlabs.org/project/buildroot/patch/20260501062316.1942112-13-bernd@kuhls.net/","project":{"id":27,"url":"http://patchwork.ozlabs.org/api/projects/27/?format=json","name":"Buildroot development","link_name":"buildroot","list_id":"buildroot.buildroot.org","list_email":"buildroot@buildroot.org","web_url":"","scm_url":"","webscm_url":"","list_archive_url":"","list_archive_url_format":"","commit_url_format":""},"msgid":"<20260501062316.1942112-13-bernd@kuhls.net>","list_archive_url":null,"date":"2026-05-01T06:23:05","name":"[v3,12/21] package/openjdk{-bin}: add OpenJDK25 and configure it as latest","commit_ref":null,"pull_url":null,"state":"superseded","archived":false,"hash":"0199c54f85af644ee7404d7e0e9c3b5fbaeb39e0","submitter":{"id":86624,"url":"http://patchwork.ozlabs.org/api/people/86624/?format=json","name":"Bernd Kuhls","email":"bernd@kuhls.net"},"delegate":null,"mbox":"http://patchwork.ozlabs.org/project/buildroot/patch/20260501062316.1942112-13-bernd@kuhls.net/mbox/","series":[{"id":502425,"url":"http://patchwork.ozlabs.org/api/series/502425/?format=json","web_url":"http://patchwork.ozlabs.org/project/buildroot/list/?series=502425","date":"2026-05-01T06:22:53","name":"package/gcc: add version 16.1.0","version":3,"mbox":"http://patchwork.ozlabs.org/series/502425/mbox/"}],"comments":"http://patchwork.ozlabs.org/api/patches/2231684/comments/","check":"pending","checks":"http://patchwork.ozlabs.org/api/patches/2231684/checks/","tags":{},"related":[],"headers":{"Return-Path":"<buildroot-bounces@buildroot.org>","X-Original-To":["incoming-buildroot@patchwork.ozlabs.org","buildroot@buildroot.org"],"Delivered-To":["patchwork-incoming-buildroot@legolas.ozlabs.org","buildroot@buildroot.org"],"Authentication-Results":["legolas.ozlabs.org;\n\tdkim=pass (2048-bit key;\n unprotected) header.d=buildroot.org header.i=@buildroot.org\n header.a=rsa-sha256 header.s=default header.b=BaT6jrmZ;\n\tdkim-atps=neutral","legolas.ozlabs.org;\n spf=pass (sender SPF authorized) smtp.mailfrom=buildroot.org\n (client-ip=2605:bc80:3010::137; helo=smtp4.osuosl.org;\n envelope-from=buildroot-bounces@buildroot.org; receiver=patchwork.ozlabs.org)"],"Received":["from smtp4.osuosl.org (smtp4.osuosl.org [IPv6:2605:bc80:3010::137])\n\t(using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)\n\t key-exchange x25519 server-signature ECDSA (secp384r1) server-digest SHA384)\n\t(No client certificate requested)\n\tby legolas.ozlabs.org (Postfix) with ESMTPS id 4g6LdV4xScz1y04\n\tfor <incoming-buildroot@patchwork.ozlabs.org>;\n Fri, 01 May 2026 16:25:50 +1000 (AEST)","from localhost (localhost [127.0.0.1])\n\tby smtp4.osuosl.org (Postfix) with ESMTP id 23F6F40B92;\n\tFri,  1 May 2026 06:25:49 +0000 (UTC)","from smtp4.osuosl.org ([127.0.0.1])\n by localhost (smtp4.osuosl.org [127.0.0.1]) (amavis, port 10024) with ESMTP\n id fkYp6EyqY6eC; Fri,  1 May 2026 06:25:47 +0000 (UTC)","from lists1.osuosl.org (lists1.osuosl.org [140.211.166.142])\n\tby smtp4.osuosl.org (Postfix) with ESMTP id 6E0014114E;\n\tFri,  1 May 2026 06:25:47 +0000 (UTC)","from smtp4.osuosl.org (smtp4.osuosl.org [140.211.166.137])\n by lists1.osuosl.org (Postfix) with ESMTP id 2D90B204\n for <buildroot@buildroot.org>; Fri,  1 May 2026 06:25:46 +0000 (UTC)","from localhost (localhost [127.0.0.1])\n by smtp4.osuosl.org (Postfix) with ESMTP id 137C640B92\n for <buildroot@buildroot.org>; Fri,  1 May 2026 06:25:46 +0000 (UTC)","from smtp4.osuosl.org ([127.0.0.1])\n by localhost (smtp4.osuosl.org [127.0.0.1]) (amavis, port 10024) with ESMTP\n id jQSG1oO2HGoC for <buildroot@buildroot.org>;\n Fri,  1 May 2026 06:25:44 +0000 (UTC)","from dd20012.kasserver.com (dd20012.kasserver.com [85.13.140.57])\n by smtp4.osuosl.org (Postfix) with ESMTPS id C361E41B67\n for <buildroot@buildroot.org>; Fri,  1 May 2026 06:25:43 +0000 (UTC)","from fli4l.lan.fli4l (p4fd6c2eb.dip0.t-ipconnect.de\n [79.214.194.235])\n by dd20012.kasserver.com (Postfix) with ESMTPSA id 430A5A4C2C26;\n Fri,  1 May 2026 08:23:28 +0200 (CEST)","from bruckner.lan.fli4l ([192.168.1.1]:38120)\n by fli4l.lan.fli4l with esmtp (Exim 4.99.2)\n (envelope-from <bernd@kuhls.net>) id 1wIhHT-000000007tD-03HW;\n Fri, 01 May 2026 06:23:18 +0000"],"X-Virus-Scanned":["amavis at osuosl.org","amavis at osuosl.org"],"X-Comment":"SPF check N/A for local connections - client-ip=140.211.166.142;\n helo=lists1.osuosl.org; envelope-from=buildroot-bounces@buildroot.org;\n receiver=<UNKNOWN> ","DKIM-Filter":["OpenDKIM Filter v2.11.0 smtp4.osuosl.org 6E0014114E","OpenDKIM Filter v2.11.0 smtp4.osuosl.org C361E41B67"],"DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/relaxed; d=buildroot.org;\n\ts=default; t=1777616747;\n\tbh=W6sG/Hqkmvzf8dNSkk4NX0+Y0R8ZSzBuAH921Df6PdA=;\n\th=From:To:Date:In-Reply-To:References:Subject:List-Id:\n\t List-Unsubscribe:List-Archive:List-Post:List-Help:List-Subscribe:\n\t Cc:From;\n\tb=BaT6jrmZzeiCLOQI5v83xEbqXFux5sPoCWXNt68N4BMH2Tyt6y/bp9JnhChEfNS+Q\n\t ZiDppOjqN+TCNQPPj7WzqYMaZ6qbSENqFOK3jq4Lk4/EzyGj5+DpzH1xSas1lUbaAo\n\t KKjkO1z7M4tnp2hSe4XYP5IRvZ3JJtdth5+VAQXxk6ae93sWU5XPJy8eGnD3elpvud\n\t JSeb1JxeoQDFNCPWR85IbZTZKh9sSboMCITq1EFhFrrgpkgB0XzVwgDFZqnPOrXo6p\n\t spYYsHYitjE4p93nLIHL27MJrnaLbkD1fkaOya9P1m8+LPFW9Yau0iTATytwFtCABE\n\t Je7DFaMNmdNCw==","Received-SPF":"Pass (mailfrom) identity=mailfrom; client-ip=85.13.140.57;\n helo=dd20012.kasserver.com; envelope-from=bernd@kuhls.net;\n receiver=<UNKNOWN>","DMARC-Filter":"OpenDMARC Filter v1.4.2 smtp4.osuosl.org C361E41B67","From":"Bernd Kuhls <bernd@kuhls.net>","To":"buildroot@buildroot.org","Date":"Fri,  1 May 2026 08:23:05 +0200","Message-ID":"<20260501062316.1942112-13-bernd@kuhls.net>","X-Mailer":"git-send-email 2.47.3","In-Reply-To":"<20260501062316.1942112-1-bernd@kuhls.net>","References":"<20260501062316.1942112-1-bernd@kuhls.net>","MIME-Version":"1.0","X-Spamd-Bar":"+","X-Mailman-Original-DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/relaxed;\n d=kuhls.net;\n s=kas202511301023; t=1777616608;\n bh=BgIqYbl9lh3SpFN6ThXHYQjnjIQ8hzwJJdsXVgaR6PE=;\n h=From:To:Cc:Subject:Date:In-Reply-To:From;\n b=LV+b9KrZ2z/7jK9soDJMNfIukfmHpU/VS7bxM3sFFxuKiiAIhwWAOkF9dGUU4HKn+\n 5s/s14WveBv33CmC7FYCjsoDEWethp5uKGDmUiNo21k+Xe+VUKDslN/K312ZTIIjdn\n QOOqPLYq6DkbbKemisQObpnEc0PvaMuw0KxJHrPtlhR4oveduQgEK6qad3N0UExJjD\n eU9Co2YyJsUJJi8WmnxfZASr22f/3hA1mSWEfUI9cCFtwrZDbImlwT7IA5m/o3GGzo\n az3RLcyzIpho+KqmoYftlASUlG7iAqg31JRWewcGpQbmV1pTlVtTvEX7/YU59cj0Nz\n x0eC4kv5VH06w==","X-Mailman-Original-Authentication-Results":["smtp4.osuosl.org;\n dmarc=pass (p=none dis=none)\n header.from=kuhls.net","smtp4.osuosl.org;\n dkim=pass (2048-bit key) header.d=kuhls.net header.i=@kuhls.net\n header.a=rsa-sha256 header.s=kas202511301023 header.b=LV+b9KrZ"],"Subject":"[Buildroot] [PATCH v3 12/21] package/openjdk{-bin}: add OpenJDK25\n and configure it as latest","X-BeenThere":"buildroot@buildroot.org","X-Mailman-Version":"2.1.30","Precedence":"list","List-Id":"Discussion and development of buildroot <buildroot.buildroot.org>","List-Unsubscribe":"<https://lists.buildroot.org/mailman/options/buildroot>,\n <mailto:buildroot-request@buildroot.org?subject=unsubscribe>","List-Archive":"<http://lists.buildroot.org/pipermail/buildroot/>","List-Post":"<mailto:buildroot@buildroot.org>","List-Help":"<mailto:buildroot-request@buildroot.org?subject=help>","List-Subscribe":"<https://lists.buildroot.org/mailman/listinfo/buildroot>,\n <mailto:buildroot-request@buildroot.org?subject=subscribe>","Cc":"Zoltan Gyarmati <mr.zoltan.gyarmati@gmail.com>,\n Thomas Devoogdt <thomas@devoogdt.com>,\n Tudor Holton <buildroot@tudorholton.com>,\n Fabrice Fontaine <fontaine.fabrice@gmail.com>,\n Angelo Compagnucci <angelo.compagnucci@gmail.com>,\n Olivier Schonken <olivier.schonken@gmail.com>,\n Thomas Petazzoni <thomas.petazzoni@bootlin.com>,\n Romain Naour <romain.naour@gmail.com>,\n Giulio Benetti <giulio.benetti@benettiengineering.com>","Content-Type":"text/plain; charset=\"us-ascii\"","Content-Transfer-Encoding":"7bit","Errors-To":"buildroot-bounces@buildroot.org","Sender":"\"buildroot\" <buildroot-bounces@buildroot.org>"},"content":"From: Thomas Devoogdt <thomas@devoogdt.com>\n\nOpenJDK 25 is the latest release.\nSee: https://endoflife.date/oracle-jdk\n\n- BR2_OPENJDK_VERSION_LATEST is now set to 25.\n\n- Add version-specific patches for 25.0.2+10:\n  - 0001: Add ARCv2 ISA processors support to Zero\n  - 0002: Compile OpenJDK in headless mode without requirements\n  - 0003: Fix ambiguous cmp() overload in aarch64 macro assembler\n          (older GCC 6.x compatibility)\n  - 0004: Fix constexpr on non-literal type in Shenandoah GC\n          (older GCC 6.x compatibility)\n\n- Add -fpermissive to fix template definition error with older GCC.\n\n- Update HOST_OPENJDK_BIN_VERSION for OpenJDK 25.\n\n- Update the expectedVersion variable in JniTest.java from 0x00150000\n  (JNI 21) to 0x00180000 (JNI 24/25).\n\nTested with:\n$ ./support/testing/run-tests -o ~/br-test-py/ -d ~/br-test-dl/ \\\n    tests.package.test_openjdk.TestOpenJdk\n\nSigned-off-by: Thomas Devoogdt <thomas@devoogdt.com>\n[Bernd:\n - rebased on bump of versions 17 & 21\n - build-tested with gcc 16-snapshot]\nSigned-off-by: Bernd Kuhls <bernd@kuhls.net>\n---\n .../openjdk-bin/25.0.2_10/openjdk-bin.hash    |   7 +\n package/openjdk-bin/openjdk-bin.mk            |   6 +-\n ...ARCv2-ISA-processors-support-to-Zero.patch | 109 +++++++++++++\n ...OpenJDK-in-headless-mode-without-req.patch | 144 ++++++++++++++++++\n ...spot-aarch64-macro-assembler-fix-cmp.patch |  43 ++++++\n ...ot-share-gc-shenandoah-fix-constexpr.patch |  42 +++++\n package/openjdk/Config.in                     |   7 +-\n package/openjdk/openjdk.hash                  |   1 +\n package/openjdk/openjdk.mk                    |  10 +-\n .../package/openjdk-jni-test/JniTest.java     |   2 +-\n 10 files changed, 363 insertions(+), 8 deletions(-)\n create mode 100644 package/openjdk-bin/25.0.2_10/openjdk-bin.hash\n create mode 100644 package/openjdk/25.0.2+10/0001-Add-ARCv2-ISA-processors-support-to-Zero.patch\n create mode 100644 package/openjdk/25.0.2+10/0002-8376684-Compile-OpenJDK-in-headless-mode-without-req.patch\n create mode 100644 package/openjdk/25.0.2+10/0003-src-hotspot-aarch64-macro-assembler-fix-cmp.patch\n create mode 100644 package/openjdk/25.0.2+10/0004-src-hotspot-share-gc-shenandoah-fix-constexpr.patch","diff":"diff --git a/package/openjdk-bin/25.0.2_10/openjdk-bin.hash b/package/openjdk-bin/25.0.2_10/openjdk-bin.hash\nnew file mode 100644\nindex 0000000000..42892b1e6c\n--- /dev/null\n+++ b/package/openjdk-bin/25.0.2_10/openjdk-bin.hash\n@@ -0,0 +1,7 @@\n+# From https://github.com/adoptium/temurin25-binaries/releases\n+sha256  987387933b64b9833846dee373b640440d3e1fd48a04804ec01a6dbf718e8ab8  OpenJDK25U-jdk_x64_linux_hotspot_25.0.2_10.tar.gz\n+sha256  a9d73e711d967dc44896d4f430f73a68fd33590dabc29a7f2fb9f593425b854c  OpenJDK25U-jdk_aarch64_linux_hotspot_25.0.2_10.tar.gz\n+\n+# Locally calculated\n+sha256  4b9abebc4338048a7c2dc184e9f800deb349366bdf28eb23c2677a77b4c87726  legal/java.prefs/LICENSE\n+sha256  75292f03bf23d3db7c985aecc191029b93883200721ed23ed34a2e601463df33  legal/java.prefs/ASSEMBLY_EXCEPTION\ndiff --git a/package/openjdk-bin/openjdk-bin.mk b/package/openjdk-bin/openjdk-bin.mk\nindex 819bf9052b..5f1922dea5 100644\n--- a/package/openjdk-bin/openjdk-bin.mk\n+++ b/package/openjdk-bin/openjdk-bin.mk\n@@ -4,7 +4,11 @@\n #\n ################################################################################\n \n-ifeq ($(BR2_PACKAGE_OPENJDK_VERSION_21),y)\n+ifeq ($(BR2_PACKAGE_OPENJDK_VERSION_25),y)\n+HOST_OPENJDK_BIN_VERSION_MAJOR = 25\n+HOST_OPENJDK_BIN_VERSION_MINOR = 0.2\n+HOST_OPENJDK_BIN_VERSION_BUILD = 10\n+else ifeq ($(BR2_PACKAGE_OPENJDK_VERSION_21),y)\n HOST_OPENJDK_BIN_VERSION_MAJOR = 21\n HOST_OPENJDK_BIN_VERSION_MINOR = 0.10\n HOST_OPENJDK_BIN_VERSION_BUILD = 7\ndiff --git a/package/openjdk/25.0.2+10/0001-Add-ARCv2-ISA-processors-support-to-Zero.patch b/package/openjdk/25.0.2+10/0001-Add-ARCv2-ISA-processors-support-to-Zero.patch\nnew file mode 100644\nindex 0000000000..5cbc30ddd6\n--- /dev/null\n+++ b/package/openjdk/25.0.2+10/0001-Add-ARCv2-ISA-processors-support-to-Zero.patch\n@@ -0,0 +1,109 @@\n+From 86aee60f0457bd9716c4221da53bcd9d893359b3 Mon Sep 17 00:00:00 2001\n+From: Alexey Brodkin <abrodkin@synopsys.com>\n+Date: Mon, 18 Oct 2021 05:20:05 -0700\n+Subject: [PATCH] Add ARCv2 ISA processors support to Zero\n+\n+This adds ARCv2 processors support in OpenJDK via\n+\"Zero Assembly Project\" (see https://openjdk.java.net/projects/zero).\n+\n+That' a purely interpretive mode, so likely not that fast\n+as JIT'ed version, but for starters it's much better than nothing.\n+\n+Once all the logistical problems are solved hopefully this\n+change will be accepted upstream.\n+\n+Signed-off-by: Alexey Brodkin <abrodkin@synopsys.com>\n+---\n+ make/autoconf/libraries.m4        | 8 ++++++++\n+ make/autoconf/platform.m4         | 8 ++++++++\n+ src/hotspot/os/linux/os_linux.cpp | 8 +++++++-\n+ 3 files changed, 23 insertions(+), 1 deletion(-)\n+\n+diff --git a/make/autoconf/libraries.m4 b/make/autoconf/libraries.m4\n+index 8dc3d55ed0c..96f377c2f99 100644\n+--- a/make/autoconf/libraries.m4\n++++ b/make/autoconf/libraries.m4\n+@@ -141,6 +141,14 @@ AC_DEFUN_ONCE([LIB_SETUP_LIBRARIES],\n+     BASIC_JVM_LIBS=\"$BASIC_JVM_LIBS -lrt\"\n+   fi\n+ \n++  # Libatomic library\n++  # 32-bit ARC needs fallback library for 8-byte atomic ops\n++  # Inspired by a fix for MIPS, see https://github.com/openjdk/jdk/commit/1b3aa3af\n++  if test \"x$OPENJDK_TARGET_OS\" = xlinux &&\n++      (test \"x$OPENJDK_TARGET_CPU\" = xarc); then\n++    BASIC_JVM_LIBS=\"$BASIC_JVM_LIBS -latomic\"\n++  fi\n++\n+   # perfstat lib\n+   if test \"x$OPENJDK_TARGET_OS\" = xaix; then\n+     BASIC_JVM_LIBS=\"$BASIC_JVM_LIBS -lperfstat\"\n+diff --git a/make/autoconf/platform.m4 b/make/autoconf/platform.m4\n+index 31451d0c37f..8d2b95d4399 100644\n+--- a/make/autoconf/platform.m4\n++++ b/make/autoconf/platform.m4\n+@@ -54,6 +54,12 @@ AC_DEFUN([PLATFORM_EXTRACT_VARS_FROM_CPU],\n+       VAR_CPU_BITS=64\n+       VAR_CPU_ENDIAN=little\n+       ;;\n++    arc)\n++      VAR_CPU=arc\n++      VAR_CPU_ARCH=arc\n++      VAR_CPU_BITS=32\n++      VAR_CPU_ENDIAN=little\n++      ;;\n+     arm*)\n+       VAR_CPU=arm\n+       VAR_CPU_ARCH=arm\n+@@ -571,6 +577,8 @@ AC_DEFUN([PLATFORM_SETUP_LEGACY_VARS_HELPER],\n+     HOTSPOT_$1_CPU_DEFINE=RISCV64\n+ \n+   # The cpu defines below are for zero, we don't support them directly.\n++  elif test \"x$OPENJDK_$1_CPU\" = xarc; then\n++    HOTSPOT_$1_CPU_DEFINE=ARC\n+   elif test \"x$OPENJDK_$1_CPU\" = xsparc; then\n+     HOTSPOT_$1_CPU_DEFINE=SPARC\n+   elif test \"x$OPENJDK_$1_CPU\" = xppc; then\n+diff --git a/src/hotspot/os/linux/os_linux.cpp b/src/hotspot/os/linux/os_linux.cpp\n+index 49125ae8954..317e779782d 100644\n+--- a/src/hotspot/os/linux/os_linux.cpp\n++++ b/src/hotspot/os/linux/os_linux.cpp\n+@@ -1757,6 +1757,9 @@ void * os::dll_load(const char *filename, char *ebuf, int ebuflen) {\n+ #ifndef EM_AARCH64\n+   #define EM_AARCH64    183               /* ARM AARCH64 */\n+ #endif\n++#ifndef EM_ARC_COMPACT2\n++  #define EM_ARC_COMPACT2 195             /* ARC ARCv2 ISA */\n++#endif\n+ #ifndef EM_RISCV\n+   #define EM_RISCV      243               /* RISC-V */\n+ #endif\n+@@ -1781,6 +1784,7 @@ void * os::dll_load(const char *filename, char *ebuf, int ebuflen) {\n+     {EM_SH,          EM_SH,      ELFCLASS32, ELFDATA2MSB, (char*)\"SuperH BE\"},\n+ #endif\n+     {EM_ARM,         EM_ARM,     ELFCLASS32, ELFDATA2LSB, (char*)\"ARM\"},\n++    {EM_ARC_COMPACT2, EM_ARC_COMPACT2, ELFCLASS32, ELFDATA2LSB, (char*)\"ARC\"},\n+     // we only support 64 bit z architecture\n+     {EM_S390,        EM_S390,    ELFCLASS64, ELFDATA2MSB, (char*)\"IBM System/390\"},\n+     {EM_ALPHA,       EM_ALPHA,   ELFCLASS64, ELFDATA2LSB, (char*)\"Alpha\"},\n+@@ -1811,6 +1815,8 @@ void * os::dll_load(const char *filename, char *ebuf, int ebuflen) {\n+   static  Elf32_Half running_arch_code=EM_PPC;\n+ #elif  (defined AARCH64)\n+   static  Elf32_Half running_arch_code=EM_AARCH64;\n++#elif  (defined ARC)\n++  static  Elf32_Half running_arch_code=EM_ARC_COMPACT2;\n+ #elif  (defined ARM)\n+   static  Elf32_Half running_arch_code=EM_ARM;\n+ #elif  (defined S390)\n+@@ -1833,7 +1839,7 @@ void * os::dll_load(const char *filename, char *ebuf, int ebuflen) {\n+   static  Elf32_Half running_arch_code=EM_LOONGARCH;\n+ #else\n+     #error Method os::dll_load requires that one of following is defined:\\\n+-        AARCH64, ALPHA, ARM, AMD64, IA32, LOONGARCH64, M68K, MIPS, MIPSEL, PARISC, __powerpc__, __powerpc64__, RISCV, S390, SH, __sparc\n++        AARCH64, ALPHA, ARC, ARM, AMD64, IA32, LOONGARCH64, M68K, MIPS, MIPSEL, PARISC, __powerpc__, __powerpc64__, RISCV, S390, SH, __sparc\n+ #endif\n+ \n+   // Identify compatibility class for VM's architecture and library's architecture\n+-- \n+2.43.0\n+\ndiff --git a/package/openjdk/25.0.2+10/0002-8376684-Compile-OpenJDK-in-headless-mode-without-req.patch b/package/openjdk/25.0.2+10/0002-8376684-Compile-OpenJDK-in-headless-mode-without-req.patch\nnew file mode 100644\nindex 0000000000..78ab31ff62\n--- /dev/null\n+++ b/package/openjdk/25.0.2+10/0002-8376684-Compile-OpenJDK-in-headless-mode-without-req.patch\n@@ -0,0 +1,144 @@\n+From 434d082d9082c1ce2d9ea46ec3c90420442567b9 Mon Sep 17 00:00:00 2001\n+From: Thomas Devoogdt <thomas@devoogdt.com>\n+Date: Wed, 4 Feb 2026 06:48:59 +0000\n+Subject: [PATCH] 8376684: Compile OpenJDK in headless mode without required\n+ X11 libraries\n+\n+Reviewed-by: erikj, aivanov\n+\n+Upstream: https://github.com/openjdk/jdk/pull/28310\n+Signed-off-by: Thomas Devoogdt <thomas@devoogdt.com>\n+---\n+ doc/building.html                                |  7 +++----\n+ doc/building.md                                  |  6 ++----\n+ make/autoconf/libraries.m4                       |  8 ++++----\n+ make/modules/java.desktop/lib/AwtLibraries.gmk   | 16 ++++++++++++++--\n+ .../unix/native/common/awt/utility/rect.h        |  4 ++--\n+ 5 files changed, 25 insertions(+), 16 deletions(-)\n+\n+diff --git a/doc/building.html b/doc/building.html\n+index da8465bc532..f8d815a5474 100644\n+--- a/doc/building.html\n++++ b/doc/building.html\n+@@ -1380,10 +1380,9 @@ <h4 id=\"alsa-1\">ALSA</h4>\n+ can specify it by <code>--with-alsa</code>.</p></li>\n+ </ul>\n+ <h4 id=\"x11-1\">X11</h4>\n+-<p>You will need X11 libraries suitable for your <em>target</em> system.\n+-In most cases, using Debian's pre-built libraries work fine.</p>\n+-<p>Note that X11 is needed even if you only want to build a headless\n+-JDK.</p>\n++<p>When not building a headless JDK, you will need X11 libraries\n++suitable for your <em>target</em> system. In most cases, using Debian's\n++pre-built libraries work fine.</p>\n+ <ul>\n+ <li><p>Go to <a href=\"https://www.debian.org/distrib/packages\">Debian\n+ Package Search</a>, search for the following packages for your\n+diff --git a/doc/building.md b/doc/building.md\n+index 1a9fe6b2e78..92ebd3d32c7 100644\n+--- a/doc/building.md\n++++ b/doc/building.md\n+@@ -1173,10 +1173,8 @@ #### ALSA\n+ \n+ #### X11\n+ \n+-You will need X11 libraries suitable for your *target* system. In most cases,\n+-using Debian's pre-built libraries work fine.\n+-\n+-Note that X11 is needed even if you only want to build a headless JDK.\n++When not building a headless JDK, you will need X11 libraries suitable for your\n++*target* system. In most cases, using Debian's pre-built libraries work fine.\n+ \n+ * Go to [Debian Package Search](https://www.debian.org/distrib/packages),\n+   search for the following packages for your *target* system, and download them\n+diff --git a/make/autoconf/libraries.m4 b/make/autoconf/libraries.m4\n+index 96f377c2f99..8f02b7ec8a7 100644\n+--- a/make/autoconf/libraries.m4\n++++ b/make/autoconf/libraries.m4\n+@@ -42,12 +42,12 @@ m4_include([lib-tests.m4])\n+ AC_DEFUN_ONCE([LIB_DETERMINE_DEPENDENCIES],\n+ [\n+   # Check if X11 is needed\n+-  if test \"x$OPENJDK_TARGET_OS\" = xwindows || test \"x$OPENJDK_TARGET_OS\" = xmacosx; then\n+-    # No X11 support on windows or macosx\n++  if test \"x$OPENJDK_TARGET_OS\" = xwindows ||\n++     test \"x$OPENJDK_TARGET_OS\" = xmacosx ||\n++     test \"x$ENABLE_HEADLESS_ONLY\" = xtrue; then\n+     NEEDS_LIB_X11=false\n+   else\n+-    # All other instances need X11, even if building headless only, libawt still\n+-    # needs X11 headers.\n++    # All other instances need X11 for libawt.\n+     NEEDS_LIB_X11=true\n+   fi\n+ \n+diff --git a/make/modules/java.desktop/lib/AwtLibraries.gmk b/make/modules/java.desktop/lib/AwtLibraries.gmk\n+index 463e09e12dc..8b6b50b9e62 100644\n+--- a/make/modules/java.desktop/lib/AwtLibraries.gmk\n++++ b/make/modules/java.desktop/lib/AwtLibraries.gmk\n+@@ -88,6 +88,10 @@ LIBAWT_EXTRA_HEADER_DIRS := \\\n+ \n+ LIBAWT_CFLAGS := -D__MEDIALIB_OLD_NAMES -D__USE_J2D_NAMES -DMLIB_NO_LIBSUNMATH\n+ \n++ifeq ($(ENABLE_HEADLESS_ONLY), true)\n++  LIBAWT_CFLAGS += -DHEADLESS\n++endif\n++\n+ ifeq ($(call isTargetOs, windows), true)\n+   LIBAWT_CFLAGS += -EHsc -DUNICODE -D_UNICODE -DMLIB_OS64BIT\n+   LIBAWT_RCFLAGS ?= -I$(TOPDIR)/src/java.base/windows/native/launcher/icons\n+@@ -167,11 +171,18 @@ ifeq ($(call isTargetOs, windows macosx), false)\n+       $(TOPDIR)/src/$(MODULE)/$(OPENJDK_TARGET_OS_TYPE)/native/common/awt \\\n+       #\n+ \n++  LIBAWT_HEADLESS_EXCLUDE_FILES := \\\n++      GLXGraphicsConfig.c \\\n++      GLXSurfaceData.c \\\n++      X11PMBlitLoops.c \\\n++      X11Renderer.c \\\n++      X11SurfaceData.c \\\n++      #\n++\n+   LIBAWT_HEADLESS_EXTRA_HEADER_DIRS := \\\n+       $(LIBAWT_DEFAULT_HEADER_DIRS) \\\n+       common/awt/debug \\\n+       common/font \\\n+-      common/java2d/opengl \\\n+       java.base:libjvm \\\n+       #\n+ \n+@@ -191,7 +202,8 @@ ifeq ($(call isTargetOs, windows macosx), false)\n+   $(eval $(call SetupJdkLibrary, BUILD_LIBAWT_HEADLESS, \\\n+       NAME := awt_headless, \\\n+       EXTRA_SRC := $(LIBAWT_HEADLESS_EXTRA_SRC), \\\n+-      EXCLUDES := medialib, \\\n++      EXCLUDES := medialib opengl, \\\n++      EXCLUDE_FILES := $(LIBAWT_HEADLESS_EXCLUDE_FILES), \\\n+       ONLY_EXPORTED := $(LIBAWT_HEADLESS_ONLY_EXPORTED), \\\n+       OPTIMIZATION := LOW, \\\n+       CFLAGS := -DHEADLESS=true $(CUPS_CFLAGS) $(FONTCONFIG_CFLAGS) \\\n+diff --git a/src/java.desktop/unix/native/common/awt/utility/rect.h b/src/java.desktop/unix/native/common/awt/utility/rect.h\n+index ceea38f4349..91b5a17ec58 100644\n+--- a/src/java.desktop/unix/native/common/awt/utility/rect.h\n++++ b/src/java.desktop/unix/native/common/awt/utility/rect.h\n+@@ -28,7 +28,7 @@\n+ #ifndef _AWT_RECT_H\n+ #define _AWT_RECT_H\n+ \n+-#ifndef MACOSX\n++#if !defined(HEADLESS) && !defined(MACOSX)\n+ #include <X11/Xlib.h>\n+ typedef XRectangle RECT_T;\n+ #else\n+@@ -39,7 +39,7 @@ typedef struct {\n+     int width;\n+     int height;\n+ } RECT_T;\n+-#endif /* !MACOSX */\n++#endif /* !HEADLESS && !MACOSX */\n+ \n+ #define RECT_EQ_X(r1,r2)        ((r1).x==(r2).x && (r1).width==(r2).width)\n+ \n+-- \n+2.43.0\n+\ndiff --git a/package/openjdk/25.0.2+10/0003-src-hotspot-aarch64-macro-assembler-fix-cmp.patch b/package/openjdk/25.0.2+10/0003-src-hotspot-aarch64-macro-assembler-fix-cmp.patch\nnew file mode 100644\nindex 0000000000..f1d4de85d7\n--- /dev/null\n+++ b/package/openjdk/25.0.2+10/0003-src-hotspot-aarch64-macro-assembler-fix-cmp.patch\n@@ -0,0 +1,43 @@\n+From ac1110be8a65b230a3413890c77565cead5fa44f Mon Sep 17 00:00:00 2001\n+From: Thomas Devoogdt <thomas@devoogdt.com>\n+Date: Sat, 21 Feb 2026 15:45:42 +0100\n+Subject: [PATCH 3/4] src: hotspot: aarch64: macro assembler: fix cmp\n+\n+Older GCC versions (e.g., GCC 6.x from bootlin toolchains) cannot\n+resolve the overload ambiguity when passing an InstanceKlass::ClassState\n+enum value to cmp(). The compiler sees both cmp(Register, unsigned char)\n+and the deleted cmp(Register, unsigned int) as candidates.\n+\n+Explicitly cast the enum value to unsigned char to fix the build with\n+older toolchains.\n+\n+Fixes:\n+\n+  * For target hotspot_variant-server_libjvm_objs_macroAssembler_aarch64.o:\n+  /home/thomas/br-test-pkg/bootlin-aarch64-glibc-old/build/openjdk-25.0.2+10/src/hotspot/cpu/aarch64/macroAssembler_aarch64.cpp: In member function 'void MacroAssembler::clinit_barrier(Register, Register, Label*, Label*)':\n+  /home/thomas/br-test-pkg/bootlin-aarch64-glibc-old/build/openjdk-25.0.2+10/src/hotspot/cpu/aarch64/macroAssembler_aarch64.cpp:2048:48: error: call of overloaded 'cmp(Register&, InstanceKlass::ClassState)' is ambiguous\n+     cmp(scratch, InstanceKlass::fully_initialized);\n+                                                  ^\n+\n+Upstream: https://github.com/openjdk/jdk/pull/29856\n+Signed-off-by: Thomas Devoogdt <thomas@devoogdt.com>\n+---\n+ src/hotspot/cpu/aarch64/macroAssembler_aarch64.cpp | 2 +-\n+ 1 file changed, 1 insertion(+), 1 deletion(-)\n+\n+diff --git a/src/hotspot/cpu/aarch64/macroAssembler_aarch64.cpp b/src/hotspot/cpu/aarch64/macroAssembler_aarch64.cpp\n+index a424bd7f275..5cf4b1d981f 100644\n+--- a/src/hotspot/cpu/aarch64/macroAssembler_aarch64.cpp\n++++ b/src/hotspot/cpu/aarch64/macroAssembler_aarch64.cpp\n+@@ -2045,7 +2045,7 @@ void MacroAssembler::clinit_barrier(Register klass, Register scratch, Label* L_f\n+   // Fast path check: class is fully initialized\n+   lea(scratch, Address(klass, InstanceKlass::init_state_offset()));\n+   ldarb(scratch, scratch);\n+-  cmp(scratch, InstanceKlass::fully_initialized);\n++  cmp(scratch, (unsigned char)InstanceKlass::fully_initialized);\n+   br(Assembler::EQ, *L_fast_path);\n+ \n+   // Fast path check: current thread is initializer thread\n+-- \n+2.43.0\n+\ndiff --git a/package/openjdk/25.0.2+10/0004-src-hotspot-share-gc-shenandoah-fix-constexpr.patch b/package/openjdk/25.0.2+10/0004-src-hotspot-share-gc-shenandoah-fix-constexpr.patch\nnew file mode 100644\nindex 0000000000..72e5f657ab\n--- /dev/null\n+++ b/package/openjdk/25.0.2+10/0004-src-hotspot-share-gc-shenandoah-fix-constexpr.patch\n@@ -0,0 +1,42 @@\n+From 87cb37e3341a33c5a8fac361972c53b1edc56799 Mon Sep 17 00:00:00 2001\n+From: Thomas Devoogdt <thomas@devoogdt.com>\n+Date: Sat, 21 Feb 2026 15:50:42 +0100\n+Subject: [PATCH 4/4] src: hotspot: share: gc: shenandoah: fix constexpr\n+\n+Older GCC versions (e.g., GCC 6.x from bootlin toolchains) enforce\n+C++14 rules more strictly and do not allow constexpr member functions\n+on non-literal types. ShenandoahSimpleBitMap is not a literal type\n+because it has a non-trivial destructor or other disqualifying members.\n+\n+Remove constexpr from ShenandoahSimpleBitMap::alignment() to fix the\n+build with older toolchains. The function can still be inlined and\n+optimized.\n+\n+Fixes:\n+\n+  /home/thomas/br-test-pkg/bootlin-aarch64-glibc-old/build/openjdk-25.0.2+10/src/hotspot/share/gc/shenandoah/shenandoahSimpleBitMap.hpp:93:26: error: enclosing class of constexpr non-static member function 'idx_t ShenandoahSimpleBitMap::alignment() const' is not a literal type\n+     inline constexpr idx_t alignment() const {\n+                            ^~~~~~~~~\n+\n+Upstream: https://github.com/openjdk/jdk/pull/29856\n+Signed-off-by: Thomas Devoogdt <thomas@devoogdt.com>\n+---\n+ src/hotspot/share/gc/shenandoah/shenandoahSimpleBitMap.hpp | 2 +-\n+ 1 file changed, 1 insertion(+), 1 deletion(-)\n+\n+diff --git a/src/hotspot/share/gc/shenandoah/shenandoahSimpleBitMap.hpp b/src/hotspot/share/gc/shenandoah/shenandoahSimpleBitMap.hpp\n+index 3a4cb8cf742..451c11e2e58 100644\n+--- a/src/hotspot/share/gc/shenandoah/shenandoahSimpleBitMap.hpp\n++++ b/src/hotspot/share/gc/shenandoah/shenandoahSimpleBitMap.hpp\n+@@ -90,7 +90,7 @@ class ShenandoahSimpleBitMap {\n+     return array_idx;\n+   }\n+ \n+-  inline constexpr idx_t alignment() const {\n++  inline idx_t alignment() const {\n+     return BitsPerWord;\n+   }\n+ \n+-- \n+2.43.0\n+\ndiff --git a/package/openjdk/Config.in b/package/openjdk/Config.in\nindex 7f29e7a489..022ded8dbb 100644\n--- a/package/openjdk/Config.in\n+++ b/package/openjdk/Config.in\n@@ -53,8 +53,8 @@ if BR2_PACKAGE_OPENJDK\n choice\n \tprompt \"openjdk version\"\n \tdefault BR2_PACKAGE_OPENJDK_VERSION_17 if BR2_OPENJDK_VERSION_LTS # legacy\n-\tdefault BR2_PACKAGE_OPENJDK_VERSION_21 if BR2_OPENJDK_VERSION_LATEST # legacy\n-\tdefault BR2_PACKAGE_OPENJDK_VERSION_21\n+\tdefault BR2_PACKAGE_OPENJDK_VERSION_25 if BR2_OPENJDK_VERSION_LATEST # legacy\n+\tdefault BR2_PACKAGE_OPENJDK_VERSION_25\n \thelp\n \t  Select the version of OpenJDK you wish to use.\n \n@@ -64,6 +64,9 @@ config BR2_PACKAGE_OPENJDK_VERSION_17\n config BR2_PACKAGE_OPENJDK_VERSION_21\n \tbool \"OpenJDK 21\"\n \n+config BR2_PACKAGE_OPENJDK_VERSION_25\n+\tbool \"OpenJDK 25\"\n+\n endchoice\n \n config BR2_PACKAGE_OPENJDK_X11\ndiff --git a/package/openjdk/openjdk.hash b/package/openjdk/openjdk.hash\nindex 72a6ff2e27..3f83ab48f8 100644\n--- a/package/openjdk/openjdk.hash\n+++ b/package/openjdk/openjdk.hash\n@@ -1,4 +1,5 @@\n # Locally computed\n+sha256  9b3164cedf78d7a76a59499d7a6833145c7e0269ec7b664bfe5ee03ced2f449e  openjdk-25.0.2+10.tar.gz\n sha256  6500906cb7cc49268ce4ca368db3ddf3541b40afd25eecb378e13d5a72f43214  openjdk-21.0.10+7.tar.gz\n sha256  7ebfcc2aafd514c23df3fe5280e1a34630b9b1d429c65a80dd5a4b6e7f177bc3  openjdk-17.0.18+8.tar.gz\n sha256  4b9abebc4338048a7c2dc184e9f800deb349366bdf28eb23c2677a77b4c87726  LICENSE\ndiff --git a/package/openjdk/openjdk.mk b/package/openjdk/openjdk.mk\nindex e5d9d5e630..fbc860019c 100644\n--- a/package/openjdk/openjdk.mk\n+++ b/package/openjdk/openjdk.mk\n@@ -4,11 +4,14 @@\n #\n ################################################################################\n \n-ifeq ($(BR2_PACKAGE_OPENJDK_VERSION_21),y)\n+ifeq ($(BR2_PACKAGE_OPENJDK_VERSION_25),y)\n+OPENJDK_VERSION_MAJOR = 25\n+OPENJDK_VERSION_MINOR = 0.2\n+OPENJDK_VERSION_BUILD = 10\n+else ifeq ($(BR2_PACKAGE_OPENJDK_VERSION_21),y)\n OPENJDK_VERSION_MAJOR = 21\n OPENJDK_VERSION_MINOR = 0.10\n OPENJDK_VERSION_BUILD = 7\n-\n else\n OPENJDK_VERSION_MAJOR = 17\n OPENJDK_VERSION_MINOR = 0.18\n@@ -80,7 +83,6 @@ OPENJDK_CONF_ENV = \\\n \n OPENJDK_CONF_OPTS = \\\n \t--disable-full-docs \\\n-\t--disable-manpages \\\n \t--disable-warnings-as-errors \\\n \t--enable-openjdk-only \\\n \t--enable-unlimited-crypto \\\n@@ -90,7 +92,7 @@ OPENJDK_CONF_OPTS = \\\n \t--with-debug-level=release \\\n \t--with-devkit=$(HOST_DIR) \\\n \t--with-extra-cflags=\"$(TARGET_CFLAGS)\" \\\n-\t--with-extra-cxxflags=\"$(TARGET_CXXFLAGS)\" \\\n+\t--with-extra-cxxflags=\"$(TARGET_CXXFLAGS) -fpermissive\" \\\n \t--with-extra-ldflags=\"-Wl,-rpath,$(OPENJDK_INSTALL_BASE)/lib,-rpath,$(OPENJDK_INSTALL_BASE)/lib/$(OPENJDK_JVM_VARIANT)\" \\\n \t--with-giflib=system \\\n \t--with-jobs=$(PARALLEL_JOBS) \\\ndiff --git a/support/testing/tests/package/br2-external/openjdk/package/openjdk-jni-test/JniTest.java b/support/testing/tests/package/br2-external/openjdk/package/openjdk-jni-test/JniTest.java\nindex 21d9679788..97dec8b804 100644\n--- a/support/testing/tests/package/br2-external/openjdk/package/openjdk-jni-test/JniTest.java\n+++ b/support/testing/tests/package/br2-external/openjdk/package/openjdk-jni-test/JniTest.java\n@@ -33,7 +33,7 @@ public class JniTest\n \tpublic static void main(String[] args)\n \t{\n \t\tvar actualVersion = JniWrapper.get_jni_version();\n-\t\tvar expectedVersion = 0x00150000;\n+\t\tvar expectedVersion = 0x00180000;\n \t\tJniTest.Test(\n \t\t\t\"Get JNI Version\",\n \t\t\tactualVersion,\n","prefixes":["v3","12/21"]}