| # Copyright (C) 2017 The Android Open Source Project | |
| # | |
| # Licensed under the Apache License, Version 2.0 (the "License"); | |
| # you may not use this file except in compliance with the License. | |
| # You may obtain a copy of the License at | |
| # | |
| # http://www.apache.org/licenses/LICENSE-2.0 | |
| # | |
| # Unless required by applicable law or agreed to in writing, software | |
| # distributed under the License is distributed on an "AS IS" BASIS, | |
| # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |
| # See the License for the specific language governing permissions and | |
| # limitations under the License. | |
| import("../../gn/fuzzer.gni") | |
| import("../../gn/perfetto.gni") | |
| import("../../gn/perfetto_component.gni") | |
| import("../../gn/proto_library.gni") | |
| import("../../gn/test.gni") | |
| # This build file should not be leaked into all embedders. Only select | |
| # projects should be depending on our IPC layer. | |
| assert(enable_perfetto_ipc) | |
| if (perfetto_component_type == "static_library") { | |
| # In build generators everything else outside should just depend on the | |
| # :perfetto_ipc static library (at the end of this file) rather than | |
| # individual sub-targets. | |
| _ipc_visibility = [ ":*" ] # Only targets defined in this file. | |
| } else { | |
| _ipc_visibility = [ "*" ] # Default visibility. | |
| } | |
| source_set("client") { | |
| public_deps = [ | |
| "../../include/perfetto/ext/ipc", | |
| "../base:unix_socket", | |
| ] | |
| deps = [ | |
| ":common", | |
| "../../gn:default_deps", | |
| "../../protos/perfetto/ipc:wire_protocol_cpp", | |
| "../base", | |
| ] | |
| sources = [ | |
| "client_impl.cc", | |
| "client_impl.h", | |
| "service_proxy.cc", | |
| ] | |
| visibility = _ipc_visibility | |
| } | |
| source_set("host") { | |
| public_deps = [ | |
| "../../include/perfetto/ext/ipc", | |
| "../base:unix_socket", | |
| ] | |
| deps = [ | |
| ":common", | |
| "../../gn:default_deps", | |
| "../../protos/perfetto/ipc:wire_protocol_cpp", | |
| "../base", | |
| ] | |
| sources = [ | |
| "host_impl.cc", | |
| "host_impl.h", | |
| ] | |
| visibility = _ipc_visibility | |
| } | |
| source_set("common") { | |
| public_deps = [ | |
| "../../include/perfetto/ext/ipc", | |
| "../../protos/perfetto/ipc:wire_protocol_cpp", | |
| ] | |
| deps = [ | |
| "../../gn:default_deps", | |
| "../base", | |
| ] | |
| sources = [ | |
| "buffered_frame_deserializer.cc", | |
| "buffered_frame_deserializer.h", | |
| "deferred.cc", | |
| "virtual_destructors.cc", | |
| ] | |
| visibility = _ipc_visibility | |
| } | |
| perfetto_fuzzer_test("buffered_frame_deserializer_fuzzer") { | |
| sources = [ "buffered_frame_deserializer_fuzzer.cc" ] | |
| deps = [ | |
| ":common", | |
| "../../gn:default_deps", | |
| "../../protos/perfetto/ipc:wire_protocol_cpp", | |
| "../base", | |
| ] | |
| } | |
| perfetto_unittest_source_set("unittests") { | |
| testonly = true | |
| deps = [ | |
| ":client", | |
| ":common", | |
| ":host", | |
| ":test_messages_cpp", | |
| ":test_messages_ipc", | |
| "../../gn:default_deps", | |
| "../../gn:gtest_and_gmock", | |
| "../../protos/perfetto/ipc:wire_protocol_cpp", | |
| "../base", | |
| "../base:test_support", | |
| ] | |
| sources = [ | |
| "buffered_frame_deserializer_unittest.cc", | |
| "client_impl_unittest.cc", | |
| "deferred_unittest.cc", | |
| "host_impl_unittest.cc", | |
| "test/ipc_integrationtest.cc", | |
| ] | |
| } | |
| perfetto_proto_library("test_messages_@TYPE@") { | |
| proto_generators = [ | |
| "ipc", | |
| "zero", | |
| "cpp", | |
| ] | |
| sources = [ | |
| "test/client_unittest_messages.proto", | |
| "test/deferred_unittest_messages.proto", | |
| "test/greeter_service.proto", | |
| ] | |
| } | |
| # This is used by Bazel BUILD rules. The problem it solves is the following: | |
| # In GN builds we want to keep client and host separate. This allows reducing | |
| # the binary size by splitting targets all the way up to the client library | |
| # (libperfetto_client_experimental). In bazel/blaze we fuse everything together | |
| # because handling this split is too complex due to the lack of a | |
| # source_set-equivalent. | |
| perfetto_component("perfetto_ipc") { | |
| public_deps = [ | |
| ":client", | |
| ":common", | |
| ":host", | |
| "../../gn:default_deps", | |
| ] | |
| } |