• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1# Copyright 2013 The Chromium Authors
2# Use of this source code is governed by a BSD-style license that can be
3# found in the LICENSE file.
4
5# HOW TO WRITE CONDITIONALS IN THIS FILE
6# ======================================
7#
8# In many other places, one would write a conditional that expresses all the
9# cases when a source file is used or unused, and then either add or subtract
10# it from the sources list in that case
11#
12# Since base includes so many low-level things that vary widely and
13# unpredictably for the various build types, we prefer a slightly different
14# style. Instead, there are big per-platform blocks of inclusions and
15# exclusions. If a given file has an inclusion or exclusion rule that applies
16# for multiple conditions, prefer to duplicate it in both lists. This makes it
17# a bit easier to see which files apply in which cases rather than having a
18# huge sequence of random-looking conditionals.
19
20import("//base/allocator/allocator.gni")
21import("//base/allocator/partition_allocator/partition_alloc.gni")
22import("//base/debug/debug.gni")
23import("//base/trace_event/tracing.gni")
24import("//build/buildflag_header.gni")
25import("//build/config/arm.gni")
26import("//build/config/c++/c++.gni")
27import("//build/config/cast.gni")
28import("//build/config/chromeos/ui_mode.gni")
29import("//build/config/compiler/compiler.gni")
30import("//build/config/cronet/config.gni")
31import("//build/config/dcheck_always_on.gni")
32import("//build/config/ios/config.gni")
33import("//build/config/logging.gni")
34import("//build/config/nacl/config.gni")
35import("//build/config/profiling/profiling.gni")
36import("//build/config/rust.gni")
37import("//build/config/sanitizers/sanitizers.gni")
38import("//build/config/sysroot.gni")
39import("//build/config/ui.gni")
40import("//build/nocompile.gni")
41import("//build/timestamp.gni")
42import("//build_overrides/build.gni")
43import("//testing/libfuzzer/fuzzer_test.gni")
44import("//testing/test.gni")
45
46if (is_mac) {
47  # Used to generate fuzzer corpus :base_mach_port_rendezvous_convert_corpus.
48  import("//third_party/protobuf/proto_library.gni")
49}
50
51if (is_win) {
52  import("//build/config/win/control_flow_guard.gni")
53}
54
55declare_args() {
56  # Unsafe developer build. Has developer-friendly features that may weaken or
57  # disable security measures like sandboxing or ASLR.
58  # IMPORTANT: Unsafe developer builds should never be distributed to end users.
59  is_unsafe_developer_build = !is_official_build
60
61  # Set to true to disable COM init check hooks.
62  com_init_check_hook_disabled = false
63
64  # Set to true to enable mutex priority inheritance. See the comments in
65  # LockImpl::PriorityInheritanceAvailable() in lock_impl_posix.cc for the
66  # platform requirements to safely enable priority inheritance.
67  enable_mutex_priority_inheritance = false
68
69  # Control whether the ios stack sampling profiler is enabled. This flag is
70  # only supported on iOS 64-bit architecture, but some project build //base
71  # for 32-bit architecture.
72  ios_stack_profiler_enabled = true
73}
74
75# Mutex priority inheritance is disabled by default due to security
76# vulnerabilities in older versions of Linux kernel and glibc. However,
77# Chromecast builds have full control over the platform and ensure that
78# the kernel and glibc versions used have patched the vulnerabilities,
79# so it is safe to use mutex priority inheritance on Chromecast platform.
80assert(!enable_mutex_priority_inheritance || is_castos || is_cast_android,
81       "Do not enable PI mutexes without consulting the security team")
82
83assert(!is_nacl || is_nacl_saigo,
84       "base must not be built in most nacl toolchains")
85
86# This is here instead of in //build because //build is DEPS'd in by a few
87# subprojects that still support MSVC.
88assert(!is_win || is_clang,
89       "only clang-cl is supported on Windows, see https://crbug.com/988071")
90
91# Determines whether libevent should be dep.
92dep_libevent = !is_fuchsia && !is_win && !is_mac && !is_nacl
93
94# Determines whether message_pump_libevent should be used.
95use_libevent = dep_libevent && !is_ios
96
97if (is_android || is_robolectric) {
98  import("//build/config/android/rules.gni")
99  import("//third_party/jni_zero/jni_zero.gni")
100}
101
102if (is_fuchsia) {
103  import("//third_party/fuchsia-gn-sdk/src/fidl_library.gni")
104}
105
106# The Rust implementation of base::JSONReader. NaCl depends on base and doesn't
107# have a Rust toolchain, so we need a fallback to C++ for it until it removes
108# its dependency on //base.
109#
110# TODO(crbug.com/1280708): Drop toolchain_has_rust and move the C++ parser into
111# components/nacl to just run in-process there. Don't compile base::JSONReader
112# on NaCL at all.
113build_rust_json_reader = toolchain_has_rust && enable_rust_json
114
115# Rust to C++ type conversions. Also can not be enabled while NaCl depends on
116# //base.
117build_rust_base_conversions = toolchain_has_rust && enable_rust_base_conversions
118
119assert(build_rust_base_conversions || !build_rust_json_reader,
120       "Cannot enable Rust JSON decoder without also base conversions")
121
122buildflag_header("rust_buildflags") {
123  header = "rust_buildflags.h"
124  flags = [
125    "BUILD_RUST_JSON_READER=$build_rust_json_reader",
126    "BUILD_RUST_BASE_CONVERSIONS=$build_rust_base_conversions",
127  ]
128}
129
130if (is_win) {
131  # This is in a separate config so the flags can be applied to dependents.
132  # ldflags in GN aren't automatically inherited.
133  config("base_win_linker_flags") {
134    ldflags = [
135      # Linking with shcore.lib causes the shcore api forwarder dll to load.
136      "/DELAYLOAD:api-ms-win-shcore-scaling-l1-1-1.dll",
137
138      # Linking with OneCore.lib causes the next three dlls to load.
139      "/DELAYLOAD:api-ms-win-core-realtime-l1-1-1.dll",
140      "/DELAYLOAD:api-ms-win-power-base-l1-1-0.dll",
141      "/DELAYLOAD:api-ms-win-power-setting-l1-1-0.dll",
142      "/DELAYLOAD:cfgmgr32.dll",
143      "/DELAYLOAD:powrprof.dll",
144      "/DELAYLOAD:setupapi.dll",
145      "/DELAYLOAD:shcore.dll",
146    ]
147  }
148}
149
150if (is_android) {
151  config("android_system_libs") {
152    libs = [
153      "android",
154      "log",  # Used by logging.cc.
155    ]
156  }
157}
158
159if (is_fuchsia) {
160  config("fuchsia_sync_lib") {
161    libs = [
162      "sync",  # Used by spinning_mutex.h.
163    ]
164  }
165}
166
167config("perfetto_config") {
168  if (use_perfetto_client_library) {
169    defines = [
170      # Use TRACE_EVENT macro implementation from Perfetto. See
171      # trace_event/trace_event_common.h.
172      "BASE_USE_PERFETTO_CLIENT_LIBRARY=1",
173    ]
174  }
175}
176
177if (enable_pkeys && is_debug) {
178  config("no_stack_protector") {
179    cflags = [ "-fno-stack-protector" ]
180  }
181}
182
183buildflag_header("ios_cronet_buildflags") {
184  header = "ios_cronet_buildflags.h"
185  header_dir = "base/message_loop"
186  flags = [ "CRONET_BUILD=$is_cronet_build" ]
187}
188
189enable_message_pump_epoll = is_linux || is_chromeos || is_android
190buildflag_header("message_pump_buildflags") {
191  header = "message_pump_buildflags.h"
192  header_dir = "base/message_loop"
193  flags = [ "ENABLE_MESSAGE_PUMP_EPOLL=$enable_message_pump_epoll" ]
194}
195
196# Base and everything it depends on should be a static library rather than
197# a source set. Base is more of a "library" in the classic sense in that many
198# small parts of it are used in many different contexts. This combined with a
199# few static initializers floating around means that dead code stripping
200# still leaves a lot of code behind that isn't always used. For example, this
201# saves more than 40K for a smaller target like chrome_elf.
202#
203# Use static libraries for the helper stuff as well for things like
204# //base/debug since those targets refer back to base code, which will force
205# base compilation units to be linked in where they wouldn't have otherwise.
206# This does not include test code (test support and anything in the test
207# directory) which should use source_set as is recommended for GN targets).
208component("base") {
209  sources = [
210    "allocator/allocator_check.cc",
211    "allocator/allocator_check.h",
212    "allocator/allocator_extension.cc",
213    "allocator/allocator_extension.h",
214    "allocator/dispatcher/configuration.h",
215    "allocator/dispatcher/dispatcher.cc",
216    "allocator/dispatcher/dispatcher.h",
217    "allocator/dispatcher/initializer.h",
218    "allocator/dispatcher/internal/dispatch_data.cc",
219    "allocator/dispatcher/internal/dispatch_data.h",
220    "allocator/dispatcher/internal/dispatcher_internal.h",
221    "allocator/dispatcher/internal/tools.h",
222    "allocator/dispatcher/reentry_guard.cc",
223    "allocator/dispatcher/reentry_guard.h",
224    "allocator/dispatcher/subsystem.h",
225    "allocator/dispatcher/tls.cc",
226    "allocator/dispatcher/tls.h",
227    "at_exit.cc",
228    "at_exit.h",
229    "atomic_ref_count.h",
230    "atomic_sequence_num.h",
231    "atomicops.h",
232    "atomicops_internals_atomicword_compat.h",
233    "atomicops_internals_portable.h",
234    "auto_reset.h",
235    "barrier_callback.h",
236    "barrier_closure.cc",
237    "barrier_closure.h",
238    "base64.cc",
239    "base64.h",
240    "base64url.cc",
241    "base64url.h",
242    "base_switches.h",
243    "big_endian.cc",
244    "big_endian.h",
245    "bit_cast.h",
246    "bits.h",
247    "build_time.h",
248    "callback_list.cc",
249    "callback_list.h",
250    "cancelable_callback.h",
251    "check.cc",
252    "check.h",
253    "check_deref.h",
254    "check_is_test.cc",
255    "check_is_test.h",
256    "check_op.cc",
257    "check_op.h",
258    "command_line.cc",
259    "command_line.h",
260    "compiler_specific.h",
261    "component_export.h",
262    "containers/adapters.h",
263    "containers/buffer_iterator.h",
264    "containers/checked_iterators.h",
265    "containers/circular_deque.h",
266    "containers/contains.h",
267    "containers/cxx20_erase.h",
268    "containers/cxx20_erase_internal.h",
269    "containers/cxx20_erase_map.h",
270    "containers/cxx20_erase_vector.h",
271    "containers/enum_set.h",
272    "containers/extend.h",
273    "containers/fixed_flat_map.h",
274    "containers/fixed_flat_set.h",
275    "containers/flat_map.h",
276    "containers/flat_set.h",
277    "containers/flat_tree.h",
278    "containers/id_map.h",
279    "containers/intrusive_heap.cc",
280    "containers/intrusive_heap.h",
281    "containers/linked_list.cc",
282    "containers/linked_list.h",
283    "containers/lru_cache.h",
284    "containers/map_util.h",
285    "containers/small_map.h",
286    "containers/span.h",
287    "containers/stack.h",
288    "containers/unique_ptr_adapters.h",
289    "containers/util.h",
290    "containers/vector_buffer.h",
291    "cpu_reduction_experiment.cc",
292    "cpu_reduction_experiment.h",
293    "critical_closure.h",
294    "dcheck_is_on.h",
295    "debug/alias.cc",
296    "debug/alias.h",
297    "debug/asan_invalid_access.cc",
298    "debug/asan_invalid_access.h",
299    "debug/asan_service.cc",
300    "debug/asan_service.h",
301    "debug/buffered_dwarf_reader.cc",
302    "debug/buffered_dwarf_reader.h",
303    "debug/debugger.cc",
304    "debug/debugger.h",
305    "debug/dump_without_crashing.cc",
306    "debug/dump_without_crashing.h",
307    "debug/dwarf_line_no.cc",
308    "debug/dwarf_line_no.h",
309    "debug/leak_annotations.h",
310    "debug/profiler.cc",
311    "debug/profiler.h",
312    "debug/task_trace.cc",
313    "debug/task_trace.h",
314    "environment.cc",
315    "environment.h",
316    "export_template.h",
317    "feature_list.cc",
318    "feature_list.h",
319    "features.cc",
320    "features.h",
321    "file_version_info.h",
322    "files/block_tests_writing_to_special_dirs.cc",
323    "files/block_tests_writing_to_special_dirs.h",
324    "files/dir_reader_fallback.h",
325    "files/file.cc",
326    "files/file.h",
327    "files/file_error_or.h",
328    "files/file_path.cc",
329    "files/file_path.h",
330    "files/file_tracing.cc",
331    "files/file_tracing.h",
332    "files/memory_mapped_file.cc",
333    "files/memory_mapped_file.h",
334    "files/platform_file.h",
335    "files/safe_base_name.cc",
336    "files/safe_base_name.h",
337    "files/scoped_file.cc",
338    "files/scoped_file.h",
339    "format_macros.h",
340    "functional/bind.h",
341    "functional/bind_internal.h",
342    "functional/callback.h",
343    "functional/callback_forward.h",
344    "functional/callback_helpers.cc",
345    "functional/callback_helpers.h",
346    "functional/callback_internal.cc",
347    "functional/callback_internal.h",
348    "functional/callback_tags.h",
349    "functional/disallow_unretained.h",
350    "functional/function_ref.h",
351    "functional/not_fn.h",
352    "functional/overloaded.h",
353    "functional/unretained_traits.h",
354    "gtest_prod_util.h",
355    "hash/hash.cc",
356    "hash/hash.h",
357    "hash/legacy_hash.cc",
358    "hash/legacy_hash.h",
359    "json/json_common.h",
360    "json/json_parser.cc",
361    "json/json_parser.h",
362    "json/json_reader.cc",
363    "json/json_reader.h",
364    "json/json_string_value_serializer.cc",
365    "json/json_string_value_serializer.h",
366    "json/json_value_converter.cc",
367    "json/json_value_converter.h",
368    "json/json_writer.cc",
369    "json/json_writer.h",
370    "json/string_escape.cc",
371    "json/string_escape.h",
372    "json/values_util.cc",
373    "json/values_util.h",
374    "lazy_instance.h",
375    "lazy_instance_helpers.cc",
376    "lazy_instance_helpers.h",
377    "linux_util.cc",
378    "linux_util.h",
379    "location.cc",
380    "location.h",
381    "logging.cc",
382    "logging.h",
383    "macros/concat.h",
384    "macros/if.h",
385    "macros/remove_parens.h",
386    "macros/uniquify.h",
387    "memory/aligned_memory.cc",
388    "memory/aligned_memory.h",
389    "memory/free_deleter.h",
390    "memory/memory_pressure_listener.cc",
391    "memory/memory_pressure_listener.h",
392    "memory/memory_pressure_monitor.cc",
393    "memory/memory_pressure_monitor.h",
394    "memory/nonscannable_memory.cc",
395    "memory/nonscannable_memory.h",
396    "memory/page_size.h",
397    "memory/platform_shared_memory_handle.cc",
398    "memory/platform_shared_memory_handle.h",
399    "memory/platform_shared_memory_mapper.h",
400    "memory/platform_shared_memory_region.cc",
401    "memory/platform_shared_memory_region.h",
402    "memory/ptr_util.h",
403    "memory/raw_ptr.h",
404    "memory/raw_ptr_asan_bound_arg_tracker.cc",
405    "memory/raw_ptr_asan_bound_arg_tracker.h",
406    "memory/raw_ptr_asan_hooks.cc",
407    "memory/raw_ptr_asan_hooks.h",
408    "memory/raw_ptr_asan_service.cc",
409    "memory/raw_ptr_asan_service.h",
410    "memory/raw_ptr_cast.h",
411    "memory/raw_ptr_exclusion.h",
412    "memory/raw_ref.h",
413    "memory/raw_scoped_refptr_mismatch_checker.h",
414    "memory/raw_span.h",
415    "memory/read_only_shared_memory_region.cc",
416    "memory/read_only_shared_memory_region.h",
417    "memory/ref_counted.cc",
418    "memory/ref_counted.h",
419    "memory/ref_counted_delete_on_sequence.h",
420    "memory/ref_counted_memory.cc",
421    "memory/ref_counted_memory.h",
422    "memory/safe_ref.h",
423    "memory/safe_ref_traits.h",
424    "memory/safety_checks.h",
425    "memory/scoped_policy.h",
426    "memory/scoped_refptr.h",
427    "memory/shared_memory_hooks.h",
428    "memory/shared_memory_mapper.cc",
429    "memory/shared_memory_mapper.h",
430    "memory/shared_memory_mapping.cc",
431    "memory/shared_memory_mapping.h",
432    "memory/shared_memory_security_policy.cc",
433    "memory/shared_memory_security_policy.h",
434    "memory/shared_memory_tracker.cc",
435    "memory/shared_memory_tracker.h",
436    "memory/singleton.h",
437    "memory/stack_allocated.h",
438    "memory/unsafe_shared_memory_pool.cc",
439    "memory/unsafe_shared_memory_pool.h",
440    "memory/unsafe_shared_memory_region.cc",
441    "memory/unsafe_shared_memory_region.h",
442    "memory/values_equivalent.h",
443    "memory/weak_auto_reset.h",
444    "memory/weak_ptr.cc",
445    "memory/weak_ptr.h",
446    "memory/writable_shared_memory_region.cc",
447    "memory/writable_shared_memory_region.h",
448    "message_loop/message_pump.cc",
449    "message_loop/message_pump.h",
450    "message_loop/message_pump_default.cc",
451    "message_loop/message_pump_default.h",
452    "message_loop/message_pump_for_io.h",
453    "message_loop/message_pump_for_ui.h",
454    "message_loop/message_pump_type.h",
455    "message_loop/work_id_provider.cc",
456    "message_loop/work_id_provider.h",
457    "metrics/bucket_ranges.cc",
458    "metrics/bucket_ranges.h",
459    "metrics/crc32.cc",
460    "metrics/crc32.h",
461    "metrics/dummy_histogram.cc",
462    "metrics/dummy_histogram.h",
463    "metrics/field_trial.cc",
464    "metrics/field_trial.h",
465    "metrics/field_trial_list_including_low_anonymity.cc",
466    "metrics/field_trial_list_including_low_anonymity.h",
467    "metrics/field_trial_param_associator.cc",
468    "metrics/field_trial_param_associator.h",
469    "metrics/field_trial_params.cc",
470    "metrics/field_trial_params.h",
471    "metrics/histogram.cc",
472    "metrics/histogram.h",
473    "metrics/histogram_base.cc",
474    "metrics/histogram_base.h",
475    "metrics/histogram_delta_serialization.cc",
476    "metrics/histogram_delta_serialization.h",
477    "metrics/histogram_flattener.h",
478    "metrics/histogram_functions.cc",
479    "metrics/histogram_functions.h",
480    "metrics/histogram_macros.h",
481    "metrics/histogram_macros_internal.h",
482    "metrics/histogram_macros_local.h",
483    "metrics/histogram_samples.cc",
484    "metrics/histogram_samples.h",
485    "metrics/histogram_shared_memory.cc",
486    "metrics/histogram_shared_memory.h",
487    "metrics/histogram_snapshot_manager.cc",
488    "metrics/histogram_snapshot_manager.h",
489    "metrics/metrics_hashes.cc",
490    "metrics/metrics_hashes.h",
491    "metrics/persistent_histogram_allocator.cc",
492    "metrics/persistent_histogram_allocator.h",
493    "metrics/persistent_memory_allocator.cc",
494    "metrics/persistent_memory_allocator.h",
495    "metrics/persistent_sample_map.cc",
496    "metrics/persistent_sample_map.h",
497    "metrics/ranges_manager.cc",
498    "metrics/ranges_manager.h",
499    "metrics/record_histogram_checker.h",
500    "metrics/sample_map.cc",
501    "metrics/sample_map.h",
502    "metrics/sample_vector.cc",
503    "metrics/sample_vector.h",
504    "metrics/single_sample_metrics.cc",
505    "metrics/single_sample_metrics.h",
506    "metrics/sparse_histogram.cc",
507    "metrics/sparse_histogram.h",
508    "metrics/statistics_recorder.cc",
509    "metrics/statistics_recorder.h",
510    "metrics/user_metrics.cc",
511    "metrics/user_metrics.h",
512    "metrics/user_metrics_action.h",
513    "no_destructor.h",
514    "notreached.h",
515    "observer_list.h",
516    "observer_list_internal.cc",
517    "observer_list_internal.h",
518    "observer_list_threadsafe.cc",
519    "observer_list_threadsafe.h",
520    "observer_list_types.cc",
521    "observer_list_types.h",
522    "one_shot_event.cc",
523    "one_shot_event.h",
524    "parameter_pack.h",
525    "pending_task.cc",
526    "pending_task.h",
527    "pickle.cc",
528    "pickle.h",
529    "power_monitor/battery_level_provider.cc",
530    "power_monitor/battery_level_provider.h",
531    "power_monitor/battery_state_sampler.cc",
532    "power_monitor/battery_state_sampler.h",
533    "power_monitor/power_monitor.cc",
534    "power_monitor/power_monitor.h",
535    "power_monitor/power_monitor_device_source.cc",
536    "power_monitor/power_monitor_device_source.h",
537    "power_monitor/power_monitor_features.cc",
538    "power_monitor/power_monitor_features.h",
539    "power_monitor/power_monitor_source.cc",
540    "power_monitor/power_monitor_source.h",
541    "power_monitor/power_observer.h",
542    "power_monitor/sampling_event_source.cc",
543    "power_monitor/sampling_event_source.h",
544    "power_monitor/timer_sampling_event_source.cc",
545    "power_monitor/timer_sampling_event_source.h",
546    "process/current_process.cc",
547    "process/current_process.h",
548    "process/current_process_test.h",
549    "process/environment_internal.cc",
550    "process/environment_internal.h",
551    "process/process.h",
552    "process/process_handle.cc",
553    "process/process_handle.h",
554    "process/process_info.h",
555    "process/process_metrics_iocounters.h",
556    "profiler/frame.cc",
557    "profiler/frame.h",
558    "profiler/metadata_recorder.cc",
559    "profiler/metadata_recorder.h",
560    "profiler/module_cache.cc",
561    "profiler/module_cache.h",
562    "profiler/profile_builder.h",
563    "profiler/register_context.h",
564    "profiler/sample_metadata.cc",
565    "profiler/sample_metadata.h",
566    "profiler/sampling_profiler_thread_token.cc",
567    "profiler/sampling_profiler_thread_token.h",
568    "profiler/stack_buffer.cc",
569    "profiler/stack_buffer.h",
570    "profiler/stack_copier.cc",
571    "profiler/stack_copier.h",
572    "profiler/stack_copier_suspend.cc",
573    "profiler/stack_copier_suspend.h",
574    "profiler/stack_sampler.cc",
575    "profiler/stack_sampler.h",
576    "profiler/stack_sampling_profiler.cc",
577    "profiler/stack_sampling_profiler.h",
578    "profiler/suspendable_thread_delegate.h",
579    "profiler/thread_delegate.h",
580    "profiler/unwinder.cc",
581    "profiler/unwinder.h",
582    "rand_util.cc",
583    "rand_util.h",
584    "ranges/algorithm.h",
585    "ranges/functional.h",
586    "ranges/ranges.h",
587    "run_loop.cc",
588    "run_loop.h",
589    "sampling_heap_profiler/lock_free_address_hash_set.cc",
590    "sampling_heap_profiler/lock_free_address_hash_set.h",
591    "sampling_heap_profiler/poisson_allocation_sampler.cc",
592    "sampling_heap_profiler/poisson_allocation_sampler.h",
593    "sampling_heap_profiler/sampling_heap_profiler.cc",
594    "sampling_heap_profiler/sampling_heap_profiler.h",
595    "scoped_add_feature_flags.cc",
596    "scoped_add_feature_flags.h",
597    "scoped_clear_last_error.h",
598    "scoped_environment_variable_override.cc",
599    "scoped_environment_variable_override.h",
600    "scoped_generic.h",
601    "scoped_multi_source_observation.h",
602    "scoped_observation.h",
603    "scoped_observation_traits.h",
604    "sequence_checker.cc",
605    "sequence_checker.h",
606    "sequence_checker_impl.cc",
607    "sequence_checker_impl.h",
608    "sequence_token.cc",
609    "sequence_token.h",
610    "state_transitions.h",
611    "stl_util.h",
612    "strings/abseil_string_number_conversions.cc",
613    "strings/abseil_string_number_conversions.h",
614    "strings/escape.cc",
615    "strings/escape.h",
616    "strings/latin1_string_conversions.cc",
617    "strings/latin1_string_conversions.h",
618    "strings/levenshtein_distance.cc",
619    "strings/levenshtein_distance.h",
620    "strings/pattern.cc",
621    "strings/pattern.h",
622    "strings/safe_sprintf.cc",
623    "strings/safe_sprintf.h",
624    "strings/strcat.cc",
625    "strings/strcat.h",
626    "strings/strcat_internal.h",
627    "strings/string_number_conversions.cc",
628    "strings/string_number_conversions.h",
629    "strings/string_number_conversions_internal.h",
630    "strings/string_piece.h",
631    "strings/string_split.cc",
632    "strings/string_split.h",
633    "strings/string_split_internal.h",
634    "strings/string_tokenizer.h",
635    "strings/string_util.cc",
636    "strings/string_util.h",
637    "strings/string_util_constants.cc",
638    "strings/string_util_impl_helpers.h",
639    "strings/string_util_internal.h",
640    "strings/stringize_macros.h",
641    "strings/stringprintf.cc",
642    "strings/stringprintf.h",
643    "strings/sys_string_conversions.h",
644    "strings/to_string.h",
645    "strings/utf_offset_string_conversions.cc",
646    "strings/utf_offset_string_conversions.h",
647    "strings/utf_ostream_operators.cc",
648    "strings/utf_ostream_operators.h",
649    "strings/utf_string_conversion_utils.cc",
650    "strings/utf_string_conversion_utils.h",
651    "strings/utf_string_conversions.cc",
652    "strings/utf_string_conversions.h",
653    "substring_set_matcher/matcher_string_pattern.cc",
654    "substring_set_matcher/matcher_string_pattern.h",
655    "substring_set_matcher/substring_set_matcher.cc",
656    "substring_set_matcher/substring_set_matcher.h",
657    "supports_user_data.cc",
658    "supports_user_data.h",
659    "synchronization/atomic_flag.cc",
660    "synchronization/atomic_flag.h",
661    "synchronization/condition_variable.h",
662    "synchronization/lock.cc",
663    "synchronization/lock.h",
664    "synchronization/lock_impl.h",
665    "synchronization/waitable_event.cc",
666    "synchronization/waitable_event.h",
667    "synchronization/waitable_event_watcher.h",
668    "sys_byteorder.h",
669    "syslog_logging.cc",
670    "syslog_logging.h",
671    "system/system_monitor.cc",
672    "system/system_monitor.h",
673    "task/bind_post_task.h",
674    "task/bind_post_task_internal.h",
675    "task/cancelable_task_tracker.cc",
676    "task/cancelable_task_tracker.h",
677    "task/common/checked_lock.h",
678    "task/common/checked_lock_impl.cc",
679    "task/common/checked_lock_impl.h",
680    "task/common/lazy_now.cc",
681    "task/common/lazy_now.h",
682    "task/common/operations_controller.cc",
683    "task/common/operations_controller.h",
684    "task/common/scoped_defer_task_posting.cc",
685    "task/common/scoped_defer_task_posting.h",
686    "task/common/task_annotator.cc",
687    "task/common/task_annotator.h",
688    "task/current_thread.cc",
689    "task/current_thread.h",
690    "task/default_delayed_task_handle_delegate.cc",
691    "task/default_delayed_task_handle_delegate.h",
692    "task/deferred_sequenced_task_runner.cc",
693    "task/deferred_sequenced_task_runner.h",
694    "task/delay_policy.h",
695    "task/delayed_task_handle.cc",
696    "task/delayed_task_handle.h",
697    "task/lazy_thread_pool_task_runner.cc",
698    "task/lazy_thread_pool_task_runner.h",
699    "task/post_job.cc",
700    "task/post_job.h",
701    "task/post_task_and_reply_with_result_internal.h",
702    "task/scoped_set_task_priority_for_current_thread.cc",
703    "task/scoped_set_task_priority_for_current_thread.h",
704    "task/sequence_manager/associated_thread_id.cc",
705    "task/sequence_manager/associated_thread_id.h",
706    "task/sequence_manager/atomic_flag_set.cc",
707    "task/sequence_manager/atomic_flag_set.h",
708    "task/sequence_manager/delayed_task_handle_delegate.cc",
709    "task/sequence_manager/delayed_task_handle_delegate.h",
710    "task/sequence_manager/enqueue_order.h",
711    "task/sequence_manager/enqueue_order_generator.cc",
712    "task/sequence_manager/enqueue_order_generator.h",
713    "task/sequence_manager/fence.cc",
714    "task/sequence_manager/fence.h",
715    "task/sequence_manager/lazily_deallocated_deque.h",
716    "task/sequence_manager/sequence_manager.cc",
717    "task/sequence_manager/sequence_manager.h",
718    "task/sequence_manager/sequence_manager_impl.cc",
719    "task/sequence_manager/sequence_manager_impl.h",
720    "task/sequence_manager/sequenced_task_source.cc",
721    "task/sequence_manager/sequenced_task_source.h",
722    "task/sequence_manager/task_order.cc",
723    "task/sequence_manager/task_order.h",
724    "task/sequence_manager/task_queue.cc",
725    "task/sequence_manager/task_queue.h",
726    "task/sequence_manager/task_queue_impl.cc",
727    "task/sequence_manager/task_queue_impl.h",
728    "task/sequence_manager/task_queue_selector.cc",
729    "task/sequence_manager/task_queue_selector.h",
730    "task/sequence_manager/task_time_observer.h",
731    "task/sequence_manager/tasks.cc",
732    "task/sequence_manager/tasks.h",
733    "task/sequence_manager/thread_controller.cc",
734    "task/sequence_manager/thread_controller.h",
735    "task/sequence_manager/thread_controller_impl.cc",
736    "task/sequence_manager/thread_controller_impl.h",
737    "task/sequence_manager/thread_controller_power_monitor.cc",
738    "task/sequence_manager/thread_controller_power_monitor.h",
739    "task/sequence_manager/thread_controller_with_message_pump_impl.cc",
740    "task/sequence_manager/thread_controller_with_message_pump_impl.h",
741    "task/sequence_manager/time_domain.cc",
742    "task/sequence_manager/time_domain.h",
743    "task/sequence_manager/wake_up_queue.cc",
744    "task/sequence_manager/wake_up_queue.h",
745    "task/sequence_manager/work_deduplicator.cc",
746    "task/sequence_manager/work_deduplicator.h",
747    "task/sequence_manager/work_queue.cc",
748    "task/sequence_manager/work_queue.h",
749    "task/sequence_manager/work_queue_sets.cc",
750    "task/sequence_manager/work_queue_sets.h",
751    "task/sequenced_task_runner.cc",
752    "task/sequenced_task_runner.h",
753    "task/sequenced_task_runner_helpers.h",
754    "task/single_thread_task_executor.cc",
755    "task/single_thread_task_executor.h",
756    "task/single_thread_task_runner.cc",
757    "task/single_thread_task_runner.h",
758    "task/single_thread_task_runner_thread_mode.h",
759    "task/task_features.cc",
760    "task/task_features.h",
761    "task/task_observer.h",
762    "task/task_runner.cc",
763    "task/task_runner.h",
764    "task/task_traits.cc",
765    "task/task_traits.h",
766    "task/thread_pool.cc",
767    "task/thread_pool.h",
768    "task/thread_pool/delayed_priority_queue.cc",
769    "task/thread_pool/delayed_priority_queue.h",
770    "task/thread_pool/delayed_task_manager.cc",
771    "task/thread_pool/delayed_task_manager.h",
772    "task/thread_pool/environment_config.cc",
773    "task/thread_pool/environment_config.h",
774    "task/thread_pool/job_task_source.cc",
775    "task/thread_pool/job_task_source.h",
776    "task/thread_pool/job_task_source_interface.h",
777    "task/thread_pool/job_task_source_old.cc",
778    "task/thread_pool/job_task_source_old.h",
779    "task/thread_pool/pooled_parallel_task_runner.cc",
780    "task/thread_pool/pooled_parallel_task_runner.h",
781    "task/thread_pool/pooled_sequenced_task_runner.cc",
782    "task/thread_pool/pooled_sequenced_task_runner.h",
783    "task/thread_pool/pooled_single_thread_task_runner_manager.cc",
784    "task/thread_pool/pooled_single_thread_task_runner_manager.h",
785    "task/thread_pool/pooled_task_runner_delegate.cc",
786    "task/thread_pool/pooled_task_runner_delegate.h",
787    "task/thread_pool/priority_queue.cc",
788    "task/thread_pool/priority_queue.h",
789    "task/thread_pool/semaphore.h",
790    "task/thread_pool/sequence.cc",
791    "task/thread_pool/sequence.h",
792    "task/thread_pool/service_thread.cc",
793    "task/thread_pool/service_thread.h",
794    "task/thread_pool/task.cc",
795    "task/thread_pool/task.h",
796    "task/thread_pool/task_source.cc",
797    "task/thread_pool/task_source.h",
798    "task/thread_pool/task_source_sort_key.cc",
799    "task/thread_pool/task_source_sort_key.h",
800    "task/thread_pool/task_tracker.cc",
801    "task/thread_pool/task_tracker.h",
802    "task/thread_pool/thread_group.cc",
803    "task/thread_pool/thread_group.h",
804    "task/thread_pool/thread_group_impl.cc",
805    "task/thread_pool/thread_group_impl.h",
806    "task/thread_pool/thread_pool_impl.cc",
807    "task/thread_pool/thread_pool_impl.h",
808    "task/thread_pool/thread_pool_instance.cc",
809    "task/thread_pool/thread_pool_instance.h",
810    "task/thread_pool/tracked_ref.h",
811    "task/thread_pool/worker_thread.cc",
812    "task/thread_pool/worker_thread.h",
813    "task/thread_pool/worker_thread_observer.h",
814    "task/thread_pool/worker_thread_set.cc",
815    "task/thread_pool/worker_thread_set.h",
816    "task/thread_pool/worker_thread_waitable_event.cc",
817    "task/thread_pool/worker_thread_waitable_event.h",
818    "task/updateable_sequenced_task_runner.h",
819    "template_util.h",
820    "test/scoped_logging_settings.h",
821    "test/spin_wait.h",
822    "third_party/cityhash/city.cc",
823    "third_party/cityhash/city.h",
824    "third_party/cityhash_v103/src/city_v103.cc",
825    "third_party/cityhash_v103/src/city_v103.h",
826    "third_party/icu/icu_utf.h",
827    "third_party/nspr/prtime.cc",
828    "third_party/nspr/prtime.h",
829    "third_party/superfasthash/superfasthash.c",
830    "thread_annotations.h",
831    "threading/hang_watcher.cc",
832    "threading/hang_watcher.h",
833    "threading/platform_thread.cc",
834    "threading/platform_thread.h",
835    "threading/platform_thread_ref.cc",
836    "threading/platform_thread_ref.h",
837    "threading/post_task_and_reply_impl.cc",
838    "threading/post_task_and_reply_impl.h",
839    "threading/scoped_blocking_call.cc",
840    "threading/scoped_blocking_call.h",
841    "threading/scoped_blocking_call_internal.cc",
842    "threading/scoped_blocking_call_internal.h",
843    "threading/scoped_thread_priority.cc",
844    "threading/scoped_thread_priority.h",
845    "threading/sequence_bound.h",
846    "threading/sequence_bound_internal.h",
847    "threading/sequence_local_storage_map.cc",
848    "threading/sequence_local_storage_map.h",
849    "threading/sequence_local_storage_slot.cc",
850    "threading/sequence_local_storage_slot.h",
851    "threading/simple_thread.cc",
852    "threading/simple_thread.h",
853    "threading/thread.cc",
854    "threading/thread.h",
855    "threading/thread_checker.cc",
856    "threading/thread_checker.h",
857    "threading/thread_checker_impl.cc",
858    "threading/thread_checker_impl.h",
859    "threading/thread_collision_warner.cc",
860    "threading/thread_collision_warner.h",
861    "threading/thread_id_name_manager.cc",
862    "threading/thread_id_name_manager.h",
863    "threading/thread_local.h",
864    "threading/thread_local_internal.h",
865    "threading/thread_local_storage.cc",
866    "threading/thread_local_storage.h",
867    "threading/thread_restrictions.cc",
868    "threading/thread_restrictions.h",
869    "threading/threading_features.h",
870    "threading/watchdog.cc",
871    "threading/watchdog.h",
872    "time/clock.cc",
873    "time/clock.h",
874    "time/default_clock.cc",
875    "time/default_clock.h",
876    "time/default_tick_clock.cc",
877    "time/default_tick_clock.h",
878    "time/tick_clock.cc",
879    "time/tick_clock.h",
880    "time/time.cc",
881    "time/time.h",
882    "time/time_delta_from_string.cc",
883    "time/time_delta_from_string.h",
884    "time/time_override.cc",
885    "time/time_override.h",
886    "timer/elapsed_timer.cc",
887    "timer/elapsed_timer.h",
888    "timer/hi_res_timer_manager.h",
889    "timer/lap_timer.cc",
890    "timer/lap_timer.h",
891    "timer/timer.cc",
892    "timer/timer.h",
893    "timer/wall_clock_timer.cc",
894    "timer/wall_clock_timer.h",
895    "token.cc",
896    "token.h",
897    "trace_event/base_tracing.h",
898    "trace_event/base_tracing_forward.h",
899    "trace_event/common/trace_event_common.h",
900    "trace_event/heap_profiler_allocation_context.cc",
901    "trace_event/heap_profiler_allocation_context.h",
902    "trace_event/heap_profiler_allocation_context_tracker.cc",
903    "trace_event/heap_profiler_allocation_context_tracker.h",
904    "trace_event/memory_allocator_dump_guid.cc",
905    "trace_event/memory_allocator_dump_guid.h",
906    "trace_event/trace_id_helper.cc",
907    "trace_event/trace_id_helper.h",
908    "traits_bag.h",
909    "tuple.h",
910    "types/always_false.h",
911    "types/cxx23_to_underlying.h",
912    "types/expected.h",
913    "types/expected_internal.h",
914    "types/expected_macros.h",
915    "types/fixed_array.h",
916    "types/id_type.h",
917    "types/is_instantiation.h",
918    "types/optional_ref.h",
919    "types/optional_util.h",
920    "types/pass_key.h",
921    "types/strong_alias.h",
922    "types/supports_ostream_operator.h",
923    "types/token_type.h",
924    "types/variant_util.h",
925    "unguessable_token.cc",
926    "unguessable_token.h",
927    "uuid.cc",
928    "uuid.h",
929    "value_iterators.cc",
930    "value_iterators.h",
931    "values.cc",
932    "values.h",
933    "version.cc",
934    "version.h",
935    "vlog.cc",
936    "vlog.h",
937  ]
938
939  # Various files that are unused in the Chromium build, but presumably here to
940  # make downstream's life easier. They are not included in the main sources
941  # list to avoid breaking GN formatting's auto-sorting.
942  sources += [
943    #"process/process_handle_freebsd.cc",
944    #"process/process_iterator_freebsd.cc",
945    #"process/process_metrics_freebsd.cc",
946    #"system/sys_info_freebsd.cc",
947    #"process/process_iterator_openbsd.cc",
948    #"process/process_handle_openbsd.cc",
949    #"process/process_metrics_openbsd.cc",
950    #"system/sys_info_openbsd.cc",
951  ]
952
953  if (is_apple || current_os == "freebsd" || current_os == "openbsd") {
954    sources += [
955      "posix/sysctl.cc",
956      "posix/sysctl.h",
957    ]
958  }
959
960  if (is_posix) {
961    sources += [
962      "debug/debugger_posix.cc",
963      "file_descriptor_posix.cc",
964      "file_descriptor_posix.h",
965      "files/dir_reader_posix.h",
966      "files/file_posix.cc",
967      "files/memory_mapped_file_posix.cc",
968      "message_loop/watchable_io_message_pump_posix.cc",
969      "message_loop/watchable_io_message_pump_posix.h",
970      "posix/eintr_wrapper.h",
971      "posix/file_descriptor_shuffle.cc",
972      "posix/file_descriptor_shuffle.h",
973      "posix/global_descriptors.cc",
974      "posix/global_descriptors.h",
975      "posix/safe_strerror.cc",
976      "posix/safe_strerror.h",
977      "process/process_handle_posix.cc",
978      "strings/string_util_posix.h",
979      "synchronization/condition_variable_posix.cc",
980      "synchronization/lock_impl_posix.cc",
981      "threading/platform_thread_posix.cc",
982      "threading/thread_local_storage_posix.cc",
983      "time/time_conversion_posix.cc",
984      "timer/hi_res_timer_manager_posix.cc",
985    ]
986  }
987
988  if (is_linux || is_chromeos) {
989    sources += [
990      "debug/proc_maps_linux.cc",
991      "debug/proc_maps_linux.h",
992      "files/dir_reader_linux.h",
993      "files/scoped_file_linux.cc",
994      "process/internal_linux.cc",
995      "process/internal_linux.h",
996      "process/memory_linux.cc",
997      "process/process_handle_linux.cc",
998      "process/process_iterator_linux.cc",
999      "process/process_linux.cc",
1000      "process/process_metrics_linux.cc",
1001      "threading/platform_thread_linux.cc",
1002      "threading/platform_thread_linux_base.cc",
1003      "threading/thread_type_delegate.cc",
1004      "threading/thread_type_delegate.h",
1005    ]
1006  }
1007
1008  if (is_chromeos) {
1009    sources += [ "threading/platform_thread_cros.cc" ]
1010  }
1011
1012  if (is_linux || is_chromeos || is_android) {
1013    sources += [
1014      "files/file_path_watcher_inotify.cc",
1015      "files/file_path_watcher_inotify.h",
1016    ]
1017  }
1018
1019  all_dependent_configs = []
1020  defines = [ "BASE_IMPLEMENTATION" ]
1021  data = []
1022  data_deps = []
1023  libs = []
1024  frameworks = []
1025
1026  configs += [
1027    "//build/config:precompiled_headers",
1028    "//build/config/compiler:prevent_unsafe_narrowing",
1029    "//build/config/compiler:wexit_time_destructors",
1030    "//build/config/compiler:wglobal_constructors",
1031  ]
1032
1033  deps = [
1034    ":message_pump_buildflags",
1035    "//base/allocator:buildflags",
1036    "//base/allocator/partition_allocator:raw_ptr",
1037    "//base/third_party/double_conversion",
1038    "//base/third_party/dynamic_annotations",
1039    "//build:blink_buildflags",
1040    "//build:branding_buildflags",
1041    "//build/config/compiler:compiler_buildflags",
1042    "//third_party/modp_b64",
1043  ]
1044
1045  # `raw_ptr` cannot be made a component due to CRT symbol issues.
1046  # Its gateway to being a component is through `//base`, so we have
1047  # to provide the appropriate `#define` here.
1048  defines += [ "IS_RAW_PTR_IMPL" ]
1049
1050  if (build_rust_json_reader) {
1051    deps += [ "//third_party/rust/serde_json_lenient/v0_1/wrapper" ]
1052  }
1053
1054  # native_unwinder_android is intended for use solely via a dynamic feature
1055  # module, to avoid increasing Chrome's executable size.
1056  assert_no_deps = [ ":native_unwinder_android" ]
1057
1058  public_deps = [
1059    ":anchor_functions_buildflags",
1060    ":base_static",
1061    ":build_date",
1062    ":cfi_buildflags",
1063    ":clang_profiling_buildflags",
1064    ":debugging_buildflags",
1065    ":feature_list_buildflags",
1066    ":ios_cronet_buildflags",
1067    ":logging_buildflags",
1068    ":orderfile_buildflags",
1069    ":power_monitor_buildflags",
1070    ":profiler_buildflags",
1071    ":rust_buildflags",
1072    ":sanitizer_buildflags",
1073    ":synchronization_buildflags",
1074    ":tracing_buildflags",
1075    "//base/allocator/partition_allocator:buildflags",
1076    "//base/allocator/partition_allocator:raw_ptr",
1077    "//base/numerics:base_numerics",
1078    "//build:chromecast_buildflags",
1079    "//build:chromeos_buildflags",
1080    "//third_party/abseil-cpp:absl",
1081  ]
1082
1083  if (build_rust_base_conversions) {
1084    sources += [
1085      "containers/span_rust.h",
1086      "strings/string_piece_rust.h",
1087    ]
1088
1089    # Base provides conversions between CXX types and base types (e.g.
1090    # StringPiece).
1091    public_deps += [ "//build/rust:cxx_cppdeps" ]
1092  }
1093
1094  if (use_custom_libcxx && enable_safe_libcxx && !is_debug) {
1095    public_deps += [ ":nodebug_assertion" ]
1096  }
1097
1098  # Needed for <atomic> if using newer C++ library than sysroot, except if
1099  # building inside the cros_sdk environment - use host_toolchain as a
1100  # more robust check for this.
1101  if (!use_sysroot && (is_android || is_chromeos || (is_linux && !is_castos)) &&
1102      host_toolchain != "//build/toolchain/cros:host") {
1103    libs += [ "atomic" ]
1104  }
1105
1106  if (use_allocator_shim) {
1107    if (is_apple) {
1108      sources += [ "allocator/early_zone_registration_apple.h" ]
1109    }
1110  }
1111
1112  if (use_clang_profiling) {
1113    # Call-sites use this conditional on the CLANG_PROFILING macro, for clarity.
1114    sources += [
1115      "test/clang_profiling.cc",
1116      "test/clang_profiling.h",
1117    ]
1118    if (is_android) {
1119      sources += [ "test/clang_profiling_android.cc" ]
1120    }
1121  }
1122
1123  # Allow more direct string conversions on platforms with native utf8
1124  # strings
1125  if (is_apple || is_chromeos || is_castos || is_cast_android || is_fuchsia) {
1126    defines += [ "SYSTEM_NATIVE_UTF8" ]
1127  }
1128
1129  # Android.
1130  if (is_android) {
1131    sources += [
1132      "android/android_hardware_buffer_compat.cc",
1133      "android/android_hardware_buffer_compat.h",
1134      "android/android_image_reader_abi.h",
1135      "android/android_image_reader_compat.cc",
1136      "android/android_image_reader_compat.h",
1137      "android/apk_assets.cc",
1138      "android/apk_assets.h",
1139      "android/application_status_listener.cc",
1140      "android/application_status_listener.h",
1141      "android/base_feature_map.cc",
1142      "android/base_features.cc",
1143      "android/base_features.h",
1144      "android/build_info.cc",
1145      "android/build_info.h",
1146      "android/bundle_utils.cc",
1147      "android/bundle_utils.h",
1148      "android/child_process_binding_types.h",
1149      "android/child_process_service.cc",
1150      "android/content_uri_utils.cc",
1151      "android/content_uri_utils.h",
1152      "android/cpu_features.cc",
1153      "android/early_trace_event_binding.cc",
1154      "android/early_trace_event_binding.h",
1155      "android/event_log.cc",
1156      "android/event_log.h",
1157      "android/feature_list_jni.cc",
1158      "android/feature_map.cc",
1159      "android/feature_map.h",
1160      "android/features_jni.cc",
1161      "android/field_trial_list.cc",
1162      "android/important_file_writer_android.cc",
1163      "android/int_string_callback.cc",
1164      "android/int_string_callback.h",
1165      "android/jank_metric_uma_recorder.cc",
1166      "android/jank_metric_uma_recorder.h",
1167      "android/java_handler_thread.cc",
1168      "android/java_handler_thread.h",
1169      "android/java_heap_dump_generator.cc",
1170      "android/java_heap_dump_generator.h",
1171      "android/java_runtime.cc",
1172      "android/java_runtime.h",
1173      "android/library_loader/anchor_functions.cc",
1174      "android/library_loader/anchor_functions.h",
1175      "android/library_loader/library_prefetcher.cc",
1176      "android/library_loader/library_prefetcher.h",
1177      "android/library_loader/library_prefetcher_hooks.cc",
1178      "android/locale_utils.cc",
1179      "android/locale_utils.h",
1180      "android/meminfo_dump_provider.cc",
1181      "android/meminfo_dump_provider.h",
1182      "android/memory_pressure_listener_android.cc",
1183      "android/memory_pressure_listener_android.h",
1184      "android/path_service_android.cc",
1185      "android/path_utils.cc",
1186      "android/path_utils.h",
1187      "android/radio_utils.cc",
1188      "android/radio_utils.h",
1189      "android/reached_addresses_bitset.cc",
1190      "android/reached_addresses_bitset.h",
1191      "android/reached_code_profiler.cc",
1192      "android/reached_code_profiler.h",
1193      "android/scoped_hardware_buffer_fence_sync.cc",
1194      "android/scoped_hardware_buffer_fence_sync.h",
1195      "android/scoped_hardware_buffer_handle.cc",
1196      "android/scoped_hardware_buffer_handle.h",
1197      "android/shared_preferences/shared_preferences_manager.cc",
1198      "android/shared_preferences/shared_preferences_manager.h",
1199      "android/statistics_recorder_android.cc",
1200      "android/sys_utils.cc",
1201      "android/sys_utils.h",
1202      "android/task_scheduler/post_task_android.cc",
1203      "android/task_scheduler/post_task_android.h",
1204      "android/task_scheduler/task_runner_android.cc",
1205      "android/task_scheduler/task_runner_android.h",
1206      "android/task_scheduler/task_traits_android.h",
1207      "android/thread_instruction_count.cc",
1208      "android/thread_instruction_count.h",
1209      "android/timezone_utils.cc",
1210      "android/timezone_utils.h",
1211      "android/unguessable_token_android.cc",
1212      "android/unguessable_token_android.h",
1213      "debug/stack_trace_android.cc",
1214      "files/file_util_android.cc",
1215      "files/scoped_file_android.cc",
1216      "memory/platform_shared_memory_mapper_android.cc",
1217      "memory/platform_shared_memory_region_android.cc",
1218      "message_loop/message_pump_android.cc",
1219      "message_loop/message_pump_android.h",
1220      "os_compat_android.cc",
1221      "os_compat_android.h",
1222      "process/process_android.cc",
1223      "profiler/native_unwinder_android_map_delegate.h",
1224      "profiler/native_unwinder_android_memory_regions_map.h",
1225      "profiler/stack_sampler_android.cc",
1226      "system/sys_info_android.cc",
1227      "threading/platform_thread_android.cc",
1228
1229      # Android uses some Linux sources.
1230      "debug/elf_reader.cc",
1231      "debug/elf_reader.h",
1232      "debug/proc_maps_linux.cc",
1233      "debug/proc_maps_linux.h",
1234      "power_monitor/power_monitor_device_source_android.cc",
1235      "process/internal_linux.cc",
1236      "process/internal_linux.h",
1237      "process/memory_linux.cc",
1238      "process/process_handle_linux.cc",
1239      "process/process_iterator_linux.cc",
1240      "process/process_metrics_linux.cc",
1241      "system/sys_info_linux.cc",
1242    ]
1243
1244    deps += [
1245      ":base_shared_preferences_jni",
1246      "//third_party/ashmem",
1247      "//third_party/cpu_features:ndk_compat",
1248    ]
1249
1250    # Needs to be a public config so that dependent targets link against it as
1251    # well when doing a component build.
1252    public_configs = [ ":android_system_libs" ]
1253
1254    if (can_unwind_with_cfi_table) {
1255      sources += [
1256        "trace_event/cfi_backtrace_android.cc",
1257        "trace_event/cfi_backtrace_android.h",
1258      ]
1259    }
1260    if (current_cpu == "arm") {
1261      sources += [
1262        "profiler/chrome_unwind_info_android.cc",
1263        "profiler/chrome_unwind_info_android.h",
1264        "profiler/chrome_unwinder_android.cc",
1265        "profiler/chrome_unwinder_android.h",
1266      ]
1267    }
1268
1269    if (current_cpu == "arm64") {
1270      sources += [
1271        "profiler/frame_pointer_unwinder.cc",
1272        "profiler/frame_pointer_unwinder.h",
1273      ]
1274    }
1275
1276    if (current_cpu != "arm" && current_cpu != "arm64") {
1277      # The reached code profiler is only supported on Android arm arch.
1278      sources -= [ "android/reached_code_profiler.cc" ]
1279      sources += [ "android/reached_code_profiler_stub.cc" ]
1280    }
1281
1282    # This is actually a linker script, but it can be added to the link in the
1283    # same way as a library.
1284    libs += [ "android/library_loader/anchor_functions.lds" ]
1285  }  # is_android
1286
1287  if (build_allocation_stack_trace_recorder) {
1288    sources += [
1289      "debug/allocation_trace.cc",
1290      "debug/allocation_trace.h",
1291    ]
1292  }
1293
1294  if (is_robolectric) {
1295    # Make jni.h available.
1296    configs += [ "//third_party/jdk" ]
1297  }
1298  if (is_android || is_robolectric) {
1299    sources += [
1300      "android/base_jni_onload.cc",
1301      "android/base_jni_onload.h",
1302      "android/callback_android.cc",
1303      "android/callback_android.h",
1304      "android/command_line_android.cc",
1305      "android/java_exception_reporter.cc",
1306      "android/java_exception_reporter.h",
1307      "android/jni_android.cc",
1308      "android/jni_android.h",
1309      "android/jni_array.cc",
1310      "android/jni_array.h",
1311      "android/jni_registrar.cc",
1312      "android/jni_registrar.h",
1313      "android/jni_string.cc",
1314      "android/jni_string.h",
1315      "android/jni_utils.cc",
1316      "android/jni_utils.h",
1317      "android/jni_weak_ref.cc",
1318      "android/jni_weak_ref.h",
1319      "android/library_loader/library_loader_hooks.cc",
1320      "android/library_loader/library_loader_hooks.h",
1321      "android/native_uma_recorder.cc",
1322      "android/scoped_java_ref.cc",
1323      "android/scoped_java_ref.h",
1324      "android/trace_event_binding.cc",
1325      "android/trace_event_binding.h",
1326    ]
1327    deps += [
1328      ":base_jni",
1329      ":process_launcher_jni",
1330    ]
1331  }  # is_android || is_robolectric
1332
1333  # Chromeos.
1334  if (is_chromeos) {
1335    sources += [
1336      "logging_chromeos.cc",
1337      "system/sys_info_chromeos.cc",
1338    ]
1339
1340    sources += [ "power_monitor/power_monitor_device_source_chromeos.cc" ]
1341
1342    if (current_cpu == "x64") {
1343      sources += [
1344        "profiler/frame_pointer_unwinder.cc",
1345        "profiler/frame_pointer_unwinder.h",
1346      ]
1347    }
1348  }
1349
1350  # Fuchsia.
1351  if (is_fuchsia) {
1352    sources += [
1353      "base_paths_fuchsia.cc",
1354      "debug/debugger_fuchsia.cc",
1355      "debug/elf_reader.cc",
1356      "debug/elf_reader.h",
1357      "debug/stack_trace_fuchsia.cc",
1358      "file_descriptor_posix.cc",
1359      "file_descriptor_posix.h",
1360      "files/dir_reader_posix.h",
1361      "files/file_path_watcher_stub.cc",  # See crbug.com/851641.
1362      "files/file_posix.cc",
1363      "files/file_util_fuchsia.cc",
1364      "files/memory_mapped_file_posix.cc",
1365      "fuchsia/default_job.cc",
1366      "fuchsia/default_job.h",
1367      "fuchsia/fidl_event_handler.h",
1368      "fuchsia/file_utils.cc",
1369      "fuchsia/file_utils.h",
1370      "fuchsia/filtered_service_directory.cc",
1371      "fuchsia/filtered_service_directory.h",
1372      "fuchsia/fuchsia_component_connect.h",
1373      "fuchsia/fuchsia_logging.cc",
1374      "fuchsia/fuchsia_logging.h",
1375      "fuchsia/intl_profile_watcher.cc",
1376      "fuchsia/intl_profile_watcher.h",
1377      "fuchsia/koid.cc",
1378      "fuchsia/koid.h",
1379      "fuchsia/mem_buffer_util.cc",
1380      "fuchsia/mem_buffer_util.h",
1381      "fuchsia/process_context.cc",
1382      "fuchsia/process_context.h",
1383      "fuchsia/process_lifecycle.cc",
1384      "fuchsia/process_lifecycle.h",
1385      "fuchsia/scheduler.h",
1386      "fuchsia/scoped_fx_logger.cc",
1387      "fuchsia/scoped_fx_logger.h",
1388      "fuchsia/scoped_service_binding.h",
1389      "fuchsia/scoped_service_publisher.h",
1390      "fuchsia/startup_context.cc",
1391      "fuchsia/startup_context.h",
1392      "fuchsia/system_info.cc",
1393      "fuchsia/system_info.h",
1394      "memory/platform_shared_memory_mapper_fuchsia.cc",
1395      "memory/platform_shared_memory_region_fuchsia.cc",
1396      "message_loop/message_pump_fuchsia.cc",
1397      "message_loop/message_pump_fuchsia.h",
1398      "message_loop/watchable_io_message_pump_posix.cc",
1399      "message_loop/watchable_io_message_pump_posix.h",
1400      "native_library_fuchsia.cc",
1401      "posix/eintr_wrapper.h",
1402      "posix/file_descriptor_shuffle.cc",
1403      "posix/file_descriptor_shuffle.h",
1404      "posix/global_descriptors.cc",
1405      "posix/global_descriptors.h",
1406      "posix/safe_strerror.cc",
1407      "posix/safe_strerror.h",
1408      "process/kill_fuchsia.cc",
1409      "process/launch_fuchsia.cc",
1410      "process/memory_fuchsia.cc",
1411      "process/process_fuchsia.cc",
1412      "process/process_handle_fuchsia.cc",
1413      "process/process_iterator_fuchsia.cc",
1414      "process/process_metrics_fuchsia.cc",
1415      "profiler/module_cache_posix.cc",
1416      "rand_util_fuchsia.cc",
1417      "strings/string_util_posix.h",
1418      "strings/sys_string_conversions_posix.cc",
1419      "synchronization/condition_variable_posix.cc",
1420      "synchronization/lock_impl_posix.cc",
1421      "synchronization/waitable_event_posix.cc",
1422      "synchronization/waitable_event_watcher_posix.cc",
1423      "system/sys_info_fuchsia.cc",
1424      "threading/platform_thread_fuchsia.cc",
1425      "threading/platform_thread_posix.cc",
1426      "threading/thread_local_storage_posix.cc",
1427      "time/time_conversion_posix.cc",
1428      "time/time_exploded_icu.cc",
1429      "time/time_fuchsia.cc",
1430      "timer/hi_res_timer_manager_posix.cc",
1431    ]
1432
1433    # These only need to be public deps because of includes of their headers
1434    # by public //base headers, which requires they be on the include path.
1435    # TODO(https://crbug.com/841171): Move these back to |deps|.
1436    public_deps += [
1437      "//third_party/fuchsia-sdk/sdk/fidl/fuchsia.component.runner:fuchsia.component.runner_hlcpp",
1438      "//third_party/fuchsia-sdk/sdk/fidl/fuchsia.intl:fuchsia.intl_hlcpp",
1439      "//third_party/fuchsia-sdk/sdk/fidl/fuchsia.io:fuchsia.io_cpp",
1440      "//third_party/fuchsia-sdk/sdk/fidl/fuchsia.io:fuchsia.io_hlcpp",
1441      "//third_party/fuchsia-sdk/sdk/fidl/fuchsia.logger:fuchsia.logger_cpp",
1442      "//third_party/fuchsia-sdk/sdk/fidl/fuchsia.mem:fuchsia.mem_hlcpp",
1443      "//third_party/fuchsia-sdk/sdk/fidl/fuchsia.process.lifecycle:fuchsia.process.lifecycle_cpp",
1444      "//third_party/fuchsia-sdk/sdk/pkg/async",
1445      "//third_party/fuchsia-sdk/sdk/pkg/component_incoming_cpp",
1446      "//third_party/fuchsia-sdk/sdk/pkg/fdio",
1447      "//third_party/fuchsia-sdk/sdk/pkg/fidl_cpp",
1448      "//third_party/fuchsia-sdk/sdk/pkg/fidl_cpp_wire",
1449      "//third_party/fuchsia-sdk/sdk/pkg/sync",
1450      "//third_party/fuchsia-sdk/sdk/pkg/sys_cpp",
1451      "//third_party/fuchsia-sdk/sdk/pkg/syslog_structured_backend",
1452      "//third_party/fuchsia-sdk/sdk/pkg/vfs_cpp",
1453      "//third_party/fuchsia-sdk/sdk/pkg/zx",
1454    ]
1455
1456    deps += [
1457      "//third_party/fuchsia-sdk/sdk/fidl/fuchsia.buildinfo:fuchsia.buildinfo_cpp",
1458      "//third_party/fuchsia-sdk/sdk/fidl/fuchsia.hwinfo:fuchsia.hwinfo_cpp",
1459      "//third_party/fuchsia-sdk/sdk/fidl/fuchsia.io:fuchsia.io_cpp_hlcpp_conversion",
1460      "//third_party/fuchsia-sdk/sdk/fidl/fuchsia.media:fuchsia.media_cpp",
1461      "//third_party/fuchsia-sdk/sdk/pkg/async-default",
1462      "//third_party/fuchsia-sdk/sdk/pkg/async-loop-cpp",
1463      "//third_party/fuchsia-sdk/sdk/pkg/async-loop-default",
1464      "//third_party/fuchsia-sdk/sdk/pkg/fidl",
1465      "//third_party/fuchsia-sdk/sdk/pkg/sys_inspect_cpp",
1466      "//third_party/icu",
1467    ]
1468
1469    # Needed for users of spinning_mutex.h, which for performance reasons,
1470    # contains inlined calls to `libsync` inside the header file.
1471    # It appends an entry to the "libs" section of the dependent target.
1472    public_configs = [ ":fuchsia_sync_lib" ]
1473  }
1474
1475  # Several helpers in //base are backed by BoringSSL; however, NaCl builds
1476  # cannot easily depend on BoringSSL due to the nacl_io library, so NaCl builds
1477  # still retain a dedicated local implementation of the functionality.
1478  #
1479  # TODO(crbug.com/702997) Use only boringssl when NaCl is removed.
1480  sources += [
1481    "hash/md5.h",
1482    "hash/md5_constexpr.h",
1483    "hash/md5_constexpr_internal.h",
1484    "hash/sha1.h",
1485  ]
1486  if (is_nacl) {
1487    sources += [
1488      "hash/md5_nacl.cc",
1489      "hash/md5_nacl.h",
1490      "hash/sha1_nacl.cc",
1491      "hash/sha1_nacl.h",
1492    ]
1493  } else {
1494    sources += [
1495      "hash/md5_boringssl.cc",
1496      "hash/md5_boringssl.h",
1497      "hash/sha1_boringssl.cc",
1498      "hash/sha1_boringssl.h",
1499    ]
1500    public_deps += [ "//third_party/boringssl" ]
1501  }
1502
1503  # NaCl.
1504  if (is_nacl) {
1505    # Explicitly include the linux file.
1506    sources += [
1507      "debug/stack_trace_nacl.cc",
1508      "files/file_path_watcher_stub.cc",
1509      "memory/page_size_nacl.cc",
1510      "os_compat_nacl.cc",
1511      "os_compat_nacl.h",
1512      "process/process_stubs.cc",
1513      "rand_util_nacl.cc",
1514      "sync_socket_nacl.cc",
1515      "system/sys_info_nacl.cc",
1516      "task/thread_pool/semaphore/semaphore_default.cc",
1517      "threading/platform_thread_linux_base.cc",
1518      "threading/platform_thread_nacl.cc",
1519    ]
1520  } else {
1521    sources += [
1522      "base_paths.cc",
1523      "base_paths.h",
1524      "cpu.cc",
1525      "cpu.h",
1526      "debug/crash_logging.cc",
1527      "debug/crash_logging.h",
1528      "debug/stack_trace.cc",
1529      "debug/stack_trace.h",
1530      "files/file_enumerator.cc",
1531      "files/file_enumerator.h",
1532      "files/file_proxy.cc",
1533      "files/file_proxy.h",
1534      "files/file_util.cc",
1535      "files/file_util.h",
1536      "files/important_file_writer.cc",
1537      "files/important_file_writer.h",
1538      "files/important_file_writer_cleaner.cc",
1539      "files/important_file_writer_cleaner.h",
1540      "files/scoped_temp_dir.cc",
1541      "files/scoped_temp_dir.h",
1542      "files/scoped_temp_file.cc",
1543      "files/scoped_temp_file.h",
1544      "json/json_file_value_serializer.cc",
1545      "json/json_file_value_serializer.h",
1546      "memory/discardable_memory.cc",
1547      "memory/discardable_memory.h",
1548      "memory/discardable_memory_allocator.cc",
1549      "memory/discardable_memory_allocator.h",
1550      "memory/discardable_memory_internal.h",
1551      "metrics/persistent_histogram_storage.cc",
1552      "metrics/persistent_histogram_storage.h",
1553      "native_library.cc",
1554      "native_library.h",
1555      "path_service.cc",
1556      "path_service.h",
1557      "process/process_metrics.cc",
1558      "process/process_metrics.h",
1559      "scoped_native_library.cc",
1560      "scoped_native_library.h",
1561      "system/sys_info.cc",
1562      "system/sys_info.h",
1563      "system/sys_info_internal.h",
1564      "task/thread_pool/initialization_util.cc",
1565      "task/thread_pool/initialization_util.h",
1566    ]
1567
1568    if (is_win) {
1569      sources += [
1570        "base_paths_win.cc",
1571        "base_paths_win.h",
1572      ]
1573    }
1574
1575    if (is_apple) {
1576      sources += [
1577        "base_paths_apple.cc",
1578        "base_paths_apple.h",
1579      ]
1580    }
1581
1582    if (is_mac) {
1583      sources += [
1584        "base_paths_mac.h",
1585        "base_paths_mac.mm",
1586      ]
1587    }
1588
1589    if (is_android) {
1590      sources += [
1591        "base_paths_android.cc",
1592        "base_paths_android.h",
1593      ]
1594    }
1595
1596    if (is_linux || is_chromeos || is_android || is_fuchsia) {
1597      sources += [ "task/thread_pool/semaphore/semaphore_posix.cc" ]
1598    }
1599
1600    if (is_posix) {
1601      sources += [
1602        "base_paths_posix.h",
1603        "memory/madv_free_discardable_memory_allocator_posix.cc",
1604        "memory/madv_free_discardable_memory_allocator_posix.h",
1605        "memory/madv_free_discardable_memory_posix.cc",
1606        "memory/madv_free_discardable_memory_posix.h",
1607        "posix/unix_domain_socket.cc",
1608        "posix/unix_domain_socket.h",
1609        "rand_util_posix.cc",
1610        "system/sys_info_posix.cc",
1611      ]
1612    }
1613
1614    if (is_posix || is_fuchsia) {
1615      sources += [
1616        "files/file_descriptor_watcher_posix.cc",
1617        "files/file_descriptor_watcher_posix.h",
1618        "files/file_enumerator_posix.cc",
1619        "files/file_util_posix.cc",
1620        "memory/page_size_posix.cc",
1621      ]
1622    }
1623
1624    if ((is_posix && !is_ios) || is_fuchsia) {
1625      sources += [
1626        "process/process_metrics_posix.cc",
1627        "sync_socket_posix.cc",
1628      ]
1629    }
1630
1631    if (is_posix && !is_apple) {
1632      sources += [
1633        "native_library_posix.cc",
1634        "posix/can_lower_nice_to.cc",
1635        "posix/can_lower_nice_to.h",
1636        "process/launch_posix.cc",
1637        "profiler/module_cache_posix.cc",
1638        "profiler/stack_base_address_posix.cc",
1639        "profiler/stack_base_address_posix.h",
1640        "profiler/stack_copier_signal.cc",
1641        "profiler/stack_copier_signal.h",
1642        "profiler/thread_delegate_posix.cc",
1643        "profiler/thread_delegate_posix.h",
1644      ]
1645    }
1646
1647    if (is_posix && !is_android) {
1648      sources += [ "debug/stack_trace_posix.cc" ]
1649    }
1650
1651    if (is_posix && !is_ios) {
1652      sources += [ "process/process_posix.cc" ]
1653    }
1654
1655    if (use_blink) {
1656      sources += [
1657        "memory/discardable_shared_memory.cc",
1658        "memory/discardable_shared_memory.h",
1659        "process/kill.cc",
1660        "process/kill.h",
1661        "process/launch.cc",
1662        "process/launch.h",
1663        "process/memory.cc",
1664        "process/memory.h",
1665        "process/process_iterator.cc",
1666        "process/process_iterator.h",
1667      ]
1668
1669      if (is_posix) {
1670        sources += [ "process/kill_posix.cc" ]
1671      }
1672    }
1673
1674    if (is_linux || is_chromeos) {
1675      sources += [
1676        "base_paths_posix.cc",
1677        "debug/elf_reader.cc",
1678        "debug/elf_reader.h",
1679        "stack_canary_linux.cc",
1680        "stack_canary_linux.h",
1681      ]
1682    }
1683    if (use_partition_alloc) {
1684      # Add stuff that doesn't work in NaCl.
1685      sources += [
1686        # PartitionAlloc uses SpinLock, which doesn't work in NaCl (see below).
1687        "allocator/miracle_parameter.cc",
1688        "allocator/miracle_parameter.h",
1689        "allocator/partition_alloc_features.cc",
1690        "allocator/partition_alloc_features.h",
1691        "allocator/partition_alloc_support.cc",
1692        "allocator/partition_alloc_support.h",
1693      ]
1694    }
1695
1696    # Need this to pass gn check, because gn check doesn't see
1697    # BUILDFLAG(USE_PARTITION_ALLOC). A linker will remove all
1698    # partition_alloc code if use_partition_alloc = false because no code uses
1699    # partition_alloc.
1700    public_deps += [
1701      "allocator/partition_allocator:partition_alloc",
1702      "allocator/partition_allocator:raw_ptr",
1703    ]
1704  }
1705
1706  # Windows.
1707  if (is_win) {
1708    sources += [
1709      "debug/debugger_win.cc",
1710      "debug/gdi_debug_util_win.cc",
1711      "debug/gdi_debug_util_win.h",
1712      "debug/handle_hooks_win.cc",
1713      "debug/handle_hooks_win.h",
1714      "debug/invalid_access_win.cc",
1715      "debug/invalid_access_win.h",
1716      "debug/stack_trace_win.cc",
1717      "enterprise_util.cc",
1718      "enterprise_util.h",
1719      "enterprise_util_win.cc",
1720      "file_version_info_win.cc",
1721      "file_version_info_win.h",
1722      "files/file_enumerator_win.cc",
1723      "files/file_path_watcher_win.cc",
1724      "files/file_util_win.cc",
1725      "files/file_win.cc",
1726      "files/memory_mapped_file_win.cc",
1727      "logging_win.cc",
1728      "logging_win.h",
1729      "memory/page_size_win.cc",
1730      "memory/platform_shared_memory_mapper_win.cc",
1731      "memory/platform_shared_memory_region_win.cc",
1732      "message_loop/message_pump_win.cc",
1733      "message_loop/message_pump_win.h",
1734      "moving_window.h",
1735      "native_library_win.cc",
1736      "power_monitor/battery_level_provider_win.cc",
1737      "power_monitor/power_monitor_device_source_win.cc",
1738      "power_monitor/speed_limit_observer_win.cc",
1739      "power_monitor/speed_limit_observer_win.h",
1740      "process/kill_win.cc",
1741      "process/launch_win.cc",
1742      "process/memory_win.cc",
1743      "process/process_handle_win.cc",
1744      "process/process_info_win.cc",
1745      "process/process_iterator_win.cc",
1746      "process/process_metrics_win.cc",
1747      "process/process_win.cc",
1748      "profiler/module_cache_win.cc",
1749      "profiler/native_unwinder_win.cc",
1750      "profiler/native_unwinder_win.h",
1751      "profiler/stack_sampler_win.cc",
1752      "profiler/suspendable_thread_delegate_win.cc",
1753      "profiler/suspendable_thread_delegate_win.h",
1754      "profiler/win32_stack_frame_unwinder.cc",
1755      "profiler/win32_stack_frame_unwinder.h",
1756      "rand_util_win.cc",
1757      "scoped_clear_last_error_win.cc",
1758      "strings/strcat_win.cc",
1759      "strings/strcat_win.h",
1760      "strings/string_number_conversions_win.cc",
1761      "strings/string_number_conversions_win.h",
1762      "strings/string_split_win.cc",
1763      "strings/string_split_win.h",
1764      "strings/string_util_win.cc",
1765      "strings/string_util_win.h",
1766      "strings/sys_string_conversions_win.cc",
1767      "sync_socket_win.cc",
1768      "synchronization/condition_variable_win.cc",
1769      "synchronization/lock_impl_win.cc",
1770      "synchronization/waitable_event_watcher_win.cc",
1771      "synchronization/waitable_event_win.cc",
1772      "system/sys_info_win.cc",
1773      "task/thread_pool/semaphore/semaphore_win.cc",
1774      "threading/platform_thread_win.cc",
1775      "threading/platform_thread_win.h",
1776      "threading/thread_local_storage_win.cc",
1777      "time/time_win.cc",
1778      "timer/hi_res_timer_manager_win.cc",
1779      "win/access_control_list.cc",
1780      "win/access_control_list.h",
1781      "win/access_token.cc",
1782      "win/access_token.h",
1783      "win/async_operation.h",
1784      "win/atl.h",
1785      "win/atl_throw.cc",
1786      "win/atl_throw.h",
1787      "win/com_init_balancer.cc",
1788      "win/com_init_balancer.h",
1789      "win/com_init_check_hook.cc",
1790      "win/com_init_check_hook.h",
1791      "win/com_init_util.cc",
1792      "win/com_init_util.h",
1793      "win/core_winrt_util.cc",
1794      "win/core_winrt_util.h",
1795      "win/current_module.h",
1796      "win/dark_mode_support.cc",
1797      "win/dark_mode_support.h",
1798      "win/default_apps_util.cc",
1799      "win/default_apps_util.h",
1800      "win/embedded_i18n/language_selector.cc",
1801      "win/embedded_i18n/language_selector.h",
1802      "win/enum_variant.cc",
1803      "win/enum_variant.h",
1804      "win/event_trace_consumer.h",
1805      "win/event_trace_controller.cc",
1806      "win/event_trace_controller.h",
1807      "win/event_trace_provider.cc",
1808      "win/event_trace_provider.h",
1809      "win/hstring_reference.cc",
1810      "win/hstring_reference.h",
1811      "win/i18n.cc",
1812      "win/i18n.h",
1813      "win/iat_patch_function.cc",
1814      "win/iat_patch_function.h",
1815      "win/map.h",
1816      "win/message_window.cc",
1817      "win/message_window.h",
1818      "win/nt_status.cc",
1819      "win/nt_status.h",
1820      "win/object_watcher.cc",
1821      "win/object_watcher.h",
1822      "win/patch_util.cc",
1823      "win/patch_util.h",
1824      "win/pe_image_reader.cc",
1825      "win/pe_image_reader.h",
1826      "win/post_async_results.h",
1827      "win/process_startup_helper.cc",
1828      "win/process_startup_helper.h",
1829      "win/propvarutil.h",
1830      "win/reference.h",
1831      "win/registry.cc",
1832      "win/registry.h",
1833      "win/resource_exhaustion.cc",
1834      "win/resource_exhaustion.h",
1835      "win/resource_util.cc",
1836      "win/resource_util.h",
1837      "win/scoped_bstr.cc",
1838      "win/scoped_bstr.h",
1839      "win/scoped_co_mem.h",
1840      "win/scoped_com_initializer.cc",
1841      "win/scoped_com_initializer.h",
1842      "win/scoped_gdi_object.h",
1843      "win/scoped_handle.cc",
1844      "win/scoped_handle.h",
1845      "win/scoped_handle_verifier.cc",
1846      "win/scoped_handle_verifier.h",
1847      "win/scoped_hdc.h",
1848      "win/scoped_hglobal.h",
1849      "win/scoped_hstring.cc",
1850      "win/scoped_hstring.h",
1851      "win/scoped_localalloc.h",
1852      "win/scoped_pdh_query.cc",
1853      "win/scoped_pdh_query.h",
1854      "win/scoped_process_information.cc",
1855      "win/scoped_process_information.h",
1856      "win/scoped_propvariant.h",
1857      "win/scoped_safearray.h",
1858      "win/scoped_select_object.h",
1859      "win/scoped_variant.cc",
1860      "win/scoped_variant.h",
1861      "win/scoped_windows_thread_environment.h",
1862      "win/scoped_winrt_initializer.cc",
1863      "win/scoped_winrt_initializer.h",
1864      "win/security_descriptor.cc",
1865      "win/security_descriptor.h",
1866      "win/security_util.cc",
1867      "win/security_util.h",
1868      "win/shlwapi.h",
1869      "win/shortcut.cc",
1870      "win/shortcut.h",
1871      "win/sid.cc",
1872      "win/sid.h",
1873      "win/sphelper.h",
1874      "win/startup_information.cc",
1875      "win/startup_information.h",
1876      "win/variant_conversions.h",
1877      "win/variant_vector.cc",
1878      "win/variant_vector.h",
1879      "win/vector.cc",
1880      "win/vector.h",
1881      "win/win_handle_types.h",
1882      "win/win_handle_types_list.inc",
1883      "win/win_util.cc",
1884      "win/win_util.h",
1885      "win/wincrypt_shim.h",
1886      "win/window_enumerator.cc",
1887      "win/window_enumerator.h",
1888      "win/windows_defines.inc",
1889      "win/windows_h_disallowed.h",
1890      "win/windows_types.h",
1891      "win/windows_undefines.inc",
1892      "win/windows_version.cc",
1893      "win/windows_version.h",
1894      "win/windowsx_shim.h",
1895      "win/winrt_foundation_helpers.h",
1896      "win/winrt_storage_util.cc",
1897      "win/winrt_storage_util.h",
1898      "win/wmi.cc",
1899      "win/wmi.h",
1900      "win/wrapped_window_proc.cc",
1901      "win/wrapped_window_proc.h",
1902    ]
1903
1904    deps += [ "//base/win:base_win_buildflags" ]
1905
1906    if (com_init_check_hook_disabled) {
1907      defines += [ "COM_INIT_CHECK_HOOK_DISABLED" ]
1908    }
1909
1910    libs += [
1911      "cfgmgr32.lib",
1912      "ntdll.lib",
1913      "onecore.lib",
1914      "pdh.lib",
1915      "powrprof.lib",
1916      "propsys.lib",
1917      "setupapi.lib",
1918      "shcore.lib",
1919      "userenv.lib",
1920      "wbemuuid.lib",
1921      "winmm.lib",
1922    ]
1923    all_dependent_configs += [
1924      ":base_win_linker_flags",
1925      "//tools/win/DebugVisualizers:chrome",
1926    ]
1927    inputs = [
1928      # chrome.natvis listed as an input here instead of in
1929      # //tools/win/DebugVisualizers:chrome to prevent unnecessary size increase
1930      # in generated build files.
1931      "//tools/win/DebugVisualizers/chrome.natvis",
1932    ]
1933  }
1934
1935  if (!is_win) {
1936    sources += [
1937      "file_descriptor_store.cc",
1938      "file_descriptor_store.h",
1939    ]
1940  }
1941
1942  # Mac or iOS.
1943  if (is_apple) {
1944    sources += [
1945      "apple/backup_util.h",
1946      "apple/backup_util.mm",
1947      "apple/bridging.h",
1948      "apple/bundle_locations.h",
1949      "apple/bundle_locations.mm",
1950      "apple/call_with_eh_frame.cc",
1951      "apple/call_with_eh_frame.h",
1952      "apple/call_with_eh_frame_asm.S",
1953      "apple/dispatch_source_mach.cc",
1954      "apple/dispatch_source_mach.h",
1955      "apple/foundation_util.h",
1956      "apple/foundation_util.mm",
1957      "apple/mach_logging.cc",
1958      "apple/mach_logging.h",
1959      "apple/osstatus_logging.h",
1960      "apple/osstatus_logging.mm",
1961      "apple/owned_objc.h",
1962      "apple/owned_objc.mm",
1963      "apple/scoped_cffiledescriptorref.h",
1964      "apple/scoped_cftyperef.h",
1965      "apple/scoped_dispatch_object.h",
1966      "apple/scoped_mach_port.cc",
1967      "apple/scoped_mach_port.h",
1968      "apple/scoped_mach_vm.cc",
1969      "apple/scoped_mach_vm.h",
1970      "apple/scoped_nsautorelease_pool.h",
1971      "apple/scoped_nsautorelease_pool.mm",
1972      "apple/scoped_nsobject.h",
1973      "apple/scoped_objc_class_swizzler.h",
1974      "apple/scoped_objc_class_swizzler.mm",
1975      "apple/scoped_typeref.h",
1976      "file_version_info_apple.h",
1977      "file_version_info_apple.mm",
1978      "files/file_util_apple.mm",
1979      "memory/platform_shared_memory_mapper_apple.cc",
1980      "memory/platform_shared_memory_region_apple.cc",
1981      "message_loop/message_pump_apple.h",
1982      "message_loop/message_pump_apple.mm",
1983      "process/process_metrics_apple.cc",
1984      "profiler/module_cache_apple.cc",
1985      "strings/sys_string_conversions_apple.mm",
1986      "synchronization/waitable_event_apple.cc",
1987      "system/sys_info_apple.mm",
1988      "task/thread_pool/semaphore/semaphore_apple.cc",
1989      "threading/platform_thread_apple.mm",
1990      "time/time_apple.mm",
1991    ]
1992    frameworks += [
1993      "CoreFoundation.framework",
1994      "CoreGraphics.framework",
1995      "CoreText.framework",
1996      "Foundation.framework",
1997      "Security.framework",
1998    ]
1999  }
2000
2001  # Desktop Mac.
2002  if (is_mac) {
2003    sources += [
2004      "enterprise_util.cc",
2005      "enterprise_util.h",
2006      "enterprise_util_mac.mm",
2007      "files/file_path_watcher_fsevents.cc",
2008      "files/file_path_watcher_fsevents.h",
2009      "files/file_path_watcher_kqueue.cc",
2010      "files/file_path_watcher_kqueue.h",
2011      "files/file_path_watcher_mac.cc",
2012      "mac/authorization_util.h",
2013      "mac/authorization_util.mm",
2014      "mac/close_nocancel.cc",
2015      "mac/launch_application.h",
2016      "mac/launch_application.mm",
2017      "mac/launch_services_spi.h",
2018      "mac/launchd.cc",
2019      "mac/launchd.h",
2020      "mac/mac_util.h",
2021      "mac/mac_util.mm",
2022      "mac/mach_port_rendezvous.cc",
2023      "mac/mach_port_rendezvous.h",
2024      "mac/os_crash_dumps.cc",
2025      "mac/os_crash_dumps.h",
2026      "mac/scoped_aedesc.h",
2027      "mac/scoped_authorizationref.h",
2028      "mac/scoped_authorizationref.mm",
2029      "mac/scoped_ionotificationportref.h",
2030      "mac/scoped_ioobject.h",
2031      "mac/scoped_ioplugininterface.h",
2032      "mac/scoped_launch_data.h",
2033      "mac/scoped_mach_msg_destroy.h",
2034      "mac/scoped_sending_event.h",
2035      "mac/scoped_sending_event.mm",
2036      "message_loop/message_pump_kqueue.cc",
2037      "message_loop/message_pump_kqueue.h",
2038      "native_library_mac.mm",
2039      "power_monitor/battery_level_provider_mac.mm",
2040      "power_monitor/battery_state_sampler_mac.cc",
2041      "power_monitor/iopm_power_source_sampling_event_source.cc",
2042      "power_monitor/iopm_power_source_sampling_event_source.h",
2043      "power_monitor/power_monitor_device_source_mac.mm",
2044      "power_monitor/thermal_state_observer_mac.h",
2045      "power_monitor/thermal_state_observer_mac.mm",
2046      "process/kill_mac.cc",
2047      "process/launch_mac.cc",
2048      "process/memory_mac.mm",
2049      "process/port_provider_mac.cc",
2050      "process/port_provider_mac.h",
2051      "process/process_handle_mac.cc",
2052      "process/process_info_mac.cc",
2053      "process/process_iterator_mac.cc",
2054      "process/process_mac.cc",
2055      "process/process_metrics_mac.cc",
2056      "profiler/frame_pointer_unwinder.cc",
2057      "profiler/frame_pointer_unwinder.h",
2058      "profiler/stack_sampler_mac.cc",
2059      "profiler/suspendable_thread_delegate_mac.cc",
2060      "profiler/suspendable_thread_delegate_mac.h",
2061      "synchronization/waitable_event_watcher_mac.cc",
2062      "system/sys_info_mac.mm",
2063      "time/time_exploded_posix.cc",
2064    ]
2065
2066    libs += [
2067      "bsm",
2068      "pmenergy",
2069      "pmsample",
2070    ]
2071    frameworks += [
2072      "ApplicationServices.framework",
2073      "AppKit.framework",
2074      "CoreFoundation.framework",
2075      "IOKit.framework",
2076      "OpenDirectory.framework",
2077    ]
2078  }
2079
2080  # iOS
2081  if (is_ios) {
2082    sources += [
2083      "base_paths_ios.h",
2084      "base_paths_ios.mm",
2085      "critical_closure_internal_ios.mm",
2086      "ios/block_types.h",
2087      "ios/crb_protocol_observers.h",
2088      "ios/crb_protocol_observers.mm",
2089      "ios/device_util.h",
2090      "ios/device_util.mm",
2091      "ios/ios_util.h",
2092      "ios/ios_util.mm",
2093      "ios/ns_error_util.h",
2094      "ios/ns_error_util.mm",
2095      "ios/ns_range.h",
2096      "ios/scoped_critical_action.h",
2097      "ios/scoped_critical_action.mm",
2098      "native_library_ios.mm",
2099      "power_monitor/power_monitor_device_source_ios.mm",
2100      "process/process_metrics_ios.cc",
2101      "process/process_metrics_posix.cc",
2102      "profiler/stack_sampler_ios.cc",
2103      "system/sys_info_ios.mm",
2104    ]
2105
2106    if (use_blink) {
2107      sources += [
2108        "files/file_path_watcher_kqueue.cc",
2109        "files/file_path_watcher_kqueue.h",
2110        "files/file_path_watcher_mac.cc",
2111        "ios/sim_header_shims.h",
2112        "mac/mach_port_rendezvous.cc",
2113        "mac/mach_port_rendezvous.h",
2114        "process/kill_mac.cc",
2115        "process/launch_mac.cc",
2116        "process/memory_mac.mm",
2117        "process/port_provider_mac.cc",
2118        "process/port_provider_mac.h",
2119        "process/process_handle_mac.cc",
2120        "process/process_iterator_mac.cc",
2121        "process/process_mac.cc",
2122        "process/process_posix.cc",
2123        "sync_socket_posix.cc",
2124        "synchronization/waitable_event_watcher_mac.cc",
2125      ]
2126      libs += [ "bsm" ]
2127    } else {
2128      sources += [
2129        "process/launch_ios.cc",
2130        "process/memory_stubs.cc",
2131        "process/process_stubs.cc",
2132      ]
2133    }
2134
2135    if (is_cronet_build) {
2136      sources += [
2137        "message_loop/message_pump_io_ios.cc",
2138        "message_loop/message_pump_io_ios.h",
2139      ]
2140    } else {
2141      sources += [
2142        "message_loop/message_pump_kqueue.cc",
2143        "message_loop/message_pump_kqueue.h",
2144      ]
2145    }
2146
2147    if (ios_stack_profiler_enabled) {
2148      sources += [
2149        "profiler/frame_pointer_unwinder.cc",
2150        "profiler/frame_pointer_unwinder.h",
2151        "profiler/suspendable_thread_delegate_mac.cc",
2152        "profiler/suspendable_thread_delegate_mac.h",
2153      ]
2154    }
2155    if (!use_allocator_shim) {
2156      sources -= [
2157        "sampling_heap_profiler/poisson_allocation_sampler.cc",
2158        "sampling_heap_profiler/poisson_allocation_sampler.h",
2159        "sampling_heap_profiler/sampling_heap_profiler.cc",
2160        "sampling_heap_profiler/sampling_heap_profiler.h",
2161      ]
2162    }
2163
2164    if (current_cpu == "x64" || current_cpu == "arm64") {
2165      sources += [ "time/time_exploded_posix.cc" ]
2166    } else {
2167      sources += [ "time/time_exploded_ios.cc" ]
2168    }
2169
2170    frameworks += [
2171      "Foundation.framework",
2172      "UIKit.framework",
2173    ]
2174  }
2175
2176  # Linux.
2177  if (is_linux || is_chromeos) {
2178    # TODO(brettw) this will need to be parameterized at some point.
2179    linux_configs = []
2180    if (use_glib) {
2181      linux_configs += [ "//build/config/linux:glib" ]
2182    }
2183
2184    configs += linux_configs
2185    all_dependent_configs += linux_configs
2186    sources += [ "system/sys_info_linux.cc" ]
2187    if (!is_cronet_build) {
2188      # These dependencies are not required on Android.
2189      sources += [
2190        "nix/mime_util_xdg.cc",
2191        "nix/mime_util_xdg.h",
2192        "nix/xdg_util.cc",
2193        "nix/xdg_util.h",
2194      ]
2195      defines += [ "USE_SYMBOLIZE" ]
2196      deps += [
2197        "//base/third_party/symbolize",
2198        "//base/third_party/xdg_user_dirs",
2199      ]
2200    }
2201  } else {
2202    if (!is_android) {
2203      sources -= [
2204        "linux_util.cc",
2205        "linux_util.h",
2206      ]
2207    }
2208  }
2209
2210  if (use_blink) {
2211    sources += [
2212      "files/file_path_watcher.cc",
2213      "files/file_path_watcher.h",
2214      "sync_socket.cc",
2215      "sync_socket.h",
2216    ]
2217  }
2218
2219  if (dep_libevent) {
2220    deps += [ "//third_party/libevent" ]
2221  }
2222
2223  if (use_libevent) {
2224    sources += [
2225      "message_loop/message_pump_libevent.cc",
2226      "message_loop/message_pump_libevent.h",
2227    ]
2228  }
2229
2230  if (enable_message_pump_epoll) {
2231    sources += [
2232      "message_loop/message_pump_epoll.cc",
2233      "message_loop/message_pump_epoll.h",
2234    ]
2235  }
2236
2237  # Android and MacOS have their own custom shared memory handle
2238  # implementations. e.g. due to supporting both POSIX and native handles.
2239  if (is_posix && !is_android && !is_apple) {
2240    sources += [
2241      "memory/platform_shared_memory_mapper_posix.cc",
2242      "memory/platform_shared_memory_region_posix.cc",
2243    ]
2244  }
2245
2246  if (is_posix && !is_apple) {
2247    sources += [
2248      "strings/sys_string_conversions_posix.cc",
2249      "synchronization/waitable_event_posix.cc",
2250      "synchronization/waitable_event_watcher_posix.cc",
2251      "threading/platform_thread_internal_posix.cc",
2252      "threading/platform_thread_internal_posix.h",
2253      "time/time_exploded_posix.cc",
2254      "time/time_now_posix.cc",
2255    ]
2256
2257    # TODO(b/167763382) Find an alternate solution for Chromecast devices, since
2258    # adding the icui18n and icuuc deps significantly increases the binary size.
2259    if (!is_castos && !is_cast_android) {
2260      sources += [ "time/time_exploded_icu.cc" ]
2261
2262      # The ICU dependency is only needed on systems with a 32-bit time_t.
2263      # However, that cannot be determined from build variables, like
2264      # |current_cpu|, since some 32-bit systems have a 64-bit time_t (and vice
2265      # versa). Thus, the dependency is taken here for all POSIX platforms and
2266      # the compiler+linker should be able to easily detect when the ICU
2267      # routines will not be called and delete them in the final linking.
2268      deps += [
2269        "//third_party/icu:icui18n",
2270        "//third_party/icu:icuuc",
2271      ]
2272    }
2273  }
2274
2275  if ((is_posix && !is_apple && !is_android) || is_fuchsia) {
2276    sources += [ "profiler/stack_sampler_posix.cc" ]
2277  }
2278
2279  if ((is_posix && !is_apple && !is_android && !is_chromeos) || is_fuchsia) {
2280    sources += [ "power_monitor/power_monitor_device_source_stub.cc" ]
2281  }
2282
2283  # On ARC++-enabled ChromeOS system, we need TimeTicks::FromUptimeMillis to
2284  # interpret time values sent from Android container.
2285  if (is_android || is_chromeos_ash) {
2286    sources += [ "time/time_android.cc" ]
2287  }
2288
2289  if (use_glib) {
2290    sources += [
2291      "message_loop/message_pump_glib.cc",
2292      "message_loop/message_pump_glib.h",
2293    ]
2294  }
2295
2296  if (enable_base_tracing) {
2297    sources += [
2298      "trace_event/auto_open_close_event.h",
2299      "trace_event/builtin_categories.cc",
2300      "trace_event/builtin_categories.h",
2301      "trace_event/category_registry.cc",
2302      "trace_event/category_registry.h",
2303      "trace_event/heap_profiler.h",
2304      "trace_event/interned_args_helper.cc",
2305      "trace_event/interned_args_helper.h",
2306      "trace_event/log_message.cc",
2307      "trace_event/log_message.h",
2308      "trace_event/malloc_dump_provider.cc",
2309      "trace_event/malloc_dump_provider.h",
2310      "trace_event/memory_allocator_dump.cc",
2311      "trace_event/memory_allocator_dump.h",
2312      "trace_event/memory_dump_manager.cc",
2313      "trace_event/memory_dump_manager.h",
2314      "trace_event/memory_dump_manager_test_utils.h",
2315      "trace_event/memory_dump_provider.h",
2316      "trace_event/memory_dump_provider_info.cc",
2317      "trace_event/memory_dump_provider_info.h",
2318      "trace_event/memory_dump_request_args.cc",
2319      "trace_event/memory_dump_request_args.h",
2320      "trace_event/memory_dump_scheduler.cc",
2321      "trace_event/memory_dump_scheduler.h",
2322      "trace_event/memory_infra_background_allowlist.cc",
2323      "trace_event/memory_infra_background_allowlist.h",
2324      "trace_event/memory_pressure_level_proto.cc",
2325      "trace_event/memory_pressure_level_proto.h",
2326      "trace_event/memory_usage_estimator.cc",
2327      "trace_event/memory_usage_estimator.h",
2328      "trace_event/optional_trace_event.h",
2329      "trace_event/process_memory_dump.cc",
2330      "trace_event/process_memory_dump.h",
2331      "trace_event/trace_arguments.cc",
2332      "trace_event/trace_arguments.h",
2333      "trace_event/trace_buffer.cc",
2334      "trace_event/trace_buffer.h",
2335      "trace_event/trace_category.h",
2336      "trace_event/trace_config.cc",
2337      "trace_event/trace_config.h",
2338      "trace_event/trace_config_category_filter.cc",
2339      "trace_event/trace_config_category_filter.h",
2340      "trace_event/trace_conversion_helper.h",
2341      "trace_event/trace_event.h",
2342      "trace_event/trace_event_impl.cc",
2343      "trace_event/trace_event_impl.h",
2344      "trace_event/trace_event_memory_overhead.cc",
2345      "trace_event/trace_event_memory_overhead.h",
2346      "trace_event/trace_log.cc",
2347      "trace_event/trace_log.h",
2348      "trace_event/trace_log_constants.cc",
2349      "trace_event/traced_value.cc",
2350      "trace_event/traced_value.h",
2351      "trace_event/traced_value_support.h",
2352      "trace_event/tracing_agent.cc",
2353      "trace_event/tracing_agent.h",
2354      "trace_event/typed_macros.h",
2355      "trace_event/typed_macros_embedder_support.h",
2356      "trace_event/typed_macros_internal.cc",
2357      "trace_event/typed_macros_internal.h",
2358      "tracing/perfetto_platform.cc",
2359      "tracing/perfetto_platform.h",
2360      "tracing/perfetto_task_runner.cc",
2361      "tracing/perfetto_task_runner.h",
2362      "tracing/trace_time.cc",
2363      "tracing/trace_time.h",
2364      "tracing/tracing_tls.cc",
2365      "tracing/tracing_tls.h",
2366    ]
2367
2368    public_deps += [
2369      "//base/tracing/protos:chrome_track_event_zero",
2370      "//third_party/perfetto:libperfetto",
2371    ]
2372
2373    deps += [
2374      "//base/tracing/protos:chrome_track_event",
2375      "//third_party/perfetto/include/perfetto/protozero",
2376    ]
2377
2378    all_dependent_configs += [
2379      ":perfetto_config",
2380      "//third_party/perfetto/gn:public_config",
2381    ]
2382
2383    if (is_win) {
2384      sources += [
2385        "trace_event/trace_event_etw_export_win.cc",
2386        "trace_event/trace_event_etw_export_win.h",
2387        "trace_event/trace_logging_minimal_win.cc",
2388        "trace_event/trace_logging_minimal_win.h",
2389      ]
2390      if (use_perfetto_client_library) {
2391        sources += [
2392          "trace_event/etw_interceptor_win.cc",
2393          "trace_event/etw_interceptor_win.h",
2394        ]
2395      }
2396    }
2397
2398    if (is_android) {
2399      sources += [
2400        "trace_event/application_state_proto_android.cc",
2401        "trace_event/application_state_proto_android.h",
2402        "trace_event/cpufreq_monitor_android.cc",
2403        "trace_event/cpufreq_monitor_android.h",
2404        "trace_event/java_heap_dump_provider_android.cc",
2405        "trace_event/java_heap_dump_provider_android.h",
2406      ]
2407    }
2408
2409    if (use_partition_alloc_as_malloc) {
2410      sources += [
2411        "trace_event/address_space_dump_provider.cc",
2412        "trace_event/address_space_dump_provider.h",
2413      ]
2414    }
2415  } else {
2416    sources += [
2417      "trace_event/trace_event_stub.cc",
2418      "trace_event/trace_event_stub.h",
2419    ]
2420  }
2421
2422  if (using_sanitizer && !is_fuchsia) {
2423    data += [ "//tools/valgrind/asan/" ]
2424    data_deps +=
2425        [ "//build/config/clang:llvm-symbolizer_data($host_toolchain)" ]
2426  }
2427
2428  if (!is_debug) {
2429    configs -= [ "//build/config/compiler:default_optimization" ]
2430    configs += [ "//build/config/compiler:optimize_max" ]
2431  }
2432}
2433
2434# Build flags for Control Flow Integrity
2435# https://www.chromium.org/developers/testing/control-flow-integrity
2436buildflag_header("cfi_buildflags") {
2437  header = "cfi_buildflags.h"
2438
2439  flags = [
2440    # TODO(pcc): remove CFI_CAST_CHECK, see https://crbug.com/626794.
2441    "CFI_CAST_CHECK=$is_cfi && $use_cfi_cast",
2442    "CFI_DIAG=$is_cfi && $use_cfi_diag",
2443    "CFI_ICALL_CHECK=$is_cfi && $use_cfi_icall",
2444    "CFI_ENFORCEMENT_TRAP=$is_cfi && !$use_cfi_diag",
2445    "CFI_ENFORCEMENT_DIAGNOSTIC=$is_cfi && $use_cfi_diag && !$use_cfi_recover",
2446  ]
2447}
2448
2449buildflag_header("debugging_buildflags") {
2450  header = "debugging_buildflags.h"
2451  header_dir = "base/debug"
2452  enable_gdbinit_warning =
2453      is_debug && (strip_absolute_paths_from_debug_symbols || use_custom_libcxx)
2454  enable_lldbinit_warning =
2455      is_debug && strip_absolute_paths_from_debug_symbols && is_mac
2456
2457  # TODO(crbug.com/1420774): Try and enable these checks on Android too.
2458  enable_commandline_sequence_checks =
2459      (is_debug || dcheck_always_on) && !is_android
2460
2461  flags = [
2462    "DCHECK_IS_CONFIGURABLE=$dcheck_is_configurable",
2463    "ENABLE_PROFILING=$enable_profiling",
2464    "CAN_UNWIND_WITH_FRAME_POINTERS=$can_unwind_with_frame_pointers",
2465    "UNSAFE_DEVELOPER_BUILD=$is_unsafe_developer_build",
2466    "CAN_UNWIND_WITH_CFI_TABLE=$can_unwind_with_cfi_table",
2467    "EXCLUDE_UNWIND_TABLES=$exclude_unwind_tables",
2468    "ENABLE_GDBINIT_WARNING=$enable_gdbinit_warning",
2469    "ENABLE_LLDBINIT_WARNING=$enable_lldbinit_warning",
2470    "EXPENSIVE_DCHECKS_ARE_ON=$enable_expensive_dchecks",
2471    "ENABLE_STACK_TRACE_LINE_NUMBERS=$enable_stack_trace_line_numbers",
2472    "ENABLE_COMMANDLINE_SEQUENCE_CHECKS=$enable_commandline_sequence_checks",
2473    "ENABLE_ALLOCATION_STACK_TRACE_RECORDER=$build_allocation_stack_trace_recorder",
2474    "ENABLE_ALLOCATION_TRACE_RECORDER_FULL_REPORTING=$build_allocation_trace_recorder_full_reporting",
2475  ]
2476}
2477
2478buildflag_header("feature_list_buildflags") {
2479  header = "feature_list_buildflags.h"
2480
2481  if (is_chromeos_ash) {
2482    flags = [
2483      "ENABLE_BANNED_BASE_FEATURE_PREFIX=true",
2484      "BANNED_BASE_FEATURE_PREFIX=\"CrOSLateBoot\"",
2485    ]
2486  } else {
2487    flags = [ "ENABLE_BANNED_BASE_FEATURE_PREFIX=false" ]
2488  }
2489}
2490
2491buildflag_header("logging_buildflags") {
2492  header = "logging_buildflags.h"
2493
2494  flags = [ "ENABLE_LOG_ERROR_NOT_REACHED=$enable_log_error_not_reached" ]
2495}
2496
2497buildflag_header("orderfile_buildflags") {
2498  header = "orderfile_buildflags.h"
2499  header_dir = "base/android/orderfile"
2500  using_order_profiling = is_android && use_order_profiling
2501  using_devtools_dumping =
2502      is_android && devtools_instrumentation_dumping && enable_base_tracing
2503
2504  flags = [
2505    "DEVTOOLS_INSTRUMENTATION_DUMPING=$using_devtools_dumping",
2506    "ORDERFILE_INSTRUMENTATION=$using_order_profiling",
2507  ]
2508}
2509
2510buildflag_header("synchronization_buildflags") {
2511  header = "synchronization_buildflags.h"
2512  header_dir = "base/synchronization"
2513
2514  flags =
2515      [ "ENABLE_MUTEX_PRIORITY_INHERITANCE=$enable_mutex_priority_inheritance" ]
2516}
2517
2518buildflag_header("anchor_functions_buildflags") {
2519  header = "anchor_functions_buildflags.h"
2520  header_dir = "base/android/library_loader"
2521  _supports_code_ordering =
2522      is_android && (current_cpu == "arm" || current_cpu == "arm64" ||
2523                     current_cpu == "x86" || current_cpu == "x64")
2524
2525  flags = [
2526    "USE_LLD=$use_lld",
2527    "SUPPORTS_CODE_ORDERING=$_supports_code_ordering",
2528  ]
2529}
2530
2531buildflag_header("clang_profiling_buildflags") {
2532  header = "clang_profiling_buildflags.h"
2533  header_dir = "base"
2534
2535  flags = [
2536    "CLANG_PROFILING=$use_clang_profiling",
2537    "CLANG_PROFILING_INSIDE_SANDBOX=$use_clang_profiling_inside_sandbox",
2538    "USE_CLANG_COVERAGE=$use_clang_coverage",
2539  ]
2540}
2541
2542buildflag_header("sanitizer_buildflags") {
2543  header = "sanitizer_buildflags.h"
2544  header_dir = "base"
2545
2546  flags = [
2547    "IS_HWASAN=$is_hwasan",
2548    "USING_SANITIZER=$using_sanitizer",
2549  ]
2550}
2551
2552buildflag_header("tracing_buildflags") {
2553  header = "tracing_buildflags.h"
2554
2555  flags = [
2556    "ENABLE_BASE_TRACING=$enable_base_tracing",
2557    "USE_PERFETTO_CLIENT_LIBRARY=$use_perfetto_client_library",
2558    "USE_PERFETTO_TRACE_PROCESSOR=$use_perfetto_trace_processor",
2559    "OPTIONAL_TRACE_EVENTS_ENABLED=$optional_trace_events_enabled",
2560  ]
2561}
2562
2563buildflag_header("profiler_buildflags") {
2564  header = "profiler_buildflags.h"
2565  header_dir = "base/profiler"
2566
2567  flags = [
2568    "ENABLE_ARM_CFI_TABLE=$enable_arm_cfi_table",
2569    "IOS_STACK_PROFILER_ENABLED=$ios_stack_profiler_enabled",
2570  ]
2571}
2572
2573buildflag_header("power_monitor_buildflags") {
2574  header = "power_monitor_buildflags.h"
2575  header_dir = "base/power_monitor"
2576  _has_battery_provider_impl = is_win || is_mac
2577
2578  flags = [ "HAS_BATTERY_LEVEL_PROVIDER_IMPL=$_has_battery_provider_impl" ]
2579}
2580
2581buildflag_header("fuzzing_buildflags") {
2582  header = "fuzzing_buildflags.h"
2583  flags = [ "USE_FUZZING_ENGINE=$use_fuzzing_engine" ]
2584}
2585
2586# This is the subset of files from base that should not be used with a dynamic
2587# library. Note that this library cannot depend on base because base depends on
2588# base_static.
2589static_library("base_static") {
2590  sources = [
2591    "base_export.h",
2592    "base_switches.cc",
2593    "base_switches.h",
2594    "immediate_crash.h",
2595  ]
2596
2597  deps = [
2598    ":fuzzing_buildflags",
2599    "//build:chromeos_buildflags",
2600  ]
2601
2602  if (is_win) {
2603    sources += [
2604      "win/static_constants.cc",
2605      "win/static_constants.h",
2606    ]
2607
2608    public_deps = [ "//base/win:pe_image" ]
2609
2610    # Disable sanitizer coverage in win/pe_image.cc. It is called by the sandbox
2611    # before sanitizer coverage can initialize. http://crbug.com/484711
2612    configs -= [ "//build/config/sanitizers:default_sanitizer_flags" ]
2613    configs +=
2614        [ "//build/config/sanitizers:default_sanitizer_flags_but_coverage" ]
2615  }
2616
2617  if (!is_debug) {
2618    configs -= [ "//build/config/compiler:default_optimization" ]
2619    configs += [ "//build/config/compiler:optimize_max" ]
2620  }
2621}
2622
2623if (use_safe_libcxx && !is_debug) {
2624  # nodebug_assertion.cc has to be in its own source_set instead of being
2625  # included as a source in //base as otherwise its symbols won't be linked in
2626  # if they end up in an archive.
2627  source_set("nodebug_assertion") {
2628    defines = [ "BASE_IMPLEMENTATION" ]
2629    sources = [ "nodebug_assertion.cc" ]
2630    deps = [ ":base_static" ]
2631  }
2632}
2633
2634component("i18n") {
2635  output_name = "base_i18n"
2636  sources = [
2637    "i18n/base_i18n_export.h",
2638    "i18n/base_i18n_switches.cc",
2639    "i18n/base_i18n_switches.h",
2640    "i18n/break_iterator.cc",
2641    "i18n/break_iterator.h",
2642    "i18n/case_conversion.cc",
2643    "i18n/case_conversion.h",
2644    "i18n/char_iterator.cc",
2645    "i18n/char_iterator.h",
2646    "i18n/character_encoding.cc",
2647    "i18n/character_encoding.h",
2648    "i18n/encoding_detection.cc",
2649    "i18n/encoding_detection.h",
2650    "i18n/file_util_icu.cc",
2651    "i18n/file_util_icu.h",
2652    "i18n/i18n_constants.cc",
2653    "i18n/i18n_constants.h",
2654    "i18n/icu_string_conversions.cc",
2655    "i18n/icu_string_conversions.h",
2656    "i18n/icu_util.cc",
2657    "i18n/icu_util.h",
2658    "i18n/message_formatter.cc",
2659    "i18n/message_formatter.h",
2660    "i18n/number_formatting.cc",
2661    "i18n/number_formatting.h",
2662    "i18n/rtl.cc",
2663    "i18n/rtl.h",
2664    "i18n/streaming_utf8_validator.cc",
2665    "i18n/streaming_utf8_validator.h",
2666    "i18n/string_compare.cc",
2667    "i18n/string_compare.h",
2668    "i18n/string_search.cc",
2669    "i18n/string_search.h",
2670    "i18n/time_formatting.cc",
2671    "i18n/time_formatting.h",
2672    "i18n/timezone.cc",
2673    "i18n/timezone.h",
2674    "i18n/unicodestring.h",
2675    "i18n/utf8_validator_tables.cc",
2676    "i18n/utf8_validator_tables.h",
2677  ]
2678  defines = [ "BASE_I18N_IMPLEMENTATION" ]
2679  configs += [ "//build/config/compiler:wexit_time_destructors" ]
2680  public_deps = [
2681    ":base",
2682    "//third_party/ced",
2683    "//third_party/icu",
2684  ]
2685  deps = [
2686    "//base/third_party/dynamic_annotations",
2687    "//build:chromecast_buildflags",
2688    "//build:chromeos_buildflags",
2689  ]
2690
2691  if (!is_debug) {
2692    configs -= [ "//build/config/compiler:default_optimization" ]
2693    configs += [ "//build/config/compiler:optimize_max" ]
2694  }
2695
2696  if (is_chromeos_lacros) {
2697    sources += [
2698      "i18n/icu_mergeable_data_file.cc",
2699      "i18n/icu_mergeable_data_file.h",
2700    ]
2701  }
2702
2703  if (is_mac) {
2704    frameworks = [ "CoreFoundation.framework" ]
2705  }
2706}
2707
2708executable("containers_memory_benchmark") {
2709  sources = [ "containers/containers_memory_benchmark.cc" ]
2710  deps = [ ":base" ]
2711  testonly = true
2712}
2713
2714test("base_perftests") {
2715  sources = [
2716    "big_endian_perftest.cc",
2717    "hash/hash_perftest.cc",
2718    "json/json_perftest.cc",
2719    "message_loop/message_pump_perftest.cc",
2720    "observer_list_perftest.cc",
2721    "rand_util_perftest.cc",
2722    "strings/string_util_perftest.cc",
2723    "substring_set_matcher/substring_set_matcher_perftest.cc",
2724    "synchronization/lock_perftest.cc",
2725    "synchronization/waitable_event_perftest.cc",
2726    "task/job_perftest.cc",
2727    "task/sequence_manager/sequence_manager_perftest.cc",
2728    "task/thread_pool/thread_pool_perftest.cc",
2729    "threading/counter_perftest.cc",
2730    "threading/thread_local_storage_perftest.cc",
2731    "threading/thread_perftest.cc",
2732    "types/expected_macros_perftest.cc",
2733  ]
2734
2735  deps = [
2736    ":base",
2737    ":debugging_buildflags",
2738    "//base/test:test_support",
2739    "//base/test:test_support_perf",
2740    "//testing/gtest",
2741    "//testing/perf",
2742    "//third_party/google_benchmark",
2743  ]
2744
2745  if (use_partition_alloc) {
2746    sources += [
2747      "allocator/partition_allocator/src/partition_alloc/partition_alloc_perftest.cc",
2748      "allocator/partition_allocator/src/partition_alloc/partition_lock_perftest.cc",
2749    ]
2750    deps += [ ":partition_alloc_test_support" ]
2751  }
2752
2753  data_deps = [
2754    # Needed for isolate script to execute.
2755    "//testing:run_perf_test",
2756  ]
2757
2758  if (is_android) {
2759    deps += [ "//testing/android/native_test:native_test_native_code" ]
2760    shard_timeout = 600
2761  }
2762
2763  if (is_fuchsia) {
2764    # Run these performance tests against the actual system.
2765    run_as_chromium_system_test = true
2766  }
2767
2768  if (!is_official_build) {
2769    # The extra data tables required by stack traces are turned off for official
2770    # build, only do stack trace perftest for unofficial build
2771    sources += [ "debug/stack_trace_perftest.cc" ]
2772  }
2773
2774  if (build_allocation_stack_trace_recorder) {
2775    sources += [ "debug/allocation_trace_perftest.cc" ]
2776  }
2777}
2778
2779test("base_i18n_perftests") {
2780  sources = [ "i18n/streaming_utf8_validator_perftest.cc" ]
2781  deps = [
2782    ":base",
2783    ":i18n",
2784    "//base/test:test_support",
2785    "//base/test:test_support_perf",
2786    "//testing/gtest",
2787  ]
2788}
2789
2790if (!is_ios) {
2791  executable("build_utf8_validator_tables") {
2792    sources = [ "i18n/build_utf8_validator_tables.cc" ]
2793    deps = [
2794      ":base",
2795      "//build/win:default_exe_manifest",
2796      "//third_party/icu:icuuc",
2797    ]
2798  }
2799
2800  executable("check_example") {
2801    sources = [ "check_example.cc" ]
2802    deps = [
2803      ":base",
2804      "//build/win:default_exe_manifest",
2805    ]
2806  }
2807
2808  executable("json_perftest_decodebench") {
2809    sources = [ "json/json_perftest_decodebench.cc" ]
2810    deps = [ ":base" ]
2811  }
2812}
2813
2814if (is_win) {
2815  # Target to manually rebuild pe_image_test.dll which is checked into
2816  # base/test/data/pe_image.
2817  shared_library("pe_image_test") {
2818    sources = [ "win/pe_image_test.cc" ]
2819    ldflags = [
2820      "/DELAYLOAD:cfgmgr32.dll",
2821      "/DELAYLOAD:shell32.dll",
2822      "/SUBSYSTEM:WINDOWS",
2823    ]
2824    libs = [
2825      "cfgmgr32.lib",
2826      "shell32.lib",
2827    ]
2828  }
2829
2830  loadable_module("scoped_handle_test_dll") {
2831    sources = [ "win/scoped_handle_test_dll.cc" ]
2832    deps = [
2833      ":base",
2834      "//base/win:base_win_buildflags",
2835    ]
2836  }
2837}
2838
2839if ((is_win && (current_cpu == "x64" || current_cpu == "arm64")) || is_mac ||
2840    (is_android && (current_cpu == "arm" || current_cpu == "arm64")) ||
2841    (is_chromeos && current_cpu == "x64")) {
2842  # Must be a loadable module so that it can be loaded/unloaded at runtime
2843  # during testing.
2844  loadable_module("base_profiler_test_support_library") {
2845    testonly = true
2846    sources = [ "profiler/test_support_library.cc" ]
2847  }
2848}
2849
2850if (is_android && (current_cpu == "arm" || current_cpu == "arm64")) {
2851  # Use separate library for
2852  # |LibunwindstackUnwinderAndroidTest.ReparsesMapsOnNewDynamicLibraryLoad|
2853  # testcase. We can't use the existing `base_profiler_test_support_library`
2854  # library for this test since this gets loaded by other tests and unloading
2855  # a library in Android doesn't guarantee it will actually be unloaded.
2856  # And in the test we would like to observe the change in /proc/self/maps
2857  # on loading a dynamic library.
2858  loadable_module("base_profiler_reparsing_test_support_library") {
2859    testonly = true
2860    sources = [ "profiler/test_support_library.cc" ]
2861  }
2862}
2863
2864if (is_android) {
2865  source_set("native_unwinder_android") {
2866    # This target is intended to be used only within the stack_unwinder dynamic
2867    # feature module, to avoid binary size increase in Chrome due to the
2868    # libunwindstack dependency. The additional :* visibility is needed to allow
2869    # use by base test targets.
2870    visibility = [
2871      ":*",
2872      "//chrome/android/modules/stack_unwinder/internal:*",
2873    ]
2874    sources = [
2875      "profiler/libunwindstack_unwinder_android.cc",
2876      "profiler/libunwindstack_unwinder_android.h",
2877      "profiler/native_unwinder_android.cc",
2878      "profiler/native_unwinder_android.h",
2879      "profiler/native_unwinder_android_memory_regions_map_impl.cc",
2880      "profiler/native_unwinder_android_memory_regions_map_impl.h",
2881    ]
2882
2883    public_deps = [
2884      ":base",
2885      "//third_party/libunwindstack",
2886    ]
2887  }
2888}
2889
2890source_set("base_stack_sampling_profiler_test_util") {
2891  testonly = true
2892  sources = [
2893    "profiler/stack_sampling_profiler_test_util.cc",
2894    "profiler/stack_sampling_profiler_test_util.h",
2895  ]
2896  deps = [
2897    ":base",
2898    "//base/test:test_support",
2899    "//testing/gtest",
2900  ]
2901  if (is_android) {
2902    sources += [
2903      "profiler/stack_sampling_profiler_java_test_util.cc",
2904      "profiler/stack_sampling_profiler_java_test_util.h",
2905    ]
2906    deps += [
2907      ":base_profiler_test_support_jni",
2908      ":native_unwinder_android",
2909    ]
2910  }
2911}
2912
2913if (is_apple) {
2914  bundle_data("base_unittests_bundle_data") {
2915    testonly = true
2916    sources = [
2917      "//tools/metrics/histograms/enums.xml",
2918      "test/data/file_util/binary_file.bin",
2919      "test/data/file_util/binary_file_diff.bin",
2920      "test/data/file_util/binary_file_same.bin",
2921      "test/data/file_util/blank_line.txt",
2922      "test/data/file_util/blank_line_crlf.txt",
2923      "test/data/file_util/crlf.txt",
2924      "test/data/file_util/different.txt",
2925      "test/data/file_util/different_first.txt",
2926      "test/data/file_util/different_last.txt",
2927      "test/data/file_util/empty1.txt",
2928      "test/data/file_util/empty2.txt",
2929      "test/data/file_util/first1.txt",
2930      "test/data/file_util/first2.txt",
2931      "test/data/file_util/original.txt",
2932      "test/data/file_util/same.txt",
2933      "test/data/file_util/same_length.txt",
2934      "test/data/file_util/shortened.txt",
2935      "test/data/json/bom_feff.json",
2936      "test/data/pe_image_reader/signed.exe",
2937      "test/data/serializer_nested_test.json",
2938      "test/data/serializer_test.json",
2939      "test/data/serializer_test_nowhitespace.json",
2940    ]
2941    outputs = [ "{{bundle_resources_dir}}/" +
2942                "{{source_root_relative_dir}}/{{source_file_part}}" ]
2943  }
2944}
2945
2946# Generated file whose location is verified in DIR_GEN_TEST_DATA_ROOT test.
2947generated_file("generate_file_for_test") {
2948  testonly = true
2949  outputs = [ "$target_gen_dir/generated_file_for_test.txt" ]
2950  data = [ "$target_gen_dir/generated_file_for_test.txt" ]
2951  contents = "Hello world"
2952}
2953
2954if (is_ios) {
2955  bundle_data("base_test_proto_bundle_data") {
2956    testonly = true
2957    public_deps = [ "//base/test:test_proto_descriptor" ]
2958    sources = [ "$root_gen_dir/base/test/test_proto.descriptor" ]
2959    outputs = [ "{{bundle_resources_dir}}/gen/base/test/{{source_file_part}}" ]
2960  }
2961
2962  bundle_data("base_generated_test_file_bundle_data") {
2963    testonly = true
2964    public_deps = [ ":generate_file_for_test" ]
2965    sources = [ "$target_gen_dir/generated_file_for_test.txt" ]
2966    outputs = [ "{{bundle_resources_dir}}/gen/base/{{source_file_part}}" ]
2967  }
2968}
2969
2970if (is_apple) {
2971  source_set("base_unittests_noarc") {
2972    testonly = true
2973    sources = [ "apple/scoped_nsobject_unittest.mm" ]
2974
2975    # Do not compile with ARC because this target has tests for code that does
2976    # not compile with ARC.
2977    configs -= [ "//build/config/compiler:enable_arc" ]
2978    deps = [
2979      ":base",
2980      "//base/test:test_support",
2981      "//testing/gtest",
2982    ]
2983  }
2984}
2985
2986if (!is_nacl && (is_linux || is_chromeos)) {
2987  # This test must compile with -fstack-protector-all
2988  source_set("stack_canary_linux_unittests") {
2989    testonly = true
2990
2991    sources = [ "stack_canary_linux_unittest.cc" ]
2992    cflags = [ "-fstack-protector-all" ]
2993
2994    deps = [
2995      "//base",
2996      "//testing/gtest",
2997    ]
2998  }
2999}
3000
3001if (is_fuchsia) {
3002  fidl_library("testfidl") {
3003    library_name = "base.testfidl"
3004
3005    sources = [ "fuchsia/test.test-fidl" ]
3006  }
3007
3008  # TODO(crbug.com/1416553): remove this once all users are migrated to natural bindings.
3009  source_set("test_interface_impl") {
3010    testonly = true
3011    sources = [
3012      "fuchsia/test_interface_impl.cc",
3013      "fuchsia/test_interface_impl.h",
3014    ]
3015    deps = [
3016      ":base",
3017      "//testing/gtest",
3018    ]
3019    public_deps = [
3020      ":testfidl_hlcpp",
3021      "//third_party/fuchsia-sdk/sdk/pkg/fidl_cpp",
3022      "//third_party/fuchsia-sdk/sdk/pkg/zx",
3023    ]
3024  }
3025
3026  source_set("test_interface_natural_impl") {
3027    testonly = true
3028    public = [ "fuchsia/test_interface_natural_impl.h" ]
3029    sources = [ "fuchsia/test_interface_natural_impl.cc" ]
3030    deps = [
3031      ":base",
3032      "//testing/gtest",
3033      "//third_party/fuchsia-sdk/sdk/pkg/async",
3034    ]
3035    public_deps = [
3036      ":testfidl_cpp",
3037      "//third_party/fuchsia-sdk/sdk/fidl/fuchsia.io:fuchsia.io_cpp_common",
3038      "//third_party/fuchsia-sdk/sdk/pkg/fidl_cpp_wire",
3039      "//third_party/fuchsia-sdk/sdk/pkg/sys_cpp",
3040    ]
3041  }
3042
3043  source_set("test_log_listener_safe") {
3044    testonly = true
3045    sources = [
3046      "fuchsia/test_log_listener_safe.cc",
3047      "fuchsia/test_log_listener_safe.h",
3048    ]
3049    deps = [
3050      ":base",
3051      "//base/test:test_support",
3052      "//testing/gtest",
3053    ]
3054    public_deps = [
3055      "//third_party/fuchsia-sdk/sdk/fidl/fuchsia.logger:fuchsia.logger_hlcpp",
3056    ]
3057  }
3058}
3059
3060source_set("arm_bti_testfunctions") {
3061  testonly = true
3062
3063  sources = []
3064
3065  if (target_cpu == "arm64" && (is_linux || is_android)) {
3066    sources = [
3067      "allocator/partition_allocator/src/partition_alloc/arm_bti_test_functions.S",
3068      "allocator/partition_allocator/src/partition_alloc/arm_bti_test_functions.h",
3069    ]
3070  }
3071}
3072
3073source_set("path_service_unittest") {
3074  testonly = true
3075
3076  sources = [ "path_service_unittest.cc" ]
3077
3078  deps = [
3079    ":base",
3080    "//base/test:test_support",
3081    "//testing/gtest",
3082  ]
3083
3084  if (is_ios) {
3085    deps += [ ":base_generated_test_file_bundle_data" ]
3086  } else {
3087    data_deps = [ ":generate_file_for_test" ]
3088  }
3089}
3090
3091test("base_unittests") {
3092  sources = [
3093    "allocator/dispatcher/dispatcher_unittest.cc",
3094    "allocator/dispatcher/initializer_unittest.cc",
3095    "allocator/dispatcher/internal/dispatcher_internal_unittest.cc",
3096    "allocator/dispatcher/testing/dispatcher_test.cc",
3097    "allocator/dispatcher/testing/dispatcher_test.h",
3098    "allocator/dispatcher/testing/observer_mock.h",
3099    "allocator/dispatcher/testing/tools.h",
3100    "allocator/dispatcher/tls_unittest.cc",
3101    "allocator/partition_allocator/src/partition_alloc/pointers/raw_ptr_test_support.h",
3102    "allocator/partition_allocator/src/partition_alloc/pointers/raw_ptr_unittest.cc",
3103    "allocator/partition_allocator/src/partition_alloc/pointers/raw_ref_unittest.cc",
3104    "at_exit_unittest.cc",
3105    "atomicops_unittest.cc",
3106    "auto_reset_unittest.cc",
3107    "barrier_callback_unittest.cc",
3108    "barrier_closure_unittest.cc",
3109    "base64_unittest.cc",
3110    "base64url_unittest.cc",
3111    "big_endian_unittest.cc",
3112    "bit_cast_unittest.cc",
3113    "bits_unittest.cc",
3114    "build_time_unittest.cc",
3115    "callback_list_unittest.cc",
3116    "cancelable_callback_unittest.cc",
3117    "check_is_test_unittest.cc",
3118    "check_unittest.cc",
3119    "command_line_unittest.cc",
3120    "component_export_unittest.cc",
3121    "containers/adapters_unittest.cc",
3122    "containers/buffer_iterator_unittest.cc",
3123    "containers/checked_iterators_unittest.cc",
3124    "containers/circular_deque_unittest.cc",
3125    "containers/contains_unittest.cc",
3126    "containers/enum_set_unittest.cc",
3127    "containers/erase_unittest.cc",
3128    "containers/extend_unittest.cc",
3129    "containers/fixed_flat_map_unittest.cc",
3130    "containers/fixed_flat_set_unittest.cc",
3131    "containers/flat_map_unittest.cc",
3132    "containers/flat_set_unittest.cc",
3133    "containers/flat_tree_unittest.cc",
3134    "containers/id_map_unittest.cc",
3135    "containers/intrusive_heap_unittest.cc",
3136    "containers/linked_list_unittest.cc",
3137    "containers/lru_cache_unittest.cc",
3138    "containers/map_util_unittest.cc",
3139    "containers/small_map_unittest.cc",
3140    "containers/span_unittest.cc",
3141    "containers/unique_ptr_adapters_unittest.cc",
3142    "containers/vector_buffer_unittest.cc",
3143    "cpu_unittest.cc",
3144    "debug/alias_unittest.cc",
3145    "debug/asan_service_unittest.cc",
3146    "debug/crash_logging_unittest.cc",
3147    "debug/debugger_unittest.cc",
3148    "debug/dump_without_crashing_unittest.cc",
3149    "debug/stack_trace_unittest.cc",
3150    "debug/task_trace_unittest.cc",
3151    "environment_unittest.cc",
3152    "feature_list_unittest.cc",
3153    "files/block_tests_writing_to_special_dirs_unittest.cc",
3154    "files/file_enumerator_unittest.cc",
3155    "files/file_error_or_unittest.cc",
3156    "files/file_path_unittest.cc",
3157    "files/file_path_watcher_unittest.cc",
3158    "files/file_proxy_unittest.cc",
3159    "files/file_unittest.cc",
3160    "files/file_util_unittest.cc",
3161    "files/important_file_writer_cleaner_unittest.cc",
3162    "files/important_file_writer_unittest.cc",
3163    "files/memory_mapped_file_unittest.cc",
3164    "files/safe_base_name_unittest.cc",
3165    "files/scoped_temp_dir_unittest.cc",
3166    "files/scoped_temp_file_unittest.cc",
3167    "functional/bind_unittest.cc",
3168    "functional/callback_helpers_unittest.cc",
3169    "functional/callback_unittest.cc",
3170    "functional/function_ref_unittest.cc",
3171    "functional/not_fn_unittest.cc",
3172    "functional/overloaded_unittest.cc",
3173    "gmock_unittest.cc",
3174    "hash/hash_unittest.cc",
3175    "hash/legacy_hash_unittest.cc",
3176    "hash/md5_constexpr_unittest.cc",
3177    "hash/md5_unittest.cc",
3178    "hash/sha1_unittest.cc",
3179    "i18n/break_iterator_unittest.cc",
3180    "i18n/case_conversion_unittest.cc",
3181    "i18n/char_iterator_unittest.cc",
3182    "i18n/character_encoding_unittest.cc",
3183    "i18n/file_util_icu_unittest.cc",
3184    "i18n/icu_string_conversions_unittest.cc",
3185    "i18n/icu_util_unittest.cc",
3186    "i18n/message_formatter_unittest.cc",
3187    "i18n/number_formatting_unittest.cc",
3188    "i18n/rtl_unittest.cc",
3189    "i18n/streaming_utf8_validator_unittest.cc",
3190    "i18n/string_search_unittest.cc",
3191    "i18n/time_formatting_unittest.cc",
3192    "i18n/timezone_unittest.cc",
3193    "i18n/transliterator_unittest.cc",
3194    "immediate_crash_unittest.cc",
3195    "json/json_parser_unittest.cc",
3196    "json/json_reader_unittest.cc",
3197    "json/json_value_converter_unittest.cc",
3198    "json/json_value_serializer_unittest.cc",
3199    "json/json_writer_unittest.cc",
3200    "json/string_escape_unittest.cc",
3201    "json/values_util_unittest.cc",
3202    "lazy_instance_unittest.cc",
3203    "logging_unittest.cc",
3204    "memory/aligned_memory_unittest.cc",
3205    "memory/discardable_memory_backing_field_trial_unittest.cc",
3206    "memory/discardable_shared_memory_unittest.cc",
3207    "memory/memory_pressure_listener_unittest.cc",
3208    "memory/platform_shared_memory_region_unittest.cc",
3209    "memory/ptr_util_unittest.cc",
3210    "memory/raw_ptr_asan_unittest.cc",
3211    "memory/raw_ptr_chromium_unittest.cc",
3212    "memory/raw_span_unittest.cc",
3213    "memory/ref_counted_memory_unittest.cc",
3214    "memory/ref_counted_unittest.cc",
3215    "memory/safe_ref_unittest.cc",
3216    "memory/safety_checks_unittest.cc",
3217    "memory/shared_memory_hooks_unittest.cc",
3218    "memory/shared_memory_mapping_unittest.cc",
3219    "memory/shared_memory_region_unittest.cc",
3220    "memory/singleton_unittest.cc",
3221    "memory/unsafe_shared_memory_pool_unittest.cc",
3222    "memory/values_equivalent_unittest.cc",
3223    "memory/weak_auto_reset_unittest.cc",
3224    "memory/weak_ptr_unittest.cc",
3225    "message_loop/message_pump_glib_unittest.cc",
3226    "message_loop/message_pump_unittest.cc",
3227    "message_loop/work_id_provider_unittest.cc",
3228    "metrics/bucket_ranges_unittest.cc",
3229    "metrics/crc32_unittest.cc",
3230    "metrics/field_trial_params_unittest.cc",
3231    "metrics/field_trial_unittest.cc",
3232    "metrics/histogram_base_unittest.cc",
3233    "metrics/histogram_delta_serialization_unittest.cc",
3234    "metrics/histogram_functions_unittest.cc",
3235    "metrics/histogram_macros_unittest.cc",
3236    "metrics/histogram_samples_unittest.cc",
3237    "metrics/histogram_shared_memory_unittest.cc",
3238    "metrics/histogram_snapshot_manager_unittest.cc",
3239    "metrics/histogram_threadsafe_unittest.cc",
3240    "metrics/histogram_unittest.cc",
3241    "metrics/metrics_hashes_unittest.cc",
3242    "metrics/persistent_histogram_allocator_unittest.cc",
3243    "metrics/persistent_histogram_storage_unittest.cc",
3244    "metrics/persistent_memory_allocator_unittest.cc",
3245    "metrics/persistent_sample_map_unittest.cc",
3246    "metrics/ranges_manager_unittest.cc",
3247    "metrics/sample_map_unittest.cc",
3248    "metrics/sample_vector_unittest.cc",
3249    "metrics/single_sample_metrics_unittest.cc",
3250    "metrics/sparse_histogram_unittest.cc",
3251    "metrics/statistics_recorder_starvation_unittest.cc",
3252    "metrics/statistics_recorder_unittest.cc",
3253    "moving_window_unittest.cc",
3254    "native_library_unittest.cc",
3255    "no_destructor_unittest.cc",
3256    "observer_list_threadsafe_unittest.cc",
3257    "observer_list_unittest.cc",
3258    "one_shot_event_unittest.cc",
3259    "parameter_pack_unittest.cc",
3260    "pickle_unittest.cc",
3261    "power_monitor/battery_level_provider_unittest.cc",
3262    "power_monitor/battery_state_sampler_unittest.cc",
3263    "power_monitor/power_monitor_device_source_unittest.cc",
3264    "power_monitor/power_monitor_unittest.cc",
3265    "power_monitor/timer_sampling_event_source_unittest.cc",
3266    "process/environment_internal_unittest.cc",
3267    "process/memory_unittest.cc",
3268    "process/process_metrics_unittest.cc",
3269    "process/process_unittest.cc",
3270    "process/process_util_unittest.cc",
3271    "profiler/metadata_recorder_unittest.cc",
3272    "profiler/module_cache_unittest.cc",
3273    "profiler/sample_metadata_unittest.cc",
3274    "profiler/stack_buffer_unittest.cc",
3275    "profiler/stack_copier_suspend_unittest.cc",
3276    "profiler/stack_copier_unittest.cc",
3277    "profiler/stack_sampler_unittest.cc",
3278    "profiler/stack_sampling_profiler_unittest.cc",
3279    "rand_util_unittest.cc",
3280    "ranges/algorithm_unittest.cc",
3281    "ranges/functional_unittest.cc",
3282    "ranges/ranges_unittest.cc",
3283    "run_loop_unittest.cc",
3284    "safe_numerics_unittest.cc",
3285    "sampling_heap_profiler/lock_free_address_hash_set_unittest.cc",
3286    "scoped_add_feature_flags_unittest.cc",
3287    "scoped_clear_last_error_unittest.cc",
3288    "scoped_generic_unittest.cc",
3289    "scoped_multi_source_observation_unittest.cc",
3290    "scoped_native_library_unittest.cc",
3291    "scoped_observation_unittest.cc",
3292    "security_unittest.cc",
3293    "sequence_checker_unittest.cc",
3294    "sequence_token_unittest.cc",
3295    "state_transitions_unittest.cc",
3296    "std_clamp_unittest.cc",
3297    "stl_util_unittest.cc",
3298    "strings/abseil_string_number_conversions_unittest.cc",
3299    "strings/escape_unittest.cc",
3300    "strings/levenshtein_distance_unittest.cc",
3301    "strings/no_trigraphs_unittest.cc",
3302    "strings/pattern_unittest.cc",
3303    "strings/safe_sprintf_unittest.cc",
3304    "strings/strcat_unittest.cc",
3305    "strings/string_number_conversions_unittest.cc",
3306    "strings/string_piece_unittest.cc",
3307    "strings/string_split_unittest.cc",
3308    "strings/string_tokenizer_unittest.cc",
3309    "strings/string_util_unittest.cc",
3310    "strings/stringize_macros_unittest.cc",
3311    "strings/stringprintf_unittest.cc",
3312    "strings/sys_string_conversions_unittest.cc",
3313    "strings/to_string_unittest.cc",
3314    "strings/utf_offset_string_conversions_unittest.cc",
3315    "strings/utf_string_conversion_utils_unittest.cc",
3316    "strings/utf_string_conversions_unittest.cc",
3317    "substring_set_matcher/string_pattern_unittest.cc",
3318    "substring_set_matcher/substring_set_matcher_unittest.cc",
3319    "supports_user_data_unittest.cc",
3320    "sync_socket_unittest.cc",
3321    "synchronization/atomic_flag_unittest.cc",
3322    "synchronization/condition_variable_unittest.cc",
3323    "synchronization/lock_unittest.cc",
3324    "synchronization/waitable_event_unittest.cc",
3325    "synchronization/waitable_event_watcher_unittest.cc",
3326    "sys_byteorder_unittest.cc",
3327    "system/sys_info_unittest.cc",
3328    "system/system_monitor_unittest.cc",
3329    "task/bind_post_task_unittest.cc",
3330    "task/cancelable_task_tracker_unittest.cc",
3331    "task/common/checked_lock_unittest.cc",
3332    "task/common/operations_controller_unittest.cc",
3333    "task/common/task_annotator_unittest.cc",
3334    "task/default_delayed_task_handle_delegate_unittest.cc",
3335    "task/deferred_sequenced_task_runner_unittest.cc",
3336    "task/delayed_task_handle_unittest.cc",
3337    "task/lazy_thread_pool_task_runner_unittest.cc",
3338    "task/post_job_unittest.cc",
3339    "task/scoped_set_task_priority_for_current_thread_unittest.cc",
3340    "task/sequence_manager/atomic_flag_set_unittest.cc",
3341    "task/sequence_manager/lazily_deallocated_deque_unittest.cc",
3342    "task/sequence_manager/sequence_manager_impl_unittest.cc",
3343    "task/sequence_manager/task_order_unittest.cc",
3344    "task/sequence_manager/task_queue_selector_unittest.cc",
3345    "task/sequence_manager/task_queue_unittest.cc",
3346    "task/sequence_manager/test/mock_time_message_pump_unittest.cc",
3347    "task/sequence_manager/thread_controller_power_monitor_unittest.cc",
3348    "task/sequence_manager/thread_controller_with_message_pump_impl_unittest.cc",
3349    "task/sequence_manager/wake_up_queue_unittest.cc",
3350    "task/sequence_manager/work_deduplicator_unittest.cc",
3351    "task/sequence_manager/work_queue_sets_unittest.cc",
3352    "task/sequence_manager/work_queue_unittest.cc",
3353    "task/sequenced_task_runner_unittest.cc",
3354    "task/single_thread_task_executor_unittest.cc",
3355    "task/single_thread_task_runner_unittest.cc",
3356    "task/task_runner_unittest.cc",
3357    "task/task_traits_unittest.cc",
3358    "task/thread_pool/can_run_policy_test.h",
3359    "task/thread_pool/delayed_priority_queue_unittest.cc",
3360    "task/thread_pool/delayed_task_manager_unittest.cc",
3361    "task/thread_pool/environment_config_unittest.cc",
3362    "task/thread_pool/job_task_source_unittest.cc",
3363    "task/thread_pool/pooled_single_thread_task_runner_manager_unittest.cc",
3364    "task/thread_pool/priority_queue_unittest.cc",
3365    "task/thread_pool/semaphore/semaphore_unittest.cc",
3366    "task/thread_pool/sequence_unittest.cc",
3367    "task/thread_pool/service_thread_unittest.cc",
3368    "task/thread_pool/task_source_sort_key_unittest.cc",
3369    "task/thread_pool/task_tracker_unittest.cc",
3370    "task/thread_pool/test_task_factory.cc",
3371    "task/thread_pool/test_task_factory.h",
3372    "task/thread_pool/test_utils.cc",
3373    "task/thread_pool/test_utils.h",
3374    "task/thread_pool/thread_group_impl_unittest.cc",
3375    "task/thread_pool/thread_group_unittest.cc",
3376    "task/thread_pool/thread_pool_impl_unittest.cc",
3377    "task/thread_pool/tracked_ref_unittest.cc",
3378    "task/thread_pool/worker_thread_set_unittest.cc",
3379    "task/thread_pool/worker_thread_waitable_event_unittest.cc",
3380    "task/thread_pool_unittest.cc",
3381    "template_util_unittest.cc",
3382    "test/gmock_callback_support_unittest.cc",
3383    "test/gmock_expected_support_unittest.cc",
3384    "test/gmock_move_support_unittest.cc",
3385    "test/gtest_links_unittest.cc",
3386    "test/gtest_tags_unittest.cc",
3387    "test/gtest_xml_unittest_result_printer_unittest.cc",
3388    "test/launcher/test_launcher_unittest.cc",
3389    "test/launcher/test_results_tracker_unittest.cc",
3390    "test/memory/dangling_ptr_instrumentation.cc",
3391    "test/memory/dangling_ptr_instrumentation.h",
3392    "test/metrics/histogram_enum_reader_unittest.cc",
3393    "test/metrics/histogram_tester_unittest.cc",
3394    "test/metrics/user_action_tester_unittest.cc",
3395    "test/mock_callback_unittest.cc",
3396    "test/rectify_callback_unittest.cc",
3397    "test/repeating_test_future_unittest.cc",
3398    "test/run_until_unittest.cc",
3399    "test/scoped_feature_list_unittest.cc",
3400    "test/scoped_logging_settings.h",
3401    "test/scoped_mock_clock_override_unittest.cc",
3402    "test/scoped_mock_time_message_loop_task_runner_unittest.cc",
3403    "test/scoped_run_loop_timeout_unittest.cc",
3404    "test/task_environment_unittest.cc",
3405    "test/test_future_unittest.cc",
3406    "test/test_mock_time_task_runner_unittest.cc",
3407    "test/test_pending_task_unittest.cc",
3408    "test/test_proto_loader_unittest.cc",
3409    "test/test_waitable_event_unittest.cc",
3410    "test/to_vector_unittest.cc",
3411    "third_party/dynamic_annotations/dynamic_annotations_compiletest.cc",
3412    "thread_annotations_unittest.cc",
3413    "threading/hang_watcher_unittest.cc",
3414    "threading/platform_thread_unittest.cc",
3415    "threading/post_task_and_reply_impl_unittest.cc",
3416    "threading/scoped_blocking_call_unittest.cc",
3417    "threading/scoped_thread_priority_unittest.cc",
3418    "threading/sequence_bound_unittest.cc",
3419    "threading/sequence_local_storage_map_unittest.cc",
3420    "threading/sequence_local_storage_slot_unittest.cc",
3421    "threading/simple_thread_unittest.cc",
3422    "threading/thread_checker_unittest.cc",
3423    "threading/thread_collision_warner_unittest.cc",
3424    "threading/thread_id_name_manager_unittest.cc",
3425    "threading/thread_local_storage_unittest.cc",
3426    "threading/thread_local_unittest.cc",
3427    "threading/thread_restrictions_unittest.cc",
3428    "threading/thread_unittest.cc",
3429    "threading/watchdog_unittest.cc",
3430    "time/pr_time_unittest.cc",
3431    "time/time_delta_from_string_unittest.cc",
3432    "time/time_unittest.cc",
3433    "timer/elapsed_timer_unittest.cc",
3434    "timer/hi_res_timer_manager_unittest.cc",
3435    "timer/lap_timer_unittest.cc",
3436    "timer/mock_timer_unittest.cc",
3437    "timer/timer_unittest.cc",
3438    "timer/wall_clock_timer_unittest.cc",
3439    "token_unittest.cc",
3440    "tools_sanity_unittest.cc",
3441    "traits_bag_unittest.cc",
3442    "tuple_unittest.cc",
3443    "types/cxx23_to_underlying_unittest.cc",
3444    "types/expected_macros_unittest.cc",
3445    "types/expected_unittest.cc",
3446    "types/fixed_array_unittest.cc",
3447    "types/id_type_unittest.cc",
3448    "types/is_instantiation_unittest.cc",
3449    "types/optional_ref_unittest.cc",
3450    "types/optional_unittest.cc",
3451    "types/optional_util_unittest.cc",
3452    "types/pass_key_unittest.cc",
3453    "types/strong_alias_unittest.cc",
3454    "types/supports_ostream_operator_unittest.cc",
3455    "types/token_type_unittest.cc",
3456    "types/variant_util_unittest.cc",
3457    "unguessable_token_unittest.cc",
3458    "uuid_unittest.cc",
3459    "value_iterators_unittest.cc",
3460    "values_unittest.cc",
3461    "version_unittest.cc",
3462    "vlog_unittest.cc",
3463  ]
3464
3465  if (!is_cronet_build) {
3466    # location_unittest.cc fails gn check for tracing-shimmed Cronet builds.
3467    # Cronet buildbot do not run base_unittests, so exclusing this test
3468    # instead of adding a nogncheck is preferred (crbug.com/1400235).
3469    sources += [ "location_unittest.cc" ]
3470  }
3471
3472  if (build_rust_base_conversions) {
3473    sources += [
3474      "containers/span_rust_unittest.cc",
3475      "strings/string_piece_rust_unittest.cc",
3476    ]
3477  }
3478
3479  if (use_safe_libcxx) {
3480    sources += [ "libcpp_hardening_test.cc" ]
3481  }
3482
3483  defines = []
3484
3485  deps = [
3486    ":arm_bti_testfunctions",
3487    ":base",
3488    ":base_stack_sampling_profiler_test_util",
3489    ":feature_list_buildflags",
3490    ":i18n",
3491    ":partition_alloc_test_support",
3492    ":path_service_unittest",
3493    ":sanitizer_buildflags",
3494    "//base/allocator:buildflags",
3495    "//base/test:native_library_test_utils",
3496    "//base/test:proto_test_support",
3497    "//base/test:run_all_unittests",
3498    "//base/test:test_proto",
3499    "//base/test:test_support",
3500    "//base/third_party/dynamic_annotations",
3501    "//build:blink_buildflags",
3502    "//build:chromecast_buildflags",
3503    "//build:chromeos_buildflags",
3504    "//testing/gmock",
3505    "//testing/gtest",
3506    "//third_party/icu",
3507    "//third_party/modp_b64",
3508  ]
3509
3510  data_deps = [
3511    "//base/test:immediate_crash_test_helper",
3512    "//base/test:test_child_process",
3513    "//base/test:test_shared_library",
3514    "//testing/buildbot/filters:base_unittests_filters",
3515  ]
3516
3517  if (is_android && enable_chrome_android_internal) {
3518    data_deps += [ "//clank/build/bot/filters:base_unittests_filters" ]
3519  }
3520
3521  if (build_rust_base_conversions) {
3522    deps += [ "//build/rust:cxx_cppdeps" ]
3523  }
3524
3525  if (is_apple) {
3526    public_deps = [
3527      ":base_unittests_bundle_data",
3528      ":base_unittests_noarc",
3529    ]
3530  }
3531
3532  data = [
3533    "test/data/",
3534    "//tools/metrics/histograms/enums.xml",
3535  ]
3536
3537  if (!is_ios) {
3538    sources += [
3539      "allocator/partition_allocator/src/partition_alloc/tagging_unittest.cc",
3540    ]
3541
3542    data_deps += [ "//base/test:test_proto_descriptor" ]
3543    data += [ "$root_gen_dir/base/test/test_proto.descriptor" ]
3544  }
3545
3546  if (is_win) {
3547    deps += [ "//base/win:base_win_buildflags" ]
3548
3549    sources += [
3550      "debug/gdi_debug_util_win_unittest.cc",
3551      "file_version_info_win_unittest.cc",
3552      "process/launch_unittest_win.cc",
3553      "test/fake_iasync_operation_win_unittest.cc",
3554      "test/test_file_util_win_unittest.cc",
3555      "test/test_reg_util_win_unittest.cc",
3556      "threading/platform_thread_win_unittest.cc",
3557      "time/time_win_unittest.cc",
3558      "win/access_control_list_unittest.cc",
3559      "win/access_token_unittest.cc",
3560      "win/async_operation_unittest.cc",
3561      "win/com_init_balancer_unittest.cc",
3562      "win/com_init_check_hook_unittest.cc",
3563      "win/com_init_util_unittest.cc",
3564      "win/dark_mode_support_unittest.cc",
3565      "win/dispatch_stub.cc",
3566      "win/dispatch_stub.h",
3567      "win/dllmain.cc",
3568      "win/embedded_i18n/language_selector_unittest.cc",
3569      "win/enum_variant_unittest.cc",
3570      "win/event_trace_consumer_unittest.cc",
3571      "win/event_trace_controller_unittest.cc",
3572      "win/event_trace_provider_unittest.cc",
3573      "win/hstring_reference_unittest.cc",
3574      "win/i18n_unittest.cc",
3575      "win/map_unittest.cc",
3576      "win/message_window_unittest.cc",
3577      "win/object_watcher_unittest.cc",
3578      "win/pe_image_reader_unittest.cc",
3579      "win/pe_image_unittest.cc",
3580      "win/post_async_results_unittest.cc",
3581      "win/reference_unittest.cc",
3582      "win/registry_unittest.cc",
3583      "win/scoped_bstr_unittest.cc",
3584      "win/scoped_handle_unittest.cc",
3585      "win/scoped_hstring_unittest.cc",
3586      "win/scoped_localalloc_unittest.cc",
3587      "win/scoped_process_information_unittest.cc",
3588      "win/scoped_safearray_unittest.cc",
3589      "win/scoped_variant_unittest.cc",
3590      "win/scoped_winrt_initializer_unittest.cc",
3591      "win/security_descriptor_unittest.cc",
3592      "win/security_util_unittest.cc",
3593      "win/shortcut_unittest.cc",
3594      "win/sid_unittest.cc",
3595      "win/startup_information_unittest.cc",
3596      "win/variant_conversions_unittest.cc",
3597      "win/variant_vector_unittest.cc",
3598      "win/vector_unittest.cc",
3599      "win/win_includes_unittest.cc",
3600      "win/win_util_unittest.cc",
3601      "win/window_enumerator_unittest.cc",
3602      "win/windows_version_unittest.cc",
3603      "win/winrt_storage_util_unittest.cc",
3604      "win/wmi_unittest.cc",
3605      "win/wrapped_window_proc_unittest.cc",
3606    ]
3607
3608    if (enable_cet_shadow_stack) {
3609      sources += [ "win/cet_shadow_stack_unittest.cc" ]
3610    }
3611
3612    libs = [
3613      "ntdll.lib",
3614      "onecore.lib",
3615    ]
3616  }
3617
3618  if (is_linux || is_chromeos) {
3619    sources += [
3620      "debug/proc_maps_linux_unittest.cc",
3621      "files/scoped_file_linux_unittest.cc",
3622      "nix/mime_util_xdg_unittest.cc",
3623    ]
3624
3625    if (!is_nacl) {
3626      deps += [ ":stack_canary_linux_unittests" ]
3627    }
3628  }
3629
3630  if (is_posix) {
3631    sources += [
3632      "files/dir_reader_posix_unittest.cc",
3633      "files/file_descriptor_watcher_posix_unittest.cc",
3634      "memory/madv_free_discardable_memory_allocator_posix_unittest.cc",
3635      "memory/madv_free_discardable_memory_posix_unittest.cc",
3636      "message_loop/fd_watch_controller_posix_unittest.cc",
3637      "posix/file_descriptor_shuffle_unittest.cc",
3638      "posix/unix_domain_socket_unittest.cc",
3639    ]
3640    if (!is_nacl && !is_apple) {
3641      sources += [
3642        "profiler/stack_base_address_posix_unittest.cc",
3643        "profiler/stack_copier_signal_unittest.cc",
3644        "profiler/thread_delegate_posix_unittest.cc",
3645      ]
3646    }
3647  }
3648
3649  # Allow more direct string conversions on platforms with native utf8
3650  # strings
3651  if (is_apple || is_chromeos || is_castos || is_cast_android || is_fuchsia) {
3652    defines += [ "SYSTEM_NATIVE_UTF8" ]
3653  }
3654
3655  if (is_android) {
3656    # Add unwind tables in base_unittests_apk test apk. The unwind tables are
3657    # generated from debug info in the binary. Removing "default_symbols" and
3658    # adding symbols config removes the "strip_debug" config that strips the
3659    # debug info, on base unittests apk.
3660    if (can_unwind_with_cfi_table || enable_arm_cfi_table) {
3661      configs -= [ "//build/config/compiler:default_symbols" ]
3662      if (symbol_level == 2) {
3663        configs += [ "//build/config/compiler:symbols" ]
3664      } else {
3665        configs += [ "//build/config/compiler:minimal_symbols" ]
3666      }
3667      add_unwind_tables_in_apk = true
3668    }
3669    if (can_unwind_with_cfi_table) {
3670      sources += [ "trace_event/cfi_backtrace_android_unittest.cc" ]
3671    }
3672    if (current_cpu == "arm") {
3673      sources += [
3674        "profiler/chrome_unwind_info_android_unittest.cc",
3675        "profiler/chrome_unwinder_android_unittest.cc",
3676      ]
3677    }
3678    if (current_cpu == "arm64") {
3679      sources += [ "profiler/frame_pointer_unwinder_unittest.cc" ]
3680    }
3681    if (!exclude_unwind_tables &&
3682        (current_cpu == "arm" || current_cpu == "arm64")) {
3683      sources += [
3684        "profiler/libunwindstack_unwinder_android_unittest.cc",
3685        "profiler/native_unwinder_android_unittest.cc",
3686      ]
3687      deps += [
3688        ":base_profiler_reparsing_test_support_library",
3689        ":base_profiler_test_support_java",
3690        ":base_profiler_test_support_jni",
3691        ":base_profiler_test_support_library",
3692        ":native_unwinder_android",
3693      ]
3694    }
3695
3696    sources += [
3697      "android/android_image_reader_compat_unittest.cc",
3698      "android/application_status_listener_unittest.cc",
3699      "android/child_process_unittest.cc",
3700      "android/content_uri_utils_unittest.cc",
3701      "android/jank_metric_uma_recorder_unittest.cc",
3702      "android/java_handler_thread_unittest.cc",
3703      "android/jni_android_unittest.cc",
3704      "android/jni_array_unittest.cc",
3705      "android/jni_string_unittest.cc",
3706      "android/library_loader/library_prefetcher_unittest.cc",
3707      "android/linker/linker_jni.cc",
3708      "android/linker/linker_jni.h",
3709      "android/linker/linker_unittest.cc",
3710      "android/meminfo_dump_provider_unittest.cc",
3711      "android/path_utils_unittest.cc",
3712      "android/radio_utils_unittest.cc",
3713      "android/reached_addresses_bitset_unittest.cc",
3714      "android/scoped_java_ref_unittest.cc",
3715      "android/sys_utils_unittest.cc",
3716      "android/unguessable_token_android_unittest.cc",
3717      "os_compat_android_unittest.cc",
3718    ]
3719
3720    # Android does not use test_launcher to run gtests.
3721    sources -= [
3722      "process/process_unittest.cc",
3723      "process/process_util_unittest.cc",
3724      "test/gtest_links_unittest.cc",
3725      "test/gtest_tags_unittest.cc",
3726      "test/gtest_xml_unittest_result_printer_unittest.cc",
3727      "test/launcher/test_launcher_unittest.cc",
3728      "test/launcher/test_results_tracker_unittest.cc",
3729    ]
3730    deps += [
3731      ":base_java_unittest_support",
3732      "//base/test:test_support_java",
3733      "//third_party/jni_zero",
3734    ]
3735  }
3736
3737  if (build_allocation_stack_trace_recorder) {
3738    sources += [ "debug/allocation_trace_unittest.cc" ]
3739  }
3740
3741  if (is_apple || current_os == "freebsd" || current_os == "openbsd") {
3742    sources += [ "posix/sysctl_unittest.cc" ]
3743  }
3744  if (is_apple) {
3745    sources += [
3746      "apple/backup_util_unittest.mm",
3747      "apple/bind_objc_block_unittest.mm",
3748      "apple/dispatch_source_mach_unittest.cc",
3749      "apple/foundation_util_unittest.mm",
3750      "strings/sys_string_conversions_apple_unittest.mm",
3751    ]
3752  }
3753
3754  if (is_apple) {
3755    sources += [ "time/time_apple_unittest.mm" ]
3756  }
3757
3758  if (is_mac) {
3759    sources += [
3760      "apple/call_with_eh_frame_unittest.mm",
3761      "apple/scoped_cftyperef_unittest.cc",
3762      "apple/scoped_mach_vm_unittest.cc",
3763      "apple/scoped_nsautorelease_pool_unittest.mm",
3764      "apple/scoped_objc_class_swizzler_unittest.mm",
3765      "enterprise_util_mac_unittest.mm",
3766      "mac/launch_application_unittest.mm",
3767      "mac/mac_util_unittest.mm",
3768      "mac/mach_port_rendezvous_unittest.cc",
3769      "mac/scoped_sending_event_unittest.mm",
3770      "message_loop/message_pump_apple_unittest.mm",
3771      "power_monitor/thermal_state_observer_mac_unittest.mm",
3772      "process/memory_unittest_mac.h",
3773      "process/memory_unittest_mac.mm",
3774      "system/sys_info_mac_unittest.mm",
3775    ]
3776    data_deps += [ "//base/mac:launch_application_test_helper" ]
3777  }
3778
3779  if (is_ios) {
3780    sources += [
3781      "ios/crb_protocol_observers_unittest.mm",
3782      "ios/device_util_unittest.mm",
3783      "ios/scoped_critical_action_unittest.mm",
3784    ]
3785
3786    bundle_deps = [ ":base_test_proto_bundle_data" ]
3787
3788    if (is_cronet_build) {
3789      sources += [ "message_loop/message_pump_io_ios_unittest.cc" ]
3790    } else {
3791      sources += [ "message_loop/message_pump_kqueue_unittest.cc" ]
3792    }
3793
3794    # ios does not use test_launcher to run gtests.
3795    sources -= [
3796      "files/file_path_watcher_unittest.cc",
3797      "memory/discardable_shared_memory_unittest.cc",
3798      "process/memory_unittest.cc",
3799      "process/process_unittest.cc",
3800      "process/process_util_unittest.cc",
3801      "sync_socket_unittest.cc",
3802      "synchronization/waitable_event_watcher_unittest.cc",
3803      "test/gtest_links_unittest.cc",
3804      "test/gtest_tags_unittest.cc",
3805      "test/gtest_xml_unittest_result_printer_unittest.cc",
3806      "test/launcher/test_launcher_unittest.cc",
3807      "test/launcher/test_results_tracker_unittest.cc",
3808    ]
3809
3810    sources -= [
3811      # The immediate crash tests require shared libraries, which we don't
3812      # support loading on iOS.
3813      "immediate_crash_unittest.cc",
3814    ]
3815
3816    if (use_allocator_shim) {
3817      sources += [
3818        "allocator/partition_allocator/src/partition_alloc/shim/allocator_interception_apple_unittest.mm",
3819        "allocator/partition_allocator/src/partition_alloc/shim/malloc_zone_functions_apple_unittest.cc",
3820      ]
3821    }
3822
3823    if (use_blink) {
3824      sources += [ "files/file_path_watcher_unittest.cc" ]
3825    }
3826  }
3827
3828  if (use_partition_alloc) {
3829    sources += [
3830      "allocator/partition_allocator/src/partition_alloc/address_pool_manager_unittest.cc",
3831      "allocator/partition_allocator/src/partition_alloc/address_space_randomization_unittest.cc",
3832      "allocator/partition_allocator/src/partition_alloc/compressed_pointer_unittest.cc",
3833      "allocator/partition_allocator/src/partition_alloc/freeslot_bitmap_unittest.cc",
3834      "allocator/partition_allocator/src/partition_alloc/hardening_unittest.cc",
3835      "allocator/partition_allocator/src/partition_alloc/lightweight_quarantine_unittest.cc",
3836      "allocator/partition_allocator/src/partition_alloc/memory_reclaimer_unittest.cc",
3837      "allocator/partition_allocator/src/partition_alloc/page_allocator_unittest.cc",
3838      "allocator/partition_allocator/src/partition_alloc/partition_alloc_base/bits_pa_unittest.cc",
3839      "allocator/partition_allocator/src/partition_alloc/partition_alloc_base/component_export_pa_unittest.cc",
3840      "allocator/partition_allocator/src/partition_alloc/partition_alloc_base/cpu_pa_unittest.cc",
3841      "allocator/partition_allocator/src/partition_alloc/partition_alloc_base/logging_pa_unittest.cc",
3842      "allocator/partition_allocator/src/partition_alloc/partition_alloc_base/rand_util_pa_unittest.cc",
3843      "allocator/partition_allocator/src/partition_alloc/partition_alloc_base/scoped_clear_last_error_pa_unittest.cc",
3844      "allocator/partition_allocator/src/partition_alloc/partition_alloc_base/strings/cstring_builder_pa_unittest.cc",
3845      "allocator/partition_allocator/src/partition_alloc/partition_alloc_base/strings/safe_sprintf_pa_unittest.cc",
3846      "allocator/partition_allocator/src/partition_alloc/partition_alloc_base/strings/string_util_pa_unittest.cc",
3847      "allocator/partition_allocator/src/partition_alloc/partition_alloc_base/strings/stringprintf_pa_unittest.cc",
3848      "allocator/partition_allocator/src/partition_alloc/partition_alloc_base/thread_annotations_pa_unittest.cc",
3849      "allocator/partition_allocator/src/partition_alloc/partition_alloc_unittest.cc",
3850      "allocator/partition_allocator/src/partition_alloc/partition_lock_unittest.cc",
3851      "allocator/partition_allocator/src/partition_alloc/reverse_bytes_unittest.cc",
3852      "allocator/partition_allocator/src/partition_alloc/thread_cache_unittest.cc",
3853    ]
3854
3855    if (use_starscan) {
3856      sources += [
3857        "allocator/partition_allocator/src/partition_alloc/starscan/pcscan_scheduling_unittest.cc",
3858        "allocator/partition_allocator/src/partition_alloc/starscan/pcscan_unittest.cc",
3859        "allocator/partition_allocator/src/partition_alloc/starscan/scan_loop_unittest.cc",
3860        "allocator/partition_allocator/src/partition_alloc/starscan/stack/stack_unittest.cc",
3861        "allocator/partition_allocator/src/partition_alloc/starscan/state_bitmap_unittest.cc",
3862      ]
3863    }
3864
3865    if ((is_android || is_linux) && target_cpu == "arm64") {
3866      cflags = [
3867        "-Xclang",
3868        "-target-feature",
3869        "-Xclang",
3870        "+mte",
3871      ]
3872    }
3873
3874    if (is_android) {
3875      sources += [
3876        "allocator/partition_allocator/src/partition_alloc/partition_alloc_base/files/file_path_pa_unittest.cc",
3877        "allocator/partition_allocator/src/partition_alloc/partition_alloc_base/native_library_pa_unittest.cc",
3878      ]
3879    } else if (is_fuchsia) {
3880      sources += [ "allocator/partition_allocator/src/partition_alloc/partition_alloc_base/fuchsia/fuchsia_logging_pa_unittest.cc" ]
3881    }
3882
3883    if (enable_pkeys && is_debug && !is_component_build) {
3884      # This test requires RELRO, which is not enabled in component builds.
3885      # Also, require a debug build, since we only disable stack protectors in
3886      # debug builds in partition alloc (see below why it's needed).
3887      sources += [ "allocator/partition_allocator/src/partition_alloc/thread_isolation/pkey_unittest.cc" ]
3888
3889      # We want to test the pkey code without access to memory that is not
3890      # pkey-tagged. This will allow us to catch unintended memory accesses
3891      # that could break our security assumptions. The stack protector reads a
3892      # value from the TLS which won't be pkey-tagged, hence disabling it for
3893      # the test.
3894      configs += [ ":no_stack_protector" ]
3895    }
3896
3897    deps += [ ":partition_alloc_test_support" ]
3898  }
3899
3900  if (is_mac) {
3901    sources += [ "message_loop/message_pump_kqueue_unittest.cc" ]
3902    frameworks = [
3903      "CoreFoundation.framework",
3904      "Foundation.framework",
3905      "OpenCL.framework",
3906    ]
3907    if (current_cpu == "x64") {
3908      deps += [ ":base_profiler_test_support_library" ]
3909    }
3910  }
3911
3912  if (is_fuchsia || is_linux || is_chromeos) {
3913    sources += [
3914      "debug/elf_reader_unittest.cc",
3915      "debug/test_elf_image_builder.cc",
3916      "debug/test_elf_image_builder.h",
3917    ]
3918
3919    deps += [ "//base/test:malloc_wrapper" ]
3920    defines += [
3921      # This library is used by ElfReaderTest to test reading elf files.
3922      "MALLOC_WRAPPER_LIB=\"${shlib_prefix}malloc_wrapper${shlib_extension}\"",
3923    ]
3924
3925    if (!is_component_build) {
3926      # Set rpath to find libmalloc_wrapper.so even in a non-component build.
3927      configs += [ "//build/config/gcc:rpath_for_built_shared_libraries" ]
3928    }
3929  }
3930
3931  if (is_chromeos_lacros) {
3932    sources += [ "i18n/icu_mergeable_data_file_unittest.cc" ]
3933  }
3934
3935  if (is_linux || is_chromeos_lacros) {
3936    sources += [
3937      "linux_util_unittest.cc",
3938      "nix/xdg_util_unittest.cc",
3939    ]
3940  }
3941
3942  if (!use_glib) {
3943    sources -= [ "message_loop/message_pump_glib_unittest.cc" ]
3944  }
3945
3946  if (use_libevent) {
3947    sources += [ "message_loop/message_pump_libevent_unittest.cc" ]
3948    deps += [
3949      ":message_pump_buildflags",
3950      "//third_party/libevent",
3951    ]
3952  }
3953
3954  if (is_fuchsia) {
3955    sources += [
3956      "files/dir_reader_posix_unittest.cc",
3957      "files/file_descriptor_watcher_posix_unittest.cc",
3958      "fuchsia/fidl_event_handler_unittest.cc",
3959      "fuchsia/file_utils_unittest.cc",
3960      "fuchsia/filtered_service_directory_unittest.cc",
3961      "fuchsia/fuchsia_logging_unittest.cc",
3962      "fuchsia/intl_profile_watcher_unittest.cc",
3963      "fuchsia/mem_buffer_util_unittest.cc",
3964      "fuchsia/scoped_natural_service_binding_unittest.cc",
3965      "fuchsia/scoped_natural_service_publisher_unittest.cc",
3966      "fuchsia/scoped_service_binding_unittest.cc",
3967      "fuchsia/scoped_service_publisher_unittest.cc",
3968      "fuchsia/system_build_info_unittest.cc",
3969      "fuchsia/system_product_info_unittest.cc",
3970      "fuchsia/test_component_context_for_process_unittest.cc",
3971      "fuchsia/time_zone_data_unittest.cc",
3972      "message_loop/fd_watch_controller_posix_unittest.cc",
3973      "posix/file_descriptor_shuffle_unittest.cc",
3974    ]
3975
3976    deps += [
3977      ":test_interface_impl",
3978      ":test_interface_natural_impl",
3979      ":test_log_listener_safe",
3980      "//third_party/fuchsia-sdk/sdk/fidl/fuchsia.buildinfo:fuchsia.buildinfo_cpp",
3981      "//third_party/fuchsia-sdk/sdk/fidl/fuchsia.buildinfo:fuchsia.buildinfo_hlcpp",
3982      "//third_party/fuchsia-sdk/sdk/fidl/fuchsia.hwinfo:fuchsia.hwinfo_cpp",
3983      "//third_party/fuchsia-sdk/sdk/fidl/fuchsia.intl:fuchsia.intl_hlcpp",
3984      "//third_party/fuchsia-sdk/sdk/fidl/fuchsia.logger:fuchsia.logger_cpp",
3985      "//third_party/fuchsia-sdk/sdk/fidl/fuchsia.mem:fuchsia.mem_hlcpp",
3986      "//third_party/fuchsia-sdk/sdk/pkg/async",
3987      "//third_party/fuchsia-sdk/sdk/pkg/async-default",
3988      "//third_party/fuchsia-sdk/sdk/pkg/component_incoming_cpp",
3989      "//third_party/fuchsia-sdk/sdk/pkg/fdio",
3990      "//third_party/fuchsia-sdk/sdk/pkg/sys_cpp",
3991    ]
3992
3993    additional_manifest_fragments = [
3994      "//build/config/fuchsia/test/logger.shard.test-cml",
3995
3996      # Required by PartitionAllocPageAllocatorTest tests with exec capability.
3997      "//build/config/fuchsia/test/mark_vmo_executable.shard.test-cml",
3998    ]
3999  }
4000
4001  if (!is_fuchsia && !is_ios) {
4002    sources += [ "files/file_locking_unittest.cc" ]
4003  }
4004
4005  if (is_android) {
4006    deps += [ "//testing/android/native_test:native_test_native_code" ]
4007    sources += [
4008      "debug/elf_reader_unittest.cc",
4009      "debug/proc_maps_linux_unittest.cc",
4010      "debug/test_elf_image_builder.cc",
4011      "debug/test_elf_image_builder.h",
4012    ]
4013  }
4014
4015  if (is_win) {
4016    deps += [ "//base:scoped_handle_test_dll" ]
4017    if (current_cpu == "x64" || current_cpu == "arm64") {
4018      sources += [ "profiler/win32_stack_frame_unwinder_unittest.cc" ]
4019      deps += [ ":base_profiler_test_support_library" ]
4020    }
4021
4022    # These tests are not built by default because they make heavy use of
4023    # parameterized tests. Even when disabled, they incur a startup penalty on
4024    # base_unittests. See comments in the file as for why they are disabled by
4025    # default, and https://crbug.com/1475518 for one consequence of the process
4026    # startup penalty.
4027    # sources += [ "files/os_validation_win_unittest.cc" ]
4028
4029    if (toolchain_has_rust && win_enable_cfg_guards) {
4030      deps += [ ":rust_cfg_win_test" ]
4031    }
4032  }
4033  if (is_apple) {
4034    sources += [ "profiler/frame_pointer_unwinder_unittest.cc" ]
4035  }
4036  if (is_chromeos && current_cpu == "x64") {
4037    sources += [ "profiler/frame_pointer_unwinder_unittest.cc" ]
4038    deps += [ ":base_profiler_test_support_library" ]
4039  }
4040
4041  if (use_allocator_shim) {
4042    sources += [
4043      "allocator/partition_allocator/src/partition_alloc/shim/allocator_shim_unittest.cc",
4044      "sampling_heap_profiler/poisson_allocation_sampler_unittest.cc",
4045      "sampling_heap_profiler/sampling_heap_profiler_unittest.cc",
4046    ]
4047
4048    if (is_win) {
4049      sources += [ "allocator/partition_allocator/src/partition_alloc/shim/winheap_stubs_win_unittest.cc" ]
4050    }
4051
4052    sources += [
4053      "allocator/partition_alloc_support_unittest.cc",
4054      "allocator/partition_allocator/src/partition_alloc/shim/allocator_shim_default_dispatch_to_partition_alloc_unittest.cc",
4055    ]
4056  }
4057
4058  if (enable_base_tracing) {
4059    sources += [
4060      "test/trace_event_analyzer_unittest.cc",
4061      "trace_event/memory_allocator_dump_unittest.cc",
4062      "trace_event/memory_dump_manager_unittest.cc",
4063      "trace_event/memory_dump_scheduler_unittest.cc",
4064      "trace_event/memory_infra_background_allowlist_unittest.cc",
4065      "trace_event/memory_usage_estimator_unittest.cc",
4066      "trace_event/process_memory_dump_unittest.cc",
4067      "trace_event/trace_arguments_unittest.cc",
4068      "trace_event/trace_category_unittest.cc",
4069      "trace_event/trace_config_unittest.cc",
4070      "trace_event/trace_conversion_helper_unittest.cc",
4071      "trace_event/trace_event_unittest.cc",
4072      "trace_event/traced_value_support_unittest.cc",
4073      "trace_event/traced_value_unittest.cc",
4074      "trace_event/typed_macros_unittest.cc",
4075      "tracing/perfetto_task_runner_unittest.cc",
4076    ]
4077
4078    if (is_android) {
4079      sources += [
4080        "trace_event/cpufreq_monitor_android_unittest.cc",
4081        "trace_event/java_heap_dump_provider_android_unittest.cc",
4082      ]
4083    }
4084
4085    deps += [
4086      "//third_party/perfetto/include/perfetto/trace_processor:storage",
4087      "//third_party/perfetto/protos/perfetto/trace:lite",
4088      "//third_party/perfetto/protos/perfetto/trace/interned_data:lite",
4089      "//third_party/perfetto/protos/perfetto/trace/track_event:lite",
4090    ]
4091  }
4092
4093  if (enable_nocompile_tests_new) {
4094    deps += [ ":base_nocompile_tests_new" ]
4095  }
4096}
4097
4098# Test that CFG is enabled in Rust code.
4099if (is_win && toolchain_has_rust) {
4100  source_set("rust_cfg_win_test") {
4101    testonly = true
4102    deps = [
4103      ":base",
4104      "//testing/gtest",
4105    ]
4106    data_deps = [ "//build/rust/tests/test_control_flow_guard" ]
4107    sources = [ "memory/rust_cfg_win_unittest.cc" ]
4108  }
4109}
4110
4111action("build_date") {
4112  script = "write_build_date_header.py"
4113
4114  outputs = [ "$target_gen_dir/generated_build_date.h" ]
4115
4116  args = [
4117    rebase_path("$target_gen_dir/generated_build_date.h", root_build_dir),
4118    build_timestamp,
4119  ]
4120}
4121
4122if (enable_nocompile_tests_new) {
4123  nocompile_source_set("base_nocompile_tests_new") {
4124    sources = [
4125      "allocator/partition_allocator/src/partition_alloc/partition_alloc_base/thread_annotations_pa_nocompile.nc",
4126      "allocator/partition_allocator/src/partition_alloc/pointers/raw_ptr_nocompile.nc",
4127      "allocator/partition_allocator/src/partition_alloc/pointers/raw_ref_nocompile.nc",
4128      "callback_list_nocompile.nc",
4129      "containers/buffer_iterator_nocompile.nc",
4130      "containers/checked_iterators_nocompile.nc",
4131      "containers/contains_nocompile.nc",
4132      "containers/enum_set_nocompile.nc",
4133      "containers/span_nocompile.nc",
4134      "debug/crash_logging_nocompile.nc",
4135      "memory/ref_counted_nocompile.nc",
4136      "memory/weak_ptr_nocompile.nc",
4137      "metrics/field_trial_params_nocompile.nc",
4138      "metrics/histogram_nocompile.nc",
4139      "no_destructor_nocompile.nc",
4140      "observer_list_nocompile.nc",
4141      "sequence_checker_nocompile.nc",
4142      "strings/string_piece_nocompile.nc",
4143      "strings/stringprintf_nocompile.nc",
4144      "task/bind_post_task_nocompile.nc",
4145      "task/task_traits_nocompile.nc",
4146      "thread_annotations_nocompile.nc",
4147      "traits_bag_nocompile.nc",
4148      "types/pass_key_nocompile.nc",
4149      "types/variant_util_nocompile.nc",
4150      "values_nocompile.nc",
4151    ]
4152    deps = [ ":base" ]
4153  }
4154}
4155
4156if (enable_nocompile_tests) {
4157  nocompile_test("base_nocompile_tests") {
4158    sources = [
4159      "functional/bind_nocompile.nc",
4160      "functional/callback_nocompile.nc",
4161      "functional/function_ref_nocompile.nc",
4162      "functional/overloaded_nocompile.nc",
4163    ]
4164
4165    deps = [
4166      ":base",
4167      "//base/test:run_all_unittests",
4168      "//testing/gtest",
4169    ]
4170
4171    # Since the nocompile test is not able to inspect the contents of
4172    # include_dirs, we need to specify the Abseil and PartitionAlloc include dir
4173    # manually.
4174    include_dirs = [
4175      "${root_gen_dir}/base/allocator/partition_allocator/src",
4176      "//base/allocator/partition_allocator/src",
4177      "//third_party/abseil-cpp",
4178    ]
4179  }
4180}
4181
4182if (is_android || is_robolectric) {
4183  generate_jni("base_jni") {
4184    sources = [
4185      "android/java/src/org/chromium/base/ApkAssets.java",
4186      "android/java/src/org/chromium/base/ApplicationStatus.java",
4187      "android/java/src/org/chromium/base/BaseFeatureMap.java",
4188      "android/java/src/org/chromium/base/BuildInfo.java",
4189      "android/java/src/org/chromium/base/BundleUtils.java",
4190      "android/java/src/org/chromium/base/Callback.java",
4191      "android/java/src/org/chromium/base/CommandLine.java",
4192      "android/java/src/org/chromium/base/ContentUriUtils.java",
4193      "android/java/src/org/chromium/base/CpuFeatures.java",
4194      "android/java/src/org/chromium/base/EarlyTraceEvent.java",
4195      "android/java/src/org/chromium/base/EventLog.java",
4196      "android/java/src/org/chromium/base/FeatureList.java",
4197      "android/java/src/org/chromium/base/FeatureMap.java",
4198      "android/java/src/org/chromium/base/Features.java",
4199      "android/java/src/org/chromium/base/FieldTrialList.java",
4200      "android/java/src/org/chromium/base/FileUtils.java",
4201      "android/java/src/org/chromium/base/ImportantFileWriterAndroid.java",
4202      "android/java/src/org/chromium/base/IntStringCallback.java",
4203      "android/java/src/org/chromium/base/JNIUtils.java",
4204      "android/java/src/org/chromium/base/JavaExceptionReporter.java",
4205      "android/java/src/org/chromium/base/JavaHandlerThread.java",
4206      "android/java/src/org/chromium/base/JniAndroid.java",
4207      "android/java/src/org/chromium/base/LocaleUtils.java",
4208      "android/java/src/org/chromium/base/MemoryPressureListener.java",
4209      "android/java/src/org/chromium/base/PathService.java",
4210      "android/java/src/org/chromium/base/PathUtils.java",
4211      "android/java/src/org/chromium/base/PowerMonitor.java",
4212      "android/java/src/org/chromium/base/RadioUtils.java",
4213      "android/java/src/org/chromium/base/SysUtils.java",
4214      "android/java/src/org/chromium/base/ThreadUtils.java",
4215      "android/java/src/org/chromium/base/TimezoneUtils.java",
4216      "android/java/src/org/chromium/base/TraceEvent.java",
4217      "android/java/src/org/chromium/base/UnguessableToken.java",
4218      "android/java/src/org/chromium/base/jank_tracker/JankMetricUMARecorder.java",
4219      "android/java/src/org/chromium/base/library_loader/LibraryLoader.java",
4220      "android/java/src/org/chromium/base/library_loader/LibraryPrefetcher.java",
4221      "android/java/src/org/chromium/base/memory/JavaHeapDumpGenerator.java",
4222      "android/java/src/org/chromium/base/memory/MemoryInfoBridge.java",
4223      "android/java/src/org/chromium/base/metrics/NativeUmaRecorder.java",
4224      "android/java/src/org/chromium/base/metrics/StatisticsRecorderAndroid.java",
4225      "android/java/src/org/chromium/base/task/PostTask.java",
4226      "android/java/src/org/chromium/base/task/TaskRunnerImpl.java",
4227    ]
4228
4229    if (use_clang_profiling) {
4230      sources += [
4231        "test/android/javatests/src/org/chromium/base/test/ClangProfiler.java",
4232      ]
4233    }
4234
4235    public_deps = [
4236      ":android_runtime_jni_headers",
4237      ":android_runtime_unchecked_jni_headers",
4238    ]
4239  }
4240
4241  generate_jar_jni("android_runtime_jni_headers") {
4242    classes = [
4243      "java/lang/Runtime.class",
4244      "java/lang/Throwable.class",
4245    ]
4246  }
4247
4248  generate_jar_jni("android_runtime_unchecked_jni_headers") {
4249    classes = [ "java/lang/Runnable.class" ]
4250    unchecked_exceptions = true
4251  }
4252
4253  generate_jni("process_launcher_jni") {
4254    sources = [ "android/java/src/org/chromium/base/process_launcher/ChildProcessService.java" ]
4255  }
4256
4257  generate_jni("base_shared_preferences_jni") {
4258    sources = [ "android/java/src/org/chromium/base/shared_preferences/SharedPreferencesManager.java" ]
4259  }
4260}  # is_android || is_robolectric
4261
4262if (is_android) {
4263  java_cpp_features("java_features_srcjar") {
4264    # External code should depend on ":base_java" instead.
4265    visibility = [ ":*" ]
4266    sources = [
4267      "allocator/partition_alloc_features.cc",
4268      "android/base_features.cc",
4269      "features.cc",
4270      "task/task_features.cc",
4271    ]
4272    template = "android/java/src/org/chromium/base/BaseFeatures.java.tmpl"
4273  }
4274
4275  java_cpp_strings("java_switches_srcjar") {
4276    # External code should depend on ":base_java" instead.
4277    visibility = [ ":*" ]
4278    sources = [ "base_switches.cc" ]
4279    template = "android/java/src/org/chromium/base/BaseSwitches.java.tmpl"
4280  }
4281
4282  android_library("process_launcher_java") {
4283    srcjar_deps = [
4284      ":process_launcher_aidl",
4285      ":process_launcher_jni",
4286    ]
4287    deps = [
4288      ":base_java",
4289      "//build/android:build_java",
4290      "//third_party/android_deps:com_google_code_findbugs_jsr305_java",
4291      "//third_party/androidx:androidx_annotation_annotation_experimental_java",
4292      "//third_party/androidx:androidx_annotation_annotation_java",
4293      "//third_party/androidx:androidx_collection_collection_java",
4294      "//third_party/androidx:androidx_core_core_java",
4295      "//third_party/jni_zero:jni_zero_java",
4296    ]
4297    sources = [
4298      "android/java/src/org/chromium/base/process_launcher/BindService.java",
4299      "android/java/src/org/chromium/base/process_launcher/ChildConnectionAllocator.java",
4300      "android/java/src/org/chromium/base/process_launcher/ChildProcessConnection.java",
4301      "android/java/src/org/chromium/base/process_launcher/ChildProcessConstants.java",
4302      "android/java/src/org/chromium/base/process_launcher/ChildProcessLauncher.java",
4303      "android/java/src/org/chromium/base/process_launcher/ChildProcessService.java",
4304      "android/java/src/org/chromium/base/process_launcher/ChildProcessServiceDelegate.java",
4305      "android/java/src/org/chromium/base/process_launcher/ChildServiceConnection.java",
4306      "android/java/src/org/chromium/base/process_launcher/ChildServiceConnectionDelegate.java",
4307      "android/java/src/org/chromium/base/process_launcher/ChildServiceConnectionFactory.java",
4308      "android/java/src/org/chromium/base/process_launcher/ChildServiceConnectionImpl.java",
4309      "android/java/src/org/chromium/base/process_launcher/FileDescriptorInfo.java",
4310    ]
4311  }
4312
4313  android_library("base_java") {
4314    srcjar_deps = [
4315      ":base_android_java_enums_srcjar",
4316      ":base_jni",
4317      ":java_features_srcjar",
4318      ":java_switches_srcjar",
4319    ]
4320
4321    deps = [
4322      "//build/android:build_java",
4323      "//third_party/android_deps:com_google_code_findbugs_jsr305_java",
4324      "//third_party/android_deps:com_google_errorprone_error_prone_annotations_java",
4325      "//third_party/android_deps:guava_android_java",
4326      "//third_party/androidx:androidx_annotation_annotation_experimental_java",
4327      "//third_party/androidx:androidx_annotation_annotation_java",
4328      "//third_party/jni_zero:jni_zero_java",
4329    ]
4330
4331    sources = [
4332      "android/java/src/org/chromium/base/ActivityState.java",
4333      "android/java/src/org/chromium/base/ApiCompatibilityUtils.java",
4334      "android/java/src/org/chromium/base/ApkAssets.java",
4335      "android/java/src/org/chromium/base/ApplicationStatus.java",
4336      "android/java/src/org/chromium/base/BaseFeatureMap.java",
4337      "android/java/src/org/chromium/base/BuildInfo.java",
4338      "android/java/src/org/chromium/base/BundleUtils.java",
4339      "android/java/src/org/chromium/base/Callback.java",
4340      "android/java/src/org/chromium/base/CallbackController.java",
4341      "android/java/src/org/chromium/base/CollectionUtil.java",
4342      "android/java/src/org/chromium/base/CommandLine.java",
4343      "android/java/src/org/chromium/base/CommandLineInitUtil.java",
4344      "android/java/src/org/chromium/base/ContentUriUtils.java",
4345      "android/java/src/org/chromium/base/ContextUtils.java",
4346      "android/java/src/org/chromium/base/CpuFeatures.java",
4347      "android/java/src/org/chromium/base/DiscardableReferencePool.java",
4348      "android/java/src/org/chromium/base/EarlyTraceEvent.java",
4349      "android/java/src/org/chromium/base/EventLog.java",
4350      "android/java/src/org/chromium/base/FeatureList.java",
4351      "android/java/src/org/chromium/base/FeatureMap.java",
4352      "android/java/src/org/chromium/base/Features.java",
4353      "android/java/src/org/chromium/base/FieldTrialList.java",
4354      "android/java/src/org/chromium/base/FileUtils.java",
4355      "android/java/src/org/chromium/base/Flag.java",
4356      "android/java/src/org/chromium/base/ImportantFileWriterAndroid.java",
4357      "android/java/src/org/chromium/base/IntStringCallback.java",
4358      "android/java/src/org/chromium/base/IntentUtils.java",
4359      "android/java/src/org/chromium/base/JNIUtils.java",
4360      "android/java/src/org/chromium/base/JavaExceptionReporter.java",
4361      "android/java/src/org/chromium/base/JavaHandlerThread.java",
4362      "android/java/src/org/chromium/base/JniAndroid.java",
4363      "android/java/src/org/chromium/base/LifetimeAssert.java",
4364      "android/java/src/org/chromium/base/LocaleUtils.java",
4365      "android/java/src/org/chromium/base/Log.java",
4366      "android/java/src/org/chromium/base/MathUtils.java",
4367      "android/java/src/org/chromium/base/MemoryPressureListener.java",
4368      "android/java/src/org/chromium/base/MutableFlagWithSafeDefault.java",
4369      "android/java/src/org/chromium/base/ObserverList.java",
4370      "android/java/src/org/chromium/base/PackageManagerUtils.java",
4371      "android/java/src/org/chromium/base/PackageUtils.java",
4372      "android/java/src/org/chromium/base/PathService.java",
4373      "android/java/src/org/chromium/base/PathUtils.java",
4374      "android/java/src/org/chromium/base/PiiElider.java",
4375      "android/java/src/org/chromium/base/PowerMonitor.java",
4376      "android/java/src/org/chromium/base/PowerMonitorForQ.java",
4377      "android/java/src/org/chromium/base/Promise.java",
4378      "android/java/src/org/chromium/base/RadioUtils.java",
4379      "android/java/src/org/chromium/base/RequiredCallback.java",
4380      "android/java/src/org/chromium/base/ResettersForTesting.java",
4381      "android/java/src/org/chromium/base/StreamUtil.java",
4382      "android/java/src/org/chromium/base/StrictModeContext.java",
4383      "android/java/src/org/chromium/base/SysUtils.java",
4384      "android/java/src/org/chromium/base/ThreadUtils.java",
4385      "android/java/src/org/chromium/base/TimeUtils.java",
4386      "android/java/src/org/chromium/base/TimezoneUtils.java",
4387      "android/java/src/org/chromium/base/TraceEvent.java",
4388      "android/java/src/org/chromium/base/UnguessableToken.java",
4389      "android/java/src/org/chromium/base/UnownedUserData.java",
4390      "android/java/src/org/chromium/base/UnownedUserDataHost.java",
4391      "android/java/src/org/chromium/base/UnownedUserDataKey.java",
4392      "android/java/src/org/chromium/base/UserData.java",
4393      "android/java/src/org/chromium/base/UserDataHost.java",
4394      "android/java/src/org/chromium/base/WrappedClassLoader.java",
4395      "android/java/src/org/chromium/base/compat/ApiHelperForM.java",
4396      "android/java/src/org/chromium/base/compat/ApiHelperForN.java",
4397      "android/java/src/org/chromium/base/compat/ApiHelperForO.java",
4398      "android/java/src/org/chromium/base/compat/ApiHelperForOMR1.java",
4399      "android/java/src/org/chromium/base/compat/ApiHelperForP.java",
4400      "android/java/src/org/chromium/base/compat/ApiHelperForQ.java",
4401      "android/java/src/org/chromium/base/compat/ApiHelperForR.java",
4402      "android/java/src/org/chromium/base/compat/ApiHelperForS.java",
4403      "android/java/src/org/chromium/base/jank_tracker/FrameMetricsListener.java",
4404      "android/java/src/org/chromium/base/jank_tracker/FrameMetricsStore.java",
4405      "android/java/src/org/chromium/base/jank_tracker/JankActivityTracker.java",
4406      "android/java/src/org/chromium/base/jank_tracker/JankEndScenarioTime.java",
4407      "android/java/src/org/chromium/base/jank_tracker/JankMetricUMARecorder.java",
4408      "android/java/src/org/chromium/base/jank_tracker/JankMetrics.java",
4409      "android/java/src/org/chromium/base/jank_tracker/JankReportingRunnable.java",
4410      "android/java/src/org/chromium/base/jank_tracker/JankReportingScheduler.java",
4411      "android/java/src/org/chromium/base/jank_tracker/JankScenario.java",
4412      "android/java/src/org/chromium/base/jank_tracker/JankTracker.java",
4413      "android/java/src/org/chromium/base/jank_tracker/JankTrackerImpl.java",
4414      "android/java/src/org/chromium/base/jank_tracker/JankTrackerStateController.java",
4415      "android/java/src/org/chromium/base/jank_tracker/PlaceholderJankTracker.java",
4416      "android/java/src/org/chromium/base/library_loader/LibraryLoader.java",
4417      "android/java/src/org/chromium/base/library_loader/LibraryPrefetcher.java",
4418      "android/java/src/org/chromium/base/library_loader/Linker.java",
4419      "android/java/src/org/chromium/base/library_loader/LinkerJni.java",
4420      "android/java/src/org/chromium/base/library_loader/LoaderErrors.java",
4421      "android/java/src/org/chromium/base/library_loader/NativeLibraryPreloader.java",
4422      "android/java/src/org/chromium/base/library_loader/ProcessInitException.java",
4423      "android/java/src/org/chromium/base/lifetime/DestroyChecker.java",
4424      "android/java/src/org/chromium/base/lifetime/Destroyable.java",
4425      "android/java/src/org/chromium/base/memory/JavaHeapDumpGenerator.java",
4426      "android/java/src/org/chromium/base/memory/MemoryInfoBridge.java",
4427      "android/java/src/org/chromium/base/memory/MemoryPressureCallback.java",
4428      "android/java/src/org/chromium/base/memory/MemoryPressureMonitor.java",
4429      "android/java/src/org/chromium/base/memory/MemoryPressureUma.java",
4430      "android/java/src/org/chromium/base/memory/MemoryPurgeManager.java",
4431      "android/java/src/org/chromium/base/metrics/CachingUmaRecorder.java",
4432      "android/java/src/org/chromium/base/metrics/HistogramBucket.java",
4433      "android/java/src/org/chromium/base/metrics/NativeUmaRecorder.java",
4434      "android/java/src/org/chromium/base/metrics/NoopUmaRecorder.java",
4435      "android/java/src/org/chromium/base/metrics/RecordHistogram.java",
4436      "android/java/src/org/chromium/base/metrics/RecordUserAction.java",
4437      "android/java/src/org/chromium/base/metrics/ScopedSysTraceEvent.java",
4438      "android/java/src/org/chromium/base/metrics/StatisticsRecorderAndroid.java",
4439      "android/java/src/org/chromium/base/metrics/TimingMetric.java",
4440      "android/java/src/org/chromium/base/metrics/UmaRecorder.java",
4441      "android/java/src/org/chromium/base/metrics/UmaRecorderHolder.java",
4442      "android/java/src/org/chromium/base/supplier/DestroyableObservableSupplier.java",
4443      "android/java/src/org/chromium/base/supplier/LazyOneshotSupplier.java",
4444      "android/java/src/org/chromium/base/supplier/LazyOneshotSupplierImpl.java",
4445      "android/java/src/org/chromium/base/supplier/ObservableSupplier.java",
4446      "android/java/src/org/chromium/base/supplier/ObservableSupplierImpl.java",
4447      "android/java/src/org/chromium/base/supplier/OneShotCallback.java",
4448      "android/java/src/org/chromium/base/supplier/OneshotSupplier.java",
4449      "android/java/src/org/chromium/base/supplier/OneshotSupplierImpl.java",
4450      "android/java/src/org/chromium/base/supplier/Supplier.java",
4451      "android/java/src/org/chromium/base/supplier/SupplierUtils.java",
4452      "android/java/src/org/chromium/base/supplier/SyncOneshotSupplier.java",
4453      "android/java/src/org/chromium/base/supplier/SyncOneshotSupplierImpl.java",
4454      "android/java/src/org/chromium/base/supplier/TransitiveObservableSupplier.java",
4455      "android/java/src/org/chromium/base/supplier/UnownedUserDataSupplier.java",
4456      "android/java/src/org/chromium/base/task/AsyncTask.java",
4457      "android/java/src/org/chromium/base/task/BackgroundOnlyAsyncTask.java",
4458      "android/java/src/org/chromium/base/task/ChainedTasks.java",
4459      "android/java/src/org/chromium/base/task/ChromeThreadPoolExecutor.java",
4460      "android/java/src/org/chromium/base/task/PostTask.java",
4461      "android/java/src/org/chromium/base/task/SequencedTaskRunner.java",
4462      "android/java/src/org/chromium/base/task/SequencedTaskRunnerImpl.java",
4463      "android/java/src/org/chromium/base/task/SerialExecutor.java",
4464      "android/java/src/org/chromium/base/task/SingleThreadTaskRunner.java",
4465      "android/java/src/org/chromium/base/task/SingleThreadTaskRunnerImpl.java",
4466      "android/java/src/org/chromium/base/task/TaskExecutor.java",
4467      "android/java/src/org/chromium/base/task/TaskRunner.java",
4468      "android/java/src/org/chromium/base/task/TaskRunnerImpl.java",
4469      "android/java/src/org/chromium/base/task/ThreadPoolTaskExecutor.java",
4470      "android/java/src/org/chromium/base/task/UiThreadTaskExecutor.java",
4471    ]
4472
4473    if (use_clang_profiling) {
4474      sources += [
4475        "test/android/javatests/src/org/chromium/base/test/ClangProfiler.java",
4476      ]
4477    } else {
4478      sources += [ "test/android/javatests/src/stub/org/chromium/base/test/ClangProfiler.java" ]
4479    }
4480
4481    resources_package = "org.chromium.base"
4482
4483    proguard_configs = [ "android/proguard/chromium_code.flags" ]
4484    if (!is_cronet_build) {
4485      proguard_configs += [
4486        "android/proguard/chromium_apk.flags",
4487        "android/proguard/remove_logging.flags",
4488      ]
4489    }
4490  }
4491
4492  android_library("base_shared_preferences_java") {
4493    deps = [
4494      ":base_java",
4495      "//build/android:build_java",
4496      "//third_party/android_deps:guava_android_java",
4497      "//third_party/androidx:androidx_annotation_annotation_java",
4498      "//third_party/jni_zero:jni_zero_java",
4499    ]
4500
4501    sources = [
4502      "android/java/src/org/chromium/base/shared_preferences/KeyPrefix.java",
4503      "android/java/src/org/chromium/base/shared_preferences/KnownPreferenceKeyRegistries.java",
4504      "android/java/src/org/chromium/base/shared_preferences/NoOpPreferenceKeyChecker.java",
4505      "android/java/src/org/chromium/base/shared_preferences/PreferenceKeyChecker.java",
4506      "android/java/src/org/chromium/base/shared_preferences/PreferenceKeyRegistry.java",
4507      "android/java/src/org/chromium/base/shared_preferences/SharedPreferencesManager.java",
4508      "android/java/src/org/chromium/base/shared_preferences/StrictPreferenceKeyChecker.java",
4509    ]
4510  }
4511
4512  android_aidl("process_launcher_aidl") {
4513    import_include = [ "android/java/src" ]
4514    sources = [
4515      "android/java/src/org/chromium/base/process_launcher/IChildProcessService.aidl",
4516      "android/java/src/org/chromium/base/process_launcher/IParentProcess.aidl",
4517    ]
4518  }
4519
4520  android_library("base_javatests") {
4521    testonly = true
4522
4523    deps = [
4524      ":base_java",
4525      ":base_java_test_support",
4526      ":base_java_test_support_uncommon",
4527      "//base/test:test_support_java",
4528      "//build/android:build_java",
4529      "//third_party/androidx:androidx_annotation_annotation_java",
4530      "//third_party/androidx:androidx_test_monitor_java",
4531      "//third_party/androidx:androidx_test_runner_java",
4532      "//third_party/hamcrest:hamcrest_java",
4533      "//third_party/jni_zero:jni_zero_java",
4534      "//third_party/junit:junit",
4535      "//third_party/mockito:mockito_java",
4536    ]
4537
4538    sources = [
4539      # AssertsTest doesn't really belong in //base but it's preferable to
4540      # stick it here than create another target for a single test.
4541      "android/javatests/src/org/chromium/base/AdvancedMockContextTest.java",
4542      "android/javatests/src/org/chromium/base/AssertsTest.java",
4543      "android/javatests/src/org/chromium/base/CommandLineFlagsTest.java",
4544      "android/javatests/src/org/chromium/base/CommandLineInitUtilTest.java",
4545      "android/javatests/src/org/chromium/base/CommandLineTest.java",
4546      "android/javatests/src/org/chromium/base/EarlyTraceEventTest.java",
4547      "android/javatests/src/org/chromium/base/IntentUtilsTest.java",
4548      "android/javatests/src/org/chromium/base/LocaleUtilsTest.java",
4549      "android/javatests/src/org/chromium/base/ObserverListTest.java",
4550      "android/javatests/src/org/chromium/base/PackageUtilsTest.java",
4551      "android/javatests/src/org/chromium/base/StrictModeContextTest.java",
4552      "android/javatests/src/org/chromium/base/UserDataHostTest.java",
4553      "android/javatests/src/org/chromium/base/library_loader/EarlyNativeTest.java",
4554      "android/javatests/src/org/chromium/base/metrics/RecordHistogramTest.java",
4555      "android/javatests/src/org/chromium/base/task/AsyncTaskTest.java",
4556      "android/javatests/src/org/chromium/base/task/PostTaskTest.java",
4557      "android/javatests/src/org/chromium/base/task/SequencedTaskRunnerImplTest.java",
4558      "android/javatests/src/org/chromium/base/task/SingleThreadTaskRunnerImplTest.java",
4559      "android/javatests/src/org/chromium/base/task/TaskRunnerImplTest.java",
4560      "android/javatests/src/org/chromium/base/test/metrics/HistogramWatcherTestBase.java",
4561      "android/javatests/src/org/chromium/base/test/metrics/HistogramWatcherTransitionToNativeTest.java",
4562      "android/javatests/src/org/chromium/base/test/metrics/HistogramWatcherWithNativeTest.java",
4563      "android/javatests/src/org/chromium/base/test/metrics/HistogramWatcherWithoutNativeTest.java",
4564      "android/javatests/src/org/chromium/base/util/GarbageCollectionTestUtilsTest.java",
4565    ]
4566    srcjar_deps = [ ":base_javatests_jni" ]
4567  }
4568
4569  source_set("base_javatests_lib") {
4570    testonly = true
4571    deps = [
4572      ":base",
4573      ":base_javatests_jni",
4574    ]
4575    sources = [ "test/library_loader/early_native_test_helper.cc" ]
4576  }
4577
4578  generate_jni("base_javatests_jni") {
4579    testonly = true
4580    sources = [ "android/javatests/src/org/chromium/base/library_loader/EarlyNativeTest.java" ]
4581  }
4582
4583  android_library("base_java_url_utils_for_test") {
4584    testonly = true
4585    sources = [
4586      "test/android/javatests/src/org/chromium/base/test/util/UrlUtils.java",
4587    ]
4588
4589    deps = [
4590      ":base_java",
4591      "//build/android:build_java",
4592      "//third_party/androidx:androidx_annotation_annotation_java",
4593      "//third_party/jni_zero:jni_zero_java",
4594      "//third_party/junit:junit",
4595    ]
4596  }
4597
4598  android_library("base_java_test_support") {
4599    testonly = true
4600
4601    deps = [
4602      ":base_java",
4603      "//build/android:build_java",
4604      "//third_party/accessibility_test_framework:accessibility_test_framework_java",
4605      "//third_party/android_deps:espresso_java",
4606      "//third_party/android_deps:guava_android_java",
4607      "//third_party/android_sdk:android_test_base_java",
4608      "//third_party/android_sdk:android_test_mock_java",
4609      "//third_party/androidx:androidx_annotation_annotation_java",
4610      "//third_party/androidx:androidx_core_core_java",
4611      "//third_party/androidx:androidx_multidex_multidex_java",
4612      "//third_party/androidx:androidx_test_monitor_java",
4613      "//third_party/androidx:androidx_test_runner_java",
4614      "//third_party/androidx:androidx_test_uiautomator_uiautomator_java",
4615      "//third_party/hamcrest:hamcrest_java",
4616      "//third_party/jni_zero:jni_zero_java",
4617      "//third_party/junit",
4618    ]
4619
4620    public_deps = [ ":base_java_url_utils_for_test" ]
4621
4622    sources = [
4623      "test/android/java/src/org/chromium/base/multidex/ChromiumMultiDexInstaller.java",
4624      "test/android/javatests/src/org/chromium/base/test/BaseActivityTestRule.java",
4625      "test/android/javatests/src/org/chromium/base/test/BaseChromiumAndroidJUnitRunner.java",
4626      "test/android/javatests/src/org/chromium/base/test/BaseJUnit4ClassRunner.java",
4627      "test/android/javatests/src/org/chromium/base/test/BaseJUnit4TestRule.java",
4628      "test/android/javatests/src/org/chromium/base/test/LoadNative.java",
4629      "test/android/javatests/src/org/chromium/base/test/MockitoErrorHandler.java",
4630      "test/android/javatests/src/org/chromium/base/test/ResetCachedFlagValuesTestHook.java",
4631      "test/android/javatests/src/org/chromium/base/test/ResettersForTestingTestRule.java",
4632      "test/android/javatests/src/org/chromium/base/test/ScreenshotOnFailureStatement.java",
4633      "test/android/javatests/src/org/chromium/base/test/TestListInstrumentationRunListener.java",
4634      "test/android/javatests/src/org/chromium/base/test/TestTraceEvent.java",
4635      "test/android/javatests/src/org/chromium/base/test/UiThreadStatement.java",
4636      "test/android/javatests/src/org/chromium/base/test/UiThreadTest.java",
4637      "test/android/javatests/src/org/chromium/base/test/UnitTestLifetimeAssertRule.java",
4638      "test/android/javatests/src/org/chromium/base/test/UnitTestNoBrowserProcessHook.java",
4639      "test/android/javatests/src/org/chromium/base/test/params/BaseJUnit4RunnerDelegate.java",
4640      "test/android/javatests/src/org/chromium/base/test/params/BlockJUnit4RunnerDelegate.java",
4641      "test/android/javatests/src/org/chromium/base/test/params/MethodParamAnnotationRule.java",
4642      "test/android/javatests/src/org/chromium/base/test/params/MethodParamRule.java",
4643      "test/android/javatests/src/org/chromium/base/test/params/ParameterAnnotations.java",
4644      "test/android/javatests/src/org/chromium/base/test/params/ParameterProvider.java",
4645      "test/android/javatests/src/org/chromium/base/test/params/ParameterSet.java",
4646      "test/android/javatests/src/org/chromium/base/test/params/ParameterizedCommandLineFlags.java",
4647      "test/android/javatests/src/org/chromium/base/test/params/ParameterizedFrameworkMethod.java",
4648      "test/android/javatests/src/org/chromium/base/test/params/ParameterizedRunner.java",
4649      "test/android/javatests/src/org/chromium/base/test/params/ParameterizedRunnerDelegate.java",
4650      "test/android/javatests/src/org/chromium/base/test/params/ParameterizedRunnerDelegateCommon.java",
4651      "test/android/javatests/src/org/chromium/base/test/params/ParameterizedRunnerDelegateFactory.java",
4652      "test/android/javatests/src/org/chromium/base/test/params/SkipCommandLineParameterization.java",
4653      "test/android/javatests/src/org/chromium/base/test/util/AdvancedMockContext.java",
4654      "test/android/javatests/src/org/chromium/base/test/util/AndroidSdkLevelSkipCheck.java",
4655      "test/android/javatests/src/org/chromium/base/test/util/AnnotationProcessingUtils.java",
4656      "test/android/javatests/src/org/chromium/base/test/util/AnnotationRule.java",
4657      "test/android/javatests/src/org/chromium/base/test/util/ApplicationContextWrapper.java",
4658      "test/android/javatests/src/org/chromium/base/test/util/ApplicationTestUtils.java",
4659      "test/android/javatests/src/org/chromium/base/test/util/Batch.java",
4660      "test/android/javatests/src/org/chromium/base/test/util/CallbackHelper.java",
4661      "test/android/javatests/src/org/chromium/base/test/util/CommandLineFlags.java",
4662      "test/android/javatests/src/org/chromium/base/test/util/Criteria.java",
4663      "test/android/javatests/src/org/chromium/base/test/util/CriteriaHelper.java",
4664      "test/android/javatests/src/org/chromium/base/test/util/CriteriaNotSatisfiedException.java",
4665      "test/android/javatests/src/org/chromium/base/test/util/DisableIf.java",
4666      "test/android/javatests/src/org/chromium/base/test/util/DisableIfSkipCheck.java",
4667      "test/android/javatests/src/org/chromium/base/test/util/DisabledTest.java",
4668      "test/android/javatests/src/org/chromium/base/test/util/DoNotBatch.java",
4669      "test/android/javatests/src/org/chromium/base/test/util/DoNotRevive.java",
4670      "test/android/javatests/src/org/chromium/base/test/util/DumpThreadsOnFailureRule.java",
4671      "test/android/javatests/src/org/chromium/base/test/util/EnormousTest.java",
4672      "test/android/javatests/src/org/chromium/base/test/util/EspressoIdleTimeoutRule.java",
4673      "test/android/javatests/src/org/chromium/base/test/util/Feature.java",
4674      "test/android/javatests/src/org/chromium/base/test/util/Features.java",
4675      "test/android/javatests/src/org/chromium/base/test/util/FeaturesBase.java",
4676      "test/android/javatests/src/org/chromium/base/test/util/HistogramWatcher.java",
4677      "test/android/javatests/src/org/chromium/base/test/util/InMemorySharedPreferences.java",
4678      "test/android/javatests/src/org/chromium/base/test/util/InMemorySharedPreferencesContext.java",
4679      "test/android/javatests/src/org/chromium/base/test/util/IntegrationTest.java",
4680      "test/android/javatests/src/org/chromium/base/test/util/JniMocker.java",
4681      "test/android/javatests/src/org/chromium/base/test/util/LooperUtils.java",
4682      "test/android/javatests/src/org/chromium/base/test/util/Manual.java",
4683      "test/android/javatests/src/org/chromium/base/test/util/MaxAndroidSdkLevel.java",
4684      "test/android/javatests/src/org/chromium/base/test/util/MinAndroidSdkLevel.java",
4685      "test/android/javatests/src/org/chromium/base/test/util/PackageManagerWrapper.java",
4686      "test/android/javatests/src/org/chromium/base/test/util/PayloadCallbackHelper.java",
4687      "test/android/javatests/src/org/chromium/base/test/util/RequiresRestart.java",
4688      "test/android/javatests/src/org/chromium/base/test/util/Restriction.java",
4689      "test/android/javatests/src/org/chromium/base/test/util/RestrictionSkipCheck.java",
4690      "test/android/javatests/src/org/chromium/base/test/util/ScalableTimeout.java",
4691      "test/android/javatests/src/org/chromium/base/test/util/SkipCheck.java",
4692      "test/android/javatests/src/org/chromium/base/test/util/TestFileUtil.java",
4693      "test/android/javatests/src/org/chromium/base/test/util/TestThreadUtils.java",
4694      "test/android/javatests/src/org/chromium/base/test/util/TimeoutScale.java",
4695      "test/android/javatests/src/org/chromium/base/test/util/TimeoutTimer.java",
4696      "test/android/javatests/src/org/chromium/base/test/util/UserActionTester.java",
4697    ]
4698  }
4699
4700  generate_jni("base_java_test_support_uncommon_jni") {
4701    testonly = true
4702    sources = [
4703      "test/android/javatests/src/org/chromium/base/test/ReachedCodeProfiler.java",
4704      "test/android/javatests/src/org/chromium/base/test/task/ThreadPoolTestHelpers.java",
4705    ]
4706  }
4707
4708  android_library("base_java_test_support_uncommon") {
4709    testonly = true
4710
4711    deps = [
4712      "//base:base_java",
4713      "//third_party/androidx:androidx_annotation_annotation_java",
4714      "//third_party/androidx:androidx_test_monitor_java",
4715      "//third_party/hamcrest:hamcrest_java",
4716      "//third_party/jni_zero:jni_zero_java",
4717      "//third_party/junit:junit",
4718    ]
4719
4720    srcjar_deps = [ ":base_java_test_support_uncommon_jni" ]
4721    sources = [
4722      "test/android/javatests/src/org/chromium/base/FakeTimeTestRule.java",
4723      "test/android/javatests/src/org/chromium/base/test/BundleTestRule.java",
4724      "test/android/javatests/src/org/chromium/base/test/ReachedCodeProfiler.java",
4725      "test/android/javatests/src/org/chromium/base/test/SetUpStatement.java",
4726      "test/android/javatests/src/org/chromium/base/test/SetUpTestRule.java",
4727      "test/android/javatests/src/org/chromium/base/test/task/SchedulerTestHelpers.java",
4728      "test/android/javatests/src/org/chromium/base/test/task/ThreadPoolTestHelpers.java",
4729      "test/android/javatests/src/org/chromium/base/test/util/CloseableOnMainThread.java",
4730      "test/android/javatests/src/org/chromium/base/test/util/InstrumentationUtils.java",
4731      "test/android/javatests/src/org/chromium/base/test/util/Matchers.java",
4732    ]
4733  }
4734
4735  android_library("base_java_process_launcher_test_support") {
4736    testonly = true
4737
4738    public_deps = [ ":process_launcher_java" ]
4739
4740    sources = [ "test/android/javatests/src/org/chromium/base/process_launcher/TestChildProcessConnection.java" ]
4741  }
4742
4743  robolectric_library("base_junit_test_support") {
4744    sources = [
4745      "//third_party/robolectric/custom_asynctask/java/src/org/chromium/base/task/test/ShadowAsyncTask.java",
4746      "//third_party/robolectric/custom_asynctask/java/src/org/chromium/base/task/test/ShadowAsyncTaskBridge.java",
4747      "test/android/junit/src/org/chromium/base/task/test/BackgroundShadowAsyncTask.java",
4748      "test/android/junit/src/org/chromium/base/task/test/CustomShadowAsyncTask.java",
4749      "test/android/junit/src/org/chromium/base/task/test/PausedExecutorTestRule.java",
4750      "test/android/junit/src/org/chromium/base/task/test/ShadowPostTask.java",
4751      "test/android/junit/src/org/chromium/base/test/BaseRobolectricAndroidConfigurer.java",
4752      "test/android/junit/src/org/chromium/base/test/BaseRobolectricTestRule.java",
4753      "test/android/junit/src/org/chromium/base/test/BaseRobolectricTestRunner.java",
4754      "test/android/junit/src/org/chromium/base/test/ShadowBuildInfo.java",
4755      "test/android/junit/src/org/chromium/base/test/util/TestRunnerTestRule.java",
4756    ]
4757
4758    # Make sure robolectric tests have classes filtered out of base_java by
4759    # jar_excluded_patterns.
4760    srcjar_deps = [ "//build/android:native_libraries_gen" ]
4761
4762    annotation_processor_deps =
4763        [ "//third_party/android_deps:auto_service_processor" ]
4764    deps = [
4765      ":base_java",
4766      ":base_java_test_support",
4767      "//testing/android/junit:junit_test_support",
4768      "//third_party/android_deps:com_google_auto_service_auto_service_annotations_java",
4769      "//third_party/androidx:androidx_test_core_java",
4770      "//third_party/androidx:androidx_test_monitor_java",
4771      "//third_party/hamcrest:hamcrest_java",
4772      "//third_party/junit:junit",
4773    ]
4774  }
4775
4776  robolectric_binary("base_junit_tests") {
4777    sources = [
4778      "android/junit/src/org/chromium/base/ApplicationStatusTest.java",
4779      "android/junit/src/org/chromium/base/BuildInfoTest.java",
4780      "android/junit/src/org/chromium/base/CallbackControllerTest.java",
4781      "android/junit/src/org/chromium/base/CollectionUtilTest.java",
4782      "android/junit/src/org/chromium/base/CommandLineTest.java",
4783      "android/junit/src/org/chromium/base/DiscardableReferencePoolTest.java",
4784      "android/junit/src/org/chromium/base/FeatureListUnitTest.java",
4785      "android/junit/src/org/chromium/base/FileUtilsTest.java",
4786      "android/junit/src/org/chromium/base/LifetimeAssertTest.java",
4787      "android/junit/src/org/chromium/base/LogTest.java",
4788      "android/junit/src/org/chromium/base/MathUtilsTest.java",
4789      "android/junit/src/org/chromium/base/MutableFlagWithSafeDefaultUnitTest.java",
4790      "android/junit/src/org/chromium/base/PathUtilsTest.java",
4791      "android/junit/src/org/chromium/base/PiiEliderTest.java",
4792      "android/junit/src/org/chromium/base/PromiseTest.java",
4793      "android/junit/src/org/chromium/base/ResettersForTestingTest.java",
4794      "android/junit/src/org/chromium/base/TimeUtilsTest.java",
4795      "android/junit/src/org/chromium/base/TraceEventTest.java",
4796      "android/junit/src/org/chromium/base/UnownedUserDataHostTest.java",
4797      "android/junit/src/org/chromium/base/UnownedUserDataKeyTest.java",
4798      "android/junit/src/org/chromium/base/jank_tracker/FrameMetricsListenerTest.java",
4799      "android/junit/src/org/chromium/base/jank_tracker/FrameMetricsStoreTest.java",
4800      "android/junit/src/org/chromium/base/jank_tracker/JankActivityTrackerTest.java",
4801      "android/junit/src/org/chromium/base/jank_tracker/JankMetricUMARecorderTest.java",
4802      "android/junit/src/org/chromium/base/jank_tracker/JankReportingRunnableTest.java",
4803      "android/junit/src/org/chromium/base/jank_tracker/JankReportingSchedulerTest.java",
4804      "android/junit/src/org/chromium/base/library_loader/LinkerTest.java",
4805      "android/junit/src/org/chromium/base/memory/MemoryPressureMonitorTest.java",
4806      "android/junit/src/org/chromium/base/memory/MemoryPurgeManagerTest.java",
4807      "android/junit/src/org/chromium/base/metrics/CachingUmaRecorderTest.java",
4808      "android/junit/src/org/chromium/base/process_launcher/ChildConnectionAllocatorTest.java",
4809      "android/junit/src/org/chromium/base/process_launcher/ChildProcessConnectionTest.java",
4810      "android/junit/src/org/chromium/base/shared_preferences/KeyPrefixTest.java",
4811      "android/junit/src/org/chromium/base/shared_preferences/KnownPreferenceKeyRegistriesTest.java",
4812      "android/junit/src/org/chromium/base/shared_preferences/SharedPreferencesManagerTest.java",
4813      "android/junit/src/org/chromium/base/shared_preferences/StrictPreferenceKeyCheckerTest.java",
4814      "android/junit/src/org/chromium/base/supplier/LazyOneshotSupplierImplTest.java",
4815      "android/junit/src/org/chromium/base/supplier/LazyOneshotSupplierTest.java",
4816      "android/junit/src/org/chromium/base/supplier/ObservableSupplierImplTest.java",
4817      "android/junit/src/org/chromium/base/supplier/OneShotCallbackTest.java",
4818      "android/junit/src/org/chromium/base/supplier/OneshotSupplierImplTest.java",
4819      "android/junit/src/org/chromium/base/supplier/SupplierUtilsTest.java",
4820      "android/junit/src/org/chromium/base/supplier/SyncOneshotSupplierImplTest.java",
4821      "android/junit/src/org/chromium/base/supplier/TransitiveObservableSupplierTest.java",
4822      "android/junit/src/org/chromium/base/supplier/UnownedUserDataSupplierTest.java",
4823      "android/junit/src/org/chromium/base/task/AsyncTaskThreadTest.java",
4824      "android/junit/src/org/chromium/base/task/SequencedTaskRunnerTaskMigrationTest.java",
4825      "android/junit/src/org/chromium/base/util/GarbageCollectionTestUtilsUnitTest.java",
4826      "test/android/junit/src/org/chromium/base/test/SetUpStatementTest.java",
4827      "test/android/junit/src/org/chromium/base/test/TestListInstrumentationRunListenerTest.java",
4828      "test/android/junit/src/org/chromium/base/test/params/ExampleParameterizedTest.java",
4829      "test/android/junit/src/org/chromium/base/test/params/ParameterizedRunnerDelegateCommonTest.java",
4830      "test/android/junit/src/org/chromium/base/test/params/ParameterizedRunnerDelegateFactoryTest.java",
4831      "test/android/junit/src/org/chromium/base/test/params/ParameterizedRunnerTest.java",
4832      "test/android/junit/src/org/chromium/base/test/params/ParameterizedTestNameTest.java",
4833      "test/android/junit/src/org/chromium/base/test/util/AndroidSdkLevelSkipCheckTest.java",
4834      "test/android/junit/src/org/chromium/base/test/util/AnnotationProcessingUtilsTest.java",
4835      "test/android/junit/src/org/chromium/base/test/util/CommandLineFlagsNoClassAnnotationCheckTest.java",
4836      "test/android/junit/src/org/chromium/base/test/util/CommandLineFlagsWithClassAnnotationCheckTest.java",
4837      "test/android/junit/src/org/chromium/base/test/util/DisableIfTest.java",
4838      "test/android/junit/src/org/chromium/base/test/util/DisabledTestForClassRobolectricTest.java",
4839      "test/android/junit/src/org/chromium/base/test/util/DisabledTestRobolectricTest.java",
4840      "test/android/junit/src/org/chromium/base/test/util/RestrictionSkipCheckTest.java",
4841      "test/android/junit/src/org/chromium/base/test/util/SkipCheckTest.java",
4842    ]
4843    deps = [
4844      ":base_java",
4845      ":base_java_process_launcher_test_support",
4846      ":base_java_test_support",
4847      ":base_java_test_support_uncommon",
4848      ":base_junit_test_support",
4849      ":base_shared_preferences_java",
4850      "//base/test:test_support_java",
4851      "//third_party/android_deps:guava_android_java",
4852      "//third_party/androidx:androidx_annotation_annotation_java",
4853      "//third_party/androidx:androidx_test_core_java",
4854      "//third_party/androidx:androidx_test_runner_java",
4855      "//third_party/hamcrest:hamcrest_java",
4856      "//third_party/jni_zero:jni_zero_java",
4857    ]
4858  }
4859
4860  java_cpp_enum("base_android_java_enums_srcjar") {
4861    sources = [
4862      "android/application_status_listener.h",
4863      "android/child_process_binding_types.h",
4864      "android/library_loader/library_loader_hooks.h",
4865      "android/linker/linker_jni.h",
4866      "android/task_scheduler/task_runner_android.h",
4867      "android/task_scheduler/task_traits_android.h",
4868      "memory/memory_pressure_listener.h",
4869      "metrics/histogram_base.h",
4870      "task/task_traits.h",
4871    ]
4872    if (enable_base_tracing) {
4873      sources += [ "trace_event/trace_config.h" ]
4874    }
4875  }
4876
4877  generate_jni("base_profiler_test_support_jni") {
4878    testonly = true
4879    sources =
4880        [ "android/javatests/src/org/chromium/base/profiler/TestSupport.java" ]
4881  }
4882
4883  android_library("base_profiler_test_support_java") {
4884    testonly = true
4885    sources =
4886        [ "android/javatests/src/org/chromium/base/profiler/TestSupport.java" ]
4887    srcjar_deps = [ ":base_profiler_test_support_jni" ]
4888
4889    deps = [
4890      "//build/android:build_java",
4891      "//third_party/jni_zero:jni_zero_java",
4892    ]
4893  }
4894
4895  android_library("base_java_unittest_support") {
4896    testonly = true
4897
4898    deps = [
4899      ":base_java",
4900      "//third_party/jni_zero:jni_zero_java",
4901    ]
4902
4903    sources = [
4904      "test/android/java/src/org/chromium/base/ContentUriTestUtils.java",
4905      "test/android/java/src/org/chromium/base/JavaHandlerThreadHelpers.java",
4906    ]
4907  }
4908}  # is_android
4909
4910# Keep the list of fuzzer_tests in alphabetical order.
4911fuzzer_test("base64_decode_fuzzer") {
4912  sources = [ "base64_decode_fuzzer.cc" ]
4913  deps = [ "//base" ]
4914}
4915
4916fuzzer_test("base64_encode_fuzzer") {
4917  sources = [ "base64_encode_fuzzer.cc" ]
4918  deps = [ "//base" ]
4919}
4920
4921fuzzer_test("base64url_fuzzer") {
4922  sources = [ "base64url_fuzzer.cc" ]
4923  deps = [ "//base" ]
4924}
4925
4926fuzzer_test("base_json_correctness_fuzzer") {
4927  sources = [ "json/json_correctness_fuzzer.cc" ]
4928  deps = [ ":base" ]
4929  dict = "//testing/libfuzzer/fuzzers/dicts/json.dict"
4930}
4931
4932fuzzer_test("base_json_reader_fuzzer") {
4933  sources = [ "json/json_reader_fuzzer.cc" ]
4934  deps = [ "//base" ]
4935  dict = "//testing/libfuzzer/fuzzers/dicts/json.dict"
4936}
4937
4938fuzzer_test("base_json_string_escape_fuzzer") {
4939  sources = [ "json/string_escape_fuzzer.cc" ]
4940  deps = [ "//base" ]
4941}
4942
4943if (is_mac) {
4944  protoc_convert("base_mach_port_rendezvous_convert_corpus") {
4945    sources = [
4946      "test/data/mach_port_rendezvous_fuzz/dead_name.textproto",
4947      "test/data/mach_port_rendezvous_fuzz/send.textproto",
4948    ]
4949    inputs = [ "//testing/libfuzzer/fuzzers/mach/mach_message.proto" ]
4950    output_pattern = "$target_gen_dir/base_mach_port_rendezvous_corpus/{{source_name_part}}.binarypb"
4951    args = [
4952      "--encode=mach_fuzzer.MachMessage",
4953      "-I",
4954      rebase_path("//"),
4955      rebase_path(inputs[0]),
4956    ]
4957  }
4958  fuzzer_test("base_mach_port_rendezvous_fuzzer") {
4959    sources = [ "mac/mach_port_rendezvous_fuzzer.cc" ]
4960    deps = [
4961      "//base",
4962      "//testing/libfuzzer/fuzzers/mach:converter",
4963      "//third_party/libprotobuf-mutator",
4964    ]
4965    seed_corpus = "$target_gen_dir/base_mach_port_rendezvous_corpus"
4966    seed_corpus_deps = [ ":base_mach_port_rendezvous_convert_corpus" ]
4967  }
4968}
4969
4970fuzzer_test("command_line_fuzzer") {
4971  sources = [ "command_line_fuzzer.cc" ]
4972  deps = [ "//base" ]
4973}
4974
4975fuzzer_test("escape_fuzzer") {
4976  sources = [ "strings/escape_fuzzer.cc" ]
4977  deps = [ "//base" ]
4978}
4979
4980fuzzer_test("file_path_fuzzer") {
4981  sources = [ "files/file_path_fuzzer.cc" ]
4982  deps = [ "//base" ]
4983}
4984
4985if (is_linux || is_chromeos) {
4986  fuzzer_test("mime_util_xdg_fuzzer") {
4987    sources = [ "nix/mime_util_xdg_fuzzer.cc" ]
4988    deps = [ "//base" ]
4989  }
4990}
4991
4992fuzzer_test("string_number_conversions_fuzzer") {
4993  sources = [ "strings/string_number_conversions_fuzzer.cc" ]
4994  deps = [ "//base" ]
4995}
4996
4997fuzzer_test("string_pattern_fuzzer") {
4998  sources = [ "strings/pattern_fuzzer.cc" ]
4999  deps = [ "//base" ]
5000}
5001
5002fuzzer_test("string_tokenizer_fuzzer") {
5003  sources = [ "strings/string_tokenizer_fuzzer.cc" ]
5004  deps = [ "//base" ]
5005}
5006
5007fuzzer_test("substring_set_matcher_fuzzer") {
5008  sources = [ "substring_set_matcher/substring_set_matcher_fuzzer.cc" ]
5009  deps = [ "//base" ]
5010}
5011
5012fuzzer_test("sys_string_conversions_fuzzer") {
5013  sources = [ "strings/sys_string_conversions_fuzzer.cc" ]
5014  deps = [ "//base" ]
5015}
5016
5017fuzzer_test("time_delta_from_string_fuzzer") {
5018  sources = [ "time/time_delta_from_string_fuzzer.cc" ]
5019  deps = [ "//base" ]
5020}
5021
5022fuzzer_test("time_fuzzer") {
5023  sources = [ "time/time_fuzzer.cc" ]
5024  deps = [
5025    "//base",
5026    "//base/test:test_support",
5027  ]
5028}
5029
5030fuzzer_test("utf_string_conversions_fuzzer") {
5031  sources = [ "strings/utf_string_conversions_fuzzer.cc" ]
5032  deps = [ "//base" ]
5033}
5034
5035fuzzer_test("pickle_fuzzer") {
5036  sources = [ "pickle_fuzzer.cc" ]
5037  deps = [
5038    "//base",
5039    "//base/test:test_support",
5040  ]
5041}
5042
5043# TODO(1151236): Temporarily move test_support from
5044# //base/allocator/partition_allocator/src/partition_alloc/BUILD.gn to //base/BUILD.gn. After
5045# fixing partition_allocator tests issue, we will move test_support to
5046# //base/allocator/partition_allocator/src/partition_alloc/BUILD.gn again.
5047source_set("partition_alloc_test_support") {
5048  testonly = true
5049
5050  sources = [
5051    "allocator/partition_allocator/src/partition_alloc/extended_api.cc",
5052    "allocator/partition_allocator/src/partition_alloc/extended_api.h",
5053    "allocator/partition_allocator/src/partition_alloc/partition_alloc_base/threading/platform_thread_for_testing.h",
5054    "allocator/partition_allocator/src/partition_alloc/partition_alloc_for_testing.h",
5055    "allocator/partition_allocator/src/partition_alloc/pointers/raw_ptr_counting_impl_for_test.h",
5056  ]
5057  if (is_posix) {
5058    sources += [ "allocator/partition_allocator/src/partition_alloc/partition_alloc_base/threading/platform_thread_posix_for_testing.cc" ]
5059  }
5060  if (is_fuchsia) {
5061    sources += [
5062      "allocator/partition_allocator/src/partition_alloc/partition_alloc_base/threading/platform_thread_fuchsia_for_testing.cc",
5063      "allocator/partition_allocator/src/partition_alloc/partition_alloc_base/threading/platform_thread_posix_for_testing.cc",
5064    ]
5065  }
5066  if (is_win) {
5067    sources += [ "allocator/partition_allocator/src/partition_alloc/partition_alloc_base/threading/platform_thread_win_for_testing.cc" ]
5068  }
5069  if (is_apple) {
5070    sources += [ "allocator/partition_allocator/src/partition_alloc/partition_alloc_base/threading/platform_thread_apple_for_testing.mm" ]
5071  }
5072  if (is_linux || is_chromeos) {
5073    sources += [ "allocator/partition_allocator/src/partition_alloc/partition_alloc_base/threading/platform_thread_linux_for_testing.cc" ]
5074  }
5075  if (is_android) {
5076    sources += [ "allocator/partition_allocator/src/partition_alloc/partition_alloc_base/threading/platform_thread_android_for_testing.cc" ]
5077  }
5078  public_deps = [
5079    "allocator/partition_allocator:buildflags",
5080    "//build:branding_buildflags",
5081    "//build/config/compiler:compiler_buildflags",
5082  ]
5083  public_configs = []
5084  if (is_fuchsia) {
5085    public_deps += [
5086      "//third_party/fuchsia-sdk/sdk/pkg/fit",
5087      "//third_party/fuchsia-sdk/sdk/pkg/sync",
5088      "//third_party/fuchsia-sdk/sdk/pkg/zx",
5089    ]
5090
5091    # Needed for users of spinning_mutex.h, which for performance reasons,
5092    # contains inlined calls to `libsync` inside the header file.
5093    # It appends an entry to the "libs" section of the dependent target.
5094    public_configs += [ ":fuchsia_sync_lib" ]
5095  }
5096  deps = [ ":base" ]
5097
5098  if (!is_debug) {
5099    configs -= [ "//build/config/compiler:default_optimization" ]
5100    configs += [ "//build/config/compiler:optimize_speed" ]
5101  }
5102}
5103
5104if (enable_base_tracing) {
5105  # This group makes visible those targets in subdirectories that are not
5106  # explicitly depended on.
5107  group("gn_all") {
5108    testonly = true
5109    deps = [ "//base/tracing:perfetto_diff_tests" ]
5110  }
5111}
5112