diff --git a/CMakeLists.txt b/CMakeLists.txt index 73c4421b..f0d81e2f 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -122,6 +122,14 @@ elseif (APPLE) src/Mem_unix.cpp src/Platform_mac.cpp ) +elseif (CMAKE_SYSTEM_NAME STREQUAL FreeBSD) + set(SOURCES_OS + src/App_unix.cpp + src/Cpu_unix.cpp + src/Mem_unix.cpp + src/Platform_unix.cpp + ) +set(EXTRA_LIBS pthread kvm) else() set(SOURCES_OS src/App_unix.cpp diff --git a/src/Cpu_unix.cpp b/src/Cpu_unix.cpp index 5d3a6d64..ca1225df 100644 --- a/src/Cpu_unix.cpp +++ b/src/Cpu_unix.cpp @@ -20,8 +20,12 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ - - +#ifdef __FreeBSD__ +#include +#include +#include +#include +#endif #include #include #include @@ -30,6 +34,9 @@ #include "Cpu.h" +#ifdef __FreeBSD__ +typedef cpuset_t cpu_set_t; +#endif void Cpu::init() { @@ -53,7 +60,9 @@ void Cpu::setAffinity(int id, uint64_t mask) } if (id == -1) { + #ifndef __FreeBSD__ sched_setaffinity(0, sizeof(&set), &set); + #endif } else { pthread_setaffinity_np(pthread_self(), sizeof(&set), &set); } diff --git a/src/Mem_unix.cpp b/src/Mem_unix.cpp index 7c41fd16..2cb14bc9 100644 --- a/src/Mem_unix.cpp +++ b/src/Mem_unix.cpp @@ -51,10 +51,11 @@ bool Mem::allocate(int algo, int threads, bool doubleHash, bool enabled) # if defined(__APPLE__) m_memory = static_cast(mmap(0, size, PROT_READ | PROT_WRITE, MAP_PRIVATE | MAP_ANON, VM_FLAGS_SUPERPAGE_SIZE_2MB, 0)); +# elif defined(__FreeBSD__) + m_memory = static_cast(mmap(0, size, PROT_READ | PROT_WRITE, MAP_PRIVATE | MAP_ANONYMOUS | MAP_ALIGNED_SUPER | MAP_PREFAULT_READ, -1, 0)); # else m_memory = static_cast(mmap(0, size, PROT_READ | PROT_WRITE, MAP_PRIVATE | MAP_ANONYMOUS | MAP_HUGETLB | MAP_POPULATE, 0, 0)); # endif - if (m_memory == MAP_FAILED) { m_memory = static_cast(_mm_malloc(size, 16)); return true; diff --git a/src/Platform_unix.cpp b/src/Platform_unix.cpp index 27d8de37..b6d16d6f 100644 --- a/src/Platform_unix.cpp +++ b/src/Platform_unix.cpp @@ -21,7 +21,6 @@ * along with this program. If not, see . */ - #include #include #include @@ -116,6 +115,7 @@ void Platform::setThreadPriority(int priority) setpriority(PRIO_PROCESS, 0, prio); +#ifdef SCHED_IDLE if (priority == 0) { sched_param param; param.sched_priority = 0; @@ -124,4 +124,5 @@ void Platform::setThreadPriority(int priority) sched_setscheduler(0, SCHED_BATCH, ¶m); } } +#endif }