Marat Dukhan | 08c4a43 | 2019-10-03 09:29:21 -0700 | [diff] [blame] | 1 | # cpuinfo, a library to detect information about the host CPU |
| 2 | package(default_visibility = ["//visibility:public"]) |
| 3 | |
| 4 | licenses(["notice"]) |
| 5 | |
| 6 | exports_files(["LICENSE"]) |
| 7 | |
| 8 | C99OPTS = [ |
| 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. |
| 17 | COMMON_SRCS = [ |
| 18 | "src/api.c", |
| 19 | "src/init.c", |
Marat Dukhan | 1f5d9bc | 2020-01-02 09:11:16 -0800 | [diff] [blame] | 20 | "src/cache.c", |
Marat Dukhan | 08c4a43 | 2019-10-03 09:29:21 -0700 | [diff] [blame] | 21 | ] |
| 22 | |
| 23 | # Architecture-specific sources and headers. |
| 24 | X86_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 | |
| 37 | ARM_SRCS = [ |
| 38 | "src/arm/cache.c", |
| 39 | "src/arm/uarch.c", |
| 40 | ] |
| 41 | |
| 42 | # Platform-specific sources and headers |
| 43 | LINUX_SRCS = [ |
| 44 | "src/linux/cpulist.c", |
Marat Dukhan | 08c4a43 | 2019-10-03 09:29:21 -0700 | [diff] [blame] | 45 | "src/linux/multiline.c", |
| 46 | "src/linux/processors.c", |
| 47 | "src/linux/smallfile.c", |
| 48 | ] |
| 49 | |
| 50 | MOCK_LINUX_SRCS = [ |
| 51 | "src/linux/mockfile.c", |
| 52 | ] |
| 53 | |
| 54 | MACH_SRCS = [ |
| 55 | "src/mach/topology.c", |
| 56 | ] |
| 57 | |
| 58 | EMSCRIPTEN_SRCS = [ |
| 59 | "src/emscripten/init.c", |
| 60 | ] |
| 61 | |
Marat Dukhan | 08c4a43 | 2019-10-03 09:29:21 -0700 | [diff] [blame] | 62 | LINUX_X86_SRCS = [ |
| 63 | "src/x86/linux/cpuinfo.c", |
| 64 | "src/x86/linux/init.c", |
| 65 | ] |
| 66 | |
| 67 | LINUX_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 | |
| 76 | LINUX_ARM32_SRCS = LINUX_ARM_SRCS + ["src/arm/linux/aarch32-isa.c"] |
| 77 | |
| 78 | LINUX_ARM64_SRCS = LINUX_ARM_SRCS + ["src/arm/linux/aarch64-isa.c"] |
| 79 | |
| 80 | ANDROID_ARM_SRCS = [ |
| 81 | "src/arm/android/properties.c", |
| 82 | ] |
| 83 | |
| 84 | WINDOWS_X86_SRCS = [ |
| 85 | "src/x86/windows/init.c", |
| 86 | ] |
| 87 | |
| 88 | MACH_X86_SRCS = [ |
| 89 | "src/x86/mach/init.c", |
| 90 | ] |
| 91 | |
| 92 | MACH_ARM_SRCS = [ |
| 93 | "src/arm/mach/init.c", |
| 94 | ] |
| 95 | |
| 96 | cc_library( |
| 97 | name = "cpuinfo_impl", |
| 98 | srcs = select({ |
| 99 | ":linux_x86_64": COMMON_SRCS + X86_SRCS + LINUX_SRCS + LINUX_X86_SRCS, |
Marat Dukhan | 8fa6610 | 2020-04-30 16:56:45 -0700 | [diff] [blame] | 100 | ":linux_arm": COMMON_SRCS + ARM_SRCS + LINUX_SRCS + LINUX_ARM32_SRCS, |
Marat Dukhan | f0bd4de | 2020-06-15 15:53:19 -0700 | [diff] [blame] | 101 | ":linux_armeabi": COMMON_SRCS + ARM_SRCS + LINUX_SRCS + LINUX_ARM32_SRCS, |
Marat Dukhan | 8fa6610 | 2020-04-30 16:56:45 -0700 | [diff] [blame] | 102 | ":linux_armhf": COMMON_SRCS + ARM_SRCS + LINUX_SRCS + LINUX_ARM32_SRCS, |
Marat Dukhan | a720e93 | 2020-06-10 13:01:11 -0700 | [diff] [blame] | 103 | ":linux_armv7a": COMMON_SRCS + ARM_SRCS + LINUX_SRCS + LINUX_ARM32_SRCS, |
Marat Dukhan | 91eb942 | 2020-03-24 00:17:11 -0700 | [diff] [blame] | 104 | ":linux_aarch64": COMMON_SRCS + ARM_SRCS + LINUX_SRCS + LINUX_ARM64_SRCS, |
Marat Dukhan | 885ca24 | 2019-10-07 09:17:32 -0700 | [diff] [blame] | 105 | ":macos_x86_64": COMMON_SRCS + X86_SRCS + MACH_SRCS + MACH_X86_SRCS, |
Simon Maurer | 2de19cd | 2021-03-03 14:20:21 +0100 | [diff] [blame] | 106 | ":macos_arm64": COMMON_SRCS + MACH_SRCS + MACH_ARM_SRCS, |
Marat Dukhan | 10a3808 | 2020-04-17 03:58:35 -0700 | [diff] [blame] | 107 | ":windows_x86_64": COMMON_SRCS + X86_SRCS + WINDOWS_X86_SRCS, |
Marat Dukhan | 08c4a43 | 2019-10-03 09:29:21 -0700 | [diff] [blame] | 108 | ":android_armv7": COMMON_SRCS + ARM_SRCS + LINUX_SRCS + LINUX_ARM32_SRCS + ANDROID_ARM_SRCS, |
| 109 | ":android_arm64": COMMON_SRCS + ARM_SRCS + LINUX_SRCS + LINUX_ARM64_SRCS + ANDROID_ARM_SRCS, |
| 110 | ":android_x86": COMMON_SRCS + X86_SRCS + LINUX_SRCS + LINUX_X86_SRCS, |
| 111 | ":android_x86_64": COMMON_SRCS + X86_SRCS + LINUX_SRCS + LINUX_X86_SRCS, |
Marat Dukhan | 1498d1d | 2020-02-11 20:00:05 -0800 | [diff] [blame] | 112 | ":ios_x86_64": COMMON_SRCS + X86_SRCS + MACH_SRCS + MACH_X86_SRCS, |
| 113 | ":ios_x86": COMMON_SRCS + X86_SRCS + MACH_SRCS + MACH_X86_SRCS, |
| 114 | ":ios_armv7": COMMON_SRCS + MACH_SRCS + MACH_ARM_SRCS, |
| 115 | ":ios_arm64": COMMON_SRCS + MACH_SRCS + MACH_ARM_SRCS, |
| 116 | ":ios_arm64e": COMMON_SRCS + MACH_SRCS + MACH_ARM_SRCS, |
| 117 | ":watchos_x86_64": COMMON_SRCS + X86_SRCS + MACH_SRCS + MACH_X86_SRCS, |
| 118 | ":watchos_x86": COMMON_SRCS + X86_SRCS + MACH_SRCS + MACH_X86_SRCS, |
| 119 | ":watchos_armv7k": COMMON_SRCS + MACH_SRCS + MACH_ARM_SRCS, |
| 120 | ":watchos_arm64_32": COMMON_SRCS + MACH_SRCS + MACH_ARM_SRCS, |
| 121 | ":tvos_x86_64": COMMON_SRCS + X86_SRCS + MACH_SRCS + MACH_X86_SRCS, |
| 122 | ":tvos_arm64": COMMON_SRCS + MACH_SRCS + MACH_ARM_SRCS, |
Marat Dukhan | a7d7c11 | 2020-05-04 12:13:04 -0700 | [diff] [blame] | 123 | ":emscripten": COMMON_SRCS + EMSCRIPTEN_SRCS, |
Marat Dukhan | 08c4a43 | 2019-10-03 09:29:21 -0700 | [diff] [blame] | 124 | }), |
Marat Dukhan | 10a3808 | 2020-04-17 03:58:35 -0700 | [diff] [blame] | 125 | copts = select({ |
| 126 | ":windows_x86_64": [], |
| 127 | "//conditions:default": C99OPTS, |
| 128 | }) + [ |
Marat Dukhan | 08c4a43 | 2019-10-03 09:29:21 -0700 | [diff] [blame] | 129 | "-Iexternal/cpuinfo/include", |
| 130 | "-Iexternal/cpuinfo/src", |
| 131 | ], |
| 132 | linkstatic = True, |
| 133 | # Headers must be in textual_hdrs to allow us to set the standard to C99 |
| 134 | textual_hdrs = [ |
| 135 | "include/cpuinfo.h", |
| 136 | "src/linux/api.h", |
| 137 | "src/mach/api.h", |
| 138 | "src/cpuinfo/common.h", |
| 139 | "src/cpuinfo/internal-api.h", |
| 140 | "src/cpuinfo/log.h", |
| 141 | "src/cpuinfo/utils.h", |
| 142 | "src/x86/api.h", |
| 143 | "src/x86/cpuid.h", |
| 144 | "src/x86/linux/api.h", |
| 145 | "src/arm/android/api.h", |
| 146 | "src/arm/linux/api.h", |
| 147 | "src/arm/linux/cp.h", |
| 148 | "src/arm/api.h", |
| 149 | "src/arm/midr.h", |
| 150 | ], |
| 151 | deps = [ |
| 152 | "@clog", |
| 153 | ], |
| 154 | ) |
| 155 | |
| 156 | cc_library( |
| 157 | name = "cpuinfo", |
| 158 | hdrs = [ |
| 159 | "include/cpuinfo.h", |
| 160 | ], |
| 161 | strip_include_prefix = "include", |
| 162 | deps = [ |
| 163 | ":cpuinfo_impl", |
| 164 | ], |
| 165 | ) |
| 166 | |
| 167 | ############################# Build configurations ############################# |
| 168 | |
| 169 | config_setting( |
| 170 | name = "linux_x86_64", |
| 171 | values = {"cpu": "k8"}, |
Marat Dukhan | 91eb942 | 2020-03-24 00:17:11 -0700 | [diff] [blame] | 172 | ) |
| 173 | |
| 174 | config_setting( |
Marat Dukhan | 8fa6610 | 2020-04-30 16:56:45 -0700 | [diff] [blame] | 175 | name = "linux_arm", |
| 176 | values = {"cpu": "arm"}, |
| 177 | ) |
| 178 | |
| 179 | config_setting( |
Marat Dukhan | f0bd4de | 2020-06-15 15:53:19 -0700 | [diff] [blame] | 180 | name = "linux_armeabi", |
| 181 | values = {"cpu": "armeabi"}, |
| 182 | ) |
| 183 | |
| 184 | config_setting( |
Marat Dukhan | 8fa6610 | 2020-04-30 16:56:45 -0700 | [diff] [blame] | 185 | name = "linux_armhf", |
| 186 | values = {"cpu": "armhf"}, |
| 187 | ) |
| 188 | |
| 189 | config_setting( |
Marat Dukhan | a720e93 | 2020-06-10 13:01:11 -0700 | [diff] [blame] | 190 | name = "linux_armv7a", |
| 191 | values = {"cpu": "armv7a"}, |
| 192 | ) |
| 193 | |
| 194 | config_setting( |
Marat Dukhan | 91eb942 | 2020-03-24 00:17:11 -0700 | [diff] [blame] | 195 | name = "linux_aarch64", |
| 196 | values = {"cpu": "aarch64"}, |
Marat Dukhan | 08c4a43 | 2019-10-03 09:29:21 -0700 | [diff] [blame] | 197 | ) |
| 198 | |
| 199 | config_setting( |
Marat Dukhan | 885ca24 | 2019-10-07 09:17:32 -0700 | [diff] [blame] | 200 | name = "macos_x86_64", |
| 201 | values = { |
| 202 | "apple_platform_type": "macos", |
| 203 | "cpu": "darwin", |
| 204 | }, |
| 205 | ) |
| 206 | |
| 207 | config_setting( |
Simon Maurer | 2de19cd | 2021-03-03 14:20:21 +0100 | [diff] [blame] | 208 | name = "macos_arm64", |
| 209 | values = { |
| 210 | "apple_platform_type": "macos", |
| 211 | "cpu": "darwin_arm64", |
| 212 | }, |
| 213 | ) |
| 214 | |
| 215 | config_setting( |
Marat Dukhan | 10a3808 | 2020-04-17 03:58:35 -0700 | [diff] [blame] | 216 | name = "windows_x86_64", |
| 217 | values = {"cpu": "x64_windows"}, |
| 218 | ) |
| 219 | |
| 220 | config_setting( |
Marat Dukhan | 08c4a43 | 2019-10-03 09:29:21 -0700 | [diff] [blame] | 221 | name = "android_armv7", |
| 222 | values = { |
| 223 | "crosstool_top": "//external:android/crosstool", |
| 224 | "cpu": "armeabi-v7a", |
| 225 | }, |
| 226 | visibility = ["//visibility:public"], |
| 227 | ) |
| 228 | |
| 229 | config_setting( |
| 230 | name = "android_arm64", |
| 231 | values = { |
| 232 | "crosstool_top": "//external:android/crosstool", |
| 233 | "cpu": "arm64-v8a", |
| 234 | }, |
| 235 | visibility = ["//visibility:public"], |
| 236 | ) |
| 237 | |
| 238 | config_setting( |
| 239 | name = "android_x86", |
| 240 | values = { |
| 241 | "crosstool_top": "//external:android/crosstool", |
| 242 | "cpu": "x86", |
| 243 | }, |
| 244 | visibility = ["//visibility:public"], |
| 245 | ) |
| 246 | |
| 247 | config_setting( |
| 248 | name = "android_x86_64", |
| 249 | values = { |
| 250 | "crosstool_top": "//external:android/crosstool", |
| 251 | "cpu": "x86_64", |
| 252 | }, |
| 253 | visibility = ["//visibility:public"], |
| 254 | ) |
| 255 | |
| 256 | config_setting( |
Marat Dukhan | 1498d1d | 2020-02-11 20:00:05 -0800 | [diff] [blame] | 257 | name = "ios_armv7", |
| 258 | values = { |
Marat Dukhan | f85fc33 | 2020-02-13 00:05:20 -0800 | [diff] [blame] | 259 | "apple_platform_type": "ios", |
Marat Dukhan | 1498d1d | 2020-02-11 20:00:05 -0800 | [diff] [blame] | 260 | "cpu": "ios_armv7", |
| 261 | }, |
| 262 | ) |
| 263 | |
| 264 | config_setting( |
| 265 | name = "ios_arm64", |
| 266 | values = { |
Marat Dukhan | f85fc33 | 2020-02-13 00:05:20 -0800 | [diff] [blame] | 267 | "apple_platform_type": "ios", |
Marat Dukhan | 1498d1d | 2020-02-11 20:00:05 -0800 | [diff] [blame] | 268 | "cpu": "ios_arm64", |
| 269 | }, |
| 270 | ) |
| 271 | |
| 272 | config_setting( |
| 273 | name = "ios_arm64e", |
| 274 | values = { |
Marat Dukhan | f85fc33 | 2020-02-13 00:05:20 -0800 | [diff] [blame] | 275 | "apple_platform_type": "ios", |
Marat Dukhan | 1498d1d | 2020-02-11 20:00:05 -0800 | [diff] [blame] | 276 | "cpu": "ios_arm64e", |
| 277 | }, |
| 278 | ) |
| 279 | |
| 280 | config_setting( |
| 281 | name = "ios_x86", |
| 282 | values = { |
Marat Dukhan | f85fc33 | 2020-02-13 00:05:20 -0800 | [diff] [blame] | 283 | "apple_platform_type": "ios", |
Marat Dukhan | 1498d1d | 2020-02-11 20:00:05 -0800 | [diff] [blame] | 284 | "cpu": "ios_i386", |
| 285 | }, |
| 286 | ) |
| 287 | |
| 288 | config_setting( |
| 289 | name = "ios_x86_64", |
| 290 | values = { |
Marat Dukhan | f85fc33 | 2020-02-13 00:05:20 -0800 | [diff] [blame] | 291 | "apple_platform_type": "ios", |
Marat Dukhan | 1498d1d | 2020-02-11 20:00:05 -0800 | [diff] [blame] | 292 | "cpu": "ios_x86_64", |
| 293 | }, |
| 294 | ) |
| 295 | |
| 296 | config_setting( |
| 297 | name = "watchos_armv7k", |
| 298 | values = { |
Marat Dukhan | f85fc33 | 2020-02-13 00:05:20 -0800 | [diff] [blame] | 299 | "apple_platform_type": "watchos", |
Marat Dukhan | 1498d1d | 2020-02-11 20:00:05 -0800 | [diff] [blame] | 300 | "cpu": "watchos_armv7k", |
| 301 | }, |
| 302 | ) |
| 303 | |
| 304 | config_setting( |
| 305 | name = "watchos_arm64_32", |
| 306 | values = { |
Marat Dukhan | f85fc33 | 2020-02-13 00:05:20 -0800 | [diff] [blame] | 307 | "apple_platform_type": "watchos", |
Marat Dukhan | 1498d1d | 2020-02-11 20:00:05 -0800 | [diff] [blame] | 308 | "cpu": "watchos_arm64_32", |
| 309 | }, |
| 310 | ) |
| 311 | |
| 312 | config_setting( |
| 313 | name = "watchos_x86", |
| 314 | values = { |
Marat Dukhan | f85fc33 | 2020-02-13 00:05:20 -0800 | [diff] [blame] | 315 | "apple_platform_type": "watchos", |
Marat Dukhan | 1498d1d | 2020-02-11 20:00:05 -0800 | [diff] [blame] | 316 | "cpu": "watchos_i386", |
| 317 | }, |
| 318 | ) |
| 319 | |
| 320 | config_setting( |
| 321 | name = "watchos_x86_64", |
| 322 | values = { |
Marat Dukhan | f85fc33 | 2020-02-13 00:05:20 -0800 | [diff] [blame] | 323 | "apple_platform_type": "watchos", |
Marat Dukhan | 1498d1d | 2020-02-11 20:00:05 -0800 | [diff] [blame] | 324 | "cpu": "watchos_x86_64", |
| 325 | }, |
| 326 | ) |
| 327 | |
| 328 | config_setting( |
| 329 | name = "tvos_arm64", |
| 330 | values = { |
Marat Dukhan | f85fc33 | 2020-02-13 00:05:20 -0800 | [diff] [blame] | 331 | "apple_platform_type": "tvos", |
Marat Dukhan | 1498d1d | 2020-02-11 20:00:05 -0800 | [diff] [blame] | 332 | "cpu": "tvos_arm64", |
| 333 | }, |
| 334 | ) |
| 335 | |
| 336 | config_setting( |
| 337 | name = "tvos_x86_64", |
| 338 | values = { |
Marat Dukhan | f85fc33 | 2020-02-13 00:05:20 -0800 | [diff] [blame] | 339 | "apple_platform_type": "tvos", |
Marat Dukhan | 1498d1d | 2020-02-11 20:00:05 -0800 | [diff] [blame] | 340 | "cpu": "tvos_x86_64", |
| 341 | }, |
| 342 | ) |
| 343 | |
| 344 | config_setting( |
Marat Dukhan | a7d7c11 | 2020-05-04 12:13:04 -0700 | [diff] [blame] | 345 | name = "emscripten", |
| 346 | values = {"crosstool_top": "//toolchain:emscripten"}, |
Marat Dukhan | 08c4a43 | 2019-10-03 09:29:21 -0700 | [diff] [blame] | 347 | ) |