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