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