diff --git a/BUILD.bazel b/BUILD.bazel index 31384214..24cb9e08 100644 --- a/BUILD.bazel +++ b/BUILD.bazel @@ -2,7 +2,7 @@ load("@bazel_skylib//lib:selects.bzl", "selects") load("//:bazel/platforms.bzl", "PLATFORM_CPU_ARM", "PLATFORM_CPU_ARM64", "PLATFORM_CPU_MIPS", "PLATFORM_CPU_PPC", "PLATFORM_CPU_RISCV32", "PLATFORM_CPU_RISCV64", "PLATFORM_CPU_X86_64") -load("//:bazel/platforms.bzl", "PLATFORM_OS_MACOS", "PLATFORM_OS_LINUX", "PLATFORM_OS_FREEBSD", "PLATFORM_OS_ANDROID") +load("//:bazel/platforms.bzl", "PLATFORM_OS_MACOS", "PLATFORM_OS_LINUX", "PLATFORM_OS_FREEBSD", "PLATFORM_OS_OPENBSD", "PLATFORM_OS_ANDROID") package( default_visibility = ["//visibility:public"], @@ -170,13 +170,14 @@ cc_library( name = "hwcaps", srcs = [ "src/hwcaps.c", - "src/hwcaps_freebsd.c", + "src/hwcaps_freebsd_or_openbsd.c", "src/hwcaps_linux_or_android.c", ], copts = C99_FLAGS, defines = selects.with_or({ PLATFORM_OS_MACOS: ["HAVE_DLFCN_H"], PLATFORM_OS_FREEBSD: ["HAVE_STRONG_ELF_AUX_INFO"], + PLATFORM_OS_OPENBSD: ["HAVE_STRONG_ELF_AUX_INFO"], PLATFORM_OS_LINUX: ["HAVE_STRONG_GETAUXVAL"], PLATFORM_OS_ANDROID: ["HAVE_STRONG_GETAUXVAL"], "//conditions:default": [], @@ -195,7 +196,7 @@ cc_library( testonly = 1, srcs = [ "src/hwcaps.c", - "src/hwcaps_freebsd.c", + "src/hwcaps_freebsd_or_openbsd.c", "src/hwcaps_linux_or_android.c", "test/hwcaps_for_testing.cc", ], @@ -230,7 +231,7 @@ cc_library( "src/impl_aarch64_linux_or_android.c", "src/impl_aarch64_macos_or_iphone.c", "src/impl_aarch64_windows.c", - "src/impl_aarch64_freebsd.c", + "src/impl_aarch64_freebsd_or_openbsd.c", ], PLATFORM_CPU_MIPS: ["src/impl_mips_linux_or_android.c"], PLATFORM_CPU_PPC: ["src/impl_ppc_linux.c"], @@ -295,7 +296,7 @@ cc_library( "src/impl_aarch64_linux_or_android.c", "src/impl_aarch64_macos_or_iphone.c", "src/impl_aarch64_windows.c", - "src/impl_aarch64_freebsd.c", + "src/impl_aarch64_freebsd_or_openbsd.c", ], PLATFORM_CPU_MIPS: ["src/impl_mips_linux_or_android.c"], PLATFORM_CPU_PPC: ["src/impl_ppc_linux.c"], diff --git a/CMakeLists.txt b/CMakeLists.txt index 18925e09..ca3269b9 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -148,7 +148,7 @@ if(UNIX) add_library(unix_based_hardware_detection OBJECT ${PROJECT_SOURCE_DIR}/include/internal/hwcaps.h ${PROJECT_SOURCE_DIR}/src/hwcaps_linux_or_android.c - ${PROJECT_SOURCE_DIR}/src/hwcaps_freebsd.c + ${PROJECT_SOURCE_DIR}/src/hwcaps_freebsd_or_openbsd.c ${PROJECT_SOURCE_DIR}/src/hwcaps.c ) setup_include_and_definitions(unix_based_hardware_detection) diff --git a/bazel/platforms.bzl b/bazel/platforms.bzl index 7ced3d1d..65d9a803 100644 --- a/bazel/platforms.bzl +++ b/bazel/platforms.bzl @@ -22,3 +22,5 @@ PLATFORM_OS_LINUX = ("@platforms//os:linux") PLATFORM_OS_ANDROID = ("@platforms//os:android") PLATFORM_OS_FREEBSD = ("@platforms//os:freebsd") + +PLATFORM_OS_OPENBSD = ("@platforms//os:openbsd") diff --git a/include/cpu_features_macros.h b/include/cpu_features_macros.h index 2d43b790..d61ec102 100644 --- a/include/cpu_features_macros.h +++ b/include/cpu_features_macros.h @@ -95,6 +95,10 @@ #define CPU_FEATURES_OS_FREEBSD #endif +#if defined(__OpenBSD__) +#define CPU_FEATURES_OS_OPENBSD +#endif + #if defined(__ANDROID__) #define CPU_FEATURES_OS_ANDROID #endif diff --git a/src/hwcaps_freebsd.c b/src/hwcaps_freebsd_or_openbsd.c similarity index 89% rename from src/hwcaps_freebsd.c rename to src/hwcaps_freebsd_or_openbsd.c index eb227504..db90297c 100644 --- a/src/hwcaps_freebsd.c +++ b/src/hwcaps_freebsd_or_openbsd.c @@ -14,7 +14,7 @@ #include "cpu_features_macros.h" -#ifdef CPU_FEATURES_OS_FREEBSD +#if defined(CPU_FEATURES_OS_FREEBSD) || defined(CPU_FEATURES_OS_OPENBSD) #include "internal/hwcaps.h" @@ -47,8 +47,8 @@ const char *CpuFeatures_GetPlatformPointer(void) { return NULL; } const char *CpuFeatures_GetBasePlatformPointer(void) { return NULL; } #else -#error "FreeBSD needs support for elf_aux_info" +#error "FreeBSD / OpenBSD needs support for elf_aux_info" #endif // HAVE_STRONG_ELF_AUX_INFO #endif // CPU_FEATURES_TEST -#endif // CPU_FEATURES_OS_FREEBSD +#endif // CPU_FEATURES_OS_FREEBSD || CPU_FEATURES_OS_OPENBSD diff --git a/src/impl_aarch64_cpuid.c b/src/impl_aarch64_cpuid.c index 1ca56cd4..d2e08277 100644 --- a/src/impl_aarch64_cpuid.c +++ b/src/impl_aarch64_cpuid.c @@ -15,8 +15,8 @@ #include "cpu_features_macros.h" #ifdef CPU_FEATURES_ARCH_AARCH64 -#if (defined(CPU_FEATURES_OS_FREEBSD) || defined(CPU_FEATURES_OS_LINUX) || \ - defined(CPU_FEATURES_OS_ANDROID)) +#if (defined(CPU_FEATURES_OS_FREEBSD) || defined(CPU_FEATURES_OS_OPENBSD) || \ + defined(CPU_FEATURES_OS_LINUX) || defined(CPU_FEATURES_OS_ANDROID)) #if (defined(CPU_FEATURES_COMPILER_GCC) || defined(CPU_FEATURES_COMPILER_CLANG)) #include "internal/cpuid_aarch64.h" @@ -35,6 +35,6 @@ uint64_t GetMidrEl1(void) { #error "Unsupported compiler, aarch64 cpuid requires either GCC or Clang." #endif // (defined(CPU_FEATURES_COMPILER_GCC) || // defined(CPU_FEATURES_COMPILER_CLANG)) -#endif // (defined(CPU_FEATURES_OS_FREEBSD) || defined(CPU_FEATURES_OS_LINUX) - // || defined(CPU_FEATURES_OS_ANDROID)) +#endif // (defined(CPU_FEATURES_OS_FREEBSD) || defined(CPU_FEATURES_OS_OPENBSD) + // || defined(CPU_FEATURES_OS_LINUX) || defined(CPU_FEATURES_OS_ANDROID)) #endif // CPU_FEATURES_ARCH_AARCH64 diff --git a/src/impl_aarch64_freebsd.c b/src/impl_aarch64_freebsd_or_openbsd.c similarity index 91% rename from src/impl_aarch64_freebsd.c rename to src/impl_aarch64_freebsd_or_openbsd.c index d1696408..49e662a6 100644 --- a/src/impl_aarch64_freebsd.c +++ b/src/impl_aarch64_freebsd_or_openbsd.c @@ -15,7 +15,7 @@ #include "cpu_features_macros.h" #ifdef CPU_FEATURES_ARCH_AARCH64 -#ifdef CPU_FEATURES_OS_FREEBSD +#if defined(CPU_FEATURES_OS_FREEBSD) || defined(CPU_FEATURES_OS_OPENBSD) #include "cpuinfo_aarch64.h" #include "impl_aarch64__base_implementation.inl" @@ -42,5 +42,5 @@ Aarch64Info GetAarch64Info(void) { return info; } -#endif // CPU_FEATURES_OS_FREEBSD +#endif // CPU_FEATURES_OS_FREEBSD || CPU_FEATURES_OS_OPENBSD #endif // CPU_FEATURES_ARCH_AARCH64 diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt index d2177f22..e317233e 100644 --- a/test/CMakeLists.txt +++ b/test/CMakeLists.txt @@ -25,7 +25,7 @@ target_link_libraries(stack_line_reader_for_test string_view filesystem_for_test add_library(all_libraries ../src/hwcaps.c ../src/hwcaps_linux_or_android.c - ../src/hwcaps_freebsd.c + ../src/hwcaps_freebsd_or_openbsd.c ../src/stack_line_reader.c) target_link_libraries(all_libraries hwcaps_for_testing stack_line_reader string_view) @@ -81,7 +81,7 @@ if(PROCESSOR_IS_AARCH64) ../src/impl_aarch64_linux_or_android.c ../src/impl_aarch64_windows.c ../src/impl_aarch64_macos_or_iphone.c - ../src/impl_aarch64_freebsd.c + ../src/impl_aarch64_freebsd_or_openbsd.c ) if(APPLE) target_compile_definitions(cpuinfo_aarch64_test PUBLIC CPU_FEATURES_MOCK_SYSCTL_AARCH64) diff --git a/test/cpuinfo_aarch64_test.cc b/test/cpuinfo_aarch64_test.cc index f1f55943..a84e6b6c 100644 --- a/test/cpuinfo_aarch64_test.cc +++ b/test/cpuinfo_aarch64_test.cc @@ -22,13 +22,13 @@ #if defined(CPU_FEATURES_OS_WINDOWS) #include "internal/windows_utils.h" #endif // CPU_FEATURES_OS_WINDOWS -#if defined(CPU_FEATURES_OS_FREEBSD) || defined(CPU_FEATURES_OS_LINUX) +#if defined(CPU_FEATURES_OS_FREEBSD) || defined(CPU_FEATURES_OS_OPENBSD) || defined(CPU_FEATURES_OS_LINUX) #include "internal/cpuid_aarch64.h" -#endif // defined(CPU_FEATURES_OS_FREEBSD) || defined(CPU_FEATURES_OS_LINUX) +#endif // defined(CPU_FEATURES_OS_FREEBSD) || defined(CPU_FEATURES_OS_OPENBSD) || defined(CPU_FEATURES_OS_LINUX) namespace cpu_features { class FakeCpuAarch64 { -#if defined(CPU_FEATURES_OS_FREEBSD) || defined(CPU_FEATURES_OS_LINUX) +#if defined(CPU_FEATURES_OS_FREEBSD) || defined(CPU_FEATURES_OS_OPENBSD) || defined(CPU_FEATURES_OS_LINUX) public: uint64_t GetMidrEl1() const { return _midr_el1; } @@ -89,7 +89,7 @@ static FakeCpuAarch64& cpu() { } // Define OS dependent mock functions -#if defined(CPU_FEATURES_OS_FREEBSD) || defined(CPU_FEATURES_OS_LINUX) +#if defined(CPU_FEATURES_OS_FREEBSD) || defined(CPU_FEATURES_OS_OPENBSD) || defined(CPU_FEATURES_OS_LINUX) extern "C" uint64_t GetMidrEl1(void) { return cpu().GetMidrEl1(); } #elif defined(CPU_FEATURES_OS_MACOS) extern "C" bool GetDarwinSysCtlByName(const char* name) { @@ -137,7 +137,7 @@ TEST_F(CpuidAarch64Test, Aarch64FeaturesEnum) { } // AT_HWCAP tests -#if defined(CPU_FEATURES_OS_LINUX) || defined(CPU_FEATURES_OS_FREEBSD) +#if defined(CPU_FEATURES_OS_LINUX) || defined(CPU_FEATURES_OS_FREEBSD) || defined(CPU_FEATURES_OS_OPENBSD) TEST_F(CpuidAarch64Test, FromHardwareCap) { ResetHwcaps(); SetHardwareCapabilities(AARCH64_HWCAP_FP | AARCH64_HWCAP_AES, 0); @@ -205,7 +205,7 @@ TEST_F(CpuidAarch64Test, FromHardwareCap2) { EXPECT_FALSE(info.features.dgh); EXPECT_FALSE(info.features.rng); } -#endif // defined(CPU_FEATURES_OS_LINUX) || defined(CPU_FEATURES_OS_FREEBSD) +#endif // defined(CPU_FEATURES_OS_LINUX) || defined(CPU_FEATURES_OS_FREEBSD) || defined(CPU_FEATURES_OS_OPENBSD) // OS dependent tests #if defined(CPU_FEATURES_OS_LINUX) @@ -415,7 +415,7 @@ TEST_F(CpuidAarch64Test, WINDOWS_AARCH64_RPI4) { EXPECT_FALSE(info.features.jscvt); EXPECT_FALSE(info.features.lrcpc); } -#elif defined(CPU_FEATURES_OS_FREEBSD) +#elif defined(CPU_FEATURES_OS_FREEBSD) || defined(CPU_FEATURES_OS_OPENBSD) TEST_F(CpuidAarch64Test, MrsMidrEl1_RPI4) { ResetHwcaps(); SetHardwareCapabilities(AARCH64_HWCAP_FP | AARCH64_HWCAP_CPUID, 0);