xref: /aosp_15_r20/external/perfetto/gn/BUILD.gn (revision 6dbdd20afdafa5e3ca9b8809fa73465d530080dc)
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