357 lines
		
	
	
		
			8.0 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
			
		
		
	
	
			357 lines
		
	
	
		
			8.0 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
# 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_armeabi": 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_aarch64": COMMON_SRCS + ARM_SRCS + LINUX_SRCS + LINUX_ARM64_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,
 | 
						|
        ":ios_sim_arm64": 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,
 | 
						|
        ":emscripten": COMMON_SRCS + EMSCRIPTEN_SRCS,
 | 
						|
    }),
 | 
						|
    copts = select({
 | 
						|
        ":windows_x86_64": [],
 | 
						|
        "//conditions:default": C99OPTS,
 | 
						|
    }) + [
 | 
						|
        "-Iexternal/cpuinfo/include",
 | 
						|
        "-Iexternal/cpuinfo/src",
 | 
						|
    ],
 | 
						|
    linkstatic = 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",
 | 
						|
    ],
 | 
						|
)
 | 
						|
 | 
						|
############################# Build configurations #############################
 | 
						|
 | 
						|
config_setting(
 | 
						|
    name = "linux_x86_64",
 | 
						|
    values = {"cpu": "k8"},
 | 
						|
)
 | 
						|
 | 
						|
config_setting(
 | 
						|
    name = "linux_arm",
 | 
						|
    values = {"cpu": "arm"},
 | 
						|
)
 | 
						|
 | 
						|
config_setting(
 | 
						|
    name = "linux_armeabi",
 | 
						|
    values = {"cpu": "armeabi"},
 | 
						|
)
 | 
						|
 | 
						|
config_setting(
 | 
						|
    name = "linux_armhf",
 | 
						|
    values = {"cpu": "armhf"},
 | 
						|
)
 | 
						|
 | 
						|
config_setting(
 | 
						|
    name = "linux_armv7a",
 | 
						|
    values = {"cpu": "armv7a"},
 | 
						|
)
 | 
						|
 | 
						|
config_setting(
 | 
						|
    name = "linux_aarch64",
 | 
						|
    values = {"cpu": "aarch64"},
 | 
						|
)
 | 
						|
 | 
						|
config_setting(
 | 
						|
    name = "macos_x86_64",
 | 
						|
    values = {
 | 
						|
        "apple_platform_type": "macos",
 | 
						|
        "cpu": "darwin",
 | 
						|
    },
 | 
						|
)
 | 
						|
 | 
						|
config_setting(
 | 
						|
    name = "macos_arm64",
 | 
						|
    values = {
 | 
						|
        "apple_platform_type": "macos",
 | 
						|
        "cpu": "darwin_arm64",
 | 
						|
    },
 | 
						|
)
 | 
						|
 | 
						|
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 = "ios_sim_arm64",
 | 
						|
    values = {
 | 
						|
        "apple_platform_type": "ios",
 | 
						|
        "cpu": "ios_sim_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",
 | 
						|
    values = {"crosstool_top": "//toolchain:emscripten"},
 | 
						|
)
 |