Skip to content

Commit 7a53a5c

Browse files
Merge branch 'main' into camera
2 parents e9f26a5 + 57ff99c commit 7a53a5c

File tree

153 files changed

+5353
-2418
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

153 files changed

+5353
-2418
lines changed

.github/workflows/build.yml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ jobs:
3939
- name: "Install system dependencies"
4040
run: |
4141
sudo apt update -qq
42-
sudo apt install -y clang-15 cmake freeglut3-dev libgcrypt20-dev libglm-dev libgtk-3-dev libpulse-dev libsecret-1-dev libsystemd-dev libudev-dev nasm ninja-build
42+
sudo apt install -y clang-15 cmake freeglut3-dev libgcrypt20-dev libglm-dev libgtk-3-dev libpulse-dev libsecret-1-dev libsystemd-dev libudev-dev nasm ninja-build libbluetooth-dev
4343
4444
- name: "Setup cmake"
4545
uses: jwlawson/actions-setup-cmake@v2
@@ -96,7 +96,7 @@ jobs:
9696
- name: "Install system dependencies"
9797
run: |
9898
sudo apt update -qq
99-
sudo apt install -y clang-15 cmake freeglut3-dev libgcrypt20-dev libglm-dev libgtk-3-dev libpulse-dev libsecret-1-dev libsystemd-dev nasm ninja-build appstream
99+
sudo apt install -y clang-15 cmake freeglut3-dev libgcrypt20-dev libglm-dev libgtk-3-dev libpulse-dev libsecret-1-dev libsystemd-dev nasm ninja-build appstream libbluetooth-dev
100100
101101
- name: "Build AppImage"
102102
run: |

.github/workflows/deploy_experimental_release.yml renamed to .github/workflows/deploy_release.yml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
name: Deploy experimental release
1+
name: Deploy release
22
on:
33
workflow_dispatch:
44
inputs:
@@ -54,7 +54,7 @@ jobs:
5454
next_version_major: ${{ needs.calculate-version.outputs.next_version_major }}
5555
next_version_minor: ${{ needs.calculate-version.outputs.next_version_minor }}
5656
deploy:
57-
name: Deploy experimental release
57+
name: Deploy release
5858
runs-on: ubuntu-22.04
5959
needs: [call-release-build, calculate-version]
6060
steps:

.github/workflows/deploy_stable_release.yml

Lines changed: 0 additions & 85 deletions
This file was deleted.

.github/workflows/generate_pot.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ jobs:
3535
-o cemu.pot
3636
3737
- name: Upload artifact
38-
uses: actions/upload-artifact@v3
38+
uses: actions/upload-artifact@v4
3939
with:
4040
name: POT file
4141
path: ./cemu.pot

BUILD.md

Lines changed: 44 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -46,18 +46,18 @@ To compile Cemu, a recent enough compiler and STL with C++20 support is required
4646
### Dependencies
4747

4848
#### For Arch and derivatives:
49-
`sudo pacman -S --needed base-devel clang cmake freeglut git glm gtk3 libgcrypt libpulse libsecret linux-headers llvm nasm ninja systemd unzip zip`
49+
`sudo pacman -S --needed base-devel bluez-libs clang cmake freeglut git glm gtk3 libgcrypt libpulse libsecret linux-headers llvm nasm ninja systemd unzip zip`
5050

5151
#### For Debian, Ubuntu and derivatives:
52-
`sudo apt install -y cmake curl clang-15 freeglut3-dev git libgcrypt20-dev libglm-dev libgtk-3-dev libpulse-dev libsecret-1-dev libsystemd-dev libtool nasm ninja-build`
52+
`sudo apt install -y cmake curl clang-15 freeglut3-dev git libbluetooth-dev libgcrypt20-dev libglm-dev libgtk-3-dev libpulse-dev libsecret-1-dev libsystemd-dev libtool nasm ninja-build`
5353

5454
You may also need to install `libusb-1.0-0-dev` as a workaround for an issue with the vcpkg hidapi package.
5555

5656
At Step 3 in [Build Cemu using cmake and clang](#build-cemu-using-cmake-and-clang), use the following command instead:
5757
`cmake -S . -B build -DCMAKE_BUILD_TYPE=release -DCMAKE_C_COMPILER=/usr/bin/clang-15 -DCMAKE_CXX_COMPILER=/usr/bin/clang++-15 -G Ninja -DCMAKE_MAKE_PROGRAM=/usr/bin/ninja`
5858

5959
#### For Fedora and derivatives:
60-
`sudo dnf install clang cmake cubeb-devel freeglut-devel git glm-devel gtk3-devel kernel-headers libgcrypt-devel libsecret-devel libtool libusb1-devel llvm nasm ninja-build perl-core systemd-devel zlib-devel zlib-static`
60+
`sudo dnf install bluez-libs-devel clang cmake cubeb-devel freeglut-devel git glm-devel gtk3-devel kernel-headers libgcrypt-devel libsecret-devel libtool libusb1-devel llvm nasm ninja-build perl-core systemd-devel wayland-protocols-devel zlib-devel zlib-static`
6161

6262
### Build Cemu
6363

@@ -120,6 +120,9 @@ This section refers to running `cmake -S...` (truncated).
120120
* Compiling failed during rebuild after `git pull` with an error that mentions RPATH
121121
* Add the following and try running the command again:
122122
* `-DCMAKE_BUILD_WITH_INSTALL_RPATH=ON`
123+
* Environment variable `VCPKG_FORCE_SYSTEM_BINARIES` must be set.
124+
* Execute the folowing and then try running the command again:
125+
* `export VCPKG_FORCE_SYSTEM_BINARIES=1`
123126
* If you are getting a random error, read the [package-name-and-platform]-out.log and [package-name-and-platform]-err.log for the actual reason to see if you might be lacking the headers from a dependency.
124127

125128

@@ -189,3 +192,41 @@ Then install the dependencies:
189192

190193
If CMake complains about Cemu already being compiled or another similar error, try deleting the `CMakeCache.txt` file inside the `build` folder and retry building.
191194

195+
## CMake configure flags
196+
Some flags can be passed during CMake configure to customise which features are enabled on build.
197+
198+
Example usage: `cmake -S . -B build -DCMAKE_BUILD_TYPE=release -DENABLE_SDL=ON -DENABLE_VULKAN=OFF`
199+
200+
### All platforms
201+
| Flag | | Description | Default | Note |
202+
|--------------------|:--|-----------------------------------------------------------------------------|---------|--------------------|
203+
| ALLOW_PORTABLE | | Allow Cemu to use the `portable` directory to store configs and data | ON | |
204+
| CEMU_CXX_FLAGS | | Flags passed straight to the compiler, e.g. `-march=native`, `-Wall`, `/W3` | "" | |
205+
| ENABLE_CUBEB | | Enable cubeb audio backend | ON | |
206+
| ENABLE_DISCORD_RPC | | Enable Discord Rich presence support | ON | |
207+
| ENABLE_OPENGL | | Enable OpenGL graphics backend | ON | Currently required |
208+
| ENABLE_HIDAPI | | Enable HIDAPI (used for Wiimote controller API) | ON | |
209+
| ENABLE_SDL | | Enable SDLController controller API | ON | Currently required |
210+
| ENABLE_VCPKG | | Use VCPKG package manager to obtain dependencies | ON | |
211+
| ENABLE_VULKAN | | Enable the Vulkan graphics backend | ON | |
212+
| ENABLE_WXWIDGETS | | Enable wxWidgets UI | ON | Currently required |
213+
214+
### Windows
215+
| Flag | Description | Default | Note |
216+
|--------------------|-----------------------------------|---------|--------------------|
217+
| ENABLE_DIRECTAUDIO | Enable DirectAudio audio backend | ON | Currently required |
218+
| ENABLE_DIRECTINPUT | Enable DirectInput controller API | ON | Currently required |
219+
| ENABLE_XAUDIO | Enable XAudio audio backend | ON | |
220+
| ENABLE_XINPUT | Enable XInput controller API | ON | |
221+
222+
### Linux
223+
| Flag | Description | Default |
224+
|-----------------------|----------------------------------------------------|---------|
225+
| ENABLE_BLUEZ | Build with Bluez (used for Wiimote controller API) | ON |
226+
| ENABLE_FERAL_GAMEMODE | Enable Feral Interactive GameMode support | ON |
227+
| ENABLE_WAYLAND | Enable Wayland support | ON |
228+
229+
### macOS
230+
| Flag | Description | Default |
231+
|--------------|------------------------------------------------|---------|
232+
| MACOS_BUNDLE | MacOS executable will be an application bundle | OFF |

CMakeLists.txt

Lines changed: 8 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ cmake_minimum_required(VERSION 3.21.1)
22

33
option(ENABLE_VCPKG "Enable the vcpkg package manager" ON)
44
option(MACOS_BUNDLE "The executable when built on macOS will be created as an application bundle" OFF)
5+
option(ALLOW_PORTABLE "Allow Cemu to be run in portable mode" ON)
56

67
# used by CI script to set version:
78
set(EMULATOR_VERSION_MAJOR "0" CACHE STRING "")
@@ -98,6 +99,7 @@ endif()
9899
if (UNIX AND NOT APPLE)
99100
option(ENABLE_WAYLAND "Build with Wayland support" ON)
100101
option(ENABLE_FERAL_GAMEMODE "Enables Feral Interactive GameMode Support" ON)
102+
option(ENABLE_BLUEZ "Build with Bluez support" ON)
101103
endif()
102104

103105
option(ENABLE_OPENGL "Enables the OpenGL backend" ON)
@@ -122,23 +124,6 @@ if (WIN32)
122124
endif()
123125
option(ENABLE_CUBEB "Enabled cubeb backend" ON)
124126

125-
# usb hid backends
126-
if (WIN32)
127-
option(ENABLE_NSYSHID_WINDOWS_HID "Enables the native Windows HID backend for nsyshid" ON)
128-
endif ()
129-
# libusb and windows hid backends shouldn't be active at the same time; otherwise we'd see all devices twice!
130-
if (NOT ENABLE_NSYSHID_WINDOWS_HID)
131-
option(ENABLE_NSYSHID_LIBUSB "Enables the libusb backend for nsyshid" ON)
132-
else ()
133-
set(ENABLE_NSYSHID_LIBUSB OFF CACHE BOOL "" FORCE)
134-
endif ()
135-
if (ENABLE_NSYSHID_WINDOWS_HID)
136-
add_compile_definitions(NSYSHID_ENABLE_BACKEND_WINDOWS_HID)
137-
endif ()
138-
if (ENABLE_NSYSHID_LIBUSB)
139-
add_compile_definitions(NSYSHID_ENABLE_BACKEND_LIBUSB)
140-
endif ()
141-
142127
option(ENABLE_WXWIDGETS "Build with wxWidgets UI (Currently required)" ON)
143128

144129
set(THREADS_PREFER_PTHREAD_FLAG true)
@@ -179,6 +164,12 @@ if (UNIX AND NOT APPLE)
179164
endif()
180165
find_package(GTK3 REQUIRED)
181166

167+
if(ENABLE_BLUEZ)
168+
find_package(bluez REQUIRED)
169+
set(ENABLE_WIIMOTE ON)
170+
add_compile_definitions(HAS_BLUEZ)
171+
endif()
172+
182173
endif()
183174

184175
if (ENABLE_VULKAN)

bin/resources/ar/‏‏cemu.mo

79.9 KB
Binary file not shown.

bin/resources/de/cemu.mo

3.75 KB
Binary file not shown.

bin/resources/ru/cemu.mo

1.11 KB
Binary file not shown.

bin/resources/sv/cemu.mo

50.9 KB
Binary file not shown.

cmake/Findbluez.cmake

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
# SPDX-FileCopyrightText: 2022 Andrea Pappacoda <[email protected]>
2+
# SPDX-License-Identifier: ISC
3+
4+
find_package(bluez CONFIG)
5+
if (NOT bluez_FOUND)
6+
find_package(PkgConfig)
7+
if (PKG_CONFIG_FOUND)
8+
pkg_search_module(bluez IMPORTED_TARGET GLOBAL bluez-1.0 bluez)
9+
if (bluez_FOUND)
10+
add_library(bluez::bluez ALIAS PkgConfig::bluez)
11+
endif ()
12+
endif ()
13+
endif ()
14+
15+
find_package_handle_standard_args(bluez
16+
REQUIRED_VARS
17+
bluez_LINK_LIBRARIES
18+
bluez_FOUND
19+
VERSION_VAR bluez_VERSION
20+
)

src/CMakeLists.txt

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -83,8 +83,8 @@ if (MACOS_BUNDLE)
8383
set(MACOSX_BUNDLE_ICON_FILE "cemu.icns")
8484
set(MACOSX_BUNDLE_GUI_IDENTIFIER "info.cemu.Cemu")
8585
set(MACOSX_BUNDLE_BUNDLE_NAME "Cemu")
86-
set(MACOSX_BUNDLE_SHORT_VERSION_STRING ${CMAKE_PROJECT_VERSION})
87-
set(MACOSX_BUNDLE_BUNDLE_VERSION ${CMAKE_PROJECT_VERSION})
86+
set(MACOSX_BUNDLE_SHORT_VERSION_STRING "${EMULATOR_VERSION_MAJOR}.${EMULATOR_VERSION_MINOR}.${EMULATOR_VERSION_PATCH}")
87+
set(MACOSX_BUNDLE_BUNDLE_VERSION "${EMULATOR_VERSION_MAJOR}.${EMULATOR_VERSION_MINOR}.${EMULATOR_VERSION_PATCH}")
8888
set(MACOSX_BUNDLE_COPYRIGHT "Copyright © 2024 Cemu Project")
8989

9090
set(MACOSX_BUNDLE_CATEGORY "public.app-category.games")
@@ -102,12 +102,18 @@ if (MACOS_BUNDLE)
102102
COMMAND ${CMAKE_COMMAND} ARGS -E copy_directory "${CMAKE_SOURCE_DIR}/bin/${folder}" "${CMAKE_SOURCE_DIR}/bin/${OUTPUT_NAME}.app/Contents/SharedSupport/${folder}")
103103
endforeach(folder)
104104

105+
if(CMAKE_BUILD_TYPE STREQUAL "Debug")
106+
set(LIBUSB_PATH "${CMAKE_BINARY_DIR}/vcpkg_installed/x64-osx/debug/lib/libusb-1.0.0.dylib")
107+
else()
108+
set(LIBUSB_PATH "${CMAKE_BINARY_DIR}/vcpkg_installed/x64-osx/lib/libusb-1.0.0.dylib")
109+
endif()
110+
105111
add_custom_command (TARGET CemuBin POST_BUILD
106112
COMMAND ${CMAKE_COMMAND} ARGS -E copy "/usr/local/lib/libMoltenVK.dylib" "${CMAKE_SOURCE_DIR}/bin/${OUTPUT_NAME}.app/Contents/Frameworks/libMoltenVK.dylib"
107-
COMMAND ${CMAKE_COMMAND} ARGS -E copy "${CMAKE_BINARY_DIR}/vcpkg_installed/x64-osx/lib/libusb-1.0.0.dylib" "${CMAKE_SOURCE_DIR}/bin/${OUTPUT_NAME}.app/Contents/Frameworks/libusb-1.0.0.dylib"
113+
COMMAND ${CMAKE_COMMAND} ARGS -E copy "${LIBUSB_PATH}" "${CMAKE_SOURCE_DIR}/bin/${OUTPUT_NAME}.app/Contents/Frameworks/libusb-1.0.0.dylib"
108114
COMMAND ${CMAKE_COMMAND} ARGS -E copy "${CMAKE_SOURCE_DIR}/src/resource/update.sh" "${CMAKE_SOURCE_DIR}/bin/${OUTPUT_NAME}.app/Contents/MacOS/update.sh"
109115
COMMAND bash -c "install_name_tool -add_rpath @executable_path/../Frameworks ${CMAKE_SOURCE_DIR}/bin/${OUTPUT_NAME}.app/Contents/MacOS/${OUTPUT_NAME}"
110-
COMMAND bash -c "install_name_tool -change /Users/runner/work/Cemu/Cemu/build/vcpkg_installed/x64-osx/lib/libusb-1.0.0.dylib @executable_path/../Frameworks/libusb-1.0.0.dylib ${CMAKE_SOURCE_DIR}/bin/${OUTPUT_NAME}.app/Contents/MacOS/${OUTPUT_NAME}")
116+
COMMAND bash -c "install_name_tool -change ${LIBUSB_PATH} @executable_path/../Frameworks/libusb-1.0.0.dylib ${CMAKE_SOURCE_DIR}/bin/${OUTPUT_NAME}.app/Contents/MacOS/${OUTPUT_NAME}")
111117
endif()
112118

113119
set_target_properties(CemuBin PROPERTIES

src/Cafe/CMakeLists.txt

Lines changed: 19 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -463,8 +463,8 @@ add_library(CemuCafe
463463
OS/libs/nsyshid/BackendEmulated.h
464464
OS/libs/nsyshid/BackendLibusb.cpp
465465
OS/libs/nsyshid/BackendLibusb.h
466-
OS/libs/nsyshid/BackendWindowsHID.cpp
467-
OS/libs/nsyshid/BackendWindowsHID.h
466+
OS/libs/nsyshid/Dimensions.cpp
467+
OS/libs/nsyshid/Dimensions.h
468468
OS/libs/nsyshid/Infinity.cpp
469469
OS/libs/nsyshid/Infinity.h
470470
OS/libs/nsyshid/Skylander.cpp
@@ -530,6 +530,12 @@ set_property(TARGET CemuCafe PROPERTY MSVC_RUNTIME_LIBRARY "MultiThreaded$<$<CON
530530

531531
target_include_directories(CemuCafe PUBLIC "../")
532532

533+
if (glslang_VERSION VERSION_LESS "15.0.0")
534+
set(glslang_target "glslang::SPIRV")
535+
else()
536+
set(glslang_target "glslang")
537+
endif()
538+
533539
target_link_libraries(CemuCafe PRIVATE
534540
CemuAsm
535541
CemuAudio
@@ -546,7 +552,7 @@ target_link_libraries(CemuCafe PRIVATE
546552
Boost::nowide
547553
CURL::libcurl
548554
fmt::fmt
549-
glslang::SPIRV
555+
${glslang_target}
550556
ih264d
551557
OpenSSL::Crypto
552558
OpenSSL::SSL
@@ -562,15 +568,16 @@ if (ENABLE_WAYLAND)
562568
target_link_libraries(CemuCafe PUBLIC Wayland::Client)
563569
endif()
564570

565-
if (ENABLE_NSYSHID_LIBUSB)
566-
if (ENABLE_VCPKG)
567-
find_package(PkgConfig REQUIRED)
568-
pkg_check_modules(libusb REQUIRED IMPORTED_TARGET libusb-1.0)
569-
target_link_libraries(CemuCafe PRIVATE PkgConfig::libusb)
570-
else ()
571-
find_package(libusb MODULE REQUIRED)
572-
target_link_libraries(CemuCafe PRIVATE libusb::libusb)
573-
endif ()
571+
if (ENABLE_VCPKG)
572+
if(WIN32)
573+
set(PKG_CONFIG_EXECUTABLE "${VCPKG_INSTALLED_DIR}/x64-windows/tools/pkgconf/pkgconf.exe")
574+
endif()
575+
find_package(PkgConfig REQUIRED)
576+
pkg_check_modules(libusb REQUIRED IMPORTED_TARGET libusb-1.0)
577+
target_link_libraries(CemuCafe PRIVATE PkgConfig::libusb)
578+
else ()
579+
find_package(libusb MODULE REQUIRED)
580+
target_link_libraries(CemuCafe PRIVATE libusb::libusb)
574581
endif ()
575582

576583
if (ENABLE_WXWIDGETS)

0 commit comments

Comments
 (0)