| # Copyright 2018 The Chromium Authors | |
| # Use of this source code is governed by a BSD-style license that can be | |
| # found in the LICENSE file. | |
| # Flags specified here must not impact ABI. Code compiled with and without these | |
| # opts will be linked together, and in some cases headers compiled with and | |
| # without these options will be part of the same program. | |
| import("//build/config/c++/c++.gni") | |
| import("//build/config/compiler/compiler.gni") | |
| import("//build/config/sanitizers/sanitizers.gni") | |
| import("//build/toolchain/toolchain.gni") | |
| import("//build_overrides/build.gni") | |
| import("//third_party/abseil-cpp/absl.gni") | |
| config("absl_component_build") { | |
| defines = [ "ABSL_CONSUME_DLL" ] | |
| } | |
| component("absl") { | |
| public_deps = [ ":absl_component_deps" ] | |
| if (is_component_build) { | |
| public_configs = [ ":absl_component_build" ] | |
| if (is_win && is_clang) { | |
| file = "symbols_${current_cpu}" | |
| if (is_debug) { | |
| file = "${file}_dbg" | |
| } else { | |
| file = "${file}_rel" | |
| } | |
| if (!is_debug && current_cpu == "x64" && is_asan) { | |
| file = "${file}_asan" | |
| } | |
| if (use_cxx23) { | |
| file = "${file}_cxx23" | |
| } | |
| file = "${file}.def" | |
| sources = [ file ] | |
| } | |
| } | |
| if (is_win) { | |
| all_dependent_configs = [ "//tools/win/DebugVisualizers:absl" ] | |
| inputs = [ | |
| # absl.natvis listed as an input here instead of in | |
| # //tools/win/DebugVisualizers:absl to prevent unnecessary size increase | |
| # in generated build files. | |
| "//tools/win/DebugVisualizers/absl.natvis", | |
| ] | |
| } | |
| } | |
| group("absl_component_deps") { | |
| public_deps = [ | |
| "//third_party/abseil-cpp/absl/algorithm", | |
| "//third_party/abseil-cpp/absl/algorithm:container", | |
| "//third_party/abseil-cpp/absl/base", | |
| "//third_party/abseil-cpp/absl/base:config", | |
| "//third_party/abseil-cpp/absl/base:core_headers", | |
| "//third_party/abseil-cpp/absl/base:fast_type_id", | |
| "//third_party/abseil-cpp/absl/base:log_severity", | |
| "//third_party/abseil-cpp/absl/base:no_destructor", | |
| "//third_party/abseil-cpp/absl/base:nullability", | |
| "//third_party/abseil-cpp/absl/base:prefetch", | |
| "//third_party/abseil-cpp/absl/base:throw_delegate", | |
| "//third_party/abseil-cpp/absl/cleanup", | |
| "//third_party/abseil-cpp/absl/container:btree", | |
| "//third_party/abseil-cpp/absl/container:chunked_queue", | |
| "//third_party/abseil-cpp/absl/container:fixed_array", | |
| "//third_party/abseil-cpp/absl/container:flat_hash_map", | |
| "//third_party/abseil-cpp/absl/container:flat_hash_set", | |
| "//third_party/abseil-cpp/absl/container:hash_container_defaults", | |
| "//third_party/abseil-cpp/absl/container:inlined_vector", | |
| "//third_party/abseil-cpp/absl/container:linked_hash_map", | |
| "//third_party/abseil-cpp/absl/container:linked_hash_set", | |
| "//third_party/abseil-cpp/absl/container:node_hash_map", | |
| "//third_party/abseil-cpp/absl/container:node_hash_set", | |
| "//third_party/abseil-cpp/absl/crc:crc32c", | |
| "//third_party/abseil-cpp/absl/debugging:failure_signal_handler", | |
| "//third_party/abseil-cpp/absl/debugging:leak_check", | |
| "//third_party/abseil-cpp/absl/debugging:stacktrace", | |
| "//third_party/abseil-cpp/absl/debugging:symbolize", | |
| "//third_party/abseil-cpp/absl/functional:any_invocable", | |
| "//third_party/abseil-cpp/absl/functional:bind_back", | |
| "//third_party/abseil-cpp/absl/functional:bind_front", | |
| "//third_party/abseil-cpp/absl/functional:function_ref", | |
| "//third_party/abseil-cpp/absl/functional:overload", | |
| "//third_party/abseil-cpp/absl/hash", | |
| "//third_party/abseil-cpp/absl/log:absl_check", | |
| "//third_party/abseil-cpp/absl/log:absl_log", | |
| "//third_party/abseil-cpp/absl/log:absl_vlog_is_on", | |
| "//third_party/abseil-cpp/absl/log:die_if_null", | |
| "//third_party/abseil-cpp/absl/log:globals", | |
| "//third_party/abseil-cpp/absl/log:initialize", | |
| "//third_party/abseil-cpp/absl/log:log_entry", | |
| "//third_party/abseil-cpp/absl/log:log_sink", | |
| "//third_party/abseil-cpp/absl/log:log_sink_registry", | |
| "//third_party/abseil-cpp/absl/log:log_streamer", | |
| "//third_party/abseil-cpp/absl/log:structured", | |
| "//third_party/abseil-cpp/absl/memory", | |
| "//third_party/abseil-cpp/absl/meta:type_traits", | |
| "//third_party/abseil-cpp/absl/numeric:bits", | |
| "//third_party/abseil-cpp/absl/numeric:int128", | |
| "//third_party/abseil-cpp/absl/random", | |
| "//third_party/abseil-cpp/absl/random:bit_gen_ref", | |
| "//third_party/abseil-cpp/absl/random:distributions", | |
| "//third_party/abseil-cpp/absl/random:mocking_access", | |
| "//third_party/abseil-cpp/absl/random:seed_gen_exception", | |
| "//third_party/abseil-cpp/absl/random:seed_sequences", | |
| "//third_party/abseil-cpp/absl/status", | |
| "//third_party/abseil-cpp/absl/status:status_builder", | |
| "//third_party/abseil-cpp/absl/status:status_macros", | |
| "//third_party/abseil-cpp/absl/status:statusor", | |
| "//third_party/abseil-cpp/absl/strings", | |
| "//third_party/abseil-cpp/absl/strings:charset", | |
| "//third_party/abseil-cpp/absl/strings:cord", | |
| "//third_party/abseil-cpp/absl/strings:has_ostream_operator", | |
| "//third_party/abseil-cpp/absl/strings:resize_and_overwrite", | |
| "//third_party/abseil-cpp/absl/strings:str_format", | |
| "//third_party/abseil-cpp/absl/strings:string_view", | |
| "//third_party/abseil-cpp/absl/synchronization", | |
| "//third_party/abseil-cpp/absl/time", | |
| "//third_party/abseil-cpp/absl/time:clock_interface", | |
| "//third_party/abseil-cpp/absl/types:any_span", | |
| "//third_party/abseil-cpp/absl/types:compare", | |
| "//third_party/abseil-cpp/absl/types:optional", | |
| "//third_party/abseil-cpp/absl/types:optional_ref", | |
| "//third_party/abseil-cpp/absl/types:source_location", | |
| "//third_party/abseil-cpp/absl/types:span", | |
| "//third_party/abseil-cpp/absl/types:variant", | |
| "//third_party/abseil-cpp/absl/utility", | |
| ] | |
| # Dependencies that preferably shouldn't be public in chromium. | |
| public_deps += [ | |
| # public in abseil, but deprecated in chromium, yet used. | |
| "//third_party/abseil-cpp/absl/base:dynamic_annotations", | |
| # base/logging.cc uses this non-public absl dependency while there no better | |
| # alternative to inject abort hook. See notes in `base/logging.cc`. | |
| "//third_party/abseil-cpp/absl/base:raw_logging_internal", | |
| # absl internal utilities used by protobuf. | |
| "//third_party/abseil-cpp/absl/container:layout", | |
| ] | |
| if (is_component_build) { | |
| public_deps += [ ":absl_full_deps" ] | |
| } | |
| visibility = [ ":absl" ] | |
| } | |
| # Abseil testing utilities should only be included in test binaries. | |
| source_set("test_support") { | |
| testonly = true | |
| public_deps = [ "//third_party/abseil-cpp/absl/hash:hash_testing" ] | |
| deps = [ ":absl" ] | |
| } | |
| # Some third-party libraries use additional parts of absl that are banned in | |
| # Chrome (e.g. flags generates static initializers that are undesirable in | |
| # non-test binaries). These third-party libraries can depend on `absl_full` | |
| # instead of `absl` to use those banned subsets of Abseil as well. | |
| source_set("absl_full") { | |
| public_deps = [ ":absl" ] | |
| # In component builds, `absl` itself depends on `absl_full_deps` directly so | |
| # that all of absl is built as a single shared library. This is to prevent | |
| # globals from being duplicated between both `absl` and `absl_full` (e.g. | |
| # inline variables), and the subtle breakage that could cause. | |
| # | |
| # Deps violations will still be enforced by the non-component build. | |
| if (!is_component_build) { | |
| public_deps += [ ":absl_full_deps" ] | |
| } | |
| if (build_with_chromium) { | |
| visibility = [ | |
| # Used by some test executables, but not by anything that is a | |
| # part of Chrome. | |
| "//components/optimization_guide/internal/*", | |
| "//third_party/fuzztest:*", | |
| "//third_party/webrtc/*", | |
| # GoogleTest doesn't actually need absl_full, but this makes gn check | |
| # happier. | |
| "//third_party/googletest:*", | |
| ] | |
| } | |
| } | |
| group("absl_full_deps") { | |
| public_deps = [ | |
| # Banned because each flag registration generates a static initializer, and | |
| # the flag registration mechanism is problematic in component builds. | |
| "//third_party/abseil-cpp/absl/flags:config", | |
| "//third_party/abseil-cpp/absl/flags:flag", | |
| "//third_party/abseil-cpp/absl/flags:marshalling", | |
| "//third_party/abseil-cpp/absl/flags:parse", | |
| "//third_party/abseil-cpp/absl/flags:reflection", | |
| "//third_party/abseil-cpp/absl/flags:usage", | |
| # Banned because the LOG and CHECK macros conflict with Chrome's version of | |
| # those macros. | |
| "//third_party/abseil-cpp/absl/log", | |
| "//third_party/abseil-cpp/absl/log:check", | |
| ] | |
| visibility = [ | |
| ":absl_component_deps", | |
| ":absl_full", | |
| ] | |
| public_configs = [ "//third_party/abseil-cpp/absl/flags:absl_flags_config" ] | |
| } | |
| config("absl_include_config") { | |
| include_dirs = [ "." ] | |
| } | |
| config("absl_define_config") { | |
| defines = [ "ABSL_ALLOCATOR_NOTHROW=1" ] | |
| if (is_win && !use_custom_libcxx) { | |
| defines += [ | |
| # See crbug.com/1101367: Acknowledge extended alignment when using | |
| # MSVC's standard library. | |
| "_ENABLE_EXTENDED_ALIGNED_STORAGE", | |
| ] | |
| } | |
| } | |
| config("absl_default_cflags_cc") { | |
| cflags_cc = [] | |
| if (is_clang) { | |
| cflags_cc += [ | |
| # TODO(crbug.com/588506): Explicitly enable conversion warnings. | |
| "-Wbool-conversion", | |
| "-Wconstant-conversion", | |
| "-Wenum-conversion", | |
| "-Wint-conversion", | |
| "-Wliteral-conversion", | |
| "-Wnon-literal-null-conversion", | |
| "-Wnull-conversion", | |
| "-Wobjc-literal-conversion", | |
| "-Wstring-conversion", | |
| "-Wbitfield-enum-conversion", | |
| ] | |
| } | |
| } | |
| config("absl_test_config") { | |
| cflags_cc = [] | |
| if (is_win && !is_clang) { | |
| cflags_cc += [ "/wd4996" ] | |
| } | |
| if (is_clang) { | |
| cflags_cc += [ | |
| "-Wno-deprecated-declarations", | |
| "-Wno-implicit-const-int-float-conversion", | |
| "-Wno-unused-private-field", | |
| "-Wno-unused-function", | |
| ] | |
| } | |
| } | |
| if (absl_build_tests) { | |
| import("//testing/test.gni") | |
| if (!is_component_build) { | |
| test("absl_tests") { | |
| testonly = true | |
| deps = [ | |
| "absl/algorithm:algorithm_test", | |
| "absl/algorithm:container_test", | |
| "absl/base:atomic_hook_test", | |
| "absl/base:attributes_test", | |
| "absl/base:bit_cast_test", | |
| "absl/base:call_once_test", | |
| "absl/base:casts_test", | |
| "absl/base:config_test", | |
| "absl/base:cpu_detect_test", | |
| "absl/base:endian_test", | |
| "absl/base:errno_saver_test", | |
| "absl/base:exception_safety_testing_test", | |
| "absl/base:fast_type_id_test", | |
| "absl/base:hardening_test", | |
| "absl/base:iterator_traits_test", | |
| "absl/base:log_severity_test", | |
| "absl/base:no_destructor_test", | |
| "absl/base:nullability_default_nonnull_test", | |
| "absl/base:nullability_test", | |
| "absl/base:nullability_traits_test", | |
| "absl/base:optimization_test", | |
| "absl/base:poison_test", | |
| "absl/base:prefetch_test", | |
| "absl/base:raw_logging_test", | |
| "absl/base:scoped_set_env_test", | |
| "absl/base:spinlock_test", | |
| "absl/base:strerror_test", | |
| "absl/base:sysinfo_test", | |
| "absl/base:thread_identity_test", | |
| "absl/base:throw_delegate_test", | |
| "absl/base:tracing_internal_strong_test", | |
| "absl/base:tracing_internal_weak_test", | |
| "absl/base:unique_small_name_test", | |
| "absl/cleanup:cleanup_test", | |
| "absl/container:chunked_queue_test", | |
| "absl/container:common_policy_traits_test", | |
| "absl/container:compressed_tuple_test", | |
| "absl/container:fixed_array_test", | |
| "absl/container:flat_hash_map_test", | |
| "absl/container:flat_hash_set_test", | |
| "absl/container:hash_function_defaults_test", | |
| "absl/container:hash_policy_testing_test", | |
| "absl/container:hash_policy_traits_test", | |
| "absl/container:hashtable_control_bytes_test", | |
| "absl/container:hashtablez_sampler_test", | |
| "absl/container:inlined_vector_test", | |
| "absl/container:layout_test", | |
| "absl/container:linked_hash_map_test", | |
| "absl/container:linked_hash_set_test", | |
| "absl/container:node_hash_map_test", | |
| "absl/container:node_hash_set_test", | |
| "absl/container:node_slot_policy_test", | |
| "absl/container:raw_hash_set_allocator_test", | |
| "absl/container:raw_hash_set_resize_impl_test", | |
| "absl/container:sample_element_size_test", | |
| "absl/container:test_instance_tracker_test", | |
| "absl/container:unordered_map_test", | |
| "absl/container:unordered_set_test", | |
| "absl/crc:crc32c_test", | |
| "absl/crc:crc_cord_state_test", | |
| "absl/crc:crc_memcpy_test", | |
| "absl/crc:non_temporal_memcpy_test", | |
| "absl/debugging:bounded_utf8_length_sequence_test", | |
| "absl/debugging:decode_rust_punycode_test", | |
| "absl/debugging:demangle_rust_test", | |
| "absl/debugging:leak_check_test", | |
| "absl/debugging:stack_consumption_test", | |
| "absl/debugging:stacktrace_test", | |
| "absl/debugging:utf8_for_code_point_test", | |
| "absl/flags:config_test", | |
| "absl/flags:flag_test", | |
| "absl/flags:marshalling_test", | |
| "absl/flags:parse_test", | |
| "absl/flags:path_util_test", | |
| "absl/flags:program_name_test", | |
| "absl/flags:sequence_lock_test", | |
| "absl/flags:usage_config_test", | |
| "absl/functional:any_invocable_test", | |
| "absl/functional:bind_back_test", | |
| "absl/functional:bind_front_test", | |
| "absl/functional:function_ref_test", | |
| "absl/functional:overload_test", | |
| "absl/hash:city_test", | |
| "absl/hash:hash_instantiated_test", | |
| "absl/hash:hash_test", | |
| "absl/hash:low_level_hash_test", | |
| "absl/log:absl_check_test", | |
| "absl/log:absl_log_basic_test", | |
| "absl/log:die_if_null_test", | |
| "absl/log:flags_test", | |
| "absl/log:globals_test", | |
| "absl/log:log_entry_test", | |
| "absl/log:log_format_test", | |
| "absl/log:log_macro_hygiene_test", | |
| "absl/log:log_modifier_methods_test", | |
| "absl/log:log_sink_test", | |
| "absl/log:log_streamer_test", | |
| "absl/log:scoped_mock_log_test", | |
| "absl/log:stripping_test", | |
| "absl/log:structured_test", | |
| "absl/log:vlog_is_on_test", | |
| "absl/log/internal:container_test", | |
| "absl/log/internal:fnmatch_test", | |
| "absl/log/internal:stderr_log_sink_test", | |
| "absl/log/internal:structured_proto_test", | |
| "absl/memory:memory_test", | |
| "absl/meta:constexpr_testing_test", | |
| "absl/meta:requires_test", | |
| "absl/meta:type_traits_test", | |
| "absl/numeric:bits_test", | |
| "absl/numeric:int128_test", | |
| "absl/profiling:exponential_biased_test", | |
| "absl/profiling:periodic_sampler_test", | |
| "absl/random:bernoulli_distribution_test", | |
| "absl/random:beta_distribution_test", | |
| "absl/random:bit_gen_ref_test", | |
| "absl/random:discrete_distribution_test", | |
| "absl/random:distributions_test", | |
| "absl/random:examples_test", | |
| "absl/random:exponential_distribution_test", | |
| "absl/random:gaussian_distribution_test", | |
| "absl/random:generators_test", | |
| "absl/random:log_uniform_int_distribution_test", | |
| "absl/random:mock_distributions_test", | |
| "absl/random:mocking_bit_gen_test", | |
| "absl/random:poisson_distribution_test", | |
| "absl/random:seed_sequences_test", | |
| "absl/random:uniform_int_distribution_test", | |
| "absl/random:uniform_real_distribution_test", | |
| "absl/random:zipf_distribution_test", | |
| "absl/random/internal:chi_square_test", | |
| "absl/random/internal:distribution_test_util_test", | |
| "absl/random/internal:entropy_pool_test", | |
| "absl/random/internal:explicit_seed_seq_test", | |
| "absl/random/internal:fast_uniform_bits_test", | |
| "absl/random/internal:fastmath_test", | |
| "absl/random/internal:generate_real_test", | |
| "absl/random/internal:iostream_state_saver_test", | |
| "absl/random/internal:nonsecure_base_test", | |
| "absl/random/internal:pcg_engine_test", | |
| "absl/random/internal:randen_engine_test", | |
| "absl/random/internal:randen_slow_test", | |
| "absl/random/internal:randen_test", | |
| "absl/random/internal:salted_seed_seq_test", | |
| "absl/random/internal:seed_material_test", | |
| "absl/random/internal:traits_test", | |
| "absl/random/internal:uniform_helper_test", | |
| "absl/random/internal:wide_multiply_test", | |
| "absl/status:status_builder_test", | |
| "absl/status:status_macros_test", | |
| "absl/status:status_matchers_test", | |
| "absl/status:status_matchers_with_unqualified_macros_test", | |
| "absl/status:status_test", | |
| "absl/status:statusor_test", | |
| "absl/strings:append_and_overwrite_test", | |
| "absl/strings:ascii_test", | |
| "absl/strings:char_formatting_test", | |
| "absl/strings:charconv_bigint_test", | |
| "absl/strings:charconv_parse_test", | |
| "absl/strings:charconv_test", | |
| "absl/strings:charset_test", | |
| "absl/strings:cord_buffer_test", | |
| "absl/strings:cord_data_edge_test", | |
| "absl/strings:cord_rep_btree_navigator_test", | |
| "absl/strings:cord_rep_btree_reader_test", | |
| "absl/strings:cord_rep_btree_test", | |
| "absl/strings:cord_rep_crc_test", | |
| "absl/strings:cord_test", | |
| "absl/strings:cordz_functions_test", | |
| "absl/strings:cordz_handle_test", | |
| "absl/strings:cordz_info_statistics_test", | |
| "absl/strings:cordz_info_test", | |
| "absl/strings:cordz_sample_token_test", | |
| "absl/strings:cordz_test", | |
| "absl/strings:cordz_update_scope_test", | |
| "absl/strings:cordz_update_tracker_test", | |
| "absl/strings:damerau_levenshtein_distance_test", | |
| "absl/strings:escaping_test", | |
| "absl/strings:generic_printer_test", | |
| "absl/strings:has_absl_stringify_test", | |
| "absl/strings:has_ostream_operator_test", | |
| "absl/strings:match_test", | |
| "absl/strings:memutil_test", | |
| "absl/strings:numbers_test", | |
| "absl/strings:ostringstream_test", | |
| "absl/strings:pow10_helper_test", | |
| "absl/strings:resize_and_overwrite_test", | |
| "absl/strings:resize_uninitialized_test", | |
| "absl/strings:str_cat_test", | |
| "absl/strings:str_format_arg_test", | |
| "absl/strings:str_format_bind_test", | |
| "absl/strings:str_format_checker_test", | |
| "absl/strings:str_format_convert_test", | |
| "absl/strings:str_format_extension_test", | |
| "absl/strings:str_format_output_test", | |
| "absl/strings:str_format_parser_test", | |
| "absl/strings:str_format_test", | |
| "absl/strings:str_join_test", | |
| "absl/strings:str_replace_test", | |
| "absl/strings:str_split_test", | |
| "absl/strings:string_constant_test", | |
| "absl/strings:string_view_test", | |
| "absl/strings:stringify_stream_test", | |
| "absl/strings:strip_test", | |
| "absl/strings:substitute_test", | |
| "absl/strings:utf8_test", | |
| "absl/synchronization:barrier_test", | |
| "absl/synchronization:graphcycles_test", | |
| "absl/synchronization:kernel_timeout_internal_test", | |
| "absl/synchronization:mutex_test", | |
| "absl/synchronization:per_thread_sem_test", | |
| "absl/synchronization:waiter_test", | |
| "absl/time:clock_interface_test", | |
| "absl/time:flag_test", | |
| "absl/time:simulated_clock_test", | |
| "absl/time:time_test", | |
| "absl/time/internal/cctz:civil_time_test", | |
| "absl/time/internal/cctz:time_zone_format_test", | |
| "absl/time/internal/cctz:time_zone_lookup_test", | |
| "absl/time/internal/cctz:time_zone_name_win_test", | |
| "absl/time/internal/cctz:time_zone_posix_test", | |
| "absl/types:compare_test", | |
| "absl/types:optional_ref_test", | |
| "absl/types:source_location_test", | |
| "absl/types:span_test", | |
| "absl/types:variant_test", | |
| "//third_party/googletest:gtest_main", | |
| ] | |
| } | |
| } | |
| test("absl_hardening_tests") { | |
| testonly = true | |
| sources = [ "absl_hardening_test.cc" ] | |
| deps = [ | |
| ":absl", | |
| "//base/test:run_all_unittests", | |
| "//third_party/googletest:gtest", | |
| ] | |
| } | |
| } |