about summary refs log tree commit diff
path: root/pkgs/development/compilers/openjdk/openjfx/17/default.nix
diff options
context:
space:
mode:
Diffstat (limited to 'pkgs/development/compilers/openjdk/openjfx/17/default.nix')
-rw-r--r--pkgs/development/compilers/openjdk/openjfx/17/default.nix94
1 files changed, 94 insertions, 0 deletions
diff --git a/pkgs/development/compilers/openjdk/openjfx/17/default.nix b/pkgs/development/compilers/openjdk/openjfx/17/default.nix
new file mode 100644
index 0000000000000..1b19ee30eca69
--- /dev/null
+++ b/pkgs/development/compilers/openjdk/openjfx/17/default.nix
@@ -0,0 +1,94 @@
+{ stdenv, lib, pkgs, fetchFromGitHub, writeText, openjdk17_headless, gradle_7
+, pkg-config, perl, cmake, gperf, gtk2, gtk3, libXtst, libXxf86vm, glib, alsa-lib
+, ffmpeg_6-headless, python3, ruby
+, withMedia ? true
+, withWebKit ? false
+}:
+
+let
+  pname = "openjfx-modular-sdk";
+  major = "17";
+  update = ".0.11";
+  build = "-ga";
+  repover = "${major}${update}${build}";
+  jdk = openjdk17_headless;
+  gradle = gradle_7;
+
+in stdenv.mkDerivation {
+  inherit pname;
+  version = "${major}${update}${build}";
+
+  src = fetchFromGitHub {
+    owner = "openjdk";
+    repo = "jfx${major}u";
+    rev = repover;
+    sha256 = "sha256-9VfXk2EfMebMyVKPohPRP2QXRFf8XemUtfY0JtBCHyw=";
+  };
+
+  patches = [
+    ../backport-ffmpeg-6-support-jfx11.patch
+  ];
+
+  buildInputs = [ gtk2 gtk3 libXtst libXxf86vm glib alsa-lib ffmpeg_6-headless ];
+  nativeBuildInputs = [ gradle perl pkg-config cmake gperf python3 ruby ];
+
+  dontUseCmakeConfigure = true;
+
+  config = writeText "gradle.properties" ''
+    CONF = Release
+    JDK_HOME = ${jdk.home}
+    COMPILE_MEDIA = ${lib.boolToString withMedia}
+    COMPILE_WEBKIT = ${lib.boolToString withWebKit}
+  '';
+
+  postPatch = ''
+    # Add missing includes for gcc-13 for webkit build:
+    sed -e '1i #include <cstdio>' \
+      -i modules/javafx.web/src/main/native/Source/bmalloc/bmalloc/Heap.cpp \
+         modules/javafx.web/src/main/native/Source/bmalloc/bmalloc/IsoSharedPageInlines.h
+
+    ln -s $config gradle.properties
+  '';
+
+  mitmCache = gradle.fetchDeps {
+    attrPath = "openjfx${major}";
+    pkg = pkgs."openjfx${major}".override { withWebKit = true; };
+    data = ./deps.json;
+  };
+
+  __darwinAllowLocalNetworking = true;
+
+  preBuild = ''
+    export NUMBER_OF_PROCESSORS=$NIX_BUILD_CORES
+    export NIX_CFLAGS_COMPILE="$(pkg-config --cflags glib-2.0) $NIX_CFLAGS_COMPILE"
+  '';
+
+  enableParallelBuilding = false;
+
+  gradleBuildTask = "sdk";
+
+  installPhase = ''
+    cp -r build/modular-sdk $out
+  '';
+
+  stripDebugList = [ "." ];
+
+  postFixup = ''
+    # Remove references to bootstrap.
+    export openjdkOutPath='${jdk.outPath}'
+    find "$out" -name \*.so | while read lib; do
+      new_refs="$(patchelf --print-rpath "$lib" | perl -pe 's,:?\Q$ENV{openjdkOutPath}\E[^:]*,,')"
+      patchelf --set-rpath "$new_refs" "$lib"
+    done
+  '';
+
+  disallowedReferences = [ jdk gradle.jdk ];
+
+  meta = with lib; {
+    homepage = "http://openjdk.java.net/projects/openjfx/";
+    license = licenses.gpl2;
+    description = "Next-generation Java client toolkit";
+    maintainers = with maintainers; [ abbradar ];
+    platforms = platforms.unix;
+  };
+}