diff --git a/devel/cpu_features/Makefile b/devel/cpu_features/Makefile index 35a9d8666167..2c2ee5028668 100644 --- a/devel/cpu_features/Makefile +++ b/devel/cpu_features/Makefile @@ -1,30 +1,30 @@ PORTNAME= cpu_features -PORTVERSION= 0.5.0 +PORTVERSION= 0.6.0 DISTVERSIONPREFIX= v CATEGORIES= devel MAINTAINER= skreuzer@FreeBSD.org COMMENT= Cross platform C99 library to get cpu features at runtime LICENSE= APACHE20 LICENSE_FILE= ${WRKSRC}/LICENSE NOT_FOR_ARCHS= aarch64 armv6 armv7 mips mips64 riscv64 NOT_FOR_ARCHS_REASON= assumes android if on ARM or MIPS; not ported to riscv64 USES= cmake:insource USE_GITHUB= yes GH_ACCOUNT= google CMAKE_ON= BUILD_SHARED_LIBS CFLAGS+= -fPIC do-install: ${INSTALL_PROGRAM} ${WRKSRC}/list_cpu_features ${STAGEDIR}${PREFIX}/bin ${INSTALL_LIB} ${WRKSRC}/libcpu_features.so ${STAGEDIR}${PREFIX}/lib ${MKDIR} ${STAGEDIR}${PREFIX}/include/internal ${INSTALL_DATA} ${WRKSRC}/include/*.h ${STAGEDIR}${PREFIX}/include ${INSTALL_DATA} ${WRKSRC}/include/internal/*.h ${STAGEDIR}${PREFIX}/include/internal .include diff --git a/devel/cpu_features/distinfo b/devel/cpu_features/distinfo index cb917638c729..e40d46a8fd60 100644 --- a/devel/cpu_features/distinfo +++ b/devel/cpu_features/distinfo @@ -1,3 +1,3 @@ -TIMESTAMP = 1611873019 -SHA256 (google-cpu_features-v0.5.0_GH0.tar.gz) = b967811cecd68412e0dc65e4964756a6ae48755456fa2c2f42034f6271ac2c27 -SIZE (google-cpu_features-v0.5.0_GH0.tar.gz) = 61947 +TIMESTAMP = 1631796486 +SHA256 (google-cpu_features-v0.6.0_GH0.tar.gz) = 95a1cf6f24948031df114798a97eea2a71143bd38a4d07d9a758dda3924c1932 +SIZE (google-cpu_features-v0.6.0_GH0.tar.gz) = 63255 diff --git a/devel/cpu_features/files/patch-include_cpu__features__macros.h b/devel/cpu_features/files/patch-include_cpu__features__macros.h new file mode 100644 index 000000000000..afb5fb2ea3c7 --- /dev/null +++ b/devel/cpu_features/files/patch-include_cpu__features__macros.h @@ -0,0 +1,13 @@ +--- include/cpu_features_macros.h.orig 2021-09-16 15:06:15 UTC ++++ include/cpu_features_macros.h +@@ -83,6 +83,10 @@ + #define CPU_FEATURES_OS_DARWIN + #endif + ++#if (defined(__freebsd__) || defined(__FreeBSD__)) ++#define CPU_FEATURES_OS_FREEBSD ++#endif ++ + //////////////////////////////////////////////////////////////////////////////// + // Compilers + //////////////////////////////////////////////////////////////////////////////// diff --git a/devel/cpu_features/files/patch-include_cpuinfo__x86.h b/devel/cpu_features/files/patch-include_cpuinfo__x86.h new file mode 100644 index 000000000000..e59e56aecb31 --- /dev/null +++ b/devel/cpu_features/files/patch-include_cpuinfo__x86.h @@ -0,0 +1,10 @@ +--- include/cpuinfo_x86.h.orig 2021-09-16 15:51:24 UTC ++++ include/cpuinfo_x86.h +@@ -137,6 +137,7 @@ typedef enum { + AMD_BULLDOZER, // K15 + AMD_JAGUAR, // K16 + AMD_ZEN, // K17 ++ AMD_ZEN3, // K19 + } X86Microarchitecture; + + // Returns the underlying microarchitecture by looking at X86Info's vendor, diff --git a/devel/cpu_features/files/patch-src_cpuinfo__x86.c b/devel/cpu_features/files/patch-src_cpuinfo__x86.c new file mode 100644 index 000000000000..f88cee0a7325 --- /dev/null +++ b/devel/cpu_features/files/patch-src_cpuinfo__x86.c @@ -0,0 +1,76 @@ +--- src/cpuinfo_x86.c.orig 2020-10-15 09:09:51 UTC ++++ src/cpuinfo_x86.c +@@ -97,7 +97,8 @@ + // microarchitectures. + #if defined(CPU_FEATURES_OS_WINDOWS) + #include // IsProcessorFeaturePresent +-#elif defined(CPU_FEATURES_OS_LINUX_OR_ANDROID) ++#elif defined(CPU_FEATURES_OS_LINUX_OR_ANDROID) || \ ++ defined(CPU_FEATURES_OS_FREEBSD) + #include "internal/filesystem.h" // Needed to parse /proc/cpuinfo + #include "internal/stack_line_reader.h" // Needed to parse /proc/cpuinfo + #include "internal/string_view.h" // Needed to parse /proc/cpuinfo +@@ -1239,6 +1240,45 @@ static void DetectSseViaOs(X86Features* features) { + features->ssse3 = GetDarwinSysCtlByName("hw.optional.supplementalsse3"); + features->sse4_1 = GetDarwinSysCtlByName("hw.optional.sse4_1"); + features->sse4_2 = GetDarwinSysCtlByName("hw.optional.sse4_2"); ++#elif defined(CPU_FEATURES_OS_FREEBSD) ++ // Handling FreeBSD platform through parsing /var/run/dmesg.boot. ++ const int fd = CpuFeatures_OpenFile("/var/run/dmesg.boot"); ++ if (fd >= 0) { ++ StackLineReader reader; ++ StackLineReader_Initialize(&reader, fd); ++ for (;;) { ++ const LineResult result = StackLineReader_NextLine(&reader); ++ const StringView line = result.line; ++ const bool is_feature = ++ CpuFeatures_StringView_StartsWith(line, str(" Features=")); ++ const bool is_feature2 = ++ CpuFeatures_StringView_StartsWith(line, str(" Features2=")); ++ if (is_feature || is_feature2) { ++ // Lines of interests are of the following form: ++ // " Features=0x1783fbff" ++ // We replace '<', '>' and ',' with space so we can search by ++ // whitespace separated word. ++ // TODO: Fix CpuFeatures_StringView_HasWord to allow for different ++ // separators. ++ for (size_t i = 0; i < line.size; ++i) { ++ char* c = (char*)(&(line.ptr[i])); ++ if (*c == '<' || *c == '>' || *c == ',') *c = ' '; ++ } ++ if (is_feature) { ++ features->sse = CpuFeatures_StringView_HasWord(line, "SSE"); ++ features->sse2 = CpuFeatures_StringView_HasWord(line, "SSE2"); ++ } ++ if (is_feature2) { ++ features->sse3 = CpuFeatures_StringView_HasWord(line, "SSE3"); ++ features->ssse3 = CpuFeatures_StringView_HasWord(line, "SSSE3"); ++ features->sse4_1 = CpuFeatures_StringView_HasWord(line, "SSE4.1"); ++ features->sse4_2 = CpuFeatures_StringView_HasWord(line, "SSE4.2"); ++ } ++ } ++ if (result.eof) break; ++ } ++ CpuFeatures_CloseFile(fd); ++ } + #elif defined(CPU_FEATURES_OS_LINUX_OR_ANDROID) + // Handling Linux platform through /proc/cpuinfo. + const int fd = CpuFeatures_OpenFile("/proc/cpuinfo"); +@@ -1525,6 +1565,8 @@ X86Microarchitecture GetX86Microarchitecture(const X86 + return AMD_JAGUAR; + case 0x17: + return AMD_ZEN; ++ case 0x19: ++ return AMD_ZEN3; + default: + return X86_UNKNOWN; + } +@@ -1617,6 +1659,8 @@ const char* GetX86MicroarchitectureName(X86Microarchit + return "AMD_JAGUAR"; + case AMD_ZEN: + return "AMD_ZEN"; ++ case AMD_ZEN3: ++ return "AMD_ZEN3"; + } + return "unknown microarchitecture"; + } diff --git a/devel/cpu_features/pkg-plist b/devel/cpu_features/pkg-plist index 495a3c586cf7..e89c9e3391a6 100644 --- a/devel/cpu_features/pkg-plist +++ b/devel/cpu_features/pkg-plist @@ -1,16 +1,15 @@ bin/list_cpu_features include/cpu_features_cache_info.h include/cpu_features_macros.h include/cpuinfo_aarch64.h include/cpuinfo_arm.h include/cpuinfo_mips.h include/cpuinfo_ppc.h include/cpuinfo_x86.h include/internal/bit_utils.h include/internal/cpuid_x86.h include/internal/filesystem.h include/internal/hwcaps.h include/internal/stack_line_reader.h include/internal/string_view.h -include/internal/unix_features_aggregator.h lib/libcpu_features.so