Initial FreeBSD support (#1214)
This commit is contained in:
committed by
GitHub
parent
3507e1872f
commit
21e38d8531
@@ -139,7 +139,7 @@ if ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "MSVC")
|
||||
target_compile_options(${TARGET_NAME} PUBLIC /arch:AVX)
|
||||
endif()
|
||||
endif()
|
||||
elseif ("${CMAKE_SYSTEM_PROCESSOR}" STREQUAL "x86_64" OR "${CMAKE_SYSTEM_PROCESSOR}" STREQUAL "AMD64" OR "${CMAKE_SYSTEM_PROCESSOR}" STREQUAL "x86" OR "${CMAKE_SYSTEM_PROCESSOR}" STREQUAL "i386")
|
||||
elseif ("${CMAKE_SYSTEM_PROCESSOR}" STREQUAL "x86_64" OR "${CMAKE_SYSTEM_PROCESSOR}" STREQUAL "AMD64" OR "${CMAKE_SYSTEM_PROCESSOR}" STREQUAL "amd64" OR "${CMAKE_SYSTEM_PROCESSOR}" STREQUAL "x86" OR "${CMAKE_SYSTEM_PROCESSOR}" STREQUAL "i386")
|
||||
if (USE_AVX512)
|
||||
target_compile_options(${TARGET_NAME} PUBLIC -mavx512f -mavx512vl -mavx512dq -mavx2 -mbmi -mpopcnt -mlzcnt -mf16c)
|
||||
elseif (USE_AVX2)
|
||||
|
||||
@@ -34,7 +34,13 @@
|
||||
#include <WinBase.h>
|
||||
#endif // _WIN32
|
||||
|
||||
#ifdef PLATFORM_LINUX
|
||||
#if defined(__FREEBSD__)
|
||||
#include <kvm.h>
|
||||
#include <sys/param.h>
|
||||
#include <sys/sysctl.h>
|
||||
#include <sys/user.h>
|
||||
#pragma comment(lib,"kvm")
|
||||
#elif defined(PLATFORM_LINUX)
|
||||
#include <sys/sysinfo.h>
|
||||
#endif // PLATFORM_LINUX
|
||||
|
||||
@@ -1348,12 +1354,22 @@ namespace wi::helper
|
||||
|
||||
std::string GetExecutablePath()
|
||||
{
|
||||
#ifdef _WIN32
|
||||
#if defined(_WIN32)
|
||||
wchar_t wstr[1024] = {};
|
||||
GetModuleFileName(NULL, wstr, arraysize(wstr));
|
||||
char str[1024] = {};
|
||||
StringConvert(wstr, str, arraysize(str));
|
||||
return str;
|
||||
#elif defined(__FREEBSD__)
|
||||
int name[] = { CTL_KERN, KERN_PROC, KERN_PROC_PATHNAME, -1 };
|
||||
char str[MAXPATHLEN] = {};
|
||||
size_t length;
|
||||
int error = sysctl(name, 4, str, &length, NULL, 0);
|
||||
if (error < 0 || length <= 1) {
|
||||
// sysctl failed
|
||||
return std::string();
|
||||
}
|
||||
return std::string(str, length);
|
||||
#else
|
||||
return std::filesystem::canonical("/proc/self/exe").string();
|
||||
#endif // _WIN32
|
||||
@@ -1958,6 +1974,34 @@ namespace wi::helper
|
||||
GetProcessMemoryInfo(GetCurrentProcess(), (PROCESS_MEMORY_COUNTERS*)&pmc, sizeof(pmc));
|
||||
mem.process_physical = pmc.WorkingSetSize;
|
||||
mem.process_virtual = pmc.PrivateUsage;
|
||||
#elif defined(__FREEBSD__)
|
||||
static uint64_t phys_mem = 0;
|
||||
static uint64_t swap_mem = 0;
|
||||
size_t sysctl_buf_s;
|
||||
int page_size = getpagesize();
|
||||
if (phys_mem == 0)
|
||||
{
|
||||
int phys_mem_name[] = { CTL_HW, HW_PHYSMEM };
|
||||
sysctl_buf_s = sizeof(phys_mem);
|
||||
sysctl(phys_mem_name, 2, &phys_mem, &sysctl_buf_s, NULL, 0);
|
||||
kvm_t *kvm;
|
||||
if ((kvm = kvm_open(NULL, "/dev/null", "/dev/null", O_RDONLY, "GetMemoryUsage")) != NULL)
|
||||
{
|
||||
struct kvm_swap swap;
|
||||
if (kvm_getswapinfo(kvm, &swap, 1, 0) == 0)
|
||||
swap_mem = swap.ksw_total * page_size;
|
||||
kvm_close(kvm);
|
||||
}
|
||||
}
|
||||
mem.total_physical = phys_mem;
|
||||
mem.total_virtual = swap_mem;
|
||||
struct kinfo_proc kinfo;
|
||||
int proc_name[] = { CTL_KERN, KERN_PROC, KERN_PROC_PID, getpid() };
|
||||
sysctl_buf_s = sizeof(struct kinfo_proc);
|
||||
if (sysctl(proc_name, 4, &kinfo, &sysctl_buf_s, NULL, 0) == 0)
|
||||
{
|
||||
mem.process_physical = kinfo.ki_rssize * page_size;
|
||||
}
|
||||
#elif defined(PLATFORM_LINUX)
|
||||
struct sysinfo info;
|
||||
constexpr int PAGE_SIZE = 4096;
|
||||
|
||||
@@ -14,6 +14,9 @@
|
||||
|
||||
#ifdef PLATFORM_LINUX
|
||||
#include <pthread.h>
|
||||
#ifdef __FREEBSD__
|
||||
#include <pthread_np.h>
|
||||
#endif
|
||||
#include <sys/resource.h>
|
||||
#endif // PLATFORM_LINUX
|
||||
|
||||
@@ -198,7 +201,9 @@ namespace wi::jobsystem
|
||||
{
|
||||
std::thread& worker = res.threads.emplace_back([threadID, priority, &res] {
|
||||
|
||||
#ifdef PLATFORM_LINUX
|
||||
#if defined(__FREEBSD__)
|
||||
// TODO: FreeBSD's setpriority is incompatible with the expected Linux non-standard behavior
|
||||
#elif defined(PLATFORM_LINUX)
|
||||
|
||||
// from the sched(2) manpage:
|
||||
// In the current [Linux 2.6.23+] implementation, each unit of
|
||||
|
||||
@@ -12,7 +12,9 @@
|
||||
#include "OpenImageDenoise/oidn.hpp"
|
||||
#if OIDN_VERSION_MAJOR >= 2
|
||||
#define OPEN_IMAGE_DENOISE
|
||||
#ifdef _WIN32
|
||||
#pragma comment(lib,"OpenImageDenoise.lib")
|
||||
#endif
|
||||
// Also provide the required DLL files from OpenImageDenoise release near the exe!
|
||||
#endif // OIDN_VERSION_MAJOR >= 2
|
||||
#endif // __has_include("OpenImageDenoise/oidn.hpp")
|
||||
|
||||
@@ -18,7 +18,9 @@
|
||||
#include "OpenImageDenoise/oidn.hpp"
|
||||
#if OIDN_VERSION_MAJOR >= 2
|
||||
#define OPEN_IMAGE_DENOISE
|
||||
#ifdef _WIN32
|
||||
#pragma comment(lib,"OpenImageDenoise.lib")
|
||||
#endif
|
||||
// Also provide the required DLL files from OpenImageDenoise release near the exe!
|
||||
#endif // OIDN_VERSION_MAJOR >= 2
|
||||
#endif // __has_include("OpenImageDenoise/oidn.hpp")
|
||||
|
||||
Reference in New Issue
Block a user