diff --git a/cmake/cflags-generic.cmake b/cmake/cflags-generic.cmake index 29b746a1..93fa789d 100644 --- a/cmake/cflags-generic.cmake +++ b/cmake/cflags-generic.cmake @@ -27,6 +27,10 @@ CHECK_INCLUDE_FILES(unistd.h HAVE_UNISTD_H) CHECK_FUNCTION_EXISTS(posix_memalign HAVE_POSIX_MEMALIGN) CHECK_FUNCTION_EXISTS(_aligned_malloc HAVE__ALIGNED_MALLOC) +if(FREEBSD OR NETBSD) + set(EXTRA_CXX_FLAGS "${EXTRA_CXX_FLAGS} -gdwarf-4") +endif() + # these end up in the config file CHECK_C_COMPILER_FLAG(-fvisibility=hidden HAS_C_HIDDEN) CHECK_CXX_COMPILER_FLAG(-fvisibility=hidden HAS_CXX_HIDDEN) diff --git a/cmake/osdetection.cmake b/cmake/osdetection.cmake index e4d0bf57..0e730fe3 100644 --- a/cmake/osdetection.cmake +++ b/cmake/osdetection.cmake @@ -6,6 +6,10 @@ if(CMAKE_SYSTEM_NAME MATCHES "FreeBSD") set(FREEBSD true) endif(CMAKE_SYSTEM_NAME MATCHES "FreeBSD") +if(CMAKE_SYSTEM_NAME MATCHES "NetBSD") + set(NETBSD true) +endif(CMAKE_SYSTEM_NAME MATCHES "NetBSD") + if (LINUX AND (ARCH_IA32 OR ARCH_X86_64)) option(FAT_RUNTIME "Build a library that supports multiple microarchitectures" ON) else() diff --git a/src/util/arch.h b/src/util/arch.h index 1e8d2fbd..9a9dde1b 100644 --- a/src/util/arch.h +++ b/src/util/arch.h @@ -42,6 +42,10 @@ #elif defined(ARCH_PPC64EL) #include "util/arch/ppc64el/ppc64el.h" #endif +#ifdef __NetBSD__ +#include +#define HAVE_LOCAL_POPCOUNT +#endif #endif // UTIL_ARCH_X86_H_ diff --git a/src/util/popcount.h b/src/util/popcount.h index e9f689e9..a02e3bc5 100644 --- a/src/util/popcount.h +++ b/src/util/popcount.h @@ -36,12 +36,8 @@ #include "ue2common.h" #include "util/arch.h" -#ifdef __NetBSD__ -#include -#endif - -#ifndef __NetBSD__ +#ifndef HAVE_LOCAL_POPCOUNT static really_inline u32 popcount32(u32 x) { return __builtin_popcount(x); @@ -56,7 +52,7 @@ u32 popcount32(u32 x) { // return (((x + (x >> 4)) & 0xf0f0f0f) * 0x1010101) >> 24; // #endif } -#endif /* __NetBSD__ */ +#endif /* HAVE_LOCAL_POPCOUNT */ static really_inline u32 popcount32x4(u32 const *x) { @@ -67,7 +63,7 @@ u32 popcount32x4(u32 const *x) { return sum; } -#ifndef __NetBSD__ +#ifndef HAVE_LOCAL_POPCOUNT static really_inline u32 popcount64(u64a x) { return __builtin_popcountll(x); @@ -88,7 +84,7 @@ u32 popcount64(u64a x) { // return popcount32(x >> 32) + popcount32(x); // #endif } -#endif /* __NetBSD__ */ +#endif /* HAVE_LOCAL_POPCOUNT */ static really_inline u32 popcount64x4(u64a const *x) {