blob: ae25789a623f0228bdb669a90e3fd6b467701ce5 [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("../gn/perfetto.gni")
import("../gn/standalone/libc++/libc++.gni")
import("../gn/standalone/sanitizers/vars.gni")
# We should never get here in embedder builds.
assert(perfetto_build_standalone || is_perfetto_build_generator)
# This is to make sure that we don't add accidental dependencies from build
# files in src/ or include/ to buildtools. All deps (outside of /gn/*) should
# go via the groups defined in gn/BUILD.gn, not directly into buildtools. This
# is to allow embedders to re-route targets to their third_party directories.
_buildtools_visibility = [
"./*",
"../gn:*",
"../gn/standalone:*",
]
# Used to suppress warnings coming from googletest macros expansions.
# These suppressions apply both to gtest/gmock haders and to perfetto's
# test translation units. See test/gtest_and_gmock.h for the subset of
# suppressions that apply only to the gmock/gtest headers.
config("test_warning_suppressions") {
visibility = _buildtools_visibility
if (is_clang) {
cflags = [
"-Wno-covered-switch-default",
"-Wno-deprecated-copy-dtor",
"-Wno-global-constructors",
"-Wno-inconsistent-missing-override",
"-Wno-language-extension-token",
"-Wno-suggest-destructor-override",
"-Wno-suggest-override",
"-Wno-undef",
"-Wno-unknown-warning-option",
"-Wno-unused-member-function",
"-Wno-used-but-marked-unused",
"-Wno-weak-vtables",
"-Wno-zero-as-null-pointer-constant",
]
} else if (!is_win) {
cflags = [
"-Wno-unknown-warning-option",
"-Wno-deprecated-copy",
"-Wno-uninitialized",
]
}
}
config("libunwindstack_config") {
visibility = _buildtools_visibility
cflags = [
# Using -isystem instead of include_dirs (-I), so we don't need to suppress
# warnings coming from libunwindstack headers. Doing so would mask warnings
# in our own code.
perfetto_isystem_cflag,
rebase_path("android-unwinding/libunwindstack/include", root_build_dir),
perfetto_isystem_cflag,
rebase_path("android-libprocinfo/include", root_build_dir),
perfetto_isystem_cflag,
rebase_path("android-libbase/include", root_build_dir),
perfetto_isystem_cflag,
rebase_path("android-core/demangle/include", root_build_dir),
perfetto_isystem_cflag,
rebase_path("rustc-demangle-capi", root_build_dir),
]
# TODO(rsavitski): figure out how to cleanly depend on bionic's uapi headers
defines = [
"NO_LIBDEXFILE_SUPPORT",
"NT_RISCV_VECTOR=0x901",
"ELFCOMPRESS_ZSTD=2",
]
}
# Config to include gtest.h in test targets.
config("googletest_config") {
visibility = _buildtools_visibility
defines = [ "GTEST_LANG_CXX11=1" ]
include_dirs = [
"googletest/googletest/include",
"googletest/googlemock/include",
]
configs = [ ":test_warning_suppressions" ]
}
source_set("gtest") {
visibility = _buildtools_visibility
testonly = true
include_dirs = [ "googletest/googletest" ]
configs -= [ "//gn/standalone:extra_warnings" ]
public_configs = [ ":googletest_config" ]
all_dependent_configs = [ ":googletest_config" ]
sources = [ "googletest/googletest/src/gtest-all.cc" ]
deps = [ "//gn:default_deps" ]
}
source_set("gtest_main") {
visibility = _buildtools_visibility
testonly = true
configs -= [ "//gn/standalone:extra_warnings" ]
configs += [ ":googletest_config" ]
sources = [ "googletest/googletest/src/gtest_main.cc" ]
deps = [ "//gn:default_deps" ]
}
source_set("gmock") {
visibility = _buildtools_visibility
testonly = true
include_dirs = [ "googletest/googlemock" ]
configs -= [ "//gn/standalone:extra_warnings" ]
public_configs = [ ":googletest_config" ]
all_dependent_configs = [ ":googletest_config" ]
sources = [ "googletest/googlemock/src/gmock-all.cc" ]
deps = [ "//gn:default_deps" ]
}
# Configuration used to build libprotobuf_* and the protoc compiler.
config("protobuf_config") {
visibility = _buildtools_visibility
# Apply the lighter supressions and macro definitions from above.
configs = [ "//gn:protobuf_gen_config" ]
defines = [ "HAVE_PTHREAD=1" ]
cflags = []
# Fixed upstream in:
# https://github.com/protocolbuffers/protobuf/pull/10112
# But we don't have that yet.
if (is_mac) {
cflags += [ "-Wno-deprecated-declarations" ]
}
if (!is_clang && !is_win) { # implies gcc
cflags += [ "-Wno-stringop-overread" ]
}
if (is_win) {
cflags += [ "/W0" ]
}
}
# Configuration propagated to targets depending on protobuf_full.
config("protobuf_full_public_config") {
visibility = _buildtools_visibility
cflags = []
if (is_clang) {
cflags += [ "-Wno-switch-enum" ]
if (is_win) {
cflags += [ "-Wno-undef" ]
}
}
}
source_set("protobuf_lite") {
visibility = _buildtools_visibility
sources = [
"protobuf/src/google/protobuf/any.h",
"protobuf/src/google/protobuf/any.pb.h",
"protobuf/src/google/protobuf/any_lite.cc",
"protobuf/src/google/protobuf/api.pb.h",
"protobuf/src/google/protobuf/arena.cc",
"protobuf/src/google/protobuf/arena.h",
"protobuf/src/google/protobuf/arena_impl.h",
"protobuf/src/google/protobuf/arenastring.cc",
"protobuf/src/google/protobuf/arenastring.h",
"protobuf/src/google/protobuf/arenaz_sampler.cc",
"protobuf/src/google/protobuf/arenaz_sampler.h",
"protobuf/src/google/protobuf/compiler/importer.h",
"protobuf/src/google/protobuf/compiler/parser.h",
"protobuf/src/google/protobuf/descriptor.h",
"protobuf/src/google/protobuf/descriptor.pb.h",
"protobuf/src/google/protobuf/descriptor_database.h",
"protobuf/src/google/protobuf/duration.pb.h",
"protobuf/src/google/protobuf/dynamic_message.h",
"protobuf/src/google/protobuf/empty.pb.h",
"protobuf/src/google/protobuf/explicitly_constructed.h",
"protobuf/src/google/protobuf/extension_set.cc",
"protobuf/src/google/protobuf/extension_set.h",
"protobuf/src/google/protobuf/extension_set_inl.h",
"protobuf/src/google/protobuf/field_access_listener.h",
"protobuf/src/google/protobuf/field_mask.pb.h",
"protobuf/src/google/protobuf/generated_enum_reflection.h",
"protobuf/src/google/protobuf/generated_enum_util.cc",
"protobuf/src/google/protobuf/generated_enum_util.h",
"protobuf/src/google/protobuf/generated_message_bases.h",
"protobuf/src/google/protobuf/generated_message_reflection.h",
"protobuf/src/google/protobuf/generated_message_tctable_decl.h",
"protobuf/src/google/protobuf/generated_message_tctable_impl.h",
"protobuf/src/google/protobuf/generated_message_tctable_lite.cc",
"protobuf/src/google/protobuf/generated_message_util.cc",
"protobuf/src/google/protobuf/generated_message_util.h",
"protobuf/src/google/protobuf/has_bits.h",
"protobuf/src/google/protobuf/implicit_weak_message.cc",
"protobuf/src/google/protobuf/implicit_weak_message.h",
"protobuf/src/google/protobuf/inlined_string_field.cc",
"protobuf/src/google/protobuf/inlined_string_field.h",
"protobuf/src/google/protobuf/io/coded_stream.cc",
"protobuf/src/google/protobuf/io/coded_stream.h",
"protobuf/src/google/protobuf/io/io_win32.cc",
"protobuf/src/google/protobuf/io/io_win32.h",
"protobuf/src/google/protobuf/io/printer.h",
"protobuf/src/google/protobuf/io/strtod.cc",
"protobuf/src/google/protobuf/io/strtod.h",
"protobuf/src/google/protobuf/io/tokenizer.h",
"protobuf/src/google/protobuf/io/zero_copy_stream.cc",
"protobuf/src/google/protobuf/io/zero_copy_stream.h",
"protobuf/src/google/protobuf/io/zero_copy_stream_impl.cc",
"protobuf/src/google/protobuf/io/zero_copy_stream_impl.h",
"protobuf/src/google/protobuf/io/zero_copy_stream_impl_lite.cc",
"protobuf/src/google/protobuf/io/zero_copy_stream_impl_lite.h",
"protobuf/src/google/protobuf/map.cc",
"protobuf/src/google/protobuf/map.h",
"protobuf/src/google/protobuf/map_entry.h",
"protobuf/src/google/protobuf/map_entry_lite.h",
"protobuf/src/google/protobuf/map_field.h",
"protobuf/src/google/protobuf/map_field_inl.h",
"protobuf/src/google/protobuf/map_field_lite.h",
"protobuf/src/google/protobuf/map_type_handler.h",
"protobuf/src/google/protobuf/message.h",
"protobuf/src/google/protobuf/message_lite.cc",
"protobuf/src/google/protobuf/message_lite.h",
"protobuf/src/google/protobuf/metadata.h",
"protobuf/src/google/protobuf/metadata_lite.h",
"protobuf/src/google/protobuf/parse_context.cc",
"protobuf/src/google/protobuf/parse_context.h",
"protobuf/src/google/protobuf/port.h",
"protobuf/src/google/protobuf/port_def.inc",
"protobuf/src/google/protobuf/port_undef.inc",
"protobuf/src/google/protobuf/reflection.h",
"protobuf/src/google/protobuf/reflection_ops.h",
"protobuf/src/google/protobuf/repeated_field.cc",
"protobuf/src/google/protobuf/repeated_field.h",
"protobuf/src/google/protobuf/repeated_ptr_field.cc",
"protobuf/src/google/protobuf/repeated_ptr_field.h",
"protobuf/src/google/protobuf/service.h",
"protobuf/src/google/protobuf/source_context.pb.h",
"protobuf/src/google/protobuf/string_member_robber.h",
"protobuf/src/google/protobuf/struct.pb.h",
"protobuf/src/google/protobuf/stubs/bytestream.cc",
"protobuf/src/google/protobuf/stubs/bytestream.h",
"protobuf/src/google/protobuf/stubs/callback.h",
"protobuf/src/google/protobuf/stubs/casts.h",
"protobuf/src/google/protobuf/stubs/common.cc",
"protobuf/src/google/protobuf/stubs/common.h",
"protobuf/src/google/protobuf/stubs/hash.h",
"protobuf/src/google/protobuf/stubs/int128.cc",
"protobuf/src/google/protobuf/stubs/int128.h",
"protobuf/src/google/protobuf/stubs/logging.h",
"protobuf/src/google/protobuf/stubs/macros.h",
"protobuf/src/google/protobuf/stubs/map_util.h",
"protobuf/src/google/protobuf/stubs/mathutil.h",
"protobuf/src/google/protobuf/stubs/mutex.h",
"protobuf/src/google/protobuf/stubs/once.h",
"protobuf/src/google/protobuf/stubs/platform_macros.h",
"protobuf/src/google/protobuf/stubs/port.h",
"protobuf/src/google/protobuf/stubs/status.cc",
"protobuf/src/google/protobuf/stubs/status.h",
"protobuf/src/google/protobuf/stubs/status_macros.h",
"protobuf/src/google/protobuf/stubs/statusor.cc",
"protobuf/src/google/protobuf/stubs/statusor.h",
"protobuf/src/google/protobuf/stubs/stl_util.h",
"protobuf/src/google/protobuf/stubs/stringpiece.cc",
"protobuf/src/google/protobuf/stubs/stringpiece.h",
"protobuf/src/google/protobuf/stubs/stringprintf.cc",
"protobuf/src/google/protobuf/stubs/stringprintf.h",
"protobuf/src/google/protobuf/stubs/structurally_valid.cc",
"protobuf/src/google/protobuf/stubs/strutil.cc",
"protobuf/src/google/protobuf/stubs/strutil.h",
"protobuf/src/google/protobuf/stubs/template_util.h",
"protobuf/src/google/protobuf/stubs/time.cc",
"protobuf/src/google/protobuf/stubs/time.h",
"protobuf/src/google/protobuf/text_format.h",
"protobuf/src/google/protobuf/timestamp.pb.h",
"protobuf/src/google/protobuf/type.pb.h",
"protobuf/src/google/protobuf/unknown_field_set.h",
"protobuf/src/google/protobuf/util/delimited_message_util.h",
"protobuf/src/google/protobuf/util/field_comparator.h",
"protobuf/src/google/protobuf/util/field_mask_util.h",
"protobuf/src/google/protobuf/util/json_util.h",
"protobuf/src/google/protobuf/util/message_differencer.h",
"protobuf/src/google/protobuf/util/time_util.h",
"protobuf/src/google/protobuf/util/type_resolver.h",
"protobuf/src/google/protobuf/util/type_resolver_util.h",
"protobuf/src/google/protobuf/wire_format.h",
"protobuf/src/google/protobuf/wire_format_lite.cc",
"protobuf/src/google/protobuf/wire_format_lite.h",
"protobuf/src/google/protobuf/wrappers.pb.h",
]
configs -= [ "//gn/standalone:extra_warnings" ]
if (is_win) {
# Protobuf has its own #define WIN32_LEAN_AND_MEAN.
configs -= [ "//gn/standalone:win32_lean_and_mean" ]
}
configs += [ ":protobuf_config" ]
public_configs = [ "//gn:protobuf_gen_config" ]
deps = [ "//gn:default_deps" ]
}
source_set("protobuf_full") {
visibility = _buildtools_visibility
deps = [
":protobuf_lite",
"//gn:default_deps",
]
sources = [
"protobuf/src/google/protobuf/any.cc",
"protobuf/src/google/protobuf/any.h",
"protobuf/src/google/protobuf/any.pb.cc",
"protobuf/src/google/protobuf/any.pb.h",
"protobuf/src/google/protobuf/api.pb.cc",
"protobuf/src/google/protobuf/api.pb.h",
"protobuf/src/google/protobuf/arena.h",
"protobuf/src/google/protobuf/arena_impl.h",
"protobuf/src/google/protobuf/arenastring.h",
"protobuf/src/google/protobuf/arenaz_sampler.h",
"protobuf/src/google/protobuf/compiler/importer.cc",
"protobuf/src/google/protobuf/compiler/importer.h",
"protobuf/src/google/protobuf/compiler/parser.cc",
"protobuf/src/google/protobuf/compiler/parser.h",
"protobuf/src/google/protobuf/descriptor.cc",
"protobuf/src/google/protobuf/descriptor.h",
"protobuf/src/google/protobuf/descriptor.pb.cc",
"protobuf/src/google/protobuf/descriptor.pb.h",
"protobuf/src/google/protobuf/descriptor_database.cc",
"protobuf/src/google/protobuf/descriptor_database.h",
"protobuf/src/google/protobuf/duration.pb.cc",
"protobuf/src/google/protobuf/duration.pb.h",
"protobuf/src/google/protobuf/dynamic_message.cc",
"protobuf/src/google/protobuf/dynamic_message.h",
"protobuf/src/google/protobuf/empty.pb.cc",
"protobuf/src/google/protobuf/empty.pb.h",
"protobuf/src/google/protobuf/explicitly_constructed.h",
"protobuf/src/google/protobuf/extension_set.h",
"protobuf/src/google/protobuf/extension_set_heavy.cc",
"protobuf/src/google/protobuf/extension_set_inl.h",
"protobuf/src/google/protobuf/field_access_listener.h",
"protobuf/src/google/protobuf/field_mask.pb.cc",
"protobuf/src/google/protobuf/field_mask.pb.h",
"protobuf/src/google/protobuf/generated_enum_reflection.h",
"protobuf/src/google/protobuf/generated_enum_util.h",
"protobuf/src/google/protobuf/generated_message_bases.cc",
"protobuf/src/google/protobuf/generated_message_bases.h",
"protobuf/src/google/protobuf/generated_message_reflection.cc",
"protobuf/src/google/protobuf/generated_message_reflection.h",
"protobuf/src/google/protobuf/generated_message_tctable_decl.h",
"protobuf/src/google/protobuf/generated_message_tctable_full.cc",
"protobuf/src/google/protobuf/generated_message_tctable_impl.h",
"protobuf/src/google/protobuf/generated_message_util.h",
"protobuf/src/google/protobuf/has_bits.h",
"protobuf/src/google/protobuf/implicit_weak_message.h",
"protobuf/src/google/protobuf/inlined_string_field.h",
"protobuf/src/google/protobuf/io/coded_stream.h",
"protobuf/src/google/protobuf/io/gzip_stream.cc",
"protobuf/src/google/protobuf/io/io_win32.h",
"protobuf/src/google/protobuf/io/printer.cc",
"protobuf/src/google/protobuf/io/printer.h",
"protobuf/src/google/protobuf/io/strtod.h",
"protobuf/src/google/protobuf/io/tokenizer.cc",
"protobuf/src/google/protobuf/io/tokenizer.h",
"protobuf/src/google/protobuf/io/zero_copy_stream.h",
"protobuf/src/google/protobuf/io/zero_copy_stream_impl.h",
"protobuf/src/google/protobuf/io/zero_copy_stream_impl_lite.h",
"protobuf/src/google/protobuf/map.h",
"protobuf/src/google/protobuf/map_entry.h",
"protobuf/src/google/protobuf/map_entry_lite.h",
"protobuf/src/google/protobuf/map_field.cc",
"protobuf/src/google/protobuf/map_field.h",
"protobuf/src/google/protobuf/map_field_inl.h",
"protobuf/src/google/protobuf/map_field_lite.h",
"protobuf/src/google/protobuf/map_type_handler.h",
"protobuf/src/google/protobuf/message.cc",
"protobuf/src/google/protobuf/message.h",
"protobuf/src/google/protobuf/message_lite.h",
"protobuf/src/google/protobuf/metadata.h",
"protobuf/src/google/protobuf/metadata_lite.h",
"protobuf/src/google/protobuf/parse_context.h",
"protobuf/src/google/protobuf/port.h",
"protobuf/src/google/protobuf/port_def.inc",
"protobuf/src/google/protobuf/port_undef.inc",
"protobuf/src/google/protobuf/reflection.h",
"protobuf/src/google/protobuf/reflection_internal.h",
"protobuf/src/google/protobuf/reflection_ops.cc",
"protobuf/src/google/protobuf/reflection_ops.h",
"protobuf/src/google/protobuf/repeated_field.h",
"protobuf/src/google/protobuf/repeated_ptr_field.h",
"protobuf/src/google/protobuf/service.cc",
"protobuf/src/google/protobuf/service.h",
"protobuf/src/google/protobuf/source_context.pb.cc",
"protobuf/src/google/protobuf/source_context.pb.h",
"protobuf/src/google/protobuf/struct.pb.cc",
"protobuf/src/google/protobuf/struct.pb.h",
"protobuf/src/google/protobuf/stubs/bytestream.h",
"protobuf/src/google/protobuf/stubs/callback.h",
"protobuf/src/google/protobuf/stubs/casts.h",
"protobuf/src/google/protobuf/stubs/common.h",
"protobuf/src/google/protobuf/stubs/hash.h",
"protobuf/src/google/protobuf/stubs/logging.h",
"protobuf/src/google/protobuf/stubs/macros.h",
"protobuf/src/google/protobuf/stubs/map_util.h",
"protobuf/src/google/protobuf/stubs/mutex.h",
"protobuf/src/google/protobuf/stubs/once.h",
"protobuf/src/google/protobuf/stubs/platform_macros.h",
"protobuf/src/google/protobuf/stubs/port.h",
"protobuf/src/google/protobuf/stubs/status.h",
"protobuf/src/google/protobuf/stubs/stl_util.h",
"protobuf/src/google/protobuf/stubs/stringpiece.h",
"protobuf/src/google/protobuf/stubs/strutil.h",
"protobuf/src/google/protobuf/stubs/substitute.cc",
"protobuf/src/google/protobuf/stubs/substitute.h",
"protobuf/src/google/protobuf/stubs/template_util.h",
"protobuf/src/google/protobuf/text_format.cc",
"protobuf/src/google/protobuf/text_format.h",
"protobuf/src/google/protobuf/timestamp.pb.cc",
"protobuf/src/google/protobuf/timestamp.pb.h",
"protobuf/src/google/protobuf/type.pb.cc",
"protobuf/src/google/protobuf/type.pb.h",
"protobuf/src/google/protobuf/unknown_field_set.cc",
"protobuf/src/google/protobuf/unknown_field_set.h",
"protobuf/src/google/protobuf/util/delimited_message_util.cc",
"protobuf/src/google/protobuf/util/delimited_message_util.h",
"protobuf/src/google/protobuf/util/field_comparator.cc",
"protobuf/src/google/protobuf/util/field_comparator.h",
"protobuf/src/google/protobuf/util/field_mask_util.cc",
"protobuf/src/google/protobuf/util/field_mask_util.h",
"protobuf/src/google/protobuf/util/internal/constants.h",
"protobuf/src/google/protobuf/util/internal/datapiece.cc",
"protobuf/src/google/protobuf/util/internal/datapiece.h",
"protobuf/src/google/protobuf/util/internal/default_value_objectwriter.cc",
"protobuf/src/google/protobuf/util/internal/default_value_objectwriter.h",
"protobuf/src/google/protobuf/util/internal/error_listener.cc",
"protobuf/src/google/protobuf/util/internal/error_listener.h",
"protobuf/src/google/protobuf/util/internal/expecting_objectwriter.h",
"protobuf/src/google/protobuf/util/internal/field_mask_utility.cc",
"protobuf/src/google/protobuf/util/internal/field_mask_utility.h",
"protobuf/src/google/protobuf/util/internal/json_escaping.cc",
"protobuf/src/google/protobuf/util/internal/json_escaping.h",
"protobuf/src/google/protobuf/util/internal/json_objectwriter.cc",
"protobuf/src/google/protobuf/util/internal/json_objectwriter.h",
"protobuf/src/google/protobuf/util/internal/json_stream_parser.cc",
"protobuf/src/google/protobuf/util/internal/json_stream_parser.h",
"protobuf/src/google/protobuf/util/internal/location_tracker.h",
"protobuf/src/google/protobuf/util/internal/mock_error_listener.h",
"protobuf/src/google/protobuf/util/internal/object_location_tracker.h",
"protobuf/src/google/protobuf/util/internal/object_source.h",
"protobuf/src/google/protobuf/util/internal/object_writer.cc",
"protobuf/src/google/protobuf/util/internal/object_writer.h",
"protobuf/src/google/protobuf/util/internal/proto_writer.cc",
"protobuf/src/google/protobuf/util/internal/proto_writer.h",
"protobuf/src/google/protobuf/util/internal/protostream_objectsource.cc",
"protobuf/src/google/protobuf/util/internal/protostream_objectsource.h",
"protobuf/src/google/protobuf/util/internal/protostream_objectwriter.cc",
"protobuf/src/google/protobuf/util/internal/protostream_objectwriter.h",
"protobuf/src/google/protobuf/util/internal/structured_objectwriter.h",
"protobuf/src/google/protobuf/util/internal/type_info.cc",
"protobuf/src/google/protobuf/util/internal/type_info.h",
"protobuf/src/google/protobuf/util/internal/type_info_test_helper.h",
"protobuf/src/google/protobuf/util/internal/utility.cc",
"protobuf/src/google/protobuf/util/internal/utility.h",
"protobuf/src/google/protobuf/util/json_util.cc",
"protobuf/src/google/protobuf/util/json_util.h",
"protobuf/src/google/protobuf/util/message_differencer.cc",
"protobuf/src/google/protobuf/util/message_differencer.h",
"protobuf/src/google/protobuf/util/time_util.cc",
"protobuf/src/google/protobuf/util/time_util.h",
"protobuf/src/google/protobuf/util/type_resolver.h",
"protobuf/src/google/protobuf/util/type_resolver_util.cc",
"protobuf/src/google/protobuf/util/type_resolver_util.h",
"protobuf/src/google/protobuf/wire_format.cc",
"protobuf/src/google/protobuf/wire_format.h",
"protobuf/src/google/protobuf/wire_format_lite.h",
"protobuf/src/google/protobuf/wrappers.pb.cc",
"protobuf/src/google/protobuf/wrappers.pb.h",
]
configs -= [ "//gn/standalone:extra_warnings" ]
if (is_win) {
# Protobuf has its own #define WIN32_LEAN_AND_MEAN.
configs -= [ "//gn/standalone:win32_lean_and_mean" ]
}
configs += [ ":protobuf_config" ]
public_configs = [
"//gn:protobuf_gen_config",
":protobuf_full_public_config",
]
}
source_set("protoc_lib") {
visibility = _buildtools_visibility
deps = [
":protobuf_full",
"//gn:default_deps",
]
sources = [
"protobuf/src/google/protobuf/compiler/code_generator.cc",
"protobuf/src/google/protobuf/compiler/code_generator.h",
"protobuf/src/google/protobuf/compiler/command_line_interface.cc",
"protobuf/src/google/protobuf/compiler/command_line_interface.h",
"protobuf/src/google/protobuf/compiler/cpp/cpp_enum.cc",
"protobuf/src/google/protobuf/compiler/cpp/cpp_enum.h",
"protobuf/src/google/protobuf/compiler/cpp/cpp_enum_field.cc",
"protobuf/src/google/protobuf/compiler/cpp/cpp_enum_field.h",
"protobuf/src/google/protobuf/compiler/cpp/cpp_extension.cc",
"protobuf/src/google/protobuf/compiler/cpp/cpp_extension.h",
"protobuf/src/google/protobuf/compiler/cpp/cpp_field.cc",
"protobuf/src/google/protobuf/compiler/cpp/cpp_field.h",
"protobuf/src/google/protobuf/compiler/cpp/cpp_file.cc",
"protobuf/src/google/protobuf/compiler/cpp/cpp_file.h",
"protobuf/src/google/protobuf/compiler/cpp/cpp_generator.cc",
"protobuf/src/google/protobuf/compiler/cpp/cpp_generator.h",
"protobuf/src/google/protobuf/compiler/cpp/cpp_helpers.cc",
"protobuf/src/google/protobuf/compiler/cpp/cpp_helpers.h",
"protobuf/src/google/protobuf/compiler/cpp/cpp_map_field.cc",
"protobuf/src/google/protobuf/compiler/cpp/cpp_map_field.h",
"protobuf/src/google/protobuf/compiler/cpp/cpp_message.cc",
"protobuf/src/google/protobuf/compiler/cpp/cpp_message.h",
"protobuf/src/google/protobuf/compiler/cpp/cpp_message_field.cc",
"protobuf/src/google/protobuf/compiler/cpp/cpp_message_field.h",
"protobuf/src/google/protobuf/compiler/cpp/cpp_message_layout_helper.h",
"protobuf/src/google/protobuf/compiler/cpp/cpp_names.h",
"protobuf/src/google/protobuf/compiler/cpp/cpp_options.h",
"protobuf/src/google/protobuf/compiler/cpp/cpp_padding_optimizer.cc",
"protobuf/src/google/protobuf/compiler/cpp/cpp_padding_optimizer.h",
"protobuf/src/google/protobuf/compiler/cpp/cpp_parse_function_generator.cc",
"protobuf/src/google/protobuf/compiler/cpp/cpp_parse_function_generator.h",
"protobuf/src/google/protobuf/compiler/cpp/cpp_primitive_field.cc",
"protobuf/src/google/protobuf/compiler/cpp/cpp_primitive_field.h",
"protobuf/src/google/protobuf/compiler/cpp/cpp_service.cc",
"protobuf/src/google/protobuf/compiler/cpp/cpp_service.h",
"protobuf/src/google/protobuf/compiler/cpp/cpp_string_field.cc",
"protobuf/src/google/protobuf/compiler/cpp/cpp_string_field.h",
"protobuf/src/google/protobuf/compiler/csharp/csharp_doc_comment.cc",
"protobuf/src/google/protobuf/compiler/csharp/csharp_doc_comment.h",
"protobuf/src/google/protobuf/compiler/csharp/csharp_enum.cc",
"protobuf/src/google/protobuf/compiler/csharp/csharp_enum.h",
"protobuf/src/google/protobuf/compiler/csharp/csharp_enum_field.cc",
"protobuf/src/google/protobuf/compiler/csharp/csharp_enum_field.h",
"protobuf/src/google/protobuf/compiler/csharp/csharp_field_base.cc",
"protobuf/src/google/protobuf/compiler/csharp/csharp_field_base.h",
"protobuf/src/google/protobuf/compiler/csharp/csharp_generator.cc",
"protobuf/src/google/protobuf/compiler/csharp/csharp_generator.h",
"protobuf/src/google/protobuf/compiler/csharp/csharp_helpers.cc",
"protobuf/src/google/protobuf/compiler/csharp/csharp_helpers.h",
"protobuf/src/google/protobuf/compiler/csharp/csharp_map_field.cc",
"protobuf/src/google/protobuf/compiler/csharp/csharp_map_field.h",
"protobuf/src/google/protobuf/compiler/csharp/csharp_message.cc",
"protobuf/src/google/protobuf/compiler/csharp/csharp_message.h",
"protobuf/src/google/protobuf/compiler/csharp/csharp_message_field.cc",
"protobuf/src/google/protobuf/compiler/csharp/csharp_message_field.h",
"protobuf/src/google/protobuf/compiler/csharp/csharp_names.h",
"protobuf/src/google/protobuf/compiler/csharp/csharp_options.h",
"protobuf/src/google/protobuf/compiler/csharp/csharp_primitive_field.cc",
"protobuf/src/google/protobuf/compiler/csharp/csharp_primitive_field.h",
"protobuf/src/google/protobuf/compiler/csharp/csharp_reflection_class.cc",
"protobuf/src/google/protobuf/compiler/csharp/csharp_reflection_class.h",
"protobuf/src/google/protobuf/compiler/csharp/csharp_repeated_enum_field.cc",
"protobuf/src/google/protobuf/compiler/csharp/csharp_repeated_enum_field.h",
"protobuf/src/google/protobuf/compiler/csharp/csharp_repeated_message_field.cc",
"protobuf/src/google/protobuf/compiler/csharp/csharp_repeated_message_field.h",
"protobuf/src/google/protobuf/compiler/csharp/csharp_repeated_primitive_field.cc",
"protobuf/src/google/protobuf/compiler/csharp/csharp_repeated_primitive_field.h",
"protobuf/src/google/protobuf/compiler/csharp/csharp_source_generator_base.cc",
"protobuf/src/google/protobuf/compiler/csharp/csharp_source_generator_base.h",
"protobuf/src/google/protobuf/compiler/csharp/csharp_wrapper_field.cc",
"protobuf/src/google/protobuf/compiler/csharp/csharp_wrapper_field.h",
"protobuf/src/google/protobuf/compiler/java/java_context.cc",
"protobuf/src/google/protobuf/compiler/java/java_context.h",
"protobuf/src/google/protobuf/compiler/java/java_doc_comment.cc",
"protobuf/src/google/protobuf/compiler/java/java_doc_comment.h",
"protobuf/src/google/protobuf/compiler/java/java_enum.cc",
"protobuf/src/google/protobuf/compiler/java/java_enum.h",
"protobuf/src/google/protobuf/compiler/java/java_enum_field.cc",
"protobuf/src/google/protobuf/compiler/java/java_enum_field.h",
"protobuf/src/google/protobuf/compiler/java/java_enum_field_lite.cc",
"protobuf/src/google/protobuf/compiler/java/java_enum_field_lite.h",
"protobuf/src/google/protobuf/compiler/java/java_enum_lite.cc",
"protobuf/src/google/protobuf/compiler/java/java_enum_lite.h",
"protobuf/src/google/protobuf/compiler/java/java_extension.cc",
"protobuf/src/google/protobuf/compiler/java/java_extension.h",
"protobuf/src/google/protobuf/compiler/java/java_extension_lite.cc",
"protobuf/src/google/protobuf/compiler/java/java_extension_lite.h",
"protobuf/src/google/protobuf/compiler/java/java_field.cc",
"protobuf/src/google/protobuf/compiler/java/java_field.h",
"protobuf/src/google/protobuf/compiler/java/java_file.cc",
"protobuf/src/google/protobuf/compiler/java/java_file.h",
"protobuf/src/google/protobuf/compiler/java/java_generator.cc",
"protobuf/src/google/protobuf/compiler/java/java_generator.h",
"protobuf/src/google/protobuf/compiler/java/java_generator_factory.cc",
"protobuf/src/google/protobuf/compiler/java/java_generator_factory.h",
"protobuf/src/google/protobuf/compiler/java/java_helpers.cc",
"protobuf/src/google/protobuf/compiler/java/java_helpers.h",
"protobuf/src/google/protobuf/compiler/java/java_kotlin_generator.cc",
"protobuf/src/google/protobuf/compiler/java/java_kotlin_generator.h",
"protobuf/src/google/protobuf/compiler/java/java_map_field.cc",
"protobuf/src/google/protobuf/compiler/java/java_map_field.h",
"protobuf/src/google/protobuf/compiler/java/java_map_field_lite.cc",
"protobuf/src/google/protobuf/compiler/java/java_map_field_lite.h",
"protobuf/src/google/protobuf/compiler/java/java_message.cc",
"protobuf/src/google/protobuf/compiler/java/java_message.h",
"protobuf/src/google/protobuf/compiler/java/java_message_builder.cc",
"protobuf/src/google/protobuf/compiler/java/java_message_builder.h",
"protobuf/src/google/protobuf/compiler/java/java_message_builder_lite.cc",
"protobuf/src/google/protobuf/compiler/java/java_message_builder_lite.h",
"protobuf/src/google/protobuf/compiler/java/java_message_field.cc",
"protobuf/src/google/protobuf/compiler/java/java_message_field.h",
"protobuf/src/google/protobuf/compiler/java/java_message_field_lite.cc",
"protobuf/src/google/protobuf/compiler/java/java_message_field_lite.h",
"protobuf/src/google/protobuf/compiler/java/java_message_lite.cc",
"protobuf/src/google/protobuf/compiler/java/java_message_lite.h",
"protobuf/src/google/protobuf/compiler/java/java_name_resolver.cc",
"protobuf/src/google/protobuf/compiler/java/java_name_resolver.h",
"protobuf/src/google/protobuf/compiler/java/java_names.h",
"protobuf/src/google/protobuf/compiler/java/java_options.h",
"protobuf/src/google/protobuf/compiler/java/java_primitive_field.cc",
"protobuf/src/google/protobuf/compiler/java/java_primitive_field.h",
"protobuf/src/google/protobuf/compiler/java/java_primitive_field_lite.cc",
"protobuf/src/google/protobuf/compiler/java/java_primitive_field_lite.h",
"protobuf/src/google/protobuf/compiler/java/java_service.cc",
"protobuf/src/google/protobuf/compiler/java/java_service.h",
"protobuf/src/google/protobuf/compiler/java/java_shared_code_generator.cc",
"protobuf/src/google/protobuf/compiler/java/java_shared_code_generator.h",
"protobuf/src/google/protobuf/compiler/java/java_string_field.cc",
"protobuf/src/google/protobuf/compiler/java/java_string_field.h",
"protobuf/src/google/protobuf/compiler/java/java_string_field_lite.cc",
"protobuf/src/google/protobuf/compiler/java/java_string_field_lite.h",
"protobuf/src/google/protobuf/compiler/js/js_generator.cc",
"protobuf/src/google/protobuf/compiler/js/js_generator.h",
"protobuf/src/google/protobuf/compiler/js/well_known_types_embed.cc",
"protobuf/src/google/protobuf/compiler/js/well_known_types_embed.h",
"protobuf/src/google/protobuf/compiler/objectivec/objectivec_enum.cc",
"protobuf/src/google/protobuf/compiler/objectivec/objectivec_enum.h",
"protobuf/src/google/protobuf/compiler/objectivec/objectivec_enum_field.cc",
"protobuf/src/google/protobuf/compiler/objectivec/objectivec_enum_field.h",
"protobuf/src/google/protobuf/compiler/objectivec/objectivec_extension.cc",
"protobuf/src/google/protobuf/compiler/objectivec/objectivec_extension.h",
"protobuf/src/google/protobuf/compiler/objectivec/objectivec_field.cc",
"protobuf/src/google/protobuf/compiler/objectivec/objectivec_field.h",
"protobuf/src/google/protobuf/compiler/objectivec/objectivec_file.cc",
"protobuf/src/google/protobuf/compiler/objectivec/objectivec_file.h",
"protobuf/src/google/protobuf/compiler/objectivec/objectivec_generator.cc",
"protobuf/src/google/protobuf/compiler/objectivec/objectivec_generator.h",
"protobuf/src/google/protobuf/compiler/objectivec/objectivec_helpers.cc",
"protobuf/src/google/protobuf/compiler/objectivec/objectivec_helpers.h",
"protobuf/src/google/protobuf/compiler/objectivec/objectivec_map_field.cc",
"protobuf/src/google/protobuf/compiler/objectivec/objectivec_map_field.h",
"protobuf/src/google/protobuf/compiler/objectivec/objectivec_message.cc",
"protobuf/src/google/protobuf/compiler/objectivec/objectivec_message.h",
"protobuf/src/google/protobuf/compiler/objectivec/objectivec_message_field.cc",
"protobuf/src/google/protobuf/compiler/objectivec/objectivec_message_field.h",
"protobuf/src/google/protobuf/compiler/objectivec/objectivec_nsobject_methods.h",
"protobuf/src/google/protobuf/compiler/objectivec/objectivec_oneof.cc",
"protobuf/src/google/protobuf/compiler/objectivec/objectivec_oneof.h",
"protobuf/src/google/protobuf/compiler/objectivec/objectivec_primitive_field.cc",
"protobuf/src/google/protobuf/compiler/objectivec/objectivec_primitive_field.h",
"protobuf/src/google/protobuf/compiler/php/php_generator.cc",
"protobuf/src/google/protobuf/compiler/php/php_generator.h",
"protobuf/src/google/protobuf/compiler/plugin.cc",
"protobuf/src/google/protobuf/compiler/plugin.h",
"protobuf/src/google/protobuf/compiler/plugin.pb.cc",
"protobuf/src/google/protobuf/compiler/plugin.pb.h",
"protobuf/src/google/protobuf/compiler/python/python_generator.cc",
"protobuf/src/google/protobuf/compiler/python/python_generator.h",
"protobuf/src/google/protobuf/compiler/python/python_helpers.cc",
"protobuf/src/google/protobuf/compiler/python/python_helpers.h",
"protobuf/src/google/protobuf/compiler/python/python_pyi_generator.cc",
"protobuf/src/google/protobuf/compiler/python/python_pyi_generator.h",
"protobuf/src/google/protobuf/compiler/ruby/ruby_generator.cc",
"protobuf/src/google/protobuf/compiler/ruby/ruby_generator.h",
"protobuf/src/google/protobuf/compiler/scc.h",
"protobuf/src/google/protobuf/compiler/subprocess.cc",
"protobuf/src/google/protobuf/compiler/subprocess.h",
"protobuf/src/google/protobuf/compiler/zip_writer.cc",
"protobuf/src/google/protobuf/compiler/zip_writer.h",
]
configs -= [ "//gn/standalone:extra_warnings" ]
if (is_win) {
# Protobuf does has its own #define WIN32_LEAN_AND_MEAN.
configs -= [ "//gn/standalone:win32_lean_and_mean" ]
}
configs += [ ":protobuf_config" ]
public_configs = [
"//gn:protobuf_gen_config",
":protobuf_full_public_config",
]
}
if (current_toolchain == host_toolchain) {
executable("protoc") {
visibility = _buildtools_visibility
deps = [
":protoc_lib",
"//gn:default_deps",
]
sources = [ "protobuf/src/google/protobuf/compiler/main.cc" ]
configs -= [ "//gn/standalone:extra_warnings" ]
if (is_win) {
# Protobuf does has its own #define WIN32_LEAN_AND_MEAN.
configs -= [ "//gn/standalone:win32_lean_and_mean" ]
}
}
} # host_toolchain
if (use_custom_libcxx) {
config("libunwind_config") {
defines = [ "_LIBUNWIND_IS_NATIVE_ONLY" ]
cflags = [
"-fstrict-aliasing",
"-fPIC",
# ValueAsBitPattern in Unwind-EHABI.cpp is only used on Debug builds.
"-Wno-unused-function",
# libunwind expects to be compiled with unwind tables so it can
# unwind its own frames.
"-funwind-tables",
]
}
source_set("libunwind") {
visibility = _buildtools_visibility
sources = [
# C++ sources
"libunwind/src/Unwind-EHABI.cpp",
"libunwind/src/libunwind.cpp",
# C sources
"libunwind/src/Unwind-sjlj.c",
"libunwind/src/UnwindLevel1-gcc-ext.c",
"libunwind/src/UnwindLevel1.c",
# ASM sources
"libunwind/src/UnwindRegistersRestore.S",
"libunwind/src/UnwindRegistersSave.S",
]
include_dirs = [
"libunwind/include",
"libunwind/src",
]
configs -= [
"//gn/standalone:extra_warnings",
"//gn/standalone:no_exceptions",
"//gn/standalone:no_rtti",
# When building with msan, libunwind itself triggers memory violations
# that causes msan to get stuck into an infinite loop. Just don't
# instrument libunwind itself.
"//gn/standalone/sanitizers:sanitizers_cflags",
]
configs += [
"//gn/standalone/sanitizers:sanitizer_options_link_helper",
":libunwind_config",
]
}
# Config applied to both libc++ and libc++abi targets below.
config("libc++config") {
visibility = _buildtools_visibility
cflags = [ "-fstrict-aliasing" ]
if (is_win) {
cflags += [
# libc++ wants to redefine the macros WIN32_LEAN_AND_MEAN and
# _CRT_RAND_S in its implementation.
"-Wno-macro-redefined",
]
} else {
cflags += [ "-fPIC" ]
}
configs = [ "//gn/standalone:c++20" ]
defines = [ "_LIBCPP_BUILDING_LIBRARY" ]
}
source_set("libc++abi") {
visibility = _buildtools_visibility
# Fuchsia builds don't link against any libraries that provide stack
# unwinding symbols, unlike Linux does with glibc (same applies for
# Android). Build and link against libunwind manually to get this
# functionality.
if (is_fuchsia || is_android) {
deps = [ ":libunwind" ]
}
sources = [
"libcxxabi/src/abort_message.cpp",
"libcxxabi/src/cxa_aux_runtime.cpp",
"libcxxabi/src/cxa_default_handlers.cpp",
"libcxxabi/src/cxa_exception.cpp",
"libcxxabi/src/cxa_exception_storage.cpp",
"libcxxabi/src/cxa_handlers.cpp",
# This file is supposed to be used in fno-exception builds of
# libc++abi. We build lib++/libc++abi with exceptions enabled.
#"trunk/src/cxa_noexception.cpp",
"libcxxabi/src/cxa_personality.cpp",
"libcxxabi/src/cxa_vector.cpp",
"libcxxabi/src/cxa_virtual.cpp",
"libcxxabi/src/fallback_malloc.cpp",
"libcxxabi/src/private_typeinfo.cpp",
"libcxxabi/src/stdlib_exception.cpp",
"libcxxabi/src/stdlib_stdexcept.cpp",
"libcxxabi/src/stdlib_typeinfo.cpp",
]
if (!is_tsan) {
sources += [ "libcxxabi/src/cxa_guard.cpp" ]
}
# See the comment in cxa_demangle_stub.cc for why we don't use LLVM's
# demangler on android.
sources += [ "libcxxabi/src/cxa_demangle.cpp" ]
if (is_fuchsia || is_android || is_linux) {
sources += [ "libcxxabi/src/cxa_thread_atexit.cpp" ]
}
defines = [
"LIBCXXABI_SILENT_TERMINATE",
# TODO(crbug.com/1298070) _LIBCPP_CONSTINIT is defined in a libc++
# revision more recent than the one currently used in Perfetto/Chrome.
"_LIBCPP_CONSTINIT=constinit",
]
configs -= [
"//gn/standalone:extra_warnings",
"//gn/standalone:no_exceptions",
"//gn/standalone:no_rtti",
"//gn/standalone:c++17",
]
configs += [
":libc++config",
"//gn/standalone/sanitizers:sanitizer_options_link_helper",
]
if (!custom_libcxx_is_static) {
configs -= [ "//gn/standalone:visibility_hidden" ]
}
# libc++abi depends on libc++ internals.
include_dirs = [ "libcxx/src" ]
}
# Explicitly set version macros to Windows 7 to prevent libc++ from adding a
# hard dependency on GetSystemTimePreciseAsFileTime, which was introduced in
# Windows 8.
config("libc++winver") {
defines = [
"NTDDI_VERSION=NTDDI_WIN7",
"_WIN32_WINNT=_WIN32_WINNT_WIN7",
"WINVER=_WIN32_WINNT_WIN7",
]
}
if (custom_libcxx_is_static) {
libcxx_target_type = "source_set"
} else {
libcxx_target_type = "shared_library"
}
target(libcxx_target_type, "libc++") {
visibility = _buildtools_visibility
visibility += [ "../gn/standalone/libc++:*" ]
if (is_linux && !is_clang) {
libs = [ "atomic" ]
}
inputs = [
"libcxx_config/__assertion_handler",
"libcxx_config/__config_site",
]
sources = [
"libcxx/src/algorithm.cpp",
"libcxx/src/any.cpp",
"libcxx/src/atomic.cpp",
"libcxx/src/barrier.cpp",
"libcxx/src/bind.cpp",
"libcxx/src/call_once.cpp",
"libcxx/src/charconv.cpp",
"libcxx/src/chrono.cpp",
"libcxx/src/condition_variable.cpp",
"libcxx/src/condition_variable_destructor.cpp",
"libcxx/src/error_category.cpp",
"libcxx/src/exception.cpp",
"libcxx/src/filesystem/directory_iterator.cpp",
"libcxx/src/filesystem/filesystem_error.cpp",
"libcxx/src/filesystem/operations.cpp",
"libcxx/src/filesystem/path.cpp",
"libcxx/src/functional.cpp",
"libcxx/src/future.cpp",
"libcxx/src/hash.cpp",
"libcxx/src/ios.cpp",
"libcxx/src/ios.instantiations.cpp",
"libcxx/src/iostream.cpp",
"libcxx/src/legacy_pointer_safety.cpp",
"libcxx/src/locale.cpp",
"libcxx/src/memory.cpp",
"libcxx/src/mutex.cpp",
"libcxx/src/mutex_destructor.cpp",
"libcxx/src/new_handler.cpp",
"libcxx/src/new_helpers.cpp",
"libcxx/src/optional.cpp",
"libcxx/src/random.cpp",
"libcxx/src/random_shuffle.cpp",
"libcxx/src/regex.cpp",
"libcxx/src/ryu/d2fixed.cpp",
"libcxx/src/ryu/d2s.cpp",
"libcxx/src/ryu/f2s.cpp",
"libcxx/src/shared_mutex.cpp",
"libcxx/src/stdexcept.cpp",
"libcxx/src/string.cpp",
"libcxx/src/strstream.cpp",
"libcxx/src/system_error.cpp",
"libcxx/src/thread.cpp",
"libcxx/src/typeinfo.cpp",
"libcxx/src/valarray.cpp",
"libcxx/src/variant.cpp",
"libcxx/src/vector.cpp",
"libcxx/src/verbose_abort.cpp",
]
if (!using_sanitizer) {
# In {a,t,m}san configurations, operator new and operator delete will be
# provided by the sanitizer runtime library. Since libc++ defines these
# symbols with weak linkage, and the *san runtime uses strong linkage, it
# should technically be OK to include this file, but it's removed to be
# explicit.
# We need using_sanitizer rather than is_asan || is_msan ... because in
# perfetto, when cross-compiling, we build only targets with sanitizers,
# but not host artifacts, and using_sanitizer is only true for the
# target toolchain, while is_asan is globally true on all toolchains.
sources += [ "libcxx/src/new.cpp" ]
}
include_dirs = [ "libcxx/src" ]
if (is_win) {
sources += [
"libcxx/src/support/win32/locale_win32.cpp",
"libcxx/src/support/win32/support.cpp",
"libcxx/src/support/win32/thread_win32.cpp",
]
configs += [ ":libc++winver" ]
}
configs -= [
"//gn/standalone:extra_warnings",
"//gn/standalone:no_exceptions",
"//gn/standalone:no_rtti",
"//gn/standalone:c++17",
]
if ((is_android || is_mac) && !custom_libcxx_is_static) {
# Use libc++_perfetto to avoid conflicting with system libc++
output_name = "libc++_perfettto"
}
configs += [
":libc++config",
"//gn/standalone/sanitizers:sanitizer_options_link_helper",
]
if (!custom_libcxx_is_static) {
configs -= [ "//gn/standalone:visibility_hidden" ]
}
defines = []
if (custom_libcxx_is_static) {
if (is_mac && is_clang) {
# We want operator new/delete to be private on Mac, but these functions
# are implicitly created by the compiler for each translation unit, as
# specified in the C++ spec 3.7.4p2, which makes them always have
# default visibility. This option is needed to force hidden visibility
# since -fvisibility=hidden doesn't have the desired effect.
cflags = [ "-fvisibility-global-new-delete-hidden" ]
} else {
defines += [
# This resets the visibility to default only for the various
# flavors of operator new and operator delete. These symbols
# are weak and get overriden by Chromium-provided ones, but if
# these symbols had hidden visibility, this would make the
# Chromium symbols hidden too because elf visibility rules
# require that linkers use the least visible form when merging,
# and if this is hidden, then when we merge it with tcmalloc's
# operator new, hidden visibility would win. However, tcmalloc
# needs a visible operator new to also override operator new
# references from system libraries.
# TODO(lld): Ask lld for a --force-public-visibility flag or
# similar to that overrides the default elf merging rules, and
# make tcmalloc's gn config pass that to all its dependencies,
# then remove this override here.
"_LIBCPP_OVERRIDABLE_FUNC_VIS=__attribute__((__visibility__(\"default\")))",
]
}
}
if (!is_mac && using_sanitizer && (is_asan || is_tsan || is_msan)) {
# In {a,t,m}san configurations, operator new and operator delete will be
# provided by the sanitizer runtime library. Since libc++ defines these
# symbols with weak linkage, and the *san runtime uses strong linkage, it
# should technically be OK to omit this, but it's added to be explicit.
defines += [ "_LIBCPP_DISABLE_NEW_DELETE_DEFINITIONS" ]
}
if (!is_win) {
defines += [ "LIBCXX_BUILDING_LIBCXXABI" ]
deps = [ ":libc++abi" ]
}
}
} # if (use_custom_libcxx)
config("benchmark_config") {
visibility = _buildtools_visibility
include_dirs = [ "benchmark/include" ]
configs = [ ":test_warning_suppressions" ]
}
source_set("benchmark") {
visibility = _buildtools_visibility
testonly = true
sources = [
"benchmark/include/benchmark/benchmark.h",
"benchmark/src/arraysize.h",
"benchmark/src/benchmark.cc",
"benchmark/src/benchmark_api_internal.cc",
"benchmark/src/benchmark_api_internal.h",
"benchmark/src/benchmark_name.cc",
"benchmark/src/benchmark_register.cc",
"benchmark/src/benchmark_register.h",
"benchmark/src/benchmark_runner.cc",
"benchmark/src/benchmark_runner.h",
"benchmark/src/check.h",
"benchmark/src/colorprint.cc",
"benchmark/src/colorprint.h",
"benchmark/src/commandlineflags.cc",
"benchmark/src/commandlineflags.h",
"benchmark/src/complexity.cc",
"benchmark/src/complexity.h",
"benchmark/src/console_reporter.cc",
"benchmark/src/counter.cc",
"benchmark/src/counter.h",
"benchmark/src/csv_reporter.cc",
"benchmark/src/cycleclock.h",
"benchmark/src/internal_macros.h",
"benchmark/src/json_reporter.cc",
"benchmark/src/log.h",
"benchmark/src/mutex.h",
"benchmark/src/perf_counters.cc",
"benchmark/src/perf_counters.h",
"benchmark/src/re.h",
"benchmark/src/reporter.cc",
"benchmark/src/sleep.cc",
"benchmark/src/sleep.h",
"benchmark/src/statistics.cc",
"benchmark/src/statistics.h",
"benchmark/src/string_util.cc",
"benchmark/src/string_util.h",
"benchmark/src/sysinfo.cc",
"benchmark/src/thread_manager.h",
"benchmark/src/thread_timer.h",
"benchmark/src/timers.cc",
"benchmark/src/timers.h",
]
defines = [ "HAVE_POSIX_REGEX" ]
public_configs = [ ":benchmark_config" ]
all_dependent_configs = [ ":benchmark_config" ]
if (!is_win) {
cflags = [ "-Wno-deprecated-declarations" ]
}
configs -= [ "//gn/standalone:extra_warnings" ]
deps = [ "//gn:default_deps" ]
}
# On Linux/Android use libbacktrace in debug builds for better stacktraces.
if (is_linux || is_android) {
config("libbacktrace_config") {
visibility = _buildtools_visibility
include_dirs = [
"libbacktrace_config",
"libbacktrace",
]
cflags = [
# We force include this config file because "config.h" is too generic as a
# file name and on some platforms #include "config.h" ends up colliding
# importing some other project's config.h.
"-include",
rebase_path("libbacktrace_config/config.h", root_build_dir),
]
}
source_set("libbacktrace") {
visibility = _buildtools_visibility
sources = [
"libbacktrace/dwarf.c",
"libbacktrace/elf.c",
"libbacktrace/fileline.c",
"libbacktrace/mmap.c",
"libbacktrace/mmapio.c",
"libbacktrace/posix.c",
"libbacktrace/sort.c",
"libbacktrace/state.c",
]
configs -= [ "//gn/standalone:extra_warnings" ]
public_configs = [ ":libbacktrace_config" ]
deps = [ "//gn:default_deps" ]
}
}
config("sqlite_config") {
visibility = _buildtools_visibility
include_dirs = [ "sqlite" ]
cflags = [
"-DSQLITE_THREADSAFE=0",
"-DSQLITE_DEFAULT_MEMSTATUS=0",
"-DSQLITE_LIKE_DOESNT_MATCH_BLOBS",
"-DSQLITE_OMIT_DEPRECATED",
"-DSQLITE_OMIT_SHARED_CACHE",
"-DHAVE_USLEEP",
"-DHAVE_UTIME",
"-DSQLITE_BYTEORDER=1234",
"-DSQLITE_DEFAULT_AUTOVACUUM=0",
"-DSQLITE_DEFAULT_MMAP_SIZE=0",
"-DSQLITE_CORE",
"-DSQLITE_TEMP_STORE=3",
"-DSQLITE_OMIT_LOAD_EXTENSION",
"-DSQLITE_OMIT_RANDOMNESS",
"-DSQLITE_OMIT_AUTOINIT",
"-DSQLITE_ENABLE_JSON1",
]
if (is_clang && is_win) {
# SQLite uses __int64 which clang complains about unless
# we specify this flag.
cflags += [ "-Wno-language-extension-token" ]
}
}
source_set("sqlite") {
visibility = _buildtools_visibility
if (perfetto_use_system_sqlite) {
# Use the system sqlite library instead of the hermetic one.
libs = [ "sqlite3" ]
} else {
sources = [
"sqlite/sqlite3.c",
"sqlite/sqlite3.h",
"sqlite/sqlite3ext.h",
"sqlite_src/ext/misc/percentile.c",
]
}
configs -= [ "//gn/standalone:extra_warnings" ]
public_configs = [ ":sqlite_config" ]
deps = [ "//gn:default_deps" ]
}
source_set("lzma") {
visibility = _buildtools_visibility
defines = [ "_7ZIP_ST" ]
sources = [
"lzma/C/7zAlloc.c",
"lzma/C/7zArcIn.c",
"lzma/C/7zBuf.c",
"lzma/C/7zBuf2.c",
"lzma/C/7zCrc.c",
"lzma/C/7zCrcOpt.c",
"lzma/C/7zDec.c",
"lzma/C/7zFile.c",
"lzma/C/7zStream.c",
"lzma/C/Aes.c",
"lzma/C/AesOpt.c",
"lzma/C/Alloc.c",
"lzma/C/Bcj2.c",
"lzma/C/Bra.c",
"lzma/C/Bra86.c",
"lzma/C/BraIA64.c",
"lzma/C/CpuArch.c",
"lzma/C/Delta.c",
"lzma/C/LzFind.c",
"lzma/C/Lzma2Dec.c",
"lzma/C/Lzma2Enc.c",
"lzma/C/Lzma86Dec.c",
"lzma/C/Lzma86Enc.c",
"lzma/C/LzmaDec.c",
"lzma/C/LzmaEnc.c",
"lzma/C/LzmaLib.c",
"lzma/C/Ppmd7.c",
"lzma/C/Ppmd7Dec.c",
"lzma/C/Ppmd7Enc.c",
"lzma/C/Sha256.c",
"lzma/C/Sort.c",
"lzma/C/Xz.c",
"lzma/C/XzCrc64.c",
"lzma/C/XzCrc64Opt.c",
"lzma/C/XzDec.c",
"lzma/C/XzEnc.c",
"lzma/C/XzIn.c",
]
configs -= [ "//gn/standalone:extra_warnings" ]
cflags = [
"-Wno-empty-body",
"-Wno-enum-conversion",
]
deps = [ "//gn:default_deps" ]
}
source_set("zlib") {
visibility = _buildtools_visibility
sources = [
"zlib/adler32.c",
"zlib/chromeconf.h",
"zlib/compress.c",
"zlib/contrib/optimizations/insert_string.h",
"zlib/cpu_features.c",
"zlib/cpu_features.h",
"zlib/crc32.c",
"zlib/crc32.h",
"zlib/deflate.c",
"zlib/deflate.h",
"zlib/gzclose.c",
"zlib/gzguts.h",
"zlib/gzlib.c",
"zlib/gzread.c",
"zlib/gzwrite.c",
"zlib/infback.c",
"zlib/inffast.c",
"zlib/inffast.h",
"zlib/inffixed.h",
"zlib/inflate.c",
"zlib/inflate.h",
"zlib/inftrees.c",
"zlib/inftrees.h",
"zlib/trees.c",
"zlib/trees.h",
"zlib/uncompr.c",
"zlib/zconf.h",
"zlib/zlib.h",
"zlib/zutil.c",
"zlib/zutil.h",
]
configs -= [ "//gn/standalone:extra_warnings" ]
public_configs = [ ":zlib_config" ]
deps = [ "//gn:default_deps" ]
if (is_win) {
defines = [ "X86_WINDOWS" ]
}
# TODO(primiano): look into ADLER32_SIMD_SSSE3 and other SIMD optimizations
# (from chromium's third_party/zlib/BUILD.gn).
}
config("zlib_config") {
visibility = _buildtools_visibility
defines = [
"ZLIB_IMPLEMENTATION",
"CHROMIUM_ZLIB_NO_CHROMECONF",
]
cflags = [
# Using -isystem instead of include_dirs (-I), so we don't need to suppress
# warnings coming from third-party headers. Doing so would mask warnings in
# our own code.
perfetto_isystem_cflag,
rebase_path("zlib", root_build_dir),
]
if (is_clang) {
cflags += [
"-Wno-unknown-warning-option",
"-Wno-deprecated-non-prototype",
]
}
}
source_set("zstd") {
visibility = _buildtools_visibility
sources = [
"zstd/lib/common/allocations.h",
"zstd/lib/common/bits.h",
"zstd/lib/common/bitstream.h",
"zstd/lib/common/compiler.h",
"zstd/lib/common/cpu.h",
"zstd/lib/common/debug.c",
"zstd/lib/common/debug.h",
"zstd/lib/common/entropy_common.c",
"zstd/lib/common/error_private.c",
"zstd/lib/common/error_private.h",
"zstd/lib/common/fse.h",
"zstd/lib/common/fse_decompress.c",
"zstd/lib/common/huf.h",
"zstd/lib/common/mem.h",
"zstd/lib/common/pool.c",
"zstd/lib/common/pool.h",
"zstd/lib/common/portability_macros.h",
"zstd/lib/common/threading.c",
"zstd/lib/common/threading.h",
"zstd/lib/common/xxhash.c",
"zstd/lib/common/xxhash.h",
"zstd/lib/common/zstd_common.c",
"zstd/lib/common/zstd_deps.h",
"zstd/lib/common/zstd_internal.h",
"zstd/lib/common/zstd_trace.h",
"zstd/lib/compress/clevels.h",
"zstd/lib/compress/fse_compress.c",
"zstd/lib/compress/hist.c",
"zstd/lib/compress/hist.h",
"zstd/lib/compress/huf_compress.c",
"zstd/lib/compress/zstd_compress.c",
"zstd/lib/compress/zstd_compress_internal.h",
"zstd/lib/compress/zstd_compress_literals.c",
"zstd/lib/compress/zstd_compress_literals.h",
"zstd/lib/compress/zstd_compress_sequences.c",
"zstd/lib/compress/zstd_compress_sequences.h",
"zstd/lib/compress/zstd_compress_superblock.c",
"zstd/lib/compress/zstd_compress_superblock.h",
"zstd/lib/compress/zstd_cwksp.h",
"zstd/lib/compress/zstd_double_fast.c",
"zstd/lib/compress/zstd_double_fast.h",
"zstd/lib/compress/zstd_fast.c",
"zstd/lib/compress/zstd_fast.h",
"zstd/lib/compress/zstd_lazy.c",
"zstd/lib/compress/zstd_lazy.h",
"zstd/lib/compress/zstd_ldm.c",
"zstd/lib/compress/zstd_ldm.h",
"zstd/lib/compress/zstd_ldm_geartab.h",
"zstd/lib/compress/zstd_opt.c",
"zstd/lib/compress/zstd_opt.h",
"zstd/lib/compress/zstdmt_compress.c",
"zstd/lib/compress/zstdmt_compress.h",
"zstd/lib/decompress/huf_decompress.c",
"zstd/lib/decompress/zstd_ddict.c",
"zstd/lib/decompress/zstd_ddict.h",
"zstd/lib/decompress/zstd_decompress.c",
"zstd/lib/decompress/zstd_decompress_block.c",
"zstd/lib/decompress/zstd_decompress_block.h",
"zstd/lib/decompress/zstd_decompress_internal.h",
"zstd/lib/deprecated/zbuff.h",
"zstd/lib/deprecated/zbuff_common.c",
"zstd/lib/deprecated/zbuff_compress.c",
"zstd/lib/deprecated/zbuff_decompress.c",
"zstd/lib/dictBuilder/cover.c",
"zstd/lib/dictBuilder/cover.h",
"zstd/lib/dictBuilder/divsufsort.c",
"zstd/lib/dictBuilder/divsufsort.h",
"zstd/lib/dictBuilder/fastcover.c",
"zstd/lib/dictBuilder/zdict.c",
"zstd/lib/zdict.h",
"zstd/lib/zstd.h",
"zstd/lib/zstd_errors.h",
]
configs -= [ "//gn/standalone:extra_warnings" ]
public_configs = [ ":zstd_config" ]
deps = [ "//gn:default_deps" ]
}
config("zstd_config") {
visibility = _buildtools_visibility
cflags = [
perfetto_isystem_cflag,
rebase_path("zstd", root_build_dir),
]
if (current_cpu == "x64") {
defines = [ "ZSTD_DISABLE_ASM" ]
}
}
# For standalone profiler builds.
source_set("libunwindstack") {
visibility = _buildtools_visibility
include_dirs = [
"android-unwinding/libunwindstack/include",
"android-unwinding/libunwindstack",
"android-libbase/include",
"android-logging/liblog/include",
"android-libprocinfo/include",
"android-core/include",
"android-core/libcutils/include",
"bionic/libc/async_safe/include",
"bionic/libc/platform/",
"lzma/C",
"zstd/lib",
]
deps = [
":lzma",
":zlib",
":zstd",
"//gn:default_deps",
]
sources = [
"android-libbase/file.cpp",
"android-libbase/stringprintf.cpp",
"android-libbase/strings.cpp",
"android-unwinding/libunwindstack/ArmExidx.cpp",
"android-unwinding/libunwindstack/Demangle.cpp",
"android-unwinding/libunwindstack/DwarfCfa.cpp",
"android-unwinding/libunwindstack/DwarfEhFrameWithHdr.cpp",
"android-unwinding/libunwindstack/DwarfMemory.cpp",
"android-unwinding/libunwindstack/DwarfOp.cpp",
"android-unwinding/libunwindstack/DwarfSection.cpp",
"android-unwinding/libunwindstack/Elf.cpp",
"android-unwinding/libunwindstack/ElfInterface.cpp",
"android-unwinding/libunwindstack/ElfInterfaceArm.cpp",
"android-unwinding/libunwindstack/Global.cpp",
"android-unwinding/libunwindstack/JitDebug.cpp",
"android-unwinding/libunwindstack/MapInfo.cpp",
"android-unwinding/libunwindstack/Maps.cpp",
"android-unwinding/libunwindstack/Memory.cpp",
"android-unwinding/libunwindstack/MemoryXz.cpp",
"android-unwinding/libunwindstack/Regs.cpp",
"android-unwinding/libunwindstack/RegsArm.cpp",
"android-unwinding/libunwindstack/RegsArm64.cpp",
"android-unwinding/libunwindstack/RegsRiscv64.cpp",
"android-unwinding/libunwindstack/RegsX86.cpp",
"android-unwinding/libunwindstack/RegsX86_64.cpp",
"android-unwinding/libunwindstack/Symbols.cpp",
"android-unwinding/libunwindstack/Unwinder.cpp",
]
if (!is_android) {
sources += [
"android-libbase/liblog_symbols.cpp",
"android-libbase/logging.cpp",
"android-libbase/threads.cpp",
"android-logging/liblog/logger_write.cpp",
"android-logging/liblog/properties.cpp",
"android-unwinding/libunwindstack/LogStdout.cpp",
"android-unwinding/libunwindstack/MemoryMte.cpp",
]
} else {
sources += [ "android-unwinding/libunwindstack/LogAndroid.cpp" ]
}
if (current_cpu == "x86") {
sources += [ "android-unwinding/libunwindstack/AsmGetRegsX86.S" ]
} else if (current_cpu == "x64") {
sources += [ "android-unwinding/libunwindstack/AsmGetRegsX86_64.S" ]
}
configs -= [
"//gn/standalone:extra_warnings",
"//gn/standalone:visibility_hidden",
]
cflags = [ "-DFAKE_LOG_DEVICE=1" ]
if (!is_win) {
cflags += [
"-Wno-deprecated-declarations",
"-Wno-vla-cxx-extension",
"-Wno-c99-designator",
]
}
public_configs = [ ":libunwindstack_config" ]
}
config("bionic_kernel_uapi_headers") {
visibility = _buildtools_visibility
cflags = [
perfetto_isystem_cflag,
rebase_path("bionic/libc/kernel", root_build_dir),
]
}
config("jsoncpp_config") {
visibility = _buildtools_visibility
cflags = [ "-DJSON_USE_EXCEPTION=0" ]
cflags += [
# Using -isystem instead of include_dirs (-I), so we don't need to suppress
# warnings coming from third-party headers. Doing so would mask warnings in
# our own code.
perfetto_isystem_cflag,
rebase_path("jsoncpp/include", root_build_dir),
]
if (!is_win) {
cflags += [ "-Wno-deprecated-declarations" ]
}
if (is_clang && is_win) {
# JSON uses __int64 which clang complains about unless we specify this flag.
cflags += [ "-Wno-language-extension-token" ]
}
}
source_set("jsoncpp") {
visibility = _buildtools_visibility
sources = [
"jsoncpp/src/lib_json/json_reader.cpp",
"jsoncpp/src/lib_json/json_value.cpp",
"jsoncpp/src/lib_json/json_writer.cpp",
]
configs -= [ "//gn/standalone:extra_warnings" ]
public_configs = [ ":jsoncpp_config" ]
deps = [ "//gn:default_deps" ]
}
config("linenoise_config") {
visibility = _buildtools_visibility
cflags = [
# Using -isystem instead of include_dirs (-I), so we don't need to suppress
# warnings coming from third-party headers. Doing so would mask warnings in
# our own code.
perfetto_isystem_cflag,
rebase_path("linenoise", root_build_dir),
]
}
source_set("linenoise") {
visibility = _buildtools_visibility
sources = [
"linenoise/linenoise.c",
"linenoise/linenoise.h",
]
configs -= [ "//gn/standalone:extra_warnings" ]
public_configs = [ ":linenoise_config" ]
cflags = [ "-Wno-tautological-unsigned-zero-compare" ]
deps = [ "//gn:default_deps" ]
}
if (use_libfuzzer) {
source_set("libfuzzer") {
visibility = _buildtools_visibility
configs -= [
"//gn/standalone:extra_warnings",
"//gn/standalone/sanitizers:sanitizers_cflags",
]
sources = [
"libfuzzer/FuzzerCrossOver.cpp",
"libfuzzer/FuzzerDataFlowTrace.cpp",
"libfuzzer/FuzzerDriver.cpp",
"libfuzzer/FuzzerExtFunctionsDlsym.cpp",
"libfuzzer/FuzzerExtFunctionsWeak.cpp",
"libfuzzer/FuzzerExtFunctionsWindows.cpp",
"libfuzzer/FuzzerExtraCounters.cpp",
"libfuzzer/FuzzerFork.cpp",
"libfuzzer/FuzzerIO.cpp",
"libfuzzer/FuzzerIOPosix.cpp",
"libfuzzer/FuzzerIOWindows.cpp",
"libfuzzer/FuzzerLoop.cpp",
"libfuzzer/FuzzerMain.cpp",
"libfuzzer/FuzzerMerge.cpp",
"libfuzzer/FuzzerMutate.cpp",
"libfuzzer/FuzzerSHA1.cpp",
"libfuzzer/FuzzerTracePC.cpp",
"libfuzzer/FuzzerUtil.cpp",
"libfuzzer/FuzzerUtilDarwin.cpp",
"libfuzzer/FuzzerUtilFuchsia.cpp",
"libfuzzer/FuzzerUtilLinux.cpp",
"libfuzzer/FuzzerUtilPosix.cpp",
"libfuzzer/FuzzerUtilWindows.cpp",
]
deps = [ "//gn:default_deps" ]
}
}
config("llvm_demangle_config") {
visibility = _buildtools_visibility
include_dirs = [ "llvm-project/llvm/include" ]
}
source_set("llvm_demangle") {
visibility = _buildtools_visibility
configs -= [ "//gn/standalone:extra_warnings" ]
public_configs = [ ":llvm_demangle_config" ]
sources = [
"llvm-project/llvm/include/llvm/Demangle/Demangle.h",
"llvm-project/llvm/include/llvm/Demangle/DemangleConfig.h",
"llvm-project/llvm/include/llvm/Demangle/ItaniumDemangle.h",
"llvm-project/llvm/include/llvm/Demangle/MicrosoftDemangle.h",
"llvm-project/llvm/include/llvm/Demangle/MicrosoftDemangleNodes.h",
"llvm-project/llvm/include/llvm/Demangle/StringViewExtras.h",
"llvm-project/llvm/include/llvm/Demangle/Utility.h",
"llvm-project/llvm/lib/Demangle/DLangDemangle.cpp",
"llvm-project/llvm/lib/Demangle/Demangle.cpp",
"llvm-project/llvm/lib/Demangle/ItaniumDemangle.cpp",
"llvm-project/llvm/lib/Demangle/MicrosoftDemangle.cpp",
"llvm-project/llvm/lib/Demangle/MicrosoftDemangleNodes.cpp",
"llvm-project/llvm/lib/Demangle/RustDemangle.cpp",
]
deps = [ "//gn:default_deps" ]
}
if (enable_perfetto_grpc) {
config("grpc_absl_config") {
visibility = _buildtools_visibility
include_dirs = [ "grpc/src/third_party/abseil-cpp" ]
cflags = [ "-Wno-deprecated-builtins" ]
}
config("grpc_boringssl_config") {
visibility = _buildtools_visibility
include_dirs = [ "grpc/src/third_party/boringssl-with-bazel/src/include" ]
}
config("grpc_upb_config") {
visibility = _buildtools_visibility
include_dirs = [
"grpc/src/third_party/upb",
"grpc/src/src/core/ext/upb-generated",
"grpc/src/src/core/ext/upbdefs-generated",
]
}
config("grpc_re2_config") {
visibility = _buildtools_visibility
include_dirs = [ "grpc/src/third_party/re2" ]
}
config("grpc_internal_config") {
visibility = _buildtools_visibility
include_dirs = [
"grpc/src/include",
"grpc/src",
"grpc/src/third_party/address_sorting/include",
"grpc/src/third_party/re2",
"grpc/src/src/core/ext/upb-generated",
"grpc/src/src/core/ext/upbdefs-generated",
"grpc/src/third_party/xxhash",
]
cflags = [ "-DGRPC_ARES=0" ]
}
config("grpc_gen_config") {
cflags = [
# Using -isystem instead of include_dirs (-I), so we don't need to
# suppress warnings coming from libprotobuf headers. Doing so would mask
# warnings in our own code.
perfetto_isystem_cflag,
rebase_path("grpc/src/include", root_build_dir),
perfetto_isystem_cflag,
rebase_path("grpc/src/third_party/abseil-cpp", root_build_dir),
]
# This issues appear in .grpc.pb.h files so we unfortunately need to leak
# the cflags outside of just compiling this code.
if (is_clang && !is_win) {
cflags += [
"-Wno-weak-vtables",
"-Wno-suggest-destructor-override",
]
}
}
}