From 38006e9cdaa86c3427be6e4d3f7307cff22ae26a Mon Sep 17 00:00:00 2001 From: Er2 Date: Sun, 7 Jul 2024 14:22:43 +0300 Subject: [PATCH] [dxvk] Add FreeBSD support --- package-native.sh | 16 ++++++++++++++-- src/util/thread.h | 4 ++++ src/util/util_env.cpp | 15 +++++++++++++++ src/util/util_win32_compat.h | 2 +- 4 files changed, 34 insertions(+), 3 deletions(-) diff --git a/package-native.sh b/package-native.sh index 56915e63..cbd4132e 100755 --- a/package-native.sh +++ b/package-native.sh @@ -25,6 +25,8 @@ shift 2 opt_nopackage=0 opt_devbuild=0 opt_buildid=false +opt_64_only=0 +opt_32_only=0 CC=${CC:="gcc"} CXX=${CXX:="g++"} @@ -41,6 +43,12 @@ while [ $# -gt 0 ]; do "--build-id") opt_buildid=true ;; + "--64-only") + opt_64_only=1 + ;; + "--32-only") + opt_32_only=1 + ;; *) echo "Unrecognized option: $1" >&2 exit 1 @@ -81,8 +89,12 @@ function package { rm -R "dxvk-native-$DXVK_VERSION" } -build_arch 64 lib -build_arch 32 lib32 +if [ $opt_32_only -eq 0 ]; then + build_arch 64 lib +fi +if [ $opt_64_only -eq 0 ]; then + build_arch 32 lib32 +fi if [ $opt_nopackage -eq 0 ]; then package diff --git a/src/util/thread.h b/src/util/thread.h index 6e25f407..2c20c02e 100644 --- a/src/util/thread.h +++ b/src/util/thread.h @@ -316,7 +316,11 @@ namespace dxvk { switch (priority) { default: case ThreadPriority::Normal: policy = SCHED_OTHER; break; +#ifndef __linux__ + case ThreadPriority::Lowest: policy = SCHED_OTHER; break; +#else case ThreadPriority::Lowest: policy = SCHED_IDLE; break; +#endif } ::pthread_setschedparam(this->native_handle(), policy, ¶m); } diff --git a/src/util/util_env.cpp b/src/util/util_env.cpp index 1b0901f6..8441b25b 100644 --- a/src/util/util_env.cpp +++ b/src/util/util_env.cpp @@ -6,6 +6,10 @@ #ifdef __linux__ #include #include +#elif defined(__FreeBSD__) +#include +#include +#include #endif #include "util_env.h" @@ -85,6 +89,17 @@ namespace dxvk::env { size_t count = readlink("/proc/self/exe", exePath.data(), exePath.size()); return std::string(exePath.begin(), exePath.begin() + count); +#elif defined(__FreeBSD__) + int mib[4] = {CTL_KERN, KERN_PROC, KERN_PROC_PATHNAME, getpid()}; + char exePath[PATH_MAX] = {}; + size_t size = PATH_MAX; + + if (sysctl(mib, 4, exePath, &size, NULL, 0) != 0) { + // throw error here? + return ""; + } + + return std::string(exePath); #endif } diff --git a/src/util/util_win32_compat.h b/src/util/util_win32_compat.h index 74ea6ece..5b156c6e 100644 --- a/src/util/util_win32_compat.h +++ b/src/util/util_win32_compat.h @@ -1,6 +1,6 @@ #pragma once -#if defined(__linux__) +#if defined(__unix__) #include #include