[cmake, docs] msys: allow bundled FFmpeg, update dep/caveat docs, faster linking on Release mode (#2921)
Signed-off-by: crueter <crueter@eden-emu.dev> Reviewed-on: https://git.eden-emu.dev/eden-emu/eden/pulls/2921 Reviewed-by: Caio Oliveira <caiooliveirafarias0@gmail.com> Reviewed-by: Lizzie <lizzie@eden-emu.dev>
This commit is contained in:
@@ -13,12 +13,11 @@
|
||||
|
||||
## Arch Linux
|
||||
|
||||
- httplib AUR package is broken. Set `httplib_FORCE_BUNDLED=ON` if you have it installed.
|
||||
- Eden is also available as an [AUR package](https://aur.archlinux.org/packages/eden-git). If you are unable to build, either use that or compare your process to the PKGBUILD.
|
||||
Eden is also available as an [AUR package](https://aur.archlinux.org/packages/eden-git). If you are unable to build, either use that or compare your process to the PKGBUILD.
|
||||
|
||||
## Gentoo Linux
|
||||
|
||||
Do not use the system sirit or xbyak packages.
|
||||
Enable the GURU repository to install [`games-emulation/eden`](https://gitweb.gentoo.org/repo/proj/guru.git/tree/games-emulation/eden). This repository also contains some additional dependencies, such as mcl, sirit, oaknut, etc.
|
||||
|
||||
## macOS
|
||||
|
||||
@@ -102,3 +101,60 @@ cmake -B build -DCMAKE_BUILD_TYPE=Release
|
||||
cmake --build build -- -j`nproc`
|
||||
cmake --install build
|
||||
```
|
||||
|
||||
## MSYS2
|
||||
|
||||
`qt6-static` isn't supported yet.
|
||||
|
||||
Only the `MINGW64` environment is tested; however, all of the others should work (in theory) sans `MINGW32`.
|
||||
|
||||
Currently, only FFmpeg can be used as a system dependency; the others will result in linker errors.
|
||||
|
||||
When packaging an MSYS2 build, you will need to copy all dependent DLLs recursively alongside the `windeployqt6`; for example:
|
||||
|
||||
```sh
|
||||
# MSYS_TOOLCHAIN is typically just mingw64
|
||||
# since Windows is case-insensitive, you can set this to $MSYSTEM
|
||||
# or, if cross-compiling from Linux, set it to usr/x86_64-w64-mingw32
|
||||
export PATH="/${MSYS_TOOLCHAIN}/bin:$PATH"
|
||||
|
||||
# grab deps of a dll or exe and place them in the current dir
|
||||
deps() {
|
||||
# string parsing is fun
|
||||
objdump -p "$1" | grep -e ".DLL Name:" | cut -d" " -f3 | while read -r dll; do
|
||||
[ -z "$dll" ] && continue
|
||||
|
||||
# bin directory is used for DLLs, so we can do a quick "hack"
|
||||
# and use command to find the path of the DLL
|
||||
dllpath=$(command -v "$dll" 2>/dev/null || true)
|
||||
|
||||
[ -z "$dllpath" ] && continue
|
||||
|
||||
# explicitly include system32/syswow64 deps
|
||||
# these aren't needed to be bundled, as all systems include them
|
||||
case "$dllpath" in
|
||||
*System32* | *SysWOW64*) continue ;;
|
||||
esac
|
||||
|
||||
# avoid copying deps multiple times
|
||||
if [ ! -f "$dll" ]; then
|
||||
echo "$dllpath"
|
||||
cp "$dllpath" "$dll"
|
||||
|
||||
# also grab the dependencies of the dependent DLL; e.g.
|
||||
# double-conversion is a dep of Qt6Core.dll but NOT eden.exe
|
||||
deps "$dllpath"
|
||||
fi
|
||||
done
|
||||
}
|
||||
|
||||
# NB: must be done in a directory containing eden.exe
|
||||
deps eden.exe
|
||||
|
||||
# deploy Qt plugins and such
|
||||
windeployqt6 --release --no-compiler-runtime \
|
||||
--no-opengl-sw --no-system-dxc-compiler --no-system-d3d-compiler eden.exe
|
||||
|
||||
# grab deps for Qt plugins
|
||||
find ./*/ -name "*.dll" | while read -r dll; do deps "$dll"; done
|
||||
```
|
||||
23
docs/Deps.md
23
docs/Deps.md
@@ -87,6 +87,15 @@ Notes for writers: Include build tools as well, assume user has NOTHING installe
|
||||
|
||||
Click on the arrows to expand.
|
||||
|
||||
<details>
|
||||
<summary>Gentoo Linux</summary>
|
||||
|
||||
GURU must be enabled:
|
||||
|
||||
```
|
||||
sudo
|
||||
</details>
|
||||
|
||||
<details>
|
||||
<summary>Arch Linux</summary>
|
||||
|
||||
@@ -149,6 +158,8 @@ apk add g++ git cmake make mbedtls-dev mbedtls-static mesa-dev qt6-qtbase-dev qt
|
||||
`mbedtls-static` has to be specified otherwise `libeverest.a` and `libp256m.a` will fail to be found.
|
||||
|
||||
</details>
|
||||
|
||||
<details>
|
||||
<summary>Void Linux</summary>
|
||||
|
||||
```sh
|
||||
@@ -158,6 +169,7 @@ xbps-install -Su git make cmake clang pkg-config patch mbedtls-devel SPIRV-Tools
|
||||
Yes, `nlohmann-json` is just named `json-c++`. Why?
|
||||
|
||||
</details>
|
||||
|
||||
<details>
|
||||
<summary>NixOS</summary>
|
||||
|
||||
@@ -234,24 +246,27 @@ Then install the libraries: `sudo pkg install qt6 boost glslang libzip library/l
|
||||
* Download and install all dependencies:
|
||||
```
|
||||
BASE="git make autoconf libtool automake-wrapper jq patch"
|
||||
MINGW="SDL2 cmake python-pip qt6-base toolchain ffmpeg boost catch fmt lz4 nlohmann-json openssl zlib zstd enet opus mbedtls vulkan-devel libusb vulkan-memory-allocator unordered_dense clang ccache"
|
||||
|
||||
MINGW="qt6-base qt6-tools qt6-translations qt6-svg cmake toolchain clang python-pip openssl vulkan-memory-allocator vulkan-devel glslang boost fmt lz4 nlohmann-json zlib zstd enet opus mbedtls libusb unordered_dense"
|
||||
|
||||
packages="$BASE"
|
||||
for pkg in $MINGW; do
|
||||
packages="$packages mingw-w64-x86_64-$pkg"
|
||||
done
|
||||
|
||||
pacman -Syu --needed --noconfirm $packages
|
||||
pacman -Syuu --needed --noconfirm $packages
|
||||
```
|
||||
* Notes:
|
||||
- Using `qt6-static` is possible but currently untested.
|
||||
- Other environments are entirely untested, but should theoretically work provided you install all the necessary packages.
|
||||
- Clang is installed as it generally works better here. You can compile with GCC just fine, however.
|
||||
- GCC is proven to work better with the MinGW environment. If you choose to use Clang, you *may* be better off using the clang64 environment.
|
||||
- Add `qt-creator` to the `MINGW` variable to install Qt Creator. You can then create a Start Menu shortcut to the MinGW Qt Creator by running `powershell "\$s=(New-Object -COM WScript.Shell).CreateShortcut('C:\\ProgramData\\Microsoft\\Windows\\Start Menu\\Programs\\Qt Creator.lnk');\$s.TargetPath='C:\\msys64\\mingw64\\bin\\qtcreator.exe';\$s.Save()"` in Git Bash or MSYS2.
|
||||
* Add MinGW binaries to the PATH if they aren't already:
|
||||
* `echo 'PATH=/mingw64/bin:$PATH' >> ~/.bashrc`
|
||||
* or `echo 'PATH=/mingw64/bin:$PATH' >> ~/.zshrc`
|
||||
|
||||
[Caveats](./Caveats.md#msys2).
|
||||
|
||||
</details>
|
||||
<details>
|
||||
<summary>HaikuOS</summary>
|
||||
@@ -263,6 +278,8 @@ pkgman install git cmake patch libfmt_devel nlohmann_json lz4_devel opus_devel b
|
||||
[Caveats](./Caveats.md#haikuos).
|
||||
|
||||
</details>
|
||||
|
||||
<details>
|
||||
<summary>RedoxOS</summary>
|
||||
|
||||
TODO: Fix syscall crashes (heavy IO stalls and hangup due to net mutexes?)
|
||||
|
||||
Reference in New Issue
Block a user