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