1# cpuinfo, a library to detect information about the host CPU 2package(default_visibility = ["//visibility:public"]) 3 4licenses(["notice"]) 5 6exports_files(["LICENSE"]) 7 8C99OPTS = [ 9 "-std=gnu99", # gnu99, not c99, because dprintf is used 10 "-Wno-vla", 11 "-D_GNU_SOURCE=1", # to use CPU_SETSIZE 12 "-DCPUINFO_INTERNAL=", 13 "-DCPUINFO_PRIVATE=", 14] 15 16# Source code common to all platforms. 17COMMON_SRCS = [ 18 "src/api.c", 19 "src/init.c", 20 "src/cache.c", 21] 22 23# Architecture-specific sources and headers. 24X86_SRCS = [ 25 "src/x86/cache/descriptor.c", 26 "src/x86/cache/deterministic.c", 27 "src/x86/cache/init.c", 28 "src/x86/info.c", 29 "src/x86/init.c", 30 "src/x86/isa.c", 31 "src/x86/name.c", 32 "src/x86/topology.c", 33 "src/x86/uarch.c", 34 "src/x86/vendor.c", 35] 36 37ARM_SRCS = [ 38 "src/arm/cache.c", 39 "src/arm/uarch.c", 40] 41 42# Platform-specific sources and headers 43LINUX_SRCS = [ 44 "src/linux/cpulist.c", 45 "src/linux/multiline.c", 46 "src/linux/processors.c", 47 "src/linux/smallfile.c", 48] 49 50MOCK_LINUX_SRCS = [ 51 "src/linux/mockfile.c", 52] 53 54MACH_SRCS = [ 55 "src/mach/topology.c", 56] 57 58EMSCRIPTEN_SRCS = [ 59 "src/emscripten/init.c", 60] 61 62LINUX_X86_SRCS = [ 63 "src/x86/linux/cpuinfo.c", 64 "src/x86/linux/init.c", 65] 66 67LINUX_ARM_SRCS = [ 68 "src/arm/linux/chipset.c", 69 "src/arm/linux/clusters.c", 70 "src/arm/linux/cpuinfo.c", 71 "src/arm/linux/hwcap.c", 72 "src/arm/linux/init.c", 73 "src/arm/linux/midr.c", 74] 75 76LINUX_ARM32_SRCS = LINUX_ARM_SRCS + ["src/arm/linux/aarch32-isa.c"] 77 78LINUX_ARM64_SRCS = LINUX_ARM_SRCS + ["src/arm/linux/aarch64-isa.c"] 79 80ANDROID_ARM_SRCS = [ 81 "src/arm/android/properties.c", 82] 83 84WINDOWS_X86_SRCS = [ 85 "src/x86/windows/init.c", 86] 87 88MACH_X86_SRCS = [ 89 "src/x86/mach/init.c", 90] 91 92MACH_ARM_SRCS = [ 93 "src/arm/mach/init.c", 94] 95 96EMSCRIPTEN_SRCS = [ 97 "src/emscripten/init.c", 98] 99 100cc_library( 101 name = "cpuinfo_impl", 102 srcs = select({ 103 ":linux_x86_64": COMMON_SRCS + X86_SRCS + LINUX_SRCS + LINUX_X86_SRCS, 104 ":linux_arm": COMMON_SRCS + ARM_SRCS + LINUX_SRCS + LINUX_ARM32_SRCS, 105 ":linux_armhf": COMMON_SRCS + ARM_SRCS + LINUX_SRCS + LINUX_ARM32_SRCS, 106 ":linux_armv7a": COMMON_SRCS + ARM_SRCS + LINUX_SRCS + LINUX_ARM32_SRCS, 107 ":linux_armeabi": COMMON_SRCS + ARM_SRCS + LINUX_SRCS + LINUX_ARM32_SRCS, 108 ":linux_aarch64": COMMON_SRCS + ARM_SRCS + LINUX_SRCS + LINUX_ARM64_SRCS, 109 ":linux_mips64": COMMON_SRCS + LINUX_SRCS, 110 ":linux_riscv64": COMMON_SRCS + LINUX_SRCS, 111 ":linux_s390x": COMMON_SRCS + LINUX_SRCS, 112 ":macos_x86_64": COMMON_SRCS + X86_SRCS + MACH_SRCS + MACH_X86_SRCS, 113 ":macos_arm64": COMMON_SRCS + MACH_SRCS + MACH_ARM_SRCS, 114 ":windows_x86_64": COMMON_SRCS + X86_SRCS + WINDOWS_X86_SRCS, 115 ":android_armv7": COMMON_SRCS + ARM_SRCS + LINUX_SRCS + LINUX_ARM32_SRCS + ANDROID_ARM_SRCS, 116 ":android_arm64": COMMON_SRCS + ARM_SRCS + LINUX_SRCS + LINUX_ARM64_SRCS + ANDROID_ARM_SRCS, 117 ":android_x86": COMMON_SRCS + X86_SRCS + LINUX_SRCS + LINUX_X86_SRCS, 118 ":android_x86_64": COMMON_SRCS + X86_SRCS + LINUX_SRCS + LINUX_X86_SRCS, 119 ":ios_x86_64": COMMON_SRCS + X86_SRCS + MACH_SRCS + MACH_X86_SRCS, 120 ":ios_x86": COMMON_SRCS + X86_SRCS + MACH_SRCS + MACH_X86_SRCS, 121 ":ios_armv7": COMMON_SRCS + MACH_SRCS + MACH_ARM_SRCS, 122 ":ios_arm64": COMMON_SRCS + MACH_SRCS + MACH_ARM_SRCS, 123 ":ios_arm64e": COMMON_SRCS + MACH_SRCS + MACH_ARM_SRCS, 124 ":watchos_x86_64": COMMON_SRCS + X86_SRCS + MACH_SRCS + MACH_X86_SRCS, 125 ":watchos_x86": COMMON_SRCS + X86_SRCS + MACH_SRCS + MACH_X86_SRCS, 126 ":watchos_armv7k": COMMON_SRCS + MACH_SRCS + MACH_ARM_SRCS, 127 ":watchos_arm64_32": COMMON_SRCS + MACH_SRCS + MACH_ARM_SRCS, 128 ":tvos_x86_64": COMMON_SRCS + X86_SRCS + MACH_SRCS + MACH_X86_SRCS, 129 ":tvos_arm64": COMMON_SRCS + MACH_SRCS + MACH_ARM_SRCS, 130 ":emscripten_wasm": COMMON_SRCS + EMSCRIPTEN_SRCS, 131 }), 132 copts = select({ 133 ":windows_x86_64": [], 134 "//conditions:default": C99OPTS, 135 }) + [ 136 "-Iexternal/cpuinfo/include", 137 "-Iexternal/cpuinfo/src", 138 ], 139 linkstatic = select({ 140 # https://github.com/bazelbuild/bazel/issues/11552 141 ":macos_x86_64": False, 142 "//conditions:default": True, 143 }), 144 # Headers must be in textual_hdrs to allow us to set the standard to C99 145 textual_hdrs = [ 146 "include/cpuinfo.h", 147 "src/linux/api.h", 148 "src/mach/api.h", 149 "src/cpuinfo/common.h", 150 "src/cpuinfo/internal-api.h", 151 "src/cpuinfo/log.h", 152 "src/cpuinfo/utils.h", 153 "src/x86/api.h", 154 "src/x86/cpuid.h", 155 "src/x86/linux/api.h", 156 "src/arm/android/api.h", 157 "src/arm/linux/api.h", 158 "src/arm/linux/cp.h", 159 "src/arm/api.h", 160 "src/arm/midr.h", 161 ], 162 deps = [ 163 "@clog", 164 ], 165) 166 167cc_library( 168 name = "cpuinfo", 169 hdrs = [ 170 "include/cpuinfo.h", 171 ], 172 strip_include_prefix = "include", 173 deps = [ 174 ":cpuinfo_impl", 175 ], 176) 177 178cc_library( 179 name = "cpuinfo_with_unstripped_include_path", 180 hdrs = [ 181 "include/cpuinfo.h", 182 ], 183 deps = [ 184 ":cpuinfo_impl", 185 ], 186) 187 188############################# Build configurations ############################# 189 190config_setting( 191 name = "linux_x86_64", 192 values = {"cpu": "k8"}, 193) 194 195config_setting( 196 name = "linux_arm", 197 values = {"cpu": "arm"}, 198) 199 200config_setting( 201 name = "linux_armhf", 202 values = {"cpu": "armhf"}, 203) 204 205config_setting( 206 name = "linux_armv7a", 207 values = {"cpu": "armv7a"}, 208) 209 210config_setting( 211 name = "linux_armeabi", 212 values = {"cpu": "armeabi"}, 213) 214 215config_setting( 216 name = "linux_aarch64", 217 values = {"cpu": "aarch64"}, 218) 219 220config_setting( 221 name = "linux_mips64", 222 values = {"cpu": "mips64"}, 223) 224 225config_setting( 226 name = "linux_riscv64", 227 values = {"cpu": "riscv64"}, 228) 229 230config_setting( 231 name = "linux_s390x", 232 values = {"cpu": "s390x"}, 233) 234 235config_setting( 236 name = "macos_x86_64", 237 values = { 238 "apple_platform_type": "macos", 239 "cpu": "darwin", 240 }, 241) 242 243config_setting( 244 name = "windows_x86_64", 245 values = {"cpu": "x64_windows"}, 246) 247 248config_setting( 249 name = "android_armv7", 250 values = { 251 "crosstool_top": "//external:android/crosstool", 252 "cpu": "armeabi-v7a", 253 }, 254 visibility = ["//visibility:public"], 255) 256 257config_setting( 258 name = "android_arm64", 259 values = { 260 "crosstool_top": "//external:android/crosstool", 261 "cpu": "arm64-v8a", 262 }, 263 visibility = ["//visibility:public"], 264) 265 266config_setting( 267 name = "android_x86", 268 values = { 269 "crosstool_top": "//external:android/crosstool", 270 "cpu": "x86", 271 }, 272 visibility = ["//visibility:public"], 273) 274 275config_setting( 276 name = "android_x86_64", 277 values = { 278 "crosstool_top": "//external:android/crosstool", 279 "cpu": "x86_64", 280 }, 281 visibility = ["//visibility:public"], 282) 283 284config_setting( 285 name = "ios_armv7", 286 values = { 287 "apple_platform_type": "ios", 288 "cpu": "ios_armv7", 289 }, 290) 291 292config_setting( 293 name = "ios_arm64", 294 values = { 295 "apple_platform_type": "ios", 296 "cpu": "ios_arm64", 297 }, 298) 299 300config_setting( 301 name = "ios_arm64e", 302 values = { 303 "apple_platform_type": "ios", 304 "cpu": "ios_arm64e", 305 }, 306) 307 308config_setting( 309 name = "macos_arm64", 310 values = { 311 "apple_platform_type": "macos", 312 "cpu": "darwin_arm64", 313 }, 314) 315 316config_setting( 317 name = "ios_x86", 318 values = { 319 "apple_platform_type": "ios", 320 "cpu": "ios_i386", 321 }, 322) 323 324config_setting( 325 name = "ios_x86_64", 326 values = { 327 "apple_platform_type": "ios", 328 "cpu": "ios_x86_64", 329 }, 330) 331 332config_setting( 333 name = "watchos_armv7k", 334 values = { 335 "apple_platform_type": "watchos", 336 "cpu": "watchos_armv7k", 337 }, 338) 339 340config_setting( 341 name = "watchos_arm64_32", 342 values = { 343 "apple_platform_type": "watchos", 344 "cpu": "watchos_arm64_32", 345 }, 346) 347 348config_setting( 349 name = "watchos_x86", 350 values = { 351 "apple_platform_type": "watchos", 352 "cpu": "watchos_i386", 353 }, 354) 355 356config_setting( 357 name = "watchos_x86_64", 358 values = { 359 "apple_platform_type": "watchos", 360 "cpu": "watchos_x86_64", 361 }, 362) 363 364config_setting( 365 name = "tvos_arm64", 366 values = { 367 "apple_platform_type": "tvos", 368 "cpu": "tvos_arm64", 369 }, 370) 371 372config_setting( 373 name = "tvos_x86_64", 374 values = { 375 "apple_platform_type": "tvos", 376 "cpu": "tvos_x86_64", 377 }, 378) 379 380config_setting( 381 name = "emscripten_wasm", 382 values = { 383 "cpu": "wasm", 384 }, 385) 386 387config_setting( 388 name = "emscripten_wasmsimd", 389 values = { 390 "cpu": "wasm", 391 "features": "wasm_simd", 392 }, 393) 394 395config_setting( 396 name = "emscripten_asmjs", 397 values = { 398 "cpu": "asmjs", 399 }, 400) 401