Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/google/cpu_features.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGuillaume Chatelet <gchatelet@google.com>2022-02-03 15:56:31 +0300
committerGitHub <noreply@github.com>2022-02-03 15:56:31 +0300
commite38dc6d2a8a855dc4bcea421c23eaf68ddd671e6 (patch)
tree2241a7bbe6b86b92dba09849460618eb8c91f962
parent5f5e6d620f67063651a511afbf72439888fe3bf2 (diff)
[NFC] Add bazel support to cpu_features (#222)
-rw-r--r--.gitignore6
-rw-r--r--BUILD.bazel320
-rw-r--r--WORKSPACE23
-rw-r--r--bazel/platforms.bzl11
4 files changed, 360 insertions, 0 deletions
diff --git a/.gitignore b/.gitignore
index b68012d..f918154 100644
--- a/.gitignore
+++ b/.gitignore
@@ -11,3 +11,9 @@ out/
.vscode/
.vs/
*.swp
+
+# Bazel artifacts
+**/bazel-*
+
+# Per-user bazelrc files
+user.bazelrc
diff --git a/BUILD.bazel b/BUILD.bazel
new file mode 100644
index 0000000..e60e1c4
--- /dev/null
+++ b/BUILD.bazel
@@ -0,0 +1,320 @@
+# cpu_features, a cross platform C99 library to get cpu features at runtime.
+
+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_X86_64")
+
+package(
+ default_visibility = ["//visibility:public"],
+ licenses = ["notice"],
+)
+
+exports_files(["LICENSE"])
+
+CC_FLAGS = [
+ "-Iinclude",
+]
+
+C99_FLAGS = CC_FLAGS + [
+ "-std=c99",
+ "-Wall",
+ "-Wextra",
+ "-Wmissing-declarations",
+ "-Wmissing-prototypes",
+ "-Wno-implicit-fallthrough",
+ "-Wno-unused-function",
+ "-Wold-style-definition",
+ "-Wshadow",
+ "-Wsign-compare",
+ "-Wstrict-prototypes",
+]
+
+cc_library(
+ name = "cpu_features_macros",
+ hdrs = ["include/cpu_features_macros.h"],
+ copts = C99_FLAGS,
+)
+
+cc_library(
+ name = "cpu_features_cache_info",
+ hdrs = ["include/cpu_features_cache_info.h"],
+ copts = C99_FLAGS,
+ deps = [":cpu_features_macros"],
+)
+
+cc_library(
+ name = "bit_utils",
+ hdrs = ["include/internal/bit_utils.h"],
+ copts = C99_FLAGS,
+ deps = [":cpu_features_macros"],
+)
+
+cc_test(
+ name = "bit_utils_test",
+ srcs = ["test/bit_utils_test.cc"],
+ copts = CC_FLAGS,
+ deps = [
+ ":bit_utils",
+ "@com_google_googletest//:gtest_main",
+ ],
+)
+
+cc_library(
+ name = "memory_utils",
+ copts = C99_FLAGS,
+ textual_hdrs = [
+ "src/copy.inl",
+ "src/equals.inl",
+ ],
+)
+
+cc_library(
+ name = "string_view",
+ srcs = [
+ "src/string_view.c",
+ ],
+ hdrs = ["include/internal/string_view.h"],
+ copts = C99_FLAGS,
+ deps = [
+ ":cpu_features_macros",
+ ":memory_utils",
+ ],
+)
+
+cc_test(
+ name = "string_view_test",
+ srcs = ["test/string_view_test.cc"],
+ copts = CC_FLAGS,
+ deps = [
+ ":string_view",
+ "@com_google_googletest//:gtest_main",
+ ],
+)
+
+cc_library(
+ name = "filesystem",
+ srcs = ["src/filesystem.c"],
+ hdrs = ["include/internal/filesystem.h"],
+ copts = C99_FLAGS,
+ deps = [":cpu_features_macros"],
+)
+
+cc_library(
+ name = "filesystem_for_testing",
+ testonly = 1,
+ srcs = [
+ "src/filesystem.c",
+ "test/filesystem_for_testing.cc",
+ ],
+ hdrs = [
+ "include/internal/filesystem.h",
+ "test/filesystem_for_testing.h",
+ ],
+ copts = CC_FLAGS,
+ defines = ["CPU_FEATURES_MOCK_FILESYSTEM"],
+ deps = [
+ ":cpu_features_macros",
+ ],
+)
+
+cc_library(
+ name = "stack_line_reader",
+ srcs = ["src/stack_line_reader.c"],
+ hdrs = ["include/internal/stack_line_reader.h"],
+ copts = C99_FLAGS,
+ defines = ["STACK_LINE_READER_BUFFER_SIZE=1024"],
+ deps = [
+ ":cpu_features_macros",
+ ":filesystem",
+ ":string_view",
+ ],
+)
+
+cc_test(
+ name = "stack_line_reader_test",
+ srcs = [
+ "include/internal/stack_line_reader.h",
+ "src/stack_line_reader.c",
+ "test/stack_line_reader_test.cc",
+ ],
+ copts = CC_FLAGS,
+ defines = ["STACK_LINE_READER_BUFFER_SIZE=16"],
+ deps = [
+ ":cpu_features_macros",
+ ":filesystem_for_testing",
+ ":string_view",
+ "@com_google_googletest//:gtest_main",
+ ],
+)
+
+cc_library(
+ name = "stack_line_reader_to_use_with_filesystem_for_testing",
+ testonly = 1,
+ srcs = ["src/stack_line_reader.c"],
+ hdrs = ["include/internal/stack_line_reader.h"],
+ copts = C99_FLAGS,
+ defines = ["STACK_LINE_READER_BUFFER_SIZE=1024"],
+ deps = [
+ ":cpu_features_macros",
+ ":filesystem_for_testing",
+ ":string_view",
+ ],
+)
+
+cc_library(
+ name = "hwcaps",
+ srcs = ["src/hwcaps.c"],
+ hdrs = ["include/internal/hwcaps.h"],
+ copts = C99_FLAGS,
+ defines = ["HAVE_STRONG_GETAUXVAL"],
+ deps = [
+ ":cpu_features_macros",
+ ":filesystem",
+ ":string_view",
+ ],
+)
+
+cc_library(
+ name = "hwcaps_for_testing",
+ testonly = 1,
+ srcs = [
+ "src/hwcaps.c",
+ "test/hwcaps_for_testing.cc",
+ ],
+ hdrs = [
+ "include/internal/hwcaps.h",
+ "test/hwcaps_for_testing.h",
+ ],
+ copts = CC_FLAGS,
+ defines = [
+ "CPU_FEATURES_MOCK_GET_ELF_HWCAP_FROM_GETAUXVAL",
+ "CPU_FEATURES_TEST",
+ ],
+ deps = [
+ ":cpu_features_macros",
+ ":filesystem_for_testing",
+ ":string_view",
+ ],
+)
+
+cc_library(
+ name = "cpuinfo",
+ srcs = selects.with_or({
+ PLATFORM_CPU_X86_64: [
+ "src/impl_x86_freebsd.c",
+ "src/impl_x86_linux_or_android.c",
+ "src/impl_x86_macos.c",
+ "src/impl_x86_windows.c",
+ ],
+ PLATFORM_CPU_ARM: ["src/impl_arm_linux_or_android.c"],
+ PLATFORM_CPU_ARM64: ["src/impl_aarch64_linux_or_android.c"],
+ PLATFORM_CPU_MIPS: ["src/impl_mips_linux_or_android.c"],
+ PLATFORM_CPU_PPC: ["src/impl_ppc_linux.c"],
+ }),
+ hdrs = selects.with_or({
+ PLATFORM_CPU_X86_64: [
+ "include/cpuinfo_x86.h",
+ "include/internal/cpuid_x86.h",
+ ],
+ PLATFORM_CPU_ARM: ["include/cpuinfo_arm.h"],
+ PLATFORM_CPU_ARM64: ["include/cpuinfo_aarch64.h"],
+ PLATFORM_CPU_MIPS: ["include/cpuinfo_mips.h"],
+ PLATFORM_CPU_PPC: ["include/cpuinfo_ppc.h"],
+ }),
+ copts = C99_FLAGS,
+ textual_hdrs = selects.with_or({
+ PLATFORM_CPU_X86_64: ["src/impl_x86__base_implementation.inl"],
+ "//conditions:default": [],
+ }) + [
+ "src/define_introspection.inl",
+ "src/define_introspection_and_hwcaps.inl",
+ ],
+ deps = [
+ ":bit_utils",
+ ":cpu_features_cache_info",
+ ":cpu_features_macros",
+ ":filesystem",
+ ":hwcaps",
+ ":memory_utils",
+ ":stack_line_reader",
+ ":string_view",
+ ],
+)
+
+cc_library(
+ name = "cpuinfo_for_testing",
+ testonly = 1,
+ srcs = selects.with_or({
+ PLATFORM_CPU_X86_64: [
+ "src/impl_x86_freebsd.c",
+ "src/impl_x86_linux_or_android.c",
+ "src/impl_x86_macos.c",
+ "src/impl_x86_windows.c",
+ ],
+ PLATFORM_CPU_ARM: ["src/impl_arm_linux_or_android.c"],
+ PLATFORM_CPU_ARM64: ["src/impl_aarch64_linux_or_android.c"],
+ PLATFORM_CPU_MIPS: ["src/impl_mips_linux_or_android.c"],
+ PLATFORM_CPU_PPC: ["src/impl_ppc_linux.c"],
+ }),
+ hdrs = selects.with_or({
+ PLATFORM_CPU_X86_64: [
+ "include/cpuinfo_x86.h",
+ "include/internal/cpuid_x86.h",
+ ],
+ PLATFORM_CPU_ARM: ["include/cpuinfo_arm.h"],
+ PLATFORM_CPU_ARM64: ["include/cpuinfo_aarch64.h"],
+ PLATFORM_CPU_MIPS: ["include/cpuinfo_mips.h"],
+ PLATFORM_CPU_PPC: ["include/cpuinfo_ppc.h"],
+ }),
+ copts = C99_FLAGS,
+ defines = selects.with_or({
+ PLATFORM_CPU_X86_64: ["CPU_FEATURES_MOCK_CPUID_X86"],
+ "//conditions:default": [],
+ }),
+ textual_hdrs = selects.with_or({
+ PLATFORM_CPU_X86_64: ["src/impl_x86__base_implementation.inl"],
+ "//conditions:default": [],
+ }) + [
+ "src/define_introspection.inl",
+ "src/define_introspection_and_hwcaps.inl",
+ ],
+ deps = [
+ ":bit_utils",
+ ":cpu_features_cache_info",
+ ":cpu_features_macros",
+ ":filesystem_for_testing",
+ ":hwcaps_for_testing",
+ ":memory_utils",
+ ":stack_line_reader_to_use_with_filesystem_for_testing",
+ ":string_view",
+ ],
+)
+
+cc_test(
+ name = "cpuinfo_test",
+ srcs = selects.with_or({
+ PLATFORM_CPU_ARM64: ["test/cpuinfo_aarch64_test.cc"],
+ PLATFORM_CPU_ARM: ["test/cpuinfo_arm_test.cc"],
+ PLATFORM_CPU_MIPS: ["test/cpuinfo_mips_test.cc"],
+ PLATFORM_CPU_PPC: ["test/cpuinfo_ppc_test.cc"],
+ PLATFORM_CPU_X86_64: ["test/cpuinfo_x86_test.cc"],
+ }),
+ copts = CC_FLAGS,
+ deps = [
+ ":cpuinfo_for_testing",
+ ":filesystem_for_testing",
+ ":hwcaps_for_testing",
+ ":string_view",
+ "@com_google_googletest//:gtest_main",
+ ],
+)
+
+cc_binary(
+ name = "list_cpu_features",
+ srcs = ["src/utils/list_cpu_features.c"],
+ copts = C99_FLAGS,
+ deps = [
+ ":bit_utils",
+ ":cpu_features_macros",
+ ":cpuinfo",
+ ],
+)
diff --git a/WORKSPACE b/WORKSPACE
new file mode 100644
index 0000000..104c459
--- /dev/null
+++ b/WORKSPACE
@@ -0,0 +1,23 @@
+workspace(name = "com_google_cpufeatures")
+
+load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive")
+
+http_archive(
+ name = "com_google_googletest",
+ sha256 = "269cebe2be1f607f91f52630ff5bec3275b948c65d4bac323ebd05e90d84f7a9",
+ strip_prefix = "googletest-e2239ee6043f73722e7aa812a459f54a28552929",
+ urls = ["https://github.com/google/googletest/archive/e2239ee6043f73722e7aa812a459f54a28552929.zip"],
+)
+
+http_archive(
+ name = "bazel_skylib",
+ sha256 = "c6966ec828da198c5d9adbaa94c05e3a1c7f21bd012a0b29ba8ddbccb2c93b0d",
+ urls = [
+ "https://mirror.bazel.build/github.com/bazelbuild/bazel-skylib/releases/download/1.1.1/bazel-skylib-1.1.1.tar.gz",
+ "https://github.com/bazelbuild/bazel-skylib/releases/download/1.1.1/bazel-skylib-1.1.1.tar.gz",
+ ],
+)
+
+load("@bazel_skylib//:workspace.bzl", "bazel_skylib_workspace")
+
+bazel_skylib_workspace()
diff --git a/bazel/platforms.bzl b/bazel/platforms.bzl
new file mode 100644
index 0000000..5671add
--- /dev/null
+++ b/bazel/platforms.bzl
@@ -0,0 +1,11 @@
+"""Defines global variables that lists target cpus"""
+
+PLATFORM_CPU_X86_64 = ("@platforms//cpu:x86_64")
+
+PLATFORM_CPU_ARM = ("@platforms//cpu:arm")
+
+PLATFORM_CPU_ARM64 = ("@platforms//cpu:arm64")
+
+PLATFORM_CPU_MIPS = ("@platforms//cpu:mips64")
+
+PLATFORM_CPU_PPC = ("@platforms//cpu:ppc")