xref: /aosp_15_r20/external/perfetto/src/tracing/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("../../gn/fuzzer.gni")
16*6dbdd20aSAndroid Build Coastguard Workerimport("../../gn/perfetto.gni")
17*6dbdd20aSAndroid Build Coastguard Workerimport("../../gn/test.gni")
18*6dbdd20aSAndroid Build Coastguard Worker
19*6dbdd20aSAndroid Build Coastguard Worker# Full version of the client API. Supports both the in-process backend and the
20*6dbdd20aSAndroid Build Coastguard Worker# system backend (on posix systems and if enabled by the enable_perfetto_ipc).
21*6dbdd20aSAndroid Build Coastguard Worker# The backends are designed to be dead-code-eliminated via linker's gc-section
22*6dbdd20aSAndroid Build Coastguard Worker# when not use. See comments in Tracing::Initialize() in tracing.h.
23*6dbdd20aSAndroid Build Coastguard Workergroup("client_api") {
24*6dbdd20aSAndroid Build Coastguard Worker  public_deps = [
25*6dbdd20aSAndroid Build Coastguard Worker    ":client_api_without_backends",
26*6dbdd20aSAndroid Build Coastguard Worker    ":in_process_backend",
27*6dbdd20aSAndroid Build Coastguard Worker    "../../gn:default_deps",
28*6dbdd20aSAndroid Build Coastguard Worker    "../../include/perfetto/tracing",
29*6dbdd20aSAndroid Build Coastguard Worker    "../../include/perfetto/tracing/core",
30*6dbdd20aSAndroid Build Coastguard Worker  ]
31*6dbdd20aSAndroid Build Coastguard Worker  if (enable_perfetto_ipc) {
32*6dbdd20aSAndroid Build Coastguard Worker    public_deps += [ ":system_backend" ]
33*6dbdd20aSAndroid Build Coastguard Worker  } else {
34*6dbdd20aSAndroid Build Coastguard Worker    public_deps += [ ":system_backend_fake" ]
35*6dbdd20aSAndroid Build Coastguard Worker  }
36*6dbdd20aSAndroid Build Coastguard Worker}
37*6dbdd20aSAndroid Build Coastguard Worker
38*6dbdd20aSAndroid Build Coastguard Worker# This target checks that the client API builds without backends. This is to
39*6dbdd20aSAndroid Build Coastguard Worker# check that no references to the backends are leaked from the implementation
40*6dbdd20aSAndroid Build Coastguard Worker# internals. In turn, this allows to dead-code-eliminate unused backends when
41*6dbdd20aSAndroid Build Coastguard Worker# using linker's gc-sections (or similar mechanism).
42*6dbdd20aSAndroid Build Coastguard Workerif (perfetto_build_standalone) {
43*6dbdd20aSAndroid Build Coastguard Worker  shared_library("client_api_no_backends_compile_test") {
44*6dbdd20aSAndroid Build Coastguard Worker    deps = [
45*6dbdd20aSAndroid Build Coastguard Worker      ":client_api_without_backends",
46*6dbdd20aSAndroid Build Coastguard Worker      ":platform_fake",
47*6dbdd20aSAndroid Build Coastguard Worker      "../../gn:default_deps",
48*6dbdd20aSAndroid Build Coastguard Worker    ]
49*6dbdd20aSAndroid Build Coastguard Worker  }
50*6dbdd20aSAndroid Build Coastguard Worker}
51*6dbdd20aSAndroid Build Coastguard Worker
52*6dbdd20aSAndroid Build Coastguard Worker# Separate target because the embedder might not want this.
53*6dbdd20aSAndroid Build Coastguard Workersource_set("platform_impl") {
54*6dbdd20aSAndroid Build Coastguard Worker  deps = [
55*6dbdd20aSAndroid Build Coastguard Worker    "../../gn:default_deps",
56*6dbdd20aSAndroid Build Coastguard Worker    "../../include/perfetto/tracing",
57*6dbdd20aSAndroid Build Coastguard Worker    "../base",
58*6dbdd20aSAndroid Build Coastguard Worker  ]
59*6dbdd20aSAndroid Build Coastguard Worker  sources = [
60*6dbdd20aSAndroid Build Coastguard Worker    "platform_posix.cc",
61*6dbdd20aSAndroid Build Coastguard Worker    "platform_windows.cc",
62*6dbdd20aSAndroid Build Coastguard Worker  ]
63*6dbdd20aSAndroid Build Coastguard Worker}
64*6dbdd20aSAndroid Build Coastguard Worker
65*6dbdd20aSAndroid Build Coastguard Worker# Fake platform that allows buiding the client lib on all OSes. You can only use
66*6dbdd20aSAndroid Build Coastguard Worker# those parts of the client lib that do not use the platform.
67*6dbdd20aSAndroid Build Coastguard Workersource_set("platform_fake") {
68*6dbdd20aSAndroid Build Coastguard Worker  deps = [
69*6dbdd20aSAndroid Build Coastguard Worker    "../../gn:default_deps",
70*6dbdd20aSAndroid Build Coastguard Worker    "../../include/perfetto/tracing",
71*6dbdd20aSAndroid Build Coastguard Worker  ]
72*6dbdd20aSAndroid Build Coastguard Worker  sources = [ "platform_fake.cc" ]
73*6dbdd20aSAndroid Build Coastguard Worker}
74*6dbdd20aSAndroid Build Coastguard Worker
75*6dbdd20aSAndroid Build Coastguard Worker# Code that both public headers and other non-public sources (e.g.
76*6dbdd20aSAndroid Build Coastguard Worker# src/tracing/core) need to depend on. It cannot be in the root :tracing target
77*6dbdd20aSAndroid Build Coastguard Worker# otherwise there would be a cyclic dependency because public itself needs to
78*6dbdd20aSAndroid Build Coastguard Worker# depend on tracing.
79*6dbdd20aSAndroid Build Coastguard Workersource_set("common") {
80*6dbdd20aSAndroid Build Coastguard Worker  deps = [
81*6dbdd20aSAndroid Build Coastguard Worker    "../../gn:default_deps",
82*6dbdd20aSAndroid Build Coastguard Worker    "../../include/perfetto/tracing",
83*6dbdd20aSAndroid Build Coastguard Worker  ]
84*6dbdd20aSAndroid Build Coastguard Worker  sources = [ "trace_writer_base.cc" ]
85*6dbdd20aSAndroid Build Coastguard Worker}
86*6dbdd20aSAndroid Build Coastguard Worker
87*6dbdd20aSAndroid Build Coastguard Worker# Base target for the client API. On its own doesn't provide any backend other
88*6dbdd20aSAndroid Build Coastguard Worker# than the unsupported one.
89*6dbdd20aSAndroid Build Coastguard Workersource_set("client_api_without_backends") {
90*6dbdd20aSAndroid Build Coastguard Worker  deps = [
91*6dbdd20aSAndroid Build Coastguard Worker    "../../include/perfetto/tracing/core",
92*6dbdd20aSAndroid Build Coastguard Worker    "../../protos/perfetto/common:zero",
93*6dbdd20aSAndroid Build Coastguard Worker    "../../protos/perfetto/config:cpp",
94*6dbdd20aSAndroid Build Coastguard Worker    "../../protos/perfetto/config/interceptors:cpp",
95*6dbdd20aSAndroid Build Coastguard Worker    "../../protos/perfetto/config/track_event:cpp",
96*6dbdd20aSAndroid Build Coastguard Worker    "../base",
97*6dbdd20aSAndroid Build Coastguard Worker    "core",
98*6dbdd20aSAndroid Build Coastguard Worker  ]
99*6dbdd20aSAndroid Build Coastguard Worker  public_deps = [
100*6dbdd20aSAndroid Build Coastguard Worker    "../../gn:default_deps",
101*6dbdd20aSAndroid Build Coastguard Worker    "../../include/perfetto/tracing",
102*6dbdd20aSAndroid Build Coastguard Worker  ]
103*6dbdd20aSAndroid Build Coastguard Worker  sources = [
104*6dbdd20aSAndroid Build Coastguard Worker    "console_interceptor.cc",
105*6dbdd20aSAndroid Build Coastguard Worker    "data_source.cc",
106*6dbdd20aSAndroid Build Coastguard Worker    "debug_annotation.cc",
107*6dbdd20aSAndroid Build Coastguard Worker    "event_context.cc",
108*6dbdd20aSAndroid Build Coastguard Worker    "interceptor.cc",
109*6dbdd20aSAndroid Build Coastguard Worker    "internal/checked_scope.cc",
110*6dbdd20aSAndroid Build Coastguard Worker    "internal/interceptor_trace_writer.cc",
111*6dbdd20aSAndroid Build Coastguard Worker    "internal/tracing_backend_fake.cc",
112*6dbdd20aSAndroid Build Coastguard Worker    "internal/tracing_muxer_fake.cc",
113*6dbdd20aSAndroid Build Coastguard Worker    "internal/tracing_muxer_fake.h",
114*6dbdd20aSAndroid Build Coastguard Worker    "internal/tracing_muxer_impl.cc",
115*6dbdd20aSAndroid Build Coastguard Worker    "internal/tracing_muxer_impl.h",
116*6dbdd20aSAndroid Build Coastguard Worker    "internal/track_event_internal.cc",
117*6dbdd20aSAndroid Build Coastguard Worker    "internal/track_event_interned_fields.cc",
118*6dbdd20aSAndroid Build Coastguard Worker    "platform.cc",
119*6dbdd20aSAndroid Build Coastguard Worker    "traced_value.cc",
120*6dbdd20aSAndroid Build Coastguard Worker    "tracing.cc",
121*6dbdd20aSAndroid Build Coastguard Worker    "tracing_policy.cc",
122*6dbdd20aSAndroid Build Coastguard Worker    "track.cc",
123*6dbdd20aSAndroid Build Coastguard Worker    "track_event_category_registry.cc",
124*6dbdd20aSAndroid Build Coastguard Worker    "track_event_legacy.cc",
125*6dbdd20aSAndroid Build Coastguard Worker    "track_event_state_tracker.cc",
126*6dbdd20aSAndroid Build Coastguard Worker    "virtual_destructors.cc",
127*6dbdd20aSAndroid Build Coastguard Worker  ]
128*6dbdd20aSAndroid Build Coastguard Worker  assert_no_deps = [ "service" ]
129*6dbdd20aSAndroid Build Coastguard Worker  if (enable_perfetto_ipc) {
130*6dbdd20aSAndroid Build Coastguard Worker    assert_no_deps += [
131*6dbdd20aSAndroid Build Coastguard Worker      "../ipc:common",
132*6dbdd20aSAndroid Build Coastguard Worker      "ipc/common",
133*6dbdd20aSAndroid Build Coastguard Worker    ]
134*6dbdd20aSAndroid Build Coastguard Worker  }
135*6dbdd20aSAndroid Build Coastguard Worker}
136*6dbdd20aSAndroid Build Coastguard Worker
137*6dbdd20aSAndroid Build Coastguard Worker# Separate target because the embedder might not want this.
138*6dbdd20aSAndroid Build Coastguard Workersource_set("integrationtests") {
139*6dbdd20aSAndroid Build Coastguard Worker  testonly = true
140*6dbdd20aSAndroid Build Coastguard Worker  deps = [
141*6dbdd20aSAndroid Build Coastguard Worker    "../../gn:default_deps",
142*6dbdd20aSAndroid Build Coastguard Worker    "../../gn:gtest_and_gmock",
143*6dbdd20aSAndroid Build Coastguard Worker    "../../include/perfetto/ext/tracing/ipc",
144*6dbdd20aSAndroid Build Coastguard Worker    "../../include/perfetto/tracing",
145*6dbdd20aSAndroid Build Coastguard Worker    "../../protos/perfetto/trace:cpp",
146*6dbdd20aSAndroid Build Coastguard Worker    "../base",
147*6dbdd20aSAndroid Build Coastguard Worker    "../base:test_support",
148*6dbdd20aSAndroid Build Coastguard Worker  ]
149*6dbdd20aSAndroid Build Coastguard Worker  sources = [ "internal/tracing_muxer_impl_integrationtest.cc" ]
150*6dbdd20aSAndroid Build Coastguard Worker}
151*6dbdd20aSAndroid Build Coastguard Worker
152*6dbdd20aSAndroid Build Coastguard Workerperfetto_unittest_source_set("unittests") {
153*6dbdd20aSAndroid Build Coastguard Worker  testonly = true
154*6dbdd20aSAndroid Build Coastguard Worker  deps = [
155*6dbdd20aSAndroid Build Coastguard Worker    "../../gn:default_deps",
156*6dbdd20aSAndroid Build Coastguard Worker    "../../gn:gtest_and_gmock",
157*6dbdd20aSAndroid Build Coastguard Worker    "../../protos/perfetto/trace:lite",
158*6dbdd20aSAndroid Build Coastguard Worker    "../../protos/perfetto/trace/track_event:lite",
159*6dbdd20aSAndroid Build Coastguard Worker    "../base",
160*6dbdd20aSAndroid Build Coastguard Worker    "../base:test_support",
161*6dbdd20aSAndroid Build Coastguard Worker    "test:test_support",
162*6dbdd20aSAndroid Build Coastguard Worker  ]
163*6dbdd20aSAndroid Build Coastguard Worker
164*6dbdd20aSAndroid Build Coastguard Worker  sources = []
165*6dbdd20aSAndroid Build Coastguard Worker
166*6dbdd20aSAndroid Build Coastguard Worker  # TODO(primiano): remove the build_with_chromium conditional once the root
167*6dbdd20aSAndroid Build Coastguard Worker  # //BUILD.gn:libperfetto (in chromium) stops adding tracing:platform_fake.
168*6dbdd20aSAndroid Build Coastguard Worker  # The problem is the following: in chrome builds we end up with duplicate
169*6dbdd20aSAndroid Build Coastguard Worker  # symbol definitions in the test because both platforms (impl and fake) are
170*6dbdd20aSAndroid Build Coastguard Worker  # present: impl added here and fake coming from chromium's base (full path:
171*6dbdd20aSAndroid Build Coastguard Worker  # perfetto_unittests -> //(chromium)base:test_support -> //(chromium)base
172*6dbdd20aSAndroid Build Coastguard Worker  # -> libperfetto -> platform_fake.
173*6dbdd20aSAndroid Build Coastguard Worker  if (!build_with_chromium) {
174*6dbdd20aSAndroid Build Coastguard Worker    deps += [
175*6dbdd20aSAndroid Build Coastguard Worker      ":client_api_without_backends",
176*6dbdd20aSAndroid Build Coastguard Worker      ":platform_impl",
177*6dbdd20aSAndroid Build Coastguard Worker    ]
178*6dbdd20aSAndroid Build Coastguard Worker
179*6dbdd20aSAndroid Build Coastguard Worker    sources += [
180*6dbdd20aSAndroid Build Coastguard Worker      "internal/interceptor_trace_writer_unittest.cc",
181*6dbdd20aSAndroid Build Coastguard Worker      "traced_proto_unittest.cc",
182*6dbdd20aSAndroid Build Coastguard Worker      "traced_value_unittest.cc",
183*6dbdd20aSAndroid Build Coastguard Worker    ]
184*6dbdd20aSAndroid Build Coastguard Worker  }
185*6dbdd20aSAndroid Build Coastguard Worker}
186*6dbdd20aSAndroid Build Coastguard Worker
187*6dbdd20aSAndroid Build Coastguard Worker# System backend: connects to an external "traced" instance via a UNIX socket.
188*6dbdd20aSAndroid Build Coastguard Worker# Requires the IPC layer and is supported only on posix systems.
189*6dbdd20aSAndroid Build Coastguard Workerif (enable_perfetto_ipc) {
190*6dbdd20aSAndroid Build Coastguard Worker  source_set("system_backend") {
191*6dbdd20aSAndroid Build Coastguard Worker    public_deps = [ "../../include/perfetto/tracing" ]
192*6dbdd20aSAndroid Build Coastguard Worker    deps = [
193*6dbdd20aSAndroid Build Coastguard Worker      ":client_api_without_backends",
194*6dbdd20aSAndroid Build Coastguard Worker      "../../gn:default_deps",
195*6dbdd20aSAndroid Build Coastguard Worker      "../../include/perfetto/tracing/core",
196*6dbdd20aSAndroid Build Coastguard Worker      "../base",
197*6dbdd20aSAndroid Build Coastguard Worker      "ipc:common",
198*6dbdd20aSAndroid Build Coastguard Worker      "ipc/producer",
199*6dbdd20aSAndroid Build Coastguard Worker      "ipc/service",
200*6dbdd20aSAndroid Build Coastguard Worker    ]
201*6dbdd20aSAndroid Build Coastguard Worker    if (enable_perfetto_system_consumer) {
202*6dbdd20aSAndroid Build Coastguard Worker      deps += [ "ipc/consumer" ]
203*6dbdd20aSAndroid Build Coastguard Worker    }
204*6dbdd20aSAndroid Build Coastguard Worker    sources = [ "internal/system_tracing_backend.cc" ]
205*6dbdd20aSAndroid Build Coastguard Worker  }
206*6dbdd20aSAndroid Build Coastguard Worker} else {
207*6dbdd20aSAndroid Build Coastguard Worker  source_set("system_backend_fake") {
208*6dbdd20aSAndroid Build Coastguard Worker    public_deps = [ "../../include/perfetto/tracing" ]
209*6dbdd20aSAndroid Build Coastguard Worker    deps = [
210*6dbdd20aSAndroid Build Coastguard Worker      "../../gn:default_deps",
211*6dbdd20aSAndroid Build Coastguard Worker      "../base",
212*6dbdd20aSAndroid Build Coastguard Worker    ]
213*6dbdd20aSAndroid Build Coastguard Worker    sources = [ "internal/system_tracing_backend_fake.cc" ]
214*6dbdd20aSAndroid Build Coastguard Worker  }
215*6dbdd20aSAndroid Build Coastguard Worker}
216*6dbdd20aSAndroid Build Coastguard Worker
217*6dbdd20aSAndroid Build Coastguard Worker# In-process backend: starts the tracing service in-process on a dedicated
218*6dbdd20aSAndroid Build Coastguard Worker# thread. It depends only on having a valid "platform" target. It has a larger
219*6dbdd20aSAndroid Build Coastguard Worker# binary size cost because links in all the service code.
220*6dbdd20aSAndroid Build Coastguard Workersource_set("in_process_backend") {
221*6dbdd20aSAndroid Build Coastguard Worker  public_deps = [ "../../include/perfetto/tracing" ]
222*6dbdd20aSAndroid Build Coastguard Worker  deps = [
223*6dbdd20aSAndroid Build Coastguard Worker    ":client_api_without_backends",
224*6dbdd20aSAndroid Build Coastguard Worker    "../../gn:default_deps",
225*6dbdd20aSAndroid Build Coastguard Worker    "../../include/perfetto/tracing/core",
226*6dbdd20aSAndroid Build Coastguard Worker    "../base",
227*6dbdd20aSAndroid Build Coastguard Worker    "core",
228*6dbdd20aSAndroid Build Coastguard Worker    "service",
229*6dbdd20aSAndroid Build Coastguard Worker  ]
230*6dbdd20aSAndroid Build Coastguard Worker  sources = [ "internal/in_process_tracing_backend.cc" ]
231*6dbdd20aSAndroid Build Coastguard Worker}
232*6dbdd20aSAndroid Build Coastguard Worker
233*6dbdd20aSAndroid Build Coastguard Workerif (enable_perfetto_benchmarks) {
234*6dbdd20aSAndroid Build Coastguard Worker  source_set("benchmarks") {
235*6dbdd20aSAndroid Build Coastguard Worker    testonly = true
236*6dbdd20aSAndroid Build Coastguard Worker    deps = [
237*6dbdd20aSAndroid Build Coastguard Worker      ":platform_impl",
238*6dbdd20aSAndroid Build Coastguard Worker      "../..:libperfetto_client_experimental",
239*6dbdd20aSAndroid Build Coastguard Worker      "../../gn:benchmark",
240*6dbdd20aSAndroid Build Coastguard Worker      "../../gn:default_deps",
241*6dbdd20aSAndroid Build Coastguard Worker    ]
242*6dbdd20aSAndroid Build Coastguard Worker    sources = [ "api_benchmark.cc" ]
243*6dbdd20aSAndroid Build Coastguard Worker  }
244*6dbdd20aSAndroid Build Coastguard Worker}
245