blob: b0bdbd72b4e1d5a424ef88e65459c96ff24a6a69 [file] [log] [blame]
Sami Kyostila2357b032017-12-06 18:38:17 +00001/*
2 * Copyright (C) 2017 The Android Open Source Project
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
17cc_defaults {
18 name: "perfetto_defaults",
19 local_include_dirs: [ "include" ],
20}
21
22///////////////////////////////////////////////////////////////////////////////
23// base
24///////////////////////////////////////////////////////////////////////////////
25
26filegroup {
27 name: "perfetto_base",
28 srcs: [
29 "src/base/android_task_runner.cc",
30 "src/base/thread_checker.cc",
31 "src/base/unix_task_runner.cc",
32 ]
33}
34
35filegroup {
36 name: "perfetto_base_test_support",
37 srcs: [
38 "src/base/test/test_task_runner.cc",
39 ]
40}
41
42///////////////////////////////////////////////////////////////////////////////
43// protozero
44///////////////////////////////////////////////////////////////////////////////
45
46// TODO(skyostil): Don't hardcode external/perfetto.
47protoc_cmd = "mkdir -p $(genDir)/external/perfetto && "
48protoc_cmd += "$(location) --cpp_out=$(genDir)/external/perfetto "
49protoc_cmd += "--proto_path=external/perfetto $(in)"
50
51protozeroc_cmd = "mkdir -p $(genDir)/external/perfetto && "
52protozeroc_cmd += "$(location) --plugin=protoc-gen-plugin="
53protozeroc_cmd += "$(location protozero_protoc_plugin) "
54protozeroc_cmd += "--plugin_out=wrapper_namespace="
55protozeroc_cmd += "pbzero:$(genDir)/external/perfetto "
56protozeroc_cmd += "--proto_path=external/perfetto $(in)"
57
58cc_defaults {
59 name: "protozero_defaults",
60 defaults: [ "perfetto_defaults" ],
61 cflags: [
62 "-Wno-error=return-type",
63 "-Wno-sign-compare",
64 "-Wno-sign-promo",
65 "-Wno-unused-parameter",
66 ]
67}
68
69filegroup {
70 name: "protozero",
71 srcs: [
72 "src/protozero/proto_utils.cc",
73 "src/protozero/protozero_message.cc",
74 "src/protozero/protozero_message_handle.cc",
75 "src/protozero/scattered_stream_writer.cc",
76 ]
77}
78
79cc_binary_host {
80 name: "protozero_protoc_plugin",
81 defaults: [ "protozero_defaults" ],
82 srcs: [
83 "src/protozero/protoc_plugin/protozero_generator.cc",
84 "src/protozero/protoc_plugin/protozero_plugin.cc",
85 ],
86 shared_libs: [ "libprotoc" ],
87}
88
89filegroup {
90 name: "protozero_testing_messages",
91 srcs: [
92 "src/protozero/test/example_proto/library.proto",
93 "src/protozero/test/example_proto/library_internals/galaxies.proto",
94 "src/protozero/test/example_proto/test_messages.proto",
95 "src/protozero/test/example_proto/upper_import.proto",
96 ]
97}
98
99// Each proto set gets a pair of genrules: one of the sources and one for the
100// headers. This is because a "srcs" entry which depends on a genrule that
101// generates a .h file causes an error since soong isn't expecting to compile a
102// header.
103// TODO(skyostil): End this insanity.
104cc_genrule {
105 name: "protozero_testing_messages_lite",
106 tools: [ "aprotoc" ],
107 srcs: [ ":protozero_testing_messages" ],
108 cmd: protoc_cmd,
109 out: [
110 "external/perfetto/src/protozero/test/example_proto/library.pb.cc",
111 "external/perfetto/src/protozero/test/example_proto/library_internals/galaxies.pb.cc",
112 "external/perfetto/src/protozero/test/example_proto/test_messages.pb.cc",
113 "external/perfetto/src/protozero/test/example_proto/upper_import.pb.cc",
114 ]
115}
116
117cc_genrule {
118 name: "protozero_testing_messages_lite_headers",
119 tools: [ "aprotoc" ],
120 srcs: [ ":protozero_testing_messages" ],
121 cmd: protoc_cmd,
122 export_include_dirs: [ "." ],
123 out: [
124 "external/perfetto/src/protozero/test/example_proto/library.pb.h",
125 "external/perfetto/src/protozero/test/example_proto/library_internals/galaxies.pb.h",
126 "external/perfetto/src/protozero/test/example_proto/test_messages.pb.h",
127 "external/perfetto/src/protozero/test/example_proto/upper_import.pb.h",
128 ]
129}
130
131cc_genrule {
132 name: "protozero_testing_messages_zero",
133 tools: [ "aprotoc", "protozero_protoc_plugin" ],
134 srcs: [ ":protozero_testing_messages" ],
135 cmd: protozeroc_cmd,
136 out: [
137 "external/perfetto/src/protozero/test/example_proto/library.pbzero.cc",
138 "external/perfetto/src/protozero/test/example_proto/library_internals/galaxies.pbzero.cc",
139 "external/perfetto/src/protozero/test/example_proto/test_messages.pbzero.cc",
140 "external/perfetto/src/protozero/test/example_proto/upper_import.pbzero.cc",
141 ]
142}
143
144cc_genrule {
145 name: "protozero_testing_messages_zero_headers",
146 tools: [ "aprotoc", "protozero_protoc_plugin" ],
147 srcs: [ ":protozero_testing_messages" ],
148 cmd: protozeroc_cmd,
149 export_include_dirs: [ "." ],
150 out: [
151 "external/perfetto/src/protozero/test/example_proto/library.pbzero.h",
152 "external/perfetto/src/protozero/test/example_proto/library_internals/galaxies.pbzero.h",
153 "external/perfetto/src/protozero/test/example_proto/test_messages.pbzero.h",
154 "external/perfetto/src/protozero/test/example_proto/upper_import.pbzero.h",
155 ]
156}
157
158///////////////////////////////////////////////////////////////////////////////
159// protos
160///////////////////////////////////////////////////////////////////////////////
161
162filegroup {
163 name: "perfetto_messages",
164 srcs: [
165 "protos/ftrace/ftrace_event.proto",
166 "protos/ftrace/ftrace_event_bundle.proto",
167 "protos/ftrace/print.proto",
168 "protos/ftrace/sched_switch.proto",
169 "protos/ftrace/test_bundle_wrapper.proto",
170 "protos/trace_packet.proto",
171 ]
172}
173
174cc_genrule {
175 name: "perfetto_messages_lite",
176 tools: [ "aprotoc" ],
177 srcs: [ ":perfetto_messages" ],
178 cmd: protoc_cmd,
179 out: [
180 "external/perfetto/protos/ftrace/ftrace_event.pb.cc",
181 "external/perfetto/protos/ftrace/ftrace_event_bundle.pb.cc",
182 "external/perfetto/protos/ftrace/print.pb.cc",
183 "external/perfetto/protos/ftrace/sched_switch.pb.cc",
184 "external/perfetto/protos/ftrace/test_bundle_wrapper.pb.cc",
185 "external/perfetto/protos/trace_packet.pb.cc",
186 ]
187}
188
189cc_genrule {
190 name: "perfetto_messages_lite_headers",
191 tools: [ "aprotoc" ],
192 srcs: [ ":perfetto_messages" ],
193 cmd: protoc_cmd,
194 export_include_dirs: [ "." ],
195 out: [
196 "external/perfetto/protos/ftrace/ftrace_event.pb.h",
197 "external/perfetto/protos/ftrace/ftrace_event_bundle.pb.h",
198 "external/perfetto/protos/ftrace/print.pb.h",
199 "external/perfetto/protos/ftrace/sched_switch.pb.h",
200 "external/perfetto/protos/ftrace/test_bundle_wrapper.pb.h",
201 "external/perfetto/protos/trace_packet.pb.h",
202 ]
203}
204
205cc_genrule {
206 name: "perfetto_messages_zero",
207 tools: [ "aprotoc", "protozero_protoc_plugin" ],
208 srcs: [ ":perfetto_messages" ],
209 cmd: protozeroc_cmd,
210 out: [
211 "external/perfetto/protos/ftrace/ftrace_event.pbzero.cc",
212 "external/perfetto/protos/ftrace/ftrace_event_bundle.pbzero.cc",
213 "external/perfetto/protos/ftrace/print.pbzero.cc",
214 "external/perfetto/protos/ftrace/sched_switch.pbzero.cc",
215 "external/perfetto/protos/ftrace/test_bundle_wrapper.pbzero.cc",
216 "external/perfetto/protos/trace_packet.pbzero.cc",
217 ]
218}
219
220cc_genrule {
221 name: "perfetto_messages_zero_headers",
222 tools: [ "aprotoc", "protozero_protoc_plugin" ],
223 srcs: [ ":perfetto_messages" ],
224 cmd: protozeroc_cmd,
225 export_include_dirs: [ "." ],
226 out: [
227 "external/perfetto/protos/ftrace/ftrace_event.pbzero.h",
228 "external/perfetto/protos/ftrace/ftrace_event_bundle.pbzero.h",
229 "external/perfetto/protos/ftrace/print.pbzero.h",
230 "external/perfetto/protos/ftrace/sched_switch.pbzero.h",
231 "external/perfetto/protos/ftrace/test_bundle_wrapper.pbzero.h",
232 "external/perfetto/protos/trace_packet.pbzero.h",
233 ]
234}
235
236///////////////////////////////////////////////////////////////////////////////
237// ftrace
238///////////////////////////////////////////////////////////////////////////////
239
240cc_defaults {
241 name: "perfetto_ftrace_defaults",
242 defaults: [ "perfetto_defaults" ],
243 cflags: [
244 // TODO(skyostil): Fix the code instead.
245 "-Wno-missing-field-initializers",
246 ]
247}
248
249// TODO(skyostil): Add full protobufs (as opposed to lite) for this test.
250//cc_test {
251// name: "perfetto_ftrace_reader_integrationtests",
252// defaults: [
253// "perfetto_ftrace_defaults",
254// "protozero_defaults"
255// ],
256// generated_headers: [
257// "perfetto_messages_lite_headers",
258// "perfetto_messages_zero_headers",
259// ],
260// shared_libs: [
261// "libprotobuf-cpp-lite"
262// ],
263// static_libs: [
264// "libgmock"
265// ],
266// srcs: [
267// ":perfetto_ftrace_reader",
268// ":perfetto_messages_lite",
269// ":perfetto_messages_zero",
270// ":protozero",
271// "ftrace_reader/src/end_to_end_integrationtest.cc",
272// "ftrace_reader/src/ftrace_procfs_integrationtest.cc",
273// ]
274//}
275
276cc_test {
277 name: "perfetto_ftrace_reader_demo",
278 defaults: [
279 "perfetto_ftrace_defaults",
280 "protozero_defaults",
281 ],
282 generated_headers: [
283 "perfetto_messages_lite_headers",
284 "perfetto_messages_zero_headers",
285 ],
286 shared_libs: [
287 "libprotobuf-cpp-lite"
288 ],
289 srcs: [
290 ":perfetto_base",
291 ":perfetto_base_test_support",
292 ":perfetto_ftrace_reader",
293 ":perfetto_messages_lite",
294 ":perfetto_messages_zero",
295 ":protozero",
296 "src/ftrace_reader/main.cc",
297 "src/ftrace_reader/test/scattered_stream_delegate_for_testing.cc",
298 ]
299}
300
301filegroup {
302 name: "perfetto_ftrace_reader",
303 srcs: [
304 "src/ftrace_reader/cpu_reader.cc",
305 "src/ftrace_reader/format_parser.cc",
306 "src/ftrace_reader/ftrace_controller.cc",
307 "src/ftrace_reader/ftrace_procfs.cc",
308 "src/ftrace_reader/ftrace_to_proto.cc",
309 "src/ftrace_reader/proto_translation_table.cc",
310 ]
311}
312
313///////////////////////////////////////////////////////////////////////////////
314// ipc
315///////////////////////////////////////////////////////////////////////////////
316
317ipcc_cmd = "mkdir -p $(genDir)/external/perfetto && "
318ipcc_cmd += "$(location) "
319ipcc_cmd += "--plugin=protoc-gen-plugin=$(location perfetto_ipc_protoc_plugin) "
320ipcc_cmd += "--cpp_out=$(genDir)/external/perfetto "
321ipcc_cmd += "--proto_path=external/perfetto "
322ipcc_cmd += "--plugin_out=$(genDir)/external/perfetto $(in)"
323
324cc_defaults {
325 name: "perfetto_ipc_defaults",
326 defaults: [ "perfetto_defaults" ],
327 cflags: [
328 // TODO(skyostil): Fix.
329 "-Wno-missing-field-initializers",
330 "-Wno-sign-compare",
331 "-Wno-unused-parameter",
332 ]
333}
334
335cc_binary_host {
336 name: "perfetto_ipc_protoc_plugin",
337 defaults: [ "perfetto_ipc_defaults" ],
338 srcs: [
339 "src/ipc/protoc_plugin/ipc_generator.cc",
340 "src/ipc/protoc_plugin/ipc_plugin.cc",
341 ],
342 cflags: [
343 "-Wno-unused-parameter",
344 ],
345 shared_libs: [ "libprotoc" ],
346}
347
348filegroup {
349 name: "perfetto_ipc",
350 srcs: [
351 "src/ipc/buffered_frame_deserializer.cc",
352 "src/ipc/client_impl.cc",
353 "src/ipc/deferred.cc",
354 "src/ipc/host_impl.cc",
355 "src/ipc/service_proxy.cc",
356 "src/ipc/unix_socket.cc",
357 ]
358}
359
360filegroup {
361 name: "perfetto_ipc_messages",
362 srcs: [
363 "src/ipc/wire_protocol.proto",
364 ]
365}
366
367cc_genrule {
368 name: "perfetto_ipc_messages_lite",
369 tools: [ "aprotoc" ],
370 srcs: [ ":perfetto_ipc_messages" ],
371 cmd: protoc_cmd,
372 out: [
373 "external/perfetto/src/ipc/wire_protocol.pb.cc",
374 ]
375}
376
377cc_genrule {
378 name: "perfetto_ipc_messages_lite_headers",
379 tools: [ "aprotoc" ],
380 srcs: [ ":perfetto_ipc_messages" ],
381 cmd: protoc_cmd,
382 export_include_dirs: [ "." ],
383 out: [
384 "external/perfetto/src/ipc/wire_protocol.pb.h",
385 ]
386}
387
388filegroup {
389 name: "perfetto_ipc_test_messages",
390 srcs: [
391 "src/ipc/test/client_unittest_messages.proto",
392 "src/ipc/test/deferred_unittest_messages.proto",
393 "src/ipc/test/greeter_service.proto",
394 ]
395}
396
397cc_genrule {
398 name: "perfetto_ipc_test_messages_ipc",
399 tools: [ "aprotoc", "perfetto_ipc_protoc_plugin" ],
400 srcs: [ ":perfetto_ipc_test_messages" ],
401 cmd: ipcc_cmd,
402 out: [
403 "external/perfetto/src/ipc/test/client_unittest_messages.ipc.cc",
404 "external/perfetto/src/ipc/test/client_unittest_messages.pb.cc",
405 "external/perfetto/src/ipc/test/deferred_unittest_messages.ipc.cc",
406 "external/perfetto/src/ipc/test/deferred_unittest_messages.pb.cc",
407 "external/perfetto/src/ipc/test/greeter_service.ipc.cc",
408 "external/perfetto/src/ipc/test/greeter_service.pb.cc",
409 ]
410}
411
412cc_genrule {
413 name: "perfetto_ipc_test_messages_ipc_headers",
414 tools: [ "aprotoc", "perfetto_ipc_protoc_plugin" ],
415 srcs: [ ":perfetto_ipc_test_messages" ],
416 cmd: ipcc_cmd,
417 export_include_dirs: [ "." ],
418 out: [
419 "external/perfetto/src/ipc/test/client_unittest_messages.ipc.h",
420 "external/perfetto/src/ipc/test/client_unittest_messages.pb.h",
421 "external/perfetto/src/ipc/test/deferred_unittest_messages.ipc.h",
422 "external/perfetto/src/ipc/test/deferred_unittest_messages.pb.h",
423 "external/perfetto/src/ipc/test/greeter_service.ipc.h",
424 "external/perfetto/src/ipc/test/greeter_service.pb.h",
425 ]
426}
427
428///////////////////////////////////////////////////////////////////////////////
429// tracing
430///////////////////////////////////////////////////////////////////////////////
431
432filegroup {
433 name: "perfetto_tracing",
434 srcs: [
435 "src/tracing/core/service_impl.cc",
436 ]
437}
438
439filegroup {
440 name: "perfetto_tracing_messages",
441 srcs: [
442 "src/tracing/ipc/data_source_config.proto",
443 "src/tracing/ipc/data_source_descriptor.proto",
444 "src/tracing/ipc/producer_port.proto",
445 ]
446}
447
448cc_genrule {
449 name: "perfetto_tracing_messages_lite",
450 tools: [ "aprotoc", "perfetto_ipc_protoc_plugin" ],
451 srcs: [ ":perfetto_tracing_messages" ],
452 cmd: ipcc_cmd,
453 out: [
454 "external/perfetto/src/tracing/ipc/data_source_config.ipc.cc",
455 "external/perfetto/src/tracing/ipc/data_source_config.pb.cc",
456 "external/perfetto/src/tracing/ipc/data_source_descriptor.ipc.cc",
457 "external/perfetto/src/tracing/ipc/data_source_descriptor.pb.cc",
458 "external/perfetto/src/tracing/ipc/producer_port.ipc.cc",
459 "external/perfetto/src/tracing/ipc/producer_port.pb.cc",
460 ]
461}
462
463cc_genrule {
464 name: "perfetto_tracing_messages_lite_headers",
465 tools: [ "aprotoc", "perfetto_ipc_protoc_plugin" ],
466 srcs: [ ":perfetto_tracing_messages" ],
467 cmd: ipcc_cmd,
468 export_include_dirs: [ "." ],
469 out: [
470 "external/perfetto/src/tracing/ipc/data_source_config.ipc.h",
471 "external/perfetto/src/tracing/ipc/data_source_config.pb.h",
472 "external/perfetto/src/tracing/ipc/data_source_descriptor.ipc.h",
473 "external/perfetto/src/tracing/ipc/data_source_descriptor.pb.h",
474 "external/perfetto/src/tracing/ipc/producer_port.ipc.h",
475 "external/perfetto/src/tracing/ipc/producer_port.pb.h",
476 ]
477}
478
479filegroup {
480 name: "perfetto_tracing_ipc",
481 srcs: [
482 "src/tracing/ipc/posix_shared_memory.cc",
483 "src/tracing/ipc/producer/producer_ipc_client_impl.cc",
484 "src/tracing/ipc/service/producer_ipc_service.cc",
485 "src/tracing/ipc/service/service_ipc_host_impl.cc",
486 ]
487}
488
489///////////////////////////////////////////////////////////////////////////////
490// tests and benchmarks
491///////////////////////////////////////////////////////////////////////////////
492
493cc_test {
494 name: "perfetto_tests",
495 defaults: [
496 "perfetto_defaults",
497 "perfetto_ftrace_defaults",
498 "perfetto_ipc_defaults",
499 "protozero_defaults",
500 ],
501 srcs: [
502 ":perfetto_base",
503 ":perfetto_base_test_support",
504 ":perfetto_ftrace_reader",
505 ":perfetto_ipc",
506 ":perfetto_ipc_messages_lite",
507 ":perfetto_ipc_test_messages_ipc",
508 ":perfetto_messages_lite",
509 ":perfetto_messages_zero",
510 ":perfetto_tracing",
511 ":perfetto_tracing_ipc",
512 ":perfetto_tracing_messages_lite",
513 ":protozero",
514 ":protozero_testing_messages_lite",
515 ":protozero_testing_messages_zero",
516 "src/base/scoped_file_unittest.cc",
517 "src/base/task_runner_unittest.cc",
518 "src/base/thread_checker_unittest.cc",
519 "src/base/utils_unittest.cc",
520 "src/base/weak_ptr_unittest.cc",
521 "src/ftrace_reader/cpu_reader_unittest.cc",
522 "src/ftrace_reader/format_parser_unittest.cc",
523 "src/ftrace_reader/ftrace_controller_unittest.cc",
524 "src/ftrace_reader/ftrace_to_proto_unittest.cc",
525 "src/ftrace_reader/proto_translation_table_unittest.cc",
526 "src/ftrace_reader/test/scattered_stream_delegate_for_testing.cc",
527 "src/ipc/buffered_frame_deserializer_unittest.cc",
528 "src/ipc/client_impl_unittest.cc",
529 "src/ipc/deferred_unittest.cc",
530 "src/ipc/host_impl_unittest.cc",
531 "src/ipc/test/ipc_integrationtest.cc",
532 "src/ipc/unix_socket_unittest.cc",
533 "src/protozero/proto_utils_unittest.cc",
534 "src/protozero/protozero_message_unittest.cc",
535 "src/protozero/scattered_stream_writer_unittest.cc",
536 "src/protozero/test/fake_scattered_buffer.cc",
537 "src/protozero/test/protozero_conformance_unittest.cc",
538 "src/tracing/core/service_impl_unittest.cc",
539 "src/tracing/ipc/posix_shared_memory_unittest.cc",
540 "src/tracing/test/test_shared_memory.cc",
541 ],
542 generated_headers: [
543 "perfetto_ipc_messages_lite_headers",
544 "perfetto_ipc_test_messages_ipc_headers",
545 "perfetto_messages_lite_headers",
546 "perfetto_messages_zero_headers",
547 "perfetto_tracing_messages_lite_headers",
548 "protozero_testing_messages_lite_headers",
549 "protozero_testing_messages_zero_headers",
550 ],
551 shared_libs: [
552 "libandroid",
553 "libprotobuf-cpp-lite"
554 ],
555 static_libs: [
556 "libgmock"
557 ],
558}
559
560cc_benchmark {
561 name: "perfetto_benchmarks",
562 defaults: [ "perfetto_defaults" ],
563 srcs: [
564 "src/tracing/test/hello_world_benchmark.cc",
565 ]
566}