blob: e8db554ad6d0d66a4544fe7695ce404489cb13a9 [file] [log] [blame]
# 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("//build_overrides/build.gni")
import("../../gn/gen_perfetto_version_header.gni")
import("../../gn/perfetto.gni")
import("../../gn/perfetto_component.gni")
import("../../gn/test.gni")
import("../../gn/wasm.gni")
# On standalone builds this is all the OSes we support. On chromium builds,
# though, this really means !is_fuchsia && !is_nacl.
_subprocess_supported =
is_linux || is_chromeos || is_android || is_mac || is_win
perfetto_component("base") {
deps = [
"../../gn:base_platform",
"../../gn:default_deps",
]
public_deps = [
"../../include/perfetto/base",
"../../include/perfetto/ext/base",
]
sources = [
"android_utils.cc",
"base64.cc",
"crash_keys.cc",
"ctrl_c_handler.cc",
"event_fd.cc",
"file_utils.cc",
"getopt_compat.cc",
"log_ring_buffer.h",
"logging.cc",
"metatrace.cc",
"paged_memory.cc",
"periodic_task.cc",
"pipe.cc",
"status.cc",
"string_splitter.cc",
"string_utils.cc",
"string_view.cc",
"temp_file.cc",
"thread_checker.cc",
"thread_utils.cc",
"time.cc",
"utils.cc",
"uuid.cc",
"virtual_destructors.cc",
"waitable_event.cc",
"watchdog_posix.cc",
]
if (!is_nacl) {
sources += [
"thread_task_runner.cc",
"unix_task_runner.cc",
]
}
if (_subprocess_supported) {
sources += [
"subprocess.cc",
"subprocess_posix.cc",
"subprocess_windows.cc",
]
}
if (enable_perfetto_stderr_crash_dump) {
deps += [ ":debug_crash_stack_trace" ]
}
}
# This target needs to be named as such because it's exposed directly in Bazel
# and Android.bp.
perfetto_component("perfetto_base_default_platform") {
deps = [
"../../gn:default_deps",
"../../include/perfetto/ext/base",
]
sources = [ "default_platform.cc" ]
}
perfetto_component("version") {
deps = [
":base",
"../../gn:default_deps",
]
public_deps = [ "../../include/perfetto/ext/base:version" ]
sources = [ "version.cc" ]
if (enable_perfetto_version_gen) {
deps += [ ":version_gen_h" ]
}
}
if (enable_perfetto_version_gen) {
config("version_gen_config") {
include_dirs = [ root_gen_dir ]
}
# Note: the build file translators (tools/gn_utils.py) depend on the hardcoded
# "//src/base:version_gen_h". If you rename this target, update build file
# translators accordingly.
gen_perfetto_version_header("version_gen_h") {
cpp_out = "${root_gen_dir}/perfetto_version.gen.h"
}
}
if (enable_perfetto_stderr_crash_dump) {
source_set("debug_crash_stack_trace") {
sources = [ "debug_crash_stack_trace.cc" ]
deps = [
"../../gn:default_deps",
"../../include/perfetto/ext/base",
"../../include/perfetto/ext/base",
]
if (is_linux || is_android) {
deps += [ "../../gn:libbacktrace" ]
}
cflags = [ "-Wno-deprecated" ]
}
}
if (enable_perfetto_ipc) {
# This cannot be in :base as it does not build on WASM.
perfetto_component("unix_socket") {
deps = [
"../../gn:default_deps",
"../../include/perfetto/ext/base",
]
sources = [ "unix_socket.cc" ]
if (is_win && perfetto_build_standalone) {
libs = [ "Ws2_32.lib" ]
}
if (is_linux || is_android) {
sources += [ "vm_sockets.h" ]
}
}
}
source_set("test_support") {
testonly = true
deps = [
":base",
"../../gn:default_deps",
]
sources = [
"test/tmp_dir_tree.cc",
"test/tmp_dir_tree.h",
"test/utils.cc",
"test/utils.h",
"test/vm_test_utils.cc",
"test/vm_test_utils.h",
]
if (!is_nacl) {
# test_task_runner depends on unix_task_runner, which isn't available on
# NaCL.
sources += [
"test/test_task_runner.cc",
"test/test_task_runner.h",
]
}
}
perfetto_unittest_source_set("unittests") {
testonly = true
deps = [
":base",
":test_support",
"../../gn:default_deps",
"../../gn:gtest_and_gmock",
]
if (enable_perfetto_ipc) {
deps += [ "http:unittests" ]
}
sources = [
"base64_unittest.cc",
"circular_queue_unittest.cc",
"flat_hash_map_unittest.cc",
"flat_set_unittest.cc",
"getopt_compat_unittest.cc",
"hash_unittest.cc",
"logging_unittest.cc",
"no_destructor_unittest.cc",
"paged_memory_unittest.cc",
"periodic_task_unittest.cc",
"scoped_file_unittest.cc",
"small_vector_unittest.cc",
"status_or_unittest.cc",
"status_unittest.cc",
"string_splitter_unittest.cc",
"string_utils_unittest.cc",
"string_view_unittest.cc",
"string_writer_unittest.cc",
"task_runner_unittest.cc",
"temp_file_unittest.cc",
"thread_checker_unittest.cc",
"time_unittest.cc",
"utils_unittest.cc",
"uuid_unittest.cc",
"weak_ptr_unittest.cc",
]
if (_subprocess_supported) {
# Don't run on Fuchsia, NaCL. They pretend to be POSIX but then give up on
# execve(2).
sources += [ "subprocess_unittest.cc" ]
}
# TODO: Enable these for Windows when possible.
if (!is_win) {
sources += [
"metatrace_unittest.cc",
"thread_task_runner_unittest.cc",
"watchdog_posix_unittest.cc",
]
}
if (is_fuchsia) {
deps += [ "//third_party/fuchsia-sdk/sdk/pkg/fdio" ]
}
if (perfetto_build_standalone || perfetto_build_with_android) {
# This causes some problems on the chromium waterfall.
if (is_linux || is_android) {
sources += [ "watchdog_unittest.cc" ]
}
if (!is_win) {
sources += [ "unix_socket_unittest.cc" ]
deps += [ ":unix_socket" ]
}
}
}
if (enable_perfetto_benchmarks) {
declare_args() {
perfetto_benchmark_3p_libs_prefix = ""
}
source_set("benchmarks") {
# If you intend to reproduce the comparison with {Absl, Folly, Tessil}
# you need to manually install those libraries and then set the GN arg
# perfetto_benchmark_3p_libs_prefix = "/usr/local"
testonly = true
deps = [
":base",
"../../gn:benchmark",
"../../gn:default_deps",
]
if (perfetto_benchmark_3p_libs_prefix != "") {
configs -= [ "//gn/standalone:c++11" ]
configs += [ "//gn/standalone:c++17" ]
defines = [ "PERFETTO_HASH_MAP_COMPARE_THIRD_PARTY_LIBS" ]
cflags = [ "-isystem${perfetto_benchmark_3p_libs_prefix}/include" ]
libs = [
"${perfetto_benchmark_3p_libs_prefix}/lib/libfolly.a",
"${perfetto_benchmark_3p_libs_prefix}/lib/libabsl_raw_hash_set.a",
"${perfetto_benchmark_3p_libs_prefix}/lib/libabsl_hash.a",
]
}
sources = [
"flat_hash_map_benchmark.cc",
"flat_set_benchmark.cc",
]
}
}