123 Commits
Author SHA1 Message Date
ExzapandGitHub 61a3b07697 Merge pull request #238 from Fs00/more-translations
More l10n improvements and add workflow to generate POT file
2022-09-14 22:49:14 +02:00
Crementif 6cf5dc9a56 Add matrix server for non-discord chatting
Fixes https://github.com/cemu-project/Cemu/issues/113
2022-09-11 16:56:51 +02:00
ExzapandGitHub 0afa2d75aa CI: build.yml no longer invokes itself, always produce artifact (#243)
- Build check is now a separate workflow
- Build with release config instead of debug
- Upload artifacts
2022-09-11 06:41:19 +02:00
capitalistsandGitHub b5963afbb5 Fix DSUController socket option error on Linux (#234) 2022-09-11 04:20:40 +02:00
SSimcoandGitHub 9a60979242 Linux: Avoid out-of-bounds raw keycode array access (#226) 2022-09-11 02:00:02 +02:00
capitalistsandGitHub d4879da95c Implement analog triggers for DSUController (#239) 2022-09-11 01:32:17 +02:00
Fs00 b47b38448c Add workflow for generating POT file 2022-09-10 19:17:14 +02:00
Fs00 694b9ec495 Avoid including newlines in localizable string 2022-09-10 18:47:32 +02:00
Fs00 08db65bd5a Remove some dead code 2022-09-10 18:47:32 +02:00
Fs00 13aa0a4fd0 Make controller button names translatable and deduplicate code 2022-09-10 18:47:27 +02:00
Fs00 4c6f22ba39 Simplify a few window names 2022-09-10 13:55:37 +02:00
ExzapandGitHub 3349d7b424 Merge pull request #231 from Exzap/main
FSC: Replace wstring paths with utf8 encoded strings + misc clean up
2022-09-10 00:48:20 +02:00
Exzap 680beaaf21 Rename path _utf8Wrapper to _utf8ToPath for better clarity 2022-09-09 23:49:38 +02:00
Exzap 168ecf8825 FSC: Use utf8 path strings instead of wchar
Also introduced helper function _utf8ToPath() to convert a utf8-encoded string to fs::path
2022-09-09 23:49:38 +02:00
Exzap 1ce629126a FSC: Refactor FileTree and remove redundant path parser class 2022-09-09 23:49:38 +02:00
Exzap b8462cec8b FSC: Refactor to use FSCPath instead of legacy code 2022-09-09 23:49:38 +02:00
Exzap 0e0602e8d9 FSC: Use utf8 for mounting and internal target path 2022-09-09 23:49:38 +02:00
SSimcoandGitHub cf598e38c1 Linux: Find case-insensitive file/folder path if not found (#196) 2022-09-09 20:16:46 +02:00
uranuspucksaxophoneandGitHub 6dda53e84f Improve docs (#216) 2022-09-09 18:39:23 +02:00
goeiecool9999andGitHub 045a059742 fix for when file open is successful but the path isn't a file (#220)
FSC and indirectly coreinit relies on FileStream open failing for directories
2022-09-09 16:10:12 +02:00
TotalCaesar659andGitHub 76313fc238 Update bug tracker URL to use HTTPS (#211) 2022-09-08 23:52:45 +02:00
ExzapandGitHub 1e851fe7e2 Latte: Fix infinite loop in special state clearAsDepth() (#209)
This broke while refactoring code for the 2.0 release. Resolves Tokyo Mirage Session and Pokken freezing on boot. Probably also affects some other games

Also updated .gitignore
2022-09-08 17:33:31 +02:00
Timothy RedaelliandGitHub f032088902 Use _Exit instead of exit under Linux (#204)
The best ExitProcess alternative for Linux is _Exit since it doesn't
call exit handlers.
2022-09-08 17:05:31 +02:00
Tom LallyandGitHub 6cdb6eed17 Cleanup udiv128 (#206) 2022-09-08 02:12:53 +02:00
bitscherandGitHub 4eaa600b57 Fix various compiler warnings given by Clang (#170) 2022-09-07 20:04:32 +02:00
bslhqandGitHub 4d1be950e3 Fix various issues related to title names (#192)
Fixed various issues related to title names:
1. If console language is set to non-English, the title names in Title Manager may be empty.
2. Game list do not show custom names if list style set to icon or small icon.
3. Custom title names for some languages (like JP or CN) appear confusing if re-edited.
4. Unexpected overrides of variable values in ParsedMetaXml.h
2022-09-07 19:58:56 +02:00
Jun Bo BiandGitHub b752d2eddd fix clang-cl (#202) 2022-09-07 18:22:40 +02:00
Timothy RedaelliandGitHub 0a1985e481 Set timer milliseconds for "Controller settings" (#194)
This is needed to avoid having the Controller settings window black on Linux
2022-09-07 16:54:48 +02:00
goeiecool9999andGitHub e20bfd00ec Separate filestream.h into OS specific implementation files (#190) 2022-09-07 02:42:25 +02:00
Tom LallyandGitHub f8b5024c09 Improved macro clarity. (#188) 2022-09-07 02:27:52 +02:00
ExzapandGitHub e5d7d5d173 Use utf8 aware string conversion for wxLaunchDefaultBrowser() (#185) 2022-09-05 18:42:24 +02:00
HaxorzzandGitHub 0030fa44a5 Slight tweaks to greek translation (#180) 2022-09-05 15:57:02 +02:00
ExzapandGitHub 5a69505d13 Fix double %% on shader compilation screen
It was a relic from previously using sprintf where % has to be escaped with %%
2022-09-05 15:53:50 +02:00
Andrea PappacodaandGitHub 728bd3178b build: update required fmt version (#183) 2022-09-05 15:38:25 +02:00
ExzapandGitHub 391334d64e Use ANSI encoding for cemu.rc (#184)
Clang has issues with utf16 and MSVC does not like utf8. So ANSI it is.
2022-09-05 15:36:06 +02:00
bitscherandGitHub 917b80941e Fix broken icon layout when loading Cemu on Gnome (#171)
The icon view was all broken from having entries inserted with non
loaded icons, resulting in a layout that had the wrong size and no
obvious way to trigger a resizing without incurring a costly window
redraw.

Solution: When the icon is not yet loaded insert a transparent
placeholder icon.
2022-09-05 14:51:24 +02:00
SSimcoandGitHub 0ed4fdcd78 Update fmt version to 9.1.0 (#177) 2022-09-05 14:48:44 +02:00
bitscherandGitHub f2ec0b4083 Fix the reloading of game cache from settings.xml (#169)
std::is_same_v<decltype(0LL), int64_t> does not evaluate the same on
Linux Clang and MSVC. MSVC returns true but Clang and GCC both returns
false resulting in failing to read the game id from the XML file and
therefore rebuilding the cache.

Solution: Don't rely on the type of 0LL and 0ULL literals but explicitly
provide the type of the field we are trying to read.
2022-09-05 14:42:15 +02:00
Jun Bo BiandGitHub a54a3ec74e Fix build using clang-cl on windows and improve driver detection (#129) 2022-09-04 23:15:40 +02:00
ExzapandGitHub 4ed18a65c3 Name output binary Cemu_<CONFIG> and always place it in bin/ (#179) 2022-09-04 22:23:24 +02:00
bslhqandGitHub 1373c76eb9 fix H264_IsBotW() return false while BotW's TitleRegion is JP (#174) 2022-09-04 18:19:27 +02:00
LoaTcHiandGitHub 14d6fb0987 Added french translation on GenericName field (#160) 2022-09-04 02:01:46 +02:00
bitscherandGitHub f8297eeb44 Fix game list ordering & Favorite checkbox (#163) 2022-09-04 01:32:32 +02:00
ExzapandGitHub 33167196d9 Wait for gfx pack init before loading shaders (#168)
2.0 introduced a race condition where the shader cache loading screen could load shaders before the graphic packs finished activating, potentially bypassing custom shaders.
Also removed legacy GraphicPack interface (GraphicPack.cpp/.h) since it was only kept around for Cemuhook and removed u8string variant of cemuLog_force since it's no longer used
2022-09-04 01:27:44 +02:00
ExzapandGitHub 8dd1688ca7 coreinit: Make OSReport and OSConsoleWrite thread-safe 2022-09-03 23:53:45 +02:00
Francesco SaltoriandGitHub d22901be1c Miscellaneous translatable strings improvements and fixes (#159)
* Make PPC threads/texture cache info window columns untranslatable
* Make several window titles translatable
* Make About window text translatable
* Fix <profile name> placeholder not being recognized as translatable
* Miscellaneous improvements to GUI strings
* Add a few missing entries to gitignore
* Adjust Italian translation of Linux files
2022-09-03 22:55:58 +02:00
bitscherandGitHub 1a1de370e4 Portable way of opening URLs and directories (#156)
Replaced every instance of ShellExecute with wxLaunchDefaultBrowser
2022-09-03 22:32:31 +02:00
uranuspucksaxophoneandGitHub f3c70e69b4 Add curl as linux build dependency (#161) 2022-09-03 21:49:59 +02:00
larevehkaojaandGitHub 76126e69b2 Add Finnish translation for linux distributions (#122) 2022-09-03 10:40:54 +02:00
ZiemasandGitHub afb08f23e2 cmake: Exclude unnecessary dep build targets (#150) 2022-09-03 10:34:47 +02:00
Andrea PappacodaandGitHub 8c617a39b7 style: use std::enable_if & co instead of boost:: (#153) 2022-09-02 21:06:05 +02:00
ExzapandGitHub ef1ce59931 Update graphic pack url query request (#154)
Fixed bad request url and changed URL to separate post 2.0 releases.
Also updated .gitignore
2022-09-02 20:54:22 +02:00
ExzapandGitHub 4ed38a28b9 Merge pull request #112 from Tachi107/build-minor-fixes
build: minor refactoring and fixes
2022-09-02 19:22:19 +02:00
Tom LallyandGitHub f5972dfbb0 Per-function target attribute on clang and GCC. (#152) 2022-09-02 19:10:41 +02:00
Tom LallyandGitHub 68fa5b32a1 Linux cursor show and hide. (#149) 2022-09-02 15:16:35 +02:00
Andrea Pappacoda 719ee90b27 build: minor refactoring and fixes
- Fix target_precompile_headers() usage; the CemuCommon target exposes
  the src/Common/precompiled.h precompiled header as part of its public
  interface with
  target_precompile_headers(CemuCommon PUBLIC precompiled.h), so all the
  other targets wanting to use the precompiled header have to link to
  the CemuCommon target with
  target_precompile_headers(TargetName PRIVATE CemuCommon).
- Set the project version to 2.0
- Set RUNTIME_OUTPUT_DIRECTORY instead of only their _DEBUG and _RELEASE
  variants, fixing the compilation when neither build types are defined
- Use a consistent indentation style (tabs, like in the .cpp files)
- Use "modern" variants of some functions, e.g. add_definitions ->
  add_compile_definitions
2022-09-02 13:05:15 +02:00
bitscherandGitHub b1e92f1779 Fix more UI asserts (#146) 2022-09-02 11:01:17 +02:00
CrementifandGitHub 86e1a2227c nn_act: Fix account endianness (#141)
Also adds some code for enabling multi-user support inside apps maybe, but it's probably hardcoded in more places since Cemu currently only shows the active account.
2022-09-02 09:46:19 +02:00
bitscherandGitHub a3b1af4e3d Add SIGINT handler on posix systems (#145) 2022-09-02 09:32:33 +02:00
ExzapandGitHub b1844a8753 Fix online for NA console logins (#147)
This is just a quick fix. In the future we can look into avoiding hardcoded firmware version numbers. On the console it gets read from some system file
2022-09-02 09:14:55 +02:00
d3a7b3b5a6 Misc. Linux improvements and bug fixes. (#121)
Co-authored-by: Tom Lally <tomlally@protonmail.com>
2022-09-01 20:46:20 +02:00
bitscherandGitHub b8d4cf5b29 Fix asserts in TitleManager and DownloadManager (#134) 2022-09-01 18:24:07 +02:00
ExzapandGitHub d8da8a54a6 Infrastructure for shipping and auto-updating experimental releases (#131) 2022-08-31 12:04:09 +02:00
ExzapandGitHub e147c1b4a6 cmake workaround for CemuAsm failing to link on msbuild 2022-08-31 10:41:24 +02:00
ArtemisX64andGitHub 0630e8d845 Linker(Vcpkg) Error: undefined reference to libdecor (#128) 2022-08-31 07:53:04 +02:00
Marcin ChojnackiandGitHub 527ee3aea5 Initial implementation of macOS Vulkan renderer over MoltenVK (#124) 2022-08-30 19:02:56 +02:00
Marcin ChojnackiandGitHub 15b71c57dd Correct wxMenu ID to resolve macOS crash (#125) 2022-08-30 17:55:34 +02:00
CrementifandGitHub dff782eb0d docs: Add warning about clang-14 issue 2022-08-30 17:53:32 +02:00
7d461d1658 docs: Improve build instructions (#109)
Co-authored-by: RyzenDew <84041391+RyzenDew@users.noreply.github.com>
2022-08-30 16:36:14 +02:00
niko1point0andGitHub 584938d8f3 Renable Nvidia Multithreaded Pipeline compile after driver 515 (#91) 2022-08-30 15:58:43 +02:00
Krystian BookerandGitHub 60074c440d Bug #620 Fixed crash when no audio devices are present (#118) 2022-08-30 14:10:05 +02:00
bitscherandGitHub 2d42c885da Fix various compiler warnings and update OpenSSL hash functions (#119)
* Update OpenSSL hash functions to OpenSSL 3.0
* Fix invalid sscanf format in DownloadManager
* Fix unset return value warning
* Fix erroneous check on otpMem in iosu_crypto
2022-08-30 09:27:25 +02:00
P. "Ivory" VasilopoulosandGitHub 86c0a8f698 Add Greek translation for Linux distributions (#106) 2022-08-30 06:24:23 +02:00
WilliamandGitHub 1fba15a4c5 Add pt_BR to desktop and metainfo files (#110) 2022-08-30 06:17:53 +02:00
Stefano CalabreseandGitHub 5b9483f7d8 Add Italian translation for Linux distributions (#116) 2022-08-30 06:14:17 +02:00
Tom LallyandGitHub c065d22dda Removed THREAD_LOCAL macro. (#101) 2022-08-30 06:10:33 +02:00
Amaro MartĂ­nezandGitHub d94ecfe078 Add Spanish translation for Linux distributions (#105) 2022-08-29 10:00:08 +02:00
Andrea PappacodaandGitHub f51a51df3b build: improve the Linux aspect of things (#75)
Improved, fixed and streamlined cmake files. Optionally use system libraries instead of vcpkg (-DENABLE_VCPKG=OFF)
2022-08-29 07:19:48 +02:00
Crementif 0f24b0663e Initialize glslang struct using consteval
Doesn't seem like there's a way to bypass the need for default values in their API, and since their versions doesn't seem to be reliable enough to know whether maxDualSourceDrawBuffersEXT exists. This way it's default initialized to 0 which is fine for Cemu.
2022-08-28 19:23:24 +02:00
Tom LallyandGitHub 454b587e36 Fix compilation on GCC and other Linux fixes (#80) 2022-08-28 15:29:15 +02:00
Morgan HofmannandGitHub 96dcc7c82e Dutch translations for Linux distributions (#98) 2022-08-28 12:57:09 +02:00
IntriguingTilesandGitHub 07ce5b0aa6 nn_act: Fix errors in Mii name (#95)
nn_act: Don't swap the Mii name again
Account: Zero out miiName before copying in data
2022-08-28 11:32:10 +02:00
Crementif ef61361b87 deps: Update zarchive submodule 2022-08-28 00:52:18 +02:00
ArtemisX64andGitHub 01c58555f3 Fixes Path Issues (#70)
* Fix bad path
2022-08-27 09:57:30 +02:00
Arne Morten KvarvingandGitHub 8459cd928c fix some printf format specifiers (#76)
use the definition in cinttypes for portability
2022-08-27 09:33:01 +02:00
gurrgurandGitHub 5cba1a1185 gui: keep shown graphic pack when clicking on preset dropdown (#77) 2022-08-27 05:33:30 +02:00
LoaTcHiandGitHub 664e6684b8 Added french translation to the shortcut and metainfo file. (#81)
* Added french translation to the shortcut comment and metainfo
2022-08-27 05:15:56 +02:00
CrementifandGitHub ca78b92718 Remove cemuhook and fix exports (#73) 2022-08-26 19:41:42 +02:00
Crementif fb76d714f2 cmake: Set startup project for MSVC 2022-08-26 17:56:19 +02:00
Crementif 29f3845ae5 git: Ignore more files in bin folder
Also removes the example.ini since it's outdated.
2022-08-26 17:41:07 +02:00
tastymeatballandGitHub e524a6c16d Add Rudimentray Proxy Support (#68)
* Add Rudimentray Proxy Support to NAPI
2022-08-26 17:04:46 +02:00
TotalCaesar659andGitHub b2b79b4844 Add Russian translation to the shortcut comment (#67) 2022-08-26 15:40:15 +02:00
ArtemisX64andGitHub 1cb2d4e5ee Proper fix for static asserts (#64)
Replace std::uniform_int_distribution with boost::random::uniform_int_distribution
2022-08-26 14:28:50 +02:00
Andrea PappacodaandGitHub 19a0a3a359 perf: optimize GenerateRandomString() (#66)
The previous implementation used an std::stringstream to concatenate
the generated random string.

The new one uses a simple preallocated std::string, as the size of the
output is already known - it is the length parameter.

It also uses std::generate_n() instead of an explicit loop, making the
code more concise and potentially faster, as no calls to
std::string::operator+= are needed.

Calling GenerateRandomString(1'000'000) with the std::stringstream-based
implementation allocated 16 times, for a total of 3'173'516 bytes.
The new one cuts this down to 4 allocs, for a total of 1'076'864 bytes.
2022-08-26 12:53:42 +02:00
JakobDevandGitHub 723fd8cbef Add AppStream (#10)
* Add AppStream
2022-08-26 09:29:58 +02:00
JakobDevandGitHub 049677508f Add .desktop file (#12)
* Add .desktop file
2022-08-26 09:28:39 +02:00
ExzapandGitHub 2a45636f7a CI: Use pull_request over pull_request_target 2022-08-26 08:43:42 +02:00
Alexey VarfolomeevandGitHub ebcff2e319 fix unix path on IOSU/PDM (#60)
With PR #52 this path was missed
2022-08-26 06:21:07 +02:00
Marcin ChojnackiandGitHub 974edaa649 Initial macOS port bringup (#52) 2022-08-26 04:03:26 +02:00
Exzap a2abffd37b coreinit: Manual endian-swap is not required for MEMPTR 2022-08-25 16:59:54 +02:00
ExzapandGitHub fb0c36f714 Update BUILD.md 2022-08-25 15:35:30 +02:00
TotalCaesar659andGitHub 7b1f74b3d5 Update URLs to HTTPS (#44) 2022-08-25 15:33:12 +02:00
ExzapandGitHub 00327129b7 Fix formatting in BUILD.md 2022-08-25 15:16:51 +02:00
ExzapandGitHub a3b9a45239 build.md: Vulkan SDK not necessary anymore 2022-08-25 12:28:38 +02:00
Marco RubinandGitHub 1d3f62a09c Fix ImGui::Text() format strings (#41)
* Fix format string
2022-08-25 12:15:02 +02:00
ExzapandGitHub 62ef3ea493 Merge pull request #39 from ArtemisX64/dev
Remove Vulkan SDK dependency with Vulkan headers and temporary fix for static assert in linux builds
2022-08-25 10:17:21 +02:00
ArtemisX64andGitHub 3d6d9341f6 Update precompiled.h 2022-08-25 16:46:34 +09:00
ArtemisX64andGitHub 3b2cab2cf4 Remove Vulkan SDK dependency 2022-08-25 13:43:04 +09:00
ArtemisX64 b1760c344c Remove .cache 2022-08-25 13:37:09 +09:00
ArtemisX64 c8d22473e1 Merge branch 'dev' of github.com:ArtemisX64/Cemu into dev 2022-08-25 13:35:08 +09:00
ArtemisX64 999c25db3c Replace Vulkan-SDK with Vulkan Headers 2022-08-25 13:32:31 +09:00
ArtemisX64 8b7738f0ab Replace Vulkan-SDK with Vulkan Headers 2022-08-25 13:31:32 +09:00
be0f062de8 .github: Add issue template and funding information (#28)
* .github: Add issue template

Co-authored-by: Exzap <13877693+Exzap@users.noreply.github.com>
2022-08-25 00:57:33 +02:00
Mike BoharsikandGitHub 98bfe57af0 Update BUILD.md to reference correct solution generation bat file path (#15) 2022-08-25 00:51:25 +02:00
ExzapandGitHub 1f86daa55d Add missing step in Linux build guide 2022-08-24 12:34:39 +02:00
illusion0001andGitHub cdba95d92f Ignore markdown files for CI build (#7)
* Ignore markdown files for CI build

* Consistent quotation marks
2022-08-24 11:30:16 +02:00
Maximilian Downey TwissandGitHub c41d57c456 Reformat CMakeSettings.json and remove empty variables (#4) 2022-08-24 11:22:13 +02:00
Maximilian Downey TwissandGitHub 5ae3c56de8 Use more consistent formatting in CMakeLists.txt (#2) 2022-08-24 08:32:04 +02:00
ExzapandGitHub ede1afd3ee CI: Remove unnecessary step to free space
There is currently an issue where building from scratch causes the Windows CI machine to run out of disk space. Since it works when the job is re-run with cached packages we'll just leave it at that for now
2022-08-24 08:28:06 +02:00
ExzapandGitHub 0507e1ac89 Pasted the wrong URL. Whoops 2022-08-24 06:55:46 +02:00
ExzapandGitHub 0e7389ee83 Add announcement post link to readme
Also testing CI builds with this commit
2022-08-24 06:48:07 +02:00
ExzapandGitHub 560a2e536f Tweak readme 2022-08-23 05:56:08 +02:00
CrementifandGitHub 736d529ea5 Expand readme with links and description 2022-08-23 02:37:05 +02:00
301 changed files with 3792 additions and 3990 deletions
@@ -0,0 +1,34 @@
---
name: Bug Report / Feature Request
about: Tech support does not belong here. You should only file an issue here if you think you have experienced an actual bug with Cemu or you are requesting a feature you believe would make Cemu better.
title: ''
labels: ''
assignees: ''
---
<!---
Please keep in mind Cemu is EXPERIMENTAL SOFTWARE.
Please read the FAQ:
https://cemu.info/faq.html/
THIS IS NOT A SUPPORT FORUM, FOR SUPPORT GO TO:
https://discord.com/invite/5psYsup/
If the FAQ does not answer your question, please go to:
https://discord.com/invite/5psYsup/
When submitting an issue, please check the following:
- You have read the above.
- You have provided the version (commit hash) of Cemu you are using.
- You have provided sufficient detail for the issue to be reproduced.
- You have provided system specs (if relevant).
- Please also provide:
- For any issues, a log file
- For crashes, a backtrace.
- For graphical issues, comparison screenshots with real hardware.
- For emulation inaccuracies, a test-case (if able).
-->
+5
View File
@@ -0,0 +1,5 @@
blank_issues_enabled: false
contact_links:
- name: Cemu Discord
url: https://discord.com/invite/5psYsup
about: If you are experiencing an issue with Cemu, and you need tech support, or if you have a general question, try asking in the official Cemu Discord linked here. Piracy is not allowed.
+26 -35
View File
@@ -1,19 +1,14 @@
name: Build Cemu name: Build Cemu
on: on:
pull_request_target:
types:
- opened
- synchronize
- reopened
push:
branches:
- main
workflow_call: workflow_call:
inputs: inputs:
deploymode: deploymode:
required: false required: false
type: string type: string
experimentalversion:
required: false
type: string
env: env:
VCPKG_ROOT: "${{github.workspace}}/dependencies/vcpkg" VCPKG_ROOT: "${{github.workspace}}/dependencies/vcpkg"
@@ -22,9 +17,6 @@ env:
jobs: jobs:
build-ubuntu: build-ubuntu:
runs-on: ubuntu-20.04 runs-on: ubuntu-20.04
env:
install_vulkan_folder: "$GITHUB_WORKSPACE/vulkan_sdk"
install_vulkan_version: "1.3.216.0"
steps: steps:
- name: "Checkout repo" - name: "Checkout repo"
uses: actions/checkout@v3 uses: actions/checkout@v3
@@ -37,7 +29,6 @@ jobs:
echo "BUILD_MODE=release" >> $GITHUB_ENV echo "BUILD_MODE=release" >> $GITHUB_ENV
echo "BUILD_FLAGS=-DPUBLIC_RELEASE=ON" >> $GITHUB_ENV echo "BUILD_FLAGS=-DPUBLIC_RELEASE=ON" >> $GITHUB_ENV
echo "Build mode is release" echo "Build mode is release"
- name: Setup debug mode parameters (for continous build) - name: Setup debug mode parameters (for continous build)
if: ${{ inputs.deploymode != 'release' }} if: ${{ inputs.deploymode != 'release' }}
run: | run: |
@@ -45,17 +36,18 @@ jobs:
echo "BUILD_FLAGS=" >> $GITHUB_ENV echo "BUILD_FLAGS=" >> $GITHUB_ENV
echo "Build mode is debug" echo "Build mode is debug"
- name: Setup version for experimental
if: ${{ inputs.experimentalversion != '' }}
run: |
echo "[INFO] Experimental version ${{ inputs.experimentalversion }}"
echo "BUILD_FLAGS=${{ env.BUILD_FLAGS }} -DEXPERIMENTAL_VERSION=${{ inputs.experimentalversion }}" >> $GITHUB_ENV
- name: "Install system dependencies" - name: "Install system dependencies"
run: | run: |
sudo apt update -qq sudo apt update -qq
sudo apt install -y ninja-build cmake libgtk-3-dev libsecret-1-dev libgcrypt20-dev libsystemd-dev freeglut3-dev clang-12 nasm sudo apt install -y ninja-build cmake libgtk-3-dev libsecret-1-dev libgcrypt20-dev libsystemd-dev freeglut3-dev clang-12 nasm
wget https://sdk.lunarg.com/sdk/download/${{ env.install_vulkan_version }}/linux/vulkansdk-linux-x86_64-${{ env.install_vulkan_version }}.tar.gz -q -O vulkansdk.tar.gz
mkdir -p "${{ env.install_vulkan_folder }}"
tar -xf vulkansdk.tar.gz --directory ${{ env.install_vulkan_folder }}
- name: "Bootstrap vcpkg" - name: "Bootstrap vcpkg"
run: | run: |
export VULKAN_SDK="${{ env.install_vulkan_folder }}/${{ env.install_vulkan_version }}/x86_64"
bash ./dependencies/vcpkg/bootstrap-vcpkg.sh bash ./dependencies/vcpkg/bootstrap-vcpkg.sh
- name: 'Setup NuGet Credentials for vcpkg' - name: 'Setup NuGet Credentials for vcpkg'
@@ -74,7 +66,6 @@ jobs:
- name: "cmake" - name: "cmake"
run: | run: |
export VULKAN_SDK="${{ env.install_vulkan_folder }}/${{ env.install_vulkan_version }}/x86_64"
mkdir -p build mkdir -p build
cd build cd build
cmake .. ${{ env.BUILD_FLAGS }} -DCMAKE_BUILD_TYPE=${{ env.BUILD_MODE }} -DCMAKE_C_COMPILER=/usr/bin/clang-12 -DCMAKE_CXX_COMPILER=/usr/bin/clang++-12 -G Ninja -DCMAKE_MAKE_PROGRAM=/usr/bin/ninja cmake .. ${{ env.BUILD_FLAGS }} -DCMAKE_BUILD_TYPE=${{ env.BUILD_MODE }} -DCMAKE_C_COMPILER=/usr/bin/clang-12 -DCMAKE_CXX_COMPILER=/usr/bin/clang++-12 -G Ninja -DCMAKE_MAKE_PROGRAM=/usr/bin/ninja
@@ -83,7 +74,11 @@ jobs:
run: | run: |
cd build cd build
ninja ninja
- name: Prepare artifact
if: ${{ inputs.deploymode == 'release' }}
run: mv bin/Cemu_release bin/Cemu
- name: Upload artifact - name: Upload artifact
uses: actions/upload-artifact@v3 uses: actions/upload-artifact@v3
if: ${{ inputs.deploymode == 'release' }} if: ${{ inputs.deploymode == 'release' }}
@@ -94,9 +89,6 @@ jobs:
build-windows: build-windows:
runs-on: windows-2022 runs-on: windows-2022
env:
install_vulkan_folder: "$GITHUB_WORKSPACE/vulkan_sdk"
install_vulkan_version: "1.3.216.0"
steps: steps:
- name: "Checkout repo" - name: "Checkout repo"
uses: actions/checkout@v3 uses: actions/checkout@v3
@@ -116,13 +108,11 @@ jobs:
echo "BUILD_MODE=debug" | Out-File -FilePath $Env:GITHUB_ENV -Encoding utf8 -Append echo "BUILD_MODE=debug" | Out-File -FilePath $Env:GITHUB_ENV -Encoding utf8 -Append
echo "BUILD_FLAGS=" | Out-File -FilePath $Env:GITHUB_ENV -Encoding utf8 -Append echo "BUILD_FLAGS=" | Out-File -FilePath $Env:GITHUB_ENV -Encoding utf8 -Append
echo "Build mode is debug" echo "Build mode is debug"
- name: Setup version for experimental
- name: Prepare Vulkan SDK if: ${{ inputs.experimentalversion != '' }}
uses: humbletim/setup-vulkan-sdk@v1.2.0 run: |
with: echo "[INFO] Experimental version ${{ inputs.experimentalversion }}"
vulkan-query-version: 1.3.216.0 echo "BUILD_FLAGS=${{ env.BUILD_FLAGS }} -DEXPERIMENTAL_VERSION=${{ inputs.experimentalversion }}" | Out-File -FilePath $Env:GITHUB_ENV -Encoding utf8 -Append
vulkan-components: Vulkan-Headers, Vulkan-Loader
vulkan-use-cache: false
- name: Workaround - name: Workaround
run: | run: |
@@ -153,7 +143,6 @@ jobs:
# should be run twice # should be run twice
$process = Start-Process -FilePath cmd.exe -ArgumentList $Arguments -Wait -PassThru -WindowStyle Hidden $process = Start-Process -FilePath cmd.exe -ArgumentList $Arguments -Wait -PassThru -WindowStyle Hidden
$process = Start-Process -FilePath cmd.exe -ArgumentList $Arguments -Wait -PassThru -WindowStyle Hidden $process = Start-Process -FilePath cmd.exe -ArgumentList $Arguments -Wait -PassThru -WindowStyle Hidden
- name: Configure MSVC - name: Configure MSVC
uses: ilammy/msvc-dev-cmd@v1 uses: ilammy/msvc-dev-cmd@v1
with: with:
@@ -183,17 +172,19 @@ jobs:
run: | run: |
mkdir -p build mkdir -p build
cd build cd build
echo "[INFO] BUILD_FLAGS: ${{ env.BUILD_FLAGS }}"
echo "[INFO] BUILD_MODE: ${{ env.BUILD_MODE }}"
cmake .. ${{ env.BUILD_FLAGS }} -DCMAKE_BUILD_TYPE=${{ env.BUILD_MODE }} cmake .. ${{ env.BUILD_FLAGS }} -DCMAKE_BUILD_TYPE=${{ env.BUILD_MODE }}
- name: "Free up space"
run: |
Remove-Item './dependencies/vcpkg/downloads' -Recurse
- name: "Build Cemu" - name: "Build Cemu"
run: | run: |
cd build cd build
cmake --build . --config ${{ env.BUILD_MODE }} -j 2 cmake --build . --config ${{ env.BUILD_MODE }} -j 2
- name: Prepare artifact
if: ${{ inputs.deploymode == 'release' }}
run: Rename-Item bin/Cemu_release.exe Cemu.exe
- name: Upload artifact - name: Upload artifact
uses: actions/upload-artifact@v3 uses: actions/upload-artifact@v3
if: ${{ inputs.deploymode == 'release' }} if: ${{ inputs.deploymode == 'release' }}
+21
View File
@@ -0,0 +1,21 @@
name: Build check
on:
pull_request:
paths-ignore:
- "*.md"
types:
- opened
- synchronize
- reopened
push:
paths-ignore:
- "*.md"
branches:
- main
jobs:
build:
uses: ./.github/workflows/build.yml
with:
deploymode: release
experimentalversion: 999999
@@ -0,0 +1,66 @@
name: Deploy experimental release
on:
workflow_dispatch:
jobs:
call-release-build:
uses: ./.github/workflows/build.yml
with:
deploymode: release
experimentalversion: ${{ github.run_number }}
deploy:
name: Deploy experimental release
runs-on: ubuntu-20.04
needs: call-release-build
steps:
- uses: actions/checkout@v2
- uses: actions/download-artifact@v3
with:
name: cemu-bin-linux-x64
path: cemu-bin-linux-x64
- uses: actions/download-artifact@v3
with:
name: cemu-bin-windows-x64
path: cemu-bin-windows-x64
- name: Initialize
run: |
mkdir upload
sudo apt install zip
- name: Get version
run: |
echo "Experimental version: ${{ github.run_number }}"
ls
gcc -o getversion .github/getversion.cpp
./getversion
echo "Cemu CI version: $(./getversion)"
echo "CEMU_FOLDER_NAME=Cemu_$(./getversion)-${{ github.run_number }}" >> $GITHUB_ENV
echo "CEMU_VERSION=$(./getversion)-${{ github.run_number }}" >> $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 release from linux-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
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
echo "[INFO] Release tag: v${{ env.CEMU_VERSION }}"
ghr_v0.15.0_linux_amd64/ghr -prerelease -t ${{ secrets.GITHUB_TOKEN }} -n "Cemu ${{ env.CEMU_VERSION }} (Experimental)" -b "Cemu experimental release - [changelog](https://cemu.info/changelog.html)" "v${{ env.CEMU_VERSION }}" ./upload
+42
View File
@@ -0,0 +1,42 @@
name: Generate translation template
on:
pull_request:
paths-ignore:
- "*.md"
types:
- opened
- synchronize
- reopened
push:
paths-ignore:
- "*.md"
branches:
- main
jobs:
generate-pot:
runs-on: ubuntu-latest
steps:
- name: "Checkout repo"
uses: actions/checkout@v3
- name: "Install gettext"
run: |
sudo apt update -qq
sudo apt install -y gettext
- name: "Generate POT file using xgettext"
run: >
find src -name *.cpp -o -name *.hpp -o -name *.h |
xargs xgettext --from-code=utf-8
-k_ -kwxTRANSLATE -w 100
--check=space-ellipsis --omit-header
-o cemu.pot
- name: Upload artifact
uses: actions/upload-artifact@v3
with:
name: POT file
path: ./cemu.pot
if-no-files-found: error
+25 -2
View File
@@ -13,10 +13,33 @@
*.out *.out
*.app *.app
.vs .vs
.idea/
build/ build/
out/ out/
.cache/
bin/Cemu_*
bin/Cemu_*.exe
# Cemu bin files # Cemu bin files
otp.bin bin/otp.bin
seeprom.bin bin/seeprom.bin
bin/log.txt
bin/Cemu_*.pdb
bin/Cemu_*.ilk
bin/Cemu.exe.backup
bin/mlc01/*
bin/settings.xml
bin/title_list_cache.xml
bin/debugger/*
bin/sdcard/*
!bin/shaderCache/info.txt
bin/shaderCache/*
bin/controllerProfiles/*
!bin/gameProfiles/default/*
bin/gameProfiles/*
bin/graphicPacks/*
+3
View File
@@ -10,3 +10,6 @@
path = dependencies/vcpkg path = dependencies/vcpkg
url = https://github.com/microsoft/vcpkg url = https://github.com/microsoft/vcpkg
shallow = true shallow = true
[submodule "dependencies/Vulkan-Headers"]
path = dependencies/Vulkan-Headers
url = https://github.com/KhronosGroup/Vulkan-Headers
+59
View File
@@ -0,0 +1,59 @@
# Build instructions
## Windows
Prerequisites:
- A recent version of Visual Studio 2022 (recommended but not required) with the following additional components:
- C++ CMake tools for Windows
- Windows 10/11 SDK
- git
Instructions:
1. Run `git clone --recursive https://github.com/cemu-project/Cemu`
2. Launch `Cemu/generate_vs_solution.bat`.
- If you installed VS to a custom location or use VS 2019, you may need to manually change the path inside the .bat file
3. Wait until it's done, then open `Cemu/build/Cemu.sln` in Visual Studio
4. Then build the solution and once finished you can run and debug it, or build it and check the /bin folder for the final Cemu_release.exe.
You can also skip steps 3-5 and open the root folder of the cloned repo directly in Visual Studio (as a folder) and use the built-in cmake support but be warned that cmake support in VS can be a bit finicky.
## Linux
To compile Cemu, a recent enough compiler and STL with C++20 support is required! clang-12 or higher is what we recommend.
### Installing dependencies
#### For Ubuntu and derivatives:
`sudo apt install -y git curl cmake ninja-build nasm libgtk-3-dev libsecret-1-dev libgcrypt20-dev libsystemd-dev freeglut3-dev libpulse-dev`
Additionally, for ubuntu 20.04 only:
- `sudo apt install -y clang-12`
- At step 3 while building, use
`cmake -S . -B build -DCMAKE_BUILD_TYPE=release -DCMAKE_C_COMPILER=/usr/bin/clang-12 -DCMAKE_CXX_COMPILER=/usr/bin/clang++-12 -G Ninja -DCMAKE_MAKE_PROGRAM=/usr/bin/ninja`
#### For Arch and derivatives:
`sudo pacman -S git cmake clang ninja nasm base-devel linux-headers gtk3 libsecret libgcrypt systemd freeglut zip libpulse`
#### For Fedora and derivatives:
`sudo dnf install git cmake clang ninja-build nasm kernel-headers gtk3-devel libsecret-devel libgcrypt-devel systemd-devel freeglut-devel perl-core zlib-devel cubeb-devel`
### Build Cemu using cmake and clang
1. `git clone --recursive https://github.com/cemu-project/Cemu`
2. `cd Cemu`
3. `cmake -S . -B build -DCMAKE_BUILD_TYPE=release -DCMAKE_C_COMPILER=/usr/bin/clang -DCMAKE_CXX_COMPILER=/usr/bin/clang++ -G Ninja`
4. `cmake --build build`
5. You should now have a Cemu executable file in the /bin folder, which you can run using `./bin/Cemu_release`.
#### Using GCC
While we use and test Cemu using clang, using GCC might work better with your distro (they should be fairly similar performance/issues wise and should only be considered if compilation is the issue).
You can use it by replacing the step 3 with the following:
`cmake -S . -B build -DCMAKE_BUILD_TYPE=release -DCMAKE_C_COMPILER=/usr/bin/gcc -DCMAKE_CXX_COMPILER=/usr/bin/g++ -G Ninja`
#### Troubleshooting steps
- If step 3 gives you an error about not being able to find ninja, try appending `-DCMAKE_MAKE_PROGRAM=/usr/bin/ninja` to the command and running it again.
- If step 3 fails while compiling the boost-build dependency, it means you don't have a working/good standard library installation. Check the integrity of your system headers and making sure that C++ related packages are installed and intact.
- If step 3 gives 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.
- If step 3 is still failing or if you're not able to find the cause, please make an issue on our Github about it!
- If step 4 gives you an error that contains something like `main.cpp.o: in function 'std::__cxx11::basic_string...`, you likely are experiencing a clang-14 issue. This can only be fixed by either lowering the clang version or using GCC, see below.
- If step 4 gives you a different error, you could report it to this repo or try using GCC. Just make sure your standard library and compilers are updated since Cemu uses a lot of modern features!
- If step 4 gives you undefined libdecor_xx, you are likely experiencing an issue with sdl2 package that comes with vcpkg. Delete sdl2 from vcpkg.json in source file and recompile
+97 -70
View File
@@ -1,116 +1,143 @@
cmake_minimum_required(VERSION 3.21.1) cmake_minimum_required(VERSION 3.21.1)
option(PUBLIC_RELEASE "Compile with debug asserts disabled and no console" OFF) option(PUBLIC_RELEASE "Compile with debug asserts disabled and no console" OFF)
option(ENABLE_VCPKG "Enable the vcpkg package manager" ON)
set(EXPERIMENTAL_VERSION "" CACHE STRING "") # used by CI script to set experimental version
if (PUBLIC_RELEASE) if (EXPERIMENTAL_VERSION)
add_definitions(-DPUBLIC_RELEASE) add_definitions(-DEMULATOR_VERSION_MINOR=${EXPERIMENTAL_VERSION})
set(CMAKE_INTERPROCEDURAL_OPTIMIZATION TRUE) # enable LTO
endif() endif()
if(WIN32) if (ENABLE_VCPKG)
set(VCPKG_TARGET_TRIPLET "x64-windows-static" CACHE STRING "") set(VCPKG_OVERLAY_PORTS "${CMAKE_CURRENT_LIST_DIR}/dependencies/vcpkg_overlay_ports")
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)
if (WIN32)
set(VCPKG_TARGET_TRIPLET "x64-windows-static" CACHE STRING "")
endif()
endif() endif()
set(VCPKG_OVERLAY_PORTS "${CMAKE_CURRENT_LIST_DIR}/dependencies/vcpkg_overlay_ports") project(Cemu VERSION 2.0)
set(CMAKE_TOOLCHAIN_FILE "${CMAKE_CURRENT_SOURCE_DIR}/dependencies/vcpkg/scripts/buildsystems/vcpkg.cmake"
CACHE STRING "Vcpkg toolchain file") list(APPEND CMAKE_MODULE_PATH "${PROJECT_SOURCE_DIR}/cmake")
project(Cemu VERSION 0.1)
set(CMAKE_CXX_STANDARD 20) set(CMAKE_CXX_STANDARD 20)
set(CMAKE_CXX_STANDARD_REQUIRED ON) set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_EXPORT_COMPILE_COMMANDS ON) set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
if (PUBLIC_RELEASE)
add_compile_definitions(PUBLIC_RELEASE)
set(CMAKE_INTERPROCEDURAL_OPTIMIZATION TRUE) # enable LTO
endif()
set_property(GLOBAL PROPERTY USE_FOLDERS ON) set_property(GLOBAL PROPERTY USE_FOLDERS ON)
IF(MSVC) if (MSVC)
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /EHsc") set_property(DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} PROPERTY VS_STARTUP_PROJECT CemuBin)
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /fp:precise") # floating point model: precise # floating point model: precise, fiber safe optimizations
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /GT") # fiber safe optimizations add_compile_options(/EHsc /fp:precise)
ENDIF() if (CMAKE_CXX_COMPILER_ID STREQUAL "Clang")
# Speeds up static linking (especially helpful in incremental compilation)
IF(MSVC AND PUBLIC_RELEASE) if((CMAKE_LINKER MATCHES ".*lld-link.*") AND (CMAKE_AR MATCHES ".*llvm-lib.*"))
message(STATUS "Using additional optimization flags for MSVC") set_property(DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} PROPERTY STATIC_LIBRARY_OPTIONS /llvmlibthin)
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /Oi /Ot") # enable intrinsic functions, favor speed endif()
ENDIF() else()
add_compile_options(/GT)
endif()
if (PUBLIC_RELEASE)
message(STATUS "Using additional optimization flags for MSVC")
add_compile_options(/Oi /Ot) # enable intrinsic functions, favor speed
endif()
endif()
option(ENABLE_OPENGL "Enables the OpenGL backend" ON) option(ENABLE_OPENGL "Enables the OpenGL backend" ON)
option(ENABLE_VULKAN "Enables the Vulkan backend" ON) option(ENABLE_VULKAN "Enables the Vulkan backend" ON)
option(ENABLE_DISCORD_RPC "Enables the Discord Rich Presence feature" ON) option(ENABLE_DISCORD_RPC "Enables the Discord Rich Presence feature" ON)
if(WIN32)
option(ENABLE_CEMUHOOK "Enables Cemuhook compatibility" ON)
endif()
# input backends # input backends
if(WIN32) if (WIN32)
option(ENABLE_XINPUT "Enables the usage of XInput" ON) option(ENABLE_XINPUT "Enables the usage of XInput" ON)
option(ENABLE_DIRECTINPUT "Enables the usage of DirectInput" ON) option(ENABLE_DIRECTINPUT "Enables the usage of DirectInput" ON)
add_definitions(-DHAS_DIRECTINPUT) add_compile_definitions(HAS_DIRECTINPUT)
endif() endif()
option(ENABLE_SDL "Enables the SDLController backend" ON) option(ENABLE_SDL "Enables the SDLController backend" ON)
# audio backends # audio backends
if(WIN32) if (WIN32)
option(ENABLE_DIRECTAUDIO "Enables the directaudio backend" ON) option(ENABLE_DIRECTAUDIO "Enables the directaudio backend" ON)
option(ENABLE_XAUDIO "Enables the xaudio backend" ON) option(ENABLE_XAUDIO "Enables the xaudio backend" ON)
endif() endif()
option(ENABLE_CUBEB "Enabled cubeb backend" ON) option(ENABLE_CUBEB "Enabled cubeb backend" ON)
option(ENABLE_WXWIDGETS "Build with wxWidgets UI (Currently required)" ON) option(ENABLE_WXWIDGETS "Build with wxWidgets UI (Currently required)" ON)
find_package(SDL2 CONFIG REQUIRED) set(THREADS_PREFER_PTHREAD_FLAG true)
find_package(CURL CONFIG REQUIRED) find_package(Threads REQUIRED)
find_package(pugixml CONFIG REQUIRED) find_package(SDL2 REQUIRED)
find_package(imgui CONFIG REQUIRED) find_package(CURL REQUIRED)
find_package(RapidJSON CONFIG REQUIRED) find_package(pugixml REQUIRED)
find_package(imgui REQUIRED)
find_package(RapidJSON REQUIRED)
find_package(Boost COMPONENTS program_options filesystem nowide REQUIRED) find_package(Boost COMPONENTS program_options filesystem nowide REQUIRED)
find_package(libzip REQUIRED) find_package(libzip REQUIRED)
find_package(glslang REQUIRED) find_package(glslang REQUIRED)
find_package(ZLIB REQUIRED) find_package(ZLIB REQUIRED)
find_package(zstd CONFIG REQUIRED) find_package(zstd MODULE REQUIRED) # MODULE so that zstd::zstd is available
find_package(OpenSSL COMPONENTS Crypto SSL REQUIRED)
find_package(glm REQUIRED)
find_package(fmt 9.1.0 REQUIRED)
find_package(PNG REQUIRED)
if(ENABLE_VULKAN) # glslang versions older than 11.11.0 define targets without a namespace
find_package(Vulkan REQUIRED) if (NOT TARGET glslang::SPIRV AND TARGET SPIRV)
include_directories("${Vulkan_INCLUDE_DIRS}") add_library(glslang::SPIRV ALIAS SPIRV)
endif()
if(ENABLE_OPENGL)
find_package(OpenGL REQUIRED)
endif()
if(ENABLE_DISCORD_RPC)
add_definitions(-DENABLE_DISCORD_RPC)
add_subdirectory(dependencies/discord-rpc EXCLUDE_FROM_ALL)
target_include_directories(discord-rpc INTERFACE ./dependencies/discord-rpc/include)
endif() endif()
if(ENABLE_WXWIDGETS) if (UNIX AND NOT APPLE)
find_package(wxWidgets CONFIG REQUIRED) find_package(X11 REQUIRED)
endif() endif()
find_package(OpenSSL REQUIRED) if (ENABLE_VULKAN)
find_package(X11) include_directories("dependencies/Vulkan-Headers/include")
# find a better way to handle this
link_libraries(${Boost_LIBRARIES})
link_libraries(${X11_LIBRARIES})
link_libraries(SDL2::SDL2 SDL2::SDL2main SDL2::SDL2-static)
if(ENABLE_WXWIDGETS)
link_libraries(wx::core wx::base)
endif() endif()
if(ENABLE_CUBEB) if (ENABLE_OPENGL)
option(BUILD_TESTS "" OFF) find_package(OpenGL REQUIRED)
option(BUILD_TOOLS "" OFF)
option(BUNDLE_SPEEX "" OFF)
set(USE_WINMM OFF CACHE BOOL "")
add_subdirectory(dependencies/cubeb)
set_property(TARGET cubeb PROPERTY MSVC_RUNTIME_LIBRARY "MultiThreaded$<$<CONFIG:Debug>:Debug>")
link_libraries(cubeb)
add_compile_definitions(HAS_CUBEB=1)
endif() endif()
add_subdirectory(dependencies/ih264d) if (ENABLE_DISCORD_RPC)
add_subdirectory(dependencies/ZArchive) 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_WXWIDGETS)
find_package(wxWidgets 3.2 REQUIRED COMPONENTS base core gl propgrid xrc)
endif()
if (ENABLE_CUBEB)
find_package(cubeb)
if (NOT cubeb_FOUND)
option(BUILD_TESTS "" OFF)
option(BUILD_TOOLS "" OFF)
option(BUNDLE_SPEEX "" OFF)
set(USE_WINMM OFF CACHE BOOL "")
add_subdirectory("dependencies/cubeb" EXCLUDE_FROM_ALL)
set_property(TARGET cubeb PROPERTY MSVC_RUNTIME_LIBRARY "MultiThreaded$<$<CONFIG:Debug>:Debug>")
add_library(cubeb::cubeb ALIAS cubeb)
endif()
add_compile_definitions("HAS_CUBEB=1")
endif()
add_subdirectory("dependencies/ih264d" EXCLUDE_FROM_ALL)
find_package(ZArchive)
if (NOT ZArchive_FOUND)
add_subdirectory("dependencies/ZArchive" EXCLUDE_FROM_ALL)
endif()
add_subdirectory(src) add_subdirectory(src)
+15 -23
View File
@@ -1,37 +1,29 @@
{ {
"configurations": [ "configurations": [
{ {
"name": "x64-Debug", "name": "Release",
"configurationType": "RelWithDebInfo",
"generator": "Ninja",
"inheritEnvironments": [ "msvc_x64_x64" ],
"buildRoot": "${projectDir}\\out\\build\\${name}",
"installRoot": "${projectDir}\\out\\install\\${name}"
},
{
"name": "Public Release",
"configurationType": "RelWithDebInfo",
"generator": "Ninja", "generator": "Ninja",
"configurationType": "Debug",
"inheritEnvironments": [ "msvc_x64_x64" ], "inheritEnvironments": [ "msvc_x64_x64" ],
"buildRoot": "${projectDir}\\out\\build\\${name}", "buildRoot": "${projectDir}\\out\\build\\${name}",
"installRoot": "${projectDir}\\out\\install\\${name}", "installRoot": "${projectDir}\\out\\install\\${name}",
"cmakeCommandArgs": "", "cmakeCommandArgs": "-DPUBLIC_RELEASE=ON"
"buildCommandArgs": "",
"ctestCommandArgs": ""
}, },
{ {
"name": "x64-Release", "name": "Debug",
"configurationType": "Debug",
"generator": "Ninja", "generator": "Ninja",
"configurationType": "RelWithDebInfo", "inheritEnvironments": [ "msvc_x64_x64" ],
"buildRoot": "${projectDir}\\out\\build\\${name}", "buildRoot": "${projectDir}\\out\\build\\${name}",
"installRoot": "${projectDir}\\out\\install\\${name}", "installRoot": "${projectDir}\\out\\install\\${name}"
"cmakeCommandArgs": "",
"buildCommandArgs": "",
"ctestCommandArgs": "",
"inheritEnvironments": [ "msvc_x64_x64" ]
},
{
"name": "x64-Public-Release",
"generator": "Ninja",
"configurationType": "RelWithDebInfo",
"buildRoot": "${projectDir}\\out\\build\\${name}",
"installRoot": "${projectDir}\\out\\install\\${name}",
"cmakeCommandArgs": "-DPUBLIC_RELEASE=ON",
"buildCommandArgs": "",
"ctestCommandArgs": "",
"inheritEnvironments": [ "msvc_x64_x64" ]
} }
] ]
} }
View File
+52
View File
@@ -0,0 +1,52 @@
# **Cemu - Wii U emulator**
[![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/dev:cemu.info?server_fqdn=matrix.cemu.info&label=dev:cemu.info&logo=matrix&logoColor=FFFFFF)](https://matrix.to/#/#dev:cemu.info)
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 to increase compatibility, convenience and usability.
Cemu is currently only available for 64-bit Windows and Linux devices.
### Links:
- [Original 2.0 announcement post](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)
- [Unofficial 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/ActualMandM/cemu_graphic_packs)
## Download
You can download the latest Cemu releases from the [GitHub Releases](https://github.com/cemu-project/Cemu/releases/) or from [Cemu's website](https://cemu.info).
Cemu is currently only available in a portable format so no installation is required besides extracting it in a safe place.
See [Current State Of Linux builds](https://github.com/cemu-project/Cemu/issues/1) for information on using Cemu natively on Linux.
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 or Linux, view the [BUILD.md file](/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](https://discord.gg/5psYsup).
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. Alternative communication channels (like IRC) are being considered.
## 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.
-27
View File
@@ -1,27 +0,0 @@
# This is an example configuration file. You can use this file as a guideline on how to create your own game profiles.
# Overview:
# The filename of the game profile can be found by looking at log.txt after a game was launched in Cemu.
# A '#' character starts a one-line comment. Any text afterwards will be ignored.
# If an option is not given in the .ini file, Cemu will use the value from the global settings instead.
[General]
loadSharedLibraries = true # If set to true, system rpl files will be loaded from /cafeLibs/ if present. Default value is true
useRDTSC = true # Use RDTSC instruction as timer source for emulated CPU, OS and audio
[Graphics]
accurateShaderMul = true # If set to true, Cemu will correctly emulate the non-IEEE behavior of the shader MUL instruction. Can fix graphic issues but also decreases shader performance and increases shader compile time. Default value is true.
# Since Cemu 1.7.5 the option accurateShaderMul also supports a third mode, enabled by using the value 'min' (e.g. accurateShaderMul = min). In this mode, Cemu will emulate non-ieee MUL instructions in a more GPU-friendly way which generates less complex shaders. However, this mode might not be 100% accurate
disableGPUFence = false # If set to true, GPU fence operations will be skipped. Default value is false. Enabling this option can lead to instability and crashes
GPUBufferCacheAccuracy = 0 # Controls the accuracy of vertex and uniform data caching. A higher accuracy means more expensive checks which can slow down rendering. Possible values: 0 = high, 1 = medium, 2 = low
streamoutBufferCacheSize = 24 # buffer cache size of the streamout buffer in MB.
extendedTextureReadback = false # If set to true, Cemu will try to mirror data written by GPU operations to CPU RAM (but only if access by CPU is assumed to be likely) Default value is false
[CPU]
cpuTimer = cycleCounter # Timer source for OS and CPU time. Supported values are 'hostBased' (timers are based on actual OS time) and 'cycleCounter' (timers are based on speed of emulated CPU).
emulateSinglePrecision = true # If set to false, the recompiler won't correctly round the result of single-precision instructions in certain situations. This can introduce gameplay bugs, but might also improve performance.
cpuMode = Singlecore-Recompiler # CPU mode. Possible values: Singlecore-Interpreter, Singlecore-Recompiler, Dualcore-Recompiler, Triplecore-Recompiler
-33
View File
@@ -1,33 +0,0 @@
# Build instructions
## Windows
Prerequisites:
- A recent version of Visual Studio 2022 with CMake tools component
- git
- Vulkan SDK ([https://vulkan.lunarg.com/](https://vulkan.lunarg.com/)). Don't forget to restart after installing.
Instructions:
1) Run `git clone --recursive https://github.com/cemu-project/Cemu`
2) Launch `Cemu/build_vs_solution.bat`. If you installed VS to a custom location you may need to manually adjust the path inside the bat file
3) Wait until done, then open build/Cemu.sln in Visual Studio
4) Right click 'CemuBin' project -> Set as startup project
5) Then build the solution and once finished you can run and debug it
You can also skip steps 3-5 and open the root folder of the cloned repo directly in Visual Studio (as a folder) and use the inbuilt cmake support, but be warned that cmake support in VS can be a bit finicky.
## Linux
To compile Cemu, a recent enough compiler and STL with C++20 support is required! We use clang 12, other compilers may work as well.
For ubuntu and most derivatives:
1) Make sure vulkansdk is installed and the VULKAN_SDK environment variable is set correctly.
2) `sudo apt install -y libgtk-3-dev libsecret-1-dev libgcrypt20-dev libsystemd-dev freeglut3-dev clang-12 nasm`
3) Run `git clone --recursive https://github.com/cemu-project/Cemu`
4) `cd Cemu`
5) `mkdir build && cd build`
6) `cmake .. -DCMAKE_BUILD_TYPE=release -DCMAKE_C_COMPILER=/usr/bin/clang-12 -DCMAKE_CXX_COMPILER=/usr/bin/clang++-12 -G Ninja -DCMAKE_MAKE_PROGRAM=/usr/bin/ninja`
Build instructions for other distributions will be added in the future!
+20
View File
@@ -0,0 +1,20 @@
# SPDX-FileCopyrightText: 2022 Andrea Pappacoda <andrea@pappacoda.it>
# SPDX-License-Identifier: ISC
find_package(PkgConfig)
if (PKG_CONFIG_FOUND)
pkg_search_module(zarchive IMPORTED_TARGET GLOBAL zarchive)
if (zarchive_FOUND)
add_library(ZArchive::zarchive ALIAS PkgConfig::zarchive)
endif()
endif()
include(FindPackageHandleStandardArgs)
find_package_handle_standard_args(ZArchive
REQUIRED_VARS
zarchive_LINK_LIBRARIES
zarchive_FOUND
VERSION_VAR
zarchive_VERSION
)
+27
View File
@@ -0,0 +1,27 @@
# SPDX-FileCopyrightText: 2022 Andrea Pappacoda <andrea@pappacoda.it>
# SPDX-License-Identifier: ISC
include(FindPackageHandleStandardArgs)
find_package(imgui CONFIG)
if (imgui_FOUND)
# Use upstream imguiConfig.cmake if possible
find_package_handle_standard_args(imgui CONFIG_MODE)
else()
# Fallback to pkg-config otherwise
find_package(PkgConfig)
if (PKG_CONFIG_FOUND)
pkg_search_module(imgui IMPORTED_TARGET GLOBAL imgui)
if (imgui_FOUND)
add_library(imgui::imgui ALIAS PkgConfig::imgui)
endif()
endif()
find_package_handle_standard_args(imgui
REQUIRED_VARS
imgui_LINK_LIBRARIES
imgui_FOUND
VERSION_VAR
imgui_VERSION
)
endif()
+49
View File
@@ -0,0 +1,49 @@
# SPDX-FileCopyrightText: 2022 Andrea Pappacoda <andrea@pappacoda.it>
# SPDX-License-Identifier: ISC
include(FindPackageHandleStandardArgs)
find_package(wxWidgets CONFIG COMPONENTS ${wxWidgets_FIND_COMPONENTS})
if (wxWidgets_FOUND)
# Use upstream wxWidgetsConfig.cmake if possible
find_package_handle_standard_args(wxWidgets CONFIG_MODE)
else()
# Fall back to CMake's FindwxWidgets
# Temporarily unset CMAKE_MODULE_PATH to avoid calling the current find
# module recursively
set(_tmp_module_path "${CMAKE_MODULE_PATH}")
set(CMAKE_MODULE_PATH "")
find_package(wxWidgets MODULE QUIET COMPONENTS ${wxWidgets_FIND_COMPONENTS})
set(CMAKE_MODULE_PATH "${_tmp_module_path}")
unset(_tmp_module_path)
if (wxWidgets_FOUND)
add_library(wx::base IMPORTED INTERFACE)
target_include_directories(wx::base INTERFACE ${wxWidgets_INCLUDE_DIRS})
target_link_libraries(wx::base INTERFACE ${wxWidgets_LIBRARIES})
target_link_directories(wx::base INTERFACE ${wxWidgets_LIBRARY_DIRS})
target_compile_definitions(wx::base INTERFACE ${wxWidgets_DEFINITIONS})
target_compile_options(wx::base INTERFACE ${wxWidgets_CXX_FLAGS})
# FindwxWidgets sets everything into a single set of variables, so it is
# impossible to tell what libraries are required for what component.
# To be compatible with wxWidgetsConfig, we create an alias for each
# component so that the user can still use target_link_libraries(wx::gl)
foreach(component ${wxWidgets_FIND_COMPONENTS})
if (NOT component STREQUAL "base")
# don't alias base to itself
add_library(wx::${component} ALIAS wx::base)
endif()
endforeach()
endif()
find_package_handle_standard_args(wxWidgets
REQUIRED_VARS
wxWidgets_LIBRARIES
wxWidgets_FOUND
VERSION_VAR
wxWidgets_VERSION_STRING
)
endif()
+33
View File
@@ -0,0 +1,33 @@
# SPDX-FileCopyrightText: 2022 Andrea Pappacoda <andrea@pappacoda.it>
# SPDX-License-Identifier: ISC
include(FindPackageHandleStandardArgs)
find_package(zstd CONFIG)
if (zstd_FOUND)
# Use upstream zstdConfig.cmake if possible
if (NOT TARGET zstd::zstd)
if (TARGET zstd::libzstd_static)
add_library(zstd::zstd ALIAS zstd::libzstd_static)
elseif (TARGET zstd::libzstd_shared)
add_library(zstd::zstd ALIAS zstd::libzstd_shared)
endif()
endif()
find_package_handle_standard_args(zstd CONFIG_MODE)
else()
# Fallback to pkg-config otherwise
find_package(PkgConfig)
if (PKG_CONFIG_FOUND)
pkg_search_module(libzstd IMPORTED_TARGET GLOBAL libzstd)
if (libzstd_FOUND)
add_library(zstd::zstd ALIAS PkgConfig::libzstd)
endif()
endif()
find_package_handle_standard_args(zstd
REQUIRED_VARS
libzstd_LINK_LIBRARIES
libzstd_FOUND
VERSION_VAR libzstd_VERSION
)
endif()

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