Merge pull request #329823 from ExpidusOS/fix/pkgsllvm/elfutils
[NixPkgs.git] / pkgs / by-name / ce / cemu / package.nix
blob5a533547e846ce85240ebb35e8f23c9c3e9658b2
2   lib,
3   SDL2,
4   addDriverRunpath,
5   boost,
6   cmake,
7   cubeb,
8   curl,
9   fetchFromGitHub,
10   fmt_9,
11   gamemode,
12   glm,
13   glslang,
14   gtk3,
15   hidapi,
16   imgui,
17   libXrender,
18   libpng,
19   libusb1,
20   libzip,
21   nasm,
22   ninja,
23   nix-update-script,
24   pkg-config,
25   pugixml,
26   rapidjson,
27   stdenv,
28   testers,
29   vulkan-headers,
30   vulkan-loader,
31   wayland,
32   wrapGAppsHook3,
33   wxGTK32,
34   zarchive,
37 let
38   # cemu doesn't build with imgui 1.90.2 or newer:
39   # error: 'struct ImGuiIO' has no member named 'ImeWindowHandle'
40   imgui' = imgui.overrideAttrs rec {
41     version = "1.90.1";
42     src = fetchFromGitHub {
43       owner = "ocornut";
44       repo = "imgui";
45       rev = "v${version}";
46       sha256 = "sha256-gf47uLeNiXQic43buB5ZnMqiotlUfIyAsP+3H7yJuFg=";
47     };
48   };
49 in stdenv.mkDerivation (finalAttrs: {
50   pname = "cemu";
51   version = "2.0-88";
53   src = fetchFromGitHub {
54     owner = "cemu-project";
55     repo = "Cemu";
56     rev = "v${finalAttrs.version}";
57     hash = "sha256-ZXJrxfTgwDmHUk3UqA4H4MSEvNNq9lXHXxf9rgWqkro=";
58   };
60   patches = [
61     # glslangTargets want SPIRV-Tools-opt to be defined:
62     # > The following imported targets are referenced, but are missing:
63     # > SPIRV-Tools-opt
64     ./0000-spirv-tools-opt-cmakelists.patch
65   ];
67   nativeBuildInputs = [
68     SDL2
69     addDriverRunpath
70     wrapGAppsHook3
71     cmake
72     glslang
73     nasm
74     ninja
75     pkg-config
76     wxGTK32
77   ];
79   buildInputs = [
80     SDL2
81     boost
82     cubeb
83     curl
84     fmt_9
85     glm
86     gtk3
87     hidapi
88     imgui'
89     libpng
90     libusb1
91     libzip
92     libXrender
93     pugixml
94     rapidjson
95     vulkan-headers
96     wayland
97     wxGTK32
98     zarchive
99   ];
101   cmakeFlags = [
102     (lib.cmakeFeature "CMAKE_C_FLAGS_RELEASE" "-DNDEBUG")
103     (lib.cmakeFeature "CMAKE_CXX_FLAGS_RELEASE" "-DNDEBUG")
104     (lib.cmakeBool "ENABLE_VCPKG" false)
105     (lib.cmakeBool "ENABLE_FERAL_GAMEMODE" true)
107     # PORTABLE: "All data created and maintained by Cemu will be in
108     # the directory where the executable file is located"
109     (lib.cmakeBool "PORTABLE" false)
110   ];
112   strictDeps = true;
114   preConfigure = let
115     tag = lib.last (lib.splitString "-" finalAttrs.version);
116   in ''
117     rm -rf dependencies/imgui
118     # cemu expects imgui source code, not just header files
119     ln -s ${imgui'.src} dependencies/imgui
120     substituteInPlace src/Common/version.h --replace-fail " (experimental)" "-${tag} (experimental)"
121     substituteInPlace dependencies/gamemode/lib/gamemode_client.h --replace-fail "libgamemode.so.0" "${gamemode.lib}/lib/libgamemode.so.0"
122   '';
124   installPhase = ''
125     runHook preInstall
127     install -Dm755 ../bin/Cemu_release $out/bin/Cemu
128     ln -s $out/bin/Cemu $out/bin/cemu
130     mkdir -p $out/share/applications
131     substitute ../dist/linux/info.cemu.Cemu.desktop $out/share/applications/info.cemu.Cemu.desktop \
132       --replace "Exec=Cemu" "Exec=$out/bin/Cemu"
134     install -Dm644 ../dist/linux/info.cemu.Cemu.metainfo.xml -t $out/share/metainfo
135     install -Dm644 ../src/resource/logo_icon.png $out/share/icons/hicolor/128x128/apps/info.cemu.Cemu.png
137     runHook postInstall
138   '';
140   preFixup = let
141     libs = [ vulkan-loader ] ++ cubeb.passthru.backendLibs;
142   in ''
143     gappsWrapperArgs+=(
144       --prefix LD_LIBRARY_PATH : "${lib.makeLibraryPath libs}"
145     )
146   '';
148   passthru = {
149     updateScript = nix-update-script { };
150     tests = {
151       version = testers.testVersion {
152         package = finalAttrs.finalPackage;
153       };
154     };
155   };
157   meta = {
158     description = "Software to emulate Wii U games and applications on PC";
159     homepage = "https://cemu.info";
160     license = lib.licenses.mpl20;
161     mainProgram = "cemu";
162     maintainers = with lib.maintainers; [ zhaofengli baduhai AndersonTorres ];
163     platforms = [ "x86_64-linux" ];
164   };