You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
396 lines
8.6 KiB
396 lines
8.6 KiB
# cpuinfo, a library to detect information about the host CPU
|
|
package(default_visibility = ["//visibility:public"])
|
|
|
|
licenses(["notice"])
|
|
|
|
exports_files(["LICENSE"])
|
|
|
|
C99OPTS = [
|
|
"-std=gnu99", # gnu99, not c99, because dprintf is used
|
|
"-Wno-vla",
|
|
"-D_GNU_SOURCE=1", # to use CPU_SETSIZE
|
|
"-DCPUINFO_INTERNAL=",
|
|
"-DCPUINFO_PRIVATE=",
|
|
]
|
|
|
|
# Source code common to all platforms.
|
|
COMMON_SRCS = [
|
|
"src/api.c",
|
|
"src/init.c",
|
|
"src/cache.c",
|
|
]
|
|
|
|
# Architecture-specific sources and headers.
|
|
X86_SRCS = [
|
|
"src/x86/cache/descriptor.c",
|
|
"src/x86/cache/deterministic.c",
|
|
"src/x86/cache/init.c",
|
|
"src/x86/info.c",
|
|
"src/x86/init.c",
|
|
"src/x86/isa.c",
|
|
"src/x86/name.c",
|
|
"src/x86/topology.c",
|
|
"src/x86/uarch.c",
|
|
"src/x86/vendor.c",
|
|
]
|
|
|
|
ARM_SRCS = [
|
|
"src/arm/cache.c",
|
|
"src/arm/uarch.c",
|
|
]
|
|
|
|
# Platform-specific sources and headers
|
|
LINUX_SRCS = [
|
|
"src/linux/cpulist.c",
|
|
"src/linux/multiline.c",
|
|
"src/linux/processors.c",
|
|
"src/linux/smallfile.c",
|
|
]
|
|
|
|
MOCK_LINUX_SRCS = [
|
|
"src/linux/mockfile.c",
|
|
]
|
|
|
|
MACH_SRCS = [
|
|
"src/mach/topology.c",
|
|
]
|
|
|
|
EMSCRIPTEN_SRCS = [
|
|
"src/emscripten/init.c",
|
|
]
|
|
|
|
LINUX_X86_SRCS = [
|
|
"src/x86/linux/cpuinfo.c",
|
|
"src/x86/linux/init.c",
|
|
]
|
|
|
|
LINUX_ARM_SRCS = [
|
|
"src/arm/linux/chipset.c",
|
|
"src/arm/linux/clusters.c",
|
|
"src/arm/linux/cpuinfo.c",
|
|
"src/arm/linux/hwcap.c",
|
|
"src/arm/linux/init.c",
|
|
"src/arm/linux/midr.c",
|
|
]
|
|
|
|
LINUX_ARM32_SRCS = LINUX_ARM_SRCS + ["src/arm/linux/aarch32-isa.c"]
|
|
|
|
LINUX_ARM64_SRCS = LINUX_ARM_SRCS + ["src/arm/linux/aarch64-isa.c"]
|
|
|
|
ANDROID_ARM_SRCS = [
|
|
"src/arm/android/properties.c",
|
|
]
|
|
|
|
WINDOWS_X86_SRCS = [
|
|
"src/x86/windows/init.c",
|
|
]
|
|
|
|
MACH_X86_SRCS = [
|
|
"src/x86/mach/init.c",
|
|
]
|
|
|
|
MACH_ARM_SRCS = [
|
|
"src/arm/mach/init.c",
|
|
]
|
|
|
|
cc_library(
|
|
name = "cpuinfo_impl",
|
|
srcs = select({
|
|
":linux_x86_64": COMMON_SRCS + X86_SRCS + LINUX_SRCS + LINUX_X86_SRCS,
|
|
":linux_arm": COMMON_SRCS + ARM_SRCS + LINUX_SRCS + LINUX_ARM32_SRCS,
|
|
":linux_armhf": COMMON_SRCS + ARM_SRCS + LINUX_SRCS + LINUX_ARM32_SRCS,
|
|
":linux_armv7a": COMMON_SRCS + ARM_SRCS + LINUX_SRCS + LINUX_ARM32_SRCS,
|
|
":linux_armeabi": COMMON_SRCS + ARM_SRCS + LINUX_SRCS + LINUX_ARM32_SRCS,
|
|
":linux_aarch64": COMMON_SRCS + ARM_SRCS + LINUX_SRCS + LINUX_ARM64_SRCS,
|
|
":linux_mips64": COMMON_SRCS + LINUX_SRCS,
|
|
":linux_riscv64": COMMON_SRCS + LINUX_SRCS,
|
|
":linux_s390x": COMMON_SRCS + LINUX_SRCS,
|
|
":macos_x86_64": COMMON_SRCS + X86_SRCS + MACH_SRCS + MACH_X86_SRCS,
|
|
":macos_arm64": COMMON_SRCS + MACH_SRCS + MACH_ARM_SRCS,
|
|
":windows_x86_64": COMMON_SRCS + X86_SRCS + WINDOWS_X86_SRCS,
|
|
":android_armv7": COMMON_SRCS + ARM_SRCS + LINUX_SRCS + LINUX_ARM32_SRCS + ANDROID_ARM_SRCS,
|
|
":android_arm64": COMMON_SRCS + ARM_SRCS + LINUX_SRCS + LINUX_ARM64_SRCS + ANDROID_ARM_SRCS,
|
|
":android_x86": COMMON_SRCS + X86_SRCS + LINUX_SRCS + LINUX_X86_SRCS,
|
|
":android_x86_64": COMMON_SRCS + X86_SRCS + LINUX_SRCS + LINUX_X86_SRCS,
|
|
":ios_x86_64": COMMON_SRCS + X86_SRCS + MACH_SRCS + MACH_X86_SRCS,
|
|
":ios_x86": COMMON_SRCS + X86_SRCS + MACH_SRCS + MACH_X86_SRCS,
|
|
":ios_armv7": COMMON_SRCS + MACH_SRCS + MACH_ARM_SRCS,
|
|
":ios_arm64": COMMON_SRCS + MACH_SRCS + MACH_ARM_SRCS,
|
|
":ios_arm64e": COMMON_SRCS + MACH_SRCS + MACH_ARM_SRCS,
|
|
":watchos_x86_64": COMMON_SRCS + X86_SRCS + MACH_SRCS + MACH_X86_SRCS,
|
|
":watchos_x86": COMMON_SRCS + X86_SRCS + MACH_SRCS + MACH_X86_SRCS,
|
|
":watchos_armv7k": COMMON_SRCS + MACH_SRCS + MACH_ARM_SRCS,
|
|
":watchos_arm64_32": COMMON_SRCS + MACH_SRCS + MACH_ARM_SRCS,
|
|
":tvos_x86_64": COMMON_SRCS + X86_SRCS + MACH_SRCS + MACH_X86_SRCS,
|
|
":tvos_arm64": COMMON_SRCS + MACH_SRCS + MACH_ARM_SRCS,
|
|
}),
|
|
copts = select({
|
|
":windows_x86_64": [],
|
|
"//conditions:default": C99OPTS,
|
|
}) + [
|
|
"-Iexternal/cpuinfo/include",
|
|
"-Iexternal/cpuinfo/src",
|
|
],
|
|
linkstatic = select({
|
|
# https://github.com/bazelbuild/bazel/issues/11552
|
|
":macos_x86_64": False,
|
|
"//conditions:default": True,
|
|
}),
|
|
# Headers must be in textual_hdrs to allow us to set the standard to C99
|
|
textual_hdrs = [
|
|
"include/cpuinfo.h",
|
|
"src/linux/api.h",
|
|
"src/mach/api.h",
|
|
"src/cpuinfo/common.h",
|
|
"src/cpuinfo/internal-api.h",
|
|
"src/cpuinfo/log.h",
|
|
"src/cpuinfo/utils.h",
|
|
"src/x86/api.h",
|
|
"src/x86/cpuid.h",
|
|
"src/x86/linux/api.h",
|
|
"src/arm/android/api.h",
|
|
"src/arm/linux/api.h",
|
|
"src/arm/linux/cp.h",
|
|
"src/arm/api.h",
|
|
"src/arm/midr.h",
|
|
],
|
|
deps = [
|
|
"@clog",
|
|
],
|
|
)
|
|
|
|
cc_library(
|
|
name = "cpuinfo",
|
|
hdrs = [
|
|
"include/cpuinfo.h",
|
|
],
|
|
strip_include_prefix = "include",
|
|
deps = [
|
|
":cpuinfo_impl",
|
|
],
|
|
)
|
|
|
|
cc_library(
|
|
name = "cpuinfo_with_unstripped_include_path",
|
|
hdrs = [
|
|
"include/cpuinfo.h",
|
|
],
|
|
deps = [
|
|
":cpuinfo_impl",
|
|
],
|
|
)
|
|
|
|
############################# Build configurations #############################
|
|
|
|
config_setting(
|
|
name = "linux_x86_64",
|
|
values = {"cpu": "k8"},
|
|
)
|
|
|
|
config_setting(
|
|
name = "linux_arm",
|
|
values = {"cpu": "arm"},
|
|
)
|
|
|
|
config_setting(
|
|
name = "linux_armhf",
|
|
values = {"cpu": "armhf"},
|
|
)
|
|
|
|
config_setting(
|
|
name = "linux_armv7a",
|
|
values = {"cpu": "armv7a"},
|
|
)
|
|
|
|
config_setting(
|
|
name = "linux_armeabi",
|
|
values = {"cpu": "armeabi"},
|
|
)
|
|
|
|
config_setting(
|
|
name = "linux_aarch64",
|
|
values = {"cpu": "aarch64"},
|
|
)
|
|
|
|
config_setting(
|
|
name = "linux_mips64",
|
|
values = {"cpu": "mips64"},
|
|
)
|
|
|
|
config_setting(
|
|
name = "linux_riscv64",
|
|
values = {"cpu": "riscv64"},
|
|
)
|
|
|
|
config_setting(
|
|
name = "linux_s390x",
|
|
values = {"cpu": "s390x"},
|
|
)
|
|
|
|
config_setting(
|
|
name = "macos_x86_64",
|
|
values = {
|
|
"apple_platform_type": "macos",
|
|
"cpu": "darwin",
|
|
},
|
|
)
|
|
|
|
config_setting(
|
|
name = "windows_x86_64",
|
|
values = {"cpu": "x64_windows"},
|
|
)
|
|
|
|
config_setting(
|
|
name = "android_armv7",
|
|
values = {
|
|
"crosstool_top": "//external:android/crosstool",
|
|
"cpu": "armeabi-v7a",
|
|
},
|
|
visibility = ["//visibility:public"],
|
|
)
|
|
|
|
config_setting(
|
|
name = "android_arm64",
|
|
values = {
|
|
"crosstool_top": "//external:android/crosstool",
|
|
"cpu": "arm64-v8a",
|
|
},
|
|
visibility = ["//visibility:public"],
|
|
)
|
|
|
|
config_setting(
|
|
name = "android_x86",
|
|
values = {
|
|
"crosstool_top": "//external:android/crosstool",
|
|
"cpu": "x86",
|
|
},
|
|
visibility = ["//visibility:public"],
|
|
)
|
|
|
|
config_setting(
|
|
name = "android_x86_64",
|
|
values = {
|
|
"crosstool_top": "//external:android/crosstool",
|
|
"cpu": "x86_64",
|
|
},
|
|
visibility = ["//visibility:public"],
|
|
)
|
|
|
|
config_setting(
|
|
name = "ios_armv7",
|
|
values = {
|
|
"apple_platform_type": "ios",
|
|
"cpu": "ios_armv7",
|
|
},
|
|
)
|
|
|
|
config_setting(
|
|
name = "ios_arm64",
|
|
values = {
|
|
"apple_platform_type": "ios",
|
|
"cpu": "ios_arm64",
|
|
},
|
|
)
|
|
|
|
config_setting(
|
|
name = "ios_arm64e",
|
|
values = {
|
|
"apple_platform_type": "ios",
|
|
"cpu": "ios_arm64e",
|
|
},
|
|
)
|
|
|
|
config_setting(
|
|
name = "macos_arm64",
|
|
values = {
|
|
"apple_platform_type": "macos",
|
|
"cpu": "darwin_arm64",
|
|
},
|
|
)
|
|
|
|
config_setting(
|
|
name = "ios_x86",
|
|
values = {
|
|
"apple_platform_type": "ios",
|
|
"cpu": "ios_i386",
|
|
},
|
|
)
|
|
|
|
config_setting(
|
|
name = "ios_x86_64",
|
|
values = {
|
|
"apple_platform_type": "ios",
|
|
"cpu": "ios_x86_64",
|
|
},
|
|
)
|
|
|
|
config_setting(
|
|
name = "watchos_armv7k",
|
|
values = {
|
|
"apple_platform_type": "watchos",
|
|
"cpu": "watchos_armv7k",
|
|
},
|
|
)
|
|
|
|
config_setting(
|
|
name = "watchos_arm64_32",
|
|
values = {
|
|
"apple_platform_type": "watchos",
|
|
"cpu": "watchos_arm64_32",
|
|
},
|
|
)
|
|
|
|
config_setting(
|
|
name = "watchos_x86",
|
|
values = {
|
|
"apple_platform_type": "watchos",
|
|
"cpu": "watchos_i386",
|
|
},
|
|
)
|
|
|
|
config_setting(
|
|
name = "watchos_x86_64",
|
|
values = {
|
|
"apple_platform_type": "watchos",
|
|
"cpu": "watchos_x86_64",
|
|
},
|
|
)
|
|
|
|
config_setting(
|
|
name = "tvos_arm64",
|
|
values = {
|
|
"apple_platform_type": "tvos",
|
|
"cpu": "tvos_arm64",
|
|
},
|
|
)
|
|
|
|
config_setting(
|
|
name = "tvos_x86_64",
|
|
values = {
|
|
"apple_platform_type": "tvos",
|
|
"cpu": "tvos_x86_64",
|
|
},
|
|
)
|
|
|
|
config_setting(
|
|
name = "emscripten_wasm",
|
|
values = {
|
|
"cpu": "wasm",
|
|
},
|
|
)
|
|
|
|
config_setting(
|
|
name = "emscripten_wasmsimd",
|
|
values = {
|
|
"cpu": "wasm",
|
|
"features": "wasm_simd",
|
|
},
|
|
)
|
|
|
|
config_setting(
|
|
name = "emscripten_asmjs",
|
|
values = {
|
|
"cpu": "asmjs",
|
|
},
|
|
)
|