Browse Source

fixes for netbsd

Signed-off-by: lizzie <lizzie@eden-emu.dev>
pull/2752/head
lizzie 5 months ago
parent
commit
26f4b3e9eb
No known key found for this signature in database GPG Key ID: 287378CADCAB13
  1. 5
      .gitignore
  2. 14
      .patch/spirv-tools/0001-netbsd-fix.patch
  3. 17
      CMakeLists.txt
  4. 6
      docs/Caveats.md
  5. 42
      docs/Deps.md
  6. 37
      src/dynarmic/tests/native/testenv.h

5
.gitignore

@ -10,6 +10,11 @@ doc-build/
AppDir/
uruntime
dtrace-output/
dtrace-out/
log.txt
*.core
# Generated source files
src/common/scm_rev.cpp
dist/english_plurals/generated_en.ts

14
.patch/spirv-tools/0001-netbsd-fix.patch

@ -0,0 +1,14 @@
diff --git a/external/CMakeLists.txt b/external/CMakeLists.txt
index eb4e69e..3155805 100644
--- a/external/CMakeLists.txt
+++ b/external/CMakeLists.txt
@@ -72,7 +72,8 @@ if (SPIRV_TOOLS_USE_MIMALLOC)
pop_variable(MI_BUILD_TESTS)
endif()
-if (DEFINED SPIRV-Headers_SOURCE_DIR)
+# NetBSD doesn't have SPIRV-Headers readily available on system
+if (DEFINED SPIRV-Headers_SOURCE_DIR AND NOT ${CMAKE_SYSTEM_NAME} STREQUAL "NetBSD")
# This allows flexible position of the SPIRV-Headers repo.
set(SPIRV_HEADER_DIR ${SPIRV-Headers_SOURCE_DIR})
else()

17
CMakeLists.txt

@ -11,6 +11,8 @@ elseif (${CMAKE_SYSTEM_NAME} STREQUAL "FreeBSD")
set(PLATFORM_FREEBSD ON)
elseif (${CMAKE_SYSTEM_NAME} STREQUAL "OpenBSD")
set(PLATFORM_OPENBSD ON)
elseif (${CMAKE_SYSTEM_NAME} STREQUAL "NetBSD")
set(PLATFORM_NETBSD ON)
elseif (${CMAKE_SYSTEM_NAME} STREQUAL "Linux")
set(PLATFORM_LINUX ON)
endif()
@ -41,8 +43,7 @@ if (PLATFORM_SUN)
list(APPEND CMAKE_PREFIX_PATH "/usr/lib/qt/6.6/lib/amd64/cmake")
list(APPEND CMAKE_MODULE_PATH "/usr/lib/qt/6.6/lib/amd64/cmake")
# amazing
# absolutely incredible
# Amazing - absolutely incredible
list(APPEND CMAKE_PREFIX_PATH "/usr/lib/amd64/cmake")
list(APPEND CMAKE_MODULE_PATH "/usr/lib/amd64/cmake")
@ -63,6 +64,15 @@ if (PLATFORM_OPENBSD)
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -I/usr/X11R6/include")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -I/usr/X11R6/include")
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -L/usr/X11R6/lib")
elseif (PLATFORM_NETBSD)
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -I/usr/X11R7/include")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -I/usr/X11R7/include")
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -L/usr/X11R7/lib")
endif()
# NetBSD: Fun for the whole family!
if (PLATFORM_NETBSD)
set(ENV{PKG_CONFIG_PATH} "${PKG_CONFIG_PATH}:/usr/pkg/lib/ffmpeg7/pkgconfig")
endif()
# Detect current compilation architecture and create standard definitions
@ -149,6 +159,7 @@ endif()
if (PLATFORM_FREEBSD)
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -L/usr/local/lib")
endif()
# Set bundled sdl2/qt as dependent options.
@ -355,7 +366,7 @@ if (YUZU_ROOM)
add_compile_definitions(YUZU_ROOM)
endif()
if (ANDROID OR PLATFORM_FREEBSD OR PLATFORM_OPENBSD OR PLATFORM_SUN OR APPLE)
if ((ANDROID OR APPLE OR UNIX) AND (NOT PLATFORM_LINUX OR ANDROID) AND NOT WIN32)
if(CXX_APPLE OR CXX_CLANG)
# libc++ has stop_token and jthread as experimental
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fexperimental-library")

6
docs/Caveats.md

@ -50,3 +50,9 @@ After configuration, you may need to modify `externals/ffmpeg/CMakeFiles/ffmpeg-
Eden is not currently available as a port on FreeBSD, though it is in the works. For now, the recommended method of usage is to compile it yourself.
The available OpenSSL port (3.0.17) is out-of-date, and using a bundled static library instead is recommended; to do so, add `-DYUZU_USE_BUNDLED_OPENSSL=ON` to your CMake configure command.
## NetBSD
System provides a default `g++-10` which doesn't support the current C++ codebase; install `clang-19` with `pkgin install clang-19`. Then build with `cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_CXX_COMPILER=clang++ -DCMAKE_C_COMPILER=clang -B build`.
Make may error out when generating C++ headers of SPIRV shaders, hence it's recommended to use `gmake` over the default system one.

42
docs/Deps.md

@ -145,35 +145,33 @@ brew install molten-vk vulkan-loader
<details>
<summary>FreeBSD</summary>
```
devel/cmake
devel/sdl20
devel/boost-libs
devel/catch2
devel/libfmt
devel/nlohmann-json
devel/ninja
devel/nasm
devel/autoconf
devel/pkgconf
devel/qt6-base
net/enet
As root run: `pkg install devel/cmake devel/sdl20 devel/boost-libs devel/catch2 devel/libfmt devel/nlohmann-json devel/ninja devel/nasm devel/autoconf devel/pkgconf devel/qt6-base devel/simpleini net/enet multimedia/ffnvcodec-headers multimedia/ffmpeg audio/opus archivers/liblz4 lang/gcc12 graphics/glslang graphics/vulkan-utility-libraries graphics/spirv-tools www/cpp-httplib devel/jwt-cpp devel/unordered-dense devel/zydis`
multimedia/ffnvcodec-headers
multimedia/ffmpeg
If using FreeBSD 12 or prior, use `devel/pkg-config` instead.
</details>
audio/opus
<details>
<summary>NetBSD</summary>
archivers/liblz4
Install `pkgin` if not already `pkg_add pkgin`, see also the general [pkgsrc guide](https://www.netbsd.org/docs/pkgsrc/using.html). For NetBSD 10.1 provide `cat 'PKG_PATH="https://cdn.netbsd.org/pub/pkgsrc/packages/NetBSD/x86_64/10.0_2025Q3/All/"' >/etc/pkg_install.conf`. If `pkgin` is taking too much time consider adding the following to `/etc/rc.conf`:
```
ip6addrctl=YES
ip6addrctl_policy=ipv4_prefer
```
lang/gcc12
For NetBSD +10.1: `pkgin install git cmake boost fmtlib SDL2 catch2 libjwt spirv-headers ffmpeg7 libva nlohmann-json jq libopus qt6 mbedtls3 cpp-httplib lz4 vulkan-headers nasm autoconf enet pkg-config`.
graphics/glslang
graphics/vulkan-utility-libraries
glslang is not available on NetBSD, to circumvent this simply build glslang by yourself:
```sh
pkgin python313
git clone https://github.com/KhronosGroup/glslang.git
cd glslang
python3.13 ./update_glslang_sources.py
cmake -B build -DCMAKE_BUILD_TYPE=Release
cmake --build build -- -j`nproc`
cmake --install build
```
If using FreeBSD 12 or prior, use `devel/pkg-config` instead.
</details>
<details>

37
src/dynarmic/tests/native/testenv.h

@ -4,6 +4,19 @@
#ifdef __AVX__
#include <immintrin.h>
#endif
// NetBSD apparently still needs these... ugh
#ifdef __cpp_lib_bit_cast
#include <bit>
template <typename To, typename From> constexpr inline To BitCast(const From& from) {
return std::bit_cast<To>(from);
}
#else
template <typename To, typename From> constexpr inline To BitCast(const From& from) {
return __builtin_bit_cast(To, from);
}
#endif
template<typename F>
void CheckedRun(F&& fn) {
#ifdef __AVX__
@ -32,18 +45,18 @@ void CheckedRun(F&& fn) {
, "+x"(xmm8), "+x"(xmm9), "+x"(xmm10), "+x"(xmm11)
:
);
CHECK(std::bit_cast<std::uint64_t>(xmm0[0]) == 0);
CHECK(std::bit_cast<std::uint64_t>(xmm1[0]) == 1);
CHECK(std::bit_cast<std::uint64_t>(xmm2[0]) == 2);
CHECK(std::bit_cast<std::uint64_t>(xmm3[0]) == 3);
CHECK(std::bit_cast<std::uint64_t>(xmm4[0]) == 4);
CHECK(std::bit_cast<std::uint64_t>(xmm5[0]) == 5);
CHECK(std::bit_cast<std::uint64_t>(xmm6[0]) == 6);
CHECK(std::bit_cast<std::uint64_t>(xmm7[0]) == 7);
CHECK(std::bit_cast<std::uint64_t>(xmm8[0]) == 8);
CHECK(std::bit_cast<std::uint64_t>(xmm9[0]) == 9);
CHECK(std::bit_cast<std::uint64_t>(xmm10[0]) == 10);
CHECK(std::bit_cast<std::uint64_t>(xmm11[0]) == 11);
CHECK(BitCast<std::uint64_t>(xmm0[0]) == 0);
CHECK(BitCast<std::uint64_t>(xmm1[0]) == 1);
CHECK(BitCast<std::uint64_t>(xmm2[0]) == 2);
CHECK(BitCast<std::uint64_t>(xmm3[0]) == 3);
CHECK(BitCast<std::uint64_t>(xmm4[0]) == 4);
CHECK(BitCast<std::uint64_t>(xmm5[0]) == 5);
CHECK(BitCast<std::uint64_t>(xmm6[0]) == 6);
CHECK(BitCast<std::uint64_t>(xmm7[0]) == 7);
CHECK(BitCast<std::uint64_t>(xmm8[0]) == 8);
CHECK(BitCast<std::uint64_t>(xmm9[0]) == 9);
CHECK(BitCast<std::uint64_t>(xmm10[0]) == 10);
CHECK(BitCast<std::uint64_t>(xmm11[0]) == 11);
#else
fn();
#endif

Loading…
Cancel
Save