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