• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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