summaryrefslogtreecommitdiff
path: root/pkgs/lwjgl.nix
blob: fac5eb5cdfb0aaad8be7d1d3f1d2ef2ebe5ea2eb (plain)
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;
  };
})