| # 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/__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/charconv.cpp", | 
 |       "libcxx/src/chrono.cpp", | 
 |       "libcxx/src/condition_variable.cpp", | 
 |       "libcxx/src/condition_variable_destructor.cpp", | 
 |       "libcxx/src/exception.cpp", | 
 |       "libcxx/src/format.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.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/utility.cpp", | 
 |       "libcxx/src/valarray.cpp", | 
 |       "libcxx/src/variant.cpp", | 
 |       "libcxx/src/vector.cpp", | 
 |       "libcxx/src/verbose_abort.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/StringView.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", | 
 |       ] | 
 |     } | 
 |   } | 
 | } |