From c713d44c8873c29cce7d6d5203a6d5776893d892 Mon Sep 17 00:00:00 2001 From: lizzie Date: Mon, 27 Oct 2025 05:13:44 +0100 Subject: [PATCH] [dynarmic, docs] Add support for DragonFly, shared mapping fallback to private, and update docs (#2829) Add deps instructions for void linux, alpine, nixOS, DragonFlyBSD, update haiku new stuff; add basic coding guidelines Also fixes ucontext on dragonfly :) Allows fallback if ftruncate() fails (DragonFly doesnt like shm of big files with hammer2...) This will also indirectly help OpenIndiana and Solaris since they dont like big shared files either. The downside is that no inspection of the memory can be easily done. But that's just an edge case anyways. Signed-off-by: lizzie Reviewed-on: https://git.eden-emu.dev/eden-emu/eden/pulls/2829 Reviewed-by: Shinmegumi Reviewed-by: crueter Reviewed-by: CamilleLaVey Co-authored-by: lizzie Co-committed-by: lizzie --- docs/Caveats.md | 13 +++++++ docs/Coding.md | 77 +++++++++++++++++++++++++++++++++++++++++ docs/Deps.md | 38 +++++++++++++++++--- docs/README.md | 1 + shell.nix | 19 ++++++++++ src/core/CMakeLists.txt | 7 ++-- 6 files changed, 147 insertions(+), 8 deletions(-) create mode 100644 docs/Coding.md create mode 100644 shell.nix diff --git a/docs/Caveats.md b/docs/Caveats.md index 746e14ecba..522d50007a 100644 --- a/docs/Caveats.md +++ b/docs/Caveats.md @@ -1,5 +1,16 @@ # Caveats + +- [Arch Linux](#arch-linux) +- [Gentoo Linux](#gentoo-linux) +- [macOS](#macos) +- [Solaris](#solaris) +- [HaikuOS](#haikuos) +- [OpenBSD](#openbsd) +- [FreeBSD](#freebsd) +- [NetBSD](#netbsd) + + ## Arch Linux - httplib AUR package is broken. Set `httplib_FORCE_BUNDLED=ON` if you have it installed. @@ -53,6 +64,8 @@ For this reason this patch is NOT applied to default on all platforms (for obvio `cubeb_devel` will also not work, either disable cubeb or uninstall it. +Still will not run flawlessly until `mesa-24` is available. Modify CMakeCache.txt with the `.so` of libGL and libGLESv2 by doing the incredibly difficult task of copy pasting them (`cp /boot/system/lib/libGL.so .`) + ## OpenBSD After configuration, you may need to modify `externals/ffmpeg/CMakeFiles/ffmpeg-build/build.make` to use `-j$(nproc)` instead of just `-j`. diff --git a/docs/Coding.md b/docs/Coding.md new file mode 100644 index 0000000000..ec524cbbf8 --- /dev/null +++ b/docs/Coding.md @@ -0,0 +1,77 @@ +# Coding guidelines + +These are mostly "suggestions", if you feel like your code is readable, comprehensible to others; and most importantly doesn't result in unreadable spaghetti you're fine to go. + +But for new developers you may find that following these guidelines will make everything x10 easier. + +## Naming conventions + +Simply put, types/classes are named as `PascalCase`, same for methods and functions like `AddElement`. Variables are named `like_this_snake_case` and constants are `IN_SCREAMING_CASE`. + +Template typenames prefer short names like `T`, `I`, `U`, if a longer name is required either `Iterator` or `perform_action` are fine as well. + +Macros must always be in `SCREAMING_CASE`. Do not use short letter macros as systems like Solaris will conflict with them; a good rule of thumb is >5 characters per macro - i.e `THIS_MACRO_IS_GOOD`, `AND_ALSO_THIS_ONE`. + +Try not using hungarian notation, if you're able. + +## Formatting + +Do not put if/while/etc braces after lines: +```c++ +// no dont do this +if (thing) +{ + some(); // ... +} + +// do this +if (thing) { + some(); // ... +} + +// or this +if (thing) + some(); // ... + +// this is also ok +if (thing) some(); +``` + +Brace rules are lax, if you can get the point across, do it: + +```c++ +// this is fine +do { + if (thing) { + return 0; + } +} while (other); + +// this is also ok --- albeit a bit more dense +do if (thing) return 0; while (other); + +// ok as well +do { + if (thing) return 0; +} while (other); +``` + +There is no 80-column limit but preferably be mindful of other developer's readability (like don't just put everything onto one line). + +```c++ +// someone is going to be mad due to this +SDL_AudioSpec obtained; +device_name.empty() ? device = SDL_OpenAudioDevice(nullptr, capture, &spec, &obtained, false) : device = SDL_OpenAudioDevice(device_name.c_str(), capture, &spec, &obtained, false); + +// maybe consider this +SDL_AudioSpec obtained; +if (device_name.empty()) { + device = SDL_OpenAudioDevice(nullptr, capture, &spec, &obtained, false); +} else { + device = SDL_OpenAudioDevice(device_name.c_str(), capture, &spec, &obtained, false); +} + +// or this is fine as well +SDL_AudioSpec obtained; +device = SDL_OpenAudioDevice(device_name.empty() ? nullptr : device_name.c_str(), capture, &spec, &obtained, false); +``` diff --git a/docs/Deps.md b/docs/Deps.md index 338d3a5dcb..162b83b5d6 100644 --- a/docs/Deps.md +++ b/docs/Deps.md @@ -86,6 +86,8 @@ On riscv64: These are commands to install all necessary dependencies on various Linux and BSD distributions, as well as macOS. Always review what you're running before you hit Enter! +Notes for writers: Include build tools as well, assume user has NOTHING installed (i.e a fresh install) but that they have updated beforehand so no `upgrade && update` or equivalent should be mentioned - except for rolling release systems like Arch. + Click on the arrows to expand.
@@ -136,6 +138,35 @@ sudo dnf install qt6-qtbase-private-devel * Fedora 36+ users with GCC 12 need Clang and should configure CMake with: `cmake -DCMAKE_CXX_COMPILER=clang++ -DCMAKE_C_COMPILER=clang -B build`
+
+Alpine Linux + +First, enable the community repository; [see here](https://wiki.alpinelinux.org/wiki/Repositories#Enabling_the_community_repository). +```sh +# Enable the community repository +setup-apkrepos -c +# Install +apk add g++ git cmake make mbedtls-dev mbedtls-static mesa-dev qt6-qtbase-dev qt6-qtbase-private-dev libquazip1-qt6 ffmpeg-dev libusb-dev libtool boost-dev sdl2-dev zstd-dev vulkan-utility-libraries spirv-tools-dev openssl-dev nlohmann-json lz4-dev opus-dev jq patch +``` + +`mbedtls-static` has to be specified otherwise `libeverest.a` and `libp256m.a` will fail to be found. + +
+Void Linux + +```sh +xbps-install -Su git make cmake clang pkg-config patch mbedtls-devel SPIRV-Tools-devel SPIRV-Headers lz4 liblz4-devel boost-devel ffmpeg6-devel catch2 Vulkan-Utility-Libraries Vulkan-Headers glslang openssl-devel SDL2-devel quazip-qt6-devel qt6-base-devel qt6-qt5compat-devel fmt-devel json-c++ libenet-devel libusb-devel +``` + +Yes, `nlohmann-json` is just named `json-c++`. Why? + + +
+NixOS + +A convenience script is provided on the root of this project [shell.nix](../shell.nix). Run the usual `nix-shell`. + +
macOS @@ -173,7 +204,6 @@ For NetBSD +10.1: `pkgin install git cmake boost fmtlib SDL2 catch2 libjwt spirv [Caveats](./Caveats.md#netbsd).
-
OpenBSD @@ -185,7 +215,6 @@ pkg_add cmake nasm git boost unzip--iconv autoconf-2.72p0 bash ffmpeg glslang gm [Caveats](./Caveats.md#openbsd).
-
Solaris / OpenIndiana @@ -201,7 +230,6 @@ Then install the libraries: `sudo pkg install qt6 boost glslang libzip library/l [Caveats](./Caveats.md#solaris).
-
MSYS2 @@ -226,13 +254,13 @@ pacman -Syu --needed --noconfirm $packages * Add MinGW binaries to the PATH if they aren't already: * `echo 'PATH=/mingw64/bin:$PATH' >> ~/.bashrc` * or `echo 'PATH=/mingw64/bin:$PATH' >> ~/.zshrc` -
+
HaikuOS ```sh -pkgman install git cmake libfmt_devel nlohmann_json lz4_devel opus_devel boost1.89_devel vulkan_devel qt6_base_devel libsdl2_devel ffmpeg7_devel libx11_devel enet_devel catch2_devel quazip1_qt6_devel qt6_5compat_devel zydis_devel libusb_devel libz_devel glslang +pkgman install git cmake patch libfmt_devel nlohmann_json lz4_devel opus_devel boost1.89_devel vulkan_devel qt6_base_devel libsdl2_devel ffmpeg7_devel libx11_devel enet_devel catch2_devel quazip1_qt6_devel qt6_5compat_devel zydis_devel libusb1_devel libz_devel glslang mbedtls3 ``` [Caveats](./Caveats.md#haikuos). diff --git a/docs/README.md b/docs/README.md index 9ce0857563..b7b121532a 100644 --- a/docs/README.md +++ b/docs/README.md @@ -5,6 +5,7 @@ This contains documentation created by developers. This contains build instructi - **[General Build Instructions](Build.md)** - **[Cross Compiling](CrossCompile.md)** - **[Development Guidelines](Development.md)** +- **[Coding guidelines](Coding.md)** - **[Dependencies](Deps.md)** - **[Debug Guidelines](./Debug.md)** - **[CPM - CMake Package Manager](CPMUtil.md)** diff --git a/shell.nix b/shell.nix new file mode 100644 index 0000000000..d4a67d8f97 --- /dev/null +++ b/shell.nix @@ -0,0 +1,19 @@ +let + nixpkgs = fetchTarball "https://github.com/NixOS/nixpkgs/tarball/nixos-24.05"; + pkgs = import nixpkgs { config = {}; overlays = []; }; +in +pkgs.mkShellNoCC { + packages = with pkgs; [ + # essential programs + git cmake clang gnumake patch jq pkg-config + # libraries + openssl boost fmt nlohmann_json lz4 zlib zstd + enet libopus vulkan-headers vulkan-utility-libraries + spirv-tools spirv-headers simpleini vulkan-memory-allocator + vulkan-loader unzip mbedtls zydis glslang python3 httplib + cpp-jwt ffmpeg-headless libusb1 cubeb + qt6.full # eden + SDL2 # eden-cli + discord-rpc gamemode # optional components + ]; +} \ No newline at end of file diff --git a/src/core/CMakeLists.txt b/src/core/CMakeLists.txt index 42c93b0a5f..1e5ba54e7b 100644 --- a/src/core/CMakeLists.txt +++ b/src/core/CMakeLists.txt @@ -1181,13 +1181,14 @@ if (MSVC) else() target_compile_options(core PRIVATE -Werror=conversion - -Wno-sign-conversion -Wno-cast-function-type - $<$:-fsized-deallocation> - $<$:-Wno-cast-function-type-mismatch> ) + # pre-clang19 will spam with "OH DID YOU MEAN THIS?" otherwise... + if (CXX_CLANG AND CMAKE_CXX_COMPILER_VERSION VERSION_GREATER_EQUAL 19) + target_compile_options(core PRIVATE -Wno-cast-function-type-mismatch) + endif() endif() target_include_directories(core PRIVATE ${OPUS_INCLUDE_DIRS})