162 lines
4.8 KiB
Nix
162 lines
4.8 KiB
Nix
{
|
|
description = "jprototerm";
|
|
|
|
inputs = {
|
|
nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable";
|
|
jlibghostty.url = "git+https://gitea.gregorlohaus.com/gregor/jlibghostty.git";
|
|
};
|
|
|
|
outputs = { self, nixpkgs, jlibghostty }:
|
|
let
|
|
supportedSystems = [ "x86_64-linux" ];
|
|
forAllSystems = nixpkgs.lib.genAttrs supportedSystems;
|
|
in {
|
|
packages = forAllSystems (system:
|
|
let
|
|
pkgs = import nixpkgs { inherit system; };
|
|
|
|
jlib = jlibghostty.packages.${system}.jlibghostty;
|
|
|
|
gluonGraalvm = pkgs.stdenvNoCC.mkDerivation {
|
|
pname = "graalvm-java23-gluon";
|
|
version = "23+25.1-dev-2409082136";
|
|
|
|
src = pkgs.fetchurl {
|
|
url = "https://github.com/gluonhq/graal/releases/download/gluon-23%2B25.1-dev-2409082136/graalvm-java23-linux-amd64-gluon-23+25.1-dev.tar.gz";
|
|
hash = "sha256-/NyMutn3pT4ZKL2pkzPdBZghxg0ERK5VJ2bFQF0VBfU=";
|
|
};
|
|
|
|
installPhase = ''
|
|
runHook preInstall
|
|
|
|
mkdir -p "$out"
|
|
cp -R . "$out/"
|
|
|
|
# The GluonFX Gradle plugin expects these two static libraries
|
|
# directly under linux-amd64, but this tarball keeps them one
|
|
# level deeper under linux-amd64/glibc.
|
|
ln -sfn ./glibc/libjvm.a "$out/lib/svm/clibraries/linux-amd64/libjvm.a"
|
|
ln -sfn ./glibc/liblibchelper.a "$out/lib/svm/clibraries/linux-amd64/liblibchelper.a"
|
|
|
|
runHook postInstall
|
|
'';
|
|
};
|
|
|
|
runtimeLibs = [
|
|
pkgs.libglvnd
|
|
pkgs.glib
|
|
pkgs.gtk3
|
|
pkgs.pango
|
|
pkgs.alsa-lib
|
|
pkgs.ffmpeg.dev
|
|
pkgs.ffmpeg.lib
|
|
pkgs.freetype
|
|
pkgs.libx11
|
|
pkgs.libx11.dev
|
|
pkgs.libxext
|
|
pkgs.libxrender
|
|
pkgs.libxtst
|
|
pkgs.libxtst.dev
|
|
pkgs.libxi
|
|
pkgs.libxcursor
|
|
pkgs.libxrandr
|
|
pkgs.libxinerama
|
|
pkgs.libxcb
|
|
pkgs.libxxf86vm
|
|
pkgs.zlib
|
|
pkgs.zlib.dev
|
|
];
|
|
in {
|
|
default = pkgs.stdenv.mkDerivation {
|
|
pname = "jprototerm";
|
|
version = "0.1.0";
|
|
src = ./.;
|
|
|
|
nativeBuildInputs = [
|
|
gluonGraalvm
|
|
pkgs.gradle_9
|
|
pkgs.makeWrapper
|
|
pkgs.pkg-config
|
|
];
|
|
|
|
buildInputs = runtimeLibs;
|
|
|
|
buildPhase = ''
|
|
runHook preBuild
|
|
|
|
export HOME="$TMPDIR/home"
|
|
export GRADLE_USER_HOME="$TMPDIR/gradle"
|
|
export GRAALVM_HOME="${gluonGraalvm}"
|
|
export JAVA_HOME="${gluonGraalvm}"
|
|
export JLIBGHOSTTY_MAVEN_REPO="${jlib}/maven"
|
|
export LD_LIBRARY_PATH="${pkgs.lib.makeLibraryPath runtimeLibs}:$LD_LIBRARY_PATH"
|
|
|
|
gradle --no-daemon --no-build-cache nativeExecutable
|
|
|
|
runHook postBuild
|
|
'';
|
|
|
|
installPhase = ''
|
|
runHook preInstall
|
|
|
|
mkdir -p "$out/bin"
|
|
binary="$(find build/gluonfx -type f -perm -0100 -name jprototerm | head -n1)"
|
|
if [ -z "$binary" ]; then
|
|
echo "Could not find native jprototerm binary under build/gluonfx" >&2
|
|
find build/gluonfx -type f -perm -0100 >&2 || true
|
|
exit 1
|
|
fi
|
|
|
|
cp "$binary" "$out/bin/jprototerm"
|
|
wrapProgram "$out/bin/jprototerm" \
|
|
--prefix LD_LIBRARY_PATH : "${pkgs.lib.makeLibraryPath runtimeLibs}" \
|
|
--set GDK_BACKEND x11
|
|
|
|
runHook postInstall
|
|
'';
|
|
};
|
|
});
|
|
|
|
devShells = forAllSystems (system:
|
|
let
|
|
pkgs = import nixpkgs { inherit system; };
|
|
jlib = jlibghostty.packages.${system}.jlibghostty;
|
|
runtimeLibs = [
|
|
pkgs.libglvnd
|
|
pkgs.glib
|
|
pkgs.gtk3
|
|
pkgs.pango
|
|
pkgs.alsa-lib
|
|
pkgs.ffmpeg.dev
|
|
pkgs.ffmpeg.lib
|
|
pkgs.freetype
|
|
pkgs.libx11
|
|
pkgs.libx11.dev
|
|
pkgs.libxext
|
|
pkgs.libxrender
|
|
pkgs.libxtst
|
|
pkgs.libxtst.dev
|
|
pkgs.libxi
|
|
pkgs.libxcursor
|
|
pkgs.libxrandr
|
|
pkgs.libxinerama
|
|
pkgs.libxcb
|
|
pkgs.libxxf86vm
|
|
pkgs.zlib
|
|
pkgs.zlib.dev
|
|
];
|
|
in {
|
|
default = pkgs.mkShell {
|
|
packages = [
|
|
pkgs.gradle_9
|
|
pkgs.jdk23
|
|
pkgs.jdt-language-server
|
|
] ++ runtimeLibs;
|
|
|
|
JLIBGHOSTTY_MAVEN_REPO = "${jlib}/maven";
|
|
LD_LIBRARY_PATH = pkgs.lib.makeLibraryPath runtimeLibs;
|
|
};
|
|
});
|
|
};
|
|
}
|