xref: /aosp_15_r20/external/bcc/libbpf-tools/Android.bp (revision 387f9dfdfa2baef462e92476d413c7bc2470293e)
1//
2// Copyright (C) 2022 The Android Open Source Project
3//
4// Licensed under the Apache License, Version 2.0 (the "License");
5// you may not use this file except in compliance with the License.
6// You may obtain a copy of the License at
7//
8//      http://www.apache.org/licenses/LICENSE-2.0
9//
10// Unless required by applicable law or agreed to in writing, software
11// distributed under the License is distributed on an "AS IS" BASIS,
12// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13// See the License for the specific language governing permissions and
14// limitations under the License.
15//
16
17package {
18    // See: http://go/android-license-faq
19    // A large-scale-change added 'default_applicable_licenses' to import
20    // all of the 'license_kinds' from "external_bcc_license"
21    // to get the below license kinds:
22    //   SPDX-license-identifier-Apache-2.0
23    //   SPDX-license-identifier-GPL-2.0
24    default_applicable_licenses: ["external_bcc_license"],
25}
26
27cc_defaults {
28    name: "bcc_bpf_defaults",
29    compile_multilib: "first",
30
31    // Pinned to pre-C23 because of bool/false/true #defines in "vmlinux.h".
32    c_std: "gnu17",
33
34    cflags: [
35        "-fno-data-sections",
36        "-fno-function-sections",
37        "-fno-stack-protector",
38        "-fno-unwind-tables",
39        "-mcpu=generic",
40        "-Wno-pointer-arith",
41        "-Wno-unused-command-line-argument",
42        "-Wno-unused-parameter",
43        "-mllvm -bpf-stack-size=1024",
44        "-g",
45    ],
46    generated_headers: ["libbpf_headers"],
47    arch: {
48        arm: {
49            local_include_dirs: ["arm64"],
50            cflags: [
51                "-D__TARGET_ARCH_arm64",
52            ],
53        },
54        arm64: {
55            local_include_dirs: ["arm64"],
56            cflags: [
57                "-D__TARGET_ARCH_arm64",
58            ],
59        },
60        x86: {
61            local_include_dirs: ["x86"],
62            cflags: [
63                "-D__TARGET_ARCH_x86"
64            ],
65        },
66        x86_64: {
67            local_include_dirs: ["x86"],
68            cflags: [
69                "-D__TARGET_ARCH_x86"
70            ],
71        },
72    },
73    bpf_target: true,
74    visibility: ["//visibility:private"],
75}
76
77genrule_defaults {
78    name: "bpf_skeleton_hdr_defaults",
79    tools: ["bpftool"],
80    cmd: "$(location bpftool) gen skeleton $(in) > $(out)",
81    visibility: ["//visibility:private"],
82    arch: {
83        arm: {
84            enabled: false,
85        },
86        x86: {
87            enabled: false,
88        },
89    },
90}
91
92cc_defaults {
93    name: "bcc_binary_defaults",
94    defaults: ["elfutils_transitive_defaults"],
95    generated_headers: [
96        "libbpf_headers",
97    ],
98    local_include_dirs: [
99        "android",
100    ],
101    srcs: [
102        "android/argp.cpp",
103        "trace_helpers.c",
104        "btf_helpers.c",
105    ],
106    static_libs: [
107        "libbpf",
108        "libelf",
109        "libz",
110    ],
111    cflags: [
112        "-Wno-pointer-bool-conversion",
113        "-Wno-pointer-arith",
114        "-Wno-unused-parameter",
115        "-Wno-unused-variable",
116    ],
117    arch: {
118        arm: {
119            enabled: false,
120        },
121        x86: {
122            enabled: false,
123        },
124    },
125}
126
127cc_object {
128    name: "bindsnoop.bpf.o",
129    srcs: ["bindsnoop.bpf.c"],
130    defaults: ["bcc_bpf_defaults"],
131}
132
133cc_genrule {
134    name: "bindsnoop.skel.h",
135    srcs: [":bindsnoop.bpf.o"],
136    out: ["bindsnoop.skel.h"],
137    defaults: ["bpf_skeleton_hdr_defaults"],
138}
139
140cc_binary {
141    name: "bindsnoop",
142    srcs: ["bindsnoop.c"],
143    generated_headers:  ["bindsnoop.skel.h"],
144    defaults: ["bcc_binary_defaults"],
145}
146
147cc_object {
148    name: "cpudist.bpf.o",
149    srcs: ["cpudist.bpf.c"],
150    defaults: ["bcc_bpf_defaults"],
151}
152
153cc_genrule {
154    name: "cpudist.skel.h",
155    srcs: [":cpudist.bpf.o"],
156    out: ["cpudist.skel.h"],
157    defaults: ["bpf_skeleton_hdr_defaults"],
158}
159
160cc_binary {
161    name: "cpudist",
162    srcs: ["cpudist.c"],
163    generated_headers:  ["cpudist.skel.h"],
164    defaults: ["bcc_binary_defaults"],
165}
166
167cc_object {
168    name: "cpufreq.bpf.o",
169    srcs: ["cpufreq.bpf.c"],
170    defaults: ["bcc_bpf_defaults"],
171}
172
173cc_genrule {
174    name: "cpufreq.skel.h",
175    srcs: [":cpufreq.bpf.o"],
176    out: ["cpufreq.skel.h"],
177    defaults: ["bpf_skeleton_hdr_defaults"],
178}
179
180cc_binary {
181    name: "cpufreq",
182    srcs: ["cpufreq.c"],
183    generated_headers:  ["cpufreq.skel.h"],
184    defaults: ["bcc_binary_defaults"],
185}
186
187cc_object {
188    name: "drsnoop.bpf.o",
189    srcs: ["drsnoop.bpf.c"],
190    defaults: ["bcc_bpf_defaults"],
191}
192
193cc_genrule {
194    name: "drsnoop.skel.h",
195    srcs: [":drsnoop.bpf.o"],
196    out: ["drsnoop.skel.h"],
197    defaults: ["bpf_skeleton_hdr_defaults"],
198}
199
200cc_binary {
201    name: "drsnoop",
202    srcs: ["drsnoop.c"],
203    generated_headers:  ["drsnoop.skel.h"],
204    defaults: ["bcc_binary_defaults"],
205}
206
207cc_object {
208    name: "filelife.bpf.o",
209    srcs: ["filelife.bpf.c"],
210    defaults: ["bcc_bpf_defaults"],
211}
212
213cc_genrule {
214    name: "filelife.skel.h",
215    srcs: [":filelife.bpf.o"],
216    out: ["filelife.skel.h"],
217    defaults: ["bpf_skeleton_hdr_defaults"],
218}
219
220cc_binary {
221    name: "filelife",
222    srcs: ["filelife.c"],
223    generated_headers:  ["filelife.skel.h"],
224    defaults: ["bcc_binary_defaults"],
225}
226
227cc_object {
228    name: "filetop.bpf.o",
229    srcs: ["filetop.bpf.c"],
230    defaults: ["bcc_bpf_defaults"],
231}
232
233cc_genrule {
234    name: "filetop.skel.h",
235    srcs: [":filetop.bpf.o"],
236    out: ["filetop.skel.h"],
237    defaults: ["bpf_skeleton_hdr_defaults"],
238}
239
240cc_binary {
241    name: "filetop",
242    srcs: ["filetop.c"],
243    generated_headers:  ["filetop.skel.h"],
244    defaults: ["bcc_binary_defaults"],
245}
246
247cc_object {
248    name: "fsdist.bpf.o",
249    srcs: ["fsdist.bpf.c"],
250    defaults: ["bcc_bpf_defaults"],
251}
252
253cc_genrule {
254    name: "fsdist.skel.h",
255    srcs: [":fsdist.bpf.o"],
256    out: ["fsdist.skel.h"],
257    defaults: ["bpf_skeleton_hdr_defaults"],
258}
259
260cc_binary {
261    name: "fsdist",
262    srcs: ["fsdist.c"],
263    generated_headers:  ["fsdist.skel.h"],
264    defaults: ["bcc_binary_defaults"],
265}
266
267cc_object {
268    name: "fsslower.bpf.o",
269    srcs: ["fsslower.bpf.c"],
270    defaults: ["bcc_bpf_defaults"],
271}
272
273cc_genrule {
274    name: "fsslower.skel.h",
275    srcs: [":fsslower.bpf.o"],
276    out: ["fsslower.skel.h"],
277    defaults: ["bpf_skeleton_hdr_defaults"],
278}
279
280cc_binary {
281    name: "fsslower",
282    srcs: ["fsslower.c"],
283    generated_headers:  ["fsslower.skel.h"],
284    defaults: ["bcc_binary_defaults"],
285}
286
287cc_object {
288    name: "funclatency.bpf.o",
289    srcs: ["funclatency.bpf.c"],
290    defaults: ["bcc_bpf_defaults"],
291}
292
293cc_genrule {
294    name: "funclatency.skel.h",
295    srcs: [":funclatency.bpf.o"],
296    out: ["funclatency.skel.h"],
297    defaults: ["bpf_skeleton_hdr_defaults"],
298}
299
300cc_binary {
301    name: "funclatency",
302    srcs: [
303        "funclatency.c",
304        "uprobe_helpers.c",
305    ],
306    generated_headers:  ["funclatency.skel.h"],
307    defaults: ["bcc_binary_defaults"],
308}
309
310cc_object {
311    name: "gethostlatency.bpf.o",
312    srcs: ["gethostlatency.bpf.c"],
313    defaults: ["bcc_bpf_defaults"],
314}
315
316cc_genrule {
317    name: "gethostlatency.skel.h",
318    srcs: [":gethostlatency.bpf.o"],
319    out: ["gethostlatency.skel.h"],
320    defaults: ["bpf_skeleton_hdr_defaults"],
321}
322
323cc_binary {
324    name: "gethostlatency",
325    srcs: [
326        "gethostlatency.c",
327        "uprobe_helpers.c",
328    ],
329    generated_headers: ["gethostlatency.skel.h"],
330    defaults: ["bcc_binary_defaults"],
331}
332
333cc_object {
334    name: "ksnoop.bpf.o",
335    srcs: ["ksnoop.bpf.c"],
336    defaults: ["bcc_bpf_defaults"],
337}
338
339cc_genrule {
340    name: "ksnoop.skel.h",
341    srcs: [":ksnoop.bpf.o"],
342    out: ["ksnoop.skel.h"],
343    defaults: ["bpf_skeleton_hdr_defaults"],
344}
345
346cc_binary {
347    name: "ksnoop",
348    srcs: ["ksnoop.c"],
349    generated_headers: ["ksnoop.skel.h"],
350    defaults: ["bcc_binary_defaults"],
351}
352
353cc_object {
354    name: "llcstat.bpf.o",
355    srcs: ["llcstat.bpf.c"],
356    defaults: ["bcc_bpf_defaults"],
357}
358
359cc_genrule {
360    name: "llcstat.skel.h",
361    srcs: [":llcstat.bpf.o"],
362    out: ["llcstat.skel.h"],
363    defaults: ["bpf_skeleton_hdr_defaults"],
364}
365
366cc_binary {
367    name: "llcstat",
368    srcs: ["llcstat.c"],
369    generated_headers:  ["llcstat.skel.h"],
370    defaults: ["bcc_binary_defaults"],
371}
372
373cc_object {
374    name: "offcputime.bpf.o",
375    srcs: ["offcputime.bpf.c"],
376    defaults: ["bcc_bpf_defaults"],
377}
378
379cc_genrule {
380    name: "offcputime.skel.h",
381    srcs: [":offcputime.bpf.o"],
382    out: ["offcputime.skel.h"],
383    defaults: ["bpf_skeleton_hdr_defaults"],
384}
385
386cc_binary {
387    name: "offcputime",
388    srcs: [
389        "offcputime.c",
390        "uprobe_helpers.c",
391    ],
392    generated_headers:  ["offcputime.skel.h"],
393    defaults: ["bcc_binary_defaults"],
394}
395
396cc_object {
397    name: "oomkill.bpf.o",
398    srcs: ["oomkill.bpf.c"],
399    defaults: ["bcc_bpf_defaults"],
400}
401
402cc_genrule {
403    name: "oomkill.skel.h",
404    srcs: [":oomkill.bpf.o"],
405    out: ["oomkill.skel.h"],
406    defaults: ["bpf_skeleton_hdr_defaults"],
407}
408
409cc_binary {
410    name: "oomkill",
411    srcs: [
412        "oomkill.c",
413        "compat.c",
414],
415    generated_headers:  ["oomkill.skel.h"],
416    defaults: ["bcc_binary_defaults"],
417}
418
419cc_object {
420    name: "runqlat.bpf.o",
421    srcs: ["runqlat.bpf.c"],
422    defaults: ["bcc_bpf_defaults"],
423}
424
425cc_genrule {
426    name: "runqlat.skel.h",
427    srcs: [":runqlat.bpf.o"],
428    out: ["runqlat.skel.h"],
429    defaults: ["bpf_skeleton_hdr_defaults"],
430}
431
432cc_binary {
433    name: "runqlat",
434    srcs: ["runqlat.c"],
435    generated_headers:  ["runqlat.skel.h"],
436    defaults: ["bcc_binary_defaults"],
437}
438
439cc_object {
440    name: "runqlen.bpf.o",
441    srcs: ["runqlen.bpf.c"],
442    defaults: ["bcc_bpf_defaults"],
443}
444
445cc_genrule {
446    name: "runqlen.skel.h",
447    srcs: [":runqlen.bpf.o"],
448    out: ["runqlen.skel.h"],
449    defaults: ["bpf_skeleton_hdr_defaults"],
450}
451
452cc_binary {
453    name: "runqlen",
454    srcs: ["runqlen.c"],
455    generated_headers:  ["runqlen.skel.h"],
456    defaults: ["bcc_binary_defaults"],
457}
458
459cc_object {
460    name: "runqslower.bpf.o",
461    srcs: ["runqslower.bpf.c"],
462    defaults: ["bcc_bpf_defaults"],
463}
464
465cc_genrule {
466    name: "runqslower.skel.h",
467    srcs: [":runqslower.bpf.o"],
468    out: ["runqslower.skel.h"],
469    defaults: ["bpf_skeleton_hdr_defaults"],
470}
471
472cc_binary {
473    name: "runqslower",
474    srcs: ["runqslower.c"],
475    generated_headers:  ["runqslower.skel.h"],
476    defaults: ["bcc_binary_defaults"],
477}
478
479cc_object {
480    name: "softirqs.bpf.o",
481    srcs: ["softirqs.bpf.c"],
482    defaults: ["bcc_bpf_defaults"],
483}
484
485cc_genrule {
486    name: "softirqs.skel.h",
487    srcs: [":softirqs.bpf.o"],
488    out: ["softirqs.skel.h"],
489    defaults: ["bpf_skeleton_hdr_defaults"],
490}
491
492cc_binary {
493    name: "softirqs",
494    srcs: ["softirqs.c"],
495    generated_headers:  ["softirqs.skel.h"],
496    defaults: ["bcc_binary_defaults"],
497}
498
499cc_object {
500    name: "solisten.bpf.o",
501    srcs: ["solisten.bpf.c"],
502    defaults: ["bcc_bpf_defaults"],
503}
504
505cc_genrule {
506    name: "solisten.skel.h",
507    srcs: [":solisten.bpf.o"],
508    out: ["solisten.skel.h"],
509    defaults: ["bpf_skeleton_hdr_defaults"],
510}
511
512cc_binary {
513    name: "solisten",
514    srcs: ["solisten.c"],
515    generated_headers:  ["solisten.skel.h"],
516    defaults: ["bcc_binary_defaults"],
517}
518
519//The following targets are temporarily disabled to to b/241472915
520//TODO (b/241472915)
521/*
522cc_object {
523    name: "tcpconnect.bpf.o",
524    srcs: ["tcpconnect.bpf.c"],
525    defaults: ["bcc_bpf_defaults"],
526}
527
528cc_genrule {
529    name: "tcpconnect.skel.h",
530    srcs: [":tcpconnect.bpf.o"],
531    out: ["tcpconnect.skel.h"],
532    defaults: ["bpf_skeleton_hdr_defaults"],
533}
534
535cc_binary {
536    name: "tcpconnect",
537    srcs: [
538        "map_helpers.c",
539        "tcpconnect.c",
540    ],
541    generated_headers:  ["tcpconnect.skel.h"],
542    defaults: ["bcc_binary_defaults"],
543}
544*/
545
546cc_object {
547    name: "tcprtt.bpf.o",
548    srcs: ["tcprtt.bpf.c"],
549    defaults: ["bcc_bpf_defaults"],
550}
551
552cc_genrule {
553    name: "tcprtt.skel.h",
554    srcs: [":tcprtt.bpf.o"],
555    out: ["tcprtt.skel.h"],
556    defaults: ["bpf_skeleton_hdr_defaults"],
557}
558
559cc_binary {
560    name: "tcprtt",
561    srcs: ["tcprtt.c"],
562    generated_headers:  ["tcprtt.skel.h"],
563    defaults: ["bcc_binary_defaults"],
564}
565
566cc_object {
567    name: "vfsstat.bpf.o",
568    srcs: ["vfsstat.bpf.c"],
569    defaults: ["bcc_bpf_defaults"],
570}
571
572cc_genrule {
573    name: "vfsstat.skel.h",
574    srcs: [":vfsstat.bpf.o"],
575    out: ["vfsstat.skel.h"],
576    defaults: ["bpf_skeleton_hdr_defaults"],
577}
578
579cc_binary {
580    name: "vfsstat",
581    srcs: ["vfsstat.c"],
582    generated_headers:  ["vfsstat.skel.h"],
583    defaults: ["bcc_binary_defaults"],
584}
585
586cc_object {
587    name: "biolatency.bpf.o",
588    srcs: ["biolatency.bpf.c"],
589    defaults: ["bcc_bpf_defaults"],
590}
591
592cc_genrule {
593    name: "biolatency.skel.h",
594    srcs: [":biolatency.bpf.o"],
595    out: ["biolatency.skel.h"],
596    defaults: ["bpf_skeleton_hdr_defaults"],
597}
598
599cc_binary {
600    name: "biolatency",
601    srcs: ["biolatency.c"],
602    generated_headers:  ["biolatency.skel.h"],
603    defaults: ["bcc_binary_defaults"],
604}
605
606cc_object {
607    name: "biostacks.bpf.o",
608    srcs: ["biostacks.bpf.c"],
609    defaults: ["bcc_bpf_defaults"],
610}
611
612cc_genrule {
613    name: "biostacks.skel.h",
614    srcs: [":biostacks.bpf.o"],
615    out: ["biostacks.skel.h"],
616    defaults: ["bpf_skeleton_hdr_defaults"],
617}
618
619cc_binary {
620    name: "biostacks",
621    srcs: ["biostacks.c"],
622    generated_headers:  ["biostacks.skel.h"],
623    defaults: ["bcc_binary_defaults"],
624}
625
626cc_object {
627    name: "biosnoop.bpf.o",
628    srcs: ["biosnoop.bpf.c"],
629    defaults: ["bcc_bpf_defaults"],
630}
631
632cc_genrule {
633    name: "biosnoop.skel.h",
634    srcs: [":biosnoop.bpf.o"],
635    out: ["biosnoop.skel.h"],
636    defaults: ["bpf_skeleton_hdr_defaults"],
637}
638
639cc_binary {
640    name: "biosnoop",
641    srcs: ["biosnoop.c"],
642    generated_headers:  ["biosnoop.skel.h"],
643    defaults: ["bcc_binary_defaults"],
644}
645
646// The following tools viz. exitsnoop, biopattern and bitesize
647// will not work on Android without this libbpf patch:
648//
649// https://lore.kernel.org/bpf/[email protected]/T/#u
650//
651// The patch is trivial but important as it looks for tracepoints under /sys/kernel/tracing
652// as there is no debugfs on Android.
653//
654// Additionally, any new tools which depend on kernel static tracepoints should
655// have this libbpf patch.
656
657cc_object {
658    name: "exitsnoop.bpf.o",
659    srcs: ["exitsnoop.bpf.c"],
660    defaults: ["bcc_bpf_defaults"],
661}
662
663cc_genrule {
664    name: "exitsnoop.skel.h",
665    srcs: [":exitsnoop.bpf.o"],
666    out: ["exitsnoop.skel.h"],
667    defaults: ["bpf_skeleton_hdr_defaults"],
668}
669
670cc_binary {
671    name: "exitsnoop",
672    srcs: ["exitsnoop.c"],
673    generated_headers:  ["exitsnoop.skel.h"],
674    defaults: ["bcc_binary_defaults"],
675}
676
677cc_object {
678    name: "biopattern.bpf.o",
679    srcs: ["biopattern.bpf.c"],
680    defaults: ["bcc_bpf_defaults"],
681}
682
683cc_genrule {
684    name: "biopattern.skel.h",
685    srcs: [":biopattern.bpf.o"],
686    out: ["biopattern.skel.h"],
687    defaults: ["bpf_skeleton_hdr_defaults"],
688}
689
690cc_binary {
691    name: "biopattern",
692    srcs: ["biopattern.c"],
693    generated_headers:  ["biopattern.skel.h"],
694    defaults: ["bcc_binary_defaults"],
695}
696
697cc_object {
698    name: "bitesize.bpf.o",
699    srcs: ["bitesize.bpf.c"],
700    defaults: ["bcc_bpf_defaults"],
701}
702
703cc_genrule {
704    name: "bitesize.skel.h",
705    srcs: [":bitesize.bpf.o"],
706    out: ["bitesize.skel.h"],
707    defaults: ["bpf_skeleton_hdr_defaults"],
708}
709
710cc_binary {
711    name: "bitesize",
712    srcs: ["bitesize.c"],
713    generated_headers:  ["bitesize.skel.h"],
714    defaults: ["bcc_binary_defaults"],
715}
716