blob: 1997f4e3a73d2b68ae76a847d2c6c35d9a595a26 [file] [log] [blame]
Marat Dukhan08c4a432019-10-03 09:29:21 -07001# 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",
Marat Dukhan1f5d9bc2020-01-02 09:11:16 -080020 "src/cache.c",
Marat Dukhan08c4a432019-10-03 09:29:21 -070021]
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",
Marat Dukhan08c4a432019-10-03 09:29:21 -070045 "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
Marat Dukhan08c4a432019-10-03 09:29:21 -070062LINUX_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
96cc_library(
97 name = "cpuinfo_impl",
98 srcs = select({
99 ":linux_x86_64": COMMON_SRCS + X86_SRCS + LINUX_SRCS + LINUX_X86_SRCS,
Marat Dukhan8fa66102020-04-30 16:56:45 -0700100 ":linux_arm": COMMON_SRCS + ARM_SRCS + LINUX_SRCS + LINUX_ARM32_SRCS,
Marat Dukhanf0bd4de2020-06-15 15:53:19 -0700101 ":linux_armeabi": COMMON_SRCS + ARM_SRCS + LINUX_SRCS + LINUX_ARM32_SRCS,
Marat Dukhan8fa66102020-04-30 16:56:45 -0700102 ":linux_armhf": COMMON_SRCS + ARM_SRCS + LINUX_SRCS + LINUX_ARM32_SRCS,
Marat Dukhana720e932020-06-10 13:01:11 -0700103 ":linux_armv7a": COMMON_SRCS + ARM_SRCS + LINUX_SRCS + LINUX_ARM32_SRCS,
Marat Dukhan91eb9422020-03-24 00:17:11 -0700104 ":linux_aarch64": COMMON_SRCS + ARM_SRCS + LINUX_SRCS + LINUX_ARM64_SRCS,
Marat Dukhan885ca242019-10-07 09:17:32 -0700105 ":macos_x86_64": COMMON_SRCS + X86_SRCS + MACH_SRCS + MACH_X86_SRCS,
Simon Maurer2de19cd2021-03-03 14:20:21 +0100106 ":macos_arm64": COMMON_SRCS + MACH_SRCS + MACH_ARM_SRCS,
Marat Dukhan10a38082020-04-17 03:58:35 -0700107 ":windows_x86_64": COMMON_SRCS + X86_SRCS + WINDOWS_X86_SRCS,
Marat Dukhan08c4a432019-10-03 09:29:21 -0700108 ":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 Dukhan1498d1d2020-02-11 20:00:05 -0800112 ":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,
XNNPACK Team708874b2022-01-24 13:55:04 -0800117 ":ios_sim_arm64": COMMON_SRCS + MACH_SRCS + MACH_ARM_SRCS,
Marat Dukhan1498d1d2020-02-11 20:00:05 -0800118 ":watchos_x86_64": COMMON_SRCS + X86_SRCS + MACH_SRCS + MACH_X86_SRCS,
119 ":watchos_x86": COMMON_SRCS + X86_SRCS + MACH_SRCS + MACH_X86_SRCS,
120 ":watchos_armv7k": COMMON_SRCS + MACH_SRCS + MACH_ARM_SRCS,
121 ":watchos_arm64_32": COMMON_SRCS + MACH_SRCS + MACH_ARM_SRCS,
122 ":tvos_x86_64": COMMON_SRCS + X86_SRCS + MACH_SRCS + MACH_X86_SRCS,
123 ":tvos_arm64": COMMON_SRCS + MACH_SRCS + MACH_ARM_SRCS,
Marat Dukhana7d7c112020-05-04 12:13:04 -0700124 ":emscripten": COMMON_SRCS + EMSCRIPTEN_SRCS,
Marat Dukhan08c4a432019-10-03 09:29:21 -0700125 }),
Marat Dukhan10a38082020-04-17 03:58:35 -0700126 copts = select({
127 ":windows_x86_64": [],
128 "//conditions:default": C99OPTS,
129 }) + [
Marat Dukhan08c4a432019-10-03 09:29:21 -0700130 "-Iexternal/cpuinfo/include",
131 "-Iexternal/cpuinfo/src",
132 ],
133 linkstatic = True,
134 # Headers must be in textual_hdrs to allow us to set the standard to C99
135 textual_hdrs = [
136 "include/cpuinfo.h",
137 "src/linux/api.h",
138 "src/mach/api.h",
139 "src/cpuinfo/common.h",
140 "src/cpuinfo/internal-api.h",
141 "src/cpuinfo/log.h",
142 "src/cpuinfo/utils.h",
143 "src/x86/api.h",
144 "src/x86/cpuid.h",
145 "src/x86/linux/api.h",
146 "src/arm/android/api.h",
147 "src/arm/linux/api.h",
148 "src/arm/linux/cp.h",
149 "src/arm/api.h",
150 "src/arm/midr.h",
151 ],
152 deps = [
153 "@clog",
154 ],
155)
156
157cc_library(
158 name = "cpuinfo",
159 hdrs = [
160 "include/cpuinfo.h",
161 ],
162 strip_include_prefix = "include",
163 deps = [
164 ":cpuinfo_impl",
165 ],
166)
167
168############################# Build configurations #############################
169
170config_setting(
171 name = "linux_x86_64",
172 values = {"cpu": "k8"},
Marat Dukhan91eb9422020-03-24 00:17:11 -0700173)
174
175config_setting(
Marat Dukhan8fa66102020-04-30 16:56:45 -0700176 name = "linux_arm",
177 values = {"cpu": "arm"},
178)
179
180config_setting(
Marat Dukhanf0bd4de2020-06-15 15:53:19 -0700181 name = "linux_armeabi",
182 values = {"cpu": "armeabi"},
183)
184
185config_setting(
Marat Dukhan8fa66102020-04-30 16:56:45 -0700186 name = "linux_armhf",
187 values = {"cpu": "armhf"},
188)
189
190config_setting(
Marat Dukhana720e932020-06-10 13:01:11 -0700191 name = "linux_armv7a",
192 values = {"cpu": "armv7a"},
193)
194
195config_setting(
Marat Dukhan91eb9422020-03-24 00:17:11 -0700196 name = "linux_aarch64",
197 values = {"cpu": "aarch64"},
Marat Dukhan08c4a432019-10-03 09:29:21 -0700198)
199
200config_setting(
Marat Dukhan885ca242019-10-07 09:17:32 -0700201 name = "macos_x86_64",
202 values = {
203 "apple_platform_type": "macos",
204 "cpu": "darwin",
205 },
206)
207
208config_setting(
Simon Maurer2de19cd2021-03-03 14:20:21 +0100209 name = "macos_arm64",
210 values = {
211 "apple_platform_type": "macos",
212 "cpu": "darwin_arm64",
213 },
214)
215
216config_setting(
Marat Dukhan10a38082020-04-17 03:58:35 -0700217 name = "windows_x86_64",
218 values = {"cpu": "x64_windows"},
219)
220
221config_setting(
Marat Dukhan08c4a432019-10-03 09:29:21 -0700222 name = "android_armv7",
223 values = {
224 "crosstool_top": "//external:android/crosstool",
225 "cpu": "armeabi-v7a",
226 },
227 visibility = ["//visibility:public"],
228)
229
230config_setting(
231 name = "android_arm64",
232 values = {
233 "crosstool_top": "//external:android/crosstool",
234 "cpu": "arm64-v8a",
235 },
236 visibility = ["//visibility:public"],
237)
238
239config_setting(
240 name = "android_x86",
241 values = {
242 "crosstool_top": "//external:android/crosstool",
243 "cpu": "x86",
244 },
245 visibility = ["//visibility:public"],
246)
247
248config_setting(
249 name = "android_x86_64",
250 values = {
251 "crosstool_top": "//external:android/crosstool",
252 "cpu": "x86_64",
253 },
254 visibility = ["//visibility:public"],
255)
256
257config_setting(
Marat Dukhan1498d1d2020-02-11 20:00:05 -0800258 name = "ios_armv7",
259 values = {
Marat Dukhanf85fc332020-02-13 00:05:20 -0800260 "apple_platform_type": "ios",
Marat Dukhan1498d1d2020-02-11 20:00:05 -0800261 "cpu": "ios_armv7",
262 },
263)
264
265config_setting(
266 name = "ios_arm64",
267 values = {
Marat Dukhanf85fc332020-02-13 00:05:20 -0800268 "apple_platform_type": "ios",
Marat Dukhan1498d1d2020-02-11 20:00:05 -0800269 "cpu": "ios_arm64",
270 },
271)
272
273config_setting(
274 name = "ios_arm64e",
275 values = {
Marat Dukhanf85fc332020-02-13 00:05:20 -0800276 "apple_platform_type": "ios",
Marat Dukhan1498d1d2020-02-11 20:00:05 -0800277 "cpu": "ios_arm64e",
278 },
279)
280
281config_setting(
XNNPACK Team708874b2022-01-24 13:55:04 -0800282 name = "ios_sim_arm64",
283 values = {
284 "apple_platform_type": "ios",
285 "cpu": "ios_sim_arm64",
286 },
287)
288
289config_setting(
Marat Dukhan1498d1d2020-02-11 20:00:05 -0800290 name = "ios_x86",
291 values = {
Marat Dukhanf85fc332020-02-13 00:05:20 -0800292 "apple_platform_type": "ios",
Marat Dukhan1498d1d2020-02-11 20:00:05 -0800293 "cpu": "ios_i386",
294 },
295)
296
297config_setting(
298 name = "ios_x86_64",
299 values = {
Marat Dukhanf85fc332020-02-13 00:05:20 -0800300 "apple_platform_type": "ios",
Marat Dukhan1498d1d2020-02-11 20:00:05 -0800301 "cpu": "ios_x86_64",
302 },
303)
304
305config_setting(
306 name = "watchos_armv7k",
307 values = {
Marat Dukhanf85fc332020-02-13 00:05:20 -0800308 "apple_platform_type": "watchos",
Marat Dukhan1498d1d2020-02-11 20:00:05 -0800309 "cpu": "watchos_armv7k",
310 },
311)
312
313config_setting(
314 name = "watchos_arm64_32",
315 values = {
Marat Dukhanf85fc332020-02-13 00:05:20 -0800316 "apple_platform_type": "watchos",
Marat Dukhan1498d1d2020-02-11 20:00:05 -0800317 "cpu": "watchos_arm64_32",
318 },
319)
320
321config_setting(
322 name = "watchos_x86",
323 values = {
Marat Dukhanf85fc332020-02-13 00:05:20 -0800324 "apple_platform_type": "watchos",
Marat Dukhan1498d1d2020-02-11 20:00:05 -0800325 "cpu": "watchos_i386",
326 },
327)
328
329config_setting(
330 name = "watchos_x86_64",
331 values = {
Marat Dukhanf85fc332020-02-13 00:05:20 -0800332 "apple_platform_type": "watchos",
Marat Dukhan1498d1d2020-02-11 20:00:05 -0800333 "cpu": "watchos_x86_64",
334 },
335)
336
337config_setting(
338 name = "tvos_arm64",
339 values = {
Marat Dukhanf85fc332020-02-13 00:05:20 -0800340 "apple_platform_type": "tvos",
Marat Dukhan1498d1d2020-02-11 20:00:05 -0800341 "cpu": "tvos_arm64",
342 },
343)
344
345config_setting(
346 name = "tvos_x86_64",
347 values = {
Marat Dukhanf85fc332020-02-13 00:05:20 -0800348 "apple_platform_type": "tvos",
Marat Dukhan1498d1d2020-02-11 20:00:05 -0800349 "cpu": "tvos_x86_64",
350 },
351)
352
353config_setting(
Marat Dukhana7d7c112020-05-04 12:13:04 -0700354 name = "emscripten",
355 values = {"crosstool_top": "//toolchain:emscripten"},
Marat Dukhan08c4a432019-10-03 09:29:21 -0700356)