From a0b297630fb12fe04599ea980f2b2e518dde820e Mon Sep 17 00:00:00 2001 From: aoli-al Date: Tue, 7 Apr 2026 12:04:25 -0400 Subject: [PATCH] jetbrains.jdk-21, jetbrains.jdk-no-jcef-21: init --- .../editors/jetbrains/source/build.nix | 2 +- pkgs/by-name/an/animeko/package.nix | 4 +- .../compilers/jetbrains-jdk/21.nix | 26 ++ .../compilers/jetbrains-jdk/common.nix | 236 +++++++++++++++++ .../compilers/jetbrains-jdk/default.nix | 241 +++--------------- pkgs/top-level/all-packages.nix | 10 + 6 files changed, 304 insertions(+), 215 deletions(-) create mode 100644 pkgs/development/compilers/jetbrains-jdk/21.nix create mode 100644 pkgs/development/compilers/jetbrains-jdk/common.nix diff --git a/pkgs/applications/editors/jetbrains/source/build.nix b/pkgs/applications/editors/jetbrains/source/build.nix index 37d776045f6e..aac0fa6f5140 100644 --- a/pkgs/applications/editors/jetbrains/source/build.nix +++ b/pkgs/applications/editors/jetbrains/source/build.nix @@ -45,7 +45,7 @@ let }; }); - jbr = jetbrains.jdk-no-jcef; + jbr = jetbrains.jdk-no-jcef-21; ideaSrc = fetchFromGitHub { owner = "jetbrains"; diff --git a/pkgs/by-name/an/animeko/package.nix b/pkgs/by-name/an/animeko/package.nix index d2c4b7729294..8b46b3b138da 100644 --- a/pkgs/by-name/an/animeko/package.nix +++ b/pkgs/by-name/an/animeko/package.nix @@ -142,12 +142,12 @@ stdenv.mkDerivation (finalAttrs: { }; env = { - JAVA_HOME = jetbrains.jdk; + JAVA_HOME = jetbrains.jdk-21; ANDROID_SDK_HOME = "$(pwd)"; }; gradleFlags = [ - "-Dorg.gradle.java.home=${jetbrains.jdk}" + "-Dorg.gradle.java.home=${jetbrains.jdk-21}" ]; nativeBuildInputs = [ diff --git a/pkgs/development/compilers/jetbrains-jdk/21.nix b/pkgs/development/compilers/jetbrains-jdk/21.nix new file mode 100644 index 000000000000..821202d6da21 --- /dev/null +++ b/pkgs/development/compilers/jetbrains-jdk/21.nix @@ -0,0 +1,26 @@ +{ + callPackage, + jetbrains, + jdk, + debugBuild ? false, + withJcef ? true, +}: + +callPackage ./common.nix + { + inherit jdk debugBuild withJcef; + } + { + # To get the new tag: + # git clone https://github.com/jetbrains/jetbrainsruntime + # cd jetbrainsruntime + # git tag --points-at [revision] + # Look for the line that starts with jbr- + javaVersion = "21.0.10"; + build = "1163.110"; + # run `git log -1 --pretty=%ct` in jdk repo for new value on update + sourceDateEpoch = 1765114563; + srcHash = "sha256-Qmffu7p6frBoH2Zh+EiqvEoMNNBE79qfkgLSC3+XuI0="; + homePath = "${jetbrains.jdk-21}/lib/openjdk"; + jcefPackage = jetbrains.jcef-21; + } diff --git a/pkgs/development/compilers/jetbrains-jdk/common.nix b/pkgs/development/compilers/jetbrains-jdk/common.nix new file mode 100644 index 000000000000..4a685776d46a --- /dev/null +++ b/pkgs/development/compilers/jetbrains-jdk/common.nix @@ -0,0 +1,236 @@ +{ + lib, + stdenv, + fetchFromGitHub, + jdk, + git, + autoconf, + unzip, + rsync, + shaderc, + vulkan-headers, + libxdamage, + libxxf86vm, + libxrandr, + libxi, + libxcursor, + libxrender, + libx11, + libxext, + libxkbcommon, + libxcb, + nss, + nspr, + libdrm, + libgbm, + wayland, + udev, + fontconfig, + debugBuild ? false, + withJcef ? true, +}: + +{ + javaVersion, + build, + sourceDateEpoch, + srcHash, + homePath, + jcefPackage ? null, + extraBuildPhase ? "", + vendorVersionString ? null, + extraConfigureFlags ? [ ], + extraNativeBuildInputs ? [ ], + extraBuildInputs ? [ ], +}: + +assert debugBuild -> withJcef; + +let + arch = + { + "aarch64-linux" = "aarch64"; + "x86_64-linux" = "x64"; + } + .${stdenv.hostPlatform.system} or (throw "Unsupported system: ${stdenv.hostPlatform.system}"); + cpu = stdenv.hostPlatform.parsed.cpu.name; + version = "${javaVersion}-b${build}"; + openjdkTag = "jbr-release-${javaVersion}b${build}"; +in +jdk.overrideAttrs (oldAttrs: { + pname = "jetbrains-jdk" + lib.optionalString withJcef "-jcef"; + inherit + javaVersion + build + version + openjdkTag + ; + + src = fetchFromGitHub { + owner = "JetBrains"; + repo = "JetBrainsRuntime"; + rev = "jb${version}"; + hash = srcHash; + }; + + env = (oldAttrs.env or { }) // { + BOOT_JDK = jdk.home; + # run `git log -1 --pretty=%ct` in jdk repo for new value on update + SOURCE_DATE_EPOCH = sourceDateEpoch; + }; + + patches = [ ]; + + dontConfigure = true; + + buildPhase = '' + runHook preBuild + + ${lib.optionalString withJcef "cp -r ${jcefPackage} jcef_linux_${arch}"} + ${extraBuildPhase} + + sed \ + -e "s/OPENJDK_TAG=.*/OPENJDK_TAG=${openjdkTag}/" \ + -e "s/SOURCE_DATE_EPOCH=.*//" \ + -e "s/export SOURCE_DATE_EPOCH//" \ + -i jb/project/tools/common/scripts/common.sh + + declare -a realConfigureFlags + + for configureFlag in "''${configureFlags[@]}"; do + case "$configureFlag" in + --host=*) + # intentionally omit flag + ;; + ${lib.optionalString (vendorVersionString != null) '' + --with-vendor-version-string=*) + # Replace the flag from the JDK to include that it is JBR and the package version, so it passes the installation tests + realConfigureFlags+=('--with-vendor-version-string="${vendorVersionString}"') + ;; + ''} + *) + realConfigureFlags+=("$configureFlag") + ;; + esac + done + + ${lib.concatMapStringsSep "\n" (flag: ''realConfigureFlags+=("${flag}")'') extraConfigureFlags} + + echo "computed configure flags: ''${realConfigureFlags[*]}" + substituteInPlace jb/project/tools/linux/scripts/mkimages_${arch}.sh --replace-fail "STATIC_CONF_ARGS" "STATIC_CONF_ARGS ''${realConfigureFlags[*]}" + + sed \ + -e "s/create_image_bundle \"jb/#/" \ + -e "s/echo Creating /exit 0 #/" \ + -i jb/project/tools/linux/scripts/mkimages_${arch}.sh + + patchShebangs . + ./jb/project/tools/linux/scripts/mkimages_${arch}.sh ${build} ${ + if debugBuild then "fd" else (if withJcef then "jcef" else "nomod") + } + + runHook postBuild + ''; + + installPhase = + let + buildType = if debugBuild then "fastdebug" else "release"; + debugSuffix = if debugBuild then "-fastdebug" else ""; + jcefSuffix = if debugBuild || !withJcef then "" else "_jcef"; + jbrsdkDir = "jbrsdk${jcefSuffix}-${javaVersion}-linux-${arch}${debugSuffix}-b${build}"; + in + '' + runHook preInstall + + mv build/linux-${cpu}-server-${buildType}/images/jdk/man build/linux-${cpu}-server-${buildType}/images/${jbrsdkDir} + rm -rf build/linux-${cpu}-server-${buildType}/images/jdk + mv build/linux-${cpu}-server-${buildType}/images/${jbrsdkDir} build/linux-${cpu}-server-${buildType}/images/jdk + '' + + oldAttrs.installPhase + + "runHook postInstall"; + + postInstall = lib.optionalString withJcef '' + chmod +x $out/lib/openjdk/lib/chrome-sandbox + ''; + + dontStrip = debugBuild; + + postFixup = '' + # Build the set of output library directories to rpath against + LIBDIRS="${ + lib.makeLibraryPath [ + libxdamage + libxxf86vm + libxrandr + libxi + libxcursor + libxrender + libx11 + libxext + libxkbcommon + libxcb + nss + nspr + libdrm + libgbm + wayland + udev + fontconfig + ] + }" + for output in ${lib.concatStringsSep " " oldAttrs.outputs}; do + if [ "$output" = debug ]; then continue; fi + LIBDIRS="$(find $(eval echo \$$output) -name \*.so\* -exec dirname {} \+ | sort -u | tr '\n' ':'):$LIBDIRS" + done + # Add the local library paths to remove dependencies on the bootstrap + for output in ${lib.concatStringsSep " " oldAttrs.outputs}; do + if [ "$output" = debug ]; then continue; fi + OUTPUTDIR=$(eval echo \$$output) + BINLIBS=$(find $OUTPUTDIR/bin/ -type f; find $OUTPUTDIR -name \*.so\*) + echo "$BINLIBS" | while read i; do + patchelf --set-rpath "$LIBDIRS:$(patchelf --print-rpath "$i")" "$i" || true + done + done + ''; + + nativeBuildInputs = [ + git + autoconf + unzip + rsync + shaderc # glslc + ] + ++ extraNativeBuildInputs + ++ oldAttrs.nativeBuildInputs; + + buildInputs = [ + vulkan-headers + ] + ++ extraBuildInputs + ++ oldAttrs.buildInputs or [ ]; + + meta = { + description = "OpenJDK fork to better support Jetbrains's products"; + longDescription = '' + JetBrains Runtime is a runtime environment for running IntelliJ Platform + based products on Windows, Mac OS X, and Linux. JetBrains Runtime is + based on OpenJDK project with some modifications. These modifications + include: Subpixel Anti-Aliasing, enhanced font rendering on Linux, HiDPI + support, ligatures, some fixes for native crashes not presented in + official build, and other small enhancements. + JetBrains Runtime is not a certified build of OpenJDK. Please, use at + your own risk. + ''; + homepage = "https://confluence.jetbrains.com/display/JBR/JetBrains+Runtime"; + inherit (jdk.meta) license platforms mainProgram; + maintainers = with lib.maintainers; [ + aoli-al + ]; + + broken = stdenv.hostPlatform.isDarwin; + }; + + passthru = oldAttrs.passthru // { + home = homePath; + }; +}) diff --git a/pkgs/development/compilers/jetbrains-jdk/default.nix b/pkgs/development/compilers/jetbrains-jdk/default.nix index fee99c50f5d5..58b655bdf220 100644 --- a/pkgs/development/compilers/jetbrains-jdk/default.nix +++ b/pkgs/development/compilers/jetbrains-jdk/default.nix @@ -1,70 +1,16 @@ { - lib, - stdenv, + callPackage, fetchurl, - fetchFromGitHub, jetbrains, jdk, - git, - autoconf, - unzip, - rsync, debugBuild ? false, withJcef ? true, - - libxdamage, - libxxf86vm, - libxrandr, - libxi, - libxcursor, - libxrender, - libx11, - libxext, - libxkbcommon, - libxcb, - nss, - nspr, - libdrm, - libgbm, - wayland, wayland-scanner, wayland-protocols, - udev, - fontconfig, - shaderc, - vulkan-headers, + libxkbcommon, }: -assert debugBuild -> withJcef; - let - arch = - { - "aarch64-linux" = "aarch64"; - "x86_64-linux" = "x64"; - } - .${stdenv.hostPlatform.system} or (throw "Unsupported system: ${stdenv.hostPlatform.system}"); - cpu = stdenv.hostPlatform.parsed.cpu.name; -in -jdk.overrideAttrs (oldAttrs: rec { - pname = "jetbrains-jdk" + lib.optionalString withJcef "-jcef"; - javaVersion = "25.0.2"; - build = "329.72"; - # To get the new tag: - # git clone https://github.com/jetbrains/jetbrainsruntime - # cd jetbrainsruntime - # git tag --points-at [revision] - # Look for the line that starts with jbr- - version = "${javaVersion}-b${build}"; - openjdkTag = "jbr-release-${javaVersion}b${build}"; - - src = fetchFromGitHub { - owner = "JetBrains"; - repo = "JetBrainsRuntime"; - rev = "jb${version}"; - hash = "sha256-K4Izbij+1YO4UERHS0mwGKZX/VtIaxyNPZD068Vf99Q="; - }; - gtk-protocols = let rev = "refs/tags/4.22.1"; @@ -75,162 +21,33 @@ jdk.overrideAttrs (oldAttrs: rec { url = "https://raw.githubusercontent.com/GNOME/gtk/${rev}/gdk/wayland/protocol/gtk-shell.xml"; hash = hash; }; - - env = (oldAttrs.env or { }) // { - BOOT_JDK = jdk.home; +in +callPackage ./common.nix + { + inherit jdk debugBuild withJcef; + } + { + # To get the new tag: + # git clone https://github.com/jetbrains/jetbrainsruntime + # cd jetbrainsruntime + # git tag --points-at [revision] + # Look for the line that starts with jbr- + javaVersion = "25.0.2"; + build = "329.72"; # run `git log -1 --pretty=%ct` in jdk repo for new value on update - SOURCE_DATE_EPOCH = 1769205294; - }; - - patches = [ ]; - - dontConfigure = true; - - buildPhase = '' - runHook preBuild - - ${lib.optionalString withJcef "cp -r ${jetbrains.jcef} jcef_linux_${arch}"} - cp -r ${gtk-protocols.out} gtk-shell.xml - - sed \ - -e "s/OPENJDK_TAG=.*/OPENJDK_TAG=${openjdkTag}/" \ - -e "s/SOURCE_DATE_EPOCH=.*//" \ - -e "s/export SOURCE_DATE_EPOCH//" \ - -i jb/project/tools/common/scripts/common.sh - - declare -a realConfigureFlags - - for configureFlag in "''${configureFlags[@]}"; do - case "$configureFlag" in - --host=*) - # intentionally omit flag - ;; - --with-vendor-version-string=*) - # Replace the flag from the JDK to include that it is JBR and the package version, so it passes the installation tests - realConfigureFlags+=('--with-vendor-version-string="nix/JBR-${version}${lib.optionalString withJcef "-jcef"}"') - ;; - *) - realConfigureFlags+=("$configureFlag") - ;; - esac - done - realConfigureFlags+=("--with-wayland-protocols=${wayland-protocols.out}/share/wayland-protocols") - echo "computed configure flags: ''${realConfigureFlags[*]}" - - substituteInPlace jb/project/tools/linux/scripts/mkimages_${arch}.sh --replace-fail "STATIC_CONF_ARGS" "STATIC_CONF_ARGS ''${realConfigureFlags[*]}" - - sed \ - -e "s/create_image_bundle \"jb/#/" \ - -e "s/echo Creating /exit 0 #/" \ - -i jb/project/tools/linux/scripts/mkimages_${arch}.sh - - patchShebangs . - ./jb/project/tools/linux/scripts/mkimages_${arch}.sh ${build} ${ - if debugBuild then "fd" else (if withJcef then "jcef" else "nomod") - } - - runHook postBuild - ''; - - installPhase = - let - buildType = if debugBuild then "fastdebug" else "release"; - debugSuffix = if debugBuild then "-fastdebug" else ""; - jcefSuffix = if debugBuild || !withJcef then "" else "_jcef"; - jbrsdkDir = "jbrsdk${jcefSuffix}-${javaVersion}-linux-${arch}${debugSuffix}-b${build}"; - in - '' - runHook preInstall - - mv build/linux-${cpu}-server-${buildType}/images/jdk/man build/linux-${cpu}-server-${buildType}/images/${jbrsdkDir} - rm -rf build/linux-${cpu}-server-${buildType}/images/jdk - mv build/linux-${cpu}-server-${buildType}/images/${jbrsdkDir} build/linux-${cpu}-server-${buildType}/images/jdk - '' - + oldAttrs.installPhase - + "runHook postInstall"; - - postInstall = lib.optionalString withJcef '' - chmod +x $out/lib/openjdk/lib/chrome-sandbox - ''; - - dontStrip = debugBuild; - - postFixup = '' - # Build the set of output library directories to rpath against - LIBDIRS="${ - lib.makeLibraryPath [ - libxdamage - libxxf86vm - libxrandr - libxi - libxcursor - libxrender - libx11 - libxext - libxkbcommon - libxcb - nss - nspr - libdrm - libgbm - wayland - udev - fontconfig - ] - }" - for output in ${lib.concatStringsSep " " oldAttrs.outputs}; do - if [ "$output" = debug ]; then continue; fi - LIBDIRS="$(find $(eval echo \$$output) -name \*.so\* -exec dirname {} \+ | sort -u | tr '\n' ':'):$LIBDIRS" - done - # Add the local library paths to remove dependencies on the bootstrap - for output in ${lib.concatStringsSep " " oldAttrs.outputs}; do - if [ "$output" = debug ]; then continue; fi - OUTPUTDIR=$(eval echo \$$output) - BINLIBS=$(find $OUTPUTDIR/bin/ -type f; find $OUTPUTDIR -name \*.so\*) - echo "$BINLIBS" | while read i; do - patchelf --set-rpath "$LIBDIRS:$(patchelf --print-rpath "$i")" "$i" || true - done - done - ''; - - nativeBuildInputs = [ - git - autoconf - unzip - rsync - shaderc # glslc - wayland-scanner - libxkbcommon - ] - ++ oldAttrs.nativeBuildInputs; - - buildInputs = [ - vulkan-headers - ] - ++ oldAttrs.buildInputs or [ ]; - - meta = { - description = "OpenJDK fork to better support Jetbrains's products"; - longDescription = '' - JetBrains Runtime is a runtime environment for running IntelliJ Platform - based products on Windows, Mac OS X, and Linux. JetBrains Runtime is - based on OpenJDK project with some modifications. These modifications - include: Subpixel Anti-Aliasing, enhanced font rendering on Linux, HiDPI - support, ligatures, some fixes for native crashes not presented in - official build, and other small enhancements. - JetBrains Runtime is not a certified build of OpenJDK. Please, use at - your own risk. + sourceDateEpoch = 1769205294; + srcHash = "sha256-K4Izbij+1YO4UERHS0mwGKZX/VtIaxyNPZD068Vf99Q="; + homePath = "${jetbrains.jdk}/lib/openjdk"; + jcefPackage = jetbrains.jcef; + extraBuildPhase = '' + cp -r ${gtk-protocols.out} gtk-shell.xml ''; - homepage = "https://confluence.jetbrains.com/display/JBR/JetBrains+Runtime"; - inherit (jdk.meta) license platforms mainProgram; - maintainers = with lib.maintainers; [ - aoli-al + vendorVersionString = "nix/JBR-25.0.2-b329.72${if withJcef then "-jcef" else ""}"; + extraConfigureFlags = [ + "--with-wayland-protocols=${wayland-protocols.out}/share/wayland-protocols" ]; - - broken = stdenv.hostPlatform.isDarwin; - }; - - passthru = oldAttrs.passthru // { - home = "${jetbrains.jdk}/lib/openjdk"; - }; -}) + extraNativeBuildInputs = [ + wayland-scanner + libxkbcommon + ]; + } diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index 51293390c3f1..0f9eb57e0034 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -9623,12 +9623,22 @@ with pkgs; jdk = jdk25; withJcef = false; }; + jdk-no-jcef-21 = callPackage ../development/compilers/jetbrains-jdk/21.nix { + jdk = jdk21; + withJcef = false; + }; jdk = callPackage ../development/compilers/jetbrains-jdk { jdk = jdk25; }; + jdk-21 = callPackage ../development/compilers/jetbrains-jdk/21.nix { + jdk = jdk21; + }; jcef = callPackage ../development/compilers/jetbrains-jdk/jcef.nix { jdk = jdk25; }; + jcef-21 = callPackage ../development/compilers/jetbrains-jdk/jcef.nix { + jdk = jdk21; + }; } // lib.optionalAttrs config.allowAliases { jdk-no-jcef-17 = throw "'jdk-no-jcef-17' has been removed because it is unused in nixpkgs."; # Added 2026-01-24