666 changed files with 30505 additions and 51832 deletions
@@ -1,43 +0,0 @@
name: Set up a vcpkg binary cache
description: Bootstraps vcpkg and configures GitHub Packages as a binary cache.
inputs:
github-token:
description: Token for authenticating with GitHub Packages
required: true
runs:
using: composite
steps:
- name: Bootstrap vcpkg
shell: bash
run: |
if [ "$RUNNER_OS" == "Windows" ]; then
./dependencies/vcpkg/bootstrap-vcpkg.bat
else
bash ./dependencies/vcpkg/bootstrap-vcpkg.sh
fi
- name: Setup NuGet Credentials for vcpkg
shell: bash
run: |
function vcpkg_nuget() {
if [ "$RUNNER_OS" == "Windows" ]; then
`./dependencies/vcpkg/vcpkg.exe fetch nuget | tail -n 1` "$@"
else
mono `./dependencies/vcpkg/vcpkg fetch nuget | tail -n 1` "$@"
fi
}
vcpkg_nuget \
sources add \
-source "https://nuget.pkg.github.com/${{ github.repository_owner }}/index.json" \
-storepasswordincleartext \
-name "GitHub" \
-username "${{ github.repository_owner }}" \
-password "${{ inputs.github-token }}"
vcpkg_nuget \
setapikey "${{ inputs.github-token }}" \
-source "https://nuget.pkg.github.com/${{ github.repository_owner }}/index.json"
File diff suppressed because it is too large Load Diff
+1 -3
View File
@@ -1,6 +1,5 @@
name: Build check
on:
workflow_dispatch:
on:
pull_request:
paths-ignore:
- "*.md"
@@ -17,4 +16,3 @@ on:
jobs:
build:
uses: ./.github/workflows/build.yml
secrets: inherit
-172
View File
@@ -1,172 +0,0 @@
name: Build vcpkg Android Dependencies
on:
workflow_dispatch:
jobs:
build-vcpkg-android:
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@v4
with:
submodules: recursive
- name: Set up JDK 21
uses: actions/setup-java@v4
with:
distribution: 'temurin'
java-version: '21'
- name: Install CMake
run: |
sudo apt-get update
sudo apt-get install -y cmake ninja-build
- name: Setup Android NDK
uses: nttld/setup-ndk@v1
id: setup-ndk
with:
ndk-version: r29
add-to-path: true
- name: Cache vcpkg
uses: actions/cache@v4
with:
path: |
dependencies/vcpkg/installed
dependencies/vcpkg/buildtrees
dependencies/vcpkg/packages
key: vcpkg-android-arm64-${{ hashFiles('vcpkg.json') }}
restore-keys: |
vcpkg-android-arm64-
- name: Bootstrap vcpkg
run: |
cd dependencies/vcpkg
./bootstrap-vcpkg.sh
- name: Build vcpkg dependencies for arm64-v8a
env:
ANDROID_NDK_HOME: ${{ steps.setup-ndk.outputs.ndk-path }}
VCPKG_ROOT: ${{ github.workspace }}/dependencies/vcpkg
run: |
cd dependencies/vcpkg
# Install dependencies for Android arm64-v8a
./vcpkg install \
--triplet=arm64-android \
--overlay-ports=${{ github.workspace }}/dependencies/vcpkg_overlay_ports \
--x-manifest-root=${{ github.workspace }} \
--x-install-root=${{ github.workspace }}/dependencies/vcpkg/installed
- name: Package vcpkg installed directory
run: |
cd dependencies/vcpkg
tar -czf vcpkg-android-arm64.tar.gz installed/arm64-android
- name: Upload vcpkg dependencies artifact
uses: actions/upload-artifact@v4
with:
name: vcpkg-android-arm64
path: dependencies/vcpkg/vcpkg-android-arm64.tar.gz
retention-days: 30
- name: Create installation instructions
run: |
cat > VCPKG_INSTALL_INSTRUCTIONS.md << 'EOF'
# vcpkg Android Dependencies Installation
## ABI: arm64-v8a (arm64-android triplet)
### Installation Steps:
1. Download the artifact `vcpkg-android-arm64.tar.gz` from the workflow run
2. Extract to your local repository:
**On Linux/macOS:**
```bash
cd /path/to/WeeU
tar -xzf vcpkg-android-arm64.tar.gz -C dependencies/vcpkg/
```
**On Windows (PowerShell):**
```powershell
cd C:\path\to\WeeU
tar -xzf vcpkg-android-arm64.tar.gz -C dependencies\vcpkg\
```
**On Windows (using 7-Zip or WinRAR):**
- Extract the .tar.gz file to get the .tar file
- Extract the .tar file
- Copy the `installed` folder to `dependencies\vcpkg\`
3. The dependencies will be extracted to:
```
dependencies/vcpkg/installed/arm64-android/
```
4. You can now build the Android app locally without vcpkg downloading dependencies:
**On Linux/macOS:**
```bash
cd src/android
./gradlew assembleRelease
```
**On Windows:**
```powershell
cd src\android
.\gradlew.bat assembleRelease
```
### What's included:
- All vcpkg dependencies specified in vcpkg.json for Android
- Pre-built libraries for arm64-v8a architecture (works on all platforms)
- Headers and CMake configuration files
- Boost, OpenSSL, libzip, curl, and all other dependencies
### Platform Compatibility:
- ✅ **Windows**: Fully supported - Android NDK builds work the same
- ✅ **Linux**: Fully supported
- ✅ **macOS**: Fully supported
- The dependencies are cross-platform because they're for Android target, not host OS
### Notes:
- This is for arm64-v8a only (the only ABI configured in the project)
- Dependencies are cached and will be reused if vcpkg.json hasn't changed
- Total size is approximately 500MB-1GB compressed
- Works on Windows, Linux, and macOS because Android builds are cross-platform
### Requirements:
- Android NDK r28 (or compatible version)
- CMake 3.25+
- Java 21+
### Troubleshooting:
**On Windows:**
- If build fails, ensure the extracted path matches: `dependencies\vcpkg\installed\arm64-android\`
- Verify extraction: `dir dependencies\vcpkg\installed\arm64-android\`
- Make sure you have Android NDK installed via Android Studio or standalone
- Set ANDROID_NDK_HOME environment variable if needed
**On Linux/macOS:**
- If build fails, ensure the extracted path matches: `dependencies/vcpkg/installed/arm64-android/`
- Verify extraction: `ls -la dependencies/vcpkg/installed/arm64-android/`
- Make sure you have Android NDK r28 installed
**General:**
- Clear the vcpkg cache if you encounter issues: `rm -rf dependencies/vcpkg/installed` (or `rmdir /s dependencies\vcpkg\installed` on Windows)
- The Android build uses CMake which is cross-platform
- Dependencies are built for Android ARM64, not your host OS
EOF
- name: Upload installation instructions
uses: actions/upload-artifact@v4
with:
name: vcpkg-installation-instructions
path: VCPKG_INSTALL_INSTRUCTIONS.md
retention-days: 30
@@ -1,4 +1,4 @@
name: Deploy release
name: Deploy experimental release
on:
workflow_dispatch:
inputs:
@@ -38,8 +38,8 @@ on:
description: 'Feature 9'
required: false
type: string
android_build_type:
description: 'Build type'
changelog9:
description: 'Feature 10'
required: false
type: string
@@ -50,13 +50,11 @@ jobs:
call-release-build:
uses: ./.github/workflows/build.yml
needs: calculate-version
secrets: inherit
with:
next_version_major: ${{ needs.calculate-version.outputs.next_version_major }}
next_version_minor: ${{ needs.calculate-version.outputs.next_version_minor }}
android_build_type: ${{ inputs.android_build_type }}
deploy:
name: Deploy release
name: Deploy experimental release
runs-on: ubuntu-22.04
needs: [call-release-build, calculate-version]
steps:
@@ -77,6 +75,7 @@ jobs:
if [ -n "${{ github.event.inputs.changelog6 }}" ]; then CHANGELOG="$CHANGELOG- ${{ github.event.inputs.changelog6 }}\n"; fi
if [ -n "${{ github.event.inputs.changelog7 }}" ]; then CHANGELOG="$CHANGELOG- ${{ github.event.inputs.changelog7 }}\n"; fi
if [ -n "${{ github.event.inputs.changelog8 }}" ]; then CHANGELOG="$CHANGELOG- ${{ github.event.inputs.changelog8 }}\n"; fi
if [ -n "${{ github.event.inputs.changelog9 }}" ]; then CHANGELOG="$CHANGELOG- ${{ github.event.inputs.changelog9 }}\n"; fi
echo -e "$CHANGELOG"
echo "RELEASE_BODY=$CHANGELOG" >> $GITHUB_ENV
- uses: actions/download-artifact@v4
@@ -96,8 +95,8 @@ jobs:
- uses: actions/download-artifact@v4
with:
pattern: cemu-bin-macos*
path: cemu-macos
name: cemu-bin-macos-x64
path: cemu-bin-macos-x64
- name: Initialize
run: |
@@ -138,15 +137,7 @@ jobs:
rm -r ./${{ env.CEMU_FOLDER_NAME }}
- name: Create release from macos-bin
run: |
cd cemu-macos
for bin_dir in cemu-bin-macos-*; do
arch="${bin_dir##cemu-bin-macos-}"
cp $bin_dir/Cemu.dmg ../upload/cemu-${{ env.CEMU_VERSION }}-macos-12-$arch.dmg
done
- name: Create release from android-bin
run: cp cemu-bin-android/*.apk upload/cemu-${{ env.CEMU_VERSION }}.apk
run: cp cemu-bin-macos-x64/Cemu.dmg upload/cemu-${{ env.CEMU_VERSION }}-macos-12-x64.dmg
- name: Create release
run: |
@@ -0,0 +1,85 @@
name: Create new release
on:
workflow_dispatch:
inputs:
PlaceholderInput:
description: PlaceholderInput
required: false
jobs:
call-release-build:
uses: ./.github/workflows/build.yml
with:
deploymode: release
deploy:
name: Deploy release
runs-on: ubuntu-20.04
needs: call-release-build
steps:
- uses: actions/checkout@v3
- uses: actions/download-artifact@v4
with:
name: cemu-bin-linux-x64
path: cemu-bin-linux-x64
- uses: actions/download-artifact@v4
with:
name: cemu-appimage-x64
path: cemu-appimage-x64
- uses: actions/download-artifact@v4
with:
name: cemu-bin-windows-x64
path: cemu-bin-windows-x64
- uses: actions/download-artifact@v4
with:
name: cemu-bin-macos-x64
path: cemu-bin-macos-x64
- name: Initialize
run: |
mkdir upload
sudo apt update -qq
sudo apt install -y zip
- name: Get Cemu release version
run: |
gcc -o getversion .github/getversion.cpp
echo "Cemu CI version: $(./getversion)"
echo "CEMU_FOLDER_NAME=Cemu_$(./getversion)" >> $GITHUB_ENV
echo "CEMU_VERSION=$(./getversion)" >> $GITHUB_ENV
- name: Create release from windows-bin
run: |
ls ./
ls ./bin/
cp -R ./bin ./${{ env.CEMU_FOLDER_NAME }}
mv cemu-bin-windows-x64/Cemu.exe ./${{ env.CEMU_FOLDER_NAME }}/Cemu.exe
zip -9 -r upload/cemu-${{ env.CEMU_VERSION }}-windows-x64.zip ${{ env.CEMU_FOLDER_NAME }}
rm -r ./${{ env.CEMU_FOLDER_NAME }}
- name: Create appimage
run: |
VERSION=${{ env.CEMU_VERSION }}
echo "Cemu Version is $VERSION"
ls cemu-appimage-x64
mv cemu-appimage-x64/Cemu-*-x86_64.AppImage upload/Cemu-$VERSION-x86_64.AppImage
- name: Create release from ubuntu-bin
run: |
ls ./
ls ./bin/
cp -R ./bin ./${{ env.CEMU_FOLDER_NAME }}
mv cemu-bin-linux-x64/Cemu ./${{ env.CEMU_FOLDER_NAME }}/Cemu
zip -9 -r upload/cemu-${{ env.CEMU_VERSION }}-ubuntu-20.04-x64.zip ${{ env.CEMU_FOLDER_NAME }}
rm -r ./${{ env.CEMU_FOLDER_NAME }}
- name: Create release from macos-bin
run: cp cemu-bin-macos-x64/Cemu.dmg upload/cemu-${{ env.CEMU_VERSION }}-macos-12-x64.dmg
- name: Create release
run: |
wget -O ghr.tar.gz https://github.com/tcnksm/ghr/releases/download/v0.15.0/ghr_v0.15.0_linux_amd64.tar.gz
tar xvzf ghr.tar.gz; rm ghr.tar.gz
ghr_v0.15.0_linux_amd64/ghr -t ${{ secrets.GITHUB_TOKEN }} -n "Cemu ${{ env.CEMU_VERSION }}" -b "Changelog:" v${{ env.CEMU_VERSION }} ./upload
@@ -29,7 +29,7 @@ jobs:
id: get_all_releases
run: |
# Fetch all releases and check for API errors
RESPONSE=$(curl -s -o response.json -w "%{http_code}" "https://api.github.com/repos/cemu-project/cemu/releases?per_page=100")
RESPONSE=$(curl -s -o response.json -w "%{http_code}" "https://api.github.com/repos/${{ github.repository }}/releases?per_page=100")
if [ "$RESPONSE" -ne 200 ]; then
echo "Failed to fetch releases. HTTP status: $RESPONSE"
cat response.json
+4 -17
View File
@@ -1,7 +1,6 @@
name: Generate translation template
on:
workflow_dispatch:
pull_request:
paths-ignore:
- "*.md"
@@ -20,7 +19,7 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: "Checkout repo"
uses: actions/checkout@v4
uses: actions/checkout@v3
- name: "Install gettext"
run: |
@@ -32,24 +31,12 @@ jobs:
find src -name *.cpp -o -name *.hpp -o -name *.h |
xargs xgettext --from-code=utf-8 -w 100
--keyword="_" --keyword="wxTRANSLATE" --keyword="wxPLURAL:1,2"
--keyword="_tr" --keyword="TR_NOOP"
--check=space-ellipsis --omit-header
-o cemu_cpp.pot
- name: "Generate POT file from the Android App"
run: |
cemu_dir=$(pwd)
cd src/android/app
./gradlew gettext
mv cemu_kt.pot "$cemu_dir"
- name: "Combine the POT files"
run: |
xgettext cemu_cpp.pot cemu_kt.pot --omit-header -o cemu.pot
-o cemu.pot
- name: Upload artifact
uses: actions/upload-artifact@v4
uses: actions/upload-artifact@v3
with:
name: POT file
path: ./cemu.pot
if-no-files-found: error
if-no-files-found: error
+1 -5
View File
@@ -17,7 +17,6 @@
.idea/
build/
build_arm
cmake-build-*/
out/
.cache/
@@ -54,7 +53,4 @@ bin/gameProfiles/*
bin/graphicPacks/*
# Ignore Finder view option files created by OS X
.DS_Store
.kilocode/mcp.json
vcpkg-android-arm64.tar.gz
src/android/app/src/main/assets/COVER_DOWNLOAD_README.md
.DS_Store
-11
View File
@@ -18,14 +18,3 @@
path = dependencies/imgui
url = https://github.com/ocornut/imgui
shallow = true
[submodule "dependencies/xbyak_aarch64"]
path = dependencies/xbyak_aarch64
url = https://github.com/fujitsu/xbyak_aarch64
[submodule "dependencies/libadrenotools"]
path = dependencies/libadrenotools
url = https://github.com/bylaws/libadrenotools
shallow = true
[submodule "dependencies/libucontext/libucontext"]
path = dependencies/libucontext/src
url = https://github.com/kaniini/libucontext
shallow = true
+3 -85
View File
@@ -20,10 +20,6 @@
- [Installing Tool Dependencies](#installing-tool-dependencies)
- [Installing Library Dependencies](#installing-library-dependencies)
- [Build Cemu using CMake](#build-cemu-using-cmake)
- [Android](#android)
- [FreeBSD](#freebsd)
- [Installing Dependencies](#installing-dependencies)
- [Build Cemu on BSD with CMake](#build-cemu-on-bsd-with-cmake)
- [Updating Cemu and source code](#updating-cemu-and-source-code)
## Windows
@@ -50,10 +46,10 @@ To compile Cemu, a recent enough compiler and STL with C++20 support is required
### Dependencies
#### For Arch and derivatives:
`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`
`sudo pacman -S --needed base-devel clang cmake freeglut git glm gtk3 libgcrypt libpulse libsecret linux-headers llvm nasm ninja systemd unzip zip`
#### For Debian, Ubuntu and derivatives:
`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`
`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`
You may also need to install `libusb-1.0-0-dev` as a workaround for an issue with the vcpkg hidapi package.
@@ -61,7 +57,7 @@ At Step 3 in [Build Cemu using cmake and clang](#build-cemu-using-cmake-and-clan
`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`
#### For Fedora and derivatives:
`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`
`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`
### Build Cemu
@@ -124,9 +120,6 @@ This section refers to running `cmake -S...` (truncated).
* Compiling failed during rebuild after `git pull` with an error that mentions RPATH
* Add the following and try running the command again:
* `-DCMAKE_BUILD_WITH_INSTALL_RPATH=ON`
* Environment variable `VCPKG_FORCE_SYSTEM_BINARIES` must be set.
* Execute the folowing and then try running the command again:
* `export VCPKG_FORCE_SYSTEM_BINARIES=1`
* 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.
@@ -189,43 +182,6 @@ Then install the dependencies:
#### Troubleshooting steps
- If step 3 gives you an error about not being able to find ninja, try appending `-DCMAKE_MAKE_PROGRAM=/usr/local/bin/ninja` to the command and running it again.
## Android
Prerequisites:
- git
- [Android studio](https://developer.android.com/studio)
Instructions:
1. Run `git clone --recursive https://github.com/cemu-project/Cemu`
2. Open the project located in `src/android` in Android Studio
3. Click Build > Make Project
## FreeBSD
The following instructions to build Cemu on FreeBSD are experimental. Some features available on other platforms are not available on FreeBSD (discord rich presence, bluetooth/support for actual Wii U controllers, auto-updates, etc.)
To compile Cemu, a recent enough compiler and STL with C++20 support is required! Clang-15 or higher is what we recommend. Any version of FreeBSD 13.3-RELEASE or higher comes bundled with LLVM > version 15 as part of the base system. However, if for whatever reason your system lacks a recent version of LLVM you can install one by executing:
`sudo pkg install llvm15`
Or a higher version as desired.
### Installing Dependencies
`sudo pkg install boost-libs cmake-core curl glslang gtk3 libzip ninja png pkgconf pugixml rapidjson sdl2 wayland wayland-protocols wx32-gtk3 xorg zstd`
### Build Cemu on BSD with CMake
```
git clone --recursive https://github.com/cemu-project/Cemu
cd Cemu
cmake -B build -DCMAKE_BUILD_TYPE=release -DENABLE_BLUEZ=OFF -DENABLE_DISCORD_RPC=OFF -DENABLE_FERAL_GAMEMODE=OFF -DENABLE_HIDAPI=OFF -DENABLE_VCPKG=OFF -G Ninja
cmake --build build
cd build && ninja install
```
You should now have a Cemu executable file in the /bin folder, which you can run using `./bin/Cemu_release`.
## Updating Cemu and source code
1. To update your Cemu local repository, use the command `git pull --recurse-submodules` (run this command on the Cemu root).
- This should update your local copy of Cemu and all of its dependencies.
@@ -233,41 +189,3 @@ You should now have a Cemu executable file in the /bin folder, which you can run
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.
## CMake configure flags
Some flags can be passed during CMake configure to customise which features are enabled on build.
Example usage: `cmake -S . -B build -DCMAKE_BUILD_TYPE=release -DENABLE_SDL=ON -DENABLE_VULKAN=OFF`
### All platforms
| Flag | | Description | Default | Note |
|--------------------|:--|-----------------------------------------------------------------------------|---------|--------------------|
| ALLOW_PORTABLE | | Allow Cemu to use the `portable` directory to store configs and data | ON | |
| CEMU_CXX_FLAGS | | Flags passed straight to the compiler, e.g. `-march=native`, `-Wall`, `/W3` | "" | |
| ENABLE_CUBEB | | Enable cubeb audio backend | ON | |
| ENABLE_DISCORD_RPC | | Enable Discord Rich presence support | ON | |
| ENABLE_OPENGL | | Enable OpenGL graphics backend | ON | Currently required |
| ENABLE_HIDAPI | | Enable HIDAPI (used for Wiimote controller API) | ON | |
| ENABLE_SDL | | Enable SDLController controller API | ON | Currently required |
| ENABLE_VCPKG | | Use VCPKG package manager to obtain dependencies | ON | |
| ENABLE_VULKAN | | Enable the Vulkan graphics backend | ON | |
| ENABLE_WXWIDGETS | | Enable wxWidgets UI | ON | Currently required |
### Windows
| Flag | Description | Default | Note |
|--------------------|-----------------------------------|---------|--------------------|
| ENABLE_DIRECTAUDIO | Enable DirectAudio audio backend | ON | Currently required |
| ENABLE_DIRECTINPUT | Enable DirectInput controller API | ON | Currently required |
| ENABLE_XAUDIO | Enable XAudio audio backend | ON | |
| ENABLE_XINPUT | Enable XInput controller API | ON | |
### Linux
| Flag | Description | Default |
|-----------------------|----------------------------------------------------|---------|
| ENABLE_BLUEZ | Build with Bluez (used for Wiimote controller API) | ON |
| ENABLE_FERAL_GAMEMODE | Enable Feral Interactive GameMode support | ON |
| ENABLE_WAYLAND | Enable Wayland support | ON |
### macOS
| Flag | Description | Default |
|--------------|------------------------------------------------|---------|
| MACOS_BUNDLE | MacOS executable will be an application bundle | OFF |
+32 -51
View File
@@ -1,8 +1,7 @@
cmake_minimum_required(VERSION 3.25)
cmake_minimum_required(VERSION 3.21.1)
option(ENABLE_VCPKG "Enable the vcpkg package manager" ON)
option(MACOS_BUNDLE "The executable when built on macOS will be created as an application bundle" OFF)
option(ALLOW_PORTABLE "Allow Cemu to be run in portable mode" ON)
# used by CI script to set version:
set(EMULATOR_VERSION_MAJOR "0" CACHE STRING "")
@@ -36,22 +35,15 @@ if (ENABLE_VCPKG)
)
endif()
if(UNIX AND NOT APPLE AND NOT VCPKG_TARGET_ANDROID)
set(VCPKG_OVERLAY_PORTS "${CMAKE_CURRENT_LIST_DIR}/dependencies/vcpkg_overlay_ports_linux;${CMAKE_CURRENT_LIST_DIR}/dependencies/vcpkg_overlay_ports")
if(UNIX AND NOT APPLE)
set(VCPKG_OVERLAY_PORTS "${CMAKE_CURRENT_LIST_DIR}/dependencies/vcpkg_overlay_ports_linux")
elseif(APPLE)
set(VCPKG_OVERLAY_PORTS "${CMAKE_CURRENT_LIST_DIR}/dependencies/vcpkg_overlay_ports_mac;${CMAKE_CURRENT_LIST_DIR}/dependencies/vcpkg_overlay_ports")
set(VCPKG_OVERLAY_PORTS "${CMAKE_CURRENT_LIST_DIR}/dependencies/vcpkg_overlay_ports_mac")
else()
set(VCPKG_OVERLAY_PORTS "${CMAKE_CURRENT_LIST_DIR}/dependencies/vcpkg_overlay_ports_win;${CMAKE_CURRENT_LIST_DIR}/dependencies/vcpkg_overlay_ports")
endif()
if(VCPKG_TARGET_ANDROID)
set(ENV{ANDROID_NDK_HOME} ${ANDROID_NDK})
set(ENV{VCPKG_ROOT} "${CMAKE_CURRENT_SOURCE_DIR}/dependencies/vcpkg")
include("${CMAKE_CURRENT_SOURCE_DIR}/cmake/vcpkg_android.cmake")
else()
set(CMAKE_TOOLCHAIN_FILE "${CMAKE_CURRENT_SOURCE_DIR}/dependencies/vcpkg/scripts/buildsystems/vcpkg.cmake"
CACHE STRING "Vcpkg toolchain file")
set(VCPKG_OVERLAY_PORTS "${CMAKE_CURRENT_LIST_DIR}/dependencies/vcpkg_overlay_ports")
endif()
set(CMAKE_TOOLCHAIN_FILE "${CMAKE_CURRENT_SOURCE_DIR}/dependencies/vcpkg/scripts/buildsystems/vcpkg.cmake"
CACHE STRING "Vcpkg toolchain file")
# Set this so that all the various find_package() calls don't need an explicit
# CONFIG option
set(CMAKE_FIND_PACKAGE_PREFER_CONFIG TRUE)
@@ -106,7 +98,6 @@ endif()
if (UNIX AND NOT APPLE)
option(ENABLE_WAYLAND "Build with Wayland support" ON)
option(ENABLE_FERAL_GAMEMODE "Enables Feral Interactive GameMode Support" ON)
option(ENABLE_BLUEZ "Build with Bluez support" ON)
endif()
option(ENABLE_OPENGL "Enables the OpenGL backend" ON)
@@ -131,21 +122,32 @@ if (WIN32)
endif()
option(ENABLE_CUBEB "Enabled cubeb backend" ON)
# usb hid backends
if (WIN32)
option(ENABLE_NSYSHID_WINDOWS_HID "Enables the native Windows HID backend for nsyshid" ON)
endif ()
# libusb and windows hid backends shouldn't be active at the same time; otherwise we'd see all devices twice!
if (NOT ENABLE_NSYSHID_WINDOWS_HID)
option(ENABLE_NSYSHID_LIBUSB "Enables the libusb backend for nsyshid" ON)
else ()
set(ENABLE_NSYSHID_LIBUSB OFF CACHE BOOL "" FORCE)
endif ()
if (ENABLE_NSYSHID_WINDOWS_HID)
add_compile_definitions(NSYSHID_ENABLE_BACKEND_WINDOWS_HID)
endif ()
if (ENABLE_NSYSHID_LIBUSB)
add_compile_definitions(NSYSHID_ENABLE_BACKEND_LIBUSB)
endif ()
option(ENABLE_WXWIDGETS "Build with wxWidgets UI (Currently required)" ON)
set(THREADS_PREFER_PTHREAD_FLAG true)
find_package(Threads REQUIRED)
if(ENABLE_SDL)
find_package(SDL2 REQUIRED)
add_compile_definitions("HAS_SDL=1")
endif()
find_package(SDL2 REQUIRED)
find_package(CURL REQUIRED)
find_package(pugixml REQUIRED)
find_package(RapidJSON REQUIRED)
find_package(Boost COMPONENTS program_options filesystem nowide REQUIRED)
if(ANDROID)
find_package(Boost COMPONENTS context iostreams REQUIRED)
endif()
find_package(libzip REQUIRED)
find_package(glslang REQUIRED)
find_package(ZLIB REQUIRED)
@@ -160,7 +162,7 @@ if (NOT TARGET glslang::SPIRV AND TARGET SPIRV)
add_library(glslang::SPIRV ALIAS SPIRV)
endif()
if (UNIX AND NOT APPLE AND NOT ANDROID)
if (UNIX AND NOT APPLE)
find_package(X11 REQUIRED)
if (ENABLE_WAYLAND)
find_package(Wayland REQUIRED Client)
@@ -172,17 +174,11 @@ if (UNIX AND NOT APPLE AND NOT ANDROID)
BASENAME viewporter)
add_library(CemuWaylandProtocols STATIC ${WAYLAND_PROTOCOL_SRCS})
target_include_directories(CemuWaylandProtocols PUBLIC "${CMAKE_CURRENT_BINARY_DIR}")
target_include_directories(CemuWaylandProtocols PRIVATE ${Wayland_INCLUDE_DIRS})
add_compile_definitions(HAS_WAYLAND)
endif()
find_package(GTK3 REQUIRED)
if(ENABLE_BLUEZ)
find_package(bluez REQUIRED)
set(SUPPORTS_WIIMOTE ON)
add_compile_definitions(HAS_BLUEZ)
endif()
endif()
if (ENABLE_VULKAN)
@@ -195,15 +191,17 @@ endif()
if (ENABLE_DISCORD_RPC)
add_compile_definitions(ENABLE_DISCORD_RPC)
add_subdirectory(dependencies/discord-rpc EXCLUDE_FROM_ALL)
target_include_directories(discord-rpc INTERFACE ./dependencies/discord-rpc/include)
endif()
if (ENABLE_HIDAPI)
find_package(hidapi REQUIRED)
set(SUPPORTS_WIIMOTE ON)
set(ENABLE_WIIMOTE ON)
add_compile_definitions(HAS_HIDAPI)
endif ()
if(UNIX AND NOT APPLE AND NOT ANDROID)
if(UNIX AND NOT APPLE)
if(ENABLE_FERAL_GAMEMODE)
add_compile_definitions(ENABLE_FERAL_GAMEMODE)
add_subdirectory(dependencies/gamemode EXCLUDE_FROM_ALL)
@@ -212,7 +210,7 @@ if(UNIX AND NOT APPLE AND NOT ANDROID)
endif()
if (ENABLE_WXWIDGETS)
find_package(wxWidgets 3.3 REQUIRED COMPONENTS base core gl propgrid xrc)
find_package(wxWidgets 3.2 REQUIRED COMPONENTS base core gl propgrid xrc)
endif()
if (ENABLE_CUBEB)
@@ -233,26 +231,9 @@ endif()
add_subdirectory("dependencies/ih264d" EXCLUDE_FROM_ALL)
if (CMAKE_OSX_ARCHITECTURES)
set(CEMU_ARCHITECTURE ${CMAKE_OSX_ARCHITECTURES})
else()
set(CEMU_ARCHITECTURE ${CMAKE_SYSTEM_PROCESSOR})
endif()
if(CEMU_ARCHITECTURE MATCHES "(aarch64)|(AARCH64)|(arm64)|(ARM64)")
add_subdirectory("dependencies/xbyak_aarch64" EXCLUDE_FROM_ALL)
endif()
find_package(ZArchive)
if (NOT ZArchive_FOUND)
add_subdirectory("dependencies/ZArchive" EXCLUDE_FROM_ALL)
endif()
if(ANDROID)
if(CMAKE_SYSTEM_PROCESSOR MATCHES "(aarch64)|(AARCH64)")
add_subdirectory("dependencies/libadrenotools" EXCLUDE_FROM_ALL)
endif()
add_subdirectory("dependencies/libucontext" EXCLUDE_FROM_ALL)
add_subdirectory("dependencies/stb" EXCLUDE_FROM_ALL)
endif()
add_subdirectory(src)
-1
View File
@@ -2,7 +2,6 @@
# Coding style guidelines for Cemu
This document describes the latest version of our coding-style guidelines. Since we did not use this style from the beginning, older code may not adhere to these guidelines. Nevertheless, use these rules even if the surrounding code does not match.
These coding-style guidelines apply only to the C/C++ codebase. For Kotlin, we follow the official Kotlin Coding Conventions as outlined in the [Kotlin documentation](https://kotlinlang.org/docs/coding-conventions.html).
Cemu comes with a `.clang-format` file which is supported by most IDEs for formatting. Avoid auto-reformatting whole files, PRs with a lot of formatting changes are difficult to review.
+47 -7
View File
@@ -1,14 +1,54 @@
# **Cemu - Android Port (Wii U Emulator)**
# **Cemu - Wii U emulator**
This is the Android port of **Cemu**, a Wii U emulator written in C/C++.
It is still early and experimental. Stability, performance, and features are not guaranteed, and some functionality may be missing compared to the desktop version.
[![Build Process](https://github.com/cemu-project/Cemu/actions/workflows/build.yml/badge.svg)](https://github.com/cemu-project/Cemu/actions/workflows/build.yml)
[![Discord](https://img.shields.io/discord/286429969104764928?label=Cemu&logo=discord&logoColor=FFFFFF)](https://discord.gg/5psYsup)
[![Matrix Server](https://img.shields.io/matrix/cemu:cemu.info?server_fqdn=matrix.cemu.info&label=cemu:cemu.info&logo=matrix&logoColor=FFFFFF)](https://matrix.to/#/#cemu:cemu.info)
There is no timeline for when this port will be finished or when new features will be implemented.
This is the code repository of Cemu, a Wii U emulator that is able to run most Wii U games and homebrew in a playable state.
It's written in C/C++ and is being actively developed with new features and fixes.
**Please do not open issues or pull requests yet.**
Development is ongoing, and contributions will be welcome once the project is more stable.
Cemu is currently only available for 64-bit Windows, Linux & macOS devices.
For general information about Cemu, see the [official website](https://cemu.info) and [main repository](https://github.com/cemu-project/Cemu).
### Links:
- [Open Source Announcement](https://www.reddit.com/r/cemu/comments/wwa22c/cemu_20_announcement_linux_builds_opensource_and/)
- [Official Website](https://cemu.info)
- [Compatibility List/Wiki](https://wiki.cemu.info/wiki/Main_Page)
- [Official Subreddit](https://reddit.com/r/Cemu)
- [Official Discord](https://discord.gg/5psYsup)
- [Official Matrix Server](https://matrix.to/#/#cemu:cemu.info)
- [Setup Guide](https://cemu.cfw.guide)
#### Other relevant repositories:
- [Cemu-Language](https://github.com/cemu-project/Cemu-Language)
- [Cemu's Community Graphic Packs](https://github.com/cemu-project/cemu_graphic_packs)
## Download
You can download the latest Cemu releases for Windows, Linux and Mac from the [GitHub Releases](https://github.com/cemu-project/Cemu/releases/). For Linux you can also find Cemu on [flathub](https://flathub.org/apps/info.cemu.Cemu).
On Windows Cemu is currently only available in a portable format so no installation is required besides extracting it in a safe place.
The native macOS build is currently purely experimental and should not be considered stable or ready for issue-free gameplay. There are also known issues with degraded performance due to the use of MoltenVK and Rosetta for ARM Macs. We appreciate your patience while we improve Cemu for macOS.
Pre-2.0 releases can be found on Cemu's [changelog page](https://cemu.info/changelog.html).
## Build Instructions
To compile Cemu yourself on Windows, Linux or macOS, view [BUILD.md](/BUILD.md).
## Issues
Issues with the emulator should be filed using [GitHub Issues](https://github.com/cemu-project/Cemu/issues).
The old bug tracker can be found at [bugs.cemu.info](https://bugs.cemu.info) and still contains relevant issues and feature suggestions.
## Contributing
Pull requests are very welcome. For easier coordination you can visit the developer discussion channel on [Discord](https://discord.gg/5psYsup) or alternatively the [Matrix Server](https://matrix.to/#/#cemu:cemu.info).
Before submitting a pull request, please read and follow our code style guidelines listed in [CODING_STYLE.md](/CODING_STYLE.md).
If coding isn't your thing, testing games and making detailed bug reports or updating the (usually outdated) compatibility wiki is also appreciated!
Questions about Cemu's software architecture can also be answered on Discord (or through the Matrix bridge).
## License
Cemu is licensed under [Mozilla Public License 2.0](/LICENSE.txt). Exempt from this are all files in the dependencies directory for which the licenses of the original code apply as well as some individual files in the src folder, as specified in those file headers respectively.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
-26
View File
@@ -1,26 +0,0 @@
<?xml version='1.0' encoding='utf-8'?>
<AutoVisualizer xmlns="http://schemas.microsoft.com/vstudio/debugger/natvis/2010">
<Type Name="boost::container::small_vector&lt;*&gt;">
<Expand>
<Item Name="[size]">m_holder.m_size</Item>
<ArrayItems>
<Size>m_holder.m_size</Size>
<ValuePointer>m_holder.m_start</ValuePointer>
</ArrayItems>
</Expand>
</Type>
<Type Name="boost::container::static_vector&lt;*&gt;">
<DisplayString>{{ size={m_holder.m_size} }}</DisplayString>
<Expand>
<Item Name="[size]" ExcludeView="simple">m_holder.m_size</Item>
<Item Name="[capacity]" ExcludeView="simple">static_capacity</Item>
<ArrayItems>
<Size>m_holder.m_size</Size>
<ValuePointer>($T1*)m_holder.storage.data</ValuePointer>
</ArrayItems>
</Expand>
</Type>
</AutoVisualizer>
-205
View File
@@ -1,205 +0,0 @@
@echo off
setlocal enabledelayedexpansion
echo ========================================
echo Wee U Android Build Script
echo ========================================
echo.
REM Check if we're in the right directory
if not exist "src\android" (
echo ERROR: src\android directory not found!
echo Please run this script from the root of the WeeU repository.
pause
exit /b 1
)
REM Check if vcpkg dependencies are installed
if not exist "dependencies\vcpkg\installed\arm64-android" (
echo WARNING: vcpkg dependencies not found at dependencies\vcpkg\installed\arm64-android
echo.
echo Please ensure you have extracted the vcpkg dependencies:
echo 1. Run the GitHub Actions workflow "Build vcpkg Android Dependencies"
echo 2. Download the vcpkg-android-arm64.tar.gz artifact
echo 3. Extract it: tar -xzf vcpkg-android-arm64.tar.gz -C dependencies\vcpkg\
echo.
set /p CONTINUE="Continue anyway? (y/N): "
if /i not "!CONTINUE!"=="y" (
echo Build cancelled.
pause
exit /b 1
)
)
REM Check for gettext (msgfmt/msgunfmt)
where msgunfmt >nul 2>&1
if errorlevel 1 (
echo WARNING: msgunfmt not found in PATH
echo Translation files will not be processed.
echo.
echo To install gettext on Windows:
echo - Using Chocolatey: choco install gettext
echo - Using Scoop: scoop install gettext
echo - Or download from: https://mlocati.github.io/articles/gettext-iconv-windows.html
echo.
set SKIP_TRANSLATIONS=1
) else (
set SKIP_TRANSLATIONS=0
)
REM Process translation files
if "!SKIP_TRANSLATIONS!"=="0" (
echo.
echo ========================================
echo Processing translation files...
echo ========================================
for /d %%L in (bin\resources\*) do (
if exist "%%L\cemu.mo" (
set "language_code=%%~nxL"
set "po_file=src\android\app\src\main\assets\translations\!language_code!\cemu.po"
echo Processing !language_code!...
if not exist "src\android\app\src\main\assets\translations\!language_code!" (
mkdir "src\android\app\src\main\assets\translations\!language_code!"
)
msgunfmt "%%L\cemu.mo" -o "!po_file!" 2>nul
if errorlevel 1 (
echo WARNING: Failed to process %%L\cemu.mo
) else (
echo Created !po_file!
)
)
)
echo Translation processing complete.
) else (
echo Skipping translation processing.
)
REM Set version if provided
set VERSION_MAJOR=%1
set VERSION_MINOR=%2
if not "!VERSION_MAJOR!"=="" (
if not "!VERSION_MINOR!"=="" (
echo.
echo Building version !VERSION_MAJOR!.!VERSION_MINOR!
set "EMULATOR_VERSION_MAJOR=!VERSION_MAJOR!"
set "EMULATOR_VERSION_MINOR=!VERSION_MINOR!"
)
)
REM Check for Java 21
echo.
echo ========================================
echo Checking Java version...
echo ========================================
REM Basic presence check without piping (avoid cmd redirection quirks)
java -version >nul 2>nul
if errorlevel 1 (
echo ERROR: Java not found in PATH
echo The build requires Java 21 or higher.
pause
exit /b 1
)
REM Parse major version from `java -version` output
set "JAVA_VERSION="
for /f "tokens=3" %%v in ('java -version 2^>^&1 ^| findstr /i "version"') do (
set "JAVA_VERSION=%%v"
)
set "JAVA_VERSION=!JAVA_VERSION:"=!"
for /f "tokens=1 delims=." %%a in ("!JAVA_VERSION!") do set "JAVA_MAJOR=%%a"
if !JAVA_MAJOR! LSS 21 (
echo WARNING: Java !JAVA_MAJOR! detected. Java 21 or higher is recommended.
echo.
set /p CONTINUE="Continue anyway? (y/N): "
if /i not "!CONTINUE!"=="y" (
echo Build cancelled.
pause
exit /b 1
)
) else (
echo Java !JAVA_MAJOR! detected.
)
REM Set environment variable to use pre-installed vcpkg dependencies
set "VCPKG_ROOT=%CD%\dependencies\vcpkg"
set "ANDROID_NDK_HOME=C:\Android\ndk\29.0.14206865"
echo VCPKG_ROOT set to: %VCPKG_ROOT%
echo ANDROID_NDK_HOME set to: %ANDROID_NDK_HOME%
REM Build the Android app
echo.
echo ========================================
echo Building Android APK...
echo ========================================
echo.
cd src\android
REM Clean previous builds (optional)
set /p CLEAN="Clean previous builds? (y/N): "
if /i "!CLEAN!"=="y" (
echo Cleaning...
call gradlew.bat clean
)
echo.
echo Building Release APK...
call gradlew.bat assembleRelease
if errorlevel 1 (
echo.
echo ========================================
echo BUILD FAILED!
echo ========================================
cd ..\..
pause
exit /b 1
)
echo.
echo ========================================
echo Running tests...
echo ========================================
call gradlew.bat testRelease
if errorlevel 1 (
echo.
echo WARNING: Tests failed!
echo The APK was built but tests did not pass.
)
cd ..\..
echo.
echo ========================================
echo BUILD SUCCESSFUL!
echo ========================================
echo.
echo APK files are located at:
echo src\android\app\build\outputs\apk\release\app-release.apk
echo src\android\app\build\outputs\apk\debug\app-debug.apk
echo.
REM List the APK files
if exist "src\android\app\build\outputs\apk\release\*.apk" (
echo Release APK:
dir /b "src\android\app\build\outputs\apk\release\*.apk"
echo.
)
if exist "src\android\app\build\outputs\apk\debug\*.apk" (
echo Debug APK:
dir /b "src\android\app\build\outputs\apk\debug\*.apk"
echo.
)
echo Build complete!
pause

Some files were not shown because too many files have changed in this diff Show More