diff --git a/Makefile b/Makefile index 6104d73..b33d800 100644 --- a/Makefile +++ b/Makefile @@ -12,7 +12,7 @@ COMMON_HDR = $(SRC_COMMON)ascii.h $(SRC_COMMON)cpu.h $(SRC_COMMON)udev.h $(SRC_C ifneq ($(OS),Windows_NT) arch := $(shell uname -m) - ifeq ($(arch), $(filter $(arch), x86_64 i686)) + ifeq ($(arch), $(filter $(arch), x86_64 amd64 i686)) SRC_DIR=src/x86/ SOURCE += $(COMMON_SRC) $(SRC_DIR)cpuid.c $(SRC_DIR)apic.c $(SRC_DIR)cpuid_asm.c $(SRC_DIR)uarch.c HEADERS += $(COMMON_HDR) $(SRC_DIR)cpuid.h $(SRC_DIR)apic.h $(SRC_DIR)cpuid_asm.h $(SRC_DIR)uarch.h diff --git a/src/x86/apic.c b/src/x86/apic.c index 12c4a62..dc307ed 100644 --- a/src/x86/apic.c +++ b/src/x86/apic.c @@ -4,6 +4,9 @@ #elif defined __linux__ #define _GNU_SOURCE #include +#elif defined __FreeBSD__ + #include + #include #elif defined __APPLE__ #define UNUSED(x) (void)(x) #endif @@ -76,7 +79,7 @@ bool bind_to_cpu(int cpu_id) { HANDLE process = GetCurrentProcess(); DWORD_PTR processAffinityMask = 1 << cpu_id; return SetProcessAffinityMask(process, processAffinityMask); - #else + #elif defined __linux__ cpu_set_t currentCPU; CPU_ZERO(¤tCPU); CPU_SET(cpu_id, ¤tCPU); @@ -85,6 +88,15 @@ bool bind_to_cpu(int cpu_id) { return false; } return true; + #elif defined __FreeBSD__ + cpuset_t currentCPU; + CPU_ZERO(¤tCPU); + CPU_SET(cpu_id, ¤tCPU); + if(cpuset_setaffinity(CPU_LEVEL_WHICH, CPU_WHICH_TID, -1, sizeof(cpuset_t), ¤tCPU) == -1) { + perror("cpuset_setaffinity"); + return false; + } + return true; #endif } #endif