1*6dbdd20aSAndroid Build Coastguard Worker# Copyright (C) 2017 The Android Open Source Project 2*6dbdd20aSAndroid Build Coastguard Worker# 3*6dbdd20aSAndroid Build Coastguard Worker# Licensed under the Apache License, Version 2.0 (the "License"); 4*6dbdd20aSAndroid Build Coastguard Worker# you may not use this file except in compliance with the License. 5*6dbdd20aSAndroid Build Coastguard Worker# You may obtain a copy of the License at 6*6dbdd20aSAndroid Build Coastguard Worker# 7*6dbdd20aSAndroid Build Coastguard Worker# http://www.apache.org/licenses/LICENSE-2.0 8*6dbdd20aSAndroid Build Coastguard Worker# 9*6dbdd20aSAndroid Build Coastguard Worker# Unless required by applicable law or agreed to in writing, software 10*6dbdd20aSAndroid Build Coastguard Worker# distributed under the License is distributed on an "AS IS" BASIS, 11*6dbdd20aSAndroid Build Coastguard Worker# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12*6dbdd20aSAndroid Build Coastguard Worker# See the License for the specific language governing permissions and 13*6dbdd20aSAndroid Build Coastguard Worker# limitations under the License. 14*6dbdd20aSAndroid Build Coastguard Worker 15*6dbdd20aSAndroid Build Coastguard Workerimport("perfetto.gni") 16*6dbdd20aSAndroid Build Coastguard Workerimport("perfetto_python.gni") 17*6dbdd20aSAndroid Build Coastguard Workerimport("pkg_config.gni") 18*6dbdd20aSAndroid Build Coastguard Workerimport("proto_library.gni") 19*6dbdd20aSAndroid Build Coastguard Worker 20*6dbdd20aSAndroid Build Coastguard Workerif (perfetto_root_path == "//") { 21*6dbdd20aSAndroid Build Coastguard Worker import("//gn/standalone/sanitizers/vars.gni") 22*6dbdd20aSAndroid Build Coastguard Worker} else { 23*6dbdd20aSAndroid Build Coastguard Worker import("//build/config/sanitizers/sanitizers.gni") 24*6dbdd20aSAndroid Build Coastguard Worker} 25*6dbdd20aSAndroid Build Coastguard Worker 26*6dbdd20aSAndroid Build Coastguard Worker# Genereates a header files that contains a macro definition for each build flag 27*6dbdd20aSAndroid Build Coastguard Worker# that is required by the codebase. This is to avoid sprinkling cflags all over 28*6dbdd20aSAndroid Build Coastguard Worker# the places, which is very fragile especially for our codebase that needs to 29*6dbdd20aSAndroid Build Coastguard Worker# deal with several build systems. 30*6dbdd20aSAndroid Build Coastguard Worker# The way this works is the following: 31*6dbdd20aSAndroid Build Coastguard Worker# - This rule generates a header that contains a bunch of lines like: 32*6dbdd20aSAndroid Build Coastguard Worker# #define PERFETTO_BUILDFLAG_DEFINE_PERFETTO_ANDROID_BUILD() 33*6dbdd20aSAndroid Build Coastguard Worker# - The generated header is included by base/build_config.h 34*6dbdd20aSAndroid Build Coastguard Worker# - Source files in the codebase #include base/build_config and use the 35*6dbdd20aSAndroid Build Coastguard Worker# pattern #if PERFETTO_BUILDFLAG(PERFETTO_ANDROID_BUILD) 36*6dbdd20aSAndroid Build Coastguard Workerbuildflag_gen_dir_ = "$root_gen_dir/$perfetto_root_path/build_config" 37*6dbdd20aSAndroid Build Coastguard Workeraction("gen_buildflags") { 38*6dbdd20aSAndroid Build Coastguard Worker script = "write_buildflag_header.py" 39*6dbdd20aSAndroid Build Coastguard Worker gen_header_path = "$buildflag_gen_dir_/perfetto_build_flags.h" 40*6dbdd20aSAndroid Build Coastguard Worker 41*6dbdd20aSAndroid Build Coastguard Worker perfetto_component_build = false 42*6dbdd20aSAndroid Build Coastguard Worker if (defined(is_component_build) && is_component_build) { 43*6dbdd20aSAndroid Build Coastguard Worker perfetto_component_build = true 44*6dbdd20aSAndroid Build Coastguard Worker } 45*6dbdd20aSAndroid Build Coastguard Worker perfetto_force_dlog_on = perfetto_force_dlog == "on" 46*6dbdd20aSAndroid Build Coastguard Worker perfetto_force_dlog_off = perfetto_force_dlog == "off" 47*6dbdd20aSAndroid Build Coastguard Worker 48*6dbdd20aSAndroid Build Coastguard Worker perfetto_force_dcheck_on = perfetto_force_dcheck == "on" 49*6dbdd20aSAndroid Build Coastguard Worker perfetto_force_dcheck_off = perfetto_force_dcheck == "off" 50*6dbdd20aSAndroid Build Coastguard Worker 51*6dbdd20aSAndroid Build Coastguard Worker # We can't just use (is_linux || is_android) in perfetto.gni because that 52*6dbdd20aSAndroid Build Coastguard Worker # doesn't work in Android Mac host builds. We lose the GN notion of OS once 53*6dbdd20aSAndroid Build Coastguard Worker # we run the tools/gen_xxx generators. 54*6dbdd20aSAndroid Build Coastguard Worker if (enable_perfetto_watchdog) { 55*6dbdd20aSAndroid Build Coastguard Worker perfetto_watchdog = "PERFETTO_BUILDFLAG_DEFINE_PERFETTO_OS_ANDROID() || " + 56*6dbdd20aSAndroid Build Coastguard Worker "PERFETTO_BUILDFLAG_DEFINE_PERFETTO_OS_LINUX()" 57*6dbdd20aSAndroid Build Coastguard Worker } else { 58*6dbdd20aSAndroid Build Coastguard Worker perfetto_watchdog = "0" 59*6dbdd20aSAndroid Build Coastguard Worker } 60*6dbdd20aSAndroid Build Coastguard Worker 61*6dbdd20aSAndroid Build Coastguard Worker # We need local symbolization to run diff tests in chrome. 62*6dbdd20aSAndroid Build Coastguard Worker if (enable_perfetto_tools || 63*6dbdd20aSAndroid Build Coastguard Worker (enable_perfetto_trace_processor && build_with_chromium)) { 64*6dbdd20aSAndroid Build Coastguard Worker perfetto_local_symbolizer = 65*6dbdd20aSAndroid Build Coastguard Worker "PERFETTO_BUILDFLAG_DEFINE_PERFETTO_OS_LINUX() || " + 66*6dbdd20aSAndroid Build Coastguard Worker "PERFETTO_BUILDFLAG_DEFINE_PERFETTO_OS_MAC() ||" + 67*6dbdd20aSAndroid Build Coastguard Worker "PERFETTO_BUILDFLAG_DEFINE_PERFETTO_OS_WIN()" 68*6dbdd20aSAndroid Build Coastguard Worker } else { 69*6dbdd20aSAndroid Build Coastguard Worker perfetto_local_symbolizer = "0" 70*6dbdd20aSAndroid Build Coastguard Worker } 71*6dbdd20aSAndroid Build Coastguard Worker response_file_contents = [ 72*6dbdd20aSAndroid Build Coastguard Worker "--flags", # Keep this marker first. 73*6dbdd20aSAndroid Build Coastguard Worker "PERFETTO_ANDROID_BUILD=$perfetto_build_with_android", 74*6dbdd20aSAndroid Build Coastguard Worker "PERFETTO_CHROMIUM_BUILD=$build_with_chromium", 75*6dbdd20aSAndroid Build Coastguard Worker "PERFETTO_STANDALONE_BUILD=$perfetto_build_standalone", 76*6dbdd20aSAndroid Build Coastguard Worker "PERFETTO_START_DAEMONS=$start_daemons_for_testing", 77*6dbdd20aSAndroid Build Coastguard Worker "PERFETTO_IPC=$enable_perfetto_ipc", 78*6dbdd20aSAndroid Build Coastguard Worker "PERFETTO_WATCHDOG=$perfetto_watchdog", 79*6dbdd20aSAndroid Build Coastguard Worker "PERFETTO_COMPONENT_BUILD=$perfetto_component_build", 80*6dbdd20aSAndroid Build Coastguard Worker "PERFETTO_ENABLE_ETM_IMPORTER=$enable_perfetto_etm_importer", 81*6dbdd20aSAndroid Build Coastguard Worker "PERFETTO_FORCE_DLOG_ON=$perfetto_force_dlog_on", 82*6dbdd20aSAndroid Build Coastguard Worker "PERFETTO_FORCE_DLOG_OFF=$perfetto_force_dlog_off", 83*6dbdd20aSAndroid Build Coastguard Worker "PERFETTO_FORCE_DCHECK_ON=$perfetto_force_dcheck_on", 84*6dbdd20aSAndroid Build Coastguard Worker "PERFETTO_FORCE_DCHECK_OFF=$perfetto_force_dcheck_off", 85*6dbdd20aSAndroid Build Coastguard Worker "PERFETTO_VERBOSE_LOGS=$perfetto_verbose_logs_enabled", 86*6dbdd20aSAndroid Build Coastguard Worker "PERFETTO_VERSION_GEN=$enable_perfetto_version_gen", 87*6dbdd20aSAndroid Build Coastguard Worker "PERFETTO_TP_PERCENTILE=$enable_perfetto_trace_processor_percentile", 88*6dbdd20aSAndroid Build Coastguard Worker "PERFETTO_TP_LINENOISE=$enable_perfetto_trace_processor_linenoise", 89*6dbdd20aSAndroid Build Coastguard Worker "PERFETTO_TP_HTTPD=$enable_perfetto_trace_processor_httpd", 90*6dbdd20aSAndroid Build Coastguard Worker "PERFETTO_TP_JSON=$enable_perfetto_trace_processor_json", 91*6dbdd20aSAndroid Build Coastguard Worker "PERFETTO_TP_INSTRUMENTS=$enable_perfetto_trace_processor_mac_instruments", 92*6dbdd20aSAndroid Build Coastguard Worker "PERFETTO_LOCAL_SYMBOLIZER=$perfetto_local_symbolizer", 93*6dbdd20aSAndroid Build Coastguard Worker "PERFETTO_ZLIB=$enable_perfetto_zlib", 94*6dbdd20aSAndroid Build Coastguard Worker "PERFETTO_TRACED_PERF=$enable_perfetto_traced_perf", 95*6dbdd20aSAndroid Build Coastguard Worker "PERFETTO_HEAPPROFD=$enable_perfetto_heapprofd", 96*6dbdd20aSAndroid Build Coastguard Worker "PERFETTO_STDERR_CRASH_DUMP=$enable_perfetto_stderr_crash_dump", 97*6dbdd20aSAndroid Build Coastguard Worker "PERFETTO_X64_CPU_OPT=$enable_perfetto_x64_cpu_opt", 98*6dbdd20aSAndroid Build Coastguard Worker "PERFETTO_LLVM_DEMANGLE=$enable_perfetto_llvm_demangle", 99*6dbdd20aSAndroid Build Coastguard Worker "PERFETTO_SYSTEM_CONSUMER=$enable_perfetto_system_consumer", 100*6dbdd20aSAndroid Build Coastguard Worker "PERFETTO_THREAD_SAFETY_ANNOTATIONS=$perfetto_thread_safety_annotations", 101*6dbdd20aSAndroid Build Coastguard Worker ] 102*6dbdd20aSAndroid Build Coastguard Worker 103*6dbdd20aSAndroid Build Coastguard Worker rel_out_path = rebase_path(gen_header_path, "$root_build_dir") 104*6dbdd20aSAndroid Build Coastguard Worker args = [ 105*6dbdd20aSAndroid Build Coastguard Worker "--out", 106*6dbdd20aSAndroid Build Coastguard Worker rel_out_path, 107*6dbdd20aSAndroid Build Coastguard Worker "--rsp", 108*6dbdd20aSAndroid Build Coastguard Worker "{{response_file_name}}", 109*6dbdd20aSAndroid Build Coastguard Worker ] 110*6dbdd20aSAndroid Build Coastguard Worker 111*6dbdd20aSAndroid Build Coastguard Worker outputs = [ gen_header_path ] 112*6dbdd20aSAndroid Build Coastguard Worker} 113*6dbdd20aSAndroid Build Coastguard Worker 114*6dbdd20aSAndroid Build Coastguard Worker# All targets should depend on this target to inherit the right flags and 115*6dbdd20aSAndroid Build Coastguard Worker# include directories. 116*6dbdd20aSAndroid Build Coastguard Workergroup("default_deps") { 117*6dbdd20aSAndroid Build Coastguard Worker visibility = [ "../*" ] # Prevent chromium targets from depending on this 118*6dbdd20aSAndroid Build Coastguard Worker # (breaks component). 119*6dbdd20aSAndroid Build Coastguard Worker public_configs = [ ":default_config" ] 120*6dbdd20aSAndroid Build Coastguard Worker deps = [ ":gen_buildflags" ] 121*6dbdd20aSAndroid Build Coastguard Worker if (perfetto_build_standalone) { 122*6dbdd20aSAndroid Build Coastguard Worker public_deps = [ 123*6dbdd20aSAndroid Build Coastguard Worker "//gn/standalone:check_build_deps", 124*6dbdd20aSAndroid Build Coastguard Worker "//gn/standalone/libc++:deps", 125*6dbdd20aSAndroid Build Coastguard Worker "//gn/standalone/sanitizers:deps", 126*6dbdd20aSAndroid Build Coastguard Worker ] 127*6dbdd20aSAndroid Build Coastguard Worker if (is_android) { 128*6dbdd20aSAndroid Build Coastguard Worker public_deps += [ "//gn/standalone:check_build_deps_android" ] 129*6dbdd20aSAndroid Build Coastguard Worker } 130*6dbdd20aSAndroid Build Coastguard Worker } 131*6dbdd20aSAndroid Build Coastguard Worker} 132*6dbdd20aSAndroid Build Coastguard Worker 133*6dbdd20aSAndroid Build Coastguard Worker# The config that all targets in the perfetto codebase inherit by virtue of 134*6dbdd20aSAndroid Build Coastguard Worker# having explicit deps on //gn:default_deps. This config is NOT propagated up to 135*6dbdd20aSAndroid Build Coastguard Worker# embedders that depend on perfetto (e.g. chrome). :public_config (see below) is 136*6dbdd20aSAndroid Build Coastguard Worker# used for that. 137*6dbdd20aSAndroid Build Coastguard Workerconfig("default_config") { 138*6dbdd20aSAndroid Build Coastguard Worker visibility = [ "../*" ] # Prevent chromium targets from depending on this 139*6dbdd20aSAndroid Build Coastguard Worker # (breaks component). 140*6dbdd20aSAndroid Build Coastguard Worker configs = [ ":public_config" ] 141*6dbdd20aSAndroid Build Coastguard Worker defines = [ "PERFETTO_IMPLEMENTATION" ] 142*6dbdd20aSAndroid Build Coastguard Worker include_dirs = [ 143*6dbdd20aSAndroid Build Coastguard Worker "..", 144*6dbdd20aSAndroid Build Coastguard Worker "../src/profiling/memory/include", 145*6dbdd20aSAndroid Build Coastguard Worker ] 146*6dbdd20aSAndroid Build Coastguard Worker 147*6dbdd20aSAndroid Build Coastguard Worker if (build_with_chromium && is_android) { 148*6dbdd20aSAndroid Build Coastguard Worker # Included for __android_log_print 149*6dbdd20aSAndroid Build Coastguard Worker libs = [ "log" ] 150*6dbdd20aSAndroid Build Coastguard Worker } 151*6dbdd20aSAndroid Build Coastguard Worker} 152*6dbdd20aSAndroid Build Coastguard Worker 153*6dbdd20aSAndroid Build Coastguard Worker# This config is propagated to embedders via libperfetto. It's also included in 154*6dbdd20aSAndroid Build Coastguard Worker# the default_config above. 155*6dbdd20aSAndroid Build Coastguard Workerconfig("public_config") { 156*6dbdd20aSAndroid Build Coastguard Worker include_dirs = [ 157*6dbdd20aSAndroid Build Coastguard Worker "../include", 158*6dbdd20aSAndroid Build Coastguard Worker 159*6dbdd20aSAndroid Build Coastguard Worker # For perfetto_build_flags.h 160*6dbdd20aSAndroid Build Coastguard Worker buildflag_gen_dir_, 161*6dbdd20aSAndroid Build Coastguard Worker 162*6dbdd20aSAndroid Build Coastguard Worker # For generated files (proto libraries etc). We add the directory here 163*6dbdd20aSAndroid Build Coastguard Worker # because we stop propagation of the configs for individual proto libraries 164*6dbdd20aSAndroid Build Coastguard Worker # to avoid duplicate include directory command line flags in compiler 165*6dbdd20aSAndroid Build Coastguard Worker # invocations, see proto_library.gni, crbug.com/1043279, crbug.com/gn/142. 166*6dbdd20aSAndroid Build Coastguard Worker "$root_gen_dir/$perfetto_root_path", 167*6dbdd20aSAndroid Build Coastguard Worker ] 168*6dbdd20aSAndroid Build Coastguard Worker} 169*6dbdd20aSAndroid Build Coastguard Worker 170*6dbdd20aSAndroid Build Coastguard Workerconfig("asan_instrumentation") { 171*6dbdd20aSAndroid Build Coastguard Worker if (use_sanitizer_configs_without_instrumentation) { 172*6dbdd20aSAndroid Build Coastguard Worker defines = [ "ADDRESS_SANITIZER_WITHOUT_INSTRUMENTATION" ] 173*6dbdd20aSAndroid Build Coastguard Worker } 174*6dbdd20aSAndroid Build Coastguard Worker} 175*6dbdd20aSAndroid Build Coastguard Worker 176*6dbdd20aSAndroid Build Coastguard Workerif (perfetto_root_path != "//") { 177*6dbdd20aSAndroid Build Coastguard Worker config("gtest_and_gmock_embedder_config") { 178*6dbdd20aSAndroid Build Coastguard Worker include_dirs = [ 179*6dbdd20aSAndroid Build Coastguard Worker "//testing/gtest/include", 180*6dbdd20aSAndroid Build Coastguard Worker "//testing/gmock/include", 181*6dbdd20aSAndroid Build Coastguard Worker ] 182*6dbdd20aSAndroid Build Coastguard Worker } 183*6dbdd20aSAndroid Build Coastguard Worker} 184*6dbdd20aSAndroid Build Coastguard Worker 185*6dbdd20aSAndroid Build Coastguard Workergroup("gtest_and_gmock") { 186*6dbdd20aSAndroid Build Coastguard Worker testonly = true 187*6dbdd20aSAndroid Build Coastguard Worker 188*6dbdd20aSAndroid Build Coastguard Worker if (perfetto_root_path == "//") { 189*6dbdd20aSAndroid Build Coastguard Worker public_deps = [ 190*6dbdd20aSAndroid Build Coastguard Worker "//buildtools:gmock", 191*6dbdd20aSAndroid Build Coastguard Worker "//buildtools:gtest", 192*6dbdd20aSAndroid Build Coastguard Worker ] 193*6dbdd20aSAndroid Build Coastguard Worker } else { 194*6dbdd20aSAndroid Build Coastguard Worker public_configs = [ ":gtest_and_gmock_embedder_config" ] 195*6dbdd20aSAndroid Build Coastguard Worker public_deps = [ 196*6dbdd20aSAndroid Build Coastguard Worker "//testing/gmock", 197*6dbdd20aSAndroid Build Coastguard Worker "//testing/gtest", 198*6dbdd20aSAndroid Build Coastguard Worker ] 199*6dbdd20aSAndroid Build Coastguard Worker } 200*6dbdd20aSAndroid Build Coastguard Worker} 201*6dbdd20aSAndroid Build Coastguard Worker 202*6dbdd20aSAndroid Build Coastguard Workergroup("gtest_main") { 203*6dbdd20aSAndroid Build Coastguard Worker testonly = true 204*6dbdd20aSAndroid Build Coastguard Worker 205*6dbdd20aSAndroid Build Coastguard Worker if (perfetto_root_path == "//") { 206*6dbdd20aSAndroid Build Coastguard Worker public_deps = [ "//buildtools:gtest_main" ] 207*6dbdd20aSAndroid Build Coastguard Worker } else if (build_with_chromium) { 208*6dbdd20aSAndroid Build Coastguard Worker public_deps = [ "//base/test:run_all_unittests" ] 209*6dbdd20aSAndroid Build Coastguard Worker } else { 210*6dbdd20aSAndroid Build Coastguard Worker public_deps = [ "//testing/gtest:gtest_main" ] 211*6dbdd20aSAndroid Build Coastguard Worker } 212*6dbdd20aSAndroid Build Coastguard Worker} 213*6dbdd20aSAndroid Build Coastguard Worker 214*6dbdd20aSAndroid Build Coastguard Worker# Full protobuf is just for host tools .No binary shipped on device should 215*6dbdd20aSAndroid Build Coastguard Worker# depend on this. 216*6dbdd20aSAndroid Build Coastguard Workerprotobuf_full_deps_allowlist = [ 217*6dbdd20aSAndroid Build Coastguard Worker "../buildtools/grpc:*", 218*6dbdd20aSAndroid Build Coastguard Worker "../src/ipc/protoc_plugin:*", 219*6dbdd20aSAndroid Build Coastguard Worker "../src/protozero/protoc_plugin:*", 220*6dbdd20aSAndroid Build Coastguard Worker "../src/protozero/filtering:filter_util", 221*6dbdd20aSAndroid Build Coastguard Worker "../src/trace_processor:trace_processor_shell", 222*6dbdd20aSAndroid Build Coastguard Worker "../src/protozero/filtering:filter_util", 223*6dbdd20aSAndroid Build Coastguard Worker "../tools/*", 224*6dbdd20aSAndroid Build Coastguard Worker "../src/tools/*", 225*6dbdd20aSAndroid Build Coastguard Worker] 226*6dbdd20aSAndroid Build Coastguard Worker 227*6dbdd20aSAndroid Build Coastguard Workergroup("protoc") { 228*6dbdd20aSAndroid Build Coastguard Worker public_deps = [ "${perfetto_protobuf_target_prefix}:protoc($host_toolchain)" ] 229*6dbdd20aSAndroid Build Coastguard Worker} 230*6dbdd20aSAndroid Build Coastguard Worker 231*6dbdd20aSAndroid Build Coastguard Workerconfig("system_protoc") { 232*6dbdd20aSAndroid Build Coastguard Worker libs = [ "protoc" ] # This will link against libprotoc.so 233*6dbdd20aSAndroid Build Coastguard Worker} 234*6dbdd20aSAndroid Build Coastguard Worker 235*6dbdd20aSAndroid Build Coastguard Worker# pkg_deps selects the appropriate pkg-config based on current_toolchain and 236*6dbdd20aSAndroid Build Coastguard Worker# this is a no-op if |perfetto_use_pkgconfig| is false. 237*6dbdd20aSAndroid Build Coastguard Workerpkg_config("pkgconfig_protobuf") { 238*6dbdd20aSAndroid Build Coastguard Worker pkg_deps = [ "protobuf" ] 239*6dbdd20aSAndroid Build Coastguard Worker} 240*6dbdd20aSAndroid Build Coastguard Worker 241*6dbdd20aSAndroid Build Coastguard Workerconfig("system_protobuf") { 242*6dbdd20aSAndroid Build Coastguard Worker if (perfetto_use_pkgconfig) { 243*6dbdd20aSAndroid Build Coastguard Worker configs = [ ":pkgconfig_protobuf" ] 244*6dbdd20aSAndroid Build Coastguard Worker } else { 245*6dbdd20aSAndroid Build Coastguard Worker # Fallback if pkg-config isn't enabled. 246*6dbdd20aSAndroid Build Coastguard Worker libs = [ "protobuf" ] # This will link against libprotobuf.so 247*6dbdd20aSAndroid Build Coastguard Worker } 248*6dbdd20aSAndroid Build Coastguard Worker} 249*6dbdd20aSAndroid Build Coastguard Worker 250*6dbdd20aSAndroid Build Coastguard Worker# protoc compiler library, it's used for building protoc plugins. 251*6dbdd20aSAndroid Build Coastguard Workergroup("protoc_lib") { 252*6dbdd20aSAndroid Build Coastguard Worker visibility = protobuf_full_deps_allowlist 253*6dbdd20aSAndroid Build Coastguard Worker if (current_toolchain == host_toolchain) { 254*6dbdd20aSAndroid Build Coastguard Worker if (perfetto_use_system_protobuf) { 255*6dbdd20aSAndroid Build Coastguard Worker public_configs = [ 256*6dbdd20aSAndroid Build Coastguard Worker ":system_protobuf", 257*6dbdd20aSAndroid Build Coastguard Worker ":system_protoc", 258*6dbdd20aSAndroid Build Coastguard Worker ":protobuf_gen_config", 259*6dbdd20aSAndroid Build Coastguard Worker ] 260*6dbdd20aSAndroid Build Coastguard Worker } else { 261*6dbdd20aSAndroid Build Coastguard Worker public_deps = [ "${perfetto_protobuf_target_prefix}:protoc_lib" ] 262*6dbdd20aSAndroid Build Coastguard Worker } 263*6dbdd20aSAndroid Build Coastguard Worker } 264*6dbdd20aSAndroid Build Coastguard Worker} 265*6dbdd20aSAndroid Build Coastguard Worker 266*6dbdd20aSAndroid Build Coastguard Workergroup("protobuf_full") { 267*6dbdd20aSAndroid Build Coastguard Worker visibility = protobuf_full_deps_allowlist 268*6dbdd20aSAndroid Build Coastguard Worker if (perfetto_use_system_protobuf) { 269*6dbdd20aSAndroid Build Coastguard Worker public_configs = [ ":system_protobuf" ] 270*6dbdd20aSAndroid Build Coastguard Worker } else { 271*6dbdd20aSAndroid Build Coastguard Worker public_deps = [ "${perfetto_protobuf_target_prefix}:protobuf_full" ] 272*6dbdd20aSAndroid Build Coastguard Worker } 273*6dbdd20aSAndroid Build Coastguard Worker} 274*6dbdd20aSAndroid Build Coastguard Worker 275*6dbdd20aSAndroid Build Coastguard Workergroup("protobuf_lite") { 276*6dbdd20aSAndroid Build Coastguard Worker if (perfetto_use_system_protobuf) { 277*6dbdd20aSAndroid Build Coastguard Worker public_configs = [ ":system_protobuf" ] 278*6dbdd20aSAndroid Build Coastguard Worker } else { 279*6dbdd20aSAndroid Build Coastguard Worker public_deps = [ "${perfetto_protobuf_target_prefix}:protobuf_lite" ] 280*6dbdd20aSAndroid Build Coastguard Worker } 281*6dbdd20aSAndroid Build Coastguard Worker} 282*6dbdd20aSAndroid Build Coastguard Worker 283*6dbdd20aSAndroid Build Coastguard Worker# This config is applied to the .pb.{cc,h} generated by proto_library(). This 284*6dbdd20aSAndroid Build Coastguard Worker# config is propagated up to the source sets that depend on generated proto 285*6dbdd20aSAndroid Build Coastguard Worker# headers and proto libraries. Therefore this should stay as lean and clean as 286*6dbdd20aSAndroid Build Coastguard Worker# possible in terms of -W-no* suppressions. Thankfully the autogenerated .pb.h 287*6dbdd20aSAndroid Build Coastguard Worker# headers violate less warnings than the libprotobuf_* library itself. 288*6dbdd20aSAndroid Build Coastguard Worker# This config is defined here (as opposed to //buildtools/BUILD.gn) so that when 289*6dbdd20aSAndroid Build Coastguard Worker# perfetto_use_system_protobuf=true, the right compiler flags are passed. 290*6dbdd20aSAndroid Build Coastguard Workerconfig("protobuf_gen_config") { 291*6dbdd20aSAndroid Build Coastguard Worker visibility = [ "*" ] # This is injected by standalone/proto_library.gni 292*6dbdd20aSAndroid Build Coastguard Worker defines = [ 293*6dbdd20aSAndroid Build Coastguard Worker "GOOGLE_PROTOBUF_NO_RTTI", 294*6dbdd20aSAndroid Build Coastguard Worker "GOOGLE_PROTOBUF_NO_STATIC_INITIALIZER", 295*6dbdd20aSAndroid Build Coastguard Worker ] 296*6dbdd20aSAndroid Build Coastguard Worker cflags = [] 297*6dbdd20aSAndroid Build Coastguard Worker if (is_gcc) { 298*6dbdd20aSAndroid Build Coastguard Worker cflags += [ "-Wno-deprecated-declarations" ] 299*6dbdd20aSAndroid Build Coastguard Worker } 300*6dbdd20aSAndroid Build Coastguard Worker if (is_clang && is_win) { 301*6dbdd20aSAndroid Build Coastguard Worker cflags += [ 302*6dbdd20aSAndroid Build Coastguard Worker "-Wno-reserved-id-macro", 303*6dbdd20aSAndroid Build Coastguard Worker "-Wno-language-extension-token", 304*6dbdd20aSAndroid Build Coastguard Worker "-Wno-sign-conversion", 305*6dbdd20aSAndroid Build Coastguard Worker "-Wno-suggest-destructor-override", 306*6dbdd20aSAndroid Build Coastguard Worker "-Wno-undefined-reinterpret-cast", 307*6dbdd20aSAndroid Build Coastguard Worker "-Wno-inconsistent-missing-destructor-override", 308*6dbdd20aSAndroid Build Coastguard Worker "-Wno-unused-parameter", 309*6dbdd20aSAndroid Build Coastguard Worker "-Wno-shadow-field-in-constructor", 310*6dbdd20aSAndroid Build Coastguard Worker "-Wno-zero-as-null-pointer-constant", 311*6dbdd20aSAndroid Build Coastguard Worker 312*6dbdd20aSAndroid Build Coastguard Worker # Fixed in upstream protobuf v3.22.0 313*6dbdd20aSAndroid Build Coastguard Worker # d37cbfd4485f("Update inlined_string_field.h"), but we don't have that. 314*6dbdd20aSAndroid Build Coastguard Worker "-Wno-undef", 315*6dbdd20aSAndroid Build Coastguard Worker ] 316*6dbdd20aSAndroid Build Coastguard Worker } 317*6dbdd20aSAndroid Build Coastguard Worker 318*6dbdd20aSAndroid Build Coastguard Worker if (!perfetto_use_system_protobuf) { 319*6dbdd20aSAndroid Build Coastguard Worker cflags += [ 320*6dbdd20aSAndroid Build Coastguard Worker # Using -isystem instead of include_dirs (-I), so we don't need to 321*6dbdd20aSAndroid Build Coastguard Worker # suppress warnings coming from libprotobuf headers. Doing so would mask 322*6dbdd20aSAndroid Build Coastguard Worker # warnings in our own code. 323*6dbdd20aSAndroid Build Coastguard Worker perfetto_isystem_cflag, 324*6dbdd20aSAndroid Build Coastguard Worker rebase_path("../buildtools/protobuf/src", root_build_dir), 325*6dbdd20aSAndroid Build Coastguard Worker ] 326*6dbdd20aSAndroid Build Coastguard Worker } 327*6dbdd20aSAndroid Build Coastguard Worker} 328*6dbdd20aSAndroid Build Coastguard Worker 329*6dbdd20aSAndroid Build Coastguard Worker# The Google C++ Benchmark library. 330*6dbdd20aSAndroid Build Coastguard Worker# Only available in standalone builds. 331*6dbdd20aSAndroid Build Coastguard Workerif (enable_perfetto_benchmarks) { 332*6dbdd20aSAndroid Build Coastguard Worker group("benchmark") { 333*6dbdd20aSAndroid Build Coastguard Worker testonly = true 334*6dbdd20aSAndroid Build Coastguard Worker public_deps = [ "//buildtools:benchmark" ] 335*6dbdd20aSAndroid Build Coastguard Worker } 336*6dbdd20aSAndroid Build Coastguard Worker} 337*6dbdd20aSAndroid Build Coastguard Worker 338*6dbdd20aSAndroid Build Coastguard Worker# Libbacktrace, used for printing stack traces from crash handler, only in 339*6dbdd20aSAndroid Build Coastguard Worker# standalone debug builds. 340*6dbdd20aSAndroid Build Coastguard Workerif (perfetto_build_standalone && (is_linux || is_android)) { 341*6dbdd20aSAndroid Build Coastguard Worker group("libbacktrace") { 342*6dbdd20aSAndroid Build Coastguard Worker public_deps = [ "//buildtools:libbacktrace" ] 343*6dbdd20aSAndroid Build Coastguard Worker } 344*6dbdd20aSAndroid Build Coastguard Worker} 345*6dbdd20aSAndroid Build Coastguard Worker 346*6dbdd20aSAndroid Build Coastguard Workerif (enable_perfetto_trace_processor_sqlite) { 347*6dbdd20aSAndroid Build Coastguard Worker group("sqlite") { 348*6dbdd20aSAndroid Build Coastguard Worker if (perfetto_root_path == "//") { 349*6dbdd20aSAndroid Build Coastguard Worker public_deps = [ "//buildtools:sqlite" ] 350*6dbdd20aSAndroid Build Coastguard Worker } else { 351*6dbdd20aSAndroid Build Coastguard Worker if (build_with_chromium) { 352*6dbdd20aSAndroid Build Coastguard Worker public_deps = [ "//third_party/sqlite:sqlite_dev" ] 353*6dbdd20aSAndroid Build Coastguard Worker } else { 354*6dbdd20aSAndroid Build Coastguard Worker public_deps = [ "//third_party/sqlite:sqlite" ] 355*6dbdd20aSAndroid Build Coastguard Worker } 356*6dbdd20aSAndroid Build Coastguard Worker public_configs = [ ":sqlite_third_party_include_path" ] 357*6dbdd20aSAndroid Build Coastguard Worker } 358*6dbdd20aSAndroid Build Coastguard Worker } 359*6dbdd20aSAndroid Build Coastguard Worker} 360*6dbdd20aSAndroid Build Coastguard Worker 361*6dbdd20aSAndroid Build Coastguard Workerconfig("sqlite_third_party_include_path") { 362*6dbdd20aSAndroid Build Coastguard Worker if (build_with_chromium) { 363*6dbdd20aSAndroid Build Coastguard Worker include_dirs = [ "//third_party/sqlite/dev" ] 364*6dbdd20aSAndroid Build Coastguard Worker } else { 365*6dbdd20aSAndroid Build Coastguard Worker include_dirs = [ "//third_party/sqlite" ] 366*6dbdd20aSAndroid Build Coastguard Worker } 367*6dbdd20aSAndroid Build Coastguard Worker} 368*6dbdd20aSAndroid Build Coastguard Worker 369*6dbdd20aSAndroid Build Coastguard Workerif (enable_perfetto_trace_processor_mac_instruments) { 370*6dbdd20aSAndroid Build Coastguard Worker group("expat") { 371*6dbdd20aSAndroid Build Coastguard Worker if (perfetto_root_path == "//") { 372*6dbdd20aSAndroid Build Coastguard Worker public_deps = [ "//buildtools:expat" ] 373*6dbdd20aSAndroid Build Coastguard Worker } else { 374*6dbdd20aSAndroid Build Coastguard Worker public_deps = [ "//third_party/expat:expat" ] 375*6dbdd20aSAndroid Build Coastguard Worker } 376*6dbdd20aSAndroid Build Coastguard Worker } 377*6dbdd20aSAndroid Build Coastguard Worker} 378*6dbdd20aSAndroid Build Coastguard Worker 379*6dbdd20aSAndroid Build Coastguard Workerif (enable_perfetto_trace_processor_json) { 380*6dbdd20aSAndroid Build Coastguard Worker group("jsoncpp") { 381*6dbdd20aSAndroid Build Coastguard Worker if (perfetto_root_path == "//") { 382*6dbdd20aSAndroid Build Coastguard Worker public_configs = [ "//buildtools:jsoncpp_config" ] 383*6dbdd20aSAndroid Build Coastguard Worker public_deps = [ "//buildtools:jsoncpp" ] 384*6dbdd20aSAndroid Build Coastguard Worker } else { 385*6dbdd20aSAndroid Build Coastguard Worker public_deps = [ "//third_party/jsoncpp:jsoncpp" ] 386*6dbdd20aSAndroid Build Coastguard Worker } 387*6dbdd20aSAndroid Build Coastguard Worker } 388*6dbdd20aSAndroid Build Coastguard Worker} 389*6dbdd20aSAndroid Build Coastguard Worker 390*6dbdd20aSAndroid Build Coastguard Workerif (enable_perfetto_grpc) { 391*6dbdd20aSAndroid Build Coastguard Worker group("grpc") { 392*6dbdd20aSAndroid Build Coastguard Worker public_configs = [ "//buildtools:grpc_public_config" ] 393*6dbdd20aSAndroid Build Coastguard Worker public_deps = [ "//buildtools/grpc:grpc++" ] 394*6dbdd20aSAndroid Build Coastguard Worker } 395*6dbdd20aSAndroid Build Coastguard Worker 396*6dbdd20aSAndroid Build Coastguard Worker group("cpp_httplib") { 397*6dbdd20aSAndroid Build Coastguard Worker public_deps = [ "//buildtools:cpp_httplib" ] 398*6dbdd20aSAndroid Build Coastguard Worker } 399*6dbdd20aSAndroid Build Coastguard Worker} 400*6dbdd20aSAndroid Build Coastguard Worker 401*6dbdd20aSAndroid Build Coastguard Workerif (enable_perfetto_trace_processor_linenoise) { 402*6dbdd20aSAndroid Build Coastguard Worker # Used by the trace_processor_shell for REPL history. 403*6dbdd20aSAndroid Build Coastguard Worker # Only available in standalone builds. 404*6dbdd20aSAndroid Build Coastguard Worker group("linenoise") { 405*6dbdd20aSAndroid Build Coastguard Worker public_deps = [ "//buildtools:linenoise" ] 406*6dbdd20aSAndroid Build Coastguard Worker } 407*6dbdd20aSAndroid Build Coastguard Worker} # if (enable_perfetto_trace_processor_linenoise) 408*6dbdd20aSAndroid Build Coastguard Worker 409*6dbdd20aSAndroid Build Coastguard Worker# Only used by src/profiling in standalone and android builds. 410*6dbdd20aSAndroid Build Coastguard Workerif (enable_perfetto_heapprofd || enable_perfetto_traced_perf) { 411*6dbdd20aSAndroid Build Coastguard Worker group("libunwindstack") { 412*6dbdd20aSAndroid Build Coastguard Worker public_configs = [ "//buildtools:libunwindstack_config" ] 413*6dbdd20aSAndroid Build Coastguard Worker public_deps = [ "//buildtools:libunwindstack" ] 414*6dbdd20aSAndroid Build Coastguard Worker } 415*6dbdd20aSAndroid Build Coastguard Worker} 416*6dbdd20aSAndroid Build Coastguard Worker 417*6dbdd20aSAndroid Build Coastguard Worker# Used by src/profiling/perf for perf_regs.h. 418*6dbdd20aSAndroid Build Coastguard Workerif (enable_perfetto_traced_perf) { 419*6dbdd20aSAndroid Build Coastguard Worker group("bionic_kernel_uapi_headers") { 420*6dbdd20aSAndroid Build Coastguard Worker public_configs = [ "//buildtools:bionic_kernel_uapi_headers" ] 421*6dbdd20aSAndroid Build Coastguard Worker } 422*6dbdd20aSAndroid Build Coastguard Worker} 423*6dbdd20aSAndroid Build Coastguard Worker 424*6dbdd20aSAndroid Build Coastguard Workerconfig("system_zlib_config") { 425*6dbdd20aSAndroid Build Coastguard Worker libs = [ "z" ] 426*6dbdd20aSAndroid Build Coastguard Worker} 427*6dbdd20aSAndroid Build Coastguard Worker 428*6dbdd20aSAndroid Build Coastguard Worker# Zlib is used both by trace_processor and by perfetto_cmd. 429*6dbdd20aSAndroid Build Coastguard Workerif (enable_perfetto_zlib) { 430*6dbdd20aSAndroid Build Coastguard Worker group("zlib") { 431*6dbdd20aSAndroid Build Coastguard Worker if (perfetto_use_system_zlib) { 432*6dbdd20aSAndroid Build Coastguard Worker public_configs = [ "//gn:system_zlib_config" ] 433*6dbdd20aSAndroid Build Coastguard Worker } else if (perfetto_root_path == "//") { 434*6dbdd20aSAndroid Build Coastguard Worker public_configs = [ "//buildtools:zlib_config" ] 435*6dbdd20aSAndroid Build Coastguard Worker public_deps = [ "//buildtools:zlib" ] 436*6dbdd20aSAndroid Build Coastguard Worker } else { 437*6dbdd20aSAndroid Build Coastguard Worker public_configs = [ "//third_party/zlib:zlib_config" ] 438*6dbdd20aSAndroid Build Coastguard Worker public_deps = [ "//third_party/zlib" ] 439*6dbdd20aSAndroid Build Coastguard Worker } 440*6dbdd20aSAndroid Build Coastguard Worker } 441*6dbdd20aSAndroid Build Coastguard Worker} 442*6dbdd20aSAndroid Build Coastguard Worker 443*6dbdd20aSAndroid Build Coastguard Workerif (enable_perfetto_llvm_demangle) { 444*6dbdd20aSAndroid Build Coastguard Worker group("llvm_demangle") { 445*6dbdd20aSAndroid Build Coastguard Worker public_deps = [ "//buildtools:llvm_demangle" ] 446*6dbdd20aSAndroid Build Coastguard Worker } 447*6dbdd20aSAndroid Build Coastguard Worker} 448*6dbdd20aSAndroid Build Coastguard Worker 449*6dbdd20aSAndroid Build Coastguard Worker# Allows overriding platform-specific functionality used by base at a 450*6dbdd20aSAndroid Build Coastguard Worker# build-system level. This allows e.g. different implementations of base 451*6dbdd20aSAndroid Build Coastguard Worker# functions in Google3. 452*6dbdd20aSAndroid Build Coastguard Workergroup("base_platform") { 453*6dbdd20aSAndroid Build Coastguard Worker public_deps = [ "../src/base:perfetto_base_default_platform" ] 454*6dbdd20aSAndroid Build Coastguard Worker} 455*6dbdd20aSAndroid Build Coastguard Worker 456*6dbdd20aSAndroid Build Coastguard Worker# Used by fuzzers. 457*6dbdd20aSAndroid Build Coastguard Workerif (enable_perfetto_fuzzers && use_libfuzzer) { 458*6dbdd20aSAndroid Build Coastguard Worker group("libfuzzer") { 459*6dbdd20aSAndroid Build Coastguard Worker assert(perfetto_root_path == "//") 460*6dbdd20aSAndroid Build Coastguard Worker public_deps = [ "//buildtools:libfuzzer" ] 461*6dbdd20aSAndroid Build Coastguard Worker } 462*6dbdd20aSAndroid Build Coastguard Worker} 463*6dbdd20aSAndroid Build Coastguard Worker 464*6dbdd20aSAndroid Build Coastguard Worker# Python libraries which need to be installed on the system 465*6dbdd20aSAndroid Build Coastguard Worker# or provided (for other build systems). 466*6dbdd20aSAndroid Build Coastguard Workerperfetto_py_library("pandas_py") { 467*6dbdd20aSAndroid Build Coastguard Worker} 468*6dbdd20aSAndroid Build Coastguard Workerperfetto_py_library("tp_vendor_py") { 469*6dbdd20aSAndroid Build Coastguard Worker} 470*6dbdd20aSAndroid Build Coastguard Workerperfetto_py_library("tp_resolvers_py") { 471*6dbdd20aSAndroid Build Coastguard Worker} 472*6dbdd20aSAndroid Build Coastguard Workerperfetto_py_library("protobuf_py") { 473*6dbdd20aSAndroid Build Coastguard Worker} 474*6dbdd20aSAndroid Build Coastguard Worker 475*6dbdd20aSAndroid Build Coastguard Workerif (enable_perfetto_etm_importer) { 476*6dbdd20aSAndroid Build Coastguard Worker group("open_csd") { 477*6dbdd20aSAndroid Build Coastguard Worker visibility = [ "//src/trace_processor/importers/etm:etm_impl" ] 478*6dbdd20aSAndroid Build Coastguard Worker public_deps = [ "//buildtools:open_csd" ] 479*6dbdd20aSAndroid Build Coastguard Worker } 480*6dbdd20aSAndroid Build Coastguard Worker} 481