From b02519b9f5ecdf721491b1e5263478dced3ee04c Mon Sep 17 00:00:00 2001 From: user0-07161 Date: Tue, 4 Nov 2025 06:32:36 +0000 Subject: [PATCH] feat: initial support for haiku --- cmake/flags.cmake | 2 ++ cmake/os.cmake | 4 ++++ src/3rdparty/libethash/endian.h | 2 +- src/base/kernel/Platform_unix.cpp | 2 +- src/crypto/common/VirtualMemory_unix.cpp | 7 +++++-- src/version.h | 2 ++ 6 files changed, 15 insertions(+), 4 deletions(-) diff --git a/cmake/flags.cmake b/cmake/flags.cmake index 3b711ac94..a36d18256 100644 --- a/cmake/flags.cmake +++ b/cmake/flags.cmake @@ -46,6 +46,8 @@ if (CMAKE_CXX_COMPILER_ID MATCHES GNU) else() set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -static -Wl,--large-address-aware") endif() + elseif(CMAKE_SYSTEM_NAME STREQUAL "Haiku") + set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -static-libgcc") else() set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -static-libgcc -static-libstdc++") endif() diff --git a/cmake/os.cmake b/cmake/os.cmake index 749611923..3025e0c09 100644 --- a/cmake/os.cmake +++ b/cmake/os.cmake @@ -19,6 +19,8 @@ else() set(XMRIG_OS_FREEBSD ON) elseif(CMAKE_SYSTEM_NAME STREQUAL OpenBSD) set(XMRIG_OS_OPENBSD ON) + elseif(CMAKE_SYSTEM_NAME STREQUAL "Haiku") + set(XMRIG_OS_HAIKU ON) endif() endif() @@ -47,6 +49,8 @@ elseif(XMRIG_OS_UNIX) add_definitions(-DXMRIG_OS_FREEBSD) elseif (XMRIG_OS_OPENBSD) add_definitions(-DXMRIG_OS_OPENBSD) + elseif (XMRIG_OS_HAIKU) + add_definitions(-DXMRIG_OS_HAIKU) endif() endif() diff --git a/src/3rdparty/libethash/endian.h b/src/3rdparty/libethash/endian.h index f960d7429..deb57620a 100644 --- a/src/3rdparty/libethash/endian.h +++ b/src/3rdparty/libethash/endian.h @@ -31,7 +31,7 @@ #include #define ethash_swap_u32(input_) OSSwapInt32(input_) #define ethash_swap_u64(input_) OSSwapInt64(input_) -#elif defined(__FreeBSD__) || defined(__DragonFly__) || defined(__NetBSD__) +#elif defined(__FreeBSD__) || defined(__DragonFly__) || defined(__NetBSD__) || defined(__HAIKU__) #define ethash_swap_u32(input_) bswap32(input_) #define ethash_swap_u64(input_) bswap64(input_) #elif defined(__OpenBSD__) diff --git a/src/base/kernel/Platform_unix.cpp b/src/base/kernel/Platform_unix.cpp index 0bfa4ff84..e53fe58d5 100644 --- a/src/base/kernel/Platform_unix.cpp +++ b/src/base/kernel/Platform_unix.cpp @@ -71,7 +71,7 @@ char *xmrig::Platform::createUserAgent() #ifndef XMRIG_FEATURE_HWLOC -#if defined(__DragonFly__) || defined(XMRIG_OS_OPENBSD) +#if defined(__DragonFly__) || defined(XMRIG_OS_OPENBSD) || defined(XMRIG_OS_HAIKU) bool xmrig::Platform::setThreadAffinity(uint64_t cpu_id) { diff --git a/src/crypto/common/VirtualMemory_unix.cpp b/src/crypto/common/VirtualMemory_unix.cpp index 003b92e45..fa9a3ccb2 100644 --- a/src/crypto/common/VirtualMemory_unix.cpp +++ b/src/crypto/common/VirtualMemory_unix.cpp @@ -86,7 +86,7 @@ bool xmrig::VirtualMemory::isHugepagesAvailable() { # ifdef XMRIG_OS_LINUX return std::ifstream("/proc/sys/vm/nr_hugepages").good() || std::ifstream("/sys/devices/system/node/node0/hugepages/hugepages-2048kB/nr_hugepages").good(); -# elif defined(XMRIG_OS_MACOS) && defined(XMRIG_ARM) +# elif defined(XMRIG_OS_MACOS) && defined(XMRIG_ARM) || defined(XMRIG_OS_HAIKU) return false; # else return true; @@ -156,7 +156,8 @@ void *xmrig::VirtualMemory::allocateExecutableMemory(size_t size, bool hugePages if (!mem) { mem = mmap(0, size, PROT_READ | PROT_WRITE | SECURE_PROT_EXEC, MAP_PRIVATE | MAP_ANONYMOUS, -1, 0); } - +# elif defined(XMRIG_OS_HAIKU) + void *mem = mmap(0, size, PROT_READ | PROT_WRITE | PROT_EXEC, MAP_PRIVATE | MAP_ANONYMOUS, -1, 0); # else void *mem = nullptr; @@ -181,6 +182,8 @@ void *xmrig::VirtualMemory::allocateLargePagesMemory(size_t size) void *mem = mmap(0, size, PROT_READ | PROT_WRITE, MAP_PRIVATE | MAP_ANON, VM_FLAGS_SUPERPAGE_SIZE_2MB, 0); # elif defined(XMRIG_OS_FREEBSD) void *mem = mmap(0, size, PROT_READ | PROT_WRITE, MAP_PRIVATE | MAP_ANONYMOUS | MAP_ALIGNED_SUPER | MAP_PREFAULT_READ, -1, 0); +# elif defined(XMRIG_OS_HAIKU) + void *mem = nullptr; # else void *mem = mmap(0, size, PROT_READ | PROT_WRITE, MAP_PRIVATE | MAP_ANONYMOUS | MAP_HUGETLB | MAP_POPULATE | hugePagesFlag(hugePageSize()), 0, 0); # endif diff --git a/src/version.h b/src/version.h index ce36b0afe..15a713516 100644 --- a/src/version.h +++ b/src/version.h @@ -66,6 +66,8 @@ # define APP_OS "FreeBSD" #elif defined XMRIG_OS_OPENBSD # define APP_OS "OpenBSD" +#elif defined XMRIG_OS_HAIKU +# define APP_OS "Haiku" #else # define APP_OS "Unknown OS" #endif