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