From 488589f06d2519124fc5c4ba88b2933914b34b37 Mon Sep 17 00:00:00 2001 From: Anton Afanasyev Date: Sat, 30 Jul 2022 08:47:49 -0700 Subject: [PATCH] New package: jetbrains-jdk17-17.0.3b526.1 --- srcpkgs/jetbrains-jdk17/INSTALL.msg | 29 +++++ .../01-jdk_build_classlist_sort_to_file.diff | 64 ++++++++++ srcpkgs/jetbrains-jdk17/template | 109 ++++++++++++++++++ srcpkgs/jetbrains-jdk17/update | 5 + 4 files changed, 207 insertions(+) create mode 100644 srcpkgs/jetbrains-jdk17/INSTALL.msg create mode 100644 srcpkgs/jetbrains-jdk17/patches/01-jdk_build_classlist_sort_to_file.diff create mode 100644 srcpkgs/jetbrains-jdk17/template create mode 100644 srcpkgs/jetbrains-jdk17/update diff --git a/srcpkgs/jetbrains-jdk17/INSTALL.msg b/srcpkgs/jetbrains-jdk17/INSTALL.msg new file mode 100644 index 000000000000..21f1f57c16d2 --- /dev/null +++ b/srcpkgs/jetbrains-jdk17/INSTALL.msg @@ -0,0 +1,29 @@ +JDK17 is not fully supported by JetBrains' IDEs prior to v2022.2. +There is anecdotal evidence that JDK17 is in general more performant, so it may be desirable to use it despite incomplete support. + +It is necessary to add the following to the vmoptions file for any of the JetBrains' IDEs you use in order for the IDE to start: + +--illegal-access=warn +-Dsun.java2d.metal=true +--add-opens=java.base/java.lang=ALL-UNNAMED +--add-opens=java.base/java.util=ALL-UNNAMED +--add-opens=java.desktop/java.awt.event=ALL-UNNAMED +--add-opens=java.desktop/java.awt.peer=ALL-UNNAMED +--add-opens=java.desktop/java.awt=ALL-UNNAMED +--add-opens=java.desktop/javax.swing.plaf.basic=ALL-UNNAMED +--add-opens=java.desktop/javax.swing.text.html=ALL-UNNAMED +--add-opens=java.desktop/javax.swing=ALL-UNNAMED +--add-opens=java.desktop/sun.awt=ALL-UNNAMED +--add-opens=java.desktop/sun.awt.datatransfer=ALL-UNNAMED +--add-opens=java.desktop/sun.awt.image=ALL-UNNAMED +--add-opens=java.desktop/sun.awt.X11=ALL-UNNAMED +--add-opens=java.desktop/sun.font=ALL-UNNAMED +--add-opens=java.desktop/sun.swing=ALL-UNNAMED +--add-exports=java.desktop/sun.awt=ALL-UNNAMED +--add-exports=java.desktop/sun.awt.datatransfer=ALL-UNNAMED +--add-exports=java.desktop/sun.awt.image=ALL-UNNAMED +--add-exports=java.desktop/sun.awt.X11=ALL-UNNAMED + + +Original idea taken from https://mustafaakin.dev/posts/2021-12-08-running-intellij-idea-with-jdk17-for-better-render-performance/. +MacOS namespaces removed, new namespaces added as necessary. diff --git a/srcpkgs/jetbrains-jdk17/patches/01-jdk_build_classlist_sort_to_file.diff b/srcpkgs/jetbrains-jdk17/patches/01-jdk_build_classlist_sort_to_file.diff new file mode 100644 index 000000000000..e94884daf217 --- /dev/null +++ b/srcpkgs/jetbrains-jdk17/patches/01-jdk_build_classlist_sort_to_file.diff @@ -0,0 +1,64 @@ +diff --git a/make/GenerateLinkOptData.gmk b/make/GenerateLinkOptData.gmk +index 5dd766c8c07..7b2480625f1 100644 +--- a/make/GenerateLinkOptData.gmk ++++ b/make/GenerateLinkOptData.gmk +@@ -89,9 +89,10 @@ $(CLASSLIST_FILE): $(INTERIM_IMAGE_DIR)/bin/java$(EXECUTABLE_SUFFIX) $(CLASSLIST + exit $$exitcode \ + ) + $(GREP) -v HelloClasslist $@.raw.2 > $@.raw.3 ++ echo "" > $@ + $(FIXPATH) $(INTERIM_IMAGE_DIR)/bin/java \ + -cp $(SUPPORT_OUTPUTDIR)/classlist.jar \ +- build.tools.classlist.SortClasslist $@.raw.3 > $@ ++ build.tools.classlist.SortClasslist $@.raw.3 $@ + + # The jli trace is created by the same recipe as classlist. By declaring these + # dependencies, make will correctly rebuild both jli trace and classlist +diff --git a/make/jdk/src/classes/build/tools/classlist/SortClasslist.java b/make/jdk/src/classes/build/tools/classlist/SortClasslist.java +index 07987feb2da..7a5b84421fc 100644 +--- a/make/jdk/src/classes/build/tools/classlist/SortClasslist.java ++++ b/make/jdk/src/classes/build/tools/classlist/SortClasslist.java +@@ -33,6 +33,10 @@ package build.tools.classlist; + + import java.io.FileInputStream; + import java.io.FileNotFoundException; ++import java.io.FileOutputStream; ++import java.io.OutputStreamWriter; ++import java.io.PrintWriter; ++import java.nio.charset.StandardCharsets; + import java.util.ArrayList; + import java.util.Collections; + import java.util.regex.Pattern; +@@ -50,13 +54,15 @@ public class SortClasslist { + ArrayList lambdas = new ArrayList<>(); + + FileInputStream fis = new FileInputStream(args[0]); ++ FileOutputStream fos = new FileOutputStream(args[1], false); ++ PrintWriter outWriter = new PrintWriter(new OutputStreamWriter(fos, StandardCharsets.UTF_8)); + Scanner scanner = new Scanner(fis); + while (scanner.hasNextLine()) { + String line = scanner.nextLine(); + if (line.startsWith("#")) { + // Comments -- print them first without sorting. These appear only at the top + // of the file. +- System.out.println(line); ++ outWriter.println(line); + } else if (line.startsWith("@")) { + // @lambda-form-invoker, @lambda-proxy, etc. + lambdas.add(line); +@@ -73,10 +79,13 @@ public class SortClasslist { + Collections.sort(lambdas); + + for (String s : classes) { +- System.out.println(s); ++ outWriter.println(s); + } + for (String s : lambdas) { +- System.out.println(s); ++ outWriter.println(s); + } ++ ++ outWriter.flush(); ++ outWriter.close(); + } + } diff --git a/srcpkgs/jetbrains-jdk17/template b/srcpkgs/jetbrains-jdk17/template new file mode 100644 index 000000000000..88e4079bf714 --- /dev/null +++ b/srcpkgs/jetbrains-jdk17/template @@ -0,0 +1,109 @@ +# Template file for 'jetbrains-jdk17' +pkgname=jetbrains-jdk17 +version=17.0.3b526.1 +revision=1 +archs="x86_64" +_jdk_ver=${version%b*} +_jdk_build=${version#*b} +_tag_name="jb${_jdk_ver}-b${_jdk_build}" +_jdk_home="usr/lib/jvm/jbrsdk" +wrksrc="JetBrainsRuntime-${_tag_name}" +build_style=gnu-configure +configure_args=" + --with-vendor-name=Void + --with-vendor-url=https://voidlinux.org/ + --with-vendor-bug-url=https://github.com/void-linux/void-packages/issues + --with-vendor-vm-bug-url=https://github.com/void-linux/void-packages/issues + --with-version-pre= + --with-version-opt=${_jdk_build}-void-r${revision} + --with-stdc++lib=dynamic + --with-libjpeg=system + --with-giflib=system + --with-libpng=system + --with-lcms=system + --with-zlib=system + --with-jtreg=no + --with-harfbuzz=system + --with-jvm-features=zgc + --enable-unlimited-crypto + --disable-warnings-as-errors + --with-native-debug-symbols=internal +" +make_build_args="images" +make_install_args="INSTALL_PREFIX=\"${DESTDIR}/usr/lib\"" +make_check_target="test-hotspot-gtest" +makedepends="pkg-config zip bzip2 unzip tar wget make autoconf automake libtool alsa-lib-devel cups-devel libX11-devel libjpeg-turbo-devel harfbuzz-devel giflib-devel freetype-devel file which libXtst-devel libXt-devel libXrender-devel alsa-lib-devel fontconfig-devel libXrandr-devel libXi-devel zlib-devel lcms2-devel git make-ca" +short_desc="JetBrains Java 17 JDK" +maintainer="Anton Afanasyev " +license="GPL-2.0-only, Classpath-exception-2.0" +homepage="https://github.com/JetBrains/JetBrainsRuntime" +distfiles="https://github.com/JetBrains/JetBrainsRuntime/archive/refs/tags/${_tag_name}.tar.gz" +checksum=aab60e37c10fb1c122397855fa448e285b241fcff1731342b659ac0e6ecff3ae +conflicts="jetbrains-jdk-bin" + +# For whatever reason, XBPS finds libjava, libjli, etc as dependencies of this package, and decides to make it depend on openjdk8, which provides those. +# But that is not true, nor desired -- this is a full fledged JDK distribution, just not installed as such here in XBPS land. +noverifyrdeps=yes + +# Build is still parallel, but don't use -jN. +disable_parallel_build=yes + +# This does not currently accomplish anything, since only building on x86_64. Leaving this for future, taken from `openjdk17`. +if [ ! "$CROSS_BUILD" ]; then + makedepends+=" openjdk16-bootstrap" + configure_args+=" --with-boot-jdk=/usr/lib/jvm/openjdk16" +else + makedepends+=" openjdk17" + configure_args+=" --with-boot-jdk=/usr/lib/jvm/openjdk17" +fi +configure_args+=" --with-boot-jdk-jvmargs=-Xlog:disable" + +do_configure() { + CFLAGS=${CFLAGS/-D_FORTIFY_SOURCE=2/} + CXXFLAGS=${CXXFLAGS/-D_FORTIFY_SOURCE=2/} + + configure_args=${configure_args/--with-libtool-sysroot=$XBPS_CROSS_BASE} + if [ "$XBPS_CCACHE" ] && [ -z "$CROSS_BUILD" ]; then + configure_args+=" --enable-ccache" + CC="/usr/bin/cc" + CXX="/usr/bin/c++" + fi + + sh ./configure ${configure_args} \ + --with-extra-cflags="$CFLAGS" \ + --with-extra-cxxflags="$CXXFLAGS" \ + --with-extra-ldflags="$LDFLAGS" \ + READELF=$READELF AR=$AR STRIP=$STRIP NM=$NM \ + OBJDUMP=$OBJDUMP OBJCOPY=$OBJCOPY +} + +# TODO: openjdk17 had the following hook in it. Debug it for understanding. +#post_install() { +# vmkdir $_jdk_home/lib/security +# make-ca -g -f --destdir "${PWD}/ca" -k "${DESTDIR}/$_jdk_home/bin/keytool" +# mv ./ca/etc/pki/tls/java/cacerts ${DESTDIR}/$_jdk_home/lib/security/ +# chmod -R ugo+rw ./ca +# rm -rf ./ca +#} + +do_install() { + TARGET_PATH="${_jdk_home}" + + vmkdir ${TARGET_PATH} + + vlicense ASSEMBLY_EXCEPTION + vlicense LICENSE + + cd build/linux-*-server-release/images/jdk/ + vcopy bin ${TARGET_PATH} + vcopy conf ${TARGET_PATH} + vcopy include ${TARGET_PATH} + vcopy legal ${TARGET_PATH} + vcopy lib ${TARGET_PATH} + vcopy release ${TARGET_PATH} + + vmkdir etc/profile.d + cat > ${DESTDIR}/etc/profile.d/10_jbrsdk.sh <