| // |
| // Copyright (C) 2018 The Android Open Source Project |
| // |
| // Licensed under the Apache License, Version 2.0 (the "License"); |
| // you may not use this file except in compliance with the License. |
| // You may obtain a copy of the License at |
| // |
| // http://www.apache.org/licenses/LICENSE-2.0 |
| // |
| // Unless required by applicable law or agreed to in writing, software |
| // distributed under the License is distributed on an "AS IS" BASIS, |
| // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| // See the License for the specific language governing permissions and |
| // limitations under the License. |
| // |
| |
| package { |
| default_team: "trendy_team_llvm_and_toolchains", |
| default_applicable_licenses: ["system_extras_simpleperf_license"], |
| } |
| |
| // Added automatically by a large-scale-change |
| // See: http://go/android-license-faq |
| license { |
| name: "system_extras_simpleperf_license", |
| visibility: [":__subpackages__"], |
| license_kinds: [ |
| "SPDX-license-identifier-Apache-2.0", |
| ], |
| license_text: [ |
| "NOTICE", |
| ], |
| } |
| |
| cc_defaults { |
| name: "libsimpleperf_readelf_defaults", |
| static_libs: [ |
| "libsimpleperf_readelf", |
| ], |
| target: { |
| linux: { |
| ldflags: ["-Wl,--exclude-libs=libsimpleperf_readelf.a"], |
| }, |
| windows: { |
| host_ldlibs: [ |
| "-lole32", |
| "-luuid", |
| ], |
| }, |
| }, |
| sanitize: { |
| hwaddress: false, |
| }, |
| } |
| |
| cc_defaults { |
| name: "simpleperf_cflags", |
| target: { |
| host: { |
| cflags: [ |
| "-DUSE_BIONIC_UAPI_HEADERS", |
| "-fvisibility=hidden", |
| ], |
| compile_multilib: "64", |
| include_dirs: ["bionic/libc/kernel"], |
| }, |
| darwin: { |
| cflags: ["-DNO_LIBDEXFILE_SUPPORT"], |
| local_include_dirs: ["nonlinux_support/include"], |
| }, |
| windows: { |
| cflags: ["-DNO_LIBDEXFILE_SUPPORT"], |
| local_include_dirs: ["nonlinux_support/include"], |
| }, |
| android: { |
| compile_multilib: "both", |
| }, |
| }, |
| } |
| |
| // linked as a separate library because using OpenCSD headers needs to enable exception |
| cc_library_static { |
| name: "libsimpleperf_etm_decoder", |
| defaults: [ |
| "simpleperf_cflags", |
| "libsimpleperf_readelf_defaults", |
| ], |
| host_supported: true, |
| srcs: ["ETMDecoder.cpp"], |
| cppflags: [ |
| // flags needed to include libopencsd_decoder headers |
| "-Wno-ignored-qualifiers", |
| "-Wno-unused-parameter", |
| "-Wno-switch", |
| "-Wno-unused-private-field", |
| "-Wno-implicit-fallthrough", |
| "-fexceptions", |
| ], |
| rtti: true, |
| static_libs: [ |
| "libopencsd_decoder", |
| "libbase", |
| "liblog", |
| ], |
| target: { |
| windows: { |
| enabled: true, |
| }, |
| }, |
| } |
| |
| // Build regex support in a separate library to catch std::regex_error exception. |
| cc_library_static { |
| name: "libsimpleperf_regex", |
| host_supported: true, |
| srcs: ["RegEx.cpp"], |
| cppflags: ["-fexceptions"], |
| static_libs: ["libbase"], |
| target: { |
| windows: { |
| enabled: true, |
| }, |
| }, |
| } |
| |
| cc_defaults { |
| name: "simpleperf_static_libs", |
| defaults: [ |
| "libsimpleperf_readelf_defaults", |
| "simpleperf_cflags", |
| ], |
| host_supported: true, |
| static_libs: [ |
| "libsimpleperf_etm_decoder", |
| "libsimpleperf_regex", |
| "libbase", |
| "liblog", |
| "liblzma", |
| "libutils", |
| "libprotobuf-cpp-lite", |
| "libopencsd_decoder", |
| "libz", |
| "libziparchive", |
| "libzstd", |
| ], |
| target: { |
| host: { |
| stl: "libc++_static", |
| }, |
| linux: { |
| static_libs: [ |
| "libunwindstack", |
| "libcutils", |
| "libprocinfo", |
| "libevent", |
| "librustc_demangle_static", |
| ], |
| }, |
| windows: { |
| enabled: true, |
| }, |
| }, |
| use_version_lib: true, |
| } |
| |
| cc_defaults { |
| name: "simpleperf_shared_libs", |
| defaults: [ |
| "simpleperf_cflags", |
| "libsimpleperf_readelf_defaults", |
| ], |
| host_supported: true, |
| shared_libs: [ |
| "libbase", |
| "liblog", |
| "liblzma", |
| "libprotobuf-cpp-lite", |
| "libz", |
| "libziparchive", |
| ], |
| static_libs: [ |
| "libsimpleperf_etm_decoder", |
| "libsimpleperf_regex", |
| "libopencsd_decoder", |
| "libzstd", |
| ], |
| target: { |
| linux: { |
| shared_libs: [ |
| "libcutils", |
| "libevent", |
| "libprocinfo", |
| "libunwindstack", |
| ], |
| static_libs: [ |
| "libdexfile_support", |
| "librustc_demangle_static", |
| ], |
| runtime_libs: [ |
| "libdexfile", // libdexfile_support dependency |
| ], |
| }, |
| windows: { |
| enabled: true, |
| }, |
| }, |
| use_version_lib: true, |
| } |
| |
| python_binary_host { |
| name: "event_table_generator", |
| srcs: ["event_table_generator.py"], |
| } |
| |
| genrule { |
| name: "simpleperf_event_table", |
| out: ["event_table.cpp"], |
| srcs: ["event_table.json"], |
| tools: ["event_table_generator"], |
| cmd: "$(location event_table_generator) $(in) $(out)", |
| } |
| |
| cc_defaults { |
| name: "libsimpleperf_srcs", |
| srcs: [ |
| "cmd_dumprecord.cpp", |
| "cmd_help.cpp", |
| "cmd_inject.cpp", |
| "cmd_kmem.cpp", |
| "cmd_merge.cpp", |
| "cmd_report.cpp", |
| "cmd_report_sample.cpp", |
| "cmd_report_sample.proto", |
| "command.cpp", |
| "dso.cpp", |
| "branch_list.proto", |
| "BranchListFile.cpp", |
| "event_attr.cpp", |
| "event_type.cpp", |
| "kallsyms.cpp", |
| "perf_regs.cpp", |
| "read_apk.cpp", |
| "read_elf.cpp", |
| "read_symbol_map.cpp", |
| "record.cpp", |
| "RecordFilter.cpp", |
| "record_file.proto", |
| "record_file_reader.cpp", |
| "record_file_writer.cpp", |
| "report_utils.cpp", |
| "thread_tree.cpp", |
| "tracing.cpp", |
| "utils.cpp", |
| "ZstdUtil.cpp", |
| ":simpleperf_event_table", |
| ], |
| target: { |
| android: { |
| srcs: [ |
| "cmd_boot_record.cpp", |
| ], |
| }, |
| linux: { |
| srcs: [ |
| "CallChainJoiner.cpp", |
| "cmd_api.cpp", |
| "cmd_debug_unwind.cpp", |
| "cmd_list.cpp", |
| "cmd_monitor.cpp", |
| "cmd_record.cpp", |
| "cmd_stat.cpp", |
| "cmd_trace_sched.cpp", |
| "environment.cpp", |
| "ETMRecorder.cpp", |
| "event_fd.cpp", |
| "event_selection_set.cpp", |
| "IOEventLoop.cpp", |
| "JITDebugReader.cpp", |
| "MapRecordReader.cpp", |
| "OfflineUnwinder.cpp", |
| "ProbeEvents.cpp", |
| "read_dex_file.cpp", |
| "RecordReadThread.cpp", |
| "workload.cpp", |
| ], |
| }, |
| darwin: { |
| srcs: ["nonlinux_support/nonlinux_support.cpp"], |
| }, |
| windows: { |
| srcs: ["nonlinux_support/nonlinux_support.cpp"], |
| }, |
| }, |
| } |
| |
| cc_library_static { |
| name: "libsimpleperf", |
| defaults: [ |
| "libsimpleperf_srcs", |
| "simpleperf_static_libs", |
| ], |
| proto: { |
| type: "lite", |
| }, |
| static_libs: [ |
| "libbuildversion", |
| ], |
| use_version_lib: false, |
| |
| target: { |
| linux: { |
| // See note for libdexfile_static in simpleperf_ndk. |
| static_libs: ["libdexfile_support"], |
| runtime_libs: ["libdexfile"], // libdexfile_support dependency |
| }, |
| }, |
| } |
| |
| // simpleperf shipped in system image |
| cc_binary { |
| name: "simpleperf", |
| defaults: [ |
| "simpleperf_shared_libs", |
| ], |
| host_supported: false, |
| srcs: [ |
| "main.cpp", |
| ], |
| static_libs: ["libsimpleperf"], |
| target: { |
| android: { |
| compile_multilib: "first", |
| }, |
| }, |
| init_rc: ["simpleperf.rc"], |
| } |
| |
| cc_library { |
| name: "libsimpleperf_profcollect", |
| defaults: ["simpleperf_shared_libs"], |
| srcs: ["profcollect.cpp"], |
| host_supported: false, |
| ldflags: ["-Wl,--exclude-libs=ALL"], |
| static_libs: ["libsimpleperf"], |
| shared_libs: [ |
| "libpower", |
| ], |
| } |
| |
| rust_bindgen { |
| name: "libsimpleperf_profcollect_bindgen", |
| wrapper_src: "include/simpleperf_profcollect.hpp", |
| crate_name: "simpleperf_profcollect_bindgen", |
| source_stem: "bindings", |
| } |
| |
| rust_library { |
| name: "libsimpleperf_profcollect_rust", |
| crate_name: "simpleperf_profcollect", |
| srcs: ["rust/lib.rs"], |
| rlibs: ["libsimpleperf_profcollect_bindgen"], |
| shared_libs: ["libsimpleperf_profcollect"], |
| visibility: ["//system/extras/profcollectd:__subpackages__"], |
| } |
| |
| rust_test { |
| name: "libsimpleperf_profcollect_bindgen_test", |
| srcs: [":libsimpleperf_profcollect_bindgen"], |
| crate_name: "simpleperf_profcollect_bindgen_test", |
| test_suites: ["general-tests"], |
| auto_gen_config: true, |
| clippy_lints: "none", |
| lints: "none", |
| } |
| |
| // simpleperf released in ndk |
| cc_binary { |
| name: "simpleperf_ndk", |
| defaults: [ |
| "simpleperf_static_libs", |
| ], |
| dist: { |
| targets: ["simpleperf"], |
| }, |
| multilib: { |
| lib32: { |
| suffix: "32", |
| }, |
| }, |
| srcs: [ |
| "main.cpp", |
| ], |
| static_libs: [ |
| "libsimpleperf", |
| ], |
| |
| target: { |
| android: { |
| static_executable: true, |
| static_libs: [ |
| "libc", |
| ], |
| }, |
| android_arm: { |
| dist: { |
| dir: "simpleperf/android/arm", |
| }, |
| }, |
| android_arm64: { |
| dist: { |
| dir: "simpleperf/android/arm64", |
| }, |
| }, |
| android_x86: { |
| dist: { |
| dir: "simpleperf/android/x86", |
| }, |
| }, |
| android_x86_64: { |
| dist: { |
| dir: "simpleperf/android/x86_64", |
| }, |
| }, |
| host: { |
| stem: "simpleperf", |
| }, |
| darwin: { |
| dist: { |
| dir: "simpleperf/darwin/x86", |
| }, |
| }, |
| darwin_x86_64: { |
| dist: { |
| dir: "simpleperf/darwin/x86_64", |
| }, |
| }, |
| linux: { |
| // In the NDK we need libdexfile_static which links libdexfile and |
| // its ART dependencies statically. However in other libraries we |
| // must use libdexfile_support, which dlopen's libdexfile.so from |
| // the ART APEX, to avoid getting ART internals in the system image. |
| static_libs: ["libdexfile_static"], |
| }, |
| linux_glibc_x86: { |
| dist: { |
| dir: "simpleperf/linux/x86", |
| }, |
| }, |
| linux_glibc_x86_64: { |
| dist: { |
| dir: "simpleperf/linux/x86_64", |
| }, |
| }, |
| linux_musl_x86: { |
| dist: { |
| dir: "simpleperf/linux_musl/x86", |
| }, |
| }, |
| linux_musl_x86_64: { |
| dist: { |
| dir: "simpleperf/linux_musl/x86_64", |
| }, |
| }, |
| windows_x86: { |
| dist: { |
| dir: "simpleperf/windows/x86", |
| }, |
| }, |
| windows_x86_64: { |
| dist: { |
| dir: "simpleperf/windows/x86_64", |
| }, |
| }, |
| }, |
| } |
| |
| // It's linked to user's program, to get profile counters and samples for specific code ranges. |
| cc_library { |
| name: "libsimpleperf_record", |
| defaults: [ |
| "simpleperf_static_libs", |
| ], |
| export_include_dirs: ["include"], |
| ldflags: ["-Wl,--exclude-libs,ALL"], |
| srcs: [ |
| "record_lib_interface.cpp", |
| ], |
| static_libs: [ |
| "libsimpleperf", |
| ], |
| target: { |
| darwin: { |
| enabled: false, |
| }, |
| windows: { |
| enabled: false, |
| }, |
| linux: { |
| // See note for libdexfile_static in simpleperf_ndk. |
| static_libs: ["libdexfile_static"], |
| }, |
| }, |
| } |
| |
| // It's the shared library used on host by python scripts to report samples in different ways. |
| cc_library_shared { |
| name: "libsimpleperf_report", |
| defaults: [ |
| "simpleperf_static_libs", |
| ], |
| dist: { |
| targets: ["simpleperf"], |
| }, |
| srcs: [ |
| "report_lib_interface.cpp", |
| ], |
| static_libs: ["libsimpleperf"], |
| |
| target: { |
| android: { |
| enabled: false, |
| }, |
| linux: { |
| ldflags: ["-Wl,--exclude-libs,ALL"], |
| // See note for libdexfile_static in simpleperf_ndk. |
| static_libs: ["libdexfile_static"], |
| }, |
| darwin: { |
| dist: { |
| dir: "simpleperf/darwin/x86", |
| }, |
| }, |
| darwin_x86_64: { |
| dist: { |
| dir: "simpleperf/darwin/x86_64", |
| }, |
| }, |
| linux_glibc_x86: { |
| dist: { |
| dir: "simpleperf/linux/x86", |
| }, |
| }, |
| linux_glibc_x86_64: { |
| dist: { |
| dir: "simpleperf/linux/x86_64", |
| }, |
| }, |
| linux_musl_x86: { |
| dist: { |
| dir: "simpleperf/linux_musl/x86", |
| }, |
| }, |
| linux_musl_x86_64: { |
| dist: { |
| dir: "simpleperf/linux_musl/x86_64", |
| }, |
| }, |
| windows_x86: { |
| dist: { |
| dir: "simpleperf/windows/x86", |
| }, |
| }, |
| windows_x86_64: { |
| dist: { |
| dir: "simpleperf/windows/x86_64", |
| }, |
| }, |
| }, |
| } |
| |
| cc_defaults { |
| name: "simpleperf_test_srcs", |
| tidy_timeout_srcs: [ |
| "record_test.cpp", |
| "cmd_report_sample_test.cpp", |
| "cmd_report_test.cpp", |
| ], |
| srcs: [ |
| "BranchListFile_test.cpp", |
| "cmd_inject_test.cpp", |
| "cmd_kmem_test.cpp", |
| "cmd_merge_test.cpp", |
| "cmd_report_test.cpp", |
| "cmd_report_sample_test.cpp", |
| "command_test.cpp", |
| "dso_test.cpp", |
| "gtest_main.cpp", |
| "kallsyms_test.cpp", |
| "perf_regs_test.cpp", |
| "read_apk_test.cpp", |
| "read_elf_test.cpp", |
| "read_symbol_map_test.cpp", |
| "RecordFilter_test.cpp", |
| "RegEx_test.cpp", |
| "record_file_test.cpp", |
| "record_test.cpp", |
| "report_utils_test.cpp", |
| "sample_tree_test.cpp", |
| "thread_tree_test.cpp", |
| "test_util.cpp", |
| "tracing_test.cpp", |
| "utils_test.cpp", |
| "ZstdUtil_test.cpp", |
| ], |
| target: { |
| android: { |
| srcs: [ |
| "cmd_boot_record_test.cpp", |
| ], |
| }, |
| linux: { |
| tidy_timeout_srcs: [ |
| "cmd_stat_test.cpp", |
| "cmd_record_test.cpp", |
| ], |
| srcs: [ |
| "CallChainJoiner_test.cpp", |
| "cmd_api_test.cpp", |
| "cmd_debug_unwind_test.cpp", |
| "cmd_dumprecord_test.cpp", |
| "cmd_list_test.cpp", |
| "cmd_record_test.cpp", |
| "cmd_monitor_test.cpp", |
| "cmd_stat_test.cpp", |
| "cmd_trace_sched_test.cpp", |
| "environment_test.cpp", |
| "event_selection_set_test.cpp", |
| "IOEventLoop_test.cpp", |
| "JITDebugReader_test.cpp", |
| "MapRecordReader_test.cpp", |
| "OfflineUnwinder_test.cpp", |
| "ProbeEvents_test.cpp", |
| "read_dex_file_test.cpp", |
| "RecordReadThread_test.cpp", |
| "workload_test.cpp", |
| ], |
| }, |
| }, |
| } |
| |
| cc_test { |
| name: "simpleperf_unit_test", |
| defaults: [ |
| "simpleperf_test_srcs", |
| "simpleperf_shared_libs", |
| ], |
| static_libs: [ |
| "libgmock", |
| "libsimpleperf", |
| ], |
| target: { |
| android: { |
| test_suites: ["device-tests"], |
| }, |
| }, |
| data: [ |
| "testdata/**/*", |
| ], |
| sanitize: { |
| memtag_heap: false, |
| }, |
| } |
| |
| cc_test { |
| name: "simpleperf_cpu_hotplug_test", |
| defaults: [ |
| "simpleperf_shared_libs", |
| ], |
| test_options: { |
| unit_test: true, |
| }, |
| srcs: [ |
| "cpu_hotplug_test.cpp", |
| ], |
| static_libs: ["libsimpleperf"], |
| target: { |
| android: { |
| test_suites: ["device-tests"], |
| }, |
| darwin: { |
| enabled: false, |
| }, |
| windows: { |
| enabled: false, |
| }, |
| }, |
| } |
| |
| cc_library_static { |
| name: "libsimpleperf_cts_test", |
| defaults: [ |
| "simpleperf_test_srcs", |
| "simpleperf_shared_libs", |
| ], |
| host_supported: false, |
| cflags: [ |
| "-DIN_CTS_TEST", |
| ], |
| static_libs: [ |
| "libgtest", |
| ], |
| whole_static_libs: [ |
| "libgmock", |
| "libsimpleperf", |
| "libsimpleperf_regex", |
| ], |
| } |
| |
| cc_test { |
| name: "simpleperf_record_test", |
| defaults: [ |
| "simpleperf_shared_libs", |
| ], |
| srcs: [ |
| "record_lib_test.cpp", |
| ], |
| shared_libs: ["libsimpleperf_record"], |
| target: { |
| android: { |
| test_suites: ["device-tests"], |
| }, |
| darwin: { |
| enabled: false, |
| }, |
| windows: { |
| enabled: false, |
| }, |
| }, |
| } |
| |
| filegroup { |
| name: "system-extras-simpleperf-testdata", |
| srcs: ["CtsSimpleperfTestCases_testdata/**/*"], |
| } |
| |
| cc_fuzz { |
| name: "libsimpleperf_report_fuzzer", |
| defaults: [ |
| "simpleperf_static_libs", |
| ], |
| fuzzing_frameworks: { |
| afl: false, |
| }, |
| host_supported: true, |
| srcs: [ |
| "libsimpleperf_report_fuzzer.cpp", |
| ], |
| static_libs: [ |
| "libsimpleperf", |
| ], |
| target: { |
| linux: { |
| // Fuzzer may not be able to load libdexfile. So statically link it. |
| static_libs: ["libdexfile_static"], |
| }, |
| windows: { |
| enabled: false, |
| }, |
| }, |
| dictionary: "simpleperf_dict.dict", |
| corpus: ["testdata/**/*.data"], |
| } |
| |
| cc_fuzz { |
| name: "simpleperf_writer_fuzzer", |
| defaults: [ |
| "simpleperf_static_libs", |
| ], |
| fuzzing_frameworks: { |
| afl: false, |
| }, |
| host_supported: true, |
| srcs: [ |
| "simpleperf_writer_fuzzer.cpp", |
| ], |
| static_libs: [ |
| "libsimpleperf", |
| ], |
| target: { |
| linux: { |
| // Fuzzer may not be able to load libdexfile. So statically link it. |
| static_libs: ["libdexfile_static"], |
| }, |
| windows: { |
| enabled: false, |
| }, |
| }, |
| } |
| |
| genrule { |
| name: "simpleperf_script.zip", |
| tools: [ |
| "soong_zip", |
| ], |
| srcs: [ |
| "**/*.proto", |
| "app_api/**/*", |
| "doc/**/*", |
| "demo/**/*", |
| "runtest/**/*", |
| "scripts/**/*", |
| "testdata/**/*", |
| ], |
| exclude_srcs: [ |
| "scripts/binary_cache/**/*", |
| ], |
| cmd: "$(location soong_zip) -o $(out) -C system/extras/simpleperf " + |
| "-D system/extras/simpleperf ", |
| out: [ |
| "simpleperf/simpleperf_script.zip", |
| ], |
| dist: { |
| targets: ["simpleperf"], |
| dir: "simpleperf", |
| }, |
| } |