xref: /aosp_15_r20/external/XNNPACK/third_party/cpuinfo.BUILD (revision 4bdc94577ba0e567308109d787f7fec7b531ce36)
1# 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",
20    "src/cache.c",
21]
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",
45    "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
62LINUX_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,
100        ":linux_arm": COMMON_SRCS + ARM_SRCS + LINUX_SRCS + LINUX_ARM32_SRCS,
101        ":linux_armeabi": COMMON_SRCS + ARM_SRCS + LINUX_SRCS + LINUX_ARM32_SRCS,
102        ":linux_armhf": COMMON_SRCS + ARM_SRCS + LINUX_SRCS + LINUX_ARM32_SRCS,
103        ":linux_armv7a": COMMON_SRCS + ARM_SRCS + LINUX_SRCS + LINUX_ARM32_SRCS,
104        ":linux_aarch64": COMMON_SRCS + ARM_SRCS + LINUX_SRCS + LINUX_ARM64_SRCS,
105        ":macos_x86_64": COMMON_SRCS + X86_SRCS + MACH_SRCS + MACH_X86_SRCS,
106        ":macos_arm64": COMMON_SRCS + MACH_SRCS + MACH_ARM_SRCS,
107        ":windows_x86_64": COMMON_SRCS + X86_SRCS + WINDOWS_X86_SRCS,
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,
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        ":ios_sim_arm64": COMMON_SRCS + MACH_SRCS + MACH_ARM_SRCS,
118        ":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,
124        ":emscripten": COMMON_SRCS + EMSCRIPTEN_SRCS,
125    }),
126    copts = select({
127        ":windows_x86_64": [],
128        "//conditions:default": C99OPTS,
129    }) + [
130        "-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"},
173)
174
175config_setting(
176    name = "linux_arm",
177    values = {"cpu": "arm"},
178)
179
180config_setting(
181    name = "linux_armeabi",
182    values = {"cpu": "armeabi"},
183)
184
185config_setting(
186    name = "linux_armhf",
187    values = {"cpu": "armhf"},
188)
189
190config_setting(
191    name = "linux_armv7a",
192    values = {"cpu": "armv7a"},
193)
194
195config_setting(
196    name = "linux_aarch64",
197    values = {"cpu": "aarch64"},
198)
199
200config_setting(
201    name = "macos_x86_64",
202    values = {
203        "apple_platform_type": "macos",
204        "cpu": "darwin",
205    },
206)
207
208config_setting(
209    name = "macos_arm64",
210    values = {
211        "apple_platform_type": "macos",
212        "cpu": "darwin_arm64",
213    },
214)
215
216config_setting(
217    name = "windows_x86_64",
218    values = {"cpu": "x64_windows"},
219)
220
221config_setting(
222    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(
258    name = "ios_armv7",
259    values = {
260        "apple_platform_type": "ios",
261        "cpu": "ios_armv7",
262    },
263)
264
265config_setting(
266    name = "ios_arm64",
267    values = {
268        "apple_platform_type": "ios",
269        "cpu": "ios_arm64",
270    },
271)
272
273config_setting(
274    name = "ios_arm64e",
275    values = {
276        "apple_platform_type": "ios",
277        "cpu": "ios_arm64e",
278    },
279)
280
281config_setting(
282    name = "ios_sim_arm64",
283    values = {
284        "apple_platform_type": "ios",
285        "cpu": "ios_sim_arm64",
286    },
287)
288
289config_setting(
290    name = "ios_x86",
291    values = {
292        "apple_platform_type": "ios",
293        "cpu": "ios_i386",
294    },
295)
296
297config_setting(
298    name = "ios_x86_64",
299    values = {
300        "apple_platform_type": "ios",
301        "cpu": "ios_x86_64",
302    },
303)
304
305config_setting(
306    name = "watchos_armv7k",
307    values = {
308        "apple_platform_type": "watchos",
309        "cpu": "watchos_armv7k",
310    },
311)
312
313config_setting(
314    name = "watchos_arm64_32",
315    values = {
316        "apple_platform_type": "watchos",
317        "cpu": "watchos_arm64_32",
318    },
319)
320
321config_setting(
322    name = "watchos_x86",
323    values = {
324        "apple_platform_type": "watchos",
325        "cpu": "watchos_i386",
326    },
327)
328
329config_setting(
330    name = "watchos_x86_64",
331    values = {
332        "apple_platform_type": "watchos",
333        "cpu": "watchos_x86_64",
334    },
335)
336
337config_setting(
338    name = "tvos_arm64",
339    values = {
340        "apple_platform_type": "tvos",
341        "cpu": "tvos_arm64",
342    },
343)
344
345config_setting(
346    name = "tvos_x86_64",
347    values = {
348        "apple_platform_type": "tvos",
349        "cpu": "tvos_x86_64",
350    },
351)
352
353config_setting(
354    name = "emscripten",
355    values = {"crosstool_top": "//toolchain:emscripten"},
356)
357