Compare commits

...
Sign in to create a new pull request.

231 commits

Author SHA1 Message Date
e4953d5866
[vk, nvnflinger] Fix RDNA3 gloom + purple lines & reapply adjustrefcount unstubb (#152)
title. **NEVER** touch application_info in vk again, except if you want to break RDNA3 rendering

Co-authored-by: Maufeat <sahyno1996@gmail.com>
Reviewed-on: eden-emu/eden#152
Co-authored-by: Maufeat <maufeat@eden-emu.dev>
Co-committed-by: Maufeat <maufeat@eden-emu.dev>
2025-07-30 07:24:25 +02:00
43f450499c
[cmake] ffmpeg: use CPM and source archive (#155)
Cherry-picked from refactor/cpm. Dramatically reduces download time

Signed-off-by: crueter <crueter@eden-emu.dev>

Reviewed-on: eden-emu/eden#155
2025-07-30 07:06:50 +02:00
dee960ccd9
[cmake] sdl: use source archive & add sha512sum (#154)
Dramatically speeds up download time over cloning

Signed-off-by: crueter <crueter@eden-emu.dev>

Reviewed-on: eden-emu/eden#154
2025-07-30 06:43:01 +02:00
18942b7ee0
[vk] Revert Engine Name and Update some Params (#145)
Reviewed-on: eden-emu/eden#145
2025-07-28 09:53:55 +02:00
f75a8c44c7 Update src/video_core/vulkan_common/vulkan_wrapper.cpp 2025-07-28 09:51:52 +02:00
07cab5ba07 [vk] Revert Engine Name and Update some Params 2025-07-28 08:45:23 +00:00
896bfcdaaa
[vk] revert pApplicationName (#144)
Reverts Vulkan pApplicationName to fix rdna3 lines appearing (tested on totk gloom)

Co-authored-by: Maufeat <sahyno1996@gmail.com>
Reviewed-on: eden-emu/eden#144
Co-authored-by: Maufeat <maufeat@eden-emu.dev>
Co-committed-by: Maufeat <maufeat@eden-emu.dev>
2025-07-28 01:10:16 +02:00
9ccb792d29
[externals] fix cpp-httplib on Gentoo
Signed-off-by: crueter <crueter@eden-emu.dev>
2025-07-27 18:31:58 -04:00
bbeb7dd56b
[ssl] add and unstub alpn option + functions (#142)
Should fix Jackbox 7,8,9,10 unable to connect to server errors. (See discord issues)

Co-authored-by: Maufeat <sahyno1996@gmail.com>
Reviewed-on: eden-emu/eden#142
Co-authored-by: Maufeat <maufeat@eden-emu.dev>
Co-committed-by: Maufeat <maufeat@eden-emu.dev>
2025-07-27 22:06:22 +02:00
eeb68768d6
[vk] Exclude size equal alpha different copies from incompatible copy (#138)
Should fix bugs in Splatoon 2 and TotK

Co-authored-by: Maufeat <sahyno1996@gmail.com>
Reviewed-on: eden-emu/eden#138
Co-authored-by: JPikachu <jpikachu@eden-emu.dev>
Co-committed-by: JPikachu <jpikachu@eden-emu.dev>
2025-07-27 19:56:22 +02:00
0b29fb7c8a
[audio_core] Revert EA3835 audio sink changes (#136)
Fixes diablo/totk audio stutters

Signed-off-by: crueter <crueter@eden-emu.dev>

Reviewed-on: eden-emu/eden#136
2025-07-27 19:46:54 +02:00
b2914247c3
[cmake] Build presets and System profiles (#135)
- Build Preset (Linux only): enables arch optimizations, e.g. generic,
  v3, zen2/4, armv8, armv9
- System Profiles: currently only steamdeck, uses an older sdl commit to
  fix virtual gamepad bug

Signed-off-by: crueter <crueter@eden-emu.dev>

Reviewed-on: eden-emu/eden#135
2025-07-27 06:36:33 +02:00
b5bbe6d865
[externals] Update some submodules (#119)
This updates some submodules to keep the project in sync with the latest, stable fixes.

Reviewed-on: eden-emu/eden#119
Co-authored-by: MaranBr <maranbr@outlook.com>
Co-committed-by: MaranBr <maranbr@outlook.com>
2025-07-27 02:41:08 +02:00
77a8f7b6a7
[vk, hle] fix storage buffer cache, unstubbed TryPopFriendInvitation (#129)
This fixes Jamboree + unstubes friend invitation channel which spammed a lot while testing jamboree.

Culprit was: #2

Co-authored-by: Maufeat <sahyno1996@gmail.com>
Co-authored-by: crueter <crueter@eden-emu.dev>
Reviewed-on: eden-emu/eden#129
Co-authored-by: Maufeat <maufeat@eden-emu.dev>
Co-committed-by: Maufeat <maufeat@eden-emu.dev>
2025-07-27 02:37:29 +02:00
3bcd5f95fe
[git] fix dup xbyak (#140)
Signed-off-by: crueter <crueter@eden-emu.dev>
Reviewed-on: eden-emu/eden#140
2025-07-27 02:36:18 +02:00
12d8cf79ea
Revert "[nvnflinger] unstub AdjustRefcount (#120)"
This reverts commit 410e782291.
2025-07-26 20:20:03 -04:00
fac153509a
[externals] Revert xbyak to v7.22 (#137)
Signed-off-by: crueter <crueter@eden-emu.dev>
Reviewed-on: eden-emu/eden#137
2025-07-26 23:06:14 +02:00
b1f3b568fb
[vk] Fix query cache leak on missed sync (#131)
Provided by community member, elementary-particle. Submitted as PR by MaranBR.

Fixed issues:

1. The queue cache forgot to put the host query into unregister queue if they weren't synced. This will block all the banks from freeing causing a major leak.

2. SamplesQueryCounter is not aligned with renderpass begin/end. This creates invalid queries.

3. Conditional rendering is not turned on/off at the correct location making them invalid.

Co-authored-by: Maufeat <sahyno1996@gmail.com>
Reviewed-on: eden-emu/eden#131
Co-authored-by: Shinmegumi <shinmegumi@eden-emu.dev>
Co-committed-by: Shinmegumi <shinmegumi@eden-emu.dev>
2025-07-26 18:12:54 +02:00
c7c2ed7b46
[vk] copy incompatible alpha patch 1.5(2) (#123)
Avoid copy size incompatible textures and reinterpret it instead. Uses existing logic to properly re-interpret to a compatible texture.

Reviewed-on: eden-emu/eden#123
Co-authored-by: lizzie <lizzie@eden-emu.dev>
Co-committed-by: lizzie <lizzie@eden-emu.dev>
2025-07-26 05:58:04 +02:00
ac675c5296
[core]: Custom CPU Ticks rewrite (#118)
For now this is for testing purposes

Co-authored-by: Gamer64 <76565986+Gamer64ytb@users.noreply.github.com>
Reviewed-on: eden-emu/eden#118
Co-authored-by: Gamer64 <gamer64@eden-emu.dev>
Co-committed-by: Gamer64 <gamer64@eden-emu.dev>
2025-07-26 04:11:40 +02:00
8dd0e84343
[android, ci] disable workflows, update ERF desc, default flush_lines to on (#132)
title says it all

Reviewed-on: eden-emu/eden#132
2025-07-26 03:59:33 +02:00
410e782291
[nvnflinger] unstub AdjustRefcount (#120)
Co-authored-by: Maufeat <sahyno1996@gmail.com>
Reviewed-on: eden-emu/eden#120
Co-authored-by: Maufeat <maufeat@eden-emu.dev>
Co-committed-by: Maufeat <maufeat@eden-emu.dev>
2025-07-25 19:58:35 +02:00
5de03f47df
[renderdoc] update (#100)
Reviewed-on: eden-emu/eden#100
Co-authored-by: lizzie <lizzie@eden-emu.dev>
Co-committed-by: lizzie <lizzie@eden-emu.dev>
2025-07-25 09:52:12 +02:00
35e45fbad3
[deps] update dynarmic deps (#110)
Reviewed-on: eden-emu/eden#110
Co-authored-by: lizzie <lizzie@eden-emu.dev>
Co-committed-by: lizzie <lizzie@eden-emu.dev>
2025-07-25 08:37:38 +02:00
bdfcb6c950
[shader_recompiler/ Maxwell] ISBERD initial implementation
Adds the initial support for Internal Stage Buffer Entry Read - ISBERD, a mechanism used to read internal stage buffer entries with accurate per-stage synchronization. This enables more precise tracking of GPU buffer accesses, improving compatibility with games relying on fine-grained intermediate rendering stages (especially UE4 titles and post-processing heavy engines).

Reviewed-on: eden-emu/eden#124
Co-authored-by: lizzie <lizzie@eden-emu.dev>
Co-committed-by: lizzie <lizzie@eden-emu.dev>
2025-07-25 04:38:50 +02:00
7617f743f9
[android] fix erroneous placement of early release fences
Signed-off-by: crueter <crueter@eden-emu.dev>
2025-07-24 21:31:39 -04:00
57f11fbf1e
[desktop] fix links n such
Signed-off-by: crueter <crueter@eden-emu.dev>
2025-07-24 21:31:39 -04:00
111f2c3be5
[dynarmic] remove mcl/assert.h and mcl/stdint.h (depends on #81) (#89)
Co-authored-by: crueter <crueter@crueter.xyz>
Reviewed-on: eden-emu/eden#89
Co-authored-by: lizzie <lizzie@eden-emu.dev>
Co-committed-by: lizzie <lizzie@eden-emu.dev>
2025-07-25 02:22:38 +02:00
1e90df7c3b [dynarmic] better LRU prioritize empty regs 2025-07-24 22:45:45 +02:00
0a67c5a324 [dynarmic] fix tests 2025-07-24 22:45:45 +02:00
ca2d2381dc [dynarmic] new LRU allocation scheme 2025-07-24 22:45:45 +02:00
758d10b998
[desktop] move About Eden below Discord
Signed-off-by: crueter <crueter@eden-emu.dev>
2025-07-24 13:59:53 -04:00
87f171e884
[cmake, core] Unbreak FreeBSD Building Process (#117)
During building eden on FreeBSD, it always assumed that FreeBSD due to being part of the unix family, has gamemode support, too.
Since it doesn't the building process failed.
This commit aims to fix that by separating out Unix and Linux for CMake to ensure there are no conflicts.

Reviewed-on: eden-emu/eden#117
Co-authored-by: SDK-Chan <sdkchan@eden-emu.dev>
Co-committed-by: SDK-Chan <sdkchan@eden-emu.dev>
2025-07-24 18:52:21 +02:00
b9c21a5c50
[docs] document how to bisect and how to use gdb for debugging jit aarch64 (#112)
Adds documents that can be made available in the future on the website about using debugging tools and how to properly bisect Git commits.
Reviewed-on: eden-emu/eden#112
Co-authored-by: Lizzie <lizzie@eden-emu.dev>
Co-committed-by: Lizzie <lizzie@eden-emu.dev>
2025-07-24 18:42:14 +02:00
d78289a742
[android] Early release fences option (#95)
Signed-off-by: crueter <crueter@eden-emu.dev>
Reviewed-on: eden-emu/eden#95
2025-07-24 17:00:00 +02:00
03ab350bc6
[nvdrv] Add AllocGPFIFOEX1 + modify GPFIFOEXs (#115)
I noticed that AllocGPFIFOEX was missing from eden.
It is the same as GPFIFOEX2, but is called separately, even on the real console.
I updated the struct to match closely the one seen on switchbrew, and changed the STUBS, because according to sources they seem to be complete.
My guess is that the STUBS were remained due to the unknowns back then.

Reviewed-on: eden-emu/eden#115
Co-authored-by: SDK-Chan <sdkchan@eden-emu.dev>
Co-committed-by: SDK-Chan <sdkchan@eden-emu.dev>
2025-07-24 16:57:53 +02:00
46ddbea71c
[nvdrv] Unstub Allocate Object Context (#104)
Adds proper checking to allocate object context, and saves each context separately, based on old stubs from Yuzu's, implemented now to resolve services and better handling of future issues.

Co-authored-by: Shinmegumi <shinmegumi@eden-emu.dev>
Reviewed-on: eden-emu/eden#104
Co-authored-by: SDK-Chan <sdkchan@eden-emu.dev>
Co-committed-by: SDK-Chan <sdkchan@eden-emu.dev>
2025-07-24 16:34:18 +02:00
67dfa81dc7
[host1x] Fix typo (#116)
Reviewed-on: eden-emu/eden#116
2025-07-24 15:55:26 +02:00
4fc711587f Fix headers 2025-07-24 09:53:02 -04:00
4ced8d23ac Fix typo 2025-07-24 09:47:56 -04:00
Bix
df8f32b7ad
Set app name to "Eden Optimised" for Optimised build. (#101)
This commit updates the 'genshinSpoof' build flavour to display "Eden Optimised" as the app name by setting 'resValue("string", "app_name_suffixed", "Eden Optimised")'. This helps differentiate the optimised spoofed build from other versions.

Authored-by: Bix <bix@bixed.xyz>
Signed-off-by: Bix <bix@bixed.xyz>

Reviewed-on: eden-emu/eden#101
Co-authored-by: Bix <bix@bixed.xyz>
Co-committed-by: Bix <bix@bixed.xyz>
2025-07-24 14:02:02 +02:00
b2b993b665
[build, cmake] fix android (#106)
Approved by Shinmegumi. Confirmed build issue fixed with this commit.
Reviewed-on: eden-emu/eden#106
2025-07-23 19:08:26 +02:00
bb689637cb [build, cmake] fix android 2025-07-23 19:08:26 +02:00
ca06dad650
[docs] add solaris to build inst on readme (#105)
Reviewed-on: eden-emu/eden#105
Co-authored-by: lizzie <lizzie@eden-emu.dev>
Co-committed-by: lizzie <lizzie@eden-emu.dev>
2025-07-23 18:40:59 +02:00
016ebf3cd8
[cmake, build] fix android and aarch64 (#103)
Reviewed-on: eden-emu/eden#103
Co-authored-by: lizzie <lizzie@eden-emu.dev>
Co-committed-by: lizzie <lizzie@eden-emu.dev>
2025-07-23 17:49:51 +02:00
e1763a726e
[build, cmake] port to solaris (#96)
Co-authored-by: crueter <crueter@eden-emu.dev>
Reviewed-on: eden-emu/eden#96
Co-authored-by: lizzie <lizzie@eden-emu.dev>
Co-committed-by: lizzie <lizzie@eden-emu.dev>
2025-07-23 10:00:29 +02:00
23c77a0d4f
[cmake] patches from debian upstream (#99)
Reviewed-on: eden-emu/eden#99
Co-authored-by: lizzie <lizzie@eden-emu.dev>
Co-committed-by: lizzie <lizzie@eden-emu.dev>
2025-07-23 09:54:26 +02:00
fb459c75d9
[wifi] conditionally enable (#90)
Reviewed-on: eden-emu/eden#90
Co-authored-by: lizzie <lizzie@eden-emu.dev>
Co-committed-by: lizzie <lizzie@eden-emu.dev>
2025-07-23 09:54:00 +02:00
275d64e653
[docs] add into docs/ and make links local (#93)
Co-authored-by: crueter <crueter@eden-emu.dev>
Reviewed-on: eden-emu/eden#93
Co-authored-by: lizzie <lizzie@eden-emu.dev>
Co-committed-by: lizzie <lizzie@eden-emu.dev>
2025-07-23 09:53:45 +02:00
7962c81738
[spirv] new castings for int8/int16/etc (#86)
This commit introduces extended support for low-precision integer casting (int8, int16) in the SPIR-V shader generation pipeline, improving compatibility and performance across both Android and PC platforms.

Co-authored-by: CamilleLaVey <camillelavey99@gmail.com>
Reviewed-on: eden-emu/eden#86
Co-authored-by: lizzie <lizzie@eden-emu.dev>
Co-committed-by: lizzie <lizzie@eden-emu.dev>
2025-07-23 01:02:10 +02:00
a974c5a29c
[vk] Enable line stipple and depth bound reg transfer (#59)
It should improve line stipple accuracy and the depth stencilling as part of the ExtendedDynamicState improvements.

Co-authored-by: crueter <crueter@eden-emu.dev>
Signed-off-by: Aleksandr Popovich <popovich@eden-emu.dev>
Co-authored-by: crueter <crueter@crueter.xyz>
Reviewed-on: eden-emu/eden#59
Co-authored-by: Aleksandr Popovich <popovich@eden-emu.dev>
Co-committed-by: Aleksandr Popovich <popovich@eden-emu.dev>
2025-07-22 21:34:38 +02:00
b66adfe04c
[vulkan] add native cubic filtering (#88)
Co-authored-by: crueter <crueter@eden-emu.dev>
Reviewed-on: eden-emu/eden#88

This implements the use of VK_FILTER_CUBIC_EXT as a replacement for the software-based bicubic window adapting filter, used primarily for texture sampling in upscaled or downscaled surfaces such as UI, transparency effects, and screen-space elements in Unreal Engine 4 titles.

The Vulkan cubic filter is now conditionally enabled if the following are satisfied:

The device supports VK_EXT_filter_cubic

The format used supports VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_CUBIC_BIT_EXT

This change improves visual quality while reducing GPU workload by offloading cubic filtering to the driver instead of running custom sampling code in shaders. On supported hardware (e.g. desktop GPUs or high-end Adreno/AMD devices), it results in smoother transitions, improved transparency sampling, and better fidelity with lower shader complexity.

Fallback to the original software bicubic logic remains in place for devices lacking the extension or format capability.

Tested on several UE4 titles and confirmed to preserve or enhance visual output, especially in alpha-blended and UI-heavy scenes.
Co-authored-by: lizzie <lizzie@eden-emu.dev>
Co-committed-by: lizzie <lizzie@eden-emu.dev>
2025-07-22 20:49:00 +02:00
8d86b615d5
[discord] Update RPC ID
Signed-off-by: crueter <crueter@eden-emu.dev>
2025-07-22 14:42:33 -04:00
7db5eb8f08
[host1x] Fix hardware detection and improve compatibility (#85)
This fixes green screen on unsupported devices trying to use GPU decoding and improve compatibility with default builds of FFmpeg on all platforms.

Co-authored-by: MaranBr <maranbr@outlook.com>
Reviewed-on: eden-emu/eden#85
Co-authored-by: MaranBr <maranbr@eden-emu.dev>
Co-committed-by: MaranBr <maranbr@eden-emu.dev>
2025-07-22 07:31:36 +02:00
be9a415157 Revert [Android] 0 FPS Error fix for certain titles.
revert [android] Fix 0fps errors on DKCR, Subnautica, and Ori 2 (#79)

Co-authored-by: Pavel Barabanov <pavelbarabanov94@gmail.com>
Reviewed-on: eden-emu/eden#79


Option reverted due problems caused with another games and make some advances worst when testing, if necessary it's going to be refined to be converted into a toggle.
2025-07-21 13:44:26 +02:00
be97bf3c1b
[nvnflinger] add GetBufferHistory from sudachi (#82)
Co-authored-by: Maufeat <sahyno1996@gmail.com>
Co-authored-by: CamilleLaVey <camillelavey99@gmail.com>
Reviewed-on: eden-emu/eden#82

This commit adds a working implementation of the `GetBufferHistory` transaction in `BufferQueueProducer`, removing the previous stub.

Adapted by Jarrod Norwell for Sudachi, this implementation references the behavior in Ryujinx; commit rescued by Maufeat and another Eden teammate from Sudachi's reference, fixed and adapted for Eden usage.

It helps improve compatibility with Unreal Engine 4 titles and others that depend on proper surface history tracking for rendering pipelines, especially with regard to lighting, bloom, and alpha transitions.

Functionality has been tested for stability and does not introduce regressions, though further validation is recommended.
Co-authored-by: Maufeat <maufeat@eden-emu.dev>
Co-committed-by: Maufeat <maufeat@eden-emu.dev>
2025-07-21 07:16:26 +02:00
12a690e15f
[nvdrv] ZBC table implement stubs (#83)
Reviewed-on: eden-emu/eden#83

This commit introduces an implementation for `ZBCSetTable` in `nvhost_ctrl_gpu`, which is invoked by games and system services to configure default clear values for depth, stencil, and color attachments on the GPU, allowing better instructions on how the ZCull Block Compression expects to work within the emulated GPU.

This is an important step for compatibility with titles or system modules that expect ZBC configuration support.
Co-authored-by: lizzie <lizzie@eden-emu.dev>
Co-committed-by: lizzie <lizzie@eden-emu.dev>
2025-07-21 04:35:43 +02:00
e8e0d7fa20
[vk] tmp: workaround for RAII crash on exit
Prevent double-free

Signed-off-by: crueter <crueter@eden-emu.dev>
2025-07-20 22:11:02 -04:00
ce56a4b83c updating translations 2025-07-20 19:17:04 +03:00
9dfe3cece0
[desktop, core] yuzu -> Eden, eden -> Eden
Signed-off-by: crueter <crueter@eden-emu.dev>
2025-07-19 00:12:21 -04:00
d125994270
[android] Fix 0fps errors on DKCR, Subnautica, and Ori 2 (#79)
Co-authored-by: Pavel Barabanov <pavelbarabanov94@gmail.com>
Reviewed-on: eden-emu/eden#79
2025-07-19 04:43:11 +02:00
d42d379733
[desktop] Capitalize app name
Signed-off-by: crueter <crueter@eden-emu.dev>
2025-07-18 17:49:04 -04:00
7cb8a1acd3
[host1x] Fix GPU decoding for VP8 video codec (#72)
This fixes GPU decoding for the VP8 video codec on supported devices.

Co-authored-by: MaranBr <maranbr@outlook.com>
Reviewed-on: eden-emu/eden#72
Co-authored-by: MaranBr <maranbr@eden-emu.dev>
Co-committed-by: MaranBr <maranbr@eden-emu.dev>
2025-07-18 22:55:05 +02:00
1a35aef644
[android] Better error handling for username collision/validity (#76)
also removed the generate button from sw keyboard

Signed-off-by: crueter <crueter@eden-emu.dev>

Reviewed-on: eden-emu/eden#76
2025-07-18 20:02:13 +02:00
2aab37b516
[cmake] QuaZip: The Finale (#74)
Signed-off-by: crueter <crueter@eden-emu.dev>
Reviewed-on: eden-emu/eden#74
2025-07-17 21:00:00 +02:00
108daeeb39
[cmake] Fix QuaZip once and for all (#71)
(and core5compat)

Signed-off-by: crueter <crueter@eden-emu.dev>

Reviewed-on: eden-emu/eden#71
2025-07-16 23:17:34 +02:00
a538126eb7
[cmake, desktop] Fix <6.9 build error and quazip fetching (#67)
Signed-off-by: crueter <crueter@eden-emu.dev>
Reviewed-on: eden-emu/eden#67
2025-07-15 22:24:40 +02:00
d7574b2878
[android] Update app icon background
thx antabaka

Signed-off-by: crueter <crueter@eden-emu.dev>
2025-07-14 20:51:20 -04:00
e9ca3f4c06
[host1x] Fix FFmpeg crash on Linux (#37)
This fixes the FFmpeg crash on Linux / Steam Deck.

Credit to Maufeat for AVERROR_EOF check.

Co-authored-by: MaranBr <maranbr@outlook.com>
Co-authored-by: crueter <crueter@eden-emu.dev>
Reviewed-on: eden-emu/eden#37
Co-authored-by: MaranBr <maranbr@eden-emu.dev>
Co-committed-by: MaranBr <maranbr@eden-emu.dev>
2025-07-14 22:30:54 +02:00
a8564a09b7
[host1x] FreeBSD: Fix random crashes due to CUDA/VAAPI check sideeffects (#64)
FreeBSD doesn't support NVDEC, CUDA, and partially supports VAAPI (mostly for firefox).
Implementing VAAPI for other use cases would be a little bit complicated so, I chose to switch it off for FreeBSD.
This PR ensures that FFmpeg will always default to software decoding on FreeBSD, but should remain the same functionalities for other OS's.
The results are slight CPU increases while decoding in software mode, but still neglectable and they don't really harm performance.

Co-authored-by: MaranBr <maranbr@eden-emu.dev>
Reviewed-on: eden-emu/eden#64
Co-authored-by: SDK-Chan <sdkchan@eden-emu.dev>
Co-committed-by: SDK-Chan <sdkchan@eden-emu.dev>
2025-07-14 22:30:07 +02:00
2e092010e6
[cmake] Disable bzip2 requirement for quazip (#63)
caused windows builds to fail

Signed-off-by: crueter <crueter@crueter.xyz>

Reviewed-on: eden-emu/eden#63
Co-authored-by: crueter <crueter@crueter.xyz>
Co-committed-by: crueter <crueter@crueter.xyz>
2025-07-14 06:10:25 +02:00
be59b4f15f
[cmake] Patch QuaZip for windows fix (#60)
Signed-off-by: crueter <crueter@eden-emu.dev>
Reviewed-on: eden-emu/eden#60
2025-07-14 04:48:39 +02:00
2be7df287a
[android] Fix crash caused by unreferenced driver (#58)
Previously, if the user selected a per-game driver and that driver was
deleted from the global menu, it would cause a crash, it was because of
a mismatch between FileNotFoundException and NoSuchFileException. To
avoid the inconsistency I just made the check for if a file exists or
not to be separate.

Signed-off-by: Aleksandr Popovich <popovich@eden-emu.dev>

Reviewed-on: eden-emu/eden#58
Co-authored-by: Aleksandr Popovich <popovich@eden-emu.dev>
Co-committed-by: Aleksandr Popovich <popovich@eden-emu.dev>
2025-07-14 02:18:33 +02:00
492903cc7a
[cmake] force quazip to use qt 6
Signed-off-by: Aleksandr Popovich <popovich@eden-emu.dev>
2025-07-13 20:00:38 -04:00
f99488fe3e
[desktop] feat: install firmware from ZIP (#52)
Closes #12

Adds a menu option to install firmware from a packed ZIP.

This PR additionally lays the groundwork to add data import/export via ZIP. In the future, a qt_common subproject should be added to handle common Qt tasks such as this.

Furthermore, to decrease dependency complexity, this also introduces CPM, a wrapper around FetchContent. In theory, this should also lay the groundwork for #8 as well.

Signed-off-by: crueter <crueter@eden-emu.dev>
Reviewed-on: eden-emu/eden#52
2025-07-14 01:29:57 +02:00
7b23cd0df4
[dynarmic] fix userconfig casting warn (#55)
Co-authored-by: crueter <crueter@eden-emu.dev>
Reviewed-on: eden-emu/eden#55
Co-authored-by: lizzie <lizzie@eden-emu.dev>
Co-committed-by: lizzie <lizzie@eden-emu.dev>
2025-07-14 00:54:00 +02:00
Ghost
fe4f5a3860
[dynarmic] lea over mov and other stuff (#24)
Co-authored-by: Esther1024 <danishreyjavik@outlook.com>
Co-authored-by: lizzie <lizzie@eden-emu.dev>
Reviewed-on: eden-emu/eden#24
Co-authored-by: Ghost <>
Co-committed-by: Ghost <>
2025-07-13 23:03:26 +02:00
a0a208db57
[cmake] Fix misplaced comment (#54)
A member of the community notified me that I misplaced a comment so, I corrected it.

Reviewed-on: eden-emu/eden#54
Co-authored-by: SDK Chan <sdkchan@eden-emu.dev>
Co-committed-by: SDK Chan <sdkchan@eden-emu.dev>
2025-07-13 20:58:04 +02:00
Ghost
c47f6615d3
[vk, opengl] Prevent GPU draw call if CBUF binding fails (cbuf0 error handling) (#2)
Add defensive checks to cancel draw calls early if any graphics storage buffer (CBUF) fails to bind properly.

- Modified BindGraphicsStorageBuffer to return false on invalid buffer ID.,
- ConfigureImpl (both OpenGL and Vulkan) now propagates binding failure.,
- Pipeline::Configure returns false if CBUF binding fails.,
- PrepareDraw cancels rendering if pipeline configuration fails.,

This avoids undefined GPU behavior, draw corruption, or crashes caused by uninitialized or invalid constant buffer (CBUF0) access, particularly in games with faulty or missing shader bindings.
Eden Collaborator: <edencollaborator@eden-emu.org>
Authored-by: CamilleLaVey <camillelavey@eden-emu.org>
Signed-off-by: Bix <bix@bixed.xyz>

Co-authored-by: Bix <114880614+Bixbr@users.noreply.github.com>
Co-authored-by: crueter <crueter@eden-emu.dev>
Reviewed-on: eden-emu/eden#2
Co-authored-by: Ghost <>
Co-committed-by: Ghost <>
2025-07-13 19:27:39 +02:00
1cd51d6545
[android] Fix key install and revert to old icon_bg
`312b3d4743`

Signed-off-by: crueter <crueter@eden-emu.dev>
2025-07-13 01:17:32 -04:00
5091759a47
[vk, opengl] defer checks to topmost call (avoid unnecessary call) (#40)
Co-authored-by: crueter <crueter@eden-emu.dev>
Reviewed-on: eden-emu/eden#40
Co-authored-by: lizzie <lizzie@eden-emu.dev>
Co-committed-by: lizzie <lizzie@eden-emu.dev>
2025-07-13 03:40:48 +02:00
03351a4f8b
[frontend] refactor: extract common firmware & key functions (#38)
Extracts some firmware version/verification functions into
`frontend_common` to reduce duplicate code, especially for the new QML
frontend.

Additionally adds a check for games that are known to require firmware
(e.g. MK8DX) and warns the user if they don't have firmware installed
and attempt to run the game.

Firmware installation is to be in a separate PR.

Signed-off-by: crueter <crueter@eden-emu.dev>
Co-authored-by: Aleksandr Popovich <popovich@eden-emu.dev>
Reviewed-on: eden-emu/eden#38
2025-07-13 03:39:19 +02:00
55a7797378
[desktop] add options to open root, NAND, SDMC, load, and log dirs (#53)
Signed-off-by: crueter <crueter@eden-emu.dev>
Reviewed-on: eden-emu/eden#53
2025-07-13 03:39:01 +02:00
d5c58342e0
[yuzu_cmd] gdbstub option (#43)
Co-authored-by: crueter <crueter@eden-emu.dev>
Reviewed-on: eden-emu/eden#43
Co-authored-by: lizzie <lizzie@eden-emu.dev>
Co-committed-by: lizzie <lizzie@eden-emu.dev>
2025-07-13 03:25:43 +02:00
ae02310bdf
optional multimedia/webengine
Signed-off-by: crueter <crueter@eden-emu.dev>
2025-07-12 18:05:37 -04:00
cd394fc40f revert [android] Snapdragon 865 patches (#23)
revert [android] Snapdragon 865 patches (#23)

Co-authored-by: Aleksandr Popovich <alekpopo@pm.me>
Reviewed-on: https://git.bixed.xyz/Bix/eden/pulls/23

Reverted due to heavy performance hits on Android with higher specifications, will be adjusted to be included in a specific build for older A6XX devices, as 855, 860, 865, 870, meanwhile it does fix critical issues with certain games crashing due to memory and VRAM usage, hits performance on SoC that can do it without this special flags.
2025-07-12 20:10:40 +02:00
3df06da02c revert Align and bias memory stronger
revert [ir] Align and bias memory stronger

Signed-off-by: Aleksandr Popovich <alekpopo@pm.me>
Reviewed-on: eden-emu/eden#229
Co-authored-by: Aleksandr Popovich <alekpopo@pm.me>
Co-committed-by: Aleksandr Popovich <alekpopo@pm.me>

Reverted as showed up issues with buffers on games that weren't expected, it's going to be refined and implemented again with better params.
2025-07-11 19:57:21 +02:00
7f48f4efb6
Add native FreeBSD building functionality (#35)
This commit enables native building on FreeBSD through Cmake + ninja.

Reviewed-on: eden-emu/eden#35
Reviewed-by: crueter <crueter@eden-emu.dev>
Co-authored-by: SDK-Chan <sdkchan@eden-emu.dev>
Co-committed-by: SDK-Chan <sdkchan@eden-emu.dev>
2025-07-11 10:05:17 +02:00
e5074c90ad
[android] Fix charging indicator and dynamic state setting (#36)
Co-authored-by: Pavel Barabanov <pavelbarabanov94@gmail.com>
Reviewed-on: eden-emu/eden#36
2025-07-11 10:05:01 +02:00
2f421923a6 Update for the Ukrainian translation. Thanks, Rondo. 2025-07-10 18:55:18 +03:00
5402773631 Merge branch 'updated-the-translation' 2025-07-10 17:35:48 +03:00
64f40c8b88
[android] fix strings and defaults
Signed-off-by: crueter <crueter@eden-emu.dev>
2025-07-09 17:02:53 -04:00
591a446bd1
Update links
Signed-off-by: crueter <crueter@eden-emu.dev>
2025-07-09 16:51:15 -04:00
312b3d4743 [android] update icon background (#31)
credit: AntaBaka

Signed-off-by: crueter <crueter@eden-emu.dev>

Reviewed-on: https://git.bixed.xyz/Bix/eden/pulls/31
2025-07-09 17:19:26 +00:00
5bf1199feb translate 2025-07-09 19:11:46 +03:00
97587d5dc9 remove extra string and fix serbian
Signed-off-by: Aleksandr Popovich <popovich@eden-emu.dev>
2025-07-09 14:09:48 +00:00
ba9e0cd2b9 qt 2025-07-09 14:09:48 +00:00
02baf03ad4 updated the translation 2025-07-09 14:09:48 +00:00
Gamer64
3e44389bfc [Rasterizer]: Implement "Skip CPU Inner Invalidation" hack 2025-07-09 04:23:22 +02:00
693404bf37 fix LLVM not using current top level src dir (#30)
Reviewed-on: https://git.bixed.xyz/Bix/eden/pulls/30
Co-authored-by: Esther1024 <lizzie@bixed.xyz>
Co-committed-by: Esther1024 <lizzie@bixed.xyz>
2025-07-09 01:31:18 +00:00
347d54bc26 [android] add power consumption and battery status overlay (#22)
- adds the option to show power draw in amperes
- shows if the battery is charging

Signed-off-by: Aleksandr Popovich <alekpopo@pm.me>

Co-authored-by: Aleksandr Popovich <alekpopo@pm.me>
Reviewed-on: https://git.bixed.xyz/Bix/eden/pulls/22
2025-07-08 21:12:02 +00:00
9d60900ecf .gitignore cache things (#25)
annoying

Reviewed-on: https://git.bixed.xyz/Bix/eden/pulls/25
Co-authored-by: Esther1024 <lizzie@bixed.xyz>
Co-committed-by: Esther1024 <lizzie@bixed.xyz>
2025-07-08 21:00:45 +00:00
789dacedca
fix
Signed-off-by: crueter <swurl@swurl.xyz>
2025-07-06 16:07:23 -04:00
35f6afb031
Test push
Signed-off-by: crueter <swurl@swurl.xyz>
2025-07-06 15:49:04 -04:00
38561cd7e3
update discord link
Signed-off-by: crueter <swurl@swurl.xyz>
2025-07-06 15:46:49 -04:00
05f536694a [android] Fix 1.5x and warn at resolutions >= 2x (#21)
Co-authored-by: Aleksandr Popovich <alekpopo@pm.me>
Reviewed-on: https://git.bixed.xyz/Bix/eden/pulls/21
2025-07-06 18:20:30 +00:00
444109c251 [android] Snapdragon 865 patches (#23)
Co-authored-by: Aleksandr Popovich <alekpopo@pm.me>
Reviewed-on: https://git.bixed.xyz/Bix/eden/pulls/23
2025-07-06 18:20:21 +00:00
Bix
0ce2ec3b36 [cmake] Update URL to new repo 2025-07-05 23:59:23 +01:00
Bix
d8bfc691d1
[Android] Add proper Bluetooth permissions check to avoid crashes
Authored-by: edendev <edendev@eden-emu.org>

Reviewed-on: eden-emu/eden#261
Co-authored-by: Bix <bix@bixed.xyz>
Co-committed-by: Bix <bix@bixed.xyz>
2025-07-04 21:47:42 +00:00
39a46d755f
[android] Update carousel view (#254)
- Cherry picked the patches from xbzk PR.

Signed-off-by: Aleksandr Popovich <alekpopo@pm.me>

Reviewed-on: eden-emu/eden#254
Co-authored-by: Aleksandr Popovich <alekpopo@pm.me>
Co-committed-by: Aleksandr Popovich <alekpopo@pm.me>
2025-07-04 21:37:15 +00:00
b60d0aabf0
[android] improve driver fetcher (#251)
- Fix the app compat crash
- Fix kimchi sorting
- Improve performance in ui thread

Signed-off-by: Aleksandr Popovich <alekpopo@pm.me>

Reviewed-on: eden-emu/eden#251
Co-authored-by: Aleksandr Popovich <alekpopo@pm.me>
Co-committed-by: Aleksandr Popovich <alekpopo@pm.me>
2025-07-04 20:29:23 +00:00
aeb2aec13b
[android] fix firmware overlay multiple updates (#252)
Signed-off-by: Aleksandr Popovich <alekpopo@pm.me>
Reviewed-on: eden-emu/eden#252
Co-authored-by: Aleksandr Popovich <alekpopo@pm.me>
Co-committed-by: Aleksandr Popovich <alekpopo@pm.me>
2025-07-04 20:24:03 +00:00
cb3521272f
[ir] Align and bias memory stronger
Signed-off-by: Aleksandr Popovich <alekpopo@pm.me>
Reviewed-on: eden-emu/eden#229
Co-authored-by: Aleksandr Popovich <alekpopo@pm.me>
Co-committed-by: Aleksandr Popovich <alekpopo@pm.me>
2025-07-04 03:14:05 +00:00
Bix
64fe103afd
[Android] Updated app name from "eden" to "Eden". (#256)
Signed-off-by: Bix <bix@bixed.xyz>
Reviewed-on: eden-emu/eden#256
2025-07-03 20:13:31 +00:00
PavelBARABANOV
5d4c6e085d
[vk, frontend] RAII Toggle (#247)
Co-authored-by: Pavel Barabanov <pavelbarabanov94@gmail.com>
Reviewed-on: eden-emu/eden#247
2025-07-03 16:35:02 +00:00
Gamer64
a002730d68
[VK] Rework SPIRV Shader Optimization (#238)
The actual SPIRV Shader Optimization option doesn't seem to do anything as long as it isn't vinculed, so let's rework it to make it work

Co-authored-by: Gamer64 <76565986+Gamer64ytb@users.noreply.github.com>
Co-authored-by: echosys <echosys@noreply.localhost>
Reviewed-on: eden-emu/eden#238
2025-07-03 01:13:33 +00:00
MaranBr
c4a26be180
[host1x] Simplify the FFmpeg code a bit more (#243)
This simplifies the FFmpeg code a bit more and removes unused variables left in the code.

Co-authored-by: MaranBr <maranbr@outlook.com>
Reviewed-on: eden-emu/eden#243
2025-07-02 00:42:55 +00:00
94c66f98bf
[frontend, web] refactor: web service frontend rewrite (#221)
- Automatic verification based on regex
- Token generation button
- Removed unneeded links
- public lobby creation [android]

Signed-off-by: crueter <swurl@swurl.xyz>
Co-authored-by: Aleksandr Popovich <alekpopo@pm.me>
Co-authored-by: Aleksandr Popovich <alekpopo@proton.me>
Reviewed-on: eden-emu/eden#221
Co-authored-by: crueter <swurl@swurl.xyz>
Co-committed-by: crueter <swurl@swurl.xyz>
2025-07-01 01:44:12 +00:00
MaranBr
2fe728766e Fix FFmpeg GPU decoding (#242)
This fixes the FFmpeg GPU decoding on some platforms.

Co-authored-by: MaranBr <maranbr@outlook.com>
Reviewed-on: eden-emu/eden#242
2025-06-30 14:37:00 +00:00
CamilleLaVey
fa600b88b1 revert 91a662431c (#240)
revert [Texture_cache] Better memory handling for devices with lower memory allocations (#233)

Means games like Minecraft Dungeons, Sea of Stars, Luigi Mansion 2, Astroneer, Alan Wake, etc are now playable.
It also cleans up the recent abi.cpp and bindless texture commits a bit.
Everything is in #ifdef ANDROID - The biggest change is CACHING_PAGEBITS = 12.
Without that the way the buffercache grows and joins buffers can cause Android to run out of memory (as you end up with just one big buffer that needs to be copied every time it grows)
Also patches up ffmpeg issues.

Reviewed-on: eden-emu/eden#233
Co-authored-by: JPikachu <jpikachu.eden@gmail.com>
Co-committed-by: JPikachu <jpikachu.eden@gmail.com>

Had showed some regressions on devices with higher specifications, will be refined to return as a toggle in a later commit.

Reviewed-on: eden-emu/eden#240
2025-06-30 12:57:21 +00:00
09194cc5c3
remove pdb files
Signed-off-by: crueter <swurl@swurl.xyz>
2025-06-29 20:28:01 -04:00
b8150060c7
apply extra DLLs
Signed-off-by: crueter <swurl@swurl.xyz>
2025-06-29 20:25:21 -04:00
996400953e
fix windeploy
Signed-off-by: crueter <swurl@swurl.xyz>
2025-06-29 18:48:45 -04:00
2bb54b422f
No more PRs
I hate every single one of you

Signed-off-by: crueter <swurl@swurl.xyz>
2025-06-29 15:58:34 -04:00
JPikachu
5ddc889d8d [vk] Enable trivial stencil for games like EOW (#234)
Fixes rift clipping in LoZ: EOW + possible fixes for other games.
NOTE: Flickering may occur, this is for testing purposes.

Reviewed-on: eden-emu/eden#234
Co-authored-by: JPikachu <jpikachu.eden@gmail.com>
Co-committed-by: JPikachu <jpikachu.eden@gmail.com>
2025-06-29 17:16:47 +00:00
JPikachu
11b152ab58 [spirv] Avoid NaN when a conversion to f16 is emitted (#215)
Fixes black squares in Fire Emblem: Three Houses.
And fixes vertex explosions in The Legend of Zelda: Breath of the Wild shrine areas.
These were caused by NaN values from overflowed conversions to float16.

Reviewed-on: eden-emu/eden#215
Co-authored-by: JPikachu <jpikachu.eden@gmail.com>
Co-committed-by: JPikachu <jpikachu.eden@gmail.com>
2025-06-29 17:15:46 +00:00
JPikachu
91a662431c [Texture_cache] Better memory handling for devices with lower memory allocations (#233)
Means games like Minecraft Dungeons, Sea of Stars, Luigi Mansion 2, Astroneer, Alan Wake, etc are now playable.
It also cleans up the recent abi.cpp and bindless texture commits a bit.
Everything is in #ifdef ANDROID - The biggest change is CACHING_PAGEBITS = 12.
Without that the way the buffercache grows and joins buffers can cause Android to run out of memory (as you end up with just one big buffer that needs to be copied every time it grows)
Also patches up ffmpeg issues.

Reviewed-on: eden-emu/eden#233
Co-authored-by: JPikachu <jpikachu.eden@gmail.com>
Co-committed-by: JPikachu <jpikachu.eden@gmail.com>
2025-06-29 17:14:23 +00:00
xbzk
b5b1d20e1e fix: refresh icon color & infinite when in portrait (#231)
quick fix for refresh features in portrait, casting them as SwipeRefreshLayout, since MidScreenSwipeRefreshLayout only exists in landscape.

Co-authored-by: Allison Cunha <allisonbzk@gmail.com>
Reviewed-on: eden-emu/eden#231
Co-authored-by: xbzk <xbzk@noreply.localhost>
Co-committed-by: xbzk <xbzk@noreply.localhost>
2025-06-29 17:10:29 +00:00
Gamer64
cac4345db9 [vk] Sample Shading Option .
This seems to improve some games graphics and it may be helpful for MSAA, at the cost of reducing a bit the performance.

Co-authored-by: Gamer64 <76565986+Gamer64ytb@users.noreply.github.com>
Co-authored-by: crueter <swurl@swurl.xyz>
Reviewed-on: eden-emu/eden#235
Co-authored-by: Gamer64 <gamer64@noreply.localhost>
Co-committed-by: Gamer64 <gamer64@noreply.localhost>
2025-06-29 17:07:14 +00:00
43a22546cf Update .ci/windows/build.sh
Signed-off-by: crueter <swurl@swurl.xyz>
2025-06-29 06:04:44 +00:00
1bdbe2071f [ci] fix windows :/ (again) (#237)
Reviewed-on: eden-emu/eden#237
Co-authored-by: crueter <swurl@swurl.xyz>
Co-committed-by: crueter <swurl@swurl.xyz>
2025-06-29 05:07:22 +00:00
e0501bfd74 [ci] fix windows :/ (#236)
Signed-off-by: crueter <swurl@swurl.xyz>
Reviewed-on: eden-emu/eden#236
Co-authored-by: crueter <swurl@swurl.xyz>
Co-committed-by: crueter <swurl@swurl.xyz>
2025-06-29 04:18:03 +00:00
fa423c68e8
[ci/windows] fix CMake prefix path
Signed-off-by: crueter <swurl@swurl.xyz>
2025-06-28 23:47:02 -04:00
cc9c3dd5a3
[ci] fix windows environment variables
Signed-off-by: crueter <swurl@swurl.xyz>
2025-06-28 23:13:20 -04:00
a1087ddec8
Updated CI for GH Actions Builds
Signed-off-by: crueter <swurl@swurl.xyz>
2025-06-28 22:22:45 -04:00
726e1e756d [nifm, bsd] add airplane mode functionality to a new nifm call and fix local files (#225)
There is a cmd `IsAnyInternetRequestAccepted` which is called by games like DOOM to check if internet access is available. Adds the newly added airplane mode there.
Also, moved down the airplane mode check on bsd to also check if it's a local file request, if it is, let it connect. (SMO guide web applet for example)
+ adds a check in IRequest if airplane mode is active, which then results in an not succeeding requests.

Reviewed-on: eden-emu/eden#225
Co-authored-by: Maufeat <sahyno1996@gmail.com>
Co-committed-by: Maufeat <sahyno1996@gmail.com>
2025-06-28 16:04:13 +00:00
c88d0b3967 [video_core] ffmpeg 7.1.1 fix (#224)
Simplified and add AVERROR_EOF check, seems to do the trick.
Fixed Blasphemous 2 and Burnout Paradise crash and more

Co-authored-by: MaranBr <maranbr@outlook.com>
Co-authored-by: MaranBr <maranbr@fake.com>
Reviewed-on: eden-emu/eden#224
Co-authored-by: Maufeat <sahyno1996@gmail.com>
Co-committed-by: Maufeat <sahyno1996@gmail.com>
2025-06-28 13:34:32 +00:00
dceb3c2206
fix license headers
Signed-off-by: crueter <swurl@swurl.xyz>
2025-06-27 19:26:11 -04:00
f121df0aa3 [frontend] Firmware setup & requirement (#222)
Currently Android only, will need to be added to desktop.

Android incorrectly records firmware as 19.0.1 if on a higher version...

TODO:
- [x] desktop
- [x] fix android

Signed-off-by: crueter <swurl@swurl.xyz>

Reviewed-on: eden-emu/eden#222
Co-authored-by: crueter <swurl@swurl.xyz>
Co-committed-by: crueter <swurl@swurl.xyz>
2025-06-27 23:23:25 +00:00
Gamer64
20bf141faa [gitignore]: add AppDir & uruntime to the list 2025-06-27 19:43:09 +02:00
Gamer64
059d89441e [core, frontend] Add Custom CPU Ticks option (#217)
Co-authored-by: Gamer64 <76565986+Gamer64ytb@users.noreply.github.com>
Co-authored-by: crueter <swurl@swurl.xyz>
Reviewed-on: eden-emu/eden#217
2025-06-27 13:45:54 +00:00
e7ddc647f3 [desktop] Fix migration options (#220)
Signed-off-by: crueter <swurl@swurl.xyz>
Reviewed-on: eden-emu/eden#220
Co-authored-by: crueter <swurl@swurl.xyz>
Co-committed-by: crueter <swurl@swurl.xyz>
2025-06-27 06:03:19 +00:00
3f03ff46b4
Fix macOS & BSD
Signed-off-by: crueter <swurl@swurl.xyz>
2025-06-26 17:39:35 -04:00
xbzk
03794d4773 feature/landscape-carousel (#196)
second try. all known visual resizing bugs fixed.

Co-authored-by: Allison Cunha <allisonbzk@gmail.com>
Co-authored-by: crueter <swurl@swurl.xyz>
Co-authored-by: Aleksandr Popovich <alekpopo@pm.me>
Reviewed-on: eden-emu/eden#196
Co-authored-by: xbzk <xbzk@noreply.localhost>
Co-committed-by: xbzk <xbzk@noreply.localhost>
2025-06-26 20:52:54 +00:00
37f890ec16
linux distro maintainers should be flogged
Signed-off-by: crueter <swurl@swurl.xyz>
2025-06-26 16:51:59 -04:00
2e6a289a0b Add Airplane Mode + Host Network Interface Details (#204)
Adds Airplane Mode function to settings, host states, etc.
Windows implemented only for now.

Closes #203

Co-authored-by: crueter <swurl@swurl.xyz>
Co-authored-by: Aleksandr Popovich <alekpopo@pm.me>
Reviewed-on: eden-emu/eden#204
Co-authored-by: Maufeat <sahyno1996@gmail.com>
Co-committed-by: Maufeat <sahyno1996@gmail.com>
2025-06-26 18:55:34 +00:00
JPikachu
b2e602325c profile_manager: Implement firmware avatar selector (#205)
Adds an option to set a user's profile image from the avatars in the firmware. Background color can be changed with a color picker. Also modifies profile image saving to account for this, and as a result images are now saved as JPEG with 100% quality. Any PNG, JPEG, or BMP can now also be used in the image file picker instead of just JPEG.

Using ryujinx's implementation and other parts of the yuzu codebase for reference.

Credit: Torzu, lui

Reviewed-on: http://vub63vv26q6v27xzv2dtcd25xumubshogm67yrpaz2rculqxs7jlfqad.onion/torzu-emu/torzu/pulls/56
Co-authored-by: lui <lui@vub63vv26q6v27xzv2dtcd25xumubshogm67yrpaz2rculqxs7jlfqad.onion>
Co-committed-by: lui <lui@vub63vv26q6v27xzv2dtcd25xumubshogm67yrpaz2rculqxs7jlfqad.onion>

Co-authored-by: lui <lui@vub63vv26q6v27xzv2dtcd25xumubshogm67yrpaz2rculqxs7jlfqad.onion>
Co-authored-by: Maufeat <sahyno1996@gmail.com>
Reviewed-on: eden-emu/eden#205
Co-authored-by: JPikachu <jpikachu@noreply.localhost>
Co-committed-by: JPikachu <jpikachu@noreply.localhost>
2025-06-26 18:39:28 +00:00
77b226a162 [qt-ts, ci] Update translations (#213)
Still need to add the CI job but translations are updated

Signed-off-by: crueter <swurl@swurl.xyz>

Reviewed-on: eden-emu/eden#213
Co-authored-by: crueter <swurl@swurl.xyz>
Co-committed-by: crueter <swurl@swurl.xyz>
2025-06-26 18:38:36 +00:00
846ec85f24 [hid] stub for ActivateDebugMouse 2025-06-24 07:13:07 +03:00
59e69d91f4 MacOS fix compilation errors and correct app icon and title (#202)
- Adds ICONV_LIBRARY to CMakeList to fix ffmpeg compilation error
- Replaces the app icon from yuzu.icns to eden.icns
- Changes app title and name from yuzu to eden
- Updates MoltenVK to 1.3.0

Note: The wiki also needs an update, after merge to master I'll edit the wiki. The wiki says to installs Qt5 but eden uses Qt6.
Reviewed-on: eden-emu/eden#202
Co-authored-by: Maufeat <sahyno1996@gmail.com>
Co-committed-by: Maufeat <sahyno1996@gmail.com>
2025-06-21 21:01:05 +00:00
Bix
02603abbdc Enables building of APK with Optimised package name. en-gb. (#206)
Build with: ./gradlew assembleGenshinSpoofRelease
Using com.miHoYo.Yuanshen to enable device dependent features such as AI frame generation.

Reviewed-on: eden-emu/eden#206
Co-authored-by: Bix <xq9zp7f2@proton.me>
Co-committed-by: Bix <xq9zp7f2@proton.me>
2025-06-21 19:35:18 +00:00
MrPurple666
2f01c69710 LRU Cache Refactor with Thread-Safety (#199)
The cache is now thread-safe using std::shared_mutex, allowing concurrent reads without blocking and some other minor things to better maintenance

Reviewed-on: eden-emu/eden#199
Co-authored-by: MrPurple666 <mrpurple666@noreply.localhost>
Co-committed-by: MrPurple666 <mrpurple666@noreply.localhost>
2025-06-21 19:32:32 +00:00
JPikachu
2946cdbd2d renderer: add area sampling scaling method (#201)
Adds Area Sampling to the list of scaling options. Works well to achieve a high-quality, smooth super-sampling effect. Dolphin has had this for a while and so has Ryujinx, so lui decided to port it.

Adapted from these two PRs:
https://github.com/Ryujinx/Ryujinx/pull/7304
https://github.com/dolphin-emu/dolphin/pull/11999

Credit: Torzu, lui

Reviewed-on: http://vub63vv26q6v27xzv2dtcd25xumubshogm67yrpaz2rculqxs7jlfqad.onion/torzu-emu/torzu/pulls/57
Co-authored-by: lui <lui@vub63vv26q6v27xzv2dtcd25xumubshogm67yrpaz2rculqxs7jlfqad.onion>
Co-committed-by: lui <lui@vub63vv26q6v27xzv2dtcd25xumubshogm67yrpaz2rculqxs7jlfqad.onion>

Co-authored-by: lui <lui@vub63vv26q6v27xzv2dtcd25xumubshogm67yrpaz2rculqxs7jlfqad.onion>
Co-authored-by: crueter <swurl@swurl.xyz>
Reviewed-on: eden-emu/eden#201
Co-authored-by: JPikachu <jpikachu.eden@gmail.com>
Co-committed-by: JPikachu <jpikachu.eden@gmail.com>
2025-06-21 13:35:04 +00:00
8c33b0bb5d Add Device Power State (Windows, Linux, Mac and Android) (#197)
Uses native power state methods to display battery percentage and charging state correctly. Mainly for qlaunch.
Tested on Windows, Linux. Mac and Android

Reviewed-on: eden-emu/eden#197
Co-authored-by: Maufeat <sahyno1996@gmail.com>
Co-committed-by: Maufeat <sahyno1996@gmail.com>
2025-06-18 08:34:54 +00:00
crueter
6bf5ae700a Fix macOS build (#198)
Signed-off-by: Aleksandr Popovich <alekpopo@pm.me>
Co-authored-by: Aleksandr Popovich <alekpopo@pm.me>
Reviewed-on: eden-emu/eden#198
2025-06-18 08:00:09 +00:00
704d4e4428 [android, desktop] Firebomb pre-alpha banner (#195)
Signed-off-by: crueter <swurl@swurl.xyz>
Reviewed-on: eden-emu/eden#195
Co-authored-by: crueter <swurl@swurl.xyz>
Co-committed-by: crueter <swurl@swurl.xyz>
2025-06-17 01:59:05 +00:00
6aeba9de66 [vk] Add some dynamic handling in the pipeline (#142)
Co-authored-by: crueter <swurl@swurl.xyz>
Reviewed-on: eden-emu/eden#142
Co-authored-by: Aleksandr Popovich <alekpopo@pm.me>
Co-committed-by: Aleksandr Popovich <alekpopo@pm.me>
2025-06-16 22:36:30 +00:00
eae819f0d6
Migrate BuildConfig
Signed-off-by: crueter <swurl@swurl.xyz>
2025-06-16 14:39:12 -04:00
a4123200c0 fix packaging (#192)
Signed-off-by: crueter <swurl@swurl.xyz>
Reviewed-on: eden-emu/eden#192
Co-authored-by: crueter <swurl@swurl.xyz>
Co-committed-by: crueter <swurl@swurl.xyz>
2025-06-16 03:27:06 +00:00
5591ce30c9
Revert "[gradle] fix warnings & update deps (#189)"
This reverts commit af923c92eb.
2025-06-15 21:46:24 -04:00
af923c92eb [gradle] fix warnings & update deps (#189)
Signed-off-by: crueter <swurl@swurl.xyz>
Reviewed-on: eden-emu/eden#189
Co-authored-by: crueter <swurl@swurl.xyz>
Co-committed-by: crueter <swurl@swurl.xyz>
2025-06-15 22:30:12 +00:00
cf00554d23 windows JIT fix (#191)
Signed-off-by: crueter <swurl@swurl.xyz>
Reviewed-on: eden-emu/eden#191
Co-authored-by: crueter <swurl@swurl.xyz>
Co-committed-by: crueter <swurl@swurl.xyz>
2025-06-15 19:25:40 +00:00
cee222f0e6 fixing crashes when installing updates 2025-06-15 15:29:52 +03:00
b2d16cb3dd
[ci] Fix license-header workflow
Signed-off-by: crueter <swurl@swurl.xyz>
2025-06-15 05:02:32 -04:00
ef2d0a9076
[ci] tmp: debug license-header
Signed-off-by: crueter <swurl@swurl.xyz>
2025-06-15 04:58:00 -04:00
xbzk
f3e00b633e multiplayer lobby search dialog send button clipping fix (#188)
fix for send button.

Co-authored-by: Allison Cunha <allisonbzk@gmail.com>
Co-authored-by: crueter <swurl@swurl.xyz>
Reviewed-on: eden-emu/eden#188
Reviewed-by: crueter <crueter@noreply.localhost>
Co-authored-by: xbzk <xbzk@noreply.localhost>
Co-committed-by: xbzk <xbzk@noreply.localhost>
2025-06-15 08:53:41 +00:00
MaranBr
cc7f2808ed Update FFmpeg to 7.1.1, libvpx to 1.13.1 and libx264 to c24e06c on Android (#187)
This updates FFmpeg to 7.1.1, libvpx to 1.13.1 and libx264 to c24e06c on Android.

Co-authored-by: MaranBr <maranbr@outlook.com>
Reviewed-on: eden-emu/eden#187
Reviewed-by: crueter <crueter@noreply.localhost>
Co-authored-by: MaranBr <maranbr@noreply.localhost>
Co-committed-by: MaranBr <maranbr@noreply.localhost>
2025-06-14 17:42:22 +00:00
xbzk
6b46aca0b7 top margin fixed for non zero cutout screens (#185)
intended to fix top margin for screens with non zero cutout insets

Co-authored-by: Allison Cunha <allisonbzk@gmail.com>
Reviewed-on: eden-emu/eden#185
Co-authored-by: xbzk <xbzk@noreply.localhost>
Co-committed-by: xbzk <xbzk@noreply.localhost>
2025-06-12 20:41:13 +00:00
1037bff8ac
fix ci and NEEDS_D24
also fix ukrainian translation

Signed-off-by: crueter <swurl@swurl.xyz>
2025-06-11 21:41:20 -04:00
b54e7a8e5e [android] Improved Netplay (#175)
- Runtime validation rather than toasts
- Refactored some minor details
- Improved language clarity
- add TODOs

Signed-off-by: crueter <swurl@swurl.xyz>
Co-authored-by: Aleksandr Popovich <alekpopo@pm.me>

Co-authored-by: Pavel Barabanov <pavelbarabanov94@gmail.com>
Reviewed-on: eden-emu/eden#175
Co-authored-by: crueter <swurl@swurl.xyz>
Co-committed-by: crueter <swurl@swurl.xyz>
2025-06-11 22:59:48 +00:00
c4ca8d2367 Properly migrate internal NAND, Load, etc. directories (#167)
Signed-off-by: crueter <swurl@swurl.xyz>
Reviewed-on: eden-emu/eden#167
Co-authored-by: crueter <swurl@swurl.xyz>
Co-committed-by: crueter <swurl@swurl.xyz>
2025-06-11 22:57:13 +00:00
8ff1b9d282 Use proper rdns nonsense (#179)
Signed-off-by: crueter <swurl@swurl.xyz>
Reviewed-on: eden-emu/eden#179
Co-authored-by: crueter <swurl@swurl.xyz>
Co-committed-by: crueter <swurl@swurl.xyz>
2025-06-11 15:05:03 +00:00
c6a87a661a fix integrity store crash on new updates (#177)
credit: Zeuslota

Signed-off-by: crueter <swurl@swurl.xyz>

Reviewed-on: eden-emu/eden#177
Co-authored-by: crueter <swurl@swurl.xyz>
Co-committed-by: crueter <swurl@swurl.xyz>
2025-06-10 21:03:57 +00:00
5b361338c1 Update driver recs for T21 and 710 (#171)
Signed-off-by: crueter <swurl@swurl.xyz>
Reviewed-on: eden-emu/eden#171
Co-authored-by: crueter <swurl@swurl.xyz>
Co-committed-by: crueter <swurl@swurl.xyz>
2025-06-10 03:16:39 +00:00
96afab0299 Initial 20.x control.nacp patch (#170)
Signed-off-by: crueter <swurl@swurl.xyz>
Reviewed-on: eden-emu/eden#170
Co-authored-by: crueter <swurl@swurl.xyz>
Co-committed-by: crueter <swurl@swurl.xyz>
2025-06-10 03:15:58 +00:00
2665c5cc24 Device/SoC Info Overlay (#166)
Signed-off-by: crueter <swurl@swurl.xyz>
Co-authored-by: Pavel Barabanov <pavelbarabanov94@gmail.com>
Reviewed-on: eden-emu/eden#166
Co-authored-by: crueter <swurl@swurl.xyz>
Co-committed-by: crueter <swurl@swurl.xyz>
2025-06-10 03:07:00 +00:00
9bbf2c3df2
fix boost translation
Signed-off-by: crueter <swurl@swurl.xyz>
2025-06-09 04:20:09 -04:00
e6fc5f07d9
disable LRU by default
Signed-off-by: crueter <swurl@swurl.xyz>
2025-06-09 03:43:07 -04:00
d37d47c0ab update tv banner (#172)
Thanks AntaBaka

Signed-off-by: crueter <swurl@swurl.xyz>

Reviewed-on: eden-emu/eden#172
Co-authored-by: crueter <swurl@swurl.xyz>
Co-committed-by: crueter <swurl@swurl.xyz>
2025-06-09 07:41:38 +00:00
9755eb32b3 Fix Fast CPU time on Android 2025-06-09 05:34:16 +00:00
a9f9b207c2 Fix License headers & CI (#168)
Signed-off-by: crueter <swurl@swurl.xyz>
Reviewed-on: eden-emu/eden#168
Co-authored-by: crueter <swurl@swurl.xyz>
Co-committed-by: crueter <swurl@swurl.xyz>
2025-06-09 01:40:21 +00:00
xbzk
5c1fc12d88 fix topbar accumulative insets margin (#163)
This is incremental to pr #154 (and a replacement for pr #161)
It fixes top (portrait) and sides (landscape) margins accumulating upon enter/exit search bar.

Co-authored-by: Allison Cunha <allisonbzk@gmail.com>
Reviewed-on: eden-emu/eden#163
Co-authored-by: xbzk <xbzk@noreply.localhost>
Co-committed-by: xbzk <xbzk@noreply.localhost>
2025-06-08 20:27:00 +00:00
321bb5a17f
update default settings, warn about memory layout
Signed-off-by: swurl <swurl@swurl.xyz>
2025-06-05 15:14:56 -04:00
4758e126b8 Initial MSAA fix (Download and Upload) (#145)
This change works as publicly demonstrated, it doesn't work completely because I'm unable to improve it at the moment, tropic seems like he was scratching his ass instead of doing it at the time.
IT SHOULD IMPROVE CIV7 AND DIABLO 2

Reviewed-on: eden-emu/eden#145
Co-authored-by: MrPurple666 <antoniosacramento666usa@gmail.com>
Co-committed-by: MrPurple666 <antoniosacramento666usa@gmail.com>
2025-06-05 19:06:55 +00:00
xbzk
1240cd43d7 patch: mock return for textures not found by Track method (#150)
as discussed in #dev-chat, the goal is to feed untracked bindless textures requests with last valid bindless textures for now, so that most games keep running despite possible visual artifacts. as Track evolves, this mock shall be dropped eventually.

Co-authored-by: Allison Cunha <allisonbzk@gmail.com>
Reviewed-on: eden-emu/eden#150
Co-authored-by: xbzk <xbzk@noreply.localhost>
Co-committed-by: xbzk <xbzk@noreply.localhost>
2025-06-05 19:00:24 +00:00
76fa525592 Added the public lobby to android. (#125)
This is adapted from kleidis old PR to Azahar. Changes from it:
- Fixed inconsistent button styling in the dialog for connection
- Allowed to hide both empty and full rooms.
- Proper serving of preferred games
- Enables web service for android by default
- Better implementation of multiplayer.cpp that works with oop

Also fixes the room network class and turns it into a static namespace
in network

Signed-off-by: Aleksandr Popovich <alekpopo@pm.me>

Co-authored-by: swurl <swurl@swurl.xyz>
Reviewed-on: eden-emu/eden#125
Co-authored-by: Aleksandr Popovich <alekpopo@pm.me>
Co-committed-by: Aleksandr Popovich <alekpopo@pm.me>
2025-06-05 18:59:47 +00:00
7e13da47af Fix build ID and update checker (#148)
Signed-off-by: swurl <swurl@swurl.xyz>
Reviewed-on: eden-emu/eden#148
Co-authored-by: swurl <swurl@swurl.xyz>
Co-committed-by: swurl <swurl@swurl.xyz>
2025-06-05 18:58:54 +00:00
xbzk
d2364ae1f7 Built-in landscape searchbar & status bar fixes (#154)
android layout:

landscape: moves the searchbar to top bar's free space, increasing room for gamelist;

minor fixes:
landscape: avoid settings button getting beneath android navbar;
portrait: avoid top bar's getting beneath android status bar.

Co-authored-by: Allison Cunha <allisonbzk@gmail.com>
Reviewed-on: eden-emu/eden#154
Co-authored-by: xbzk <xbzk@noreply.localhost>
Co-committed-by: xbzk <xbzk@noreply.localhost>
2025-06-05 18:58:43 +00:00
MaranBr
4cc39b98d6 Update FFmpeg to 7.1.1 on Windows (#156)
This commit updates FFmpeg to version 7.1.1 on Windows.

Co-authored-by: MaranBr <maranbr@outlook.com>
Reviewed-on: eden-emu/eden#156
Co-authored-by: MaranBr <maranbr@noreply.localhost>
Co-committed-by: MaranBr <maranbr@noreply.localhost>
2025-06-05 18:56:56 +00:00
972576d2c5 Driver Fetcher (#130)
Lets the user download & install drivers from various repositories.

Co-authored-by: swurl <swurl@swurl.xyz>
Reviewed-on: eden-emu/eden#130
Co-authored-by: Aleksandr Popovich <alekpopo@pm.me>
Co-committed-by: Aleksandr Popovich <alekpopo@pm.me>
2025-06-05 18:56:14 +00:00
810df8d01c force 2 day retention on artifact uploads (#157)
Signed-off-by: swurl <swurl@swurl.xyz>
Reviewed-on: eden-emu/eden#157
Co-authored-by: swurl <swurl@swurl.xyz>
Co-committed-by: swurl <swurl@swurl.xyz>
2025-06-05 18:55:50 +00:00
MaranBr
6397bb0809 Fix video decoding on newer versions of FFmpeg (#155)
Fixes video decoding issues and enables compatibility with newer versions of FFmpeg.

Co-authored-by: MaranBr <maranbr@outlook.com>
Reviewed-on: eden-emu/eden#155
2025-06-04 19:06:48 +00:00
2d0f15ccac update the translation 2025-06-04 18:02:10 +03:00
MaranBr
a793433da4 Update SDL to 2.32.8 on Windows (#153)
Update SDL to 2.32.8 on Windows.

Co-authored-by: MaranBr <maranbr@outlook.com>
Reviewed-on: eden-emu/eden#153
2025-06-03 18:36:20 +00:00
MaranBr
7eb5710f35 Fix Mario Kart 8 Deluxe control applet freeze (#149)
Not limited to MK8D, this commit may fix games that commonly crash on the controller applet and possibly others as well.

This new approach prevents other games from breaking with this fix.

Co-authored-by: MaranBr <maranbr@outlook.com>
Reviewed-on: eden-emu/eden#149
2025-06-03 13:35:07 +00:00
78fc80376b Use proper fmt min version (#147)
Signed-off-by: swurl <swurl@swurl.xyz>
Reviewed-on: eden-emu/eden#147
Co-authored-by: swurl <swurl@swurl.xyz>
Co-committed-by: swurl <swurl@swurl.xyz>
2025-06-02 05:02:50 +00:00
af8396808e
use java 17 for compat
Signed-off-by: swurl <swurl@swurl.xyz>
2025-06-02 01:02:25 -04:00
fb3988a78a
switch ffmpeg to gh
Signed-off-by: swurl <swurl@swurl.xyz>
2025-05-31 15:18:27 -04:00
2a8ff1a59c use faster submodule urls (github etc) (#143)
Signed-off-by: swurl <swurl@swurl.xyz>
Reviewed-on: eden-emu/eden#143
Co-authored-by: swurl <swurl@swurl.xyz>
Co-committed-by: swurl <swurl@swurl.xyz>
2025-05-31 19:09:48 +00:00
eed703bc81 Fixes crashes in Diablo 3, in AC3, and allows you not to break the launch of guns of fury 2025-05-31 18:48:25 +03:00
6c655321e6
Move dead submodules in-tree
Signed-off-by: swurl <swurl@swurl.xyz>
2025-05-31 02:33:02 -04:00
c0cceff365
fix for new ci
Signed-off-by: swurl <swurl@swurl.xyz>
2025-05-30 23:51:09 -04:00
aaeaa884eb yall got any of them pixels (#140)
Adds 0.25x resolution option and fixes the configure hotkeys

Signed-off-by: swurl <swurl@swurl.xyz>

Reviewed-on: eden-emu/eden#140
Co-authored-by: swurl <swurl@swurl.xyz>
Co-committed-by: swurl <swurl@swurl.xyz>
2025-05-31 02:16:36 +00:00
568ac9f7de fix fmv greenscreens when CPU video decoding is enabled (#131)
This just reverts FFmpeg to 6.0.2 (known working version) but we should
probably take a look at what breaking changes occurred since then.

Signed-off-by: swurl <swurl@swurl.xyz>

Reviewed-on: eden-emu/eden#131
Co-authored-by: swurl <swurl@swurl.xyz>
Co-committed-by: swurl <swurl@swurl.xyz>
2025-05-29 21:55:19 +00:00
MaranBr
621d1c3d8a Enable FFmpeg GPU decoding for NVIDIA and AMD graphic cards (#139)
This enables the DXVA2, D3D11VA, D3D11VA2 and NVENC decoders for GPU decoding of H264 and VP9 formats on Windows.

Co-authored-by: MaranBr <maranbr@outlook.com>
Reviewed-on: eden-emu/eden#139
2025-05-29 21:20:13 +00:00
7f16f12202 Add game list refresh button (#126)
nice race condition

Signed-off-by: swurl <swurl@swurl.xyz>

Reviewed-on: eden-emu/eden#126
Co-authored-by: swurl <swurl@swurl.xyz>
Co-committed-by: swurl <swurl@swurl.xyz>
2025-05-29 08:20:11 +00:00
b78089e978 Fast CPU Time & Improved Fast GPU Time (#109)
needs android setting

Signed-off-by: swurl <swurl@swurl.xyz>

Co-authored-by: Aleksandr Popovich <alekpopo@pm.me>
Reviewed-on: eden-emu/eden#109
Co-authored-by: swurl <swurl@swurl.xyz>
Co-committed-by: swurl <swurl@swurl.xyz>
2025-05-29 08:19:51 +00:00
ed47533be8 fix Eden's Veil warning dialog (#138)
Signed-off-by: swurl <swurl@swurl.xyz>
Reviewed-on: eden-emu/eden#138
Co-authored-by: swurl <swurl@swurl.xyz>
Co-committed-by: swurl <swurl@swurl.xyz>
2025-05-29 08:19:35 +00:00
54bfb6e905 fix appimage shortcuts (#137)
Properly recognizes AppImage launches and deduplicates some code b/t
home menu and game list shortcuts

Signed-off-by: swurl <swurl@swurl.xyz>

Reviewed-on: eden-emu/eden#137
Co-authored-by: swurl <swurl@swurl.xyz>
Co-committed-by: swurl <swurl@swurl.xyz>
2025-05-29 06:35:00 +00:00
MaranBr
e9e17b8fc2 Code cleanup (#136)
Remove the workaround for MK8D as we no longer need it.

Co-authored-by: MaranBr <maranbr@outlook.com>
Reviewed-on: eden-emu/eden#136
2025-05-28 11:50:15 +00:00
Bix
e2f4c16d27 MERGE: Improve Gamehub support (#128)
Added support for many different game hub apps.
Sorry about pushing meant to push on my branch.

Reviewed-on: eden-emu/eden#128
Co-authored-by: Bix <xq9zp7f2@proton.me>
Co-committed-by: Bix <xq9zp7f2@proton.me>
2025-05-28 04:46:43 +00:00
4235492079 Update checker (#132)
(with some extra spice)

Maybe this should be a target for Android as well.

Signed-off-by: swurl <swurl@swurl.xyz>

Reviewed-on: eden-emu/eden#132
Co-authored-by: swurl <swurl@swurl.xyz>
Co-committed-by: swurl <swurl@swurl.xyz>
2025-05-28 02:23:51 +00:00
MaranBr
71df7b1451 mk8d-fix (#129)
Removes the workaround and properly fixes the controller applet stuck on Mario Kart 8 Deluxe and possibly other games as well

Co-authored-by: MaranBr <maranbr@outlook.com>
Reviewed-on: eden-emu/eden#129
2025-05-27 11:58:01 +00:00
MaranBr
7df3692bcd Fixes the softlock after the controller applet exits in Mario Kart 8 Deluxe (#127)
This is a simple workaround created by Exverge for Suyu and ported to Eden by me. I believe it is safe to integrate into the project for now, until we can figure out a better way to handle this.

Co-authored-by: MaranBr <maranbr@outlook.com>
Reviewed-on: eden-emu/eden#127
2025-05-25 18:56:29 +00:00
Bix
334ba28225 revert 0329234c25
revert due to build failure
2025-05-25 13:50:08 +00:00
Bix
0329234c25 Added support for all major Game hubs.
Added full support for Samsung Game hub and initial support for Xiaomi, Asus and Oneplus, as well as a general rewrite.

Signed-off-by: Bix <xq9zp7f2@proton.me>
2025-05-25 13:30:49 +00:00
Esther1024
15fb1f78b3 fix include for boost 1.8.3+ (#121)
Co-authored-by: swurl <swurl@swurl.xyz>
Reviewed-on: eden-emu/eden#121
Co-authored-by: Esther1024 <danishreyjavik@outlook.com>
Co-committed-by: Esther1024 <danishreyjavik@outlook.com>
2025-05-22 20:38:57 +00:00
bad2232874 update dynarmic (#120)
Needs to wait for more changes

Signed-off-by: swurl <swurl@swurl.xyz>

Reviewed-on: eden-emu/eden#120
Co-authored-by: swurl <swurl@swurl.xyz>
Co-committed-by: swurl <swurl@swurl.xyz>
2025-05-22 04:36:34 +00:00
c79b7f82c8
added settings to android (#118)
Signed-off-by: Aleksandr Popovich <alekpopo@pm.me>
Signed-off-by: swurl <swurl@swurl.xyz>
Reviewed-on: #118
Co-authored-by: Aleksandr Popovich <alekpopo@pm.me>
Co-authored-by: swurl <swurl@swurl.xyz>
Co-committed-by: Aleksandr Popovich <alekpopo@pm.me>
2025-05-21 18:02:34 -04:00
b1b6e0064f re-enable citron migration (#119)
Signed-off-by: swurl <swurl@swurl.xyz>
Reviewed-on: eden-emu/eden#119
Co-authored-by: swurl <swurl@swurl.xyz>
Co-committed-by: swurl <swurl@swurl.xyz>
2025-05-21 04:09:46 +00:00
28e05a5108 remove leftovers from early access (#122)
Signed-off-by: swurl <swurl@swurl.xyz>
Reviewed-on: eden-emu/eden#122
Co-authored-by: swurl <swurl@swurl.xyz>
Co-committed-by: swurl <swurl@swurl.xyz>
2025-05-21 04:08:24 +00:00
Esther1024
ce6b506b02 microprofiler memleak fix (#123)
some 50mb being leaked; may as well

Reviewed-on: eden-emu/eden#123
Co-authored-by: Esther1024 <danishreyjavik@outlook.com>
Co-committed-by: Esther1024 <danishreyjavik@outlook.com>
2025-05-21 04:08:07 +00:00
ebd3605313 Quick fix and code cleanup 2025-05-20 16:01:12 -04:00
1b2bccf51f Improves Externals, CI, CMake and Qt handling 2025-05-20 15:57:19 -04:00
1f8b8e0fa1 remove solo executables (#106)
also, fixes CI not targeting the right flag settings.

this pr needs to add the room exe removal from lime3ds.

Signed-off-by: Aleksandr Popovich <alekpopo@pm.me>

Reviewed-on: eden-emu/eden#106
Co-authored-by: Aleksandr Popovich <alekpopo@pm.me>
Co-committed-by: Aleksandr Popovich <alekpopo@pm.me>
2025-05-19 21:30:10 +00:00
bc55ed496f add option to censor the username in logs (#111)
Signed-off-by: Aleksandr Popovich <alekpopo@pm.me>
Co-authored-by: Esther1024 <danishreyjavik@outlook.com>
Reviewed-on: eden-emu/eden#111
Co-authored-by: Aleksandr Popovich <alekpopo@pm.me>
Co-committed-by: Aleksandr Popovich <alekpopo@pm.me>
2025-05-19 21:29:22 +00:00
244c07c999 Added option for software keyboard applet on android (#113)
Signed-off-by: Aleksandr Popovich <alekpopo@pm.me>
Reviewed-on: eden-emu/eden#113
Co-authored-by: Aleksandr Popovich <alekpopo@pm.me>
Co-committed-by: Aleksandr Popovich <alekpopo@pm.me>
2025-05-19 21:28:51 +00:00
ed4b011cad fix more vulkan issues and remove vertex input (#117)
Co-authored-by: swurl <swurl@swurl.xyz>
Reviewed-on: eden-emu/eden#117
Co-authored-by: Aleksandr Popovich <alekpopo@pm.me>
Co-committed-by: Aleksandr Popovich <alekpopo@pm.me>
2025-05-19 21:28:16 +00:00
3cad73dad6
Revert "THIS NEEDS TO BE CHECKED BEFORE MERGE: RAII fix, initial MSAA, some fixes for memory misallocation (#116)"
This reverts commit ce5d5d2aff.
2025-05-19 15:22:08 -04:00
89c06a7383
fix vk extension removal
Signed-off-by: swurl <swurl@swurl.xyz>
2025-05-19 15:21:43 -04:00
Esther1024
ea7b9519c7 fix uninit values in applet and mouse (#114)
read before written; initialize so valgrind stops complaining

Reviewed-on: eden-emu/eden#114
Co-authored-by: Esther1024 <danishreyjavik@outlook.com>
Co-committed-by: Esther1024 <danishreyjavik@outlook.com>
2025-05-19 19:11:06 +00:00
4566 changed files with 1265557 additions and 46063 deletions

View file

@ -5,10 +5,10 @@
export NDK_CCACHE=$(which ccache)
# keystore & pass are stored locally
export ANDROID_KEYSTORE_FILE=~/android.keystore
export ANDROID_KEYSTORE_PASS=`cat ~/android.pass`
export ANDROID_KEY_ALIAS=`cat ~/android.alias`
if [ ! -z "${ANDROID_KEYSTORE_B64}" ]; then
export ANDROID_KEYSTORE_FILE="${GITHUB_WORKSPACE}/ks.jks"
base64 --decode <<< "${ANDROID_KEYSTORE_B64}" > "${ANDROID_KEYSTORE_FILE}"
fi
cd src/android
chmod +x ./gradlew
@ -16,4 +16,6 @@ chmod +x ./gradlew
./gradlew assembleRelease
./gradlew bundleRelease
ccache -s -v
if [ ! -z "${ANDROID_KEYSTORE_B64}" ]; then
rm "${ANDROID_KEYSTORE_FILE}"
fi

View file

@ -2,7 +2,7 @@
# frozen_string_literal: true
license_header = <<~EOF
// SPDX-FileCopyrightText: Copyright yuzu/Citra Emulator Project / Eden Emulator Project
// SPDX-FileCopyrightText: Copyright 2025 Eden Emulator Project
// SPDX-License-Identifier: GPL-3.0-or-later
EOF

84
.ci/license-header.sh Executable file
View file

@ -0,0 +1,84 @@
#!/bin/sh -e
HEADER="$(cat "$PWD/.ci/license/header.txt")"
echo "Getting branch changes"
BRANCH=`git rev-parse --abbrev-ref HEAD`
COMMITS=`git log ${BRANCH} --not master --pretty=format:"%h"`
RANGE="${COMMITS[${#COMMITS[@]}-1]}^..${COMMITS[0]}"
FILES=`git diff-tree --no-commit-id --name-only ${RANGE} -r`
#FILES=$(git diff --name-only master)
echo "Done"
for file in $FILES; do
EXTENSION="${file##*.}"
case "$EXTENSION" in
kts|kt|cpp|h)
CONTENT="`cat $file`"
case "$CONTENT" in
"$HEADER"*) ;;
*) BAD_FILES="$BAD_FILES $file" ;;
esac
;;
esac
done
if [ "$BAD_FILES" = "" ]; then
echo
echo "All good."
exit
fi
echo "The following files have incorrect license headers:"
echo
for file in $BAD_FILES; do echo $file; done
cat << EOF
The following license header should be added to the start of all offending files:
=== BEGIN ===
$HEADER
=== END ===
If some of the code in this PR is not being contributed by the original author,
the files which have been exclusively changed by that code can be ignored.
If this happens, this PR requirement can be bypassed once all other files are addressed.
EOF
if [ "$FIX" = "true" ]; then
echo
echo "FIX set to true. Fixing headers."
echo
for file in $BAD_FILES; do
cat $file > $file.bak
cat .ci/license/header.txt > $file
echo >> $file
cat $file.bak >> $file
rm $file.bak
git add $file
done
echo "License headers fixed."
if [ "$COMMIT" = "true" ]; then
echo
echo "COMMIT set to true. Committing changes."
echo
git commit -m "Fix license headers"
echo "Changes committed. You may now push."
fi
else
exit 1
fi

2
.ci/license/header.txt Normal file
View file

@ -0,0 +1,2 @@
// SPDX-FileCopyrightText: Copyright 2025 Eden Emulator Project
// SPDX-License-Identifier: GPL-3.0-or-later

View file

@ -1,82 +1,116 @@
#!/bin/bash -ex
#!/bin/bash -e
# SPDX-FileCopyrightText: 2025 eden Emulator Project
# SPDX-License-Identifier: GPL-3.0-or-later
export ARCH="$(uname -m)"
case "$1" in
amd64 | "")
echo "Making amd64-v3 optimized build of Eden"
ARCH="amd64_v3"
ARCH_FLAGS="-march=x86-64-v3"
export EXTRA_CMAKE_FLAGS=(-DYUZU_BUILD_PRESET=v3)
;;
steamdeck | zen2)
echo "Making Steam Deck (Zen 2) optimized build of Eden"
ARCH="steamdeck"
ARCH_FLAGS="-march=znver2 -mtune=znver2"
export EXTRA_CMAKE_FLAGS=(-DYUZU_BUILD_PRESET=zen2 -DYUZU_SYSTEM_PROFILE=steamdeck)
;;
rog-ally | allyx | zen4)
echo "Making ROG Ally X (Zen 4) optimized build of Eden"
ARCH="rog-ally-x"
ARCH_FLAGS="-march=znver4 -mtune=znver4"
export EXTRA_CMAKE_FLAGS=(-DYUZU_BUILD_PRESET=zen2 -DYUZU_SYSTEM_PROFILE=steamdeck)
;;
legacy)
echo "Making amd64 generic build of Eden"
ARCH=amd64
ARCH_FLAGS="-march=x86-64 -mtune=generic"
export EXTRA_CMAKE_FLAGS=(-DYUZU_BUILD_PRESET=generic)
;;
aarch64)
echo "Making armv8-a build of Eden"
ARCH=aarch64
ARCH_FLAGS="-march=armv8-a -mtune=generic -w"
export EXTRA_CMAKE_FLAGS=(-DYUZU_BUILD_PRESET=generic)
;;
armv9)
echo "Making armv9-a build of Eden"
ARCH=armv9
ARCH_FLAGS="-march=armv9-a -mtune=generic -w"
export EXTRA_CMAKE_FLAGS=(-DYUZU_BUILD_PRESET=armv9)
;;
native)
echo "Making native build of Eden"
ARCH="$(uname -m)"
ARCH_FLAGS="-march=native -mtune=native"
export EXTRA_CMAKE_FLAGS=(-DYUZU_BUILD_PRESET=native)
;;
*)
echo "Invalid target $1 specified, must be one of native, amd64, steamdeck, zen2, allyx, rog-ally, zen4, legacy, aarch64, armv9"
exit 1
;;
esac
if [ "$ARCH" = 'x86_64' ]; then
if [ "$1" = 'v3' ]; then
echo "Making x86-64-v3 optimized build of eden"
ARCH="${ARCH}_v3"
ARCH_FLAGS="-march=x86-64-v3 -O3"
else
echo "Making x86-64 generic build of eden"
ARCH_FLAGS="-march=x86-64 -mtune=generic -O3"
fi
else
echo "Making aarch64 build of eden"
ARCH_FLAGS="-march=armv8-a -mtune=generic -O3"
fi
export ARCH_FLAGS="$ARCH_FLAGS -O3"
NPROC="$2"
if [ -z "$NPROC" ]; then
NPROC="$(nproc)"
fi
if [ "$1" != "" ]; then shift; fi
if [ "$TARGET" = "appimage" ]; then
# Compile the AppImage we distribute with Clang.
export EXTRA_CMAKE_FLAGS=(-DCMAKE_CXX_COMPILER=clang++ -DCMAKE_C_COMPILER=clang -DCMAKE_LINKER=/etc/bin/ld.lld)
# Bundle required QT wayland libraries
export EXTRA_QT_PLUGINS="waylandcompositor"
export EXTRA_PLATFORM_PLUGINS="libqwayland-egl.so;libqwayland-generic.so"
export EXTRA_CMAKE_FLAGS=("${EXTRA_CMAKE_FLAGS[@]}" -DCMAKE_INSTALL_PREFIX=/usr -DYUZU_ROOM=ON -DYUZU_ROOM_STANDALONE=OFF -DYUZU_CMD=OFF)
else
# For the linux-fresh verification target, verify compilation without PCH as well.
export EXTRA_CMAKE_FLAGS=(-DCITRA_USE_PRECOMPILED_HEADERS=OFF)
export EXTRA_CMAKE_FLAGS=("${EXTRA_CMAKE_FLAGS[@]}" -DYUZU_USE_PRECOMPILED_HEADERS=OFF)
fi
if [ "$GITHUB_REF_TYPE" == "tag" ]; then
export EXTRA_CMAKE_FLAGS=($EXTRA_CMAKE_FLAGS -DENABLE_QT_UPDATE_CHECKER=ON)
if [ "$DEVEL" != "true" ]; then
export EXTRA_CMAKE_FLAGS=("${EXTRA_CMAKE_FLAGS[@]}" -DENABLE_QT_UPDATE_CHECKER=ON)
fi
if [ "$USE_WEBENGINE" = "true" ]; then
WEBENGINE=ON
else
WEBENGINE=OFF
fi
if [ "$USE_MULTIMEDIA" = "false" ]; then
MULTIMEDIA=OFF
else
MULTIMEDIA=ON
fi
if [ -z "$BUILD_TYPE" ]; then
export BUILD_TYPE="Release"
fi
export EXTRA_CMAKE_FLAGS=("${EXTRA_CMAKE_FLAGS[@]}" $@)
mkdir -p build && cd build
cmake .. -G Ninja \
-DCMAKE_BUILD_TYPE=Release \
-DCMAKE_C_COMPILER_LAUNCHER=ccache \
-DCMAKE_CXX_COMPILER_LAUNCHER=ccache \
-DCMAKE_BUILD_TYPE="$BUILD_TYPE" \
-DENABLE_QT_TRANSLATION=ON \
-DUSE_DISCORD_PRESENCE=ON \
-DUSE_CCACHE=ON \
-DCMAKE_CXX_FLAGS="$ARCH_FLAGS" \
-DCMAKE_C_FLAGS="$ARCH_FLAGS" \
-DYUZU_USE_BUNDLED_VCPKG=OFF \
-DYUZU_USE_BUNDLED_QT=OFF \
-DUSE_SYSTEM_QT=ON \
-DYUZU_USE_BUNDLED_FFMPEG=OFF \
-DYUZU_USE_BUNDLED_SDL2=OFF \
-DYUZU_USE_EXTERNAL_SDL2=ON \
-DYUZU_TESTS=OFF \
-DYUZU_USE_LLVM_DEMANGLE=OFF \
-DYUZU_USE_QT_MULTIMEDIA=OFF \
-DYUZU_USE_QT_WEB_ENGINE=OFF \
-DENABLE_QT_TRANSLATION=ON \
-DYUZU_USE_FASTER_LD=OFF \
-DYUZU_USE_QT_MULTIMEDIA=$MULTIMEDIA \
-DYUZU_USE_QT_WEB_ENGINE=$WEBENGINE \
-DYUZU_USE_FASTER_LD=ON \
-DYUZU_ENABLE_LTO=ON \
-DCMAKE_LINKER=/usr/bin/mold \
"${EXTRA_CMAKE_FLAGS[@]}"
"${EXTRA_CMAKE_FLAGS[@]}"
ninja -j${NPROC}
if [ -d "bin/Release" ]; then
strip -s bin/Release/*
strip -s bin/Release/*
else
strip -s bin/*
strip -s bin/*
fi
if [ "$TARGET" = "appimage" ]; then
ccache -s
else
ccache -s -v
fi
#ctest -VV -C Release

View file

@ -1,219 +1,150 @@
AppRun
eden.desktop
org.eden_emu.eden.desktop
bin/eden
shared/bin/eden
shared/lib/lib.path
shared/lib/ld-linux-x86-64.so.2
shared/lib/libQt6Widgets.so.6.9.0
shared/lib/libQt6Network.so.6.9.0
shared/lib/libusb-1.0.so.0.5.0
shared/lib/libenet.so.7.0.6
shared/lib/libbrotlicommon.so.1.1.0
shared/lib/libbrotlienc.so.1.1.0
shared/lib/libbrotlidec.so.1.1.0
shared/lib/libz.so.1.3.1
shared/lib/libQt6Widgets.so.6.4.2
shared/lib/libQt6DBus.so.6.4.2
shared/lib/libudev.so.1.7.5
shared/lib/libbrotlienc.so.1.0.9
shared/lib/libbrotlidec.so.1.0.9
shared/lib/libssl.so.3
shared/lib/libcrypto.so.3
shared/lib/libavcodec.so.61.19.100
shared/lib/libavdevice.so.61.3.100
shared/lib/libavfilter.so.10.4.100
shared/lib/libavformat.so.61.7.100
shared/lib/libavutil.so.59.39.100
shared/lib/libswresample.so.5.3.100
shared/lib/libswscale.so.8.3.100
shared/lib/libva.so.2.2200.0
shared/lib/libboost_context.so.1.87.0
shared/lib/liblz4.so.1.10.0
shared/lib/libzstd.so.1.5.7
shared/lib/libSDL2-2.0.so.0.3200.54
shared/lib/libfmt.so.11.1.4
shared/lib/libopus.so.0.10.1
shared/lib/libQt6Gui.so.6.9.0
shared/lib/libQt6DBus.so.6.9.0
shared/lib/libGLX.so.0.0.0
shared/lib/libOpenGL.so.0.0.0
shared/lib/libQt6Core.so.6.9.0
shared/lib/libstdc++.so.6.0.33
shared/lib/libavcodec.so.59.37.100
shared/lib/libavutil.so.57.28.100
shared/lib/libQt6Gui.so.6.4.2
shared/lib/libQt6Core.so.6.4.2
shared/lib/libstdc++.so.6.0.30
shared/lib/libm.so.6
shared/lib/libgcc_s.so.1
shared/lib/libc.so.6
shared/lib/libgssapi_krb5.so.2.2
shared/lib/libproxy.so.0.5.9
shared/lib/libudev.so.1.7.10
shared/lib/libvpx.so.9.1.0
shared/lib/libwebpmux.so.3.1.1
shared/lib/liblzma.so.5.8.1
shared/lib/libdav1d.so.7.0.0
shared/lib/libopencore-amrwb.so.0.0.5
shared/lib/librsvg-2.so.2.60.0
shared/lib/libcairo.so.2.11804.4
shared/lib/libgobject-2.0.so.0.8400.1
shared/lib/libglib-2.0.so.0.8400.1
shared/lib/libsnappy.so.1.2.2
shared/lib/libaom.so.3.12.0
shared/lib/libgsm.so.1.0.22
shared/lib/libjxl.so.0.11.1
shared/lib/libjxl_threads.so.0.11.1
shared/lib/libdbus-1.so.3.32.4
shared/lib/libbrotlicommon.so.1.0.9
shared/lib/libswresample.so.4.7.100
shared/lib/libvpx.so.7.1.0
shared/lib/libwebpmux.so.3.0.10
shared/lib/libwebp.so.7.1.5
shared/lib/liblzma.so.5.4.1
shared/lib/libdav1d.so.6.6.0
shared/lib/librsvg-2.so.2.48.0
shared/lib/libgobject-2.0.so.0.7400.6
shared/lib/libglib-2.0.so.0.7400.6
shared/lib/libcairo.so.2.11600.0
shared/lib/libzvbi.so.0.13.2
shared/lib/libz.so.1.2.13
shared/lib/libsnappy.so.1.1.9
shared/lib/libaom.so.3.6.0
shared/lib/libcodec2.so.1.0
shared/lib/libgsm.so.1.0.19
shared/lib/libjxl.so.0.7.0
shared/lib/libjxl_threads.so.0.7.0
shared/lib/libmp3lame.so.0.0.0
shared/lib/libopencore-amrnb.so.0.0.5
shared/lib/libopenjp2.so.2.5.3
shared/lib/libopenjp2.so.2.5.0
shared/lib/libopus.so.0.8.0
shared/lib/librav1e.so.0.5.1
shared/lib/libshine.so.3.0.1
shared/lib/libspeex.so.1.5.2
shared/lib/libSvtAv1Enc.so.1.4.1
shared/lib/libtheoraenc.so.1.1.2
shared/lib/libtheoradec.so.1.1.4
shared/lib/libtwolame.so.0.0.0
shared/lib/libvorbis.so.0.4.9
shared/lib/libvorbisenc.so.2.0.12
shared/lib/libwebp.so.7.1.10
shared/lib/libx264.so.164
shared/lib/libx265.so.199
shared/lib/libxvidcore.so.4.3
shared/lib/libvpl.so.2.14
shared/lib/libraw1394.so.11.1.0
shared/lib/libavc1394.so.0.3.0
shared/lib/librom1394.so.0.3.0
shared/lib/libiec61883.so.0.1.1
shared/lib/libjack.so.0.1.0
shared/lib/libdrm.so.2.124.0
shared/lib/libxcb.so.1.1.0
shared/lib/libxcb-shm.so.0.0.0
shared/lib/libxcb-shape.so.0.0.0
shared/lib/libxcb-xfixes.so.0.0.0
shared/lib/libasound.so.2.0.0
shared/lib/libGL.so.1.7.0
shared/lib/libpulse.so.0.24.3
shared/lib/libv4l2.so.0.0.0
shared/lib/libXv.so.1.0.0
shared/lib/libX11.so.6.4.0
shared/lib/libXext.so.6.4.0
shared/lib/libpostproc.so.58.3.100
shared/lib/libbs2b.so.0.0.0
shared/lib/librubberband.so.3.0.0
shared/lib/libharfbuzz.so.0.61101.0
shared/lib/libfribidi.so.0.4.0
shared/lib/libplacebo.so.349
shared/lib/libvmaf.so.3.0.0
shared/lib/libass.so.9.3.1
shared/lib/libvidstab.so.1.2
shared/lib/libzmq.so.5.2.5
shared/lib/libzimg.so.2.0.0
shared/lib/libglslang.so.15.2.0
shared/lib/libOpenCL.so.1.0.0
shared/lib/libfontconfig.so.1.15.0
shared/lib/libfreetype.so.6.20.2
shared/lib/libdvdnav.so.4.3.0
shared/lib/libdvdread.so.8.0.0
shared/lib/libxml2.so.2.13.5
shared/lib/libbz2.so.1.0.8
shared/lib/libmodplug.so.1.0.0
shared/lib/libopenmpt.so.0.4.4
shared/lib/libbluray.so.2.4.3
shared/lib/libgmp.so.10.5.0
shared/lib/libgnutls.so.30.40.3
shared/lib/libsrt.so.1.5.4
shared/lib/libssh.so.4.10.1
shared/lib/libva-drm.so.2.2200.0
shared/lib/libva-x11.so.2.2200.0
shared/lib/libva.so.2.1700.0
shared/lib/libmfx.so.1.35
shared/lib/libva-drm.so.2.1700.0
shared/lib/libva-x11.so.2.1700.0
shared/lib/libvdpau.so.1.0.0
shared/lib/libsoxr.so.0.1.2
shared/lib/libX11.so.6.4.0
shared/lib/libdrm.so.2.4.0
shared/lib/libOpenCL.so.1.0.0
shared/lib/libEGL.so.1.1.0
shared/lib/libxkbcommon.so.0.8.1
shared/lib/libpng16.so.16.47.0
shared/lib/libmd4c.so.0.5.2
shared/lib/libdbus-1.so.3.38.3
shared/lib/libGLdispatch.so.0.0.0
shared/lib/libdouble-conversion.so.3.3.0
shared/lib/libfontconfig.so.1.12.0
shared/lib/libxkbcommon.so.0.0.0
shared/lib/libGLX.so.0.0.0
shared/lib/libOpenGL.so.0.0.0
shared/lib/libpng16.so.16.39.0
shared/lib/libharfbuzz.so.0.60000.0
shared/lib/libmd4c.so.0.4.8
shared/lib/libfreetype.so.6.18.3
shared/lib/libicui18n.so.72.1
shared/lib/libicuuc.so.72.1
shared/lib/libdouble-conversion.so.3.1
shared/lib/libb2.so.1.0.4
shared/lib/libpcre2-16.so.0.14.0
shared/lib/libkrb5.so.3.3
shared/lib/libk5crypto.so.3.1
shared/lib/libcom_err.so.2.1
shared/lib/libkrb5support.so.0.1
shared/lib/libkeyutils.so.1.10
shared/lib/libresolv.so.2
shared/lib/libproxy/libpxbackend-1.0.so
shared/lib/libcap.so.2.75
shared/lib/libgio-2.0.so.0.8400.1
shared/lib/libgdk_pixbuf-2.0.so.0.4200.12
shared/lib/libpangocairo-1.0.so.0.5600.3
shared/lib/libpango-1.0.so.0.5600.3
shared/lib/libXrender.so.1.3.0
shared/lib/libpcre2-16.so.0.11.2
shared/lib/libzstd.so.1.5.4
shared/lib/libsystemd.so.0.35.0
shared/lib/libsoxr.so.0.1.2
shared/lib/libcairo-gobject.so.2.11600.0
shared/lib/libgdk_pixbuf-2.0.so.0.4200.10
shared/lib/libgio-2.0.so.0.7400.6
shared/lib/libxml2.so.2.9.14
shared/lib/libpangocairo-1.0.so.0.5000.12
shared/lib/libpango-1.0.so.0.5000.12
shared/lib/libffi.so.8.1.2
shared/lib/libpcre2-8.so.0.11.2
shared/lib/libpixman-1.so.0.42.2
shared/lib/libxcb-shm.so.0.0.0
shared/lib/libxcb.so.1.1.0
shared/lib/libxcb-render.so.0.0.0
shared/lib/libpixman-1.so.0.44.2
shared/lib/libffi.so.8.1.4
shared/lib/libpcre2-8.so.0.14.0
shared/lib/libjxl_cms.so.0.11.1
shared/lib/libhwy.so.1.2.0
shared/lib/libXrender.so.1.3.0
shared/lib/libXext.so.6.4.0
shared/lib/libhwy.so.1.0.3
shared/lib/liblcms2.so.2.0.14
shared/lib/libogg.so.0.8.5
shared/lib/libsharpyuv.so.0.1.1
shared/lib/libdb-5.3.so
shared/lib/libXau.so.6.0.0
shared/lib/libXdmcp.so.6.0.0
shared/lib/pulseaudio/libpulsecommon-17.0.so
shared/lib/libv4lconvert.so.0.0.0
shared/lib/libfftw3.so.3.6.10
shared/lib/libsamplerate.so.0.2.2
shared/lib/libgraphite2.so.3.2.1
shared/lib/libunwind.so.8.1.0
shared/lib/libshaderc_shared.so.1
shared/lib/libglslang-default-resource-limits.so.15.2.0
shared/lib/libvulkan.so.1.4.309
shared/lib/liblcms2.so.2.0.17
shared/lib/libdovi.so.3.3.1
shared/lib/libunibreak.so.6.0.1
shared/lib/libgomp.so.1.0.0
shared/lib/libsodium.so.26.2.0
shared/lib/libpgm-5.3.so.0.0.128
shared/lib/libSPIRV-Tools-opt.so
shared/lib/libSPIRV-Tools.so
shared/lib/libexpat.so.1.10.2
shared/lib/libmpg123.so.0.48.3
shared/lib/libvorbisfile.so.3.3.8
shared/lib/libleancrypto.so.1
shared/lib/libp11-kit.so.0.4.1
shared/lib/libidn2.so.0.4.0
shared/lib/libunistring.so.5.2.0
shared/lib/libtasn1.so.6.6.4
shared/lib/libhogweed.so.6.10
shared/lib/libnettle.so.8.10
shared/lib/libnuma.so.1.0.0
shared/lib/libpthread.so.0
shared/lib/libXfixes.so.3.1.0
shared/lib/libX11-xcb.so.1.0.0
shared/lib/libxcb-dri3.so.0.1.0
shared/lib/libsystemd.so.0.40.0
shared/lib/libcurl.so.4.8.0
shared/lib/libduktape.so.207.20700
shared/lib/libgmodule-2.0.so.0.8400.1
shared/lib/libGLdispatch.so.0.0.0
shared/lib/libexpat.so.1.8.10
shared/lib/libgraphite2.so.3.2.1
shared/lib/libicudata.so.72.1
shared/lib/libgomp.so.1.0.0
shared/lib/libcap.so.2.66
shared/lib/libgcrypt.so.20.4.1
shared/lib/liblz4.so.1.9.4
shared/lib/libgmodule-2.0.so.0.7400.6
shared/lib/libjpeg.so.62.3.0
shared/lib/libmount.so.1.1.0
shared/lib/libjpeg.so.8.3.2
shared/lib/libtiff.so.6.1.0
shared/lib/libpangoft2-1.0.so.0.5600.3
shared/lib/libselinux.so.1
shared/lib/libpangoft2-1.0.so.0.5000.12
shared/lib/libfribidi.so.0.4.0
shared/lib/libthai.so.0.3.1
shared/lib/libsndfile.so.1.0.37
shared/lib/libasyncns.so.0.3.1
shared/lib/libnghttp3.so.9.2.6
shared/lib/libnghttp2.so.14.28.4
shared/lib/libssh2.so.1.0.1
shared/lib/libpsl.so.5.3.5
shared/lib/libXau.so.6.0.0
shared/lib/libXdmcp.so.6.0.0
shared/lib/libgpg-error.so.0.33.1
shared/lib/libblkid.so.1.1.0
shared/lib/libjbig.so.2.1
shared/lib/libdatrie.so.1.4.0
shared/lib/libFLAC.so.14.0.0
shared/lib/libSDL3.so.0.2.10
shared/lib/libbsd.so.0.11.7
shared/lib/libmd.so.0.0.5
shared/lib/libvulkan.so.1.3.239
share/vulkan/icd.d/intel_hasvk_icd.x86_64.json
shared/lib/libvulkan_intel_hasvk.so
shared/lib/libwayland-client.so.0.21.0
shared/lib/libxcb-present.so.0.0.0
shared/lib/libxcb-xfixes.so.0.0.0
shared/lib/libxcb-sync.so.1.0.0
shared/lib/libxcb-randr.so.0.1.0
shared/lib/libxshmfence.so.1.0.0
shared/lib/libxcb-keysyms.so.1.0.0
shared/lib/libwayland-client.so.0.23.1
share/vulkan/icd.d/intel_icd.x86_64.json
shared/lib/libvulkan_intel.so
share/vulkan/icd.d/nouveau_icd.x86_64.json
shared/lib/libvulkan_nouveau.so
share/vulkan/icd.d/lvp_icd.x86_64.json
shared/lib/libvulkan_lvp.so
shared/lib/libLLVM-15.so.1
shared/lib/libedit.so.2.0.70
shared/lib/libz3.so.4
shared/lib/libtinfo.so.6.4
share/vulkan/icd.d/radeon_icd.x86_64.json
shared/lib/libvulkan_radeon.so
shared/lib/libLLVM.so.19.1
shared/lib/libelf-0.192.so
shared/lib/libdrm_amdgpu.so.1.124.0
shared/lib/libedit.so.0.0.75
shared/lib/libncursesw.so.6.5
shared/lib/libdrm_amdgpu.so.1.0.0
shared/lib/libelf-0.188.so
shared/lib/libVkLayer_MESA_device_select.so
bin/qt.conf
shared/lib/qt6/plugins/platforms/libqeglfs.so
shared/lib/qt6/plugins/platforms/libqlinuxfb.so
@ -225,29 +156,57 @@ shared/lib/qt6/plugins/platforms/libqvnc.so
shared/lib/qt6/plugins/platforms/libqwayland-egl.so
shared/lib/qt6/plugins/platforms/libqwayland-generic.so
shared/lib/qt6/plugins/platforms/libqxcb.so
shared/lib/libQt6XcbQpa.so.6.9.0
shared/lib/libxcb-cursor.so.0.0.0
shared/lib/libxcb-icccm.so.4.0.0
shared/lib/libxcb-image.so.0.0.0
shared/lib/libxcb-render-util.so.0.0.0
shared/lib/libxcb-xkb.so.1.0.0
shared/lib/libSM.so.6.0.1
shared/lib/libICE.so.6.3.0
shared/lib/libxcb-xinput.so.0.1.0
shared/lib/libxkbcommon-x11.so.0.8.1
shared/lib/libxcb-util.so.1.0.0
shared/lib/libuuid.so.1.3.0
shared/lib/libQt6WaylandClient.so.6.4.2
shared/lib/libwayland-cursor.so.0.21.0
shared/lib/qt6/plugins/platformthemes/libqgtk3.so
shared/lib/qt6/plugins/platformthemes/libqt6ct.so
shared/lib/qt6/plugins/platformthemes/libqxdgdesktopportal.so
shared/lib/libqt6ct-common.so.0.10
etc/fonts/fonts.conf
shared/lib/libgtk-3.so.0.2406.32
shared/lib/libgdk-3.so.0.2406.32
shared/lib/libatk-1.0.so.0.24609.1
shared/lib/libepoxy.so.0.0.0
shared/lib/libXi.so.6.1.0
shared/lib/libwayland-cursor.so.0.23.1
shared/lib/libwayland-egl.so.1.23.1
shared/lib/libatk-bridge-2.0.so.0.0.0
shared/lib/libwayland-egl.so.1.21.0
shared/lib/libXcursor.so.1.0.2
shared/lib/libXdamage.so.1.1.0
shared/lib/libXcomposite.so.1.0.0
shared/lib/libXrandr.so.2.2.0
shared/lib/qt6/plugins/styles/libqt6ct-style.so
shared/lib/libXinerama.so.1.0.0
shared/lib/libdl.so.2
shared/lib/libatspi.so.0.0.1
share/glib-2.0/schemas/gschemas.compiled
shared/lib/gio/modules/giomodule.cache
shared/lib/gio/modules/libdconfsettings.so
shared/lib/gio/modules/libgvfsdbus.so
shared/lib/gvfs/libgvfscommon.so
share/X11/xkb/rules/evdev
share/X11/xkb/keycodes/evdev
share/X11/xkb/keycodes/aliases
share/X11/xkb/types/complete
share/X11/xkb/types/basic
share/X11/xkb/types/mousekeys
share/X11/xkb/types/pc
share/X11/xkb/types/iso9995
share/X11/xkb/types/level5
share/X11/xkb/types/extra
share/X11/xkb/types/numpad
share/X11/xkb/compat/complete
share/X11/xkb/compat/basic
share/X11/xkb/compat/ledcaps
share/X11/xkb/compat/lednum
share/X11/xkb/compat/iso9995
share/X11/xkb/compat/mousekeys
share/X11/xkb/compat/accessx
share/X11/xkb/compat/misc
share/X11/xkb/compat/ledscroll
share/X11/xkb/compat/xfree86
share/X11/xkb/compat/level5
share/X11/xkb/compat/caps
share/X11/xkb/symbols/pc
share/X11/xkb/symbols/srvr_ctrl
share/X11/xkb/symbols/keypad
share/X11/xkb/symbols/altwin
share/X11/xkb/symbols/us
share/X11/xkb/symbols/inet
shared/lib/qt6/plugins/platforminputcontexts/libcomposeplatforminputcontextplugin.so
shared/lib/qt6/plugins/platforminputcontexts/libibusplatforminputcontextplugin.so
shared/lib/qt6/plugins/iconengines/libqsvgicon.so
@ -255,5 +214,37 @@ shared/lib/qt6/plugins/imageformats/libqgif.so
shared/lib/qt6/plugins/imageformats/libqico.so
shared/lib/qt6/plugins/imageformats/libqjpeg.so
shared/lib/qt6/plugins/imageformats/libqsvg.so
shared/lib/libQt6Svg.so.6.9.0
shared/lib/libQt6Svg.so.6.4.2
etc/fonts/fonts.conf
shared/lib/qt6/plugins/wayland-shell-integration/libfullscreen-shell-v1.so
shared/lib/qt6/plugins/wayland-shell-integration/libivi-shell.so
shared/lib/qt6/plugins/wayland-shell-integration/libqt-shell.so
shared/lib/qt6/plugins/wayland-shell-integration/libwl-shell-plugin.so
shared/lib/qt6/plugins/wayland-shell-integration/libxdg-shell.so
shared/lib/qt6/plugins/wayland-graphics-integration-client/libdmabuf-server.so
shared/lib/qt6/plugins/wayland-graphics-integration-client/libdrm-egl-server.so
shared/lib/qt6/plugins/wayland-graphics-integration-client/libqt-plugin-wayland-egl.so
shared/lib/qt6/plugins/wayland-graphics-integration-client/libshm-emulation-server.so
shared/lib/qt6/plugins/wayland-graphics-integration-client/libvulkan-server.so
shared/lib/libQt6WaylandEglClientHwIntegration.so.6.4.2
shared/lib/libQt6OpenGL.so.6.4.2
share/glvnd/egl_vendor.d/50_mesa.json
shared/lib/libEGL_mesa.so.0.0.0
shared/lib/libgbm.so.1.0.0
shared/lib/libglapi.so.0.0.0
shared/lib/libxcb-dri2.so.0.0.0
shared/lib/libwayland-server.so.0.21.0
shared/lib/dri/swrast_dri.so
shared/lib/libsensors.so.5.0.0
shared/lib/libdrm_radeon.so.1.0.1
shared/lib/libdrm_nouveau.so.2.0.0
shared/lib/libdrm_intel.so.1.0.0
shared/lib/libpciaccess.so.0.11.1
shared/lib/qt6/plugins/wayland-decoration-client/libbradient.so
shared/lib/gtk-3.0/modules/libcanberra-gtk3-module.so
shared/lib/libcanberra-gtk3.so.0.1.9
shared/lib/libcanberra.so.0.2.5
shared/lib/libvorbisfile.so.3.3.8
shared/lib/libtdb.so.1.4.8
shared/lib/libltdl.so.7.3.2
shared/lib/libXss.so.1.0.0

View file

@ -1,67 +1,97 @@
#!/bin/sh
#!/bin/sh -e
# SPDX-FileCopyrightText: 2025 eden Emulator Project
# SPDX-License-Identifier: GPL-3.0-or-later
# This script assumes you're in the source directory
set -ex
export APPIMAGE_EXTRACT_AND_RUN=1
export BASE_ARCH="$(uname -m)"
export ARCH="$BASE_ARCH"
LIB4BN="https://raw.githubusercontent.com/VHSgunzo/sharun/refs/heads/main/lib4bin"
URUNTIME="https://github.com/VHSgunzo/uruntime/releases/latest/download/uruntime-appimage-dwarfs-$ARCH"
SHARUN="https://github.com/VHSgunzo/sharun/releases/latest/download/sharun-${BASE_ARCH}-aio"
URUNTIME="https://github.com/VHSgunzo/uruntime/releases/latest/download/uruntime-appimage-dwarfs-${BASE_ARCH}"
if [ "$ARCH" = 'x86_64' ]; then
if [ "$1" = 'v3' ]; then
ARCH="${ARCH}_v3"
fi
case "$1" in
amd64|"")
echo "Packaging amd64-v3 optimized build of Eden"
ARCH="amd64_v3"
;;
steamdeck|zen2)
echo "Packaging Steam Deck (Zen 2) optimized build of Eden"
ARCH="steamdeck"
;;
rog-ally|allyx|zen4)
echo "Packaging ROG Ally X (Zen 4) optimized build of Eden"
ARCH="rog-ally-x"
;;
legacy)
echo "Packaging amd64 generic build of Eden"
ARCH=amd64
;;
aarch64)
echo "Packaging armv8-a build of Eden"
ARCH=aarch64
;;
armv9)
echo "Packaging armv9-a build of Eden"
ARCH=armv9
;;
native)
echo "Packaging native build of Eden"
ARCH="$BASE_ARCH"
;;
esac
export BUILDDIR="$2"
if [ "$BUILDDIR" = '' ]
then
BUILDDIR=build
fi
EDEN_TAG=$(git describe --tags --abbrev=0)
echo "Making stable \"$EDEN_TAG\" build"
git checkout "$EDEN_TAG"
echo "Making \"$EDEN_TAG\" build"
# git checkout "$EDEN_TAG"
VERSION="$(echo "$EDEN_TAG")"
# NOW MAKE APPIMAGE
mkdir -p ./AppDir
cd ./AppDir
cat > eden.desktop << EOL
[Desktop Entry]
Type=Application
Name=Eden
Icon=eden
StartupWMClass=eden
Exec=eden
Categories=Game;Emulator;
EOL
cp ../dist/org.eden_emu.eden.desktop .
cp ../dist/org.eden_emu.eden.svg .
cp ../dist/eden.svg ./eden.svg
ln -sf ./org.eden_emu.eden.svg ./.DirIcon
ln -sf ./eden.svg ./.DirIcon
UPINFO='gh-releases-zsync|eden-emulator|Releases|latest|*.AppImage.zsync'
if [ "$DEVEL" = 'true' ]; then
sed -i 's|Name=Eden|Name=Eden Nightly|' ./eden.desktop
UPINFO="$(echo "$UPINFO" | sed 's|latest|nightly|')"
sed -i 's|Name=Eden|Name=Eden Nightly|' ./org.eden_emu.eden.desktop
UPINFO="$(echo "$UPINFO" | sed 's|Releases|nightly|')"
fi
LIBDIR="/usr/lib"
# some distros are weird and use a subdir
if [ ! -f "/usr/lib/libGL.so" ]
# Workaround for Gentoo
if [ ! -d "$LIBDIR/qt6" ]
then
LIBDIR="/usr/lib64"
fi
# Workaround for Debian
if [ ! -d "$LIBDIR/qt6" ]
then
LIBDIR="/usr/lib/${BASE_ARCH}-linux-gnu"
fi
# Bundle all libs
wget --retry-connrefused --tries=30 "$LIB4BN" -O ./lib4bin
chmod +x ./lib4bin
xvfb-run -a -- ./lib4bin -p -v -e -s -k \
../build/bin/eden* \
wget --retry-connrefused --tries=30 "$SHARUN" -O ./sharun-aio
chmod +x ./sharun-aio
xvfb-run -a ./sharun-aio l -p -v -e -s -k \
../$BUILDDIR/bin/eden* \
$LIBDIR/lib*GL*.so* \
$LIBDIR/libSDL2*.so* \
$LIBDIR/dri/* \
$LIBDIR/vdpau/* \
$LIBDIR/libvulkan* \
@ -83,14 +113,18 @@ xvfb-run -a -- ./lib4bin -p -v -e -s -k \
$LIBDIR/spa-0.2/*/* \
$LIBDIR/alsa-lib/*
rm -f ./sharun-aio
# Prepare sharun
if [ "$ARCH" = 'aarch64' ]; then
# allow the host vulkan to be used for aarch64 given the sed situation
# allow the host vulkan to be used for aarch64 given the sad situation
echo 'SHARUN_ALLOW_SYS_VKICD=1' > ./.env
fi
wget https://github.com/VHSgunzo/sharun/releases/download/v0.6.3/sharun-x86_64 -O sharun
chmod a+x sharun
# Workaround for Gentoo
if [ -d "shared/libproxy" ]; then
cp shared/libproxy/* lib/
fi
ln -f ./sharun ./AppRun
./sharun -g
@ -117,8 +151,3 @@ echo "Generating AppImage..."
echo "Generating zsync file..."
zsyncmake *.AppImage -u *.AppImage
echo "All Done!"
# Cleanup
rm -rf AppDir
rm uruntime

11
.ci/translate.sh Executable file
View file

@ -0,0 +1,11 @@
#!/bin/sh
for i in dist/languages/*.ts; do
SRC=en_US
TARGET=`head -n1 $i | awk -F 'language="' '{split($2, a, "\""); print a[1]}'`
# requires fd
SOURCES=`fd . src/yuzu -tf -e ui -e cpp -e h -e plist`
lupdate -source-language $SRC -target-language $TARGET $SOURCES -ts /data/code/eden/$i
done

View file

@ -1,27 +0,0 @@
echo off
set chain=%1
if not defined DevEnvDir (
"C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Auxiliary\Build\vcvarsall.bat" %chain%
)
mkdir build
cmake -S . -B build\%chain% ^
-DCMAKE_BUILD_TYPE=Release ^
-DYUZU_USE_BUNDLED_QT=ON ^
-DENABLE_QT_TRANSLATION=ON ^
-DUSE_DISCORD_PRESENCE=ON ^
-DYUZU_USE_BUNDLED_VCPKG=ON ^
-DYUZU_USE_BUNDLED_SDL2=ON ^
-G "Ninja" ^
-DYUZU_TESTS=OFF ^
-DCMAKE_C_COMPILER_LAUNCHER=ccache ^
-DCMAKE_CXX_COMPILER_LAUNCHER=ccache ^
-DCMAKE_TOOLCHAIN_FILE="%CD%\CMakeModules\MSVCCache.cmake" ^
-DUSE_CCACHE=ON
cmake --build build\%chain%
ccache -s -v

View file

@ -1,31 +0,0 @@
echo off
set chain=%1
set qt_ver=%2
if not defined DevEnvDir (
CALL "C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Auxiliary\Build\vcvarsall.bat" %chain%
)
CALL mkdir build
CALL cmake -S . -B build\%chain% ^
-DCMAKE_BUILD_TYPE=Release ^
-DYUZU_USE_BUNDLED_QT=ON ^
-DENABLE_QT_TRANSLATION=ON ^
-DUSE_DISCORD_PRESENCE=ON ^
-DYUZU_USE_BUNDLED_VCPKG=ON ^
-DYUZU_USE_BUNDLED_SDL2=ON ^
-G "Ninja" ^
-DYUZU_TESTS=OFF ^
-DUSE_BUNDLED_QT=OFF ^
-DUSE_SYSTEM_QT=ON ^
-DCMAKE_PREFIX_PATH=C:\Qt\%qt_ver%\msvc2022_64 ^
-DCMAKE_C_COMPILER_LAUNCHER=ccache ^
-DCMAKE_CXX_COMPILER_LAUNCHER=ccache ^
-DCMAKE_TOOLCHAIN_FILE="%CD%\CMakeModules\MSVCCache.cmake" ^
-DUSE_CCACHE=ON
CALL cmake --build build\%chain%
CALL ccache -s -v

65
.ci/windows/build.sh Normal file
View file

@ -0,0 +1,65 @@
#!/bin/bash -e
# SPDX-FileCopyrightText: 2025 eden Emulator Project
# SPDX-License-Identifier: GPL-3.0-or-later
if [ "$DEVEL" != "true" ]; then
export EXTRA_CMAKE_FLAGS=("${EXTRA_CMAKE_FLAGS[@]}" -DENABLE_QT_UPDATE_CHECKER=ON)
fi
if [ "$CCACHE" = "true" ]; then
export EXTRA_CMAKE_FLAGS=("${EXTRA_CMAKE_FLAGS[@]}" -DUSE_CCACHE=ON)
fi
if [ "$BUNDLE_QT" = "true" ]; then
export EXTRA_CMAKE_FLAGS=("${EXTRA_CMAKE_FLAGS[@]}" -DYUZU_USE_BUNDLED_QT=ON)
else
export EXTRA_CMAKE_FLAGS=("${EXTRA_CMAKE_FLAGS[@]}" -DYUZU_USE_BUNDLED_QT=OFF)
fi
if [ -z "$BUILD_TYPE" ]; then
export BUILD_TYPE="Release"
fi
if [ "$WINDEPLOYQT" == "" ]; then
echo "You must supply the WINDEPLOYQT environment variable."
exit 1
fi
if [ "$USE_WEBENGINE" = "true" ]; then
WEBENGINE=ON
else
WEBENGINE=OFF
fi
if [ "$USE_MULTIMEDIA" = "false" ]; then
MULTIMEDIA=OFF
else
MULTIMEDIA=ON
fi
export EXTRA_CMAKE_FLAGS=("${EXTRA_CMAKE_FLAGS[@]}" $@)
mkdir -p build && cd build
cmake .. -G Ninja \
-DCMAKE_BUILD_TYPE="$BUILD_TYPE" \
-DENABLE_QT_TRANSLATION=ON \
-DUSE_DISCORD_PRESENCE=ON \
-DYUZU_USE_BUNDLED_SDL2=OFF \
-DYUZU_USE_EXTERNAL_SDL2=ON \
-DYUZU_TESTS=OFF \
-DYUZU_CMD=OFF \
-DYUZU_ROOM_STANDALONE=OFF \
-DYUZU_USE_QT_MULTIMEDIA=$MULTIMEDIA \
-DYUZU_USE_QT_WEB_ENGINE=$WEBENGINE \
-DYUZU_ENABLE_LTO=ON \
"${EXTRA_CMAKE_FLAGS[@]}"
ninja
set +e
rm -f bin/*.pdb
set -e
$WINDEPLOYQT --release --no-compiler-runtime --no-opengl-sw --no-system-dxc-compiler --no-system-d3d-compiler --dir pkg bin/eden.exe
cp bin/* pkg

View file

@ -1,19 +0,0 @@
echo off
call C:\tools\cygwin\cygwinsetup.exe -q -P autoconf,automake,libtool,make,pkg-config
REM Create wrapper batch files for Cygwin tools in a directory that will be in PATH
REM uncomment this for first-run only
REM call mkdir C:\cygwin-wrappers
REM Create autoconf.bat wrapper
call echo @echo off > C:\cygwin-wrappers\autoconf.bat
call echo C:\tools\cygwin\bin\bash.exe -l -c "autoconf %%*" >> C:\cygwin-wrappers\autoconf.bat
REM Add other wrappers if needed for other Cygwin tools
call echo @echo off > C:\cygwin-wrappers\automake.bat
call echo C:\tools\cygwin\bin\bash.exe -l -c "automake %%*" >> C:\cygwin-wrappers\automake.bat
REM Add the wrappers directory to PATH
call echo C:\cygwin-wrappers>>"%GITHUB_PATH%"
call echo C:\tools\cygwin\bin>>"%GITHUB_PATH%"

View file

@ -3,7 +3,7 @@
$ErrorActionPreference = "Stop"
$VulkanSDKVer = "1.3.250.1"
$VulkanSDKVer = "1.4.321.1"
$ExeFile = "VulkanSDK-$VulkanSDKVer-Installer.exe"
$Uri = "https://sdk.lunarg.com/sdk/download/$VulkanSDKVer/windows/$ExeFile"
$Destination = "./$ExeFile"

View file

@ -1,42 +0,0 @@
# SPDX-FileCopyrightText: 2025 eden Emulator Project
# SPDX-License-Identifier: GPL-3.0-or-later
$target=$args[0]
$debug=$args[1]
$GITDATE = $(git show -s --date=short --format='%ad') -replace "-", ""
$GITREV = $(git show -s --format='%h')
$RELEASE_DIST = "eden-windows-msvc"
$ARTIFACTS_DIR = "artifacts"
New-Item -ItemType Directory -Path $ARTIFACTS_DIR -Force
New-Item -ItemType Directory -Path $RELEASE_DIST -Force
if ($debug -eq "yes") {
mkdir -p pdb
$BUILD_PDB = "eden-windows-msvc-$GITDATE-$GITREV-debugsymbols.zip"
Get-ChildItem "build/$target/bin/" -Recurse -Filter "*.pdb" | Copy-Item -destination .\pdb -ErrorAction SilentlyContinue
if (Test-Path -Path ".\pdb\*.pdb") {
7z a -tzip $BUILD_PDB .\pdb\*.pdb
Move-Item $BUILD_PDB $ARTIFACTS_DIR/ -ErrorAction SilentlyContinue
}
} else {
Remove-Item -Force "$RELEASE_DIST\*.pdb"
}
Copy-Item "build/$target/bin/Release/*" -Destination "$RELEASE_DIST" -Recurse -ErrorAction SilentlyContinue
if (-not $?) {
# Try without Release subfolder if that doesn't exist
Copy-Item "build/$target/bin/*" -Destination "$RELEASE_DIST" -Recurse -ErrorAction SilentlyContinue
}
$BUILD_ZIP = "eden-windows-msvc-$GITDATE-$GITREV.zip"
7z a -tzip $BUILD_ZIP $RELEASE_DIST\*
Move-Item $BUILD_ZIP $ARTIFACTS_DIR/ -Force #-ErrorAction SilentlyContinue
Copy-Item "LICENSE*" -Destination "$RELEASE_DIST" -ErrorAction SilentlyContinue
Copy-Item "README*" -Destination "$RELEASE_DIST" -ErrorAction SilentlyContinue

13
.ci/windows/package.sh Normal file
View file

@ -0,0 +1,13 @@
GITDATE=$(git show -s --date=short --format='%ad' | tr -d "-")
GITREV=$(git show -s --format='%h')
ZIP_NAME="Eden-Windows-${ARCH}-${GITDATE}-${GITREV}.zip"
mkdir -p artifacts
mkdir -p pack
cp -r build/pkg/* pack
cp LICENSE* README* pack/
7z a -tzip artifacts/$ZIP_NAME pack/*

View file

@ -2,26 +2,27 @@
# some stuff needs cleaned up etc
name: eden-build
on:
push:
branches: [ "master" ]
pull_request:
branches: [ master ]
#on:
# push:
# branches: [ "master" ]
# TODO: combine build.yml into trigger_release.yml
jobs:
source:
if: ${{ !github.head_ref }}
runs-on: linux
runs-on: source
steps:
- uses: actions/checkout@v4
with:
submodules: recursive
- name: Pack
run: ./.ci/source.sh
- name: Upload
uses: forgejo/upload-artifact@v4
with:
retention-days: 2
name: source.zip
path: artifacts/
@ -66,17 +67,21 @@ jobs:
run: ./.ci/windows/cygwin.bat
- name: Configure & Build
id: cmake
shell: cmd
run: ./.ci/windows/build-bqt.bat amd64 yes
shell: bash
run: |
./.ci/windows/qt-envvars.sh
DEVEL=true WINDEPLOYQT="/c/Qt/6.9.0/msvc2022_64/bin/windeployqt6.exe" .ci/windows/build.sh -DCMAKE_PREFIX_PATH=C:/Qt/6.9.0/msvc2022_64/lib/cmake/Qt6
- name: Package artifacts
shell: powershell
run: ./.ci/windows/package.ps1 amd64 yes
shell: bash
run: |
./.ci/windows/qt-envvars.sh
./.ci/windows/package.sh
- name: Upload Windows artifacts
uses: forgejo/upload-artifact@v4
with:
retention-days: 2
name: ${{ matrix.target }}.zip
path: artifacts/*
@ -96,14 +101,15 @@ jobs:
fetch-tags: true
- name: Build
run: ./.ci/linux/build.sh v3 8
run: TARGET=appimage DEVEL=true ./.ci/linux/build.sh
- name: Package AppImage
run: ./.ci/linux/package.sh v3 &> /dev/null
run: DEVEL=true ./.ci/linux/package.sh &> /dev/null
- name: Upload Linux artifacts
uses: forgejo/upload-artifact@v4
with:
retention-days: 3
name: linux.zip
path: ./*.AppImage
@ -111,9 +117,6 @@ jobs:
runs-on: android
env:
CCACHE_DIR: /home/runner/.cache/ccache
CCACHE_COMPILERCHECK: content
CCACHE_SLOPPINESS: time_macros
OS: android
TARGET: universal
@ -132,7 +135,11 @@ jobs:
echo $GIT_TAG_NAME
- name: Build
run: ANDROID_HOME=/opt/android-sdk ./.ci/android/build.sh
run: ANDROID_HOME=/home/runner/sdk ./.ci/android/build.sh
env:
ANDROID_KEYSTORE_B64: ${{ secrets.ANDROID_KEYSTORE_B64 }}
ANDROID_KEY_ALIAS: ${{ secrets.ANDROID_KEY_ALIAS }}
ANDROID_KEYSTORE_PASS: ${{ secrets.ANDROID_KEYSTORE_PASS }}
- name: Package Android artifacts
run: ./.ci/android/package.sh
@ -140,5 +147,6 @@ jobs:
- name: Upload Android artifacts
uses: forgejo/upload-artifact@v4
with:
retention-days: 2
name: android.zip
path: artifacts/*

View file

@ -1,22 +1,22 @@
name: eden-license
on:
pull_request_target:
pull_request:
branches: [ master ]
jobs:
license-header:
runs-on: linux
runs-on: source
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Fetch master branch
- name: Fetch
run: git fetch origin master:master
- name: Make script executable
run: chmod +x ./.ci/license-header.rb
run: chmod +x ./.ci/license-header.sh
- name: Check license headers
run: ./.ci/license-header.rb
run: ./.ci/license-header.sh

View file

@ -1,15 +1,15 @@
name: Build Application and Make Release
on:
push:
tags: [ "*" ]
#on:
# push:
# tags: [ "*" ]
permissions:
contents: write
jobs:
source:
runs-on: linux
runs-on: source
steps:
- uses: actions/checkout@v4
with:
@ -19,6 +19,7 @@ jobs:
- name: Upload
uses: forgejo/upload-artifact@v4
with:
retention-days: 2
name: source.zip
path: artifacts/
@ -63,17 +64,19 @@ jobs:
run: ./.ci/windows/cygwin.bat
- name: Configure & Build
id: cmake
shell: cmd
run: ./.ci/windows/build-bqt.bat amd64 no
shell: bash
run: DEVEL=false ./.ci/windows/build.sh
- name: Package artifacts
shell: powershell
run: ./.ci/windows/package.ps1 amd64 no
shell: bash
run: |
export PATH="${PATH}:/c/Qt/6.9.0/msvc2022_64/bin"
./.ci/windows/package.sh
- name: Upload Windows artifacts
uses: forgejo/upload-artifact@v4
with:
retention-days: 2
name: ${{ matrix.target }}.zip
path: artifacts/*
@ -93,7 +96,7 @@ jobs:
fetch-tags: true
- name: Build
run: ./.ci/linux/build.sh v3 8
run: TARGET=appimage RELEASE=1 ./.ci/linux/build.sh v3 8
- name: Package AppImage
run: ./.ci/linux/package.sh v3 &> /dev/null
@ -101,6 +104,7 @@ jobs:
- name: Upload Linux artifacts
uses: forgejo/upload-artifact@v4
with:
retention-days: 2
name: linux.zip
path: ./*.AppImage*
@ -129,7 +133,11 @@ jobs:
echo $GIT_TAG_NAME
- name: Build
run: ANDROID_HOME=/opt/android-sdk ./.ci/android/build.sh
run: ANDROID_HOME=/home/runner/sdk ./.ci/android/build.sh
env:
ANDROID_KEYSTORE_B64: ${{ secrets.ANDROID_KEYSTORE_B64 }}
ANDROID_KEY_ALIAS: ${{ secrets.ANDROID_KEY_ALIAS }}
ANDROID_KEYSTORE_PASS: ${{ secrets.ANDROID_KEYSTORE_PASS }}
- name: Package Android artifacts
run: ./.ci/android/package.sh
@ -137,6 +145,7 @@ jobs:
- name: Upload Android artifacts
uses: forgejo/upload-artifact@v4
with:
retention-days: 2
name: android.zip
path: artifacts/*

18
.gitignore vendored
View file

@ -1,9 +1,14 @@
# SPDX-FileCopyrightText: 2013 Citra Emulator Project
# SPDX-License-Identifier: GPL-2.0-or-later
# SPDX-FileCopyrightText: Eden Emulator Project
# SPDX-License-Identifier: GPL-3.0-or-later
# Build directory
[Bb]uild*/
/[Bb]uild*/
doc-build/
AppDir/
uruntime
# Generated source files
src/common/scm_rev.cpp
@ -14,14 +19,21 @@ dist/english_plurals/generated_en.ts
.idea/
.vs/
.vscode/
.cache/
profile.json.gz
CMakeLists.txt.user*
# kdevelop
.kdev4/
*.kdev4
# *nix related
# Common convention for backup or temporary files
*~
# Visual Studio CMake settings
CMakeSettings.json
.cache/
# OSX global filetypes
# Created by Finder or Spotlight in directories for various OS functionality (indexing, etc)
@ -36,3 +48,7 @@ CMakeSettings.json
# Windows global filetypes
Thumbs.db
# Artifacts
eden-windows-msvc
artifacts
*.AppImage*

85
.gitmodules vendored
View file

@ -1,75 +1,60 @@
# SPDX-FileCopyrightText: 2014 Citra Emulator Project
# SPDX-License-Identifier: GPL-2.0-or-later
[submodule "enet"]
path = externals/enet
url = https://git.eden-emu.dev/eden-emu/enet.git
[submodule "cubeb"]
path = externals/cubeb
url = https://git.eden-emu.dev/eden-emu/cubeb.git
[submodule "dynarmic"]
path = externals/dynarmic
url = https://git.eden-emu.dev/eden-emu/dynarmic.git
url = https://github.com/mozilla/cubeb.git
[submodule "libusb"]
path = externals/libusb/libusb
url = https://git.eden-emu.dev/eden-emu/libusb.git
[submodule "discord-rpc"]
path = externals/discord-rpc
url = https://git.eden-emu.dev/eden-emu/discord-rpc.git
url = https://github.com/libusb/libusb.git
[submodule "Vulkan-Headers"]
path = externals/Vulkan-Headers
url = https://git.eden-emu.dev/eden-emu/Vulkan-Headers.git
[submodule "sirit"]
path = externals/sirit
url = https://git.eden-emu.dev/eden-emu/sirit.git
[submodule "mbedtls"]
path = externals/mbedtls
url = https://git.eden-emu.dev/eden-emu/mbedtls.git
url = https://github.com/KhronosGroup/Vulkan-Headers.git
[submodule "xbyak"]
path = externals/xbyak
url = https://git.eden-emu.dev/eden-emu/xbyak.git
url = https://github.com/Lizzie841/xbyak.git
[submodule "opus"]
path = externals/opus
url = https://git.eden-emu.dev/eden-emu/opus.git
[submodule "SDL"]
path = externals/SDL
url = https://git.eden-emu.dev/eden-emu/SDL.git
url = https://github.com/xiph/opus.git
[submodule "cpp-httplib"]
path = externals/cpp-httplib
url = https://git.eden-emu.dev/eden-emu/cpp-httplib.git
[submodule "ffmpeg"]
path = externals/ffmpeg/ffmpeg
url = https://git.eden-emu.dev/eden-emu/FFmpeg.git
url = https://github.com/yhirose/cpp-httplib.git
[submodule "vcpkg"]
path = externals/vcpkg
url = https://git.eden-emu.dev/eden-emu/vcpkg.git
url = https://github.com/microsoft/vcpkg.git
[submodule "cpp-jwt"]
path = externals/cpp-jwt
url = https://git.eden-emu.dev/eden-emu/cpp-jwt.git
[submodule "libadrenotools"]
path = externals/libadrenotools
url = https://git.eden-emu.dev/eden-emu/libadrenotools.git
[submodule "tzdb_to_nx"]
path = externals/nx_tzdb/tzdb_to_nx
url = https://git.eden-emu.dev/eden-emu/tzdb_to_nx.git
url = https://github.com/arun11299/cpp-jwt.git
[submodule "VulkanMemoryAllocator"]
path = externals/VulkanMemoryAllocator
url = https://git.eden-emu.dev/eden-emu/VulkanMemoryAllocator.git
[submodule "breakpad"]
path = externals/breakpad
url = https://git.eden-emu.dev/eden-emu/breakpad.git
[submodule "simpleini"]
path = externals/simpleini
url = https://git.eden-emu.dev/eden-emu/simpleini.git
[submodule "oaknut"]
path = externals/oaknut
url = https://git.eden-emu.dev/eden-emu/oaknut.git
url = https://github.com/GPUOpen-LibrariesAndSDKs/VulkanMemoryAllocator.git
[submodule "Vulkan-Utility-Libraries"]
path = externals/Vulkan-Utility-Libraries
url = https://git.eden-emu.dev/eden-emu/Vulkan-Utility-Libraries.git
[submodule "oboe"]
path = externals/oboe
url = https://git.eden-emu.dev/eden-emu/oboe.git
url = https://github.com/KhronosGroup/Vulkan-Utility-Libraries.git
[submodule "externals/boost-headers"]
path = externals/boost-headers
url = https://git.eden-emu.dev/eden-emu/headers.git
url = https://github.com/boostorg/headers.git
[submodule "externals/dynarmic/externals/catch"]
path = externals/dynarmic/externals/catch
url = https://github.com/catchorg/Catch2.git
[submodule "externals/dynarmic/externals/fmt"]
path = externals/dynarmic/externals/fmt
url = https://github.com/fmtlib/fmt.git
[submodule "externals/dynarmic/externals/unordered_dense"]
path = externals/dynarmic/externals/unordered_dense
url = https://github.com/Lizzie841/unordered_dense.git
[submodule "externals/dynarmic/externals/zycore-c"]
path = externals/dynarmic/externals/zycore-c
url = https://github.com/zyantific/zycore-c.git
[submodule "externals/dynarmic/externals/zydis"]
path = externals/dynarmic/externals/zydis
url = https://github.com/zyantific/zydis.git
[submodule "externals/nx_tzdb/tzdb_to_nx/externals/tz/tz"]
path = externals/nx_tzdb/tzdb_to_nx/externals/tz/tz
url = https://github.com/eggert/tz.git
[submodule "externals/sirit/externals/SPIRV-Headers"]
path = externals/sirit/externals/SPIRV-Headers
url = https://github.com/KhronosGroup/SPIRV-Headers.git
[submodule "externals/SPIRV-Tools"]
path = externals/SPIRV-Tools
url = https://github.com/KhronosGroup/SPIRV-Tools.git

View file

@ -0,0 +1,80 @@
diff --git a/quazip/quazipdir.cpp b/quazip/quazipdir.cpp
index d43f1c1..eb24bf1 100644
--- a/quazip/quazipdir.cpp
+++ b/quazip/quazipdir.cpp
@@ -293,8 +293,8 @@ bool QuaZipDirComparator::operator()(const QuaZipFileInfo64 &info1,
}
template<typename TFileInfoList>
-bool QuaZipDirPrivate::entryInfoList(QStringList nameFilters,
- QDir::Filters filter, QDir::SortFlags sort, TFileInfoList &result) const
+bool QuaZipDirPrivate::entryInfoList(QStringList _nameFilters,
+ QDir::Filters _filter, QDir::SortFlags sort, TFileInfoList &result) const
{
QString basePath = simplePath();
if (!basePath.isEmpty())
@@ -305,12 +305,12 @@ bool QuaZipDirPrivate::entryInfoList(QStringList nameFilters,
if (!zip->goToFirstFile()) {
return zip->getZipError() == UNZ_OK;
}
- QDir::Filters fltr = filter;
+ QDir::Filters fltr = _filter;
if (fltr == QDir::NoFilter)
fltr = this->filter;
if (fltr == QDir::NoFilter)
fltr = QDir::AllEntries;
- QStringList nmfltr = nameFilters;
+ QStringList nmfltr = _nameFilters;
if (nmfltr.isEmpty())
nmfltr = this->nameFilters;
QSet<QString> dirsFound;
diff --git a/quazip/quazipfile.cpp b/quazip/quazipfile.cpp
index 4a5f2f9..f7865f5 100644
--- a/quazip/quazipfile.cpp
+++ b/quazip/quazipfile.cpp
@@ -241,14 +241,14 @@ void QuaZipFile::setFileName(const QString& fileName, QuaZip::CaseSensitivity cs
p->caseSensitivity=cs;
}
-void QuaZipFilePrivate::setZipError(int zipError) const
+void QuaZipFilePrivate::setZipError(int _zipError) const
{
QuaZipFilePrivate *fakeThis = const_cast<QuaZipFilePrivate*>(this); // non-const
- fakeThis->zipError=zipError;
- if(zipError==UNZ_OK)
+ fakeThis->zipError = _zipError;
+ if(_zipError == UNZ_OK)
q->setErrorString(QString());
else
- q->setErrorString(QuaZipFile::tr("ZIP/UNZIP API error %1").arg(zipError));
+ q->setErrorString(QuaZipFile::tr("ZIP/UNZIP API error %1").arg(_zipError));
}
bool QuaZipFile::open(OpenMode mode)
diff --git a/quazip/unzip.c b/quazip/unzip.c
index a39365d..ee7b487 100644
--- a/quazip/unzip.c
+++ b/quazip/unzip.c
@@ -1054,7 +1054,7 @@ local int unz64local_GetCurrentFileInfoInternal (unzFile file,
/* ZIP64 extra fields */
if (headerId == 0x0001)
{
- uLong uL;
+ uLong _uL;
if(file_info.uncompressed_size == (ZPOS64_T)0xFFFFFFFFu)
{
@@ -1078,7 +1078,7 @@ local int unz64local_GetCurrentFileInfoInternal (unzFile file,
if(file_info.disk_num_start == 0xFFFFFFFFu)
{
/* Disk Start Number */
- if (unz64local_getLong(&s->z_filefunc, s->filestream,&uL) != UNZ_OK)
+ if (unz64local_getLong(&s->z_filefunc, s->filestream, &_uL) != UNZ_OK)
err=UNZ_ERRNO;
}
@@ -2151,3 +2151,4 @@ int ZEXPORT unzClearFlags(unzFile file, unsigned flags)
s->flags &= ~flags;
return UNZ_OK;
}
+

View file

@ -0,0 +1,26 @@
diff --git a/quazip/minizip_crypt.h b/quazip/minizip_crypt.h
index 2e833f7..ea9d277 100644
--- a/quazip/minizip_crypt.h
+++ b/quazip/minizip_crypt.h
@@ -90,13 +90,14 @@ static void init_keys(const char* passwd,unsigned long* pkeys,const z_crc_t FAR
# define ZCR_SEED2 3141592654UL /* use PI as default pattern */
# endif
-static int crypthead(passwd, buf, bufSize, pkeys, pcrc_32_tab, crcForCrypting)
- const char *passwd; /* password string */
- unsigned char *buf; /* where to write header */
- int bufSize;
- unsigned long* pkeys;
- const z_crc_t FAR * pcrc_32_tab;
- unsigned long crcForCrypting;
+static int crypthead(
+ const char *passwd, /* password string */
+ unsigned char *buf, /* where to write header */
+ int bufSize,
+ unsigned long* pkeys,
+ const z_crc_t FAR * pcrc_32_tab,
+ unsigned long crcForCrypting
+)
{
int n; /* index in random header */
int t; /* temporary */

View file

@ -0,0 +1,19 @@
diff --git a/quazip/zip.c b/quazip/zip.c
index 7788b88..f4e21aa 100644
--- a/quazip/zip.c
+++ b/quazip/zip.c
@@ -645,6 +645,14 @@ local ZPOS64_T zip64local_SearchCentralDir64(const zlib_filefunc64_32_def* pzlib
return relativeOffset;
}
+// compilers hate this ONE SIMPLE TRICK!
+static int LoadCentralDirectoryRecord(zip64_internal* pziinit);
+static int Write_LocalFileHeader(zip64_internal* zi, const char* filename, uInt size_extrafield_local, const void* extrafield_local, uLong version_to_extract);
+static int Write_Zip64EndOfCentralDirectoryLocator(zip64_internal* zi, ZPOS64_T zip64eocd_pos_inzip);
+static int Write_Zip64EndOfCentralDirectoryRecord(zip64_internal* zi, uLong size_centraldir, ZPOS64_T centraldir_pos_inzip);
+static int Write_EndOfCentralDirectoryRecord(zip64_internal* zi, uLong size_centraldir, ZPOS64_T centraldir_pos_inzip);
+static int Write_GlobalComment(zip64_internal* zi, const char* global_comment);
+
int LoadCentralDirectoryRecord(zip64_internal* pziinit)
{
int err=ZIP_OK;

View file

@ -0,0 +1,400 @@
"Debloats" QuaZip by removing some unneeded stuff (Qt <6, bzip2, emscripten...)
This is completely optional.
diff --git a/CMakeLists.txt b/CMakeLists.txt
index b376fb2..4aac4ec 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -3,64 +3,16 @@ cmake_minimum_required(VERSION 3.15...3.18)
project(QuaZip VERSION 1.5)
-include(cmake/clone-repo.cmake)
-
set(QUAZIP_LIB_VERSION ${QuaZip_VERSION})
set(QUAZIP_LIB_SOVERSION 1.5.0)
-if(EMSCRIPTEN)
- #option(ZLIB_INCLUDE "Path to include dir" "")
- #option(ZLIB_LIBRARY "Path to library dir" "")
- option(BUILD_SHARED_LIBS "" OFF)
- option(QUAZIP_INSTALL "" OFF)
- option(QUAZIP_USE_QT_ZLIB "" OFF)
- option(QUAZIP_ENABLE_TESTS "Build QuaZip tests" OFF)
-else()
- option(BUILD_SHARED_LIBS "" ON)
- option(QUAZIP_INSTALL "" ON)
- option(QUAZIP_USE_QT_ZLIB "" OFF)
- option(QUAZIP_ENABLE_TESTS "Build QuaZip tests" OFF)
-endif()
+option(BUILD_SHARED_LIBS "" ON)
+option(QUAZIP_INSTALL "" ON)
+option(QUAZIP_ENABLE_TESTS "Build QuaZip tests" OFF)
OPTION(ZLIB_CONST "Sets ZLIB_CONST preprocessor definition" OFF)
-# Make BZIP2 optional
-option(QUAZIP_BZIP2 "Enables BZIP2 compression" ON)
-option(QUAZIP_BZIP2_STDIO "Output BZIP2 errors to stdio" ON)
-
-option(QUAZIP_FETCH_LIBS "Enables fetching third-party libraries if not found" ${WIN32})
-option(QUAZIP_FORCE_FETCH_LIBS "Enables fetching third-party libraries always" OFF)
-
-if (QUAZIP_USE_QT_ZLIB AND BUILD_SHARED_LIBS)
- message(FATAL_ERROR "Using BUILD_SHARED_LIBS=ON together with QUAZIP_USE_QT_ZLIB=ON is not supported." )
-endif()
-
-# Set the default value of `${QUAZIP_QT_MAJOR_VERSION}`.
-# We search quietly for Qt6, Qt5 and Qt4 in that order.
-# Qt6 and Qt5 provide config files for CMake.
-# Qt4 relies on `FindQt4.cmake`.
-find_package(
- QT NAMES Qt6 Qt5
- QUIET COMPONENTS Core
-)
-if (NOT QT_FOUND)
- find_package(Qt4 QUIET COMPONENTS QtCore)
- if (Qt4_FOUND)
- set(QT_VERSION_MAJOR 4)
- else()
- # If neither 6, 5 nor 4 are found, we default to 5.
- # The setup will fail further down.
- set(QT_VERSION_MAJOR 5)
- endif()
-endif()
-
-set(QUAZIP_QT_MAJOR_VERSION ${QT_VERSION_MAJOR} CACHE STRING "Qt version to use (4, 5 or 6), defaults to ${QT_VERSION_MAJOR}")
-
-if (QUAZIP_QT_MAJOR_VERSION EQUAL 6)
- set(CMAKE_CXX_STANDARD 17)
-else()
- set(CMAKE_CXX_STANDARD 14)
-endif()
+set(CMAKE_CXX_STANDARD 17)
if(NOT CMAKE_BUILD_TYPE)
set(CMAKE_BUILD_TYPE RELEASE)
@@ -77,92 +29,17 @@ set(QUAZIP_LIB_TARGET_NAME QuaZip)
set(QUAZIP_DIR_NAME QuaZip-Qt${QUAZIP_QT_MAJOR_VERSION}-${QUAZIP_LIB_VERSION})
set(QUAZIP_PACKAGE_NAME QuaZip-Qt${QUAZIP_QT_MAJOR_VERSION})
-message(STATUS "QUAZIP_QT_MAJOR_VERSION set to ${QUAZIP_QT_MAJOR_VERSION}")
-message(STATUS "CMAKE_CXX_STANDARD set to ${CMAKE_CXX_STANDARD}")
-
-if(QUAZIP_QT_MAJOR_VERSION EQUAL 6)
- find_package(Qt6 REQUIRED COMPONENTS Core Core5Compat
- OPTIONAL_COMPONENTS Network Test)
- message(STATUS "Found Qt version ${Qt6_VERSION} at ${Qt6_DIR}")
- set(QUAZIP_QT_ZLIB_COMPONENT BundledZLIB)
- set(QUAZIP_QT_ZLIB_HEADER_COMPONENT ZlibPrivate)
- set(QUAZIP_LIB_LIBRARIES Qt6::Core Qt6::Core5Compat)
- set(QUAZIP_TEST_QT_LIBRARIES Qt6::Core Qt6::Core5Compat Qt6::Network Qt6::Test)
- set(QUAZIP_PKGCONFIG_REQUIRES "zlib, Qt6Core")
-elseif(QUAZIP_QT_MAJOR_VERSION EQUAL 5)
- find_package(Qt5 REQUIRED COMPONENTS Core
- OPTIONAL_COMPONENTS Network Test)
- message(STATUS "Found Qt version ${Qt5_VERSION} at ${Qt5_DIR}")
- set(QUAZIP_QT_ZLIB_COMPONENT Zlib)
- set(QUAZIP_LIB_LIBRARIES Qt5::Core)
- set(QUAZIP_TEST_QT_LIBRARIES Qt5::Core Qt5::Network Qt5::Test)
- set(QUAZIP_PKGCONFIG_REQUIRES "zlib, Qt5Core")
-elseif(QUAZIP_QT_MAJOR_VERSION EQUAL 4)
- find_package(Qt4 4.5.0 REQUIRED COMPONENTS QtCore
- OPTIONAL_COMPONENTS QtNetwork QtTest)
- set(QUAZIP_QT_ZLIB_COMPONENT Zlib)
- set(QUAZIP_LIB_LIBRARIES Qt4::QtCore)
- set(QUAZIP_TEST_QT_LIBRARIES Qt4::QtCore Qt4::QtNetwork Qt4::QtTest)
- set(QUAZIP_PKGCONFIG_REQUIRES "zlib, QtCore")
-else()
- message(FATAL_ERROR "Qt version ${QUAZIP_QT_MAJOR_VERSION} is not supported")
-endif()
-
-message(STATUS "Using Qt version ${QUAZIP_QT_MAJOR_VERSION}")
-
-set(QUAZIP_QT_ZLIB_USED OFF)
-if(QUAZIP_USE_QT_ZLIB)
- find_package(Qt${QUAZIP_QT_MAJOR_VERSION} OPTIONAL_COMPONENTS ${QUAZIP_QT_ZLIB_COMPONENT})
- set(QUAZIP_QT_ZLIB_COMPONENT_FOUND Qt${QUAZIP_QT_MAJOR_VERSION}${QUAZIP_QT_ZLIB_COMPONENT}_FOUND)
- if (DEFINED QUAZIP_QT_ZLIB_HEADER_COMPONENT)
- find_package(Qt${QUAZIP_QT_MAJOR_VERSION} OPTIONAL_COMPONENTS ${QUAZIP_QT_ZLIB_HEADER_COMPONENT})
- set(QUAZIP_QT_ZLIB_HEADER_COMPONENT_FOUND Qt${QUAZIP_QT_MAJOR_VERSION}${QUAZIP_QT_ZLIB_HEADER_COMPONENT}_FOUND)
- else()
- set(QUAZIP_QT_ZLIB_HEADER_COMPONENT_FOUND ON)
- endif()
- if(QUAZIP_QT_ZLIB_COMPONENT_FOUND AND QUAZIP_QT_ZLIB_HEADER_COMPONENT_FOUND)
- message(STATUS "Qt component ${QUAZIP_QT_ZLIB_COMPONENT} found")
- set(QUAZIP_LIB_LIBRARIES ${QUAZIP_LIB_LIBRARIES} Qt${QUAZIP_QT_MAJOR_VERSION}::${QUAZIP_QT_ZLIB_COMPONENT})
- if(DEFINED QUAZIP_QT_ZLIB_HEADER_COMPONENT)
- message(STATUS "Qt component ${QUAZIP_QT_ZLIB_HEADER_COMPONENT} found")
- set(QUAZIP_LIB_LIBRARIES ${QUAZIP_LIB_LIBRARIES} Qt${QUAZIP_QT_MAJOR_VERSION}::${QUAZIP_QT_ZLIB_HEADER_COMPONENT})
- endif()
- set(QUAZIP_QT_ZLIB_USED ON)
- else()
- message(FATAL_ERROR "QUAZIP_USE_QT_ZLIB was set but bundled zlib was not found. Terminating to prevent accidental linking to system libraries.")
- endif()
-endif()
-
-if(QUAZIP_QT_ZLIB_USED AND QUAZIP_QT_ZLIB_COMPONENT STREQUAL BundledZLIB)
- # Qt's new BundledZLIB uses z-prefix in zlib
- add_compile_definitions(Z_PREFIX)
-endif()
-
-if(NOT QUAZIP_QT_ZLIB_USED)
-
- if(EMSCRIPTEN)
- if(NOT DEFINED ZLIB_LIBRARY)
- message(WARNING "ZLIB_LIBRARY is not set")
- endif()
+find_package(Qt6 REQUIRED COMPONENTS Core Core5Compat
+ OPTIONAL_COMPONENTS Network Test)
+message(STATUS "Found Qt version ${Qt6_VERSION} at ${Qt6_DIR}")
+set(QUAZIP_QT_ZLIB_COMPONENT BundledZLIB)
+set(QUAZIP_QT_ZLIB_HEADER_COMPONENT ZlibPrivate)
+set(QUAZIP_LIB_LIBRARIES Qt6::Core Qt6::Core5Compat)
+set(QUAZIP_TEST_QT_LIBRARIES Qt6::Core Qt6::Core5Compat Qt6::Network Qt6::Test)
+set(QUAZIP_PKGCONFIG_REQUIRES "zlib, Qt6Core")
- if(NOT DEFINED ZLIB_INCLUDE)
- message(WARNING "ZLIB_INCLUDE is not set")
- else()
- include_directories(${ZLIB_INCLUDE})
- endif()
-
- if(NOT DEFINED ZCONF_INCLUDE)
- message(WARNING "ZCONF_INCLUDE is not set")
- else()
- include_directories(${ZCONF_INCLUDE})
- endif()
-
- set(QUAZIP_LIB_LIBRARIES ${QUAZIP_LIB_LIBRARIES} ${ZLIB_LIBRARY})
- else()
- find_package(ZLIB REQUIRED)
- set(QUAZIP_LIB_LIBRARIES ${QUAZIP_LIB_LIBRARIES} ZLIB::ZLIB)
- endif()
-endif()
+find_package(ZLIB REQUIRED)
+set(QUAZIP_LIB_LIBRARIES ${QUAZIP_LIB_LIBRARIES} ZLIB::ZLIB)
if (ZLIB_CONST)
add_compile_definitions(ZLIB_CONST)
@@ -173,65 +50,4 @@ set(QUAZIP_INC)
set(QUAZIP_LIB)
set(QUAZIP_LBD)
-if(QUAZIP_BZIP2)
- # Check if bzip2 is present
- set(QUAZIP_BZIP2 ON)
-
- if(NOT QUAZIP_FORCE_FETCH_LIBS)
- find_package(BZip2 QUIET)
- endif()
-
- if(BZIP2_FOUND AND NOT QUAZIP_FORCE_FETCH_LIBS)
- message(STATUS "Using BZIP2 ${BZIP2_VERSION_STRING}")
-
- list(APPEND QUAZIP_INC ${BZIP2_INCLUDE_DIRS})
- list(APPEND QUAZIP_LIB ${BZIP2_LIBRARIES})
- list(APPEND QUAZIP_LBD ${BZIP2_LIBRARY_DIRS})
-
- set(PC_PRIVATE_LIBS "${PC_PRIVATE_LIBS} -lbzip2")
- elseif(QUAZIP_FETCH_LIBS)
- clone_repo(bzip2 https://sourceware.org/git/bzip2.git)
-
- # BZip2 repository does not support cmake so we have to create
- # the bzip2 library ourselves
- set(BZIP2_SRC
- ${BZIP2_SOURCE_DIR}/blocksort.c
- ${BZIP2_SOURCE_DIR}/bzlib.c
- ${BZIP2_SOURCE_DIR}/compress.c
- ${BZIP2_SOURCE_DIR}/crctable.c
- ${BZIP2_SOURCE_DIR}/decompress.c
- ${BZIP2_SOURCE_DIR}/huffman.c
- ${BZIP2_SOURCE_DIR}/randtable.c)
-
- set(BZIP2_HDR
- ${BZIP2_SOURCE_DIR}/bzlib.h
- ${BZIP2_SOURCE_DIR}/bzlib_private.h)
-
- add_library(bzip2 STATIC ${BZIP2_SRC} ${BZIP2_HDR})
-
- if(NOT QUAZIP_BZIP2_STDIO)
- target_compile_definitions(bzip2 PRIVATE -DBZ_NO_STDIO)
- endif()
-
- list(APPEND QUAZIP_DEP bzip2)
- list(APPEND QUAZIP_LIB bzip2)
- list(APPEND QUAZIP_INC ${BZIP2_SOURCE_DIR})
- else()
- message(STATUS "BZip2 library not found")
-
- set(QUAZIP_BZIP2 OFF)
- endif()
-
- if(QUAZIP_BZIP2)
- find_package(BZip2)
- add_compile_definitions(HAVE_BZIP2)
- endif()
-endif()
-
add_subdirectory(quazip)
-
-if(QUAZIP_ENABLE_TESTS)
- message(STATUS "Building QuaZip tests")
- enable_testing()
- add_subdirectory(qztest)
-endif()
diff --git a/quazip/CMakeLists.txt b/quazip/CMakeLists.txt
index 6cfdf4e..66bc4cb 100644
--- a/quazip/CMakeLists.txt
+++ b/quazip/CMakeLists.txt
@@ -46,10 +46,6 @@ set(QUAZIP_INCLUDE_PATH ${QUAZIP_DIR_NAME}/quazip)
set(QUAZIP_INSTALL_CONFIGDIR ${CMAKE_INSTALL_LIBDIR}/cmake)
set(QUAZIP_PKGCONFIG_NAME quazip${QuaZip_VERSION_MAJOR}-qt${QUAZIP_QT_MAJOR_VERSION})
-if(EMSCRIPTEN)
- set(BUILD_SHARED_LIBS OFF)
-endif()
-
add_library(${QUAZIP_LIB_TARGET_NAME} ${QUAZIP_SOURCES})
add_library(QuaZip::QuaZip ALIAS ${QUAZIP_LIB_TARGET_NAME})
diff --git a/quazip/quazip_qt_compat.h b/quazip/quazip_qt_compat.h
index 0dde011..41f9dd1 100644
--- a/quazip/quazip_qt_compat.h
+++ b/quazip/quazip_qt_compat.h
@@ -14,16 +14,11 @@
// Legacy encodings are still everywhere, but the Qt team decided we
// don't need them anymore and moved them out of Core in Qt 6.
-#if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0)
-# include <QtCore5Compat/QTextCodec>
-#else
-# include <QtCore/QTextCodec>
-#endif
+#include <QtCore5Compat/QTextCodec>
// QSaveFile terribly breaks the is-a idiom (Liskov substitution principle):
// QSaveFile is-a QIODevice, but it makes close() private and aborts
// if you call it through the base class. Hence this ugly hack:
-#if (QT_VERSION >= 0x050100)
#include <QtCore/QSaveFile>
inline bool quazip_close(QIODevice *device) {
QSaveFile *file = qobject_cast<QSaveFile*>(device);
@@ -34,74 +29,35 @@ inline bool quazip_close(QIODevice *device) {
device->close();
return true;
}
-#else
-inline bool quazip_close(QIODevice *device) {
- device->close();
- return true;
-}
-#endif
-// this is yet another stupid move and deprecation
-#if QT_VERSION >= QT_VERSION_CHECK(5, 15, 0)
using Qt::SkipEmptyParts;
-#else
-#include <QtCore/QString>
-const auto SkipEmptyParts = QString::SplitBehavior::SkipEmptyParts;
-#endif
// and yet another... (why didn't they just make qSort delegate to std::sort?)
#include <QtCore/QList>
-#if (QT_VERSION >= QT_VERSION_CHECK(5, 2, 0))
#include <algorithm>
template<typename T, typename C>
inline void quazip_sort(T begin, T end, C comparator) {
std::sort(begin, end, comparator);
}
-#else
-#include <QtCore/QtAlgorithms>
-template<typename T, typename C>
-inline void quazip_sort(T begin, T end, C comparator) {
- qSort(begin, end, comparator);
-}
-#endif
// this is a stupid rename...
#include <QtCore/QDateTime>
#include <QtCore/QFileInfo>
-#if (QT_VERSION >= QT_VERSION_CHECK(5, 10, 0))
inline QDateTime quazip_ctime(const QFileInfo &fi) {
return fi.birthTime();
}
-#else
-inline QDateTime quazip_ctime(const QFileInfo &fi) {
- return fi.created();
-}
-#endif
// this is just a slightly better alternative
#include <QtCore/QFileInfo>
-#if (QT_VERSION >= QT_VERSION_CHECK(5, 14, 0))
inline bool quazip_is_symlink(const QFileInfo &fi) {
return fi.isSymbolicLink();
}
-#else
-inline bool quazip_is_symlink(const QFileInfo &fi) {
- // also detects *.lnk on Windows, but better than nothing
- return fi.isSymLink();
-}
-#endif
// I'm not even sure what this one is, but nevertheless
#include <QtCore/QFileInfo>
-#if (QT_VERSION >= QT_VERSION_CHECK(5, 13, 0))
inline QString quazip_symlink_target(const QFileInfo &fi) {
return fi.symLinkTarget();
}
-#else
-inline QString quazip_symlink_target(const QFileInfo &fi) {
- return fi.readLink(); // What's the difference? I've no idea.
-}
-#endif
// deprecation
#if QT_VERSION >= QT_VERSION_CHECK(6, 8, 0)
@@ -125,40 +81,19 @@ inline QDateTime quazip_since_epoch_ntfs() {
// this is not a deprecation but an improvement, for a change
#include <QtCore/QDateTime>
-#if (QT_VERSION >= 0x040700)
inline quint64 quazip_ntfs_ticks(const QDateTime &time, int fineTicks) {
QDateTime base = quazip_since_epoch_ntfs();
return base.msecsTo(time) * 10000 + fineTicks;
}
-#else
-inline quint64 quazip_ntfs_ticks(const QDateTime &time, int fineTicks) {
- QDateTime base = quazip_since_epoch_ntfs();
- QDateTime utc = time.toUTC();
- return (static_cast<qint64>(base.date().daysTo(utc.date()))
- * Q_INT64_C(86400000)
- + static_cast<qint64>(base.time().msecsTo(utc.time())))
- * Q_INT64_C(10000) + fineTicks;
-}
-#endif
// yet another improvement...
#include <QtCore/QDateTime>
-#if QT_VERSION >= QT_VERSION_CHECK(5, 8, 0) // Yay! Finally a way to get time as qint64!
inline qint64 quazip_to_time64_t(const QDateTime &time) {
return time.toSecsSinceEpoch();
}
-#else
-inline qint64 quazip_to_time64_t(const QDateTime &time) {
- return static_cast<qint64>(time.toTime_t()); // 32 bits only, but better than nothing
-}
-#endif
#include <QtCore/QTextStream>
-// and another stupid move
-#if QT_VERSION >= QT_VERSION_CHECK(5, 15, 0)
const auto quazip_endl = Qt::endl;
-#else
-const auto quazip_endl = endl;
-#endif
#endif // QUAZIP_QT_COMPAT_H
+

View file

@ -1,4 +1,4 @@
# SPDX-FileCopyrightText: Copyright yuzu/Citra Emulator Project / Eden Emulator Project
# SPDX-FileCopyrightText: Copyright 2025 Eden Emulator Project
# SPDX-License-Identifier: GPL-3.0-or-later
cmake_minimum_required(VERSION 3.22)
@ -17,6 +17,10 @@ if (MSVC)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /W3 /WX-")
endif()
if (${CMAKE_SYSTEM_NAME} STREQUAL "FreeBSD")
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -L/usr/local/lib")
endif()
# Check if SDL2::SDL2 target exists; if not, create an alias
if (TARGET SDL2::SDL2-static)
add_library(SDL2::SDL2 ALIAS SDL2::SDL2-static)
@ -25,49 +29,88 @@ elseif (TARGET SDL2::SDL2-shared)
endif()
# Set bundled sdl2/qt as dependent options.
# On Linux system SDL2 is likely to be lacking HIDAPI support which have drawbacks but is needed for SDL motion
option(ENABLE_SDL2 "Enable the SDL2 frontend" ON)
CMAKE_DEPENDENT_OPTION(YUZU_USE_BUNDLED_SDL2 "Download bundled SDL2 binaries" ON "ENABLE_SDL2;MSVC" OFF)
# On Linux system SDL2 is likely to be lacking HIDAPI support which have drawbacks but is needed for SDL motion
CMAKE_DEPENDENT_OPTION(YUZU_USE_EXTERNAL_SDL2 "Compile external SDL2" ON "ENABLE_SDL2;NOT MSVC" OFF)
if (${CMAKE_SYSTEM_NAME} STREQUAL "FreeBSD")
CMAKE_DEPENDENT_OPTION(YUZU_USE_EXTERNAL_SDL2 "Compile external SDL2" OFF "ENABLE_SDL2;NOT MSVC" OFF)
else()
CMAKE_DEPENDENT_OPTION(YUZU_USE_EXTERNAL_SDL2 "Compile external SDL2" ON "ENABLE_SDL2;NOT MSVC" OFF)
endif()
cmake_dependent_option(ENABLE_LIBUSB "Enable the use of LibUSB" ON "NOT ANDROID" OFF)
option(ENABLE_OPENGL "Enable OpenGL" ON)
mark_as_advanced(FORCE ENABLE_OPENGL)
option(ENABLE_QT "Enable the Qt frontend" ON)
option(ENABLE_QT "Enable the Qt frontend" ON)
option(ENABLE_QT_TRANSLATION "Enable translations for the Qt frontend" OFF)
option(ENABLE_QT_UPDATE_CHECKER "Enable update checker for the Qt frontend" OFF)
CMAKE_DEPENDENT_OPTION(YUZU_USE_BUNDLED_QT "Download bundled Qt binaries" "${MSVC}" "ENABLE_QT" OFF)
option(ENABLE_WEB_SERVICE "Enable web services (telemetry, etc.)" ON)
option(ENABLE_WIFI_SCAN "Enable WiFi scanning" OFF)
option(YUZU_USE_BUNDLED_FFMPEG "Download/Build bundled FFmpeg" "${WIN32}")
if (${CMAKE_SYSTEM_NAME} STREQUAL "FreeBSD")
option(YUZU_USE_BUNDLED_FFMPEG "Download/Build bundled FFmpeg" OFF)
else()
option(YUZU_USE_BUNDLED_FFMPEG "Download/Build bundled FFmpeg" ON)
endif()
option(YUZU_USE_EXTERNAL_VULKAN_HEADERS "Use Vulkan-Headers from externals" ON)
if (${CMAKE_SYSTEM_NAME} STREQUAL "FreeBSD")
option(YUZU_USE_EXTERNAL_VULKAN_HEADERS "Use Vulkan-Headers from externals" OFF)
else()
option(YUZU_USE_EXTERNAL_VULKAN_HEADERS "Use Vulkan-Headers from externals" ON)
endif()
option(YUZU_USE_EXTERNAL_VULKAN_UTILITY_LIBRARIES "Use Vulkan-Utility-Libraries from externals" ON)
if (${CMAKE_SYSTEM_NAME} STREQUAL "FreeBSD")
option(YUZU_USE_EXTERNAL_VULKAN_UTILITY_LIBRARIES "Use Vulkan-Utility-Libraries from externals" OFF)
else()
option(YUZU_USE_EXTERNAL_VULKAN_UTILITY_LIBRARIES "Use Vulkan-Utility-Libraries from externals" ON)
endif()
if (${CMAKE_SYSTEM_NAME} STREQUAL "FreeBSD")
option(YUZU_USE_EXTERNAL_VULKAN_SPIRV_TOOLS "Use SPIRV-Tools from externals" OFF)
else()
option(YUZU_USE_EXTERNAL_VULKAN_SPIRV_TOOLS "Use SPIRV-Tools from externals" ON)
endif()
option(YUZU_USE_QT_MULTIMEDIA "Use QtMultimedia for Camera" OFF)
option(YUZU_USE_QT_WEB_ENGINE "Use QtWebEngine for web applet implementation" OFF)
set(YUZU_QT_MIRROR "" CACHE STRING "What mirror to use for downloading the bundled Qt libraries")
option(ENABLE_CUBEB "Enables the cubeb audio backend" ON)
option(USE_DISCORD_PRESENCE "Enables Discord Rich Presence" OFF)
option(YUZU_TESTS "Compile tests" "${BUILD_TESTING}")
option(YUZU_USE_PRECOMPILED_HEADERS "Use precompiled headers" ON)
if (${CMAKE_SYSTEM_NAME} STREQUAL "FreeBSD")
option(YUZU_USE_PRECOMPILED_HEADERS "Use precompiled headers" OFF)
else()
option(YUZU_USE_PRECOMPILED_HEADERS "Use precompiled headers" ON)
endif()
option(YUZU_DOWNLOAD_ANDROID_VVL "Download validation layer binary for android" ON)
CMAKE_DEPENDENT_OPTION(YUZU_ROOM "Compile LDN room server" ON "NOT ANDROID" OFF)
CMAKE_DEPENDENT_OPTION(YUZU_ROOM "Enable dedicated room functionality" ON "NOT ANDROID" OFF)
CMAKE_DEPENDENT_OPTION(YUZU_ROOM_STANDALONE "Enable standalone room executable" ON "YUZU_ROOM" OFF)
CMAKE_DEPENDENT_OPTION(YUZU_CMD "Compile the eden-cli executable" ON "NOT ANDROID" OFF)
CMAKE_DEPENDENT_OPTION(YUZU_CRASH_DUMPS "Compile crash dump (Minidump) support" OFF "WIN32 OR LINUX" OFF)
option(YUZU_USE_BUNDLED_VCPKG "Use vcpkg for yuzu dependencies" "${MSVC}")
option(YUZU_CHECK_SUBMODULES "Check if submodules are present" ON)
if (${CMAKE_SYSTEM_NAME} STREQUAL "FreeBSD")
option(YUZU_CHECK_SUBMODULES "Check if submodules are present" OFF)
else()
option(YUZU_CHECK_SUBMODULES "Check if submodules are present" ON)
endif()
option(YUZU_ENABLE_LTO "Enable link-time optimization" OFF)
@ -80,7 +123,7 @@ CMAKE_DEPENDENT_OPTION(YUZU_USE_FASTER_LD "Check if a faster linker is available
CMAKE_DEPENDENT_OPTION(USE_SYSTEM_MOLTENVK "Use the system MoltenVK lib (instead of the bundled one)" OFF "APPLE" OFF)
set(DEFAULT_ENABLE_OPENSSL ON)
if (ANDROID OR WIN32 OR APPLE)
if (ANDROID OR WIN32 OR APPLE OR ${CMAKE_SYSTEM_NAME} STREQUAL "SunOS")
set(DEFAULT_ENABLE_OPENSSL OFF)
endif()
option(ENABLE_OPENSSL "Enable OpenSSL backend for ISslConnection" ${DEFAULT_ENABLE_OPENSSL})
@ -141,7 +184,7 @@ if (YUZU_USE_BUNDLED_VCPKG)
set(VCPKG_DOWNLOADS_PATH ${PROJECT_SOURCE_DIR}/externals/vcpkg/downloads)
set(NASM_VERSION "2.16.01")
set(NASM_DESTINATION_PATH ${VCPKG_DOWNLOADS_PATH}/nasm-${NASM_VERSION}-win64.zip)
set(NASM_DOWNLOAD_URL "https://git.eden-emu.dev/eden-emu/ext-windows-bin/raw/master/nasm/nasm-${NASM_VERSION}-win64.zip")
set(NASM_DOWNLOAD_URL "https://github.com/eden-emulator/ext-windows-bin/raw/master/nasm/nasm-${NASM_VERSION}-win64.zip")
if (NOT EXISTS ${NASM_DESTINATION_PATH})
file(DOWNLOAD ${NASM_DOWNLOAD_URL} ${NASM_DESTINATION_PATH} SHOW_PROGRESS STATUS NASM_STATUS)
@ -285,6 +328,45 @@ if (ARCHITECTURE_arm64 AND (ANDROID OR ${CMAKE_SYSTEM_NAME} STREQUAL "Linux"))
add_definitions(-DHAS_NCE=1)
endif()
if (YUZU_ROOM)
add_definitions(-DYUZU_ROOM)
endif()
# Build/optimization presets
if (${CMAKE_SYSTEM_NAME} STREQUAL "Linux")
if (ARCHITECTURE_x86_64)
set(YUZU_BUILD_PRESET "generic" CACHE STRING "Build preset to use. One of: generic, v3, zen2, zen4, native")
if (${YUZU_BUILD_PRESET} STREQUAL "generic")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -march=x86-64 -mtune=generic")
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -march=x86-64 -mtune=generic")
elseif (${YUZU_BUILD_PRESET} STREQUAL "v3")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -march=x86-64-v3 -mtune=generic")
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -march=x86-64-v3 -mtune=generic")
elseif (${YUZU_BUILD_PRESET} STREQUAL "zen2")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -march=znver2 -mtune=znver2")
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -march=znver2 -mtune=znver2")
elseif (${YUZU_BUILD_PRESET} STREQUAL "zen4")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -march=znver4 -mtune=znver4")
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -march=znver4 -mtune=znver4")
elseif (${YUZU_BUILD_PRESET} STREQUAL "native")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -march=native -mtune=native")
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -march=native -mtune=native")
endif()
elseif(ARCHITECTURE_arm64)
set(YUZU_BUILD_PRESET "generic" CACHE STRING "Build preset to use. One of: generic, armv9")
if (${YUZU_BUILD_PRESET} STREQUAL "generic")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -march=armv8-a -mtune=generic")
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -march=armv8-a -mtune=generic")
elseif (${YUZU_BUILD_PRESET} STREQUAL "armv9")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -march=armv9-a -mtune=generic")
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -march=armv9-a -mtune=generic")
endif()
endif()
endif()
# Other presets, e.g. steamdeck
set(YUZU_SYSTEM_PROFILE "generic" CACHE STRING "CMake and Externals profile to use. One of: generic, steamdeck")
# Configure C++ standard
# ===========================
@ -299,8 +381,8 @@ set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/bin)
# Enforce the search mode of non-required packages for better and shorter failure messages
find_package(enet 1.3 MODULE)
find_package(fmt 10 REQUIRED)
find_package(LLVM 17.0.2 MODULE COMPONENTS Demangle)
find_package(fmt 8 REQUIRED)
find_package(LLVM MODULE COMPONENTS Demangle)
find_package(lz4 REQUIRED)
find_package(nlohmann_json 3.8 REQUIRED)
find_package(Opus 1.3 MODULE)
@ -319,8 +401,17 @@ if (NOT YUZU_USE_EXTERNAL_VULKAN_UTILITY_LIBRARIES)
find_package(VulkanUtilityLibraries REQUIRED)
endif()
if (NOT YUZU_USE_EXTERNAL_VULKAN_SPIRV_TOOLS)
find_package(PkgConfig REQUIRED)
pkg_check_modules(SPIRV-Tools REQUIRED SPIRV-Tools)
endif()
if (ENABLE_LIBUSB)
find_package(libusb 1.0.24 MODULE)
if (${CMAKE_SYSTEM_NAME} STREQUAL "FreeBSD")
find_package(libusb MODULE)
else()
find_package(libusb 1.0.24 MODULE)
endif()
endif()
if (ARCHITECTURE_x86 OR ARCHITECTURE_x86_64)
@ -345,6 +436,9 @@ endif()
if (ENABLE_WEB_SERVICE)
find_package(cpp-jwt 1.4 CONFIG)
endif()
if (ENABLE_WEB_SERVICE OR ENABLE_QT_UPDATE_CHECKER)
find_package(httplib 0.12 MODULE COMPONENTS OpenSSL)
endif()
@ -356,21 +450,17 @@ if(ENABLE_OPENSSL)
find_package(OpenSSL 1.1.1 REQUIRED)
endif()
if (UNIX AND NOT APPLE)
if (CMAKE_SYSTEM_NAME STREQUAL "Linux" OR ANDROID)
find_package(gamemode 1.7 MODULE)
endif()
# Please consider this as a stub
if(ENABLE_QT6 AND Qt6_LOCATION)
list(APPEND CMAKE_PREFIX_PATH "${Qt6_LOCATION}")
endif()
# find SDL2 exports a bunch of variables that are needed, so its easier to do this outside of the YUZU_find_package
# TODO(crueter): combine this all with CPM.
if (ENABLE_SDL2)
if (YUZU_USE_BUNDLED_SDL2)
# Detect toolchain and platform
if ((MSVC_VERSION GREATER_EQUAL 1920) AND ARCHITECTURE_x86_64)
set(SDL2_VER "SDL2-2.32.6")
set(SDL2_VER "SDL2-2.32.8")
else()
message(FATAL_ERROR "No bundled SDL2 binaries for your toolchain. Disable YUZU_USE_BUNDLED_SDL2 and provide your own.")
endif()
@ -394,15 +484,33 @@ if (ENABLE_SDL2)
endif()
endif()
# List of all FFmpeg components required
set(FFmpeg_COMPONENTS
avcodec
avfilter
avutil
swscale)
set(CPM_SOURCE_CACHE ${CMAKE_SOURCE_DIR}/.cache/cpm)
add_subdirectory(externals)
if (ENABLE_QT)
if (NOT USE_SYSTEM_QT)
if (YUZU_USE_BUNDLED_QT)
download_qt(6.8.3)
else()
message(STATUS "Using system Qt")
if (NOT Qt6_DIR)
set(Qt6_DIR "" CACHE PATH "Additional path to search for Qt6 libraries like C:/Qt/6.8.3/msvc2022_64/lib/cmake/Qt6")
endif()
list(APPEND CMAKE_PREFIX_PATH "${Qt6_DIR}")
endif()
find_package(Qt6 REQUIRED COMPONENTS Widgets Multimedia Concurrent)
find_package(Qt6 REQUIRED COMPONENTS Widgets Concurrent)
if (YUZU_USE_QT_MULTIMEDIA)
find_package(Qt6 REQUIRED COMPONENTS Multimedia)
endif()
if (UNIX AND NOT APPLE)
find_package(Qt6 REQUIRED COMPONENTS DBus)
@ -426,6 +534,7 @@ if (ENABLE_QT)
if (NOT DEFINED QT_HOST_PATH)
set(QT_HOST_PATH "${QT_TARGET_PATH}")
endif()
message(STATUS "Using target Qt at ${QT_TARGET_PATH}")
message(STATUS "Using host Qt at ${QT_HOST_PATH}")
endif()
@ -451,20 +560,14 @@ function(set_yuzu_qt_components)
set(YUZU_QT_COMPONENTS ${YUZU_QT_COMPONENTS2} PARENT_SCOPE)
endfunction(set_yuzu_qt_components)
# List of all FFmpeg components required
set(FFmpeg_COMPONENTS
avcodec
avfilter
avutil
swscale)
if (UNIX AND NOT APPLE AND NOT ANDROID)
find_package(PkgConfig REQUIRED)
pkg_check_modules(LIBVA libva)
endif()
if (NOT YUZU_USE_BUNDLED_FFMPEG)
# Use system installed FFmpeg
find_package(FFmpeg 4.3 REQUIRED QUIET COMPONENTS ${FFmpeg_COMPONENTS})
#find_package(FFmpeg 4.3 REQUIRED QUIET COMPONENTS ${FFmpeg_COMPONENTS})
find_package(FFmpeg REQUIRED QUIET COMPONENTS ${FFmpeg_COMPONENTS})
endif()
if(ENABLE_QT)
@ -498,6 +601,8 @@ if (APPLE)
# Umbrella framework for everything GUI-related
find_library(COCOA_LIBRARY Cocoa)
set(PLATFORM_LIBRARIES ${COCOA_LIBRARY} ${IOKIT_LIBRARY} ${COREVIDEO_LIBRARY})
find_library(ICONV_LIBRARY iconv REQUIRED)
list(APPEND PLATFORM_LIBRARIES ${ICONV_LIBRARY})
elseif (WIN32)
# Target Windows 10
add_definitions(-D_WIN32_WINNT=0x0A00 -DWINVER=0x0A00)
@ -525,7 +630,7 @@ if (NOT CLANG_FORMAT)
message(STATUS "Clang format not found! Downloading...")
set(CLANG_FORMAT "${PROJECT_BINARY_DIR}/externals/clang-format${CLANG_FORMAT_POSTFIX}.exe")
file(DOWNLOAD
https://git.eden-emu.dev/eden-emu/ext-windows-bin/raw/master/clang-format${CLANG_FORMAT_POSTFIX}.exe
https://github.com/eden-emulator/ext-windows-bin/raw/master/clang-format${CLANG_FORMAT_POSTFIX}.exe
"${CLANG_FORMAT}" SHOW_PROGRESS
STATUS DOWNLOAD_SUCCESS)
if (NOT DOWNLOAD_SUCCESS EQUAL 0)
@ -641,13 +746,14 @@ endif()
# https://specifications.freedesktop.org/shared-mime-info-spec/shared-mime-info-spec-latest.html
# https://www.freedesktop.org/software/appstream/docs/
if(ENABLE_QT AND UNIX AND NOT APPLE)
install(FILES "dist/org.yuzu_emu.yuzu.desktop"
install(FILES "dist/org.eden_emu.eden.desktop"
DESTINATION "share/applications")
install(FILES "dist/eden.svg"
DESTINATION "share/icons/hicolor/scalable/apps"
RENAME "org.yuzu_emu.eden.svg")
install(FILES "dist/org.yuzu_emu.yuzu.xml"
install(FILES "dist/org.eden_emu.eden.svg"
DESTINATION "share/icons/hicolor/scalable/apps")
# TODO: these files need to be updated.
install(FILES "dist/org.eden_emu.eden.xml"
DESTINATION "share/mime/packages")
install(FILES "dist/org.yuzu_emu.yuzu.metainfo.xml"
install(FILES "dist/org.eden_emu.eden.metainfo.xml"
DESTINATION "share/metainfo")
endif()

24
CMakeModules/CPM.cmake Normal file
View file

@ -0,0 +1,24 @@
# SPDX-License-Identifier: MIT
#
# SPDX-FileCopyrightText: Copyright (c) 2019-2023 Lars Melchior and contributors
set(CPM_DOWNLOAD_VERSION 0.42.0)
set(CPM_HASH_SUM "2020b4fc42dba44817983e06342e682ecfc3d2f484a581f11cc5731fbe4dce8a")
if(CPM_SOURCE_CACHE)
set(CPM_DOWNLOAD_LOCATION "${CPM_SOURCE_CACHE}/cpm/CPM_${CPM_DOWNLOAD_VERSION}.cmake")
elseif(DEFINED ENV{CPM_SOURCE_CACHE})
set(CPM_DOWNLOAD_LOCATION "$ENV{CPM_SOURCE_CACHE}/cpm/CPM_${CPM_DOWNLOAD_VERSION}.cmake")
else()
set(CPM_DOWNLOAD_LOCATION "${CMAKE_BINARY_DIR}/cmake/CPM_${CPM_DOWNLOAD_VERSION}.cmake")
endif()
# Expand relative path. This is important if the provided path contains a tilde (~)
get_filename_component(CPM_DOWNLOAD_LOCATION ${CPM_DOWNLOAD_LOCATION} ABSOLUTE)
file(DOWNLOAD
https://github.com/cpm-cmake/CPM.cmake/releases/download/v${CPM_DOWNLOAD_VERSION}/CPM.cmake
${CPM_DOWNLOAD_LOCATION} EXPECTED_HASH SHA256=${CPM_HASH_SUM}
)
include(${CPM_DOWNLOAD_LOCATION})

View file

@ -1,4 +1,4 @@
# SPDX-FileCopyrightText: Copyright yuzu/Citra Emulator Project / Eden Emulator Project
# SPDX-FileCopyrightText: Copyright 2025 Eden Emulator Project
# SPDX-License-Identifier: GPL-3.0-or-later
# This function downloads a binary library package from our external repo.
@ -8,7 +8,7 @@
set(CURRENT_MODULE_DIR ${CMAKE_CURRENT_LIST_DIR})
function(download_bundled_external remote_path lib_name prefix_var)
set(package_base_url "https://git.eden-emu.dev/eden-emu/")
set(package_base_url "https://github.com/eden-emulator/")
set(package_repo "no_platform")
set(package_extension "no_platform")
if (WIN32)
@ -72,7 +72,7 @@ function(determine_qt_parameters target host_out type_out arch_out arch_path_out
elseif ("x86_64" IN_LIST ARCHITECTURE)
set(arch_path "msvc2022_64")
else()
message(FATAL_ERROR "Unsupported bundled Qt architecture. Enable USE_SYSTEM_QT and provide your own.")
message(FATAL_ERROR "Unsupported bundled Qt architecture. Disable YUZU_USE_BUNDLED_QT and provide your own.")
endif()
set(arch "win64_${arch_path}")
@ -83,7 +83,7 @@ function(determine_qt_parameters target host_out type_out arch_out arch_path_out
endif()
set(host_arch "win64_${host_arch_path}")
else()
message(FATAL_ERROR "Unsupported bundled Qt toolchain. Enable USE_SYSTEM_QT and provide your own.")
message(FATAL_ERROR "Unsupported bundled Qt toolchain. Disable YUZU_USE_BUNDLED_QT and provide your own.")
endif()
endif()
elseif (APPLE)
@ -94,7 +94,7 @@ function(determine_qt_parameters target host_out type_out arch_out arch_path_out
else()
set(host "linux")
set(type "desktop")
set(arch "gcc_64")
set(arch "linux_gcc_64")
set(arch_path "linux")
endif()
@ -133,12 +133,26 @@ function(download_qt_configuration prefix_out target host type arch arch_path ba
set(install_args ${install_args} install-tool --outputdir ${base_path} ${host} desktop ${target})
else()
set(prefix "${base_path}/${target}/${arch_path}")
set(install_args ${install_args} install-qt --outputdir ${base_path} ${host} ${type} ${target} ${arch} -m qt3d qt5compat qtactiveqt qtcharts qtconnectivity qtdatavis3d qtgraphs qtgrpc qthttpserver qtimageformats qtlanguageserver qtlocation qtlottie qtmultimedia qtnetworkauth qtpdf qtpositioning qtquick3d qtquick3dphysics qtquickeffectmaker qtquicktimeline qtremoteobjects qtscxml qtsensors qtserialbus qtserialport qtshadertools qtspeech qtvirtualkeyboard qtwebchannel qtwebengine qtwebsockets qtwebview)
set(install_args ${install_args} install-qt --outputdir ${base_path} ${host} ${type} ${target} ${arch} -m qt_base)
if (YUZU_USE_QT_MULTIMEDIA)
set(install_args ${install_args} qtmultimedia)
endif()
if (YUZU_USE_QT_WEB_ENGINE)
set(install_args ${install_args} qtpositioning qtwebchannel qtwebengine)
endif()
if (NOT ${YUZU_QT_MIRROR} STREQUAL "")
message(STATUS "Using Qt mirror ${YUZU_QT_MIRROR}")
set(install_args ${install_args} -b ${YUZU_QT_MIRROR})
endif()
endif()
message(STATUS "Install Args ${install_args}")
if (NOT EXISTS "${prefix}")
message(STATUS "Downloading Qt binaries for ${target}:${host}:${type}:${arch}:${arch_path}")
set(AQT_PREBUILD_BASE_URL "https://github.com/miurahr/aqtinstall/releases/download/v3.2.1")
set(AQT_PREBUILD_BASE_URL "https://github.com/miurahr/aqtinstall/releases/download/v3.3.0")
if (WIN32)
set(aqt_path "${base_path}/aqt.exe")
if (NOT EXISTS "${aqt_path}")

View file

@ -19,7 +19,7 @@ if (LLVM_FOUND AND LLVM_Demangle_FOUND AND NOT TARGET LLVM::Demangle)
target_include_directories(LLVM::Demangle INTERFACE ${LLVM_INCLUDE_DIRS})
# prefer shared LLVM: https://github.com/llvm/llvm-project/issues/34593
# but use ugly hack because llvm_config doesn't support interface library
add_library(_dummy_lib SHARED EXCLUDE_FROM_ALL src/yuzu/main.cpp)
add_library(_dummy_lib SHARED EXCLUDE_FROM_ALL ${CMAKE_SOURCE_DIR}/src/yuzu/main.cpp)
llvm_config(_dummy_lib USE_SHARED demangle)
get_target_property(LLVM_LIBRARIES _dummy_lib LINK_LIBRARIES)
target_link_libraries(LLVM::Demangle INTERFACE ${LLVM_LIBRARIES})

View file

@ -0,0 +1,29 @@
# SPDX-FileCopyrightText: Copyright 2025 Eden Emulator Project
# SPDX-License-Identifier: GPL-3.0-or-later
find_package(PkgConfig QUIET)
pkg_search_module(IW QUIET IMPORTED_TARGET iw)
include(FindPackageHandleStandardArgs)
find_package_handle_standard_args(Libiw
REQUIRED_VARS IW_LIBRARIES IW_INCLUDE_DIRS
VERSION_VAR IW_VERSION
FAIL_MESSAGE "libiw (Wireless Tools library) not found. Please install libiw-dev (Debian/Ubuntu), wireless-tools-devel (Fedora), wireless_tools (Arch), or net-wireless/iw (Gentoo)."
)
if (Libiw_FOUND AND TARGET PkgConfig::IW AND NOT TARGET iw::iw)
add_library(iw::iw ALIAS PkgConfig::IW)
endif()
if(Libiw_FOUND)
mark_as_advanced(
IW_INCLUDE_DIRS
IW_LIBRARIES
IW_LIBRARY_DIRS
IW_LINK_LIBRARIES # Often set by pkg-config
IW_LDFLAGS
IW_CFLAGS
IW_CFLAGS_OTHER
IW_VERSION
)
endif()

View file

@ -20,37 +20,19 @@ if (NOT GIT_BRANCH)
endif()
get_timestamp(BUILD_DATE)
# Generate cpp with Git revision from template
# Also if this is a CI build, add the build name (ie: Nightly, Canary) to the scm_rev file as well
set(REPO_NAME "")
set(BUILD_VERSION "0")
set(BUILD_ID ${DISPLAY_VERSION})
if (BUILD_REPOSITORY)
# regex capture the string nightly or canary into CMAKE_MATCH_1
string(REGEX MATCH "yuzu-emu/yuzu-?(.*)" OUTVAR ${BUILD_REPOSITORY})
if ("${CMAKE_MATCH_COUNT}" GREATER 0)
# capitalize the first letter of each word in the repo name.
string(REPLACE "-" ";" REPO_NAME_LIST ${CMAKE_MATCH_1})
foreach(WORD ${REPO_NAME_LIST})
string(SUBSTRING ${WORD} 0 1 FIRST_LETTER)
string(SUBSTRING ${WORD} 1 -1 REMAINDER)
string(TOUPPER ${FIRST_LETTER} FIRST_LETTER)
set(REPO_NAME "${REPO_NAME}${FIRST_LETTER}${REMAINDER}")
endforeach()
if (BUILD_TAG)
string(REGEX MATCH "${CMAKE_MATCH_1}-([0-9]+)" OUTVAR ${BUILD_TAG})
if (${CMAKE_MATCH_COUNT} GREATER 0)
set(BUILD_VERSION ${CMAKE_MATCH_1})
endif()
if (BUILD_VERSION)
# This leaves a trailing space on the last word, but we actually want that
# because of how it's styled in the title bar.
set(BUILD_FULLNAME "${REPO_NAME} ${BUILD_VERSION} ")
else()
set(BUILD_FULLNAME "")
endif()
endif()
endif()
git_get_exact_tag(GIT_TAG --tags)
if (GIT_TAG MATCHES "NOTFOUND")
set(BUILD_VERSION "${GIT_DESC}")
set(IS_DEV_BUILD true)
else()
set(BUILD_VERSION ${GIT_TAG})
set(IS_DEV_BUILD false)
endif()
# Generate cpp with Git revision from template
# Also if this is a CI build, add the build name (ie: Nightly, Canary) to the scm_rev file as well
set(REPO_NAME "Eden")
set(BUILD_ID ${GIT_BRANCH})
set(BUILD_FULLNAME "${REPO_NAME} ${BUILD_VERSION} ")
configure_file(scm_rev.cpp.in scm_rev.cpp @ONLY)

View file

@ -1,21 +1,21 @@
<!--
# SPDX-FileCopyrightText: Copyright 2025 Eden Emulator Project
# SPDX-License-Identifier: GPL-3.0-or-later
# SPDX-FileCopyrightText: 2018 yuzu Emulator Project
# SPDX-License-Identifier: GPL-2.0-or-later
# SPDX-FileCopyrightText: 2025 EDEN Emulator Project
# SPDX-License-Identifier: GPL-3.0-or-later
-->
<!-- lang: en-GB -->
<h1 align="center">
<br>
<a href="https://git.eden-emu.dev/eden-emu/eden"><img src="https://git.eden-emu.dev/eden-emu/eden/raw/branch/master/dist/qt_themes/default/icons/256x256/eden_named.png" alt="Eden" width="200"></a>
<a href="https://git.eden-emu.dev/eden-emu/eden"><img src="./dist/qt_themes/default/icons/256x256/eden_named.png" alt="Eden" width="200"></a>
<br>
<b>Eden</b>
<br>
</h1>
<h4 align="center"><b>Eden</b> is the world's most popular open-source Nintendo Switch emulator, forked from the Yuzu emulator — started by former Citron developer Camille LaVey and the Eden team.
<br>
<h4 align="center"><b>Eden</b> is an open-source Nintendo Switch emulator, forked from the Yuzu emulator — started by former Citron developer Camille LaVey and the Eden team.
It is written in C++ with portability in mind, and we actively maintain builds for Windows, Linux and Android.
</h4>
@ -42,29 +42,31 @@ The emulator is capable of running most commercial games at full speed, provided
A list of supported games will be available in future. Please be patient.
Check out our [website](https://eden-emulator.github.io) for the latest news on exciting features, monthly progress reports, and more!
Check out our [website](https://eden-emu.dev) for the latest news on exciting features, monthly progress reports, and more!
## Development
Most of the development happens on our Git server. It is also where [our central repository](https://git.eden-emu.dev/eden-emu/eden) is hosted. For development discussions, please join us on [Discord](https://discord.gg/ynGGJAN4Rx).
Most of the development happens on our Git server. It is also where [our central repository](https://git.eden-emu.dev/eden-emu/eden) is hosted. For development discussions, please join us on [Discord](https://discord.gg/edenemu).
If you would like to contribute, we are open to new developers and pull requests. Please ensure that your work is of a high standard and properly documented.
You can also contact any of the developers on Discord to learn more about the current state of the emulator.
## Building
* **Windows**: [Windows Building Guide](https://git.eden-emu.dev/eden-emu/eden/wiki/Building-for-Windows.-)
* **Linux**: [Linux Building Guide](https://git.eden-emu.dev/eden-emu/eden/wiki/Building-for-Linux.-)
* **Android**: [Android Building Guide](https://git.eden-emu.dev/eden-emu/eden/wiki/Building-for-Android.-)
* **Windows**: [Windows Building Guide](./docs/build/Windows.md)
* **Linux**: [Linux Building Guide](./docs/build/Linux.md)
* **Android**: [Android Building Guide](./docs/build/Android.md)
* **Solaris**: [Solaris Building Guide](./docs/build/Solaris.md)
* **FreeBSD**: [FreeBSD Building Guide](./docs/build/FreeBSD.md)
* **macOS**: [macOS Building Guide](./docs/build/macOS.md)
## Download
You will be able to download the latest releases from [here](https://git.eden-emu.dev/eden-emu/eden/releases), or with MEGA and Archive links provided on Discord.
You can download the latest releases from [here](https://github.com/eden-emulator/Releases/releases).
## Support
If you enjoy the project and would like to support us financially, please check out our developers' donation pages!
- [crueter/Camille](https://liberapay.com/crueter)
If you enjoy the project and would like to support us financially, please check out our developers' [donation pages](https://eden-emu.dev/donations.html)!
Any donations received will go towards things such as:
* Switch consoles to explore and reverse-engineer the hardware
@ -73,7 +75,7 @@ Any donations received will go towards things such as:
* Additional hardware (e.g. GPUs as needed to improve rendering support, other peripherals to add support for, etc.)
* CI Infrastructure
If you would prefer to support us in a different way, please join our [Discord](https://discord.gg/ynGGJAN4Rx), once public, and talk to Camille or any of our other developers.
If you would prefer to support us in a different way, please join our [Discord](https://discord.gg/edenemu) and talk to Camille or any of our other developers.
## License

BIN
dist/eden.icns vendored Normal file

Binary file not shown.

3616
dist/languages/ar.ts vendored

File diff suppressed because it is too large Load diff

3692
dist/languages/ca.ts vendored

File diff suppressed because it is too large Load diff

3992
dist/languages/cs.ts vendored

File diff suppressed because it is too large Load diff

4524
dist/languages/da.ts vendored

File diff suppressed because it is too large Load diff

3070
dist/languages/de.ts vendored

File diff suppressed because it is too large Load diff

4392
dist/languages/el.ts vendored

File diff suppressed because it is too large Load diff

2857
dist/languages/es.ts vendored

File diff suppressed because it is too large Load diff

8162
dist/languages/fi.ts vendored

File diff suppressed because it is too large Load diff

2820
dist/languages/fr.ts vendored

File diff suppressed because it is too large Load diff

2912
dist/languages/hu.ts vendored

File diff suppressed because it is too large Load diff

3724
dist/languages/id.ts vendored

File diff suppressed because it is too large Load diff

3065
dist/languages/it.ts vendored

File diff suppressed because it is too large Load diff

3209
dist/languages/ja_JP.ts vendored

File diff suppressed because it is too large Load diff

3190
dist/languages/ko_KR.ts vendored

File diff suppressed because it is too large Load diff

3186
dist/languages/nb.ts vendored

File diff suppressed because it is too large Load diff

3200
dist/languages/nl.ts vendored

File diff suppressed because it is too large Load diff

3373
dist/languages/pl.ts vendored

File diff suppressed because it is too large Load diff

2833
dist/languages/pt_BR.ts vendored

File diff suppressed because it is too large Load diff

2817
dist/languages/pt_PT.ts vendored

File diff suppressed because it is too large Load diff

2859
dist/languages/ru_RU.ts vendored

File diff suppressed because it is too large Load diff

4321
dist/languages/sv.ts vendored

File diff suppressed because it is too large Load diff

3273
dist/languages/tr_TR.ts vendored

File diff suppressed because it is too large Load diff

3239
dist/languages/uk.ts vendored

File diff suppressed because it is too large Load diff

3176
dist/languages/vi.ts vendored

File diff suppressed because it is too large Load diff

3175
dist/languages/vi_VN.ts vendored

File diff suppressed because it is too large Load diff

2818
dist/languages/zh_CN.ts vendored

File diff suppressed because it is too large Load diff

2816
dist/languages/zh_TW.ts vendored

File diff suppressed because it is too large Load diff

View file

@ -1,3 +1,6 @@
# SPDX-FileCopyrightText: 2025 Eden Emulator Project
# SPDX-License-Identifier: GPL-3.0-or-later
# SPDX-FileCopyrightText: 2018 yuzu Emulator Project
# SPDX-License-Identifier: GPL-2.0-or-later
@ -7,7 +10,7 @@ Type=Application
Name=eden
GenericName=Switch Emulator
Comment=Nintendo Switch video game console emulator
Icon=org.yuzu_emu.eden
Icon=org.eden_emu.eden
TryExec=eden
Exec=eden %f
Categories=Game;Emulator;Qt;

View file

Before

Width:  |  Height:  |  Size: 15 KiB

After

Width:  |  Height:  |  Size: 15 KiB

Before After
Before After

View file

@ -38,6 +38,18 @@ QPushButton#RendererStatusBarButton:!checked {
color: #0066ff;
}
QPushButton#RefreshButton {
color: #656565;
border: 1px solid transparent;
background-color: transparent;
padding: 0px 3px 0px 3px;
text-align: center;
}
QPushButton#RefreshButton:hover {
border: 1px solid #76797C;
}
QPushButton#GPUStatusBarButton {
color: #656565;
border: 1px solid transparent;

View file

@ -42,6 +42,18 @@ QPushButton#RendererStatusBarButton:!checked {
color: #00ccdd;
}
QPushButton#RefreshButton {
color: #656565;
border: 1px solid transparent;
background-color: transparent;
padding: 0px 3px 0px 3px;
text-align: center;
}
QPushButton#RefreshButton:hover {
border: 1px solid #76797C;
}
QPushButton#GPUStatusBarButton {
color: #656565;
border: 1px solid transparent;

View file

@ -1283,6 +1283,19 @@ QPushButton#RendererStatusBarButton:!checked {
color: #00ccdd;
}
QPushButton#RefreshButton {
min-width: 0px;
color: #656565;
border: 1px solid transparent;
background-color: transparent;
padding: 0px 3px 0px 3px;
text-align: center;
}
QPushButton#RefreshButton:hover {
border: 1px solid #76797C;
}
QPushButton#GPUStatusBarButton {
min-width: 0px;
color: #656565;

View file

@ -2186,6 +2186,19 @@ QPushButton#RendererStatusBarButton:!checked {
color: #00ccdd;
}
QPushButton#RefreshButton {
min-width: 0px;
color: #656565;
border: 1px solid transparent;
background-color: transparent;
padding: 0px 3px 0px 3px;
text-align: center;
}
QPushButton#RefreshButton:hover {
border: 1px solid #76797C;
}
QPushButton#GPUStatusBarButton {
min-width: 0px;
color: #656565;

174
docs/Development.md Normal file
View file

@ -0,0 +1,174 @@
# Development
* **Windows**: [Windows Building Guide](./docs/build/Windows.md)
* **Linux**: [Linux Building Guide](./docs/build/Linux.md)
* **Android**: [Android Building Guide](./docs/build/Android.md)
* **Solaris**: [Solaris Building Guide](./docs/build/Solaris.md)
* **FreeBSD**: [FreeBSD Building Guide](./docs/build/FreeBSD.md)
* **macOS**: [macOS Building Guide](./docs/build/macOS.md)
# Building speedup
If you have an HDD, use ramdisk (build in RAM):
```sh
sudo mkdir /tmp/ramdisk
sudo chmod 777 /tmp/ramdisk
# about 10GB needed
sudo mount -t tmpfs -o size=10G myramdisk /tmp/ramdisk
cmake -B /tmp/ramdisk
cmake --build /tmp/ramdisk -- -j32
sudo umount /tmp/ramdisk
```
# How to test JIT
## gdb
Run `./build/bin/eden-cli -c <path to your config file (see logs where you run eden normally to see where it is)> -d -g <path to game>`
Then hook up an aarch64-gdb (use `yay aarch64-gdb` or `sudo pkg in arch64-gdb` to install)
Then type `target remote localhost:1234` and type `c` (for continue) - and then if it crashes just do a `bt` (backtrace) and `layout asm`.
### gdb cheatsheet
- `mo <cmd>`: Monitor commands, `get info`, `get fastmem` and `get mappings` are available.
- `detach`: Detach from remote (i.e restarting the emulator).
- `c`: Continue
- `p <expr>`: Print variable, `p/x <expr>` for hexadecimal.
- `r`: Run
- `bt`: Print backtrace
- `info threads`: Print all active threads
- `thread <number>`: Switch to the given thread (see `info threads`)
- `layout asm`: Display in assembly mode (TUI)
- `si`: Step assembly instruction
- `s` or `step`: Step over LINE OF CODE (not assembly)
- `display <expr>`: Display variable each step.
- `n`: Next (skips over call frame of a function)
- `frame <number>`: Switches to the given frame (from `bt`)
- `br <expr>`: Set breakpoint at `<expr>`.
- `delete`: Deletes all breakpoints.
- `catch throw`: Breakpoint at throw. Can also use `br __cxa_throw`
Expressions can be `variable_names` or `1234` (numbers) or `*var` (dereference of a pointer) or `*(1 + var)` (computed expression).
For more information type `info gdb` and read [the man page](https://man7.org/linux/man-pages/man1/gdb.1.html).
## Bisecting older commits
Since going into the past can be tricky (especially due to the dependencies from the project being lost thru time). This should "restore" the URLs for the respective submodules.
```sh
#!/bin/sh
cat > .gitmodules <<EOF
[submodule "enet"]
path = externals/enet
url = https://github.com/lsalzman/enet.git
[submodule "cubeb"]
path = externals/cubeb
url = https://github.com/mozilla/cubeb.git
[submodule "dynarmic"]
path = externals/dynarmic
url = https://github.com/lioncash/dynarmic.git
[submodule "libusb"]
path = externals/libusb/libusb
url = https://github.com/libusb/libusb.git
[submodule "discord-rpc"]
path = externals/discord-rpc
url = https://github.com/yuzu-emu-mirror/discord-rpc.git
[submodule "Vulkan-Headers"]
path = externals/Vulkan-Headers
url = https://github.com/KhronosGroup/Vulkan-Headers.git
[submodule "sirit"]
path = externals/sirit
url = https://github.com/yuzu-emu-mirror/sirit.git
[submodule "mbedtls"]
path = externals/mbedtls
url = https://github.com/yuzu-emu-mirror/mbedtls.git
[submodule "xbyak"]
path = externals/xbyak
url = https://github.com/herumi/xbyak.git
[submodule "opus"]
path = externals/opus
url = https://github.com/xiph/opus.git
[submodule "SDL"]
path = externals/SDL
url = https://github.com/libsdl-org/SDL.git
[submodule "cpp-httplib"]
path = externals/cpp-httplib
url = https://github.com/yhirose/cpp-httplib.git
[submodule "ffmpeg"]
path = externals/ffmpeg/ffmpeg
url = https://github.com/FFmpeg/FFmpeg.git
[submodule "vcpkg"]
path = externals/vcpkg
url = https://github.com/microsoft/vcpkg.git
[submodule "cpp-jwt"]
path = externals/cpp-jwt
url = https://github.com/arun11299/cpp-jwt.git
[submodule "libadrenotools"]
path = externals/libadrenotools
url = https://github.com/bylaws/libadrenotools.git
[submodule "tzdb_to_nx"]
path = externals/nx_tzdb/tzdb_to_nx
url = https://github.com/lat9nq/tzdb_to_nx.git
[submodule "VulkanMemoryAllocator"]
path = externals/VulkanMemoryAllocator
url = https://github.com/GPUOpen-LibrariesAndSDKs/VulkanMemoryAllocator.git
[submodule "breakpad"]
path = externals/breakpad
url = https://github.com/yuzu-emu-mirror/breakpad.git
[submodule "simpleini"]
path = externals/simpleini
url = https://github.com/brofield/simpleini.git
[submodule "oaknut"]
path = externals/oaknut
url = https://github.com/merryhime/oaknut.git
[submodule "Vulkan-Utility-Libraries"]
path = externals/Vulkan-Utility-Libraries
url = https://github.com/KhronosGroup/Vulkan-Utility-Libraries.git
[submodule "oboe"]
path = externals/oboe
url = https://github.com/google/oboe.git
[submodule "externals/boost-headers"]
path = externals/boost-headers
url = https://github.com/boostorg/headers.git
EOF
git submodule sync
update_or_checkout () {
if [ $0 = 'externals/sirit' ] \
|| [ $0 = 'externals/dynarmic' ] \
|| [ $0 = 'externals/breakpad' ] \
|| [ $0 = 'externals/discord-rpc' ] \
|| [ $0 = 'externals/mbedtls' ]; then
[ -f $0/CMakeLists.txt ] || git submodule update --force --remote --init -- $0
echo $0 ':remote' && git submodule update --remote $0
exit
elif [ $0 = 'externals/nx_tzdb/tzdb_to_nx' ]; then
[ -f $0/CMakeLists.txt ] || git submodule update --force --remote --init -- $0
echo $0 ':remote' && git submodule update --remote $0
else
echo $0 ':update' && git submodule update --init $0 && exit
echo $0 ':remote' && git submodule update --remote $0 && exit
echo $0 ':failure'
fi
}
export -f update_or_checkout
grep path .gitmodules | sed 's/.*= //' | xargs -n 1 -I {} bash -c 'update_or_checkout "$@"' {}
# Fix for LLVM builds
sed -i 's/src\/yuzu\/main.cpp/${CMAKE_SOURCE_DIR}\/src\/yuzu\/main.cpp/g' CMakeModules/FindLLVM.cmake
# Only after cloning and everything - fixes issues with Zydis
cat > externals/dynarmic/src/dynarmic/common/x64_disassemble.cpp <<EOF
#include <cstddef>
#include <vector>
#include <string>
namespace Dynarmic::Common {
void DumpDisassembledX64(const void* ptr, size_t size) {}
std::vector<std::string> DisassembleX64(const void* ptr, size_t size) { return {}; }
}
EOF
```
If having issues with older artifacts, then run `rm -r externals/dynarmic/build externals/dynarmic/externals externals/nx_tzdb/tzdb_to_nx/externals externals/sirit/externals`.
Configuring CMake with `-DSIRIT_USE_SYSTEM_SPIRV_HEADERS=1 -DCMAKE_CXX_FLAGS="-Wno-error" -DCMAKE_C_FLAGS="-Wno-error -Wno-array-parameter -Wno-stringop-overflow"` is also recommended.

42
docs/build/Android.md vendored Normal file
View file

@ -0,0 +1,42 @@
# Note: These build instructions are a work-in-progress.
## Dependencies
* [Android Studio](https://developer.android.com/studio)
* [NDK 25.2.9519653 and CMake 3.22.1](https://developer.android.com/studio/projects/install-ndk#default-version)
* [Git](https://git-scm.com/download)
### WINDOWS ONLY - Additional Dependencies
* **[Visual Studio 2022 Community](https://visualstudio.microsoft.com/downloads/)** - **Make sure to select "Desktop development with C++" support in the installer. Make sure to update to the latest version if already installed.**
* **[Vulkan SDK](https://vulkan.lunarg.com/sdk/home#windows)** - **Make sure to select Latest SDK.**
- A convenience script to install the latest SDK is provided in `.ci\windows\install-vulkan-sdk.ps1`.
## Cloning Eden with Git
```
git clone --recursive https://git.eden-emu.dev/eden-emu/eden.git
```
Eden by default will be cloned into -
* `C:\Users\<user-name>\eden` on Windows
* `~/eden` on Linux
* And wherever on macOS
## Building
1. Start Android Studio, on the startup dialog select `Open`.
2. Navigate to the `eden/src/android` directory and click on `OK`.
3. In `Build > Select Build Variant`, select `release` or `relWithDebInfo` as the "Active build variant".
4. Build the project with `Build > Make Project` or run it on an Android device with `Run > Run 'app'`.
## Building with Terminal
1. Download the SDK and NDK from Android Studio.
2. Navigate to SDK and NDK paths.
3. Then set ANDROID_SDK_ROOT and ANDROID_NDK_ROOT in terminal via
`export ANDROID_SDK_ROOT=path/to/sdk`
`export ANDROID_NDK_ROOT=path/to/ndk`.
4. Navigate to `eden/src/android`.
5. Then Build with `./gradlew assemblerelWithDebInfo`.
6. To build the optimised build use `./gradlew assembleGenshinSpoofRelWithDebInfo`.
### Script
A convenience script for building is provided in `.ci/android/build.sh`. The built APK can be put into an `artifacts` directory via `.ci/android/package.sh`. On Windows, these must be done in the Git Bash or MinGW terminal.
### Additional Resources
https://developer.android.com/studio/intro

81
docs/build/FreeBSD.md vendored Normal file
View file

@ -0,0 +1,81 @@
## One word of caution before proceeding.
This is not the usual or preferred way to build programs on FreeBSD.
As of writing there is no official fresh port available for eden-emu, but it is in the works.
After it is available you can find a link to the eden-emu fresh port here and on Escarys github repo.
See this build as an App Image alternative for FreeBSD.
## Dependencies.
Before we start we need some dependencies.
These dependencies are generally needed to build eden-emu on FreeBSD.
```
devel/cmake
devel/sdl20
devel/boost-libs
devel/catch2
devel/libfmt
devel/nlohmann-json
devel/ninja
devel/nasm
devel/autoconf
devel/pkg-config
devel/qt6-base
multimedia/ffnvcodec-headers
multimedia/ffmpeg
audio/opus
archivers/liblz4
lang/gcc12
graphics/glslang
graphics/vulkan-utility-libraries
```
---
### Build preparations:
Run the following command to clone eden with git:
```sh
git clone --recursive https://git.eden-emu.dev/eden-emu/eden
```
You usually want to add the `--recursive` parameter as it also takes care of the external dependencies for you.
Now change into the eden directory and create a build directory there:
```sh
cd eden
mkdir build
```
Change into that build directory:
```sh
cd build
```
Now choose one option either 1 or 2, but not both as one option overwrites the other.
#### 1. Building in Release Mode (usually preferred and the most performant choice):
```sh
cmake .. -GNinja -DYUZU_TESTS=OFF
```
#### 2. Building in Release Mode with debugging symbols (useful if you want to debug errors for a eventual fix):
```sh
cmake .. -GNinja -DCMAKE_BUILD_TYPE=RelWithDebInfo -DYUZU_TESTS=ON
```
Build the emulator locally:
```sh
ninja
```
Optional: If you wish to install eden globally onto your system issue the following command:
```sh
sudo ninja install
```
OR
```sh
doas -- ninja install
```

135
docs/build/Linux.md vendored Normal file
View file

@ -0,0 +1,135 @@
### Dependencies
You'll need to download and install the following to build Eden:
* [GCC](https://gcc.gnu.org/) v11+ (for C++20 support) & misc
* If GCC 12 is installed, [Clang](https://clang.llvm.org/) v14+ is required for compiling
* [CMake](https://www.cmake.org/) 3.22+
The following are handled by Eden's externals:
* [FFmpeg](https://ffmpeg.org/)
* [SDL2](https://www.libsdl.org/download-2.0.php) 2.0.18+
* [opus](https://opus-codec.org/downloads/)
All other dependencies will be downloaded by [vcpkg](https://vcpkg.io/) if needed:
* [Boost](https://www.boost.org/users/download/) 1.79.0+
* [Catch2](https://github.com/catchorg/Catch2) 2.13.7 - 2.13.9
* [fmt](https://fmt.dev/) 8.0.1+
* [lz4](http://www.lz4.org) 1.8+
* [nlohmann_json](https://github.com/nlohmann/json) 3.8+
* [OpenSSL](https://www.openssl.org/source/)
* [ZLIB](https://www.zlib.net/) 1.2+
* [zstd](https://facebook.github.io/zstd/) 1.5+
If an ARM64 build is intended, export `VCPKG_FORCE_SYSTEM_BINARIES=1`.
Dependencies are listed here as commands that can be copied/pasted. Of course, they should be inspected before being run.
- Arch / Manjaro:
- `sudo pacman -Syu --needed base-devel boost catch2 cmake ffmpeg fmt git glslang libzip lz4 mbedtls ninja nlohmann-json openssl opus qt6-base qt6-multimedia sdl2 zlib zstd zip unzip`
- Building with QT Web Engine requires `qt6-webengine` as well.
- Proper wayland support requires `qt6-wayland`
- GCC 11 or later is required.
- Ubuntu / Linux Mint / Debian:
- `sudo apt-get install autoconf cmake g++-11 gcc-11 git glslang-tools libasound2 libboost-context-dev libglu1-mesa-dev libhidapi-dev libpulse-dev libtool libudev-dev libxcb-icccm4 libxcb-image0 libxcb-keysyms1 libxcb-render-util0 libxcb-xinerama0 libxcb-xkb1 libxext-dev libxkbcommon-x11-0 mesa-common-dev nasm ninja-build qtbase6-dev qtbase6-private-dev qtwebengine6-dev qtmultimedia6-dev libmbedtls-dev catch2 libfmt-dev liblz4-dev nlohmann-json3-dev libzstd-dev libssl-dev libavfilter-dev libavcodec-dev libswscale-dev`
- Ubuntu 22.04, Linux Mint 20, or Debian 12 or later is required.
- Users need to manually specify building with QT Web Engine enabled. This is done using the parameter `-DYUZU_USE_QT_WEB_ENGINE=ON` when running CMake.
- Users need to manually specify building with GCC 11. This can be done by adding the parameters `-DCMAKE_C_COMPILER=gcc-11 -DCMAKE_CXX_COMPILER=g++-11` when running CMake. i.e.
- Users need to manually disable building SDL2 from externals if they intend to use the version provided by their system by adding the parameters `-DYUZU_USE_EXTERNAL_SDL2=OFF`
```
git submodule update --init --recursive
cmake .. -GNinja -DCMAKE_C_COMPILER=gcc-11 -DCMAKE_CXX_COMPILER=g++-11
```
- Fedora:
- `sudo dnf install autoconf ccache cmake fmt-devel gcc{,-c++} glslang hidapi-devel json-devel libtool libusb1-devel libzstd-devel lz4-devel nasm ninja-build openssl-devel pulseaudio-libs-devel qt5-linguist qt5-qtbase{-private,}-devel qt5-qtwebengine-devel qt5-qtmultimedia-devel speexdsp-devel wayland-devel zlib-devel ffmpeg-devel libXext-devel`
- Fedora 32 or later is required.
- Due to GCC 12, Fedora 36 or later users need to install `clang`, and configure CMake to use it via `-DCMAKE_CXX_COMPILER=clang++ -DCMAKE_C_COMPILER=clang`
- CMake arguments to force system libraries:
- SDL2: `-DYUZU_USE_BUNDLED_SDL2=OFF -DYUZU_USE_EXTERNAL_SDL2=OFF`
- FFmpeg: `-DYUZU_USE_EXTERNAL_FFMPEG=OFF`
- [RPM Fusion](https://rpmfusion.org/) (free) is required to install `ffmpeg-devel`
### Cloning Eden with Git
**Master:**
```bash
git clone --recursive https://git.eden-emu.dev/eden-emu/eden
cd eden
```
The `--recursive` option automatically clones the required Git submodules.
### Building Eden in Release Mode (Optimised)
If you need to run ctests, you can disable `-DYUZU_TESTS=OFF` and install Catch2.
```bash
mkdir build && cd build
cmake .. -GNinja -DYUZU_TESTS=OFF
ninja
sudo ninja install
```
You may also want to include support for Discord Rich Presence by adding `-DUSE_DISCORD_PRESENCE=ON` after `cmake ..`
`-DYUZU_USE_EXTERNAL_VULKAN_SPIRV_TOOLS=OFF` might be needed if ninja command failed with `undefined reference to symbol 'spvOptimizerOptionsCreate`, reason currently unknown
Optionally, you can use `cmake-gui ..` to adjust various options (e.g. disable the Qt GUI).
### Building Eden in Debug Mode (Slow)
```bash
mkdir build && cd build
cmake .. -GNinja -DCMAKE_BUILD_TYPE=Debug -DYUZU_TESTS=OFF
ninja
```
### Building with debug symbols
```bash
mkdir build && cd build
cmake .. -GNinja -DCMAKE_BUILD_TYPE=RelWithDebInfo -DYUZU -DYUZU_TESTS=OFF
ninja
```
### Building with Scripts
A convenience script for building is provided in `.ci/linux/build.sh`. You must provide an arch target for optimization, e.g. `.ci/linux/build.sh amd64`. Valid targets:
- `legacy`: x86_64 generic, only needed for CPUs older than 2013 or so
- `amd64`: x86_64-v3, for CPUs newer than 2013 or so
- `steamdeck` / `zen2`: For Steam Deck or Zen >= 2 AMD CPUs (untested on Intel)
- `rog-ally` / `allyx` / `zen4`: For ROG Ally X or Zen >= 4 AMD CPUs (untested on Intel)
- `aarch64`: For armv8-a CPUs, older than mid-2021 or so
- `armv9`: For armv9-a CPUs, newer than mid-2021 or so
- `native`: Optimize to your native host architecture
Extra flags to pass to CMake should be passed after the arch target.
Additional environment variables can be used to control building:
- `NPROC`: Number of threads to use for compilation (defaults to all)
- `TARGET`: Set to `appimage` to disable standalone `eden-cli` and `eden-room` executables
- `BUILD_TYPE`: Sets the build type to use. Defaults to `Release`
The following environment variables are boolean flags. Set to `true` to enable or `false` to disable:
- `DEVEL` (default FALSE): Disable Qt update checker
- `USE_WEBENGINE` (default FALSE): Enable Qt WebEngine
- `USE_MULTIMEDIA` (default TRUE): Enable Qt Multimedia
After building, an AppImage can be packaged via `.ci/linux/package.sh`. This script takes the same arch targets as the build script. If the build was created in a different directory, you can specify its path relative to the source directory, e.g. `.ci/linux/package.sh amd64 build-appimage`. Additionally, set the `DEVEL` environment variable to `true` to change the app name to `Eden Nightly`.
### Running without installing
After building, the binaries `eden` and `eden-cmd` (depending on your build options) will end up in `build/bin/`.
```bash
# SDL
cd build/bin/
./eden-cmd
# Qt
cd build/bin/
./eden
```

94
docs/build/Solaris.md vendored Normal file
View file

@ -0,0 +1,94 @@
# Building for Solaris
## Dependencies.
Always consult [the OpenIndiana package list](https://pkg.openindiana.org/hipster/en/index.shtml) to cross-verify availability.
Run the usual update + install of essential toolings: `sudo pkg update && sudo pkg install git cmake`.
- **gcc**: `sudo pkg install developer/gcc-14`.
- **clang**: Version 20 is broken, use `sudo pkg install developer/clang-19`.
Then install the libraies: `sudo pkg install qt6 boost glslang libzip library/lz4 nlohmann-json openssl opus sdl2 zlib compress/zstd unzip pkg-config nasm autoconf mesa library/libdrm header-drm`.
fmtlib is not available on repositories and has to be manually built:
```sh
git clone --recurisve --depth=1 https://github.com/fmtlib/fmt.git
cd fmt
cmake -DCMAKE_BUILD_TYPE=Release -B build
cmake --build build
sudo cmake --install build
```
pkg lz4 doesn't provide a proper CMakeFile to find the library, has to also be manually built:
```sh
git clone --depth=1 https://github.com/lz4/lz4.git
cd lz4
gmake
sudo gmake install
```
Same goes for zstd:
```sh
git clone --depth=1 https://github.com/facebook/zstd.git
cd zstd
cmake -DCMAKE_BUILD_TYPE=Release -B build0 -S build/cmake
cmake --build build0
cd build0
sudo gmake install
```
pkg SDL2 is also not nice to work with on CMake, save yourself some pain and compile it yourself:
```sh
git clone --depth=1 --branch=release-2.32.8 https://github.com/libsdl-org/SDL
cmake -DCMAKE_BUILD_TYPE=Release -B build
cmake --build build
sudo cmake --install build
```
Audio is broken in OpenIndiana [see this issue](https://github.com/libsdl-org/SDL/issues/13405), go into `SDL/CMakeLists.txt` and comment out lines 1468:
```diff
+# set(SDL_AUDIO_DRIVER_SUNAUDIO 1)
+# file(GLOB SUN_AUDIO_SOURCES ${SDL2_SOURCE_DIR}/src/audio/sun/*.c)
+# list(APPEND SOURCE_FILES ${SUN_AUDIO_SOURCES})
+# set(HAVE_SDL_AUDIO TRUE)
```
For Solaris this issue does not exist - however PulseAudio crashes on Solaris - so use a different backend.
---
### Build preparations:
Run the following command to clone eden with git:
```sh
git clone --recursive https://git.eden-emu.dev/eden-emu/eden
```
You usually want to add the `--recursive` parameter as it also takes care of the external dependencies for you.
Now change into the eden directory and create a build directory there:
```sh
cd eden
mkdir build
```
Change into that build directory: `cd build`
Now choose one option either 1 or 2, but not both as one option overwrites the other.
### Building
```sh
# Needed for some dependencies that call cc directly (tz)
echo '#!/bin/sh' >cc
echo 'gcc $@' >>cc
chmod +x cc
export PATH="$PATH:$PWD"
```
- **Configure**: `cmake -B build -DYUZU_TESTS=OFF -DYUZU_USE_BUNDLED_SDL2=OFF -DYUZU_USE_EXTERNAL_SDL2=OFF -DYUZU_USE_LLVM_DEMANGLE=OFF -DYUZU_USE_QT_MULTIMEDIA=OFF -DYUZU_USE_QT_WEB_ENGINE=OFF -DYUZU_USE_BUNDLED_VCPKG=OFF -DYUZU_USE_BUNDLED_QT=OFF -DENABLE_QT=OFF -DSDL_AUDIO=OFF -DENABLE_WEB_SERVICE=OFF -DENABLE_QT_UPDATE_CHECKER=OFF`.
- **Build**: `cmake --build build`.
- **Installing**: `sudo cmake --install build`.
### Notes
- Modify the generated ffmpeg.make (in build dir) if using multiple threads (base system `make` doesn't use `-j4`, so change for `gmake`).
- If using OpenIndiana, due to a bug in SDL2 cmake configuration; Audio driver defaults to SunOS `<sys/audioio.h>`, which does not exist on OpenIndiana.
- Enabling OpenSSL requires compiling OpenSSL manually instead of using the provided one from repositores.

195
docs/build/Windows.md vendored Normal file
View file

@ -0,0 +1,195 @@
# THIS GUIDE IS INTENDED FOR DEVELOPERS ONLY, SUPPORT WILL ONLY BE GIVEN IF YOU'RE A DEVELOPER.
## Method I: MSVC Build for Windows
### Minimal Dependencies
On Windows, all library dependencies are automatically included within the `externals` folder, or can be downloaded on-demand. To build Eden, you need to install:
* **[Visual Studio 2022 Community](https://visualstudio.microsoft.com/downloads/)** - **Make sure to select C++ support in the installer. Make sure to update to the latest version if already installed.**
* **[CMake](https://cmake.org/download/)** - Used to generate Visual Studio project files. Does not matter if either 32-bit or 64-bit version is installed.
* **[Vulkan SDK](https://vulkan.lunarg.com/sdk/home#windows)** - **Make sure to select Latest SDK.**
- A convenience script to install the latest SDK is provided in `.ci\windows\install-vulkan-sdk.ps1`.
![2](https://i.imgur.com/giDwuTm.png)
* **Git** - We recommend [Git for Windows](https://gitforwindows.org).
![3](https://i.imgur.com/UeSzkBw.png)
* While installing Git Bash, you should tell it to include Git in your system path. (Choose the "Git from the command line and also from 3rd-party software" option.) If you missed that, don't worry, you'll just have to manually tell CMake where your git.exe is, since it's used to include version info into the built executable.
![4](https://i.imgur.com/x0rRs1t.png)
### Cloning Eden with Git
**Master:**
```cmd
git clone --recursive https://git.eden-emu.dev/eden-emu/eden
cd eden
```
![9](https://i.imgur.com/CcxIAht.png)
* *(Note: eden by default downloads to `C:\Users\<user-name>\eden` (Master)
### Building
* Open the CMake GUI application and point it to the `eden` (Master)
![10](https://i.imgur.com/qOslIWv.png)
* For the build directory, use a `/build` subdirectory inside the source directory or some other directory of your choice. (Tell CMake to create it.)
* Click the "Configure" button and choose `Visual Studio 17 2022`, with `x64` for the optional platform.
![12](https://i.imgur.com/DKiREaK.png)
* *(Note: If you used GitHub's own app to clone, run `git submodule update --init --recursive` to get the remaining dependencies)*
* If you get an error about missing packages, enable `YUZU_USE_BUNDLED_VCPKG`, and then click Configure again.
* *(You may also want to disable `YUZU_TESTS` in this case since Catch2 is not yet supported with this.)*
![13](https://user-images.githubusercontent.com/22451773/180585999-07316d6e-9751-4d11-b957-1cf57cd7cd58.png)
* Click "Generate" to create the project files.
![15](https://i.imgur.com/5LKg92k.png)
* Open the solution file `yuzu.sln` in Visual Studio 2022, which is located in the build folder.
![16](https://i.imgur.com/208yMml.png)
* Depending if you want a graphical user interface or not (`eden` has the graphical user interface, while `eden-cmd` doesn't), select `eden` or `eden-cmd` in the Solution Explorer, right-click and `Set as StartUp Project`.
![17](https://i.imgur.com/nPMajnn.png) ![18](https://i.imgur.com/BDMLzRZ.png)
* Select the appropriate build type, Debug for debug purposes or Release for performance (in case of doubt choose Release).
![19](https://i.imgur.com/qxg4roC.png)
* Right-click the project you want to build and press Build in the submenu or press F5.
![20](https://i.imgur.com/CkQgOFW.png)
## Method II: MinGW-w64 Build with MSYS2
### Prerequisites to install
* [MSYS2](https://www.msys2.org)
* [Vulkan SDK](https://vulkan.lunarg.com/sdk/home#windows) - **Make sure to select Latest SDK.**
* Make sure to follow the instructions and update to the latest version by running `pacman -Syu` as many times as needed.
### Install eden dependencies for MinGW-w64
* Open the `MSYS2 MinGW 64-bit` (mingw64.exe) shell
* Download and install all dependencies using: `pacman -Syu git make mingw-w64-x86_64-SDL2 mingw-w64-x86_64-cmake mingw-w64-x86_64-python-pip mingw-w64-x86_64-qt6 mingw-w64-x86_64-toolchain autoconf libtool automake-wrapper`
* Add MinGW binaries to the PATH: `echo 'PATH=/mingw64/bin:$PATH' >> ~/.bashrc`
* Add glslangValidator to the PATH: `echo 'PATH=$(readlink -e /c/VulkanSDK/*/Bin/):$PATH' >> ~/.bashrc`
### Clone the eden repository with Git
```bash
git clone --recursive https://git.eden-emu.dev/eden-emu/eden
cd eden
```
### Run the following commands to build eden (dynamically linked build)
```bash
mkdir build && cd build
cmake -G "MSYS Makefiles" -DYUZU_USE_BUNDLED_VCPKG=ON -DYUZU_TESTS=OFF ..
make -j$(nproc)
# test eden out with
./bin/eden.exe
```
* *(Note: This build is not a static build meaning that you need to include all of the DLLs with the .exe in order to use it!)*
e.g.
```Bash
cp externals/ffmpeg-*/bin/*.dll bin/
```
Bonus Note: Running programs from inside `MSYS2 MinGW x64` shell has a different %PATH% than directly from explorer. This different %PATH% has the locations of the other DLLs required.
![image](https://user-images.githubusercontent.com/190571/165000848-005e8428-8a82-41b1-bb4d-4ce7797cdac8.png)
### Building without Qt (Optional)
Doesn't require the rather large Qt dependency, but you will lack a GUI frontend:
* Pass the `-DENABLE_QT=no` flag to cmake
## Method III: CLion Environment Setup
### Minimal Dependencies
To build eden, you need to install the following:
* [CLion](https://www.jetbrains.com/clion/) - This IDE is not free; for a free alternative, check Method I
* [Vulkan SDK](https://vulkan.lunarg.com/sdk/home#windows) - Make sure to select the Latest SDK.
### Cloning eden with CLion
* Clone the Repository:
![1](https://user-images.githubusercontent.com/42481638/216899046-0d41d7d6-8e4d-4ed2-9587-b57088af5214.png)
![2](https://user-images.githubusercontent.com/42481638/216899061-b2ea274a-e88c-40ae-bf0b-4450b46e9fea.png)
![3](https://user-images.githubusercontent.com/42481638/216899076-0e5988c4-d431-4284-a5ff-9ecff973db76.png)
### Building & Setup
* Once Cloned, You will be taken to a prompt like the image below:
![4](https://user-images.githubusercontent.com/42481638/216899092-3fe4cec6-a540-44e3-9e1e-3de9c2fffc2f.png)
* Set the settings to the image below:
* Change `Build type: Release`
* Change `Name: Release`
* Change `Toolchain Visual Studio`
* Change `Generator: Let CMake decide`
* Change `Build directory: build`
![5](https://user-images.githubusercontent.com/42481638/216899164-6cee8482-3d59-428f-b1bc-e6dc793c9b20.png)
* Click OK; now Clion will build a directory and index your code to allow for IntelliSense. Please be patient.
* Once this process has been completed (No loading bar bottom right), you can now build eden
* In the top right, click on the drop-down menu, select all configurations, then select eden
![6](https://user-images.githubusercontent.com/42481638/216899226-975048e9-bc6d-4ec1-bc2d-bd8a1e15ed04.png)
* Now run by clicking the play button or pressing Shift+F10, and eden will auto-launch once built.
![7](https://user-images.githubusercontent.com/42481638/216899275-d514ec6a-e563-470e-81e2-3e04f0429b68.png)
## Building from the command line with MSVC
```cmd
git clone --recursive https://git.eden-emu.dev/eden-emu/eden
cd eden
mkdir build
cd build
cmake .. -G "Visual Studio 17 2022" -A x64
cmake --build . --config Release
```
### Building with Scripts
A convenience script for building is provided in `.ci/windows/build.sh`. You must run this with Bash, e.g. Git Bash or MinGW TTY. To use this script, you must have windeployqt installed (usually bundled with Qt) and set the `WINDEPLOYQT` environment variable to its canonical Bash location, e.g. `WINDEPLOYQT="/c/Qt/6.9.1/msvc2022_64/bin/windeployqt6.exe" .ci/windows/build.sh`.
Extra CMake flags should be placed in the arguments of the script.
Additional environment variables can be used to control building:
- `BUILD_TYPE`: Sets the build type to use. Defaults to `Release`
The following environment variables are boolean flags. Set to `true` to enable or `false` to disable:
- `DEVEL` (default FALSE): Disable Qt update checker
- `USE_WEBENGINE` (default FALSE): Enable Qt WebEngine
- `USE_MULTIMEDIA` (default TRUE): Enable Qt Multimedia
- `BUNDLE_QT` (default FALSE): Use bundled Qt
* Note that using system Qt requires you to include the Qt CMake directory in `CMAKE_PREFIX_PATH`, e.g. `.ci/windows/build.sh -DCMAKE_PREFIX_PATH=C:/Qt/6.9.0/msvc2022_64/lib/cmake/Qt6`
After building, a zip can be packaged via `.ci/windows/package.sh`. Note that you must have 7-zip installed and in your PATH. The resulting zip will be placed into `artifacts` in the source directory.

105
docs/build/macOS.md vendored Normal file
View file

@ -0,0 +1,105 @@
Please note this article is intended for development, and eden on macOS is not currently ready for regular use.
This article was written for developers. eden support for macOS is not ready for casual use.
## Method I: ninja
---
If you are compiling on Intel Mac or are using a Rosetta Homebrew installation, you must replace all references of `/opt/homebrew` to `/usr/local`.
Install dependencies from Homebrew:
```sh
brew install autoconf automake boost ccache ffmpeg fmt glslang hidapi libtool libusb lz4 ninja nlohmann-json openssl pkg-config qt@6 sdl2 speexdsp zlib zlib zstd cmake Catch2 molten-vk vulkan-loader
```
Clone the repo
```sh
git clone --recursive https://git.eden-emu.dev/eden-emu/eden
cd eden
```
Build for release
```sh
mkdir build && cd build
export Qt6_DIR="/opt/homebrew/opt/qt@6/lib/cmake"
export LIBVULKAN_PATH=/opt/homebrew/lib/libvulkan.dylib
cmake .. -GNinja -DCMAKE_BUILD_TYPE=RelWithDebInfo -DYUZU_USE_BUNDLED_VCPKG=OFF -DYUZU_TESTS=OFF -DENABLE_WEB_SERVICE=ON -DENABLE_LIBUSB=OFF -DCLANG_FORMAT=ON -DSDL2_DISABLE_INSTALL=ON -DSDL_ALTIVEC=ON
ninja
```
You may also want to include support for Discord Rich Presence by adding `-DUSE_DISCORD_PRESENCE=ON` after `cmake ..`
Build with debug symbols (vcpkg is not currently used due to broken boost-context library):
```sh
mkdir build && cd build
export Qt6_DIR="/opt/homebrew/opt/qt@6/lib/cmake"
cmake .. -GNinja -DCMAKE_BUILD_TYPE=RelWithDebInfo -DYUZU_USE_BUNDLED_VCPKG=OFF -DYUZU_TESTS=OFF -DENABLE_WEB_SERVICE=OFF -DENABLE_LIBUSB=OFF
ninja
```
Run the output:
```
bin/eden.app/Contents/MacOS/eden
```
## Method II: Xcode
---
If you are compiling on Intel Mac or are using a Rosetta Homebrew installation, you must replace all references of `/opt/homebrew` to `/usr/local`.
Install dependencies from Homebrew:
```sh
brew install autoconf automake boost ccache ffmpeg fmt glslang hidapi libtool libusb lz4 ninja nlohmann-json openssl pkg-config qt@6 sdl2 speexdsp zlib zlib zstd cmake Catch2 molten-vk vulkan-loader
```
Clone the repo
```sh
git clone --recursive https://git.eden-emu.dev/eden-emu/eden
cd eden
```
Build for release
```sh
mkdir build && cd build
export Qt6_DIR="/opt/homebrew/opt/qt@6/lib/cmake"
export LIBVULKAN_PATH=/opt/homebrew/lib/libvulkan.dylib
cmake .. -GXcode -DCMAKE_BUILD_TYPE=RelWithDebInfo -DYUZU_USE_BUNDLED_VCPKG=OFF -DYUZU_TESTS=OFF -DENABLE_WEB_SERVICE=ON -DENABLE_LIBUSB=OFF -DCLANG_FORMAT=ON -DSDL2_DISABLE_INSTALL=ON -DSDL_ALTIVEC=ON
xcodebuild build -project eden.xcodeproj -scheme "eden" -configuration "RelWithDebInfo"
```
You may also want to include support for Discord Rich Presence by adding `-DUSE_DISCORD_PRESENCE=ON` after `cmake ..`
Build with debug symbols (vcpkg is not currently used due to broken boost-context library):
```sh
mkdir build && cd build
export Qt6_DIR="/opt/homebrew/opt/qt@6/lib/cmake"
cmake .. -GNinja -DCMAKE_BUILD_TYPE=RelWithDebInfo -DYUZU_USE_BUNDLED_VCPKG=OFF -DYUZU_TESTS=OFF -DENABLE_WEB_SERVICE=OFF -DENABLE_LIBUSB=OFF
ninja
```
Run the output:
```
bin/eden.app/Contents/MacOS/eden
```
---
To run with MoltenVK, install additional dependencies:
```sh
brew install molten-vk vulkan-loader
```
Run with Vulkan loader path:
```sh
export LIBVULKAN_PATH=/opt/homebrew/lib/libvulkan.dylib
bin/eden.app/Contents/MacOS/eden
```

View file

@ -83,7 +83,23 @@ if (YUZU_USE_EXTERNAL_SDL2)
set(SDL_FILE ON)
endif()
add_subdirectory(SDL)
include(CPM)
set(CPM_USE_LOCAL_PACKAGES OFF)
if ("${YUZU_SYSTEM_PROFILE}" STREQUAL "steamdeck")
set(SDL_HASH cc016b0046)
set(SDL_PIPEWIRE OFF) # build errors out with this on
set(SDL_SHA512SUM 34d5ef58da6a4f9efa6689c82f67badcbd741f5a4f562a9c2c30828fa839830fb07681c5dc6a7851520e261c8405a416ac0a2c2513b51984fb3b4fa4dcb3e20b)
else()
set(SDL_HASH 2e4c12cd2c)
set(SDL_SHA512SUM d95af47f469a312876f8ab361074a1e7b8083db19935a102d9c6e5887ace6008e64475a8c54b00164b40cad86492bb1b2366084efdd0b2555e5fea6d9c5da80e)
endif()
CPMAddPackage(
NAME SDL2
URL "https://github.com/libsdl-org/SDL/archive/${SDL_HASH}.zip"
URL_HASH SHA512=${SDL_SHA512SUM}
)
endif()
# ENet
@ -119,7 +135,7 @@ endif()
add_subdirectory(sirit)
# httplib
if (ENABLE_WEB_SERVICE AND NOT TARGET httplib::httplib)
if ((ENABLE_WEB_SERVICE OR ENABLE_QT_UPDATE_CHECKER) AND NOT TARGET httplib::httplib)
set(HTTPLIB_REQUIRE_OPENSSL ON)
add_subdirectory(cpp-httplib)
endif()
@ -160,6 +176,12 @@ if (YUZU_USE_EXTERNAL_VULKAN_UTILITY_LIBRARIES)
add_subdirectory(Vulkan-Utility-Libraries)
endif()
# SPIRV-Tools
if (YUZU_USE_EXTERNAL_VULKAN_SPIRV_TOOLS)
set(SPIRV_SKIP_EXECUTABLES ON)
add_subdirectory(SPIRV-Tools)
endif()
# Boost headers
add_subdirectory(boost-headers)
@ -205,7 +227,7 @@ if (ANDROID)
endif()
endif()
if (UNIX AND NOT APPLE AND NOT TARGET gamemode::headers)
if ((CMAKE_SYSTEM_NAME STREQUAL "Linux" OR ANDROID) AND NOT TARGET gamemode::headers)
add_library(gamemode INTERFACE)
target_include_directories(gamemode INTERFACE gamemode)
add_library(gamemode::headers ALIAS gamemode)

1
externals/SDL vendored

@ -1 +0,0 @@
Subproject commit 2e4c12cd2cb2c5d0b60ef2196b400339591e733c

1
externals/SPIRV-Tools vendored Submodule

@ -0,0 +1 @@
Subproject commit 40eb301f320e1d85ce3bc12798022149eae3eee3

@ -1 +1 @@
Subproject commit 409c16be502e39fe70dd6fe2d9ad4842ef2c9a53
Subproject commit 89268a6d17fc87003b209a1422c17ab288be99a0

@ -1 +1 @@
Subproject commit 4e246c56ec5afb5ad66b9b04374d39ac04675c8e
Subproject commit df2e3581520f36776cd42b9fec3ec4a51ab878ef

@ -1 +1 @@
Subproject commit 539c0a8d8e3733c9f25ea9a184c85c77504f1653
Subproject commit 1076b348abd17859a116f4b111c43d58a588a086

1
externals/breakpad vendored

@ -1 +0,0 @@
Subproject commit c89f9dddc793f19910ef06c13e4fd240da4e7a59

9
externals/breakpad/.clang-format vendored Normal file
View file

@ -0,0 +1,9 @@
# Defines the Chromium style for automatic reformatting.
# https://clang.llvm.org/docs/ClangFormatStyleOptions.html
BasedOnStyle: Chromium
# This defaults to 'Auto'. Explicitly set it for a while, so that
# 'vector<vector<int> >' in existing files gets formatted to
# 'vector<vector<int>>'. ('Auto' means that clang-format will only use
# 'int>>' if the file already contains at least one such instance.)
Standard: Cpp11

View file

@ -0,0 +1,73 @@
# GitHub actions workflow.
# https://docs.github.com/en/actions/learn-github-actions/workflow-syntax-for-github-actions
name: Build+Test CI
on:
push:
branches: [main]
schedule:
# The GH mirroring from Google GoB does not trigger push actions.
# Fire it every other day to provide some coverage. This will run ~8 AM PT.
- cron: '39 3 */2 * *'
# Allow for manual triggers from the web.
workflow_dispatch:
jobs:
autotools:
strategy:
fail-fast: false
matrix:
include:
- os: ubuntu-latest
cc: gcc
cxx: g++
- os: ubuntu-latest
cc: clang
cxx: clang++
- os: macos-latest
cc: clang
cxx: clang++
runs-on: ${{ matrix.os }}
env:
CC: ${{ matrix.cc }}
CXX: ${{ matrix.cxx }}
steps:
- name: System settings
run: |
set -x
$CC --version
$CXX --version
getconf _NPROCESSORS_ONLN
getconf _NPROCESSORS_CONF
true
- name: Checkout depot_tools
run: git clone --depth=1 https://chromium.googlesource.com/chromium/tools/depot_tools.git ../depot_tools
- name: Checkout breakpad
run: |
set -xe
PATH+=:$PWD/../depot_tools
gclient config --unmanaged --name=src https://github.com/${{ github.repository }}
gclient sync --no-history --nohooks
# First build & test in-tree.
- run: ./configure --disable-silent-rules
working-directory: src
- run: make -j$(getconf _NPROCESSORS_CONF)
working-directory: src
- run: make -j$(getconf _NPROCESSORS_CONF) check VERBOSE=1
working-directory: src
- run: make -j$(getconf _NPROCESSORS_CONF) distclean
working-directory: src
# Then build & test out-of-tree.
- run: mkdir -p src/build/native
- run: ../../configure --disable-silent-rules
working-directory: src/build/native
- run: make -j$(getconf _NPROCESSORS_CONF) distcheck VERBOSE=1
working-directory: src/build/native

View file

@ -0,0 +1,22 @@
# GitHub actions workflow.
# https://docs.github.com/en/actions/learn-github-actions/workflow-syntax-for-github-actions
# https://github.com/superbrothers/close-pull-request
name: Close Pull Request
on:
pull_request_target:
types: [opened]
jobs:
run:
runs-on: ubuntu-latest
steps:
- uses: superbrothers/close-pull-request@v3
with:
comment: >
Thanks for your contribution!
Unfortunately, we don't use GitHub pull requests to manage code
contributions to this repository.
Instead, please see [README.md](../blob/HEAD/README.md) which
provides full instructions on how to get involved.

View file

@ -0,0 +1,43 @@
# GitHub actions workflow.
# https://docs.github.com/en/actions/learn-github-actions/workflow-syntax-for-github-actions
# https://scan.coverity.com/projects/google-breakpad
name: Coverity Scan
on:
push:
branches: [main]
schedule:
# The GH mirroring from Google GoB does not trigger push actions.
# Fire it once a week to provide some coverage.
- cron: '39 2 * * WED'
# Allow for manual triggers from the web.
workflow_dispatch:
jobs:
coverity:
runs-on: ubuntu-latest
env:
CC: clang
CXX: clang++
steps:
- name: Checkout depot_tools
run: git clone --depth=1 https://chromium.googlesource.com/chromium/tools/depot_tools.git ../depot_tools
- name: Checkout breakpad
run: |
set -xe
PATH+=:$PWD/../depot_tools
gclient config --unmanaged --name=src https://github.com/${{ github.repository }}
gclient sync --no-history --nohooks
- run: ./configure --disable-silent-rules
working-directory: src
- uses: vapier/coverity-scan-action@v1
with:
command: make -C src -O -j$(getconf _NPROCESSORS_CONF)
email: ${{ secrets.COVERITY_SCAN_EMAIL }}
token: ${{ secrets.COVERITY_SCAN_TOKEN }}

90
externals/breakpad/.gitignore vendored Normal file
View file

@ -0,0 +1,90 @@
# Copyright 2014 Google LLC
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions are
# met:
#
# * Redistributions of source code must retain the above copyright
# notice, this list of conditions and the following disclaimer.
# * Redistributions in binary form must reproduce the above
# copyright notice, this list of conditions and the following disclaimer
# in the documentation and/or other materials provided with the
# distribution.
# * Neither the name of Google LLC nor the names of its
# contributors may be used to endorse or promote products derived from
# this software without specific prior written permission.
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
# Ignore other VCSs.
.repo/
.svn/
# Ignore common compiled artifacts.
*~
*.dwo
*.o
lib*.a
/breakpad.pc
/breakpad-client.pc
/src/client/linux/linux_client_unittest_shlib
/src/client/linux/linux_dumper_unittest_helper
/src/common/linux/google_crashdump_uploader_test
/src/processor/microdump_stackwalk
/src/processor/minidump_dump
/src/processor/minidump_stackwalk
/src/tools/linux/core2md/core2md
/src/tools/linux/core_handler/core_handler
/src/tools/linux/dump_syms/dump_syms
/src/tools/linux/md2core/minidump-2-core
/src/tools/linux/pid2md/pid2md
/src/tools/linux/symupload/minidump_upload
/src/tools/linux/symupload/sym_upload
/src/tools/mac/dump_syms/dump_syms
/src/tools/mac/dump_syms/dump_syms_mac
# Ignore unit test artifacts.
*_unittest
*.log
*.trs
# Ignore autotools generated artifacts.
.deps
.dirstamp
autom4te.cache/
/config.cache
config.h
/config.log
/config.status
/Makefile
stamp-h1
# Ignore generated Visual Studio artifacts.
*.filters
*.sdf
*.sln
*.suo
*.vcproj
*.vcxproj
# Ignore generated Makefiles
src/Makefile
*.Makefile
*.target.mk
# Ignore compiled Python files.
*.pyc
# Ignore directories gclient syncs.
src/testing
src/third_party/protobuf

1
externals/breakpad/AUTHORS vendored Normal file
View file

@ -0,0 +1 @@
opensource@google.com

0
externals/breakpad/ChangeLog vendored Normal file
View file

58
externals/breakpad/DEPS vendored Normal file
View file

@ -0,0 +1,58 @@
# Copyright 2010 Google LLC
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions are
# met:
#
# * Redistributions of source code must retain the above copyright
# notice, this list of conditions and the following disclaimer.
# * Redistributions in binary form must reproduce the above
# copyright notice, this list of conditions and the following disclaimer
# in the documentation and/or other materials provided with the
# distribution.
# * Neither the name of Google LLC nor the names of its
# contributors may be used to endorse or promote products derived from
# this software without specific prior written permission.
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
# This is used to mimic the svn:externals mechanism for gclient (both Git and
# SVN) based checkouts of Breakpad. As such, its use is entirely optional. If
# using a manually managed SVN checkout as opposed to a gclient managed checkout
# you can still use the hooks mechanism for generating project files by calling
# 'gclient runhooks' rather than 'gclient sync'.
deps = {
# Testing libraries and utilities.
"src/src/testing":
"https://github.com/google/googletest.git" +
"@release-1.11.0",
# Protobuf.
"src/src/third_party/protobuf/protobuf":
"https://github.com/google/protobuf.git" +
"@cb6dd4ef5f82e41e06179dcd57d3b1d9246ad6ac",
# Linux syscall support.
"src/src/third_party/lss":
"https://chromium.googlesource.com/linux-syscall-support/" +
"@9719c1e1e676814c456b55f5f070eabad6709d31",
}
hooks = [
{
# Keep the manifest up to date.
"action": ["src/src/tools/python/deps-to-manifest.py",
"src/DEPS", "src/default.xml"],
},
]

13
externals/breakpad/DIR_METADATA vendored Normal file
View file

@ -0,0 +1,13 @@
# Metadata information for this directory.
#
# For more information on DIR_METADATA files, see:
# https://source.chromium.org/chromium/infra/infra/+/HEAD:go/src/infra/tools/dirmd/README.md
#
# For the schema of this file, see Metadata message:
# https://source.chromium.org/chromium/infra/infra/+/HEAD:go/src/infra/tools/dirmd/proto/dir_metadata.proto
monorail {
project: "google-breakpad"
}
team_email: "google-breakpad-dev@googlegroups.com"

370
externals/breakpad/INSTALL vendored Normal file
View file

@ -0,0 +1,370 @@
Installation Instructions
*************************
Copyright (C) 1994-1996, 1999-2002, 2004-2013 Free Software Foundation,
Inc.
Copying and distribution of this file, with or without modification,
are permitted in any medium without royalty provided the copyright
notice and this notice are preserved. This file is offered as-is,
without warranty of any kind.
Basic Installation
==================
Briefly, the shell commands `./configure; make; make install' should
configure, build, and install this package. The following
more-detailed instructions are generic; see the `README' file for
instructions specific to this package. Some packages provide this
`INSTALL' file but do not implement all of the features documented
below. The lack of an optional feature in a given package is not
necessarily a bug. More recommendations for GNU packages can be found
in *note Makefile Conventions: (standards)Makefile Conventions.
The `configure' shell script attempts to guess correct values for
various system-dependent variables used during compilation. It uses
those values to create a `Makefile' in each directory of the package.
It may also create one or more `.h' files containing system-dependent
definitions. Finally, it creates a shell script `config.status' that
you can run in the future to recreate the current configuration, and a
file `config.log' containing compiler output (useful mainly for
debugging `configure').
It can also use an optional file (typically called `config.cache'
and enabled with `--cache-file=config.cache' or simply `-C') that saves
the results of its tests to speed up reconfiguring. Caching is
disabled by default to prevent problems with accidental use of stale
cache files.
If you need to do unusual things to compile the package, please try
to figure out how `configure' could check whether to do them, and mail
diffs or instructions to the address given in the `README' so they can
be considered for the next release. If you are using the cache, and at
some point `config.cache' contains results you don't want to keep, you
may remove or edit it.
The file `configure.ac' (or `configure.in') is used to create
`configure' by a program called `autoconf'. You need `configure.ac' if
you want to change it or regenerate `configure' using a newer version
of `autoconf'.
The simplest way to compile this package is:
1. `cd' to the directory containing the package's source code and type
`./configure' to configure the package for your system.
Running `configure' might take a while. While running, it prints
some messages telling which features it is checking for.
2. Type `make' to compile the package.
3. Optionally, type `make check' to run any self-tests that come with
the package, generally using the just-built uninstalled binaries.
4. Type `make install' to install the programs and any data files and
documentation. When installing into a prefix owned by root, it is
recommended that the package be configured and built as a regular
user, and only the `make install' phase executed with root
privileges.
5. Optionally, type `make installcheck' to repeat any self-tests, but
this time using the binaries in their final installed location.
This target does not install anything. Running this target as a
regular user, particularly if the prior `make install' required
root privileges, verifies that the installation completed
correctly.
6. You can remove the program binaries and object files from the
source code directory by typing `make clean'. To also remove the
files that `configure' created (so you can compile the package for
a different kind of computer), type `make distclean'. There is
also a `make maintainer-clean' target, but that is intended mainly
for the package's developers. If you use it, you may have to get
all sorts of other programs in order to regenerate files that came
with the distribution.
7. Often, you can also type `make uninstall' to remove the installed
files again. In practice, not all packages have tested that
uninstallation works correctly, even though it is required by the
GNU Coding Standards.
8. Some packages, particularly those that use Automake, provide `make
distcheck', which can by used by developers to test that all other
targets like `make install' and `make uninstall' work correctly.
This target is generally not run by end users.
Compilers and Options
=====================
Some systems require unusual options for compilation or linking that
the `configure' script does not know about. Run `./configure --help'
for details on some of the pertinent environment variables.
You can give `configure' initial values for configuration parameters
by setting variables in the command line or in the environment. Here
is an example:
./configure CC=c99 CFLAGS=-g LIBS=-lposix
*Note Defining Variables::, for more details.
Compiling For Multiple Architectures
====================================
You can compile the package for more than one kind of computer at the
same time, by placing the object files for each architecture in their
own directory. To do this, you can use GNU `make'. `cd' to the
directory where you want the object files and executables to go and run
the `configure' script. `configure' automatically checks for the
source code in the directory that `configure' is in and in `..'. This
is known as a "VPATH" build.
With a non-GNU `make', it is safer to compile the package for one
architecture at a time in the source code directory. After you have
installed the package for one architecture, use `make distclean' before
reconfiguring for another architecture.
On MacOS X 10.5 and later systems, you can create libraries and
executables that work on multiple system types--known as "fat" or
"universal" binaries--by specifying multiple `-arch' options to the
compiler but only a single `-arch' option to the preprocessor. Like
this:
./configure CC="gcc -arch i386 -arch x86_64 -arch ppc -arch ppc64" \
CXX="g++ -arch i386 -arch x86_64 -arch ppc -arch ppc64" \
CPP="gcc -E" CXXCPP="g++ -E"
This is not guaranteed to produce working output in all cases, you
may have to build one architecture at a time and combine the results
using the `lipo' tool if you have problems.
Installation Names
==================
By default, `make install' installs the package's commands under
`/usr/local/bin', include files under `/usr/local/include', etc. You
can specify an installation prefix other than `/usr/local' by giving
`configure' the option `--prefix=PREFIX', where PREFIX must be an
absolute file name.
You can specify separate installation prefixes for
architecture-specific files and architecture-independent files. If you
pass the option `--exec-prefix=PREFIX' to `configure', the package uses
PREFIX as the prefix for installing programs and libraries.
Documentation and other data files still use the regular prefix.
In addition, if you use an unusual directory layout you can give
options like `--bindir=DIR' to specify different values for particular
kinds of files. Run `configure --help' for a list of the directories
you can set and what kinds of files go in them. In general, the
default for these options is expressed in terms of `${prefix}', so that
specifying just `--prefix' will affect all of the other directory
specifications that were not explicitly provided.
The most portable way to affect installation locations is to pass the
correct locations to `configure'; however, many packages provide one or
both of the following shortcuts of passing variable assignments to the
`make install' command line to change installation locations without
having to reconfigure or recompile.
The first method involves providing an override variable for each
affected directory. For example, `make install
prefix=/alternate/directory' will choose an alternate location for all
directory configuration variables that were expressed in terms of
`${prefix}'. Any directories that were specified during `configure',
but not in terms of `${prefix}', must each be overridden at install
time for the entire installation to be relocated. The approach of
makefile variable overrides for each directory variable is required by
the GNU Coding Standards, and ideally causes no recompilation.
However, some platforms have known limitations with the semantics of
shared libraries that end up requiring recompilation when using this
method, particularly noticeable in packages that use GNU Libtool.
The second method involves providing the `DESTDIR' variable. For
example, `make install DESTDIR=/alternate/directory' will prepend
`/alternate/directory' before all installation names. The approach of
`DESTDIR' overrides is not required by the GNU Coding Standards, and
does not work on platforms that have drive letters. On the other hand,
it does better at avoiding recompilation issues, and works well even
when some directory options were not specified in terms of `${prefix}'
at `configure' time.
Optional Features
=================
If the package supports it, you can cause programs to be installed
with an extra prefix or suffix on their names by giving `configure' the
option `--program-prefix=PREFIX' or `--program-suffix=SUFFIX'.
Some packages pay attention to `--enable-FEATURE' options to
`configure', where FEATURE indicates an optional part of the package.
They may also pay attention to `--with-PACKAGE' options, where PACKAGE
is something like `gnu-as' or `x' (for the X Window System). The
`README' should mention any `--enable-' and `--with-' options that the
package recognizes.
For packages that use the X Window System, `configure' can usually
find the X include and library files automatically, but if it doesn't,
you can use the `configure' options `--x-includes=DIR' and
`--x-libraries=DIR' to specify their locations.
Some packages offer the ability to configure how verbose the
execution of `make' will be. For these packages, running `./configure
--enable-silent-rules' sets the default to minimal output, which can be
overridden with `make V=1'; while running `./configure
--disable-silent-rules' sets the default to verbose, which can be
overridden with `make V=0'.
Particular systems
==================
On HP-UX, the default C compiler is not ANSI C compatible. If GNU
CC is not installed, it is recommended to use the following options in
order to use an ANSI C compiler:
./configure CC="cc -Ae -D_XOPEN_SOURCE=500"
and if that doesn't work, install pre-built binaries of GCC for HP-UX.
HP-UX `make' updates targets which have the same time stamps as
their prerequisites, which makes it generally unusable when shipped
generated files such as `configure' are involved. Use GNU `make'
instead.
On OSF/1 a.k.a. Tru64, some versions of the default C compiler cannot
parse its `<wchar.h>' header file. The option `-nodtk' can be used as
a workaround. If GNU CC is not installed, it is therefore recommended
to try
./configure CC="cc"
and if that doesn't work, try
./configure CC="cc -nodtk"
On Solaris, don't put `/usr/ucb' early in your `PATH'. This
directory contains several dysfunctional programs; working variants of
these programs are available in `/usr/bin'. So, if you need `/usr/ucb'
in your `PATH', put it _after_ `/usr/bin'.
On Haiku, software installed for all users goes in `/boot/common',
not `/usr/local'. It is recommended to use the following options:
./configure --prefix=/boot/common
Specifying the System Type
==========================
There may be some features `configure' cannot figure out
automatically, but needs to determine by the type of machine the package
will run on. Usually, assuming the package is built to be run on the
_same_ architectures, `configure' can figure that out, but if it prints
a message saying it cannot guess the machine type, give it the
`--build=TYPE' option. TYPE can either be a short name for the system
type, such as `sun4', or a canonical name which has the form:
CPU-COMPANY-SYSTEM
where SYSTEM can have one of these forms:
OS
KERNEL-OS
See the file `config.sub' for the possible values of each field. If
`config.sub' isn't included in this package, then this package doesn't
need to know the machine type.
If you are _building_ compiler tools for cross-compiling, you should
use the option `--target=TYPE' to select the type of system they will
produce code for.
If you want to _use_ a cross compiler, that generates code for a
platform different from the build platform, you should specify the
"host" platform (i.e., that on which the generated programs will
eventually be run) with `--host=TYPE'.
Sharing Defaults
================
If you want to set default values for `configure' scripts to share,
you can create a site shell script called `config.site' that gives
default values for variables like `CC', `cache_file', and `prefix'.
`configure' looks for `PREFIX/share/config.site' if it exists, then
`PREFIX/etc/config.site' if it exists. Or, you can set the
`CONFIG_SITE' environment variable to the location of the site script.
A warning: not all `configure' scripts look for a site script.
Defining Variables
==================
Variables not defined in a site shell script can be set in the
environment passed to `configure'. However, some packages may run
configure again during the build, and the customized values of these
variables may be lost. In order to avoid this problem, you should set
them in the `configure' command line, using `VAR=value'. For example:
./configure CC=/usr/local2/bin/gcc
causes the specified `gcc' to be used as the C compiler (unless it is
overridden in the site shell script).
Unfortunately, this technique does not work for `CONFIG_SHELL' due to
an Autoconf limitation. Until the limitation is lifted, you can use
this workaround:
CONFIG_SHELL=/bin/bash ./configure CONFIG_SHELL=/bin/bash
`configure' Invocation
======================
`configure' recognizes the following options to control how it
operates.
`--help'
`-h'
Print a summary of all of the options to `configure', and exit.
`--help=short'
`--help=recursive'
Print a summary of the options unique to this package's
`configure', and exit. The `short' variant lists options used
only in the top level, while the `recursive' variant lists options
also present in any nested packages.
`--version'
`-V'
Print the version of Autoconf used to generate the `configure'
script, and exit.
`--cache-file=FILE'
Enable the cache: use and save the results of the tests in FILE,
traditionally `config.cache'. FILE defaults to `/dev/null' to
disable caching.
`--config-cache'
`-C'
Alias for `--cache-file=config.cache'.
`--quiet'
`--silent'
`-q'
Do not print messages saying which checks are being made. To
suppress all normal output, redirect it to `/dev/null' (any error
messages will still be shown).
`--srcdir=DIR'
Look for the package's source code in directory DIR. Usually
`configure' can determine that directory automatically.
`--prefix=DIR'
Use DIR as the installation prefix. *note Installation Names::
for more details, including other options available for fine-tuning
the installation locations.
`--no-create'
`-n'
Run the configure checks, but stop before creating any output
files.
`configure' also accepts some other, not widely useful, options. Run
`configure --help' for more details.

1068
externals/breakpad/LICENSE vendored Normal file

File diff suppressed because it is too large Load diff

1794
externals/breakpad/Makefile.am vendored Normal file

File diff suppressed because it is too large Load diff

10322
externals/breakpad/Makefile.in vendored Normal file

File diff suppressed because it is too large Load diff

0
externals/breakpad/NEWS vendored Normal file
View file

13
externals/breakpad/OWNERS vendored Normal file
View file

@ -0,0 +1,13 @@
# Sorted alphabetically.
# Please see README.md for contact info.
ivanpe@chromium.org
jperaza@chromium.org
mark@chromium.org
nbilling@google.com
primiano@chromium.org
saugustine@google.com
rsesek@chromium.org
ted@mielczarek.org
thestig@chromium.org
vapier@chromium.org

139
externals/breakpad/README.ANDROID vendored Normal file
View file

@ -0,0 +1,139 @@
Google Breakpad for Android
===========================
This document explains how to use the Google Breakpad client library
on Android, and later generate valid stack traces from the minidumps
it generates.
This release supports ARM, x86 and MIPS based Android systems.
This release requires NDK release r11c or higher.
I. Building the client library:
===============================
The Android client is built as a static library that you can
link into your own Android native code. There are two ways to
build it:
I.1. Building with ndk-build:
-----------------------------
If you're using the ndk-build build system, you can follow
these simple steps:
1/ Include android/google_breakpad/Android.mk from your own
project's Android.mk
This can be done either directly, or using ndk-build's
import-module feature.
2/ Link the library to one of your modules by using:
LOCAL_STATIC_LIBRARIES += breakpad_client
NOTE: The client library requires a C++ STL implementation,
which you can select with APP_STL in your Application.mk
It has been tested succesfully with both STLport and GNU libstdc++
I.2. Building with a standalone Android toolchain:
--------------------------------------------------
All you need to do is configure your build with the right 'host'
value, and disable the processor and tools, as in:
$GOOGLE_BREAKPAD_PATH/configure --host=arm-linux-androideabi \
--disable-processor \
--disable-tools
make -j4
The library will be under src/client/linux/libbreakpad_client.a
You can also use 'make check' to run the test suite on a connected
Android device. This requires the Android 'adb' tool to be in your
path.
II. Using the client library in Android:
========================================
The usage instructions are very similar to the Linux ones that are
found at https://chromium.googlesource.com/breakpad/breakpad/+/master/docs/linux_starter_guide.md
1/ You need to include "client/linux/handler/exception_handler.h" from a C++
source file.
2/ If you're not using ndk-build, you also need to:
- add the following to your compiler include search paths:
$GOOGLE_BREAKPAD_PATH/src
$GOOGLE_BREAKPAD_PATH/src/common/android/include
- add -llog to your linker flags
Note that ndk-build does that for your automatically.
3/ Keep in mind that there is no /tmp directory on Android.
If you use the library from a regular Android applications, specify a
path under your app-specific storage directory. An alternative is to
store them on the SDCard, but this requires a specific permission.
For a concrete example, see the sample test application under
android/sample_app. See its README for more information.
III. Getting a stack trace on the host:
=======================================
This process is similar to other platforms, but here's a quick example:
1/ Retrieve the minidumps on your development machine.
2/ Dump the symbols for your native libraries with the 'dump_syms' tool.
This first requires building the host version of Google Breakpad, then
calling:
dump_syms $PROJECT_PATH/obj/local/$ABI/libfoo.so > libfoo.so.sym
3/ Create the symbol directory hierarchy.
The first line of the generated libfoo.so.sym will have a "MODULE"
entry that carries a hexadecimal version number, e.g.:
MODULE Linux arm D51B4A5504974FA6ECC1869CAEE3603B0 test_google_breakpad
Note: The second field could be either 'Linux' or 'Android'.
Extract the version number, and a 'symbol' directory, for example:
$PROJECT_PATH/symbols/libfoo.so/$VERSION/
Copy/Move your libfoo.sym file there.
4/ Invoke minidump_stackwalk to create the stack trace:
minidump_stackwalk $MINIDUMP_FILE $PROJECT_PATH/symbols
Note that various helper scripts can be found on the web to automate these
steps.
IV. Verifying the Android build library:
========================================
If you modify Google Breakpad and want to check that it still works correctly
on Android, please run the android/run-checks.sh script which will do all
necessary verifications for you. This includes:
- Rebuilding the full host binaries.
- Rebuilding the full Android binaries with configure/make.
- Rebuilding the client library unit tests, and running them on a device.
- Rebuilding the client library with ndk-build.
- Building, installing and running a test crasher program on a device.
- Extracting the corresponding minidump, dumping the test program symbols
and generating a stack trace.
- Checking the generated stack trace for valid source locations.
For more details, please run:
android/run-checks.sh --help-all

82
externals/breakpad/README.md vendored Normal file
View file

@ -0,0 +1,82 @@
# Breakpad
Breakpad is a set of client and server components which implement a
crash-reporting system.
* [Homepage](https://chromium.googlesource.com/breakpad/breakpad/)
* [Documentation](./docs/)
* [Bugs](https://bugs.chromium.org/p/google-breakpad/)
* Discussion/Questions: [google-breakpad-discuss@googlegroups.com](https://groups.google.com/d/forum/google-breakpad-discuss)
* Developer/Reviews: [google-breakpad-dev@googlegroups.com](https://groups.google.com/d/forum/google-breakpad-dev)
* Tests: [![Build+Test CI](https://github.com/google/breakpad/actions/workflows/build-test-ci.yml/badge.svg)](https://github.com/google/breakpad/actions/workflows/build-test-ci.yml) [![Build status](https://ci.appveyor.com/api/projects/status/eguv4emv2rhq68u2?svg=true)](https://ci.appveyor.com/project/vapier/breakpad)
* Coverage [![Coverity Status](https://scan.coverity.com/projects/9215/badge.svg)](https://scan.coverity.com/projects/google-breakpad)
## Getting started (from main)
1. First, [download depot_tools](http://dev.chromium.org/developers/how-tos/install-depot-tools)
and ensure that theyre in your `PATH`.
2. Create a new directory for checking out the source code (it must be named
breakpad).
```sh
mkdir breakpad && cd breakpad
```
3. Run the `fetch` tool from depot_tools to download all the source repos.
```sh
fetch breakpad
cd src
```
4. Build the source.
```sh
./configure && make
```
You can also cd to another directory and run configure from there to build
outside the source tree.
This will build the processor tools (`src/processor/minidump_stackwalk`,
`src/processor/minidump_dump`, etc), and when building on Linux it will
also build the client libraries and some tools
(`src/tools/linux/dump_syms/dump_syms`,
`src/tools/linux/md2core/minidump-2-core`, etc).
5. Optionally, run tests.
```sh
make check
```
6. Optionally, install the built libraries
```sh
make install
```
If you need to reconfigure your build be sure to run `make distclean` first.
To update an existing checkout to a newer revision, you can
`git pull` as usual, but then you should run `gclient sync` to ensure that the
dependent repos are up-to-date.
## To request change review
1. Follow the steps above to get the source and build it.
2. Make changes. Build and test your changes.
For core code like processor use methods above.
For linux/mac/windows, there are test targets in each project file.
3. Commit your changes to your local repo and upload them to the server.
http://dev.chromium.org/developers/contributing-code
e.g. `git commit ... && git cl upload ...`
You will be prompted for credential and a description.
4. At https://chromium-review.googlesource.com/ you'll find your issue listed;
click on it, then “Add reviewer”, and enter in the code reviewer. Depending
on your settings, you may not see an email, but the reviewer has been
notified with google-breakpad-dev@googlegroups.com always CCd.

1273
externals/breakpad/aclocal.m4 vendored Normal file

File diff suppressed because it is too large Load diff

371
externals/breakpad/android/common-functions.sh vendored Executable file
View file

@ -0,0 +1,371 @@
# Copyright 2012 Google LLC
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions are
# met:
#
# * Redistributions of source code must retain the above copyright
# notice, this list of conditions and the following disclaimer.
# * Redistributions in binary form must reproduce the above
# copyright notice, this list of conditions and the following disclaimer
# in the documentation and/or other materials provided with the
# distribution.
# * Neither the name of Google LLC nor the names of its
# contributors may be used to endorse or promote products derived from
# this software without specific prior written permission.
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
# Collection of common shell functions for 'run-checks.sh' et 'test-shell.sh'
# All internal variables and functions use an underscore as a prefix
# (e.g. _VERBOSE, _ALL_CLEANUPS, etc..).
# Sanitize the environment
export LANG=C
export LC_ALL=C
if [ "$BASH_VERSION" ]; then
set -o posix
fi
# Utility functions
_ALL_CLEANUPS=
# Register a function to be called when the script exits, even in case of
# Ctrl-C, logout, etc.
# $1: function name.
atexit () {
if [ -z "$_ALL_CLEANUPS" ]; then
_ALL_CLEANUPS=$1
# Ensure a clean exit when the script is:
# - Exiting normally (EXIT)
# - Interrupted by Ctrl-C (INT)
# - Interrupted by log out (HUP)
# - Being asked to quit nicely (TERM)
# - Being asked to quit and dump core (QUIT)
trap "_exit_cleanups \$?" EXIT INT HUP QUIT TERM
else
_ALL_CLEANUPS="$_ALL_CLEANUPS $1"
fi
}
# Called on exit if at least one function was registered with atexit
# $1: final exit status code
_exit_cleanups () {
local CLEANUP CLEANUPS
# Ignore calls to atexit during cleanups
CLEANUPS=$_ALL_CLEANUPS
_ALL_CLEANUPS=
for CLEANUP in $CLEANUPS; do
($CLEANUP)
done
exit "$@"
}
# Dump a panic message then exit.
# $1+: message
panic () {
echo "ERROR: $@" >&2
exit 1
}
# If the previous command failed, dump a panic message then exit.
# $1+: message.
fail_panic () {
if [ $? != 0 ]; then
panic "$@"
fi;
}
_VERBOSE=0
# Increase verbosity for dump/log/run/run2 functions
increase_verbosity () {
_VERBOSE=$(( $_VERBOSE + 1 ))
}
# Decrease verbosity
decrease_verbosity () {
_VERBOSE=$(( $_VERBOSE - 1 ))
}
# Returns success iff verbosity level is higher than a specific value
# $1: verbosity level
verbosity_is_higher_than () {
[ "$_VERBOSE" -gt "$1" ]
}
# Returns success iff verbosity level is lower than a specific value
# $1: verbosity level
verbosity_is_lower_than () {
[ "$_VERBOSE" -le "$1" ]
}
# Dump message to stdout, unless verbosity is < 0, i.e. --quiet was called
# $1+: message
dump () {
if [ "$_VERBOSE" -ge 0 ]; then
printf "%s\n" "$*"
fi
}
# If --verbose was used, dump a message to stdout.
# $1+: message
log () {
if [ "$_VERBOSE" -ge 1 ]; then
printf "%s\n" "$*"
fi
}
_RUN_LOG=
# Set a run log file that can be used to collect the output of commands that
# are not displayed.
set_run_log () {
_RUN_LOG=$1
}
# Run a command. Output depends on $_VERBOSE:
# $_VERBOSE <= 0: Run command, store output into the run log
# $_VERBOSE >= 1: Dump command, run it, output goest to stdout
# Note: Ideally, the command's output would go to the run log for $_VERBOSE >= 1
# but the 'tee' tool doesn't preserve the status code of its input pipe
# in case of error.
run () {
local LOGILE
if [ "$_RUN_LOG" ]; then
LOGFILE=$_RUN_LOG
else
LOGFILE=/dev/null
fi
if [ "$_VERBOSE" -ge 1 ]; then
echo "COMMAND: $@"
"$@"
else
"$@" >>$LOGFILE 2>&1
fi
}
# Same as run(), but only dump command output for $_VERBOSE >= 2
run2 () {
local LOGILE
if [ "$_RUN_LOG" ]; then
LOGFILE=$_RUN_LOG
else
LOGFILE=/dev/null
fi
if [ "$_VERBOSE" -ge 1 ]; then
echo "COMMAND: $@"
fi
if [ "$_VERBOSE" -ge 2 ]; then
"$@"
else
"$@" >>$LOGFILE 2>&1
fi
}
# Extract number of cores to speed up the builds
# Out: number of CPU cores
get_core_count () {
case $(uname -s) in
Linux)
grep -c -e '^processor' /proc/cpuinfo
;;
Darwin)
sysctl -n hw.ncpu
;;
CYGWIN*|*_NT-*)
echo $NUMBER_OF_PROCESSORS
;;
*)
echo 1
;;
esac
}
# Check for the Android ADB program.
#
# On success, return nothing, but updates internal variables so later calls to
# adb_shell, adb_push, etc.. will work. You can get the path to the ADB program
# with adb_get_program if needed.
#
# On failure, returns 1, and updates the internal adb error message, which can
# be retrieved with adb_get_error.
#
# $1: optional ADB program path.
# Return: success or failure.
_ADB=
_ADB_STATUS=
_ADB_ERROR=
adb_check () {
# First, try to find the executable in the path, or the SDK install dir.
_ADB=$1
if [ -z "$_ADB" ]; then
_ADB=$(which adb 2>/dev/null)
if [ -z "$_ADB" -a "$ANDROID_SDK_ROOT" ]; then
_ADB=$ANDROID_SDK_ROOT/platform-tools/adb
if [ ! -f "$_ADB" ]; then
_ADB=
fi
fi
if [ -z "$_ADB" ]; then
_ADB_STATUS=1
_ADB_ERROR="The Android 'adb' tool is not in your path."
return 1
fi
fi
log "Found ADB program: $_ADB"
# Check that it works correctly
local ADB_VERSION
ADB_VERSION=$("$_ADB" version 2>/dev/null)
case $ADB_VERSION in
"Android Debug Bridge "*) # Pass
log "Found ADB version: $ADB_VERSION"
;;
*) # Fail
_ADB_ERROR="Your ADB binary reports a bad version ($ADB_VERSION): $_ADB"
_ADB_STATUS=1
return 1
esac
_ADB_STATUS=0
return 0
}
# Return the path to the Android ADB program, if correctly detected.
# On failure, return the empty string.
# Out: ADB program path (or empty on failure)
# Return: success or failure.
adb_get_program () {
# Return cached value as soon as possible.
if [ -z "$_ADB_STATUS" ]; then
adb_check $1
fi
echo "$_ADB"
return $_ADB_STATUS
}
# Return the error corresponding to the last ADB function failure.
adb_get_error () {
echo "$_ADB_ERROR"
}
# Check that there is one device connected through ADB.
# In case of failure, use adb_get_error to know why this failed.
# $1: Optional adb program path
# Return: success or failure.
_ADB_DEVICE=
_ADB_DEVICE_STATUS=
adb_check_device () {
if [ "$_ADB_DEVICE_STATUS" ]; then
return $_ADB_DEVICE_STATUS
fi
# Check for ADB.
if ! adb_check $1; then
_ADB_DEVICE_STATUS=$_ADB_STATUS
return 1
fi
local ADB_DEVICES NUM_DEVICES FINGERPRINT
# Count the number of connected devices.
ADB_DEVICES=$("$_ADB" devices 2>/dev/null | awk '$2 == "device" { print $1; }')
NUM_DEVICES=$(echo "$ADB_DEVICES" | wc -l)
case $NUM_DEVICES in
0)
_ADB_ERROR="No Android device connected. Please connect one to your machine."
_ADB_DEVICE_STATUS=1
return 1
;;
1) # Pass
# Ensure the same device will be called in later adb_shell calls.
export ANDROID_SERIAL=$ADB_DEVICES
;;
*) # 2 or more devices.
if [ "$ANDROID_SERIAL" ]; then
ADB_DEVICES=$ANDROID_SERIAL
NUM_DEVICES=1
else
_ADB_ERROR="More than one Android device connected. \
Please define ANDROID_SERIAL in your environment"
_ADB_DEVICE_STATUS=1
return 1
fi
;;
esac
_ADB_DEVICE_STATUS=0
_ADB_DEVICE=$ADB_DEVICES
FINGERPRINT=$(adb_shell getprop ro.build.fingerprint)
log "Using ADB device: $ANDROID_SERIAL ($FINGERPRINT)"
return 0
}
# The 'adb shell' command is pretty hopeless, try to make sense of it by:
# 1/ Removing trailing \r from line endings.
# 2/ Ensuring the function returns the command's status code.
#
# $1+: Command
# Out: command output (stdout + stderr combined)
# Return: command exit status
adb_shell () {
local RET ADB_LOG
# Check for ADB device.
adb_check_device || return 1
ADB_LOG=$(mktemp "${TMPDIR:-/tmp}/adb-XXXXXXXX")
"$_ADB" shell "$@" ";" echo \$? > "$ADB_LOG" 2>&1
sed -i -e 's![[:cntrl:]]!!g' "$ADB_LOG" # Remove \r.
RET=$(sed -e '$!d' "$ADB_LOG") # Last line contains status code.
sed -e '$d' "$ADB_LOG" # Print everything except last line.
rm -f "$ADB_LOG"
return $RET
}
# Push a file to a device.
# $1: source file path
# $2: device target file path
# Return: success or failure.
adb_push () {
adb_check_device || return 1
run "$_ADB" push "$1" "$2"
}
# Pull a file from a device
# $1: device file path
# $2: target host file path
# Return: success or failure.
adb_pull () {
adb_check_device || return 1
run "$_ADB" pull "$1" "$2"
}
# Same as adb_push, but will panic if the operations didn't succeed.
adb_install () {
adb_push "$@"
fail_panic "Failed to install $1 to the Android device at $2"
}

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