Merge pull request #190373 from IvarWithoutBones/fix-darwin-dolphin

This commit is contained in:
Sandro 2022-09-25 23:41:05 +02:00 committed by GitHub
commit 7c9cb921e6
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 151 additions and 35 deletions

View file

@ -1,12 +1,52 @@
{ lib, stdenv, fetchFromGitHub, pkg-config, cmake
, wrapQtAppsHook, qtbase, bluez, ffmpeg, libao, libGLU, libGL, pcre, gettext
, libXrandr, libusb1, libpthreadstubs, libXext, libXxf86vm, libXinerama
, libSM, libXdmcp, readline, openal, udev, libevdev, portaudio, curl, alsa-lib
, miniupnpc, enet, mbedtls, soundtouch, sfml, xz, writeScript
, vulkan-loader ? null, libpulseaudio ? null
{ lib
, stdenv
, fetchFromGitHub
, pkg-config
, cmake
, wrapQtAppsHook
, qtbase
, bluez
, ffmpeg
, libGL
, libXrandr
, libusb1
, libXext
, openal
, udev
, libevdev
, curl
, alsa-lib
, miniupnpc
, enet
, mbedtls
, soundtouch
, sfml
, xz
, hidapi
, fmt_8
, vulkan-loader
, libpulseaudio
, bzip2
, libiconv
, pugixml
, xxHash
# - Inputs used for Darwin
, CoreBluetooth, ForceFeedback, IOKit, OpenGL, libpng, hidapi }:
# Used in passthru
, testers
, dolphin-emu-beta
, writeShellScript
, common-updater-scripts
, jq
# Darwin-only dependencies
, CoreBluetooth
, ForceFeedback
, IOKit
, VideoToolbox
, OpenGL
, libpng
, moltenvk
}:
stdenv.mkDerivation rec {
pname = "dolphin-emu";
@ -20,27 +60,70 @@ stdenv.mkDerivation rec {
fetchSubmodules = true;
};
nativeBuildInputs = [ cmake pkg-config ]
++ lib.optional stdenv.isLinux wrapQtAppsHook;
patches = [
# On x86_64-darwin CMake reportedly does not work without this in some cases.
# See https://github.com/NixOS/nixpkgs/pull/190373#issuecomment-1241310765
./minizip-external-missing-include.patch
];
nativeBuildInputs = [
cmake
pkg-config
wrapQtAppsHook
];
buildInputs = [
curl ffmpeg libao libGLU libGL pcre gettext libpthreadstubs libpulseaudio
libXrandr libXext libXxf86vm libXinerama libSM readline openal libXdmcp
portaudio libusb1 libpng hidapi miniupnpc enet mbedtls soundtouch sfml xz
curl
ffmpeg
pugixml
xxHash
libGL
libpulseaudio
openal
libusb1
libiconv
libpng
hidapi
miniupnpc
enet
mbedtls
soundtouch
sfml
xz
qtbase
fmt_8
bzip2
] ++ lib.optionals stdenv.isLinux [
bluez udev libevdev alsa-lib vulkan-loader
libXrandr
libXext
bluez
udev
libevdev
alsa-lib
vulkan-loader
] ++ lib.optionals stdenv.isDarwin [
CoreBluetooth OpenGL ForceFeedback IOKit
CoreBluetooth
OpenGL
ForceFeedback
IOKit
VideoToolbox
moltenvk
];
cmakeFlags = [
"-DDISTRIBUTOR=NixOS"
"-DUSE_SHARED_ENET=ON"
"-DDOLPHIN_WC_REVISION=${src.rev}"
"-DDOLPHIN_WC_DESCRIBE=${version}"
"-DDOLPHIN_WC_BRANCH=master"
] ++ lib.optionals stdenv.isDarwin [
"-DOSX_USE_DEFAULT_SEARCH_PATH=True"
"-DUSE_BUNDLED_MOLTENVK=OFF"
# Bundles the application folder into a standalone executable, so we cannot devendor libraries
"-DSKIP_POSTPROCESS_BUNDLE=ON"
# Needs xcode so compilation fails with it enabled. We would want the version to be fixed anyways.
# Note: The updater isn't available on linux, so we dont need to disable it there.
"-DENABLE_AUTOUPDATE=OFF"
];
qtWrapperArgs = lib.optionals stdenv.isLinux [
@ -50,37 +133,51 @@ stdenv.mkDerivation rec {
"--set QT_QPA_PLATFORM xcb"
];
# - Allow Dolphin to use nix-provided libraries instead of building them
postPatch = ''
sed -i -e 's,DISTRIBUTOR "None",DISTRIBUTOR "NixOS",g' CMakeLists.txt
'' + lib.optionalString stdenv.isDarwin ''
sed -i -e 's,if(NOT APPLE),if(true),g' CMakeLists.txt
sed -i -e 's,if(LIBUSB_FOUND AND NOT APPLE),if(LIBUSB_FOUND),g' \
CMakeLists.txt
# Use nix-provided libraries instead of submodules
postPatch = lib.optionalString stdenv.isDarwin ''
substituteInPlace CMakeLists.txt \
--replace "if(NOT APPLE)" "if(true)" \
--replace "if(LIBUSB_FOUND AND NOT APPLE)" "if(LIBUSB_FOUND)"
'';
postInstall = lib.optionalString stdenv.hostPlatform.isLinux ''
install -D $src/Data/51-usb-device.rules $out/etc/udev/rules.d/51-usb-device.rules
'' + lib.optionalString stdenv.hostPlatform.isDarwin ''
# Only gets installed automatically if the standalone executable is used
mkdir -p $out/Applications
cp -r ./Binaries/Dolphin.app $out/Applications
ln -s $out/Applications/Dolphin.app/Contents/MacOS/Dolphin $out/bin
'';
passthru = {
tests.version = testers.testVersion {
package = dolphin-emu-beta;
command = "dolphin-emu-nogui --version";
};
passthru.updateScript = writeScript "dolphin-update-script" ''
#!/usr/bin/env nix-shell
#!nix-shell -i bash -p curl jq common-updater-scripts
set -eou pipefail
json="$(curl -s https://dolphin-emu.org/update/latest/beta)"
version="$(jq -r '.shortrev' <<< "$json")"
rev="$(jq -r '.hash' <<< "$json")"
update-source-version dolphin-emu-beta "$version" --rev="$rev"
'';
updateScript = writeShellScript "dolphin-update-script" ''
set -eou pipefail
export PATH=${lib.makeBinPath [ curl jq common-updater-scripts ]}
json="$(curl -s https://dolphin-emu.org/update/latest/beta)"
version="$(jq -r '.shortrev' <<< "$json")"
rev="$(jq -r '.hash' <<< "$json")"
update-source-version dolphin-emu-beta "$version" --rev="$rev"
'';
};
meta = with lib; {
homepage = "https://dolphin-emu.org";
description = "Gamecube/Wii/Triforce emulator for x86_64 and ARMv8";
license = licenses.gpl2Plus;
maintainers = with maintainers; [ MP2E ashkitten xfix ];
mainProgram = "Dolphin";
branch = "master";
broken = stdenv.isDarwin;
license = licenses.gpl2Plus;
platforms = platforms.unix;
maintainers = with maintainers; [
MP2E
ashkitten
xfix
ivar
];
};
}

View file

@ -0,0 +1,18 @@
commit 5e0cb8066fb1653399c54e93e42375295c2562bd
Author: Ivar Scholten <ivar.scholten@protonmail.com>
Date: Fri Sep 9 14:27:55 2022 +0200
Externals/minizip: add missing include to CheckFunctionExists
diff --git a/Externals/minizip/CMakeLists.txt b/Externals/minizip/CMakeLists.txt
index c3d7c5512e..f59f8b295c 100644
--- a/Externals/minizip/CMakeLists.txt
+++ b/Externals/minizip/CMakeLists.txt
@@ -60,6 +60,7 @@ if (HAVE_INTTYPES_H)
target_compile_definitions(minizip PRIVATE HAVE_INTTYPES_H)
endif()
+include(CheckFunctionExists)
check_function_exists(fseeko HAVE_FSEEKO)
if (NOT HAVE_FSEEKO)
target_compile_definitions(minizip PRIVATE NO_FSEEKO)

View file

@ -1661,7 +1661,8 @@ with pkgs;
dolphin-emu = callPackage ../applications/emulators/dolphin-emu { };
dolphin-emu-beta = qt5.callPackage ../applications/emulators/dolphin-emu/master.nix {
inherit (darwin.apple_sdk.frameworks) CoreBluetooth ForceFeedback IOKit OpenGL;
inherit (darwin.apple_sdk.frameworks) CoreBluetooth ForceFeedback IOKit OpenGL VideoToolbox;
inherit (darwin) moltenvk;
};
dolphin-emu-primehack = qt5.callPackage ../applications/emulators/dolphin-emu/primehack.nix {