Unverified Commit 8b4df30a authored by Bot_wxt1221's avatar Bot_wxt1221 Committed by GitHub
Browse files

Mindustry: fix build on non x86 device (#355174)

* Mindustry: move to by-name

* Mindustry: nixfmt

* Mindustry: fix build on non x86 device
parent 17767a5a
Loading
Loading
Loading
Loading
+286 −0
Original line number Diff line number Diff line
{ lib
, stdenv
, fetchpatch
, makeWrapper
, makeDesktopItem
, copyDesktopItems
, fetchFromGitHub
, gradle
, jdk17
, zenity
{
  lib,
  stdenv,
  fetchpatch,
  makeWrapper,
  makeDesktopItem,
  copyDesktopItems,
  fetchFromGitHub,
  gradle,
  jdk17,
  zenity,

  # for arc
, SDL2
, pkg-config
, ant
, curl
, wget
, alsa-lib
, alsa-plugins
, glew
  SDL2,
  pkg-config,
  ant,
  curl,
  wget,
  alsa-lib,
  alsa-plugins,
  glew,

  # for soloud
, libpulseaudio ? null
, libjack2 ? null

, nixosTests
  libpulseaudio ? null,
  libjack2 ? null,

  nixosTests,

  # Make the build version easily overridable.
  # Server and client build versions must match, and an empty build version means
  # any build is allowed, so this parameter acts as a simple whitelist.
  # Takes the package version and returns the build version.
, makeBuildVersion ? (v: v)
, enableClient ? true
, enableServer ? true
  makeBuildVersion ? (v: v),
  enableClient ? true,
  enableServer ? true,

, enableWayland ? false
  enableWayland ? false,
}:

let
@@ -73,17 +73,22 @@ let
  };

in
assert lib.assertMsg (enableClient || enableServer)
  "mindustry: at least one of 'enableClient' and 'enableServer' must be true";
assert lib.assertMsg (
  enableClient || enableServer
) "mindustry: at least one of 'enableClient' and 'enableServer' must be true";
stdenv.mkDerivation {
  inherit pname version;

  unpackPhase = ''
    runHook preUnpack

    cp -r ${Mindustry} Mindustry
    cp -r ${Arc} Arc
    chmod -R u+w -- Mindustry Arc
    cp -r ${soloud} Arc/arc-core/csrc/soloud
    chmod -R u+w -- Arc/arc-core/csrc/soloud

    runHook postUnpack
  '';

  patches = [
@@ -105,23 +110,27 @@ stdenv.mkDerivation {
      url = "https://github.com/Anuken/Mindustry/commit/695dad201fb4c2b4252f2ee5abde32e968169ba5.patch";
      hash = "sha256-bbTjyfUl+XFG/dgD1XPddVKD/ImOP5ARAP3q0FPnt58=";
      name = "always-use-local-arc-1.patch";
      stripLen = 1; extraPrefix = "Mindustry/";
      stripLen = 1;
      extraPrefix = "Mindustry/";
    })
    (fetchpatch {
      url = "https://github.com/Anuken/Mindustry/commit/f6082225e859c759c8d9c944250b6ecd490151ed.patch";
      hash = "sha256-xFHdAUTS1EiHNQqw6qfzYk2LMr/DjeHoEzQfcfOUcFs=";
      name = "always-use-local-arc-2.patch";
      stripLen = 1; extraPrefix = "Mindustry/";
      stripLen = 1;
      extraPrefix = "Mindustry/";
    })
    (fetchpatch {
      url = "https://github.com/Anuken/Mindustry/commit/e4eadbbb7f35db3093a0a3d13272bdfbedfaead3.patch";
      hash = "sha256-L/XQAxh6UgKsTVTgQKDXNRIAdtVtaY4ameT/Yb/+1p8=";
      name = "always-use-local-arc-3.patch";
      stripLen = 1; extraPrefix = "Mindustry/";
      stripLen = 1;
      extraPrefix = "Mindustry/";
    })
  ];

  postPatch = ''
  postPatch =
    ''
      # Ensure the prebuilt shared objects don't accidentally get shipped
      rm -r Arc/natives/natives-*/libs/*
      rm -r Arc/backends/backend-*/libs/*
@@ -132,6 +141,12 @@ stdenv.mkDerivation {
      sed -i '/^project(":ios"){/,/^}/d' build.gradle
      sed -i '/robo(vm|VM)/d' build.gradle
      rm ios/build.gradle
    ''
    + lib.optionalString (!stdenv.hostPlatform.isx86) ''
      substituteInPlace ../Arc/arc-core/build.gradle \
        --replace-fail "-msse" ""
      substituteInPlace ../Arc/backends/backend-sdl/build.gradle \
        --replace-fail "-m64" ""
    '';

  mitmCache = gradle.fetchDeps {
@@ -146,12 +161,14 @@ stdenv.mkDerivation {
    alsa-lib
    glew
  ];
  nativeBuildInputs = [
  nativeBuildInputs =
    [
      pkg-config
      gradle
      makeWrapper
      jdk
  ] ++ lib.optionals enableClient [
    ]
    ++ lib.optionals enableClient [
      ant
      copyDesktopItems
      curl
@@ -160,11 +177,19 @@ stdenv.mkDerivation {

  desktopItems = lib.optional enableClient desktopItem;

  gradleFlags = [ "-Pbuildversion=${buildVersion}" "-Dorg.gradle.java.home=${jdk}" ];
  gradleFlags = [
    "-Pbuildversion=${buildVersion}"
    "-Dorg.gradle.java.home=${jdk}"
  ];

  buildPhase = lib.optionalString enableServer ''
  buildPhase =
    ''
      runHook preBuild
    ''
    + lib.optionalString enableServer ''
      gradle server:dist
  '' + lib.optionalString enableClient ''
    ''
    + lib.optionalString enableClient ''
      pushd ../Arc
      gradle jnigenBuild
      gradle jnigenJarNativesDesktop
@@ -179,16 +204,26 @@ stdenv.mkDerivation {
      popd

      gradle desktop:dist
    ''
    + ''
      runHook postBuild
    '';

  installPhase = let
  installPhase =
    let
      installClient = ''
        install -Dm644 desktop/build/libs/Mindustry.jar $out/share/mindustry.jar
        mkdir -p $out/bin
        makeWrapper ${jdk}/bin/java $out/bin/mindustry \
          --add-flags "-jar $out/share/mindustry.jar" \
          ${lib.optionalString stdenv.hostPlatform.isLinux "--suffix PATH : ${lib.makeBinPath [ zenity ]}"} \
        --suffix LD_LIBRARY_PATH : ${lib.makeLibraryPath [libpulseaudio alsa-lib libjack2]} \
          --suffix LD_LIBRARY_PATH : ${
            lib.makeLibraryPath [
              libpulseaudio
              alsa-lib
              libjack2
            ]
          } \
          --set ALSA_PLUGIN_DIR ${alsa-plugins}/lib/alsa-lib/ ${lib.optionalString enableWayland ''
            --set SDL_VIDEODRIVER wayland \
            --set SDL_VIDEO_WAYLAND_WMCLASS Mindustry
@@ -212,9 +247,11 @@ stdenv.mkDerivation {
        makeWrapper ${jdk}/bin/java $out/bin/mindustry-server \
          --add-flags "-jar $out/share/mindustry-server.jar"
      '';
  in ''
    in
    ''
      runHook preInstall
  '' + lib.optionalString enableClient installClient
    ''
    + lib.optionalString enableClient installClient
    + lib.optionalString enableServer installServer
    + ''
      runHook postInstall
@@ -237,7 +274,11 @@ stdenv.mkDerivation {
      binaryBytecode # deps
    ];
    license = lib.licenses.gpl3Plus;
    maintainers = with lib.maintainers; [ chkno fgaz thekostins ];
    maintainers = with lib.maintainers; [
      chkno
      fgaz
      thekostins
    ];
    platforms = lib.platforms.all;
    # TODO alsa-lib is linux-only, figure out what dependencies are required on Darwin
    broken = enableClient && stdenv.hostPlatform.isDarwin;
+2 −3
Original line number Diff line number Diff line
@@ -17214,12 +17214,11 @@ with pkgs;
  manaplus = callPackage ../games/manaplus { stdenv = gcc11Stdenv; };
  mindustry = callPackage ../games/mindustry { };
  mindustry-wayland = callPackage ../games/mindustry {
  mindustry-wayland = callPackage ../by-name/mi/mindustry/package.nix {
    enableWayland = true;
  };
  mindustry-server = callPackage ../games/mindustry {
  mindustry-server = callPackage ../by-name/mi/mindustry/package.nix {
    enableClient = false;
    enableServer = true;
  };