blob: 128d683ea13f7a8057d51ef43a668b070029b3f0 [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,
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 Dukhana7d7c112020-05-04 12:13:04 -0700123 ":emscripten": COMMON_SRCS + EMSCRIPTEN_SRCS,
Marat Dukhan08c4a432019-10-03 09:29:21 -0700124 }),
Marat Dukhan10a38082020-04-17 03:58:35 -0700125 copts = select({
126 ":windows_x86_64": [],
127 "//conditions:default": C99OPTS,
128 }) + [
Marat Dukhan08c4a432019-10-03 09:29:21 -0700129 "-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
156cc_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
169config_setting(
170 name = "linux_x86_64",
171 values = {"cpu": "k8"},
Marat Dukhan91eb9422020-03-24 00:17:11 -0700172)
173
174config_setting(
Marat Dukhan8fa66102020-04-30 16:56:45 -0700175 name = "linux_arm",
176 values = {"cpu": "arm"},
177)
178
179config_setting(
Marat Dukhanf0bd4de2020-06-15 15:53:19 -0700180 name = "linux_armeabi",
181 values = {"cpu": "armeabi"},
182)
183
184config_setting(
Marat Dukhan8fa66102020-04-30 16:56:45 -0700185 name = "linux_armhf",
186 values = {"cpu": "armhf"},
187)
188
189config_setting(
Marat Dukhana720e932020-06-10 13:01:11 -0700190 name = "linux_armv7a",
191 values = {"cpu": "armv7a"},
192)
193
194config_setting(
Marat Dukhan91eb9422020-03-24 00:17:11 -0700195 name = "linux_aarch64",
196 values = {"cpu": "aarch64"},
Marat Dukhan08c4a432019-10-03 09:29:21 -0700197)
198
199config_setting(
Marat Dukhan885ca242019-10-07 09:17:32 -0700200 name = "macos_x86_64",
201 values = {
202 "apple_platform_type": "macos",
203 "cpu": "darwin",
204 },
205)
206
207config_setting(
Simon Maurer2de19cd2021-03-03 14:20:21 +0100208 name = "macos_arm64",
209 values = {
210 "apple_platform_type": "macos",
211 "cpu": "darwin_arm64",
212 },
213)
214
215config_setting(
Marat Dukhan10a38082020-04-17 03:58:35 -0700216 name = "windows_x86_64",
217 values = {"cpu": "x64_windows"},
218)
219
220config_setting(
Marat Dukhan08c4a432019-10-03 09:29:21 -0700221 name = "android_armv7",
222 values = {
223 "crosstool_top": "//external:android/crosstool",
224 "cpu": "armeabi-v7a",
225 },
226 visibility = ["//visibility:public"],
227)
228
229config_setting(
230 name = "android_arm64",
231 values = {
232 "crosstool_top": "//external:android/crosstool",
233 "cpu": "arm64-v8a",
234 },
235 visibility = ["//visibility:public"],
236)
237
238config_setting(
239 name = "android_x86",
240 values = {
241 "crosstool_top": "//external:android/crosstool",
242 "cpu": "x86",
243 },
244 visibility = ["//visibility:public"],
245)
246
247config_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
256config_setting(
Marat Dukhan1498d1d2020-02-11 20:00:05 -0800257 name = "ios_armv7",
258 values = {
Marat Dukhanf85fc332020-02-13 00:05:20 -0800259 "apple_platform_type": "ios",
Marat Dukhan1498d1d2020-02-11 20:00:05 -0800260 "cpu": "ios_armv7",
261 },
262)
263
264config_setting(
265 name = "ios_arm64",
266 values = {
Marat Dukhanf85fc332020-02-13 00:05:20 -0800267 "apple_platform_type": "ios",
Marat Dukhan1498d1d2020-02-11 20:00:05 -0800268 "cpu": "ios_arm64",
269 },
270)
271
272config_setting(
273 name = "ios_arm64e",
274 values = {
Marat Dukhanf85fc332020-02-13 00:05:20 -0800275 "apple_platform_type": "ios",
Marat Dukhan1498d1d2020-02-11 20:00:05 -0800276 "cpu": "ios_arm64e",
277 },
278)
279
280config_setting(
281 name = "ios_x86",
282 values = {
Marat Dukhanf85fc332020-02-13 00:05:20 -0800283 "apple_platform_type": "ios",
Marat Dukhan1498d1d2020-02-11 20:00:05 -0800284 "cpu": "ios_i386",
285 },
286)
287
288config_setting(
289 name = "ios_x86_64",
290 values = {
Marat Dukhanf85fc332020-02-13 00:05:20 -0800291 "apple_platform_type": "ios",
Marat Dukhan1498d1d2020-02-11 20:00:05 -0800292 "cpu": "ios_x86_64",
293 },
294)
295
296config_setting(
297 name = "watchos_armv7k",
298 values = {
Marat Dukhanf85fc332020-02-13 00:05:20 -0800299 "apple_platform_type": "watchos",
Marat Dukhan1498d1d2020-02-11 20:00:05 -0800300 "cpu": "watchos_armv7k",
301 },
302)
303
304config_setting(
305 name = "watchos_arm64_32",
306 values = {
Marat Dukhanf85fc332020-02-13 00:05:20 -0800307 "apple_platform_type": "watchos",
Marat Dukhan1498d1d2020-02-11 20:00:05 -0800308 "cpu": "watchos_arm64_32",
309 },
310)
311
312config_setting(
313 name = "watchos_x86",
314 values = {
Marat Dukhanf85fc332020-02-13 00:05:20 -0800315 "apple_platform_type": "watchos",
Marat Dukhan1498d1d2020-02-11 20:00:05 -0800316 "cpu": "watchos_i386",
317 },
318)
319
320config_setting(
321 name = "watchos_x86_64",
322 values = {
Marat Dukhanf85fc332020-02-13 00:05:20 -0800323 "apple_platform_type": "watchos",
Marat Dukhan1498d1d2020-02-11 20:00:05 -0800324 "cpu": "watchos_x86_64",
325 },
326)
327
328config_setting(
329 name = "tvos_arm64",
330 values = {
Marat Dukhanf85fc332020-02-13 00:05:20 -0800331 "apple_platform_type": "tvos",
Marat Dukhan1498d1d2020-02-11 20:00:05 -0800332 "cpu": "tvos_arm64",
333 },
334)
335
336config_setting(
337 name = "tvos_x86_64",
338 values = {
Marat Dukhanf85fc332020-02-13 00:05:20 -0800339 "apple_platform_type": "tvos",
Marat Dukhan1498d1d2020-02-11 20:00:05 -0800340 "cpu": "tvos_x86_64",
341 },
342)
343
344config_setting(
Marat Dukhana7d7c112020-05-04 12:13:04 -0700345 name = "emscripten",
346 values = {"crosstool_top": "//toolchain:emscripten"},
Marat Dukhan08c4a432019-10-03 09:29:21 -0700347)