1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
|
{
lib,
stdenv,
breakpointHook,
ant,
at-spi2-atk,
buildPackages,
dbus,
fetchAntDeps,
fetchFromGitHub,
gdk-pixbuf,
gtk3,
kotlin,
libGLU,
libglvnd,
xorg,
}:
stdenv.mkDerivation (finalAttrs: {
pname = "lwjgl";
version = "3.3.4";
src = fetchFromGitHub {
owner = "LWJGL";
repo = "lwjgl3";
tag = finalAttrs.version;
hash = "sha256-U0pPeTqVoruqqhhMrBrczy0qt83a8atr8DyRcGgX/yI=";
};
antJdk = buildPackages.jdk_headless;
antDeps = fetchAntDeps {
inherit (finalAttrs)
pname
version
src
antJdk
;
hash = "sha256-7jVlKBia8dJGuBjNwaljHBrXUep9KjOHHyZESayFnhs=";
};
strictDeps = true;
nativeBuildInputs = [
ant
kotlin
] ++ lib.optional (lib.meta.availableOn stdenv.buildPlatform breakpointHook) breakpointHook;
buildInputs = [
at-spi2-atk
dbus
gdk-pixbuf
gtk3
libGLU
xorg.libX11
xorg.libXt
];
env = {
JAVA_HOME = finalAttrs.antJdk.home;
JAVA8_HOME = buildPackages.jdk8_headless.home;
# https://github.com/LWJGL/lwjgl3/tree/e8552d53624f789c8f8c3dc35976fa02cba73cff/doc#build-configuration
LWJGL_BUILD_OFFLINE = "yes";
LWJGL_BUILD_ARCH =
if stdenv.hostPlatform.isx86_64 then
"x64"
else if stdenv.hostPlatform.isi686 then
"x86"
else if stdenv.hostPlatform.isAarch64 then
"arm64"
else if stdenv.hostPlatform.isArmv7 then
"arm32"
else if stdenv.hostPlatform.isRiscV64 then
"riscv64"
else
throw "${stdenv.hostPlatform.cpu.name} is not a supported architecture";
};
# Put the dependencies we already downloaded in the right place
# NOTE: This directory *must* be writable
postConfigure = ''
mkdir bin
cp -dpr "$antDeps" ./bin/libs && chmod -R +w bin/libs
'';
postBuild = ''
mkdir $out
ant \
-emacs \
-Dgcc.libpath.opengl=${libglvnd}/lib \
compile-templates compile-native
'';
postInstall = ''
exit 1
'';
meta = {
platforms =
let
architectures = lib.flatten [
lib.platforms.x86_64
lib.platforms.i686
lib.platforms.aarch64
lib.platforms.armv7
lib.platforms.riscv64
];
in
lib.intersectLists architectures lib.platforms.linux;
};
})
|