node/deps/v8/BUILD.gn
Joyee Cheung fff9a8aa03
build,test: test array index hash collision
This enables v8_enable_seeded_array_index_hash and add a test for it.

deps: V8: backport 0a8b1cdcc8b2

Original commit message:

    implement rapidhash secret generation

    Bug: 409717082
    Change-Id: I471f33d66de32002f744aeba534c1d34f71e27d2
    Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/6733490
    Reviewed-by: Leszek Swirski <leszeks@chromium.org>
    Commit-Queue: snek <snek@chromium.org>
    Cr-Commit-Position: refs/heads/main@{#101499}

deps: V8: backport 185f0fe09b72

Original commit message:

    [numbers] Refactor HashSeed as a lightweight view over ByteArray

    Instead of copying the seed and secrets into a struct with value
    fields, HashSeed now stores a pointer pointing either into the
    read-only ByteArray, or the static default seed for off-heap
    HashSeed::Default() calls. The underlying storage is always
    8-byte aligned so we can cast it directly into a struct.

    Change-Id: I5896a7f2ae24296eb4c80b757a5d90ac70a34866
    Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/7609720
    Reviewed-by: Leszek Swirski <leszeks@chromium.org>
    Commit-Queue: Joyee Cheung <joyee@igalia.com>
    Cr-Commit-Position: refs/heads/main@{#105531}

deps: V8: backport 1361b2a49d02

Original commit message:

    [strings] improve array index hash distribution

    Previously, the hashes stored in a Name's raw_hash_field for decimal
    numeric strings (potential array indices) consist of the literal
    integer value along with the length of the string. This means
    consecutive numeric strings can have consecutive hash values, which
    can lead to O(n^2) probing for insertion in the worst case when e.g.
    a non-numeric string happen to land in the these buckets.

    This patch adds a build-time flag v8_enable_seeded_array_index_hash
    that scrambles the 24-bit array-index value stored in a Name's
    raw_hash_field to improve the distribution.

    x ^= x >> kShift; x = (x * m1) & kMask;    // round 1
    x ^= x >> kShift; x = (x * m2) & kMask;    // round 2
    x ^= x >> kShift;                          // finalize

    To decode, apply the same steps with the modular inverses of m1
    and m2 in reverse order.

    x ^= x >> kShift; x = (x * m2_inv) & kMask;    // round 1
    x ^= x >> kShift; x = (x * m1_inv) & kMask;    // round 2
    x ^= x >> kShift;                              // finalize

    where kShift = kArrayIndexValueBits / 2, kMask = kArrayIndexValueMask,
    m1, m2 (both odd) are the lower bits of the rapidhash secrets, m1_inv,
    m2_inv (modular inverses) are precomputed modular inverse of m1 and m2.
    The pre-computed values are appended to the hash_seed ByteArray in
    ReadOnlyRoots and accessed in generated code to reduce overhead.
    In call sites that don't already have access to the seeds, we read them
    from the current isolate group/isolate's read only roots.

    To consolidate the code that encode/decode these hashes, this patch
    adds MakeArrayIndexHash/DecodeArrayIndexFromHashField in C++ and CSA
    that perform seeding/unseeding if enabled, and updates places where
    encoding/decoding of array index is needed to use them.

    Bug: 477515021
    Change-Id: I350afe511951a54c4378396538152cc56565fd55
    Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/7564330
    Reviewed-by: Leszek Swirski <leszeks@chromium.org>
    Commit-Queue: Joyee Cheung <joyee@igalia.com>
    Cr-Commit-Position: refs/heads/main@{#105596}

deps: V8: cherry-pick aac14dd95e5b

Original commit message:

    [string] add 3rd round to seeded array index hash

    Since we already have 3 derived secrets, and arithmetics are
    relatively cheap, add a 3rd round to the xorshift-multiply
    seeding scheme. This brings the bias from ~3.4 to ~0.4.

    Bug: 477515021
    Change-Id: I1ef48954bcee8768d8c90db06ac8adb02f06cebf
    Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/7655117
    Reviewed-by: Chengzhong Wu <cwu631@bloomberg.net>
    Commit-Queue: Joyee Cheung <joyee@igalia.com>
    Reviewed-by: Leszek Swirski <leszeks@chromium.org>
    Cr-Commit-Position: refs/heads/main@{#105824}

PR-URL: https://github.com/nodejs-private/node-private/pull/834
CVE-ID: CVE-2026-21717

deps: V8: backport 185f0fe09b72

Original commit message:

    [numbers] Refactor HashSeed as a lightweight view over ByteArray

    Instead of copying the seed and secrets into a struct with value
    fields, HashSeed now stores a pointer pointing either into the
    read-only ByteArray, or the static default seed for off-heap
    HashSeed::Default() calls. The underlying storage is always
    8-byte aligned so we can cast it directly into a struct.

    Change-Id: I5896a7f2ae24296eb4c80b757a5d90ac70a34866
    Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/7609720
    Reviewed-by: Leszek Swirski <leszeks@chromium.org>
    Commit-Queue: Joyee Cheung <joyee@igalia.com>
    Cr-Commit-Position: refs/heads/main@{#105531}

deps: V8: backport 1361b2a49d02

Original commit message:

    [strings] improve array index hash distribution

    Previously, the hashes stored in a Name's raw_hash_field for decimal
    numeric strings (potential array indices) consist of the literal
    integer value along with the length of the string. This means
    consecutive numeric strings can have consecutive hash values, which
    can lead to O(n^2) probing for insertion in the worst case when e.g.
    a non-numeric string happen to land in the these buckets.

    This patch adds a build-time flag v8_enable_seeded_array_index_hash that
    scrambles the 24-bit array-index value stored in a Name's raw_hash_field
    to improve the distribution.

    x ^= x >> kShift; x = (x * m1) & kMask;    // round 1
    x ^= x >> kShift; x = (x * m2) & kMask;    // round 2
    x ^= x >> kShift;                          // finalize

    To decode, apply the same steps with the modular inverses of m1 and m2
    in reverse order.

    x ^= x >> kShift; x = (x * m2_inv) & kMask;    // round 1
    x ^= x >> kShift; x = (x * m1_inv) & kMask;    // round 2
    x ^= x >> kShift;                              // finalize

    where kShift = kArrayIndexValueBits / 2, kMask = kArrayIndexValueMask,
    m1, m2 (both odd) are the lower bits of the rapidhash secrets, m1_inv,
    m2_inv (modular inverses) are precomputed modular inverse of m1 and m2.
    The pre-computed values are appended to the hash_seed ByteArray in
    ReadOnlyRoots and accessed in generated code to reduce overhead.
    In call sites that don't already have access to the seeds, we read them
    from the current isolate group/isolate's read only roots.

    To consolidate the code that encode/decode these hashes, this patch
    adds MakeArrayIndexHash/DecodeArrayIndexFromHashField in C++ and CSA
    that perform seeding/unseeding if enabled, and updates places where
    encoding/decoding of array index is needed to use them.

    Bug: 477515021
    Change-Id: I350afe511951a54c4378396538152cc56565fd55
    Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/7564330
    Reviewed-by: Leszek Swirski <leszeks@chromium.org>
    Commit-Queue: Joyee Cheung <joyee@igalia.com>
    Cr-Commit-Position: refs/heads/main@{#105596}

deps: V8: cherry-pick aac14dd95e5b

Original commit message:

    [string] add 3rd round to seeded array index hash

    Since we already have 3 derived secrets, and arithmetics are
    relatively cheap, add a 3rd round to the xorshift-multiply
    seeding scheme. This brings the bias from ~3.4 to ~0.4.

    Bug: 477515021
    Change-Id: I1ef48954bcee8768d8c90db06ac8adb02f06cebf
    Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/7655117
    Reviewed-by: Chengzhong Wu <cwu631@bloomberg.net>
    Commit-Queue: Joyee Cheung <joyee@igalia.com>
    Reviewed-by: Leszek Swirski <leszeks@chromium.org>
    Cr-Commit-Position: refs/heads/main@{#105824}

Co-authored-by: Joyee Cheung <joyeec9h3@gmail.com>
Refs: https://hackerone.com/reports/3511792
Refs: aac14dd95e
PR-URL: https://github.com/nodejs/node/pull/61898
Reviewed-By: Antoine du Hamel <duhamelantoine1995@gmail.com>
Reviewed-By: Filip Skokan <panva.ip@gmail.com>
Reviewed-By: Rafael Gonzaga <rafael.nunu@hotmail.com>
Reviewed-By: Chengzhong Wu <legendecas@gmail.com>
2026-04-24 18:01:34 +02:00

8712 lines
287 KiB
Text

# Copyright 2014 The Chromium Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
import("//build/config/android/config.gni")
import("//build/config/arm.gni")
import("//build/config/coverage/coverage.gni")
import("//build/config/dcheck_always_on.gni")
import("//build/config/host_byteorder.gni")
import("//build/config/mips.gni")
import("//build/config/riscv.gni")
import("//build/config/sanitizers/sanitizers.gni")
import("//build_overrides/build.gni")
import("//third_party/icu/config.gni")
import("gni/snapshot_toolchain.gni")
import("gni/v8.gni")
if (is_clang) {
import("//build/config/clang/clang.gni")
}
if (v8_enable_temporal_support) {
import("//build/config/rust.gni")
}
if (is_ios) {
import("//build/config/apple/mobile_config.gni") # For `target_platform`.
}
# For faster Windows builds. See https://crbug.com/v8/8475.
emit_builtins_as_inline_asm = is_win && is_clang
declare_args() {
# Print to stdout on Android.
v8_android_log_stdout = false
# Dynamically set an additional dependency from v8/custom_deps.
v8_custom_deps = ""
# Sets -DV8_ENABLE_FUTURE.
v8_enable_future = false
# Sets -DENABLE_SYSTEM_INSTRUMENTATION. Enables OS-dependent event tracing
v8_enable_system_instrumentation = (is_win || is_mac) && !v8_use_perfetto
# Sets the GUID for the ETW provider
v8_etw_guid = ""
# Sets -DVERIFY_HEAP.
v8_enable_verify_heap = ""
# Sets -DVERIFY_WRITE_BARRIERS.
v8_enable_verify_write_barriers = ""
# Sets -DVERIFY_PREDICTABLE
v8_enable_verify_predictable = false
# Enable compiler warnings when using V8_DEPRECATED apis.
v8_deprecation_warnings = true
# Enable compiler warnings when using V8_DEPRECATE_SOON apis.
v8_imminent_deprecation_warnings = true
# Embeds the given script into the snapshot.
v8_embed_script = ""
# Allows the embedder to add a custom suffix to the version string.
v8_embedder_string = ""
# Sets -DENABLE_DISASSEMBLER.
v8_enable_disassembler = ""
# Sets -DV8_ENABLE_REGEXP_DIAGNOSTICS.
v8_enable_regexp_diagnostics = !build_with_chromium
# Sets the number of internal fields on promise objects.
v8_promise_internal_field_count = 0
# Sets the number of internal fields on array buffer objects.
v8_array_buffer_internal_field_count = 0
# Sets the number of internal fields on array buffer view objects.
v8_array_buffer_view_internal_field_count = 0
# Sets -DENABLE_VTUNE_JIT_INTERFACE.
v8_enable_vtunejit = false
# Sets -DENABLE_VTUNE_TRACEMARK.
v8_enable_vtunetracemark = false
# Sets -DV8_ENABLE_APX_F.
v8_enable_apx_f = false
# Sets -DENABLE_HUGEPAGE
v8_enable_hugepage = false
# Sets -DV8_ENABLE_PRIVATE_MAPPING_FORK_OPTIMIZATION.
#
# This flag speeds up the performance of fork/execve on Linux systems for
# embedders which use it (like Node.js). It works by marking the pages that
# V8 allocates as MADV_DONTFORK. Without MADV_DONTFORK, the Linux kernel
# spends a long time manipulating page mappings on fork and exec which the
# child process doesn't generally need to access.
#
# See v8:7381 for more details.
v8_enable_private_mapping_fork_optimization = false
# Sets the default for v8_enable_local_handle_zapping and
# v8_enable_global_handle_zapping.
v8_enable_handle_zapping = is_asan || is_debug
# Sets -DENABLE_LOCAL_HANDLE_ZAPPING, which is more expensive than just
# the global handles. By default it is enabled if v8_enable_handle_zapping
# is enabled.
v8_enable_local_handle_zapping = ""
# Sets -DENABLE_GLOBAL_HANDLE_ZAPPING. By default it is enabled if
# v8_enable_handle_zapping is enabled.
v8_enable_global_handle_zapping = ""
# Enable slow dchecks.
v8_enable_slow_dchecks = false
# Enable fast mksnapshot runs.
v8_enable_fast_mksnapshot = false
# Enable using multiple threads to build builtins in mksnapshot.
v8_enable_concurrent_mksnapshot = true
# Optimize code for Torque executable, even during a debug build.
v8_enable_fast_torque = ""
# Enable the registration of unwinding info for Windows x64 and ARM64.
v8_win64_unwinding_info = true
# Enable code comments for builtins in the snapshot (impacts performance).
# This also enables v8_code_comments.
v8_enable_snapshot_code_comments = false
# Allow runtime-enabled code comments (with --code-comments). Enabled by
# default in debug builds.
# Sets -DV8_CODE_COMMENTS
v8_code_comments = ""
# Allow runtime-enabled debug code (with --debug-code). Enabled by default in
# debug builds.
# Sets -DV8_ENABLE_DEBUG_CODE
v8_enable_debug_code = ""
# Enable native counters from the snapshot (impacts performance, sets
# -DV8_SNAPSHOT_NATIVE_CODE_COUNTERS).
# This option will generate extra code in the snapshot to increment counters,
# as per the --native-code-counters flag.
v8_enable_snapshot_native_code_counters = ""
# Use pre-generated static root pointer values from static-roots.h.
v8_enable_static_roots = ""
# Mode used by gen-static-roots.py to have a heap layout which is identical
# to when v8_enable_static_roots is enabled.
v8_enable_static_roots_generation = false
# Enable code-generation-time checking of types in the CodeStubAssembler.
v8_enable_verify_csa = false
# Sets -DOBJECT_PRINT.
v8_enable_object_print = ""
# Sets -DALWAYS_MAGLEV_GRAPH_LABELLER.
v8_always_enable_maglev_graph_labeller = ""
# Sets -DV8_TRACE_MAPS.
v8_enable_trace_maps = ""
# Sets -DV8_ENABLE_CHECKS.
v8_enable_v8_checks = ""
# Sets -DV8_ENABLE_MEMORY_ACCOUNTING_CHECKS
v8_enable_memory_accounting_checks = ""
# Sets -DV8_TRACE_UNOPTIMIZED.
v8_enable_trace_unoptimized = ""
v8_enable_trace_ignition = false
v8_enable_trace_baseline_exec = false
# Sets -DV8_TRACE_FEEDBACK_UPDATES.
v8_enable_trace_feedback_updates = false
# Sets -DV8_ATOMIC_OBJECT_FIELD_WRITES and turns all field write operations
# into relaxed atomic operations.
v8_enable_atomic_object_field_writes = ""
# Controls the default value of v8_enable_concurrent_marking_state. See the
# default setting code below.
v8_enable_concurrent_marking = true
# Sets -DV8_IGNITION_DISPATCH_COUNTING.
# Enables counting frequencies of bytecode dispatches. After building in this
# configuration, subsequent runs of d8 can output frequencies for each pair
# of (current, next) bytecode instructions executed if you specify
# --trace-ignition-dispatches-output-file, or can generate a JS object with
# those frequencies if you run with --expose-ignition-statistics and call the
# extension function getIgnitionDispatchCounters().
v8_enable_ignition_dispatch_counting = false
# Enable frame elision for builtins.
v8_enable_builtins_frame_elision = true
# Runs mksnapshot with --turbo-profiling. After building in this
# configuration, any subsequent run of d8 will output information about usage
# of basic blocks in builtins.
v8_enable_builtins_profiling = false
# Runs mksnapshot with --turbo-profiling-verbose. After building in this
# configuration, any subsequent run of d8 will output information about usage
# of basic blocks in builtins, including the schedule and disassembly of all
# used builtins.
v8_enable_builtins_profiling_verbose = false
# This build flag is used to input a builtin pgo file containing raw
# execution counts (as opposed to branch hints), which are embedded into
# the `--trace-turbo` .json file from `mksnapshot`.
v8_log_builtins_block_count_input = ""
# This build flag is used to control whether reorder builtins according to
# the call graph with C3 algorithm based builtin PGO profiling.
v8_enable_builtins_reordering = true
# Provides the given V8 log file as an input to mksnapshot, where it can be
# used for profile-guided optimization of builtins.
#
# To do profile-guided optimizations of builtins:
# 1. Build with v8_enable_builtins_profiling = true
# 2. Run your chosen workload with the --turbo-profiling-output flag.
# For Chrome, the invocation might look like this:
# chrome --no-sandbox --disable-extensions
# --js-flags="--turbo-profiling-output=v8.builtins.pgo"
# "http://localhost/test-suite"
# 3. Run tools/builtins-pgo/get_hints.py to produce the branch hints,
# selecting min_count and threshold_ratio as you wish.
# 4. Optionally repeat steps 2-3 for additional workloads, and use
# tools/builtins-pgo/combine_hints.py to combine the hints produced in
# step 3 into a single file.
# 5. Build again with v8_builtins_profiling_log_file set to the file created
# in step 3 or 4.
v8_builtins_profiling_log_file = "default"
# Enable gearbox (instruction set extension) for builtins, the gearbox
# feature only supports x64 arch yet.
# Sets -DV8_BUILTINS_GEARBOX
v8_enable_builtins_gearbox = false
# Enables various testing features.
v8_enable_test_features = ""
# Enable short builtins call instruction sequences by un-embedding builtins.
# Sets -DV8_SHORT_BUILTIN_CALLS
v8_enable_short_builtin_calls = ""
# Enable support for external code range relative to the pointer compression
# cage.
# Sets -DV8_EXTERNAL_CODE_SPACE
v8_enable_external_code_space = ""
# With post mortem support enabled, metadata is embedded into libv8 that
# describes various parameters of the VM for use by debuggers. See
# tools/gen-postmortem-metadata.py for details.
v8_postmortem_support = false
# Use Siphash as added protection against hash flooding attacks.
v8_use_siphash = false
# Switches off inlining in V8.
v8_no_inline = false
# Override OS page size when generating snapshot
v8_os_page_size = "0"
# Similar to vfp but on MIPS.
v8_can_use_fpu_instructions = true
# Similar to the ARM hard float ABI but on MIPS.
v8_use_mips_abi_hardfloat = true
# Controls the threshold for on-heap/off-heap Typed Arrays.
v8_typed_array_max_size_in_heap = 64
# Sets -DENABLE_GDB_JIT_INTERFACE.
v8_enable_gdbjit =
is_debug && (((v8_current_cpu == "x86" || v8_current_cpu == "x64") &&
(is_linux || is_chromeos || is_mac)) ||
(v8_current_cpu == "ppc64" && (is_linux || is_chromeos)))
# Check that each header can be included in isolation (requires also
# setting the "check_v8_header_includes" gclient variable to run a
# specific hook).
v8_check_header_includes = false
# Enable lazy source positions by default.
v8_enable_lazy_source_positions = true
# Disable write barriers when GCs are non-incremental and
# heap has single generation.
v8_disable_write_barriers = false
# Ensure that write barriers are always used.
# Useful for debugging purposes.
v8_enable_unconditional_write_barriers = false
# Redirect allocation in young generation so that there will be
# only one single generation.
v8_enable_single_generation = ""
# Use token threaded dispatch for the regular expression interpreter.
# Use switch-based dispatch if this is false
v8_enable_regexp_interpreter_threaded_dispatch = true
# Enforce equality of builtins hashes from compatible architectures.
v8_verify_builtins_compatibility = false
# Check mksnapshot determinism by running it multiple times.
v8_verify_deterministic_mksnapshot = false
# Enable additional targets necessary for verification of torque
# file generation
v8_verify_torque_generation_invariance = false
# Generate comments describing the Torque intermediate representation.
v8_annotate_torque_ir = false
# Enable snapshot compression (enabled by default for desktop) devices.
v8_enable_snapshot_compression =
target_os == "android" || target_os == "chromeos" ||
target_os == "fuchsia"
# Enable control-flow integrity features, such as pointer authentication for
# ARM64. Enable it by default for simulator builds and when native code
# supports it as well. On Mac, control-flow integrity does not work so we
# avoid enabling it when using the simulator.
v8_control_flow_integrity = v8_current_cpu == "arm64" &&
((v8_target_is_simulator && target_os != "mac") ||
arm_control_flow_integrity != "none")
# Enable heap reservation of size 4GB. Only possible for 64bit archs.
cppgc_enable_caged_heap =
v8_current_cpu == "x64" || v8_current_cpu == "arm64" ||
v8_current_cpu == "loong64" || v8_current_cpu == "riscv64"
# Enables additional heap verification phases and checks.
cppgc_enable_verify_heap = ""
# Enable allocations during prefinalizer invocations.
cppgc_allow_allocations_in_prefinalizers = false
# Enable the V8 sandbox.
# Sets -DV8_ENABLE_SANDBOX.
v8_enable_sandbox = ""
# Enable experimental hardware support for the V8 sandbox if available.
# Sets -DV8_ENABLE_SANDBOX_HARDWARE_SUPPORT
v8_enable_sandbox_hardware_support = false
# Enable the memory corruption API. Useful for testing the sandbox.
# The memory corruption API is only exposed to JavaScript if sandbox testing
# mode is enabled at runtime, for example via --sandbox-fuzzing.
# WARNING This will enable builtins that (by design) cause memory corruption.
# Sets -DV8_ENABLE_MEMORY_CORRUPTION_API
v8_enable_memory_corruption_api = false
# Experimental feature for collecting per-class zone memory stats.
# Requires use_rtti = true
v8_enable_precise_zone_stats = false
# Set this if V8 monolithic static library is going to be linked into
# another shared library.
v8_monolithic_for_shared_library = false
# Experimental feature that uses SwissNameDictionary instead of NameDictionary
# as the backing store for all dictionary mode objects.
v8_enable_swiss_name_dictionary = false
# If enabled then macro definitions that are used in externally visible
# header files are placed in a separate header file v8-gn.h.
v8_generate_external_defines_header = false
# Experimental feature for tracking constness of properties in non-global
# dictionaries. Enabling this also always keeps prototypes in dict mode,
# meaning that they are not switched to fast mode.
# Sets -DV8_DICT_PROPERTY_CONST_TRACKING
v8_dict_property_const_tracking = false
# Enable map packing & unpacking (sets -DV8_MAP_PACKING).
v8_enable_map_packing = false
# Allow for JS promise hooks (instead of just C++).
v8_enable_javascript_promise_hooks = false
# Allow embedder data to be saved on continuations. Used to support
# TaskAttribution and `scheduler.yield()`.
# The flag enables disabling the feature, to test this data's overhead.
v8_enable_continuation_preserved_embedder_data = true
# Enable allocation folding globally (sets -DV8_ALLOCATION_FOLDING).
# When it's disabled, the --turbo-allocation-folding runtime flag will be ignored.
v8_enable_allocation_folding = true
# Enable runtime verification of heap snapshots produced for devtools.
v8_enable_heap_snapshot_verify = ""
# Enable global allocation site tracking.
v8_allocation_site_tracking = true
# TODO(cbruni, v8:12302): Remove once API is migrated
# Enable legacy mode for ScriptOrModule's lifetime. By default it's a
# temporary object, if enabled it will be kept alive by the parent Script.
# This is only used by nodejs.
v8_scriptormodule_legacy_lifetime = false
# Enables pointer compression for 8GB heaps.
# Sets -DV8_COMPRESS_POINTERS_8GB.
v8_enable_pointer_compression_8gb = ""
# Compile V8 using zlib as dependency.
# Sets -DV8_USE_ZLIB
v8_use_zlib = true
# Make ValueDeserializer crash if the data to deserialize is invalid.
v8_value_deserializer_hard_fail = false
# Enable jitless mode, including compile-time optimizations. Note that even
# when this is set to 'false', one can run V8 in jitless mode at runtime by
# passing the `--jitless` flag; but then you miss out on compile-time
# optimizations.
v8_jitless = v8_enable_lite_mode
# Enable Sparkplug
# Sets -DV8_ENABLE_SPARKPLUG.
v8_enable_sparkplug = ""
# Enable Maglev's graph printer.
# Sets -DV8_ENABLE_MAGLEV_GRAPH_PRINTER.
v8_enable_maglev_graph_printer = !build_with_chromium
# Enable slow tracing, e.g., tracing on every instruction or Turbofan node.
# Sets -DV8_ENABLE_SLOW_TRACING.
v8_enable_slow_tracing = is_debug
# Enable jump table switch for built-in.
v8_enable_builtin_jump_table_switch =
v8_current_cpu == "x64" || v8_current_cpu == "arm64"
v8_shortcut_strings_in_minor_ms = false
# Whether custom embedder snapshots may extend (= allocate new objects in)
# ReadOnlySpace.
v8_enable_extensible_ro_snapshot = true
# Black allocate objects on separate pages.
v8_enable_black_allocated_pages = ""
# Use sticky mark-bits for separating object generations.
v8_enable_sticky_mark_bits = false
# Use the experimental TSA-based definition for some builtins.
v8_enable_experimental_tsa_builtins = false
# Use the experimental TSA backend for Torque.
v8_enable_experimental_tq_to_tsa = false
# Use the encoding of undefined in double values.
v8_enable_undefined_double = true
v8_dcheck_always_on = dcheck_always_on
# Remote builds require an explicit dependency on icudat, but
# this breaks locally building V8 with ICU support when the file
# isn't present, which some embedders rely on. This option controls
# the explicit dependency and allows the build to complete.
v8_depend_on_icu_data_file = icu_use_data_file
# Experimental testing mode where various limits are artificially set lower.
v8_lower_limits_mode = false
# Enables the use of partition_alloc as the default allocator for standalone
# V8. This should be used for benchmarking and testing purposes to more
# closely mimic in-browser behavior.
#
# Currently used in d8.
v8_enable_partition_alloc = ""
# V8 uses Chrome's blink-gc clang plugin for checking V8's internal cppgc
# usages. The plugin is not exhaustive but covers most common known pitfalls.
use_cppgc_clang_plugin = true
# Expose F.p.caller and .arguments as own properties.
v8_function_arguments_caller_are_own_props = false
# Use a hard-coded secret value when hashing.
v8_use_default_hasher_secret = true
# Enable seeded array index hash.
v8_enable_seeded_array_index_hash = false
# add instrumentation for Dumpling differential fuzzing
v8_dumpling = false
# Enable compilation of riscv32.
v8_riscv_enable_deprecated_riscv32 = false
}
# Derived defaults.
if (cppgc_enable_verify_heap == "") {
cppgc_enable_verify_heap =
v8_enable_verification_features || v8_dcheck_always_on
}
if (v8_enable_verify_heap == "") {
v8_enable_verify_heap = v8_enable_verification_features
}
if (v8_enable_verify_write_barriers == "") {
v8_enable_verify_write_barriers =
(v8_enable_verification_features || v8_dcheck_always_on) &&
!v8_disable_write_barriers
}
if (v8_enable_object_print == "") {
v8_enable_object_print = v8_enable_debugging_features
}
if (v8_always_enable_maglev_graph_labeller == "") {
v8_always_enable_maglev_graph_labeller = v8_enable_debugging_features
}
if (v8_enable_disassembler == "") {
v8_enable_disassembler = v8_enable_debugging_features
}
if (v8_enable_trace_maps == "") {
v8_enable_trace_maps = v8_enable_debugging_features
}
if (v8_enable_test_features == "") {
v8_enable_test_features =
v8_enable_verification_features || v8_dcheck_always_on
}
if (v8_enable_v8_checks == "") {
v8_enable_v8_checks = v8_enable_verification_features
}
if (v8_enable_memory_accounting_checks == "") {
v8_enable_memory_accounting_checks =
v8_enable_verification_features || v8_dcheck_always_on
}
if (v8_enable_heap_snapshot_verify == "") {
v8_enable_heap_snapshot_verify =
v8_enable_verification_features || v8_dcheck_always_on
}
if (v8_enable_snapshot_code_comments) {
assert(v8_code_comments == true || v8_code_comments == "",
"v8_enable_snapshot_code_comments conflicts with v8_code_comments.")
v8_code_comments = true
} else if (v8_code_comments == "") {
v8_code_comments = v8_enable_debugging_features
}
if (v8_enable_debug_code == "") {
v8_enable_debug_code = v8_enable_verification_features || v8_dcheck_always_on
}
if (v8_enable_snapshot_native_code_counters == "") {
v8_enable_snapshot_native_code_counters = v8_enable_debugging_features
}
if (v8_enable_drumbrake && v8_enable_webassembly) {
assert(
is_drumbrake_supported,
"DrumBrake is only available on x64, arm64 on Windows, Linux and MacOS.")
}
if (v8_enable_black_allocated_pages == "") {
v8_enable_black_allocated_pages = !v8_enable_sticky_mark_bits
}
# Toggle certain build flags for correctness fuzzing when building the
# clang_x64_fuzzer_experiments toolchain. We'll correctness-compare the
# default build with the experiments build.
if (v8_multi_arch_build &&
rebase_path(get_label_info(":d8", "root_out_dir"), root_build_dir) ==
"clang_x64_fuzzer_experiments") {
v8_enable_pointer_compression = !v8_enable_pointer_compression
v8_lower_limits_mode = !v8_lower_limits_mode
}
# Ensure the sandbox is on/off in the same way as pointer compression for
# correctness fuzzing builds.
if (v8_multi_arch_build) {
v8_enable_sandbox = v8_enable_pointer_compression
}
if (v8_enable_pointer_compression_shared_cage == "") {
v8_enable_pointer_compression_shared_cage = v8_enable_pointer_compression
}
if (v8_enable_pointer_compression_8gb == "") {
v8_enable_pointer_compression_8gb = false
}
if (v8_enable_local_handle_zapping == "") {
v8_enable_local_handle_zapping = v8_enable_handle_zapping
}
if (v8_enable_global_handle_zapping == "") {
v8_enable_global_handle_zapping = v8_enable_handle_zapping
}
if (v8_enable_fast_torque == "") {
v8_enable_fast_torque = v8_enable_fast_mksnapshot
}
if (v8_enable_concurrent_mksnapshot == "") {
v8_enable_concurrent_mksnapshot = v8_enable_fast_mksnapshot
}
if (v8_enable_short_builtin_calls == "") {
v8_enable_short_builtin_calls =
v8_current_cpu == "x64" || v8_current_cpu == "arm64" ||
v8_current_cpu == "loong64" || v8_current_cpu == "riscv64"
}
if (v8_enable_external_code_space == "") {
v8_enable_external_code_space =
v8_enable_pointer_compression &&
v8_enable_pointer_compression_shared_cage &&
(v8_current_cpu == "x64" || v8_current_cpu == "arm64" ||
v8_current_cpu == "loong64" || v8_current_cpu == "riscv64")
}
if (v8_enable_sparkplug == "") {
v8_enable_sparkplug = !v8_jitless
}
if (v8_enable_maglev == "") {
v8_enable_maglev =
v8_enable_turbofan &&
(v8_current_cpu == "arm" || v8_current_cpu == "x64" ||
v8_current_cpu == "arm64" || v8_current_cpu == "s390x" ||
v8_current_cpu == "ppc64" || v8_current_cpu == "riscv64" ||
v8_current_cpu == "loong64")
}
assert(v8_enable_turbofan || !v8_enable_maglev,
"Maglev is not available when Turbofan is disabled.")
if (v8_enable_partition_alloc == "") {
v8_enable_partition_alloc =
!build_with_v8_embedder &&
!(defined(build_with_node) && build_with_node) &&
(v8_target_cpu != "ppc64" && v8_target_cpu != "s390x") &&
v8_enable_pointer_compression_shared_cage
}
assert(!v8_enable_partition_alloc || v8_enable_pointer_compression_shared_cage,
"partition_alloc is not available for multi-cage mode.")
is_wasm_interpreter_mode_enabled =
!v8_enable_sparkplug && !v8_enable_maglev && !v8_enable_turbofan &&
v8_enable_webassembly && v8_enable_drumbrake
assert(
!v8_jitless || (!v8_enable_sparkplug && !v8_enable_maglev &&
!v8_enable_turbofan && !v8_enable_webassembly) ||
is_wasm_interpreter_mode_enabled,
"Sparkplug, Maglev, Turbofan and Wasm are not available in jitless mode. But, if the Wasm interpreter mode is on, Wasm can work in jitless mode")
if (v8_enable_single_generation == "") {
v8_enable_single_generation = v8_disable_write_barriers
}
if (v8_enable_atomic_object_field_writes == "") {
v8_enable_atomic_object_field_writes = v8_enable_concurrent_marking
}
if (v8_enable_single_generation) {
v8_allocation_site_tracking = false
}
assert(!v8_enable_concurrent_marking || v8_enable_atomic_object_field_writes,
"Concurrent marking requires atomic object field writes.")
if (v8_enable_trace_unoptimized == "") {
v8_enable_trace_unoptimized =
v8_enable_trace_ignition || v8_enable_trace_baseline_exec
}
assert(!v8_enable_trace_ignition || v8_enable_trace_unoptimized,
"Ignition tracing requires unoptimized tracing to be enabled.")
assert(!v8_enable_trace_baseline_exec || v8_enable_trace_unoptimized,
"Baseline tracing requires unoptimized tracing to be enabled.")
assert(
v8_enable_verification_features == true || v8_dcheck_always_on ||
!v8_enable_slow_dchecks,
"v8_enable_slow_dchecks requires v8_enable_verification_features or dcheck_always_on.")
if (v8_enable_short_builtin_calls &&
(!v8_enable_pointer_compression && v8_current_cpu != "x64")) {
# Disable short calls when pointer compression is not enabled, except x64,
# where short builtin calls can still be enabled if the code range is
# guaranteed to be close enough to embedded builtins.
v8_enable_short_builtin_calls = false
}
if (v8_enable_sandbox == "") {
# TODO(saelo, v8:11880) remove dependency on v8_enable_external_code_space
# once that is enabled everywhere by default.
# TODO(chromium:1325784) the sandbox is not currently supported in Chromium
# on Fuchsia.
v8_enable_sandbox = v8_enable_pointer_compression_shared_cage &&
v8_enable_external_code_space && target_os != "fuchsia"
}
if (v8_enable_static_roots == "") {
# Static roots are only valid for builds with pointer compression and a
# shared read-only heap.
v8_enable_static_roots =
v8_enable_pointer_compression && v8_enable_external_code_space
}
assert(!v8_enable_static_roots ||
(v8_enable_pointer_compression && v8_enable_external_code_space),
"Trying to enable static roots in a configuration that is not supported")
assert(
!(v8_enable_static_roots && v8_enable_static_roots_generation),
"Static root values must be generated in a build that does not rely on static roots itself")
if (v8_builtins_profiling_log_file == "default") {
v8_builtins_profiling_log_file = ""
# The existing profile can be used only when
# * `v8_enable_builtins_optimization` - this switch enables builtins PGO,
# * `!v8_enable_builtins_profiling` - don't use the profiles when generating
# a new one,
# * `!is_debug && !dcheck_always_on` - these modes add more checks to
# the builtins control flow which makes the builtins code different,
# * `v8_enable_pointer_compression` - it changes the objects layouts,
# * `v8_enable_sandbox && v8_enable_external_code_space` because they affect
# the way how external pointer values are accessed,
# * `v8_enable_webassembly` because it changes the set of opcodes which
# affects graphs hashes.
if (v8_enable_builtins_optimization && !v8_enable_builtins_profiling &&
!is_debug && !v8_dcheck_always_on && v8_enable_webassembly) {
# This is about function arguments evaluation order on the machine building
# mksnapshot, which makes node IDs not predictable for subgraphs like
# Op1(Op2(), Op3()) and as a result different graph hashes.
# Clang uses left-to-right order everywhere except Windows, otherwise the
# order is right-to-left.
# TODO(crbug.com/v8/13647): Remove once this issue is fixed in CSA.
if (!is_clang || host_os == "win") {
pgo_profile_suffix = "-rl"
} else {
pgo_profile_suffix = ""
}
if ((v8_current_cpu == "x64" || v8_current_cpu == "arm64") &&
v8_enable_pointer_compression && v8_enable_external_code_space &&
v8_enable_sandbox) {
# Note, currently x64 profile can be applied to arm64 but not the other
# way round.
v8_builtins_profiling_log_file =
"tools/builtins-pgo/profiles/x64" + pgo_profile_suffix + ".profile"
} else if (v8_current_cpu == "x86" || v8_current_cpu == "arm") {
# Note, x86 profile can be applied to arm but not the other way round.
v8_builtins_profiling_log_file =
"tools/builtins-pgo/profiles/x86" + pgo_profile_suffix + ".profile"
}
}
}
if (v8_enable_webassembly && !v8_target_is_simulator &&
v8_current_cpu == "x64") {
v8_enable_wasm_simd256_revec = true
}
if (v8_enable_webassembly && v8_current_cpu == "arm64") {
v8_enable_wasm_deinterleaved_mem_ops = true
}
if (v8_enable_experimental_tq_to_tsa) {
v8_enable_experimental_tsa_builtins = true
}
assert(!v8_disable_write_barriers || v8_enable_single_generation,
"Disabling write barriers works only with single generation")
assert(!v8_enable_verify_write_barriers || !v8_disable_write_barriers,
"Write barriers need to be enabled for verification")
assert(v8_current_cpu == "arm64" || !v8_control_flow_integrity,
"Control-flow integrity is only supported on arm64")
assert(!v8_enable_map_packing || !v8_enable_pointer_compression,
"Map packing does not support pointer compression")
assert(!v8_enable_map_packing || v8_current_cpu == "x64",
"Map packing is only supported on x64")
assert(!v8_enable_external_code_space || v8_enable_pointer_compression,
"External code space feature requires pointer compression")
assert(!v8_enable_pointer_compression_8gb || v8_enable_pointer_compression,
"Pointer compression for 8GB cages requires pointer compression")
assert(!v8_enable_sandbox || v8_enable_external_code_space,
"The sandbox requires the external code space")
assert(!v8_enable_memory_corruption_api || v8_enable_sandbox,
"The Memory Corruption API requires the sandbox")
assert(!v8_enable_sandbox_hardware_support || v8_enable_sandbox,
"The sandbox must be enabled to enable sandbox hardware support")
assert(
!v8_enable_pointer_compression_shared_cage || v8_enable_pointer_compression,
"Can't share a pointer compression cage if pointers aren't compressed")
assert(
!v8_enable_pointer_compression_shared_cage || v8_current_cpu == "x64" ||
v8_current_cpu == "arm64" || v8_current_cpu == "riscv64" ||
v8_current_cpu == "ppc64" || v8_current_cpu == "s390x" ||
v8_current_cpu == "loong64",
"Sharing a pointer compression cage is only supported on x64, arm64, ppc64, s390x, riscv64 and loong64")
assert(!v8_enable_unconditional_write_barriers || !v8_disable_write_barriers,
"Write barriers can't be both enabled and disabled")
assert(!cppgc_enable_caged_heap || v8_current_cpu == "x64" ||
v8_current_cpu == "arm64" || v8_current_cpu == "loong64" ||
v8_current_cpu == "riscv64",
"CppGC caged heap requires 64bit platforms")
assert(!cppgc_enable_young_generation || cppgc_enable_caged_heap,
"Young generation in CppGC requires caged heap")
assert(!cppgc_enable_pointer_compression || cppgc_enable_caged_heap,
"Pointer compression in CppGC requires caged heap")
if (v8_enable_single_generation == true) {
assert(
v8_enable_unconditional_write_barriers || v8_disable_write_barriers,
"Requires unconditional write barriers or none (which disables incremental marking)")
}
assert(!v8_enable_snapshot_compression || v8_use_zlib,
"Snapshot compression requires zlib")
assert(!v8_enable_cet_shadow_stack ||
(v8_target_cpu == "x64" && target_os == "win"),
"CET shadow stack is supported only on x64 Windows")
if (v8_enable_sticky_mark_bits) {
# To support sticky mark bits, pretenured allocations must be allocated from
# a separate free-list and the atomic pause (or the sweeper) must fix up the
# mark bits.
assert(!v8_enable_black_allocated_pages,
"Black allocated pages are not yet supported with sticky mark bits")
}
if (v8_expose_public_symbols == "") {
v8_expose_public_symbols = v8_expose_symbols
}
assert(
!build_with_chromium || !v8_enable_partition_alloc,
"V8 using partition_alloc from Chromium is not implemented at the moment")
v8_random_seed = "314159265"
v8_toolset_for_shell = "host"
is_DEBUG_defined = v8_enable_verification_features || v8_dcheck_always_on
###############################################################################
# Configurations
#
config("internal_config_base") {
# Only targets in this file and its subdirs can depend on this.
visibility = [ "./*" ]
configs = [ ":v8_tracing_config" ]
include_dirs = [
".",
"include",
"$target_gen_dir",
"$target_gen_dir/include",
]
}
config("internal_config") {
defines = []
# Only targets in this file and its subdirs can depend on this.
visibility = [ "./*" ]
configs = [
"//build/config/compiler:wexit_time_destructors",
":internal_config_base",
":v8_header_features",
":cppgc_header_features",
]
if (is_component_build) {
defines += [ "BUILDING_V8_SHARED_PRIVATE" ]
} else if (v8_expose_public_symbols) {
defines += [ "BUILDING_V8_SHARED" ]
}
if (v8_current_cpu == "riscv64" || v8_current_cpu == "riscv32") {
if (!is_clang) {
libs = [ "atomic" ]
}
}
}
# Should be applied to all targets that write trace events.
config("v8_tracing_config") {
if (v8_use_perfetto) {
include_dirs = [
"//third_party/perfetto/include",
"$root_gen_dir/third_party/perfetto",
"$root_gen_dir/third_party/perfetto/build_config",
]
}
}
# This config should be applied to code using the libplatform.
config("libplatform_config") {
include_dirs = [ "include" ]
if (is_component_build) {
defines = [ "USING_V8_PLATFORM_SHARED" ]
}
}
# This config should be applied to code using the libbase.
config("libbase_config") {
if (is_component_build) {
defines = [ "USING_V8_BASE_SHARED" ]
}
libs = []
if (is_android && current_toolchain != host_toolchain) {
libs += [ "log" ]
}
}
config("zoslib_config") {
if (current_os == "zos") {
configs = [ "//third_party/zoslib:zoslib_config" ]
}
}
# Standalone cppgc cannot be built within chrome or with perfetto.
assert(!cppgc_is_standalone || !build_with_chromium)
assert(!cppgc_is_standalone || !v8_use_perfetto)
# This config should be applied to code using the cppgc_base.
config("cppgc_base_config") {
defines = []
if (cppgc_is_standalone) {
defines += [ "CPPGC_IS_STANDALONE" ]
}
}
# This config is only applied to v8_headers and is the basis for external_config
# but without setting the USING_V8_SHARED define, which means v8_headers can be
# used inside v8 itself.
config("headers_config") {
defines = []
configs = [
":v8_header_features",
":cppgc_header_features",
]
include_dirs = [ "include" ]
}
# This config should only be applied to code using V8 and not any V8 code
# itself.
config("external_config") {
configs = [ ":headers_config" ]
defines = []
if (is_component_build) {
defines += [
"USING_V8_SHARED",
"USING_V8_SHARED_PRIVATE",
]
}
if (current_cpu == "riscv64" || current_cpu == "riscv32") {
if (!is_clang) {
libs = [ "atomic" ]
}
}
}
# This config should only be applied to code that needs to be explicitly
# aware of whether we are using startup data or not.
config("external_startup_data") {
if (v8_use_external_startup_data) {
defines = [ "V8_USE_EXTERNAL_STARTUP_DATA" ]
}
}
# List of defines that can appear in externally visible header files and that
# are controlled by args.gn.
# Make sure the |v8_generate_features_json| action is also updated when adding
# or removing defines below.
external_v8_defines = [
"V8_ARRAY_BUFFER_INTERNAL_FIELD_COUNT=${v8_array_buffer_internal_field_count}",
"V8_ARRAY_BUFFER_VIEW_INTERNAL_FIELD_COUNT=${v8_array_buffer_view_internal_field_count}",
"V8_PROMISE_INTERNAL_FIELD_COUNT=${v8_promise_internal_field_count}",
"V8_USE_DEFAULT_HASHER_SECRET=${v8_use_default_hasher_secret}",
"V8_ENABLE_CHECKS",
"V8_ENABLE_MEMORY_ACCOUNTING_CHECKS",
"V8_COMPRESS_POINTERS",
"V8_COMPRESS_POINTERS_IN_SHARED_CAGE",
"V8_31BIT_SMIS_ON_64BIT_ARCH",
"V8_COMPRESS_ZONES",
"V8_ENABLE_SANDBOX",
"V8_DEPRECATION_WARNINGS",
"V8_IMMINENT_DEPRECATION_WARNINGS",
"V8_USE_PERFETTO",
"V8_USE_PERFETTO_JSON_EXPORT",
"V8_USE_PERFETTO_SDK",
"V8_MAP_PACKING",
"V8_IS_TSAN",
"V8_ENABLE_DIRECT_HANDLE",
"V8_MINORMS_STRING_SHORTCUTTING",
"V8_HAVE_TARGET_OS",
"V8_TARGET_OS_ANDROID",
"V8_TARGET_OS_FUCHSIA",
"V8_TARGET_OS_IOS",
"V8_TARGET_OS_LINUX",
"V8_TARGET_OS_MACOS",
"V8_TARGET_OS_WIN",
"V8_TARGET_OS_CHROMEOS",
"V8_TARGET_ARCH_ARM64",
"V8_TARGET_ARCH_PPC64",
]
enabled_external_v8_defines = [
"V8_ARRAY_BUFFER_INTERNAL_FIELD_COUNT=${v8_array_buffer_internal_field_count}",
"V8_ARRAY_BUFFER_VIEW_INTERNAL_FIELD_COUNT=${v8_array_buffer_view_internal_field_count}",
"V8_PROMISE_INTERNAL_FIELD_COUNT=${v8_promise_internal_field_count}",
"V8_USE_DEFAULT_HASHER_SECRET=${v8_use_default_hasher_secret}",
]
if (v8_enable_v8_checks) {
enabled_external_v8_defines += [ "V8_ENABLE_CHECKS" ]
}
if (v8_enable_memory_accounting_checks) {
enabled_external_v8_defines += [ "V8_ENABLE_MEMORY_ACCOUNTING_CHECKS" ]
}
if (v8_enable_pointer_compression) {
enabled_external_v8_defines += [ "V8_COMPRESS_POINTERS" ]
if (v8_enable_pointer_compression_shared_cage) {
enabled_external_v8_defines += [ "V8_COMPRESS_POINTERS_IN_SHARED_CAGE" ]
}
}
if (v8_enable_pointer_compression || v8_enable_31bit_smis_on_64bit_arch) {
enabled_external_v8_defines += [ "V8_31BIT_SMIS_ON_64BIT_ARCH" ]
}
if (v8_enable_sandbox) {
enabled_external_v8_defines += [ "V8_ENABLE_SANDBOX" ]
}
if (v8_deprecation_warnings) {
enabled_external_v8_defines += [ "V8_DEPRECATION_WARNINGS" ]
}
if (v8_imminent_deprecation_warnings) {
enabled_external_v8_defines += [ "V8_IMMINENT_DEPRECATION_WARNINGS" ]
}
if (v8_use_perfetto) {
enabled_external_v8_defines += [ "V8_USE_PERFETTO" ]
}
if (v8_use_perfetto_json_export) {
enabled_external_v8_defines += [ "V8_USE_PERFETTO_JSON_EXPORT" ]
}
if (v8_use_perfetto_sdk) {
enabled_external_v8_defines += [ "V8_USE_PERFETTO_SDK" ]
}
if (v8_enable_map_packing) {
enabled_external_v8_defines += [ "V8_MAP_PACKING" ]
}
if (is_tsan) {
enabled_external_v8_defines += [ "V8_IS_TSAN" ]
}
if (v8_enable_direct_handle) {
enabled_external_v8_defines += [ "V8_ENABLE_DIRECT_HANDLE" ]
}
if (v8_shortcut_strings_in_minor_ms) {
enabled_external_v8_defines += [ "V8_MINORMS_STRING_SHORTCUTTING" ]
}
# V8_TARGET_OS_ defines. The target OS may differ from host OS e.g. in
# mksnapshot. We additionally set V8_HAVE_TARGET_OS to determine that a
# target OS has in fact been set; otherwise we internally assume that target
# OS == host OS (see v8config.h).
if (target_os == "android") {
enabled_external_v8_defines += [ "V8_HAVE_TARGET_OS" ]
enabled_external_v8_defines += [ "V8_TARGET_OS_ANDROID" ]
} else if (target_os == "fuchsia") {
enabled_external_v8_defines += [ "V8_HAVE_TARGET_OS" ]
enabled_external_v8_defines += [ "V8_TARGET_OS_FUCHSIA" ]
} else if (target_os == "ios") {
enabled_external_v8_defines += [ "V8_HAVE_TARGET_OS" ]
enabled_external_v8_defines += [ "V8_TARGET_OS_IOS" ]
} else if (target_os == "linux") {
enabled_external_v8_defines += [ "V8_HAVE_TARGET_OS" ]
enabled_external_v8_defines += [ "V8_TARGET_OS_LINUX" ]
} else if (target_os == "mac") {
enabled_external_v8_defines += [ "V8_HAVE_TARGET_OS" ]
enabled_external_v8_defines += [ "V8_TARGET_OS_MACOS" ]
} else if (target_os == "win") {
enabled_external_v8_defines += [ "V8_HAVE_TARGET_OS" ]
enabled_external_v8_defines += [ "V8_TARGET_OS_WIN" ]
} else if (target_os == "chromeos") {
enabled_external_v8_defines += [ "V8_HAVE_TARGET_OS" ]
enabled_external_v8_defines += [ "V8_TARGET_OS_CHROMEOS" ]
}
# Some V8_TARGET_ARCH_ defines that affect Api constants (see usages of
# V8_TARGET_ARCH_* in v8-internal.h).
# The target architecture may differ from host one e.g. in mksnapshot or in
# msan builds.
# TODO(ishell): support all target archs and add V8_HAVE_TARGET_ARCH similar
# to V8_TARGET_OS_* and V8_HAVE_TARGET_OS defines.
if (v8_current_cpu == "arm64") {
enabled_external_v8_defines += [ "V8_TARGET_ARCH_ARM64" ]
} else if (v8_current_cpu == "ppc64") {
enabled_external_v8_defines += [ "V8_TARGET_ARCH_PPC64" ]
}
disabled_external_v8_defines = external_v8_defines - enabled_external_v8_defines
# Put defines that are used in public headers here; public headers are
# defined in "v8_headers" and are included by embedders of V8.
config("v8_header_features") {
visibility = [ ":*" ]
if (v8_generate_external_defines_header) {
defines = [ "V8_GN_HEADER" ]
} else {
defines = enabled_external_v8_defines
}
}
# List of defines that can appear in externally visible cppgc header files and
# that are controlled by args.gn.
external_cppgc_defines = [
"CPPGC_CAGED_HEAP",
"CPPGC_ENABLE_API_CHECKS",
"CPPGC_ENABLE_LARGER_CAGE",
"CPPGC_ENABLE_SLOW_API_CHECKS",
"CPPGC_POINTER_COMPRESSION",
"CPPGC_SLIM_WRITE_BARRIER",
"CPPGC_SUPPORTS_OBJECT_NAMES",
"CPPGC_YOUNG_GENERATION",
]
enabled_external_cppgc_defines = []
if (cppgc_enable_api_checks) {
enabled_external_cppgc_defines += [ "CPPGC_ENABLE_API_CHECKS" ]
}
cppgc_enable_slow_api_checks = v8_enable_slow_dchecks
if (cppgc_enable_slow_api_checks) {
enabled_external_cppgc_defines += [ "CPPGC_ENABLE_SLOW_API_CHECKS" ]
}
if (cppgc_enable_object_names) {
enabled_external_cppgc_defines += [ "CPPGC_SUPPORTS_OBJECT_NAMES" ]
}
if (cppgc_enable_caged_heap) {
enabled_external_cppgc_defines += [ "CPPGC_CAGED_HEAP" ]
# Always enable young generation compile time flag if caged heap is enabled.
cppgc_enable_young_generation = true
# Pointer compression regresses binary size on Fuchsia by about 300K.
# However, the change improves Oilpan memory by 15-20% (2-4% of PMF),
# which is beneficial for memory-impoverished platforms.
cppgc_enable_pointer_compression = true
}
if (cppgc_enable_young_generation) {
enabled_external_cppgc_defines += [ "CPPGC_YOUNG_GENERATION" ]
}
if (cppgc_enable_pointer_compression) {
enabled_external_cppgc_defines += [ "CPPGC_POINTER_COMPRESSION" ]
}
if (cppgc_enable_larger_cage) {
enabled_external_cppgc_defines += [ "CPPGC_ENABLE_LARGER_CAGE" ]
}
if (cppgc_enable_slim_write_barrier) {
enabled_external_cppgc_defines += [ "CPPGC_SLIM_WRITE_BARRIER" ]
}
disabled_external_cppgc_defines =
external_cppgc_defines - enabled_external_cppgc_defines
config("cppgc_header_features") {
visibility = [ ":*" ]
if (v8_generate_external_defines_header) {
defines = [ "V8_GN_HEADER" ]
} else {
defines = enabled_external_cppgc_defines
}
}
enabled_external_defines =
enabled_external_v8_defines + enabled_external_cppgc_defines
disabled_external_defines =
disabled_external_v8_defines + disabled_external_cppgc_defines
# Put defines here that are only used in our internal files and NEVER in
# external headers that embedders (such as chromium and node) might include.
config("features") {
# Only targets in this file and its subdirs can depend on this.
visibility = [ "./*" ]
defines =
[ "V8_TYPED_ARRAY_MAX_SIZE_IN_HEAP=${v8_typed_array_max_size_in_heap}" ]
configs = [
":v8_header_features",
":cppgc_header_features",
]
if (cppgc_enable_verify_heap) {
defines += [ "CPPGC_VERIFY_HEAP" ]
}
if (cppgc_allow_allocations_in_prefinalizers) {
defines += [ "CPPGC_ALLOW_ALLOCATIONS_IN_PREFINALIZERS" ]
}
if (v8_monolithic && v8_monolithic_for_shared_library) {
defines += [ "V8_TLS_USED_IN_LIBRARY" ]
}
if (v8_enable_pointer_compression) {
if (v8_enable_pointer_compression_shared_cage) {
defines += [
"V8_CONTIGUOUS_COMPRESSED_RO_SPACE",
"V8_CONTIGUOUS_COMPRESSED_RO_SPACE_SIZE_MB=${v8_contiguous_compressed_ro_space_size_mb}",
]
} else {
defines += [ "V8_COMPRESS_POINTERS_IN_MULTIPLE_CAGES" ]
}
}
if (v8_embedder_string != "") {
defines += [ "V8_EMBEDDER_STRING=\"$v8_embedder_string\"" ]
}
if (v8_enable_disassembler || v8_log_builtins_block_count_input != "") {
defines += [ "ENABLE_DISASSEMBLER" ]
}
if (v8_log_builtins_block_count_input != "") {
defines += [ "LOG_BUILTIN_BLOCK_COUNT" ]
}
if (v8_enable_future) {
defines += [ "V8_ENABLE_FUTURE" ]
}
if (v8_enable_lite_mode) {
defines += [ "V8_LITE_MODE" ]
}
if (v8_enable_seeded_array_index_hash) {
defines += [ "V8_ENABLE_SEEDED_ARRAY_INDEX_HASH" ]
}
if (v8_enable_gdbjit) {
defines += [ "ENABLE_GDB_JIT_INTERFACE" ]
}
if (v8_enable_vtunejit) {
defines += [ "ENABLE_VTUNE_JIT_INTERFACE" ]
}
if (v8_enable_vtunetracemark) {
defines += [ "ENABLE_VTUNE_TRACEMARK" ]
}
if (v8_enable_apx_f) {
defines += [ "V8_ENABLE_APX_F" ]
}
if (v8_enable_hugepage) {
defines += [ "ENABLE_HUGEPAGE" ]
}
if (v8_enable_private_mapping_fork_optimization) {
defines += [ "V8_ENABLE_PRIVATE_MAPPING_FORK_OPTIMIZATION" ]
}
if (v8_enable_object_print) {
defines += [ "OBJECT_PRINT" ]
}
if (v8_always_enable_maglev_graph_labeller) {
defines += [ "ALWAYS_MAGLEV_GRAPH_LABELLER" ]
}
if (v8_enable_verify_heap) {
defines += [ "VERIFY_HEAP" ]
}
if (v8_enable_verify_write_barriers) {
defines += [ "V8_VERIFY_WRITE_BARRIERS" ]
}
if (v8_enable_verify_predictable) {
defines += [ "VERIFY_PREDICTABLE" ]
}
if (v8_enable_trace_maps) {
defines += [ "V8_TRACE_MAPS" ]
}
if (v8_enable_trace_unoptimized) {
defines += [ "V8_TRACE_UNOPTIMIZED" ]
}
if (v8_enable_trace_feedback_updates) {
defines += [ "V8_TRACE_FEEDBACK_UPDATES" ]
}
if (v8_enable_regexp_diagnostics) {
defines += [ "V8_ENABLE_REGEXP_DIAGNOSTICS" ]
}
if (v8_enable_test_features) {
defines += [ "V8_ENABLE_ALLOCATION_TIMEOUT" ]
defines += [ "V8_ENABLE_FORCE_SLOW_PATH" ]
defines += [ "V8_ENABLE_DOUBLE_CONST_STORE_CHECK" ]
# Expose the runtime flag --hashes-collide for fuzzing purposes (to create
# hash collisions all the time).
defines += [ "V8_HASHES_COLLIDE" ]
}
if (v8_enable_i18n_support) {
defines += [ "V8_INTL_SUPPORT" ]
}
if (v8_enable_temporal_support) {
defines += [ "V8_TEMPORAL_SUPPORT" ]
}
if (v8_enable_local_handle_zapping) {
defines += [ "ENABLE_LOCAL_HANDLE_ZAPPING" ]
}
if (v8_enable_global_handle_zapping) {
defines += [ "ENABLE_GLOBAL_HANDLE_ZAPPING" ]
}
if (v8_code_comments == true) {
defines += [ "V8_CODE_COMMENTS" ]
}
if (v8_enable_debug_code) {
defines += [ "V8_ENABLE_DEBUG_CODE" ]
if (v8_enable_verification_features) {
defines += [ "V8_ENABLE_SLOW_DEBUG_CODE_BY_DEFAULT" ]
}
}
if (v8_enable_heap_snapshot_verify) {
defines += [ "V8_ENABLE_HEAP_SNAPSHOT_VERIFY" ]
}
if (v8_enable_snapshot_native_code_counters) {
defines += [ "V8_SNAPSHOT_NATIVE_CODE_COUNTERS" ]
}
if (v8_enable_single_generation) {
defines += [ "V8_ENABLE_SINGLE_GENERATION" ]
}
if (v8_disable_write_barriers) {
defines += [ "V8_DISABLE_WRITE_BARRIERS" ]
}
if (v8_use_external_startup_data) {
defines += [ "V8_USE_EXTERNAL_STARTUP_DATA" ]
}
if (v8_enable_atomic_object_field_writes) {
defines += [ "V8_ATOMIC_OBJECT_FIELD_WRITES" ]
}
if (v8_enable_ignition_dispatch_counting) {
defines += [ "V8_IGNITION_DISPATCH_COUNTING" ]
}
if (v8_enable_lazy_source_positions) {
defines += [ "V8_ENABLE_LAZY_SOURCE_POSITIONS" ]
}
if (v8_use_siphash) {
defines += [ "V8_USE_SIPHASH" ]
}
if (v8_win64_unwinding_info) {
defines += [ "V8_WIN64_UNWINDING_INFO" ]
}
if (v8_enable_regexp_interpreter_threaded_dispatch) {
defines += [ "V8_ENABLE_REGEXP_INTERPRETER_THREADED_DISPATCH" ]
}
if (v8_enable_snapshot_compression) {
defines += [ "V8_SNAPSHOT_COMPRESSION" ]
}
if (v8_control_flow_integrity) {
defines += [ "V8_ENABLE_CONTROL_FLOW_INTEGRITY" ]
}
if (v8_enable_cet_shadow_stack) {
defines += [ "V8_ENABLE_CET_SHADOW_STACK" ]
}
if (v8_enable_cet_ibt) {
defines += [ "V8_ENABLE_CET_IBT" ]
}
if (v8_enable_memory_sealing) {
defines += [ "V8_ENABLE_MEMORY_SEALING" ]
}
if (v8_enable_wasm_gdb_remote_debugging) {
defines += [ "V8_ENABLE_WASM_GDB_REMOTE_DEBUGGING" ]
}
if (v8_enable_precise_zone_stats) {
defines += [ "V8_ENABLE_PRECISE_ZONE_STATS" ]
}
if (v8_fuzzilli) {
defines += [ "V8_FUZZILLI" ]
}
if (v8_dumpling) {
defines += [ "V8_DUMPLING" ]
}
if (v8_riscv_enable_deprecated_riscv32) {
defines += [ "V8_RISCV_ENABLE_DEPRECATED_RISCV32" ]
}
if (v8_enable_fuzztest) {
defines += [ "V8_ENABLE_FUZZTEST" ]
}
# TODO(Wenqin): Gearbox didn't work when didn't enable pointer compression,
# it's related to the deserializer, when pointer compression is disable, it
# will not call PostProcessCode method, which is the bottleneck for Gearbox
# try to fix it later.
if (v8_enable_pointer_compression && v8_enable_builtins_gearbox &&
v8_current_cpu == "x64") {
defines += [ "V8_BUILTINS_GEARBOX" ]
}
if (v8_enable_short_builtin_calls) {
defines += [ "V8_SHORT_BUILTIN_CALLS" ]
}
if (v8_enable_external_code_space) {
defines += [ "V8_EXTERNAL_CODE_SPACE" ]
}
if (v8_enable_sparkplug) {
defines += [ "V8_ENABLE_SPARKPLUG" ]
}
if (v8_enable_maglev) {
defines += [ "V8_ENABLE_MAGLEV" ]
}
if (v8_enable_turbofan) {
defines += [ "V8_ENABLE_TURBOFAN" ]
}
if (v8_jitless) {
defines += [ "V8_JITLESS" ]
}
if (v8_enable_swiss_name_dictionary) {
defines += [ "V8_ENABLE_SWISS_NAME_DICTIONARY" ]
}
if (v8_enable_system_instrumentation) {
defines += [ "V8_ENABLE_SYSTEM_INSTRUMENTATION" ]
}
if (v8_enable_etw_stack_walking) {
assert(is_win)
defines += [ "V8_ENABLE_ETW_STACK_WALKING" ]
}
if (v8_etw_guid != "") {
defines += [ "V8_ETW_GUID=\"$v8_etw_guid\"" ]
}
if (v8_enable_webassembly) {
defines += [ "V8_ENABLE_WEBASSEMBLY" ]
}
if (v8_dict_property_const_tracking) {
defines += [ "V8_DICT_PROPERTY_CONST_TRACKING" ]
}
if (v8_enable_javascript_promise_hooks) {
defines += [ "V8_ENABLE_JAVASCRIPT_PROMISE_HOOKS" ]
}
if (v8_enable_continuation_preserved_embedder_data) {
defines += [ "V8_ENABLE_CONTINUATION_PRESERVED_EMBEDDER_DATA" ]
}
if (v8_enable_allocation_folding) {
defines += [ "V8_ALLOCATION_FOLDING" ]
}
if (v8_allocation_site_tracking) {
defines += [ "V8_ALLOCATION_SITE_TRACKING" ]
}
if (v8_scriptormodule_legacy_lifetime) {
defines += [ "V8_SCRIPTORMODULE_LEGACY_LIFETIME" ]
}
if (v8_advanced_bigint_algorithms) {
defines += [ "V8_ADVANCED_BIGINT_ALGORITHMS" ]
}
if (v8_enable_drumbrake) {
defines += [ "V8_ENABLE_DRUMBRAKE" ]
if (v8_enable_drumbrake_tracing) {
defines += [ "V8_ENABLE_DRUMBRAKE_TRACING" ]
}
if (v8_drumbrake_bounds_checks) {
defines += [ "V8_DRUMBRAKE_BOUNDS_CHECKS" ]
}
}
if (v8_enable_sandbox_hardware_support) {
defines += [ "V8_ENABLE_SANDBOX_HARDWARE_SUPPORT" ]
}
if (v8_enable_memory_corruption_api) {
defines += [ "V8_ENABLE_MEMORY_CORRUPTION_API" ]
}
if (v8_enable_pointer_compression_8gb) {
defines += [ "V8_COMPRESS_POINTERS_8GB" ]
}
if (v8_enable_static_roots) {
defines += [ "V8_STATIC_ROOTS" ]
}
if (v8_enable_static_roots_generation) {
defines += [ "V8_STATIC_ROOTS_GENERATION" ]
}
if (v8_use_zlib) {
defines += [ "V8_USE_ZLIB" ]
}
if (v8_use_libm_trig_functions) {
defines += [ "V8_USE_LIBM_TRIG_FUNCTIONS" ]
}
if (v8_value_deserializer_hard_fail) {
defines += [ "V8_VALUE_DESERIALIZER_HARD_FAIL" ]
}
if (v8_enable_wasm_simd256_revec) {
defines += [ "V8_ENABLE_WASM_SIMD256_REVEC" ]
}
if (v8_enable_maglev_graph_printer) {
defines += [ "V8_ENABLE_MAGLEV_GRAPH_PRINTER" ]
}
if (v8_enable_slow_tracing) {
defines += [ "V8_ENABLE_SLOW_TRACING" ]
}
if (v8_enable_builtin_jump_table_switch) {
defines += [ "V8_ENABLE_BUILTIN_JUMP_TABLE_SWITCH" ]
}
if (v8_enable_extensible_ro_snapshot) {
defines += [ "V8_ENABLE_EXTENSIBLE_RO_SNAPSHOT" ]
}
if (v8_enable_local_off_stack_check) {
defines += [ "V8_ENABLE_LOCAL_OFF_STACK_CHECK" ]
}
if (v8_enable_black_allocated_pages) {
defines += [ "V8_ENABLE_BLACK_ALLOCATED_PAGES" ]
}
if (v8_enable_sticky_mark_bits) {
defines += [ "V8_ENABLE_STICKY_MARK_BITS" ]
}
if (v8_enable_experimental_tsa_builtins) {
defines += [ "V8_ENABLE_EXPERIMENTAL_TSA_BUILTINS" ]
}
if (v8_enable_experimental_tq_to_tsa) {
defines += [ "V8_ENABLE_EXPERIMENTAL_TQ_TO_TSA" ]
}
if (v8_enable_undefined_double) {
defines += [ "V8_ENABLE_UNDEFINED_DOUBLE" ]
}
if (v8_enable_partition_alloc) {
defines += [ "V8_ENABLE_PARTITION_ALLOC" ]
}
if (v8_wasm_random_fuzzers) {
defines += [ "V8_WASM_RANDOM_FUZZERS" ]
}
if (v8_lower_limits_mode) {
defines += [ "V8_LOWER_LIMITS_MODE" ]
}
if (v8_target_is_simulator) {
defines += [ "USE_SIMULATOR" ]
}
if (v8_function_arguments_caller_are_own_props) {
defines += [ "V8_FUNCTION_ARGUMENTS_CALLER_ARE_OWN_PROPS" ]
}
}
config("toolchain") {
# Only targets in this file and its subdirs can depend on this.
visibility = [ "./*" ]
defines = []
cflags = []
ldflags = []
if (v8_current_cpu == "arm") {
defines += [
"V8_TARGET_ARCH_ARM",
# TODO(arm): Now that we always require v7+ and neon, we can simplify the
# code and then stop defining these.
"CAN_USE_ARMV7_INSTRUCTIONS",
"CAN_USE_VFP3_INSTRUCTIONS",
"CAN_USE_VFP32DREGS",
"CAN_USE_NEON",
]
# TODO(infra): Add support for arm_test_noprobe.
if (current_cpu != "arm") {
# These defines ares used for the ARM simulator.
if (arm_float_abi == "hard") {
defines += [ "USE_EABI_HARDFLOAT=1" ]
} else if (arm_float_abi == "softfp") {
defines += [ "USE_EABI_HARDFLOAT=0" ]
}
}
}
if (v8_current_cpu == "arm64") {
defines += [ "V8_TARGET_ARCH_ARM64" ]
if (current_cpu == "arm64" && v8_control_flow_integrity && is_clang) {
# Mark assembly code as BTI-compatible.
asmflags = [ "-mmark-bti-property" ]
}
}
# Mips64el simulators.
if (v8_target_is_simulator && v8_current_cpu == "mips64el") {
defines += [ "_MIPS_TARGET_SIMULATOR" ]
}
if (v8_current_cpu == "mips64el" || v8_current_cpu == "mips64") {
defines += [ "V8_TARGET_ARCH_MIPS64" ]
if (v8_can_use_fpu_instructions) {
defines += [ "CAN_USE_FPU_INSTRUCTIONS" ]
}
if (mips_use_msa) {
defines += [ "_MIPS_MSA" ]
}
if (host_byteorder == "little") {
defines += [ "V8_TARGET_ARCH_MIPS64_LE" ]
} else if (host_byteorder == "big") {
defines += [ "V8_TARGET_ARCH_MIPS64_BE" ]
}
if (v8_use_mips_abi_hardfloat) {
defines += [
"__mips_hard_float=1",
"CAN_USE_FPU_INSTRUCTIONS",
]
} else {
defines += [ "__mips_soft_float=1" ]
}
if (mips_arch_variant == "r6") {
defines += [ "_MIPS_ARCH_MIPS64R6" ]
} else if (mips_arch_variant == "r2") {
defines += [ "_MIPS_ARCH_MIPS64R2" ]
}
}
# loong64 simulators.
if (v8_target_is_simulator && v8_current_cpu == "loong64") {
defines += [ "_LOONG64_TARGET_SIMULATOR" ]
}
if (v8_current_cpu == "loong64") {
defines += [ "V8_TARGET_ARCH_LOONG64" ]
}
if (v8_current_cpu == "s390x") {
cflags += [ "-ffp-contract=off" ]
defines += [ "V8_TARGET_ARCH_S390X" ]
if (host_byteorder == "little") {
defines += [ "V8_TARGET_ARCH_S390X_LE_SIM" ]
} else if (!v8_target_is_simulator && current_os != "zos") {
cflags += [ "-march=z14" ]
}
}
if (v8_current_cpu == "ppc64") {
defines += [ "V8_TARGET_ARCH_PPC64" ]
cflags += [ "-ffp-contract=off" ]
if (current_os == "aix" && !is_clang) {
cflags += [
# Work around AIX ceil, trunc and round oddities.
"-mcpu=power5+",
"-mfprnd",
# Work around AIX assembler popcntb bug.
"-mno-popcntb",
]
} else if (!v8_target_is_simulator) {
cflags += [ "-mcpu=pwr9" ]
}
}
if (v8_current_cpu == "riscv64" || v8_current_cpu == "riscv32") {
if (v8_target_is_simulator) {
defines += [ "RISCV_TARGET_SIMULATOR" ]
}
if (riscv_use_rvv || v8_target_is_simulator) {
defines += [ "CAN_USE_RVV_INSTRUCTIONS" ]
defines += [ "RVV_VLEN=${riscv_rvv_vlen}" ]
}
if (riscv_use_zicfiss) {
defines += [ "V8_ENABLE_RISCV_SHADOW_STACK" ]
}
if (riscv_use_zicond) {
defines += [ "__riscv_zicond" ]
}
if (riscv_use_zba) {
defines += [ "__riscv_zba" ]
}
if (riscv_use_zbb) {
defines += [ "__riscv_zbb" ]
}
if (riscv_use_zbs) {
defines += [ "__riscv_zbs" ]
}
defines += [ "RISCV_CODE_ALIGNMENT=${riscv_code_alignment}" ]
defines +=
[ "RISCV_CONSTANT_POOL_ALIGNMENT=${riscv_constant_pool_alignment}" ]
}
if (v8_current_cpu == "riscv64") {
defines += [ "V8_TARGET_ARCH_RISCV64" ]
# When building the simulator, the compiler does not provide __riscv_xlen,
# so we explicitly define it here.
if (v8_target_is_simulator) {
defines += [ "__riscv_xlen=64" ]
}
if (!is_clang) {
cflags += [ "-ffp-contract=off" ]
}
if (riscv_use_sv39) {
defines += [ "RISCV_USE_SV39" ]
}
}
if (v8_current_cpu == "riscv32") {
defines += [ "V8_TARGET_ARCH_RISCV32" ]
# When building the simulator, the compiler does not provide __riscv_xlen,
# so we explicitly define it here.
if (v8_target_is_simulator) {
defines += [ "__riscv_xlen=32" ]
}
}
if (v8_current_cpu == "x86") {
defines += [ "V8_TARGET_ARCH_IA32" ]
if (is_win) {
# Ensure no surprising artifacts from 80bit double math with x86.
cflags += [ "/arch:SSE2" ]
}
}
if (v8_current_cpu == "x64") {
defines += [ "V8_TARGET_ARCH_X64" ]
if (is_win) {
# Increase the initial stack size. The default is 1MB, this is 2MB. This
# applies only to executables and shared libraries produced by V8 since
# ldflags are not pushed to dependants.
ldflags += [ "/STACK:2097152" ]
}
}
if (is_android && v8_android_log_stdout) {
defines += [ "V8_ANDROID_LOG_STDOUT" ]
}
# TODO(infra): Support v8_enable_prof on Windows.
# TODO(infra): Add support for compiling with simulators.
if (v8_enable_verification_features || v8_dcheck_always_on) {
defines += [ "DEBUG" ]
if (v8_enable_slow_dchecks) {
defines += [ "ENABLE_SLOW_DCHECKS" ]
}
} else {
defines += [ "NDEBUG" ]
}
if (v8_enable_verify_csa) {
defines += [ "ENABLE_VERIFY_CSA" ]
}
if (v8_enable_runtime_call_stats) {
defines += [ "V8_RUNTIME_CALL_STATS" ]
}
if (v8_no_inline) {
if (is_win) {
cflags += [ "/Ob0" ]
} else {
cflags += [
"-fno-inline-functions",
"-fno-inline",
]
}
}
if (is_clang) {
cflags += [ "-Wunreachable-code" ]
if ((v8_current_cpu != "x64" && v8_current_cpu != "ia32") ||
target_os == "chromeos") {
# On arm/arm64, `pc` and `sp` are register names but are also very often
# used as function parameters, causing shadowing. So, we only enable
# -Wshadow on x64 and ia32.
#
# Use target_os == "chromeos" instead of `is_chromeos` to check for
# ChromeOS because `generate_bytecode_builtins_list` builds using
# `v8_generator_toolchain`, which is the host toolchain and `is_chromeos`
# will be false even when building for ChromeOS.
cflags += [ "-Wno-shadow" ]
}
# TODO(fuchsia:127411): Re-enable once FIDL bindings are compatible.
if (!is_fuchsia) {
# Google3 enables this warning, so we should also enable it to find issue
# earlier. See https://reviews.llvm.org/D56731 for details about this
# warning.
cflags += [ "-Wctad-maybe-unsupported" ]
}
if (is_clang && use_cppgc_clang_plugin && clang_use_chrome_plugins) {
# The plugin is built directly into clang, so there's no need to load it
# dynamically.
cflags += [
"-Xclang",
"-add-plugin",
"-Xclang",
"blink-gc-plugin",
]
}
}
cflags += [
# Disable warnings about offsetof being used on non-standard-layout types.
# offsetof is only specified for standard-layout types, but its behaviour
# on non-standard-layout types is implementation defined (rather than UB),
# and our supported compilers have the expected reasonable behaviour.
"-Wno-invalid-offsetof",
]
if (!is_clang) {
cflags += [
# Disable gcc warnings for optimizations based on the assumption that
# signed overflow does not occur. Generates false positives (see
# http://crbug.com/v8/6341).
"-Wno-strict-overflow",
# GCC assumes that control can get past an exhaustive switch and then
# warns if there's no return there (see https://crbug.com/v8/7658).
"-Wno-return-type",
# Disable gcc warnings for using enum constant in boolean context.
# https://gcc.gnu.org/bugzilla/show_bug.cgi?id=97266
"-Wno-int-in-bool-context",
# Disable gcc deprecation warnings, which are firing on implicit capture
# of `this` in capture-by-value lambdas and preventing a build roll which
# enables C++20 (see https://crbug.com/1374227).
"-Wno-deprecated",
# Fix build with older versions of GCC
# Ported from v8 bazel: https://crrev.com/c/3368869
"-Wno-stringop-overflow",
# Fix a number of bogus errors with gcc12
# TODO(miladfarca): re-evaluate for future gcc upgrades
# https://gcc.gnu.org/bugzilla/show_bug.cgi?id=111499
"-Wno-stringop-overread",
# https://gcc.gnu.org/bugzilla/show_bug.cgi?id=104336
"-Wno-restrict",
# https://gcc.gnu.org/bugzilla/show_bug.cgi?id=105523
"-Wno-array-bounds",
# https://gcc.gnu.org/bugzilla/show_bug.cgi?id=108517
"-Wno-nonnull",
# Disable dangling pointer warnings, which are often false positives when
# using scopes.
"-Wno-dangling-pointer",
]
}
# Chromium uses a hand-picked subset of UBSan coverage. We want everything.
if (is_ubsan) {
cflags += [ "-fsanitize=undefined" ]
}
}
config("strict_warnings") {
cflags = []
if (is_clang) {
if (v8_current_cpu == "x64" || v8_current_cpu == "arm64" ||
v8_current_cpu == "mips64el" || v8_current_cpu == "riscv64") {
cflags += [ "-Wshorten-64-to-32" ]
}
cflags += [
"-Wmissing-field-initializers",
"-Wunnecessary-virtual-specifier",
]
}
}
# For code that is hot during mksnapshot. In fast-mksnapshot builds, we
# optimize some files even in debug builds to speed up mksnapshot times.
config("always_turbofanimize") {
configs = [ ":internal_config" ]
# TODO(crbug.com/621335) Rework this so that we don't have the confusion
# between "optimize_speed" and "optimize_max".
if (((is_posix && !is_android) || is_fuchsia || is_win) && !using_sanitizer) {
configs += [ "//build/config/compiler:optimize_speed" ]
} else {
configs += [ "//build/config/compiler:optimize_max" ]
}
}
# Sanitizer defines. V8 will inherit a default `-fsanitize=array-bounds`
# from Chromium's `//build/config/`, which prevents clean usage of
# `__has_feature(undefined_behavior_sanitizer)` in the short term,
# until something like `--lie-about-ubsan-enablement=array-bounds`
# can be implemented.
#
# This config provides a clear signal of "are we sanitizing" tied to
# GN configuration.
#
# See also: https://crbug.com/386992829
config("sanitizer_defines") {
defines = []
if (is_asan) {
defines += [ "V8_USE_ADDRESS_SANITIZER" ]
}
if (is_hwasan) {
defines += [ "V8_USE_HWADDRESS_SANITIZER" ]
}
if (is_msan) {
defines += [ "V8_USE_MEMORY_SANITIZER" ]
}
if (is_ubsan) {
defines += [ "V8_USE_UNDEFINED_BEHAVIOR_SANITIZER" ]
}
}
###############################################################################
# Actions
#
# Only for Windows clang builds. Converts the embedded.S file produced by
# mksnapshot into an embedded.cc file with corresponding inline assembly.
template("asm_to_inline_asm") {
name = target_name
if (name == "default") {
suffix = ""
} else {
suffix = "_$name"
}
action("asm_to_inline_asm_" + name) {
visibility = [ ":*" ] # Only targets in this file can depend on this.
assert(emit_builtins_as_inline_asm)
script = "tools/snapshot/asm_to_inline_asm.py"
deps = [ ":run_mksnapshot_" + name ]
sources = [ "$target_gen_dir/embedded${suffix}.S" ]
outputs = [ "$target_gen_dir/embedded${suffix}.cc" ]
args = invoker.args
args += [
rebase_path("$target_gen_dir/embedded${suffix}.S", root_build_dir),
rebase_path("$target_gen_dir/embedded${suffix}.cc", root_build_dir),
]
}
}
if (v8_postmortem_support) {
action("postmortem-metadata") {
# Only targets in this file can depend on this.
visibility = [ ":*" ]
script = "tools/gen-postmortem-metadata.py"
# NOSORT
inputs = [
"$target_gen_dir/torque-generated/instance-types.h",
"src/objects/allocation-site.h",
"src/objects/allocation-site-inl.h",
"src/objects/cell.h",
"src/objects/cell-inl.h",
"src/objects/dependent-code.h",
"src/objects/dependent-code-inl.h",
"src/objects/bytecode-array.h",
"src/objects/bytecode-array-inl.h",
"src/objects/abstract-code.h",
"src/objects/abstract-code-inl.h",
"src/objects/instruction-stream.h",
"src/objects/instruction-stream-inl.h",
"src/objects/casting.h",
"src/objects/casting-inl.h",
"src/objects/code.h",
"src/objects/code-inl.h",
"src/objects/cpp-heap-external-object.h",
"src/objects/cpp-heap-external-object-inl.h",
"src/objects/cpp-heap-object-wrapper.h",
"src/objects/cpp-heap-object-wrapper-inl.h",
"src/objects/data-handler.h",
"src/objects/data-handler-inl.h",
"src/objects/deoptimization-data.h",
"src/objects/deoptimization-data-inl.h",
"src/objects/descriptor-array.h",
"src/objects/descriptor-array-inl.h",
"src/objects/feedback-cell.h",
"src/objects/feedback-cell-inl.h",
"src/objects/fixed-array.h",
"src/objects/fixed-array-inl.h",
"src/objects/heap-number.h",
"src/objects/heap-number-inl.h",
"src/objects/heap-object.h",
"src/objects/heap-object-inl.h",
"src/objects/instance-type.h",
"src/objects/instance-type-checker.h",
"src/objects/instance-type-inl.h",
"src/objects/js-array-buffer.h",
"src/objects/js-array-buffer-inl.h",
"src/objects/js-array.h",
"src/objects/js-array-inl.h",
"src/objects/js-function-inl.h",
"src/objects/js-function.cc",
"src/objects/js-function.h",
"src/objects/js-objects.cc",
"src/objects/js-objects.h",
"src/objects/js-objects-inl.h",
"src/objects/js-promise.h",
"src/objects/js-promise-inl.h",
"src/objects/js-raw-json.cc",
"src/objects/js-raw-json.h",
"src/objects/js-raw-json-inl.h",
"src/objects/js-regexp.cc",
"src/objects/js-regexp.h",
"src/objects/js-regexp-inl.h",
"src/objects/js-regexp-string-iterator.h",
"src/objects/js-regexp-string-iterator-inl.h",
"src/objects/map.cc",
"src/objects/map.h",
"src/objects/map-inl.h",
"src/objects/megadom-handler.h",
"src/objects/megadom-handler-inl.h",
"src/objects/name.h",
"src/objects/name-inl.h",
"src/objects/number-string-cache.h",
"src/objects/number-string-cache-inl.h",
"src/objects/objects.h",
"src/objects/objects-inl.h",
"src/objects/oddball.h",
"src/objects/oddball-inl.h",
"src/objects/primitive-heap-object.h",
"src/objects/primitive-heap-object-inl.h",
"src/objects/scope-info.h",
"src/objects/scope-info-inl.h",
"src/objects/script.cc",
"src/objects/script.h",
"src/objects/script-inl.h",
"src/objects/shared-function-info.cc",
"src/objects/shared-function-info.h",
"src/objects/shared-function-info-inl.h",
"src/objects/string.cc",
"src/objects/string-comparator.cc",
"src/objects/string-comparator.h",
"src/objects/string.h",
"src/objects/string-inl.h",
"src/objects/struct.h",
"src/objects/struct-inl.h",
"src/objects/tagged.h",
"src/objects/union.h",
]
outputs = [ "$target_gen_dir/debug-support.cc" ]
args = rebase_path(outputs, root_build_dir) +
rebase_path(inputs, root_build_dir)
deps = [ ":run_torque" ]
}
}
torque_files = [
"src/builtins/aggregate-error.tq",
"src/builtins/array-at.tq",
"src/builtins/array-concat.tq",
"src/builtins/array-copywithin.tq",
"src/builtins/array-every.tq",
"src/builtins/array-filter.tq",
"src/builtins/array-find.tq",
"src/builtins/array-findindex.tq",
"src/builtins/array-findlast.tq",
"src/builtins/array-findlastindex.tq",
"src/builtins/array-flat.tq",
"src/builtins/array-foreach.tq",
"src/builtins/array-from-async.tq",
"src/builtins/array-from.tq",
"src/builtins/array-isarray.tq",
"src/builtins/array-join.tq",
"src/builtins/array-lastindexof.tq",
"src/builtins/array-map.tq",
"src/builtins/array-of.tq",
"src/builtins/array-reduce-right.tq",
"src/builtins/array-reduce.tq",
"src/builtins/array-reverse.tq",
"src/builtins/array-shift.tq",
"src/builtins/array-slice.tq",
"src/builtins/array-some.tq",
"src/builtins/array-splice.tq",
"src/builtins/array-to-reversed.tq",
"src/builtins/array-to-sorted.tq",
"src/builtins/array-to-spliced.tq",
"src/builtins/array-unshift.tq",
"src/builtins/array-with.tq",
"src/builtins/array.tq",
"src/builtins/arraybuffer.tq",
"src/builtins/base.tq",
"src/builtins/boolean.tq",
"src/builtins/builtins-bigint.tq",
"src/builtins/builtins-string.tq",
"src/builtins/cast.tq",
"src/builtins/collections.tq",
"src/builtins/constructor.tq",
"src/builtins/conversion.tq",
"src/builtins/convert.tq",
"src/builtins/console.tq",
"src/builtins/data-view.tq",
"src/builtins/finalization-registry.tq",
"src/builtins/frames.tq",
"src/builtins/frame-arguments.tq",
"src/builtins/function.tq",
"src/builtins/growable-fixed-array.tq",
"src/builtins/ic-callable.tq",
"src/builtins/ic.tq",
"src/builtins/internal-coverage.tq",
"src/builtins/internal.tq",
"src/builtins/iterator.tq",
"src/builtins/iterator-from.tq",
"src/builtins/iterator-helpers.tq",
"src/builtins/map-groupby.tq",
"src/builtins/math.tq",
"src/builtins/number.tq",
"src/builtins/object-fromentries.tq",
"src/builtins/object-groupby.tq",
"src/builtins/object.tq",
"src/builtins/promise-abstract-operations.tq",
"src/builtins/promise-all.tq",
"src/builtins/promise-all-element-closure.tq",
"src/builtins/promise-any.tq",
"src/builtins/promise-constructor.tq",
"src/builtins/promise-finally.tq",
"src/builtins/promise-jobs.tq",
"src/builtins/promise-misc.tq",
"src/builtins/promise-race.tq",
"src/builtins/promise-reaction-job.tq",
"src/builtins/promise-resolve.tq",
"src/builtins/promise-then.tq",
"src/builtins/promise-try.tq",
"src/builtins/promise-withresolvers.tq",
"src/builtins/proxy-constructor.tq",
"src/builtins/proxy-delete-property.tq",
"src/builtins/proxy-get-property.tq",
"src/builtins/proxy-get-prototype-of.tq",
"src/builtins/proxy-has-property.tq",
"src/builtins/proxy-is-extensible.tq",
"src/builtins/proxy-prevent-extensions.tq",
"src/builtins/proxy-revocable.tq",
"src/builtins/proxy-revoke.tq",
"src/builtins/proxy-set-property.tq",
"src/builtins/proxy-set-prototype-of.tq",
"src/builtins/proxy.tq",
"src/builtins/reflect.tq",
"src/builtins/regexp-exec.tq",
"src/builtins/regexp-match-all.tq",
"src/builtins/regexp-match.tq",
"src/builtins/regexp-replace.tq",
"src/builtins/regexp-search.tq",
"src/builtins/regexp-source.tq",
"src/builtins/regexp-split.tq",
"src/builtins/regexp-test.tq",
"src/builtins/regexp.tq",
"src/builtins/set-difference.tq",
"src/builtins/set-intersection.tq",
"src/builtins/set-is-disjoint-from.tq",
"src/builtins/set-is-subset-of.tq",
"src/builtins/set-is-superset-of.tq",
"src/builtins/set-symmetric-difference.tq",
"src/builtins/set-union.tq",
"src/builtins/string-at.tq",
"src/builtins/string-endswith.tq",
"src/builtins/string-html.tq",
"src/builtins/string-includes.tq",
"src/builtins/string-indexof.tq",
"src/builtins/string-iswellformed.tq",
"src/builtins/string-iterator.tq",
"src/builtins/string-match-search.tq",
"src/builtins/string-pad.tq",
"src/builtins/string-repeat.tq",
"src/builtins/string-replaceall.tq",
"src/builtins/string-slice.tq",
"src/builtins/string-startswith.tq",
"src/builtins/string-substr.tq",
"src/builtins/string-substring.tq",
"src/builtins/string-towellformed.tq",
"src/builtins/string-trim.tq",
"src/builtins/suppressed-error.tq",
"src/builtins/symbol.tq",
"src/builtins/torque-internal.tq",
"src/builtins/typed-array-at.tq",
"src/builtins/typed-array-createtypedarray.tq",
"src/builtins/typed-array-every.tq",
"src/builtins/typed-array-entries.tq",
"src/builtins/typed-array-filter.tq",
"src/builtins/typed-array-find.tq",
"src/builtins/typed-array-findindex.tq",
"src/builtins/typed-array-findlast.tq",
"src/builtins/typed-array-findlastindex.tq",
"src/builtins/typed-array-foreach.tq",
"src/builtins/typed-array-from.tq",
"src/builtins/typed-array-keys.tq",
"src/builtins/typed-array-of.tq",
"src/builtins/typed-array-reduce.tq",
"src/builtins/typed-array-reduceright.tq",
"src/builtins/typed-array-set.tq",
"src/builtins/typed-array-slice.tq",
"src/builtins/typed-array-some.tq",
"src/builtins/typed-array-sort.tq",
"src/builtins/typed-array-subarray.tq",
"src/builtins/typed-array-to-reversed.tq",
"src/builtins/typed-array-to-sorted.tq",
"src/builtins/typed-array-values.tq",
"src/builtins/typed-array-with.tq",
"src/builtins/typed-array.tq",
"src/builtins/weak-ref.tq",
"src/ic/handler-configuration.tq",
"src/objects/allocation-site.tq",
"src/objects/api-callbacks.tq",
"src/objects/arguments.tq",
"src/objects/bigint.tq",
"src/objects/call-site-info.tq",
"src/objects/cell.tq",
"src/objects/bytecode-array.tq",
"src/objects/contexts.tq",
"src/objects/cpp-heap-external-object.tq",
"src/objects/data-handler.tq",
"src/objects/debug-objects.tq",
"src/objects/descriptor-array.tq",
"src/objects/embedder-data-array.tq",
"src/objects/feedback-cell.tq",
"src/objects/feedback-vector.tq",
"src/objects/fixed-array.tq",
"src/objects/foreign.tq",
"src/objects/free-space.tq",
"src/objects/heap-number.tq",
"src/objects/heap-object.tq",
"src/objects/js-array-buffer.tq",
"src/objects/js-array.tq",
"src/objects/js-atomics-synchronization.tq",
"src/objects/js-collection-iterator.tq",
"src/objects/js-collection.tq",
"src/objects/js-disposable-stack.tq",
"src/objects/js-function.tq",
"src/objects/js-generator.tq",
"src/objects/js-iterator-helpers.tq",
"src/objects/js-objects.tq",
"src/objects/js-promise.tq",
"src/objects/js-proxy.tq",
"src/objects/js-raw-json.tq",
"src/objects/js-regexp-string-iterator.tq",
"src/objects/js-regexp.tq",
"src/objects/js-shadow-realm.tq",
"src/objects/js-shared-array.tq",
"src/objects/js-struct.tq",
"src/objects/js-weak-refs.tq",
"src/objects/literal-objects.tq",
"src/objects/map.tq",
"src/objects/megadom-handler.tq",
"src/objects/microtask.tq",
"src/objects/module.tq",
"src/objects/name.tq",
"src/objects/oddball.tq",
"src/objects/hole.tq",
"src/objects/trusted-object.tq",
"src/objects/ordered-hash-table.tq",
"src/objects/primitive-heap-object.tq",
"src/objects/promise.tq",
"src/objects/property-array.tq",
"src/objects/property-cell.tq",
"src/objects/property-descriptor-object.tq",
"src/objects/prototype-info.tq",
"src/objects/regexp-match-info.tq",
"src/objects/scope-info.tq",
"src/objects/script.tq",
"src/objects/shared-function-info.tq",
"src/objects/source-text-module.tq",
"src/objects/string.tq",
"src/objects/struct.tq",
"src/objects/swiss-hash-table-helpers.tq",
"src/objects/swiss-name-dictionary.tq",
"src/objects/synthetic-module.tq",
"src/objects/template-objects.tq",
"src/objects/templates.tq",
"src/objects/torque-defined-classes.tq",
"src/objects/turbofan-types.tq",
"src/objects/turboshaft-types.tq",
"test/torque/test-torque.tq",
"third_party/v8/builtins/array-sort.tq",
]
if (v8_enable_i18n_support) {
torque_files += [
"src/objects/intl-objects.tq",
"src/objects/js-break-iterator.tq",
"src/objects/js-collator.tq",
"src/objects/js-date-time-format.tq",
"src/objects/js-display-names.tq",
"src/objects/js-duration-format.tq",
"src/objects/js-list-format.tq",
"src/objects/js-locale.tq",
"src/objects/js-number-format.tq",
"src/objects/js-plural-rules.tq",
"src/objects/js-relative-time-format.tq",
"src/objects/js-segment-iterator.tq",
"src/objects/js-segmenter.tq",
"src/objects/js-segments.tq",
]
}
if (v8_enable_temporal_support) {
torque_files += [ "src/objects/js-temporal-objects.tq" ]
}
if (v8_enable_webassembly) {
torque_files += [
"src/builtins/js-to-js.tq",
"src/builtins/js-to-wasm.tq",
"src/builtins/wasm.tq",
"src/builtins/wasm-strings.tq",
"src/builtins/wasm-to-js.tq",
"src/debug/debug-wasm-objects.tq",
"src/wasm/wasm-objects.tq",
]
}
if (v8_enable_experimental_tq_to_tsa) {
template("run_torque_to_tsa") {
if (target_name == "") {
suffix = ""
} else {
suffix = "_$target_name"
}
toolchain = invoker.toolchain
action("run_torque_to_tsa" + suffix) {
visibility = [
":*",
"test/cctest/:*",
"tools/debug_helper/:*",
"tools/gcmole/:*",
]
deps = [ ":torque($toolchain)" ]
if (is_msan) {
configs = [
"//third_party/instrumented_libs:msan_runtime_libs($host_toolchain)",
]
deps += [ "//third_party/instrumented_libs:ld-linux($host_toolchain)" ]
}
script = "tools/run.py"
sources = torque_files
destination_folder = "$target_gen_dir/torque-generated$suffix"
outputs = []
foreach(file, torque_files) {
filetq = string_replace(file, ".tq", "-tq")
outputs += [
"$destination_folder/$filetq-tsa.cc",
"$destination_folder/$filetq-tsa.h",
]
}
args = [
"./" + rebase_path(get_label_info(":torque($toolchain)",
"root_out_dir") + "/torque",
root_build_dir),
"-o",
rebase_path("$destination_folder", root_build_dir),
"-v8-root",
rebase_path(".", root_build_dir),
"-output-tsa",
]
if (v8_annotate_torque_ir) {
args += [ "-annotate-ir" ]
}
if (defined(invoker.args)) {
args += invoker.args
}
args += torque_files
}
}
# Default run_torque_to_tsa action
run_torque_to_tsa("") {
toolchain = v8_generator_toolchain
}
}
# Template for running torque
# When building with v8_verify_torque_generation_invariance=true we need
# to be able to run torque for both 32 and 64 bits in the same build
template("run_torque") {
if (target_name == "") {
suffix = ""
} else {
suffix = "_$target_name"
}
toolchain = invoker.toolchain
action("run_torque" + suffix) {
visibility = [
":*",
"test/cctest/:*",
"tools/debug_helper/:*",
"tools/gcmole/:*",
]
deps = [ ":torque($toolchain)" ]
if (is_msan) {
configs = [
"//third_party/instrumented_libs:msan_runtime_libs($host_toolchain)",
]
deps += [ "//third_party/instrumented_libs:ld-linux($host_toolchain)" ]
}
script = "tools/run.py"
sources = torque_files
destination_folder = "$target_gen_dir/torque-generated$suffix"
outputs = [
"$destination_folder/bit-fields.h",
"$destination_folder/builtin-definitions.h",
"$destination_folder/class-debug-readers.cc",
"$destination_folder/class-debug-readers.h",
"$destination_folder/class-forward-declarations.h",
"$destination_folder/class-verifiers.cc",
"$destination_folder/class-verifiers.h",
"$destination_folder/csa-types.h",
"$destination_folder/debug-macros.cc",
"$destination_folder/debug-macros.h",
"$destination_folder/enum-verifiers.cc",
"$destination_folder/exported-macros-assembler.cc",
"$destination_folder/exported-macros-assembler.h",
"$destination_folder/factory.cc",
"$destination_folder/factory.inc",
"$destination_folder/instance-types.h",
"$destination_folder/interface-descriptors.inc",
"$destination_folder/objects-body-descriptors-inl.inc",
"$destination_folder/objects-printer.cc",
"$destination_folder/visitor-lists.h",
]
foreach(file, torque_files) {
filetq = string_replace(file, ".tq", "-tq")
outputs += [
"$destination_folder/$filetq-csa.cc",
"$destination_folder/$filetq-csa.h",
"$destination_folder/$filetq-inl.inc",
"$destination_folder/$filetq.cc",
"$destination_folder/$filetq.inc",
]
}
args = [
"./" + rebase_path(
get_label_info(":torque($toolchain)", "root_out_dir") + "/torque",
root_build_dir),
"-o",
rebase_path("$destination_folder", root_build_dir),
"-v8-root",
rebase_path(".", root_build_dir),
]
if (v8_annotate_torque_ir) {
args += [ "-annotate-ir" ]
}
if (defined(invoker.args)) {
args += invoker.args
}
args += torque_files
}
}
# Default run_torque action
run_torque("") {
toolchain = v8_generator_toolchain
}
if (v8_verify_torque_generation_invariance) {
run_torque("x86") {
toolchain = "//build/toolchain/linux:clang_x86"
}
run_torque("x64") {
args = [ "-m32" ]
toolchain = "//build/toolchain/linux:clang_x64"
}
action("compare_torque_runs") {
deps = [
":run_torque_x64",
":run_torque_x86",
]
report_file = "$target_gen_dir/torque_comparison_results.txt"
script = "tools/compare_torque_output.py"
args = [
rebase_path("$target_gen_dir/torque-generated_x64", root_build_dir),
rebase_path("$target_gen_dir/torque-generated_x86", root_build_dir),
rebase_path(report_file, root_build_dir),
]
outputs = [ report_file ]
}
}
group("v8_maybe_icu") {
if (v8_enable_i18n_support) {
public_deps = [ v8_icu_path ]
}
}
group("v8_maybe_temporal") {
if (v8_enable_temporal_support) {
public_deps = [ "//third_party/rust/temporal_capi" ]
}
}
group("v8_abseil") {
public_deps = [ "//third_party/abseil-cpp:absl" ]
public_configs = [
"//third_party/abseil-cpp:absl_define_config",
"//third_party/abseil-cpp:absl_include_config",
]
}
group("zoslib") {
if (current_os == "zos") {
deps = [ "//third_party/zoslib" ]
}
}
v8_header_set("torque_runtime_support") {
visibility = [ ":*" ]
sources = [ "src/torque/runtime-support.h" ]
configs = [ ":internal_config" ]
}
v8_source_set("torque_generated_initializers") {
visibility = [ ":*" ] # Only targets in this file can depend on this.
deps = [
":generate_bytecode_builtins_list",
":run_torque",
":v8_base_without_compiler",
":v8_maybe_temporal",
":v8_tracing",
]
if (v8_enable_experimental_tq_to_tsa) {
deps += [ ":run_torque_to_tsa" ]
}
public_deps = [
":torque_runtime_support",
":v8_abseil",
":v8_maybe_icu",
]
sources = [
"$target_gen_dir/torque-generated/csa-types.h",
"$target_gen_dir/torque-generated/enum-verifiers.cc",
"$target_gen_dir/torque-generated/exported-macros-assembler.cc",
"$target_gen_dir/torque-generated/exported-macros-assembler.h",
]
foreach(file, torque_files) {
filetq = string_replace(file, ".tq", "-tq")
sources += [
"$target_gen_dir/torque-generated/$filetq-csa.cc",
"$target_gen_dir/torque-generated/$filetq-csa.h",
]
if (v8_enable_experimental_tq_to_tsa) {
sources += [
"$target_gen_dir/torque-generated/$filetq-tsa.cc",
"$target_gen_dir/torque-generated/$filetq-tsa.h",
]
}
}
configs = [ ":internal_config" ]
if (v8_symbol_level > 1) {
# Symbols cause huge compile time on some bigger torque files, see
# https://crbug.com/1472715. Thus remove any symbol configs added in v8.gni
# and instead add the "minimal_symbols" config.
v8_add_configs -=
filter_include(v8_add_configs, [ "//build/config/compiler:*symbols" ])
if (v8_symbol_level == symbol_level) {
v8_remove_configs += [ "//build/config/compiler:default_symbols" ]
}
configs += [ "//build/config/compiler:minimal_symbols" ]
}
}
v8_source_set("torque_generated_definitions") {
visibility = [ ":*" ] # Only targets in this file can depend on this.
deps = [
":generate_bytecode_builtins_list",
":run_torque",
":v8_internal_headers",
":v8_libbase",
":v8_maybe_temporal",
":v8_tracing",
]
if (v8_enable_experimental_tq_to_tsa) {
deps += [ ":run_torque_to_tsa" ]
}
public_deps = [
":v8_abseil",
":v8_maybe_icu",
]
sources = [
"$target_gen_dir/torque-generated/class-forward-declarations.h",
"$target_gen_dir/torque-generated/class-verifiers.cc",
"$target_gen_dir/torque-generated/class-verifiers.h",
"$target_gen_dir/torque-generated/factory.cc",
"$target_gen_dir/torque-generated/objects-printer.cc",
]
foreach(file, torque_files) {
filetq = string_replace(file, ".tq", "-tq")
sources += [
"$target_gen_dir/torque-generated/$filetq-inl.inc",
"$target_gen_dir/torque-generated/$filetq.cc",
"$target_gen_dir/torque-generated/$filetq.inc",
]
}
configs = [ ":internal_config" ]
}
action("generate_bytecode_builtins_list") {
script = "tools/run.py"
outputs = [ "$target_gen_dir/builtins-generated/bytecodes-builtins-list.h" ]
deps = [ ":bytecode_builtins_list_generator($v8_generator_toolchain)" ]
args = [
"./" + rebase_path(
get_label_info(
":bytecode_builtins_list_generator($v8_generator_toolchain)",
"root_out_dir") + "/bytecode_builtins_list_generator",
root_build_dir),
rebase_path("$target_gen_dir/builtins-generated/bytecodes-builtins-list.h",
root_build_dir),
]
}
# Template to generate different V8 snapshots based on different runtime flags.
# Can be invoked with run_mksnapshot(<name>). The target will resolve to
# run_mksnapshot_<name>. If <name> is "default", no file suffixes will be used.
# Otherwise files are suffixed, e.g. embedded_<name>.S and
# snapshot_blob_<name>.bin.
#
# The template exposes the variables:
# args: additional flags for mksnapshots
# embedded_suffix: a camel case suffix for method names in the embedded
# snapshot.
template("run_mksnapshot") {
name = target_name
if (name == "default") {
suffix = ""
} else {
suffix = "_$name"
}
action("run_mksnapshot_" + name) {
deps = [ ":mksnapshot($v8_snapshot_toolchain)" ]
if (v8_verify_deterministic_mksnapshot) {
# We archive the snapshot executable when verifying snapshot
# determinism to ease debugging.
data_deps = [ ":mksnapshot($v8_snapshot_toolchain)" ]
}
if (is_msan) {
configs = [
"//third_party/instrumented_libs:msan_runtime_libs($host_toolchain)",
]
deps += [ "//third_party/instrumented_libs:ld-linux($host_toolchain)" ]
}
script = "tools/run.py"
sources = []
if (v8_depend_on_icu_data_file) {
deps += [ "//third_party/icu:copy_icudata" ]
if (host_byteorder == "big") {
sources += [ "$root_out_dir/icudtb.dat" ]
} else {
sources += [ "$root_out_dir/icudtl.dat" ]
}
}
outputs = []
if (is_DEBUG_defined && name == "default") {
outputs += [ "$target_gen_dir/src/builtins/builtins-effects.cc" ]
}
data = []
if (current_os != "zos") {
ext = "S"
} else {
ext = "s"
}
args = []
if (v8_verify_deterministic_mksnapshot) {
# Output redirection must be the first argument to run.py. We capture
# output when verifying snapshot determinism for debugging.
args += [
"--redirect-stdout",
rebase_path("$root_out_dir/mksnapshot_output${suffix}.log",
root_build_dir),
]
data += [ "$root_out_dir/mksnapshot_output${suffix}.log" ]
}
args += [
"./" + rebase_path(get_label_info(":mksnapshot($v8_snapshot_toolchain)",
"root_out_dir") + "/mksnapshot",
root_build_dir),
"--turbo_instruction_scheduling",
"--turbo-always-optimize-spills",
# In cross builds, the snapshot may be generated for both the host and
# target toolchains. The same host binary is used to generate both, so
# mksnapshot needs to know which target OS to use at runtime. It's weird,
# but the target OS is really |current_os|.
"--target_os=$current_os",
"--target_arch=$current_cpu",
"--embedded_src",
rebase_path("$target_gen_dir/embedded${suffix}.${ext}", root_build_dir),
# mksnapshot runs in predictable mode to create deterministic snapshots.
# Note this flag is also set implicitly by mksnapshot itself (see
# mksnapshot.cc). We set it here as well for clarity.
"--predictable",
# Disable ICs globally in mksnapshot to avoid problems with Code handlers.
# See https://crbug.com/345280736.
# TODO(jgruber): Re-enable once a better fix is available.
# Note this flag is also set implicitly by mksnapshot itself (see
# mksnapshot.cc). We set it here as well for clarity.
"--no-use-ic",
]
if (is_DEBUG_defined && name == "default") {
args += [
"--builtins-effects-src",
rebase_path("$target_gen_dir/src/builtins/builtins-effects.cc",
root_build_dir),
]
}
if (v8_verify_deterministic_mksnapshot) {
# Flags that help debugging snapshot determinism.
args += [ "--trace-read-only-promotion" ]
}
if (v8_log_builtins_block_count_input != "") {
args += [
"--trace-turbo",
"--turbo-log-builtins-count-input",
v8_log_builtins_block_count_input,
]
}
if (v8_enable_builtins_frame_elision) {
args += [ "--turbo-elide-frames" ]
}
if (v8_enable_builtins_profiling) {
args += [ "--turbo-profiling" ]
}
if (v8_enable_builtins_profiling_verbose) {
args += [ "--turbo-profiling-verbose" ]
}
if (v8_builtins_profiling_log_file != "") {
sources += [ v8_builtins_profiling_log_file ]
args += [
"--turbo-profiling-input",
rebase_path(v8_builtins_profiling_log_file, root_build_dir),
# Replace this with --warn-about-builtin-profile-data to see the full
# list of builtins with incompatible profiles.
"--abort-on-bad-builtin-profile-data",
]
if (!v8_enable_builtins_profiling && v8_enable_builtins_reordering) {
args += [ "--reorder-builtins" ]
}
}
# This is needed to distinguish between generating code for the simulator
# and cross-compiling. The latter may need to run code on the host with the
# simulator but cannot use simulator-specific instructions.
if (v8_target_is_simulator) {
args += [ "--target_is_simulator" ]
}
args += invoker.args
outputs += [ "$target_gen_dir/embedded${suffix}.${ext}" ]
if (invoker.embedded_variant != "") {
args += [
"--embedded_variant",
invoker.embedded_variant,
]
}
if (v8_random_seed != "0") {
args += [
"--random-seed",
v8_random_seed,
]
}
if (v8_os_page_size != "0") {
args += [
"--v8_os_page_size",
v8_os_page_size,
]
}
if (v8_use_external_startup_data) {
outputs += [ "$root_out_dir/snapshot_blob${suffix}.bin" ]
data += [ "$root_out_dir/snapshot_blob${suffix}.bin" ]
args += [
"--startup_blob",
rebase_path("$root_out_dir/snapshot_blob${suffix}.bin", root_build_dir),
]
} else {
outputs += [ "$target_gen_dir/snapshot${suffix}.cc" ]
args += [
"--startup_src",
rebase_path("$target_gen_dir/snapshot${suffix}.cc", root_build_dir),
]
}
if (v8_embed_script != "") {
sources += [ v8_embed_script ]
args += [ rebase_path(v8_embed_script, root_build_dir) ]
}
if (v8_enable_snapshot_code_comments) {
args += [ "--code-comments" ]
}
if (v8_enable_snapshot_native_code_counters) {
args += [ "--native-code-counters" ]
} else {
# --native-code-counters is the default in debug mode so make sure we can
# unset it.
args += [ "--no-native-code-counters" ]
}
if (v8_enable_fast_mksnapshot) {
args += [ "--no-turbo-verify-allocation" ]
if (v8_current_cpu == "x86" || v8_current_cpu == "x64") {
args += [ "--no-turbo-rewrite-far-jumps" ]
}
if (v8_enable_verification_features && v8_enable_slow_dchecks) {
# mksnapshot only accepts this flag if ENABLE_SLOW_DCHECKS is defined.
args += [ "--no-enable-slow-asserts" ]
}
}
# TODO(Wenqin): We have to set the CPU feature when we are compiling ISX
# builtins, therefore it may make TSAN failed when we enable concurrent
# mksnapshot, try to make the CPU feature as thread local later.
if (v8_enable_concurrent_mksnapshot && !v8_enable_builtins_gearbox) {
args += [
"--concurrent-builtin-generation",
# Use all the cores for concurrent builtin generation.
"--concurrent-turbofan-max-threads=0",
]
}
if (v8_enable_verify_heap) {
args += [ "--verify-heap" ]
}
}
}
run_mksnapshot("default") {
args = []
embedded_variant = "Default"
}
if (emit_builtins_as_inline_asm) {
asm_to_inline_asm("default") {
args = []
}
}
if (v8_verify_deterministic_mksnapshot) {
runs = [
"run_0",
"run_1",
"run_2",
"run_3",
"run_4",
"run_5",
"run_6",
]
foreach(i, runs) {
run_mksnapshot(i) {
args = []
embedded_variant = "Default"
}
}
group("snapshot_set") {
data_deps = []
foreach(i, runs) {
data_deps += [ ":run_mksnapshot_$i" ]
}
}
action("verify_deterministic_mksnapshot") {
deps = [ ":snapshot_set" ]
report_file = "$target_gen_dir/mksnapshot_comparison.txt"
script = "tools/snapshot/compare_mksnapshot_output.py"
args = [
rebase_path("$report_file", root_build_dir),
rebase_path("$target_gen_dir", root_build_dir),
rebase_path("$root_out_dir", root_build_dir),
"7", # Length of the 'runs' list.
]
outputs = [ report_file ]
}
}
if (v8_verify_builtins_compatibility) {
# This specifies a separate mksnapshot target for each of:
# x86, x64, arm, arm64.
hashes = "builtins_hashes_$v8_current_cpu"
run_mksnapshot("dump_$v8_current_cpu") {
args = [
"--dump-builtins-hashes-to-file",
hashes,
]
embedded_variant = "Default"
}
# This template defines a comparison action for the architecture the pgo
# profile is made for (e.g. x64) and the architecture the profile is used
# for (e.g. arm64 with toolchain x64_v8_arm64).
template("verify_builtins_hashes") {
forward_variables_from(invoker,
[
"profile_arch",
"target_arch",
])
profile_toolchain = "//build/toolchain/linux:clang_${profile_arch}"
target_toolchain =
"//build/toolchain/linux:clang_${profile_arch}_v8_${target_arch}"
action("compare_builtins_$target_name") {
deps = [
":run_mksnapshot_dump_${profile_arch}($profile_toolchain)",
":run_mksnapshot_dump_${target_arch}($target_toolchain)",
]
report_file = "$root_build_dir/builtins_comparison_$target_name"
script = "tools/builtins-pgo/assert_builtins_hashes.py"
args = [
"builtins_hashes_${profile_arch}",
"builtins_hashes_${target_arch}",
rebase_path(report_file, root_build_dir),
]
outputs = [ report_file ]
}
}
verify_builtins_hashes("x86_arm") {
profile_arch = "x86"
target_arch = "arm"
}
verify_builtins_hashes("x64_arm64") {
profile_arch = "x64"
target_arch = "arm64"
}
group("verify_all_builtins_hashes") {
deps = [
":compare_builtins_x64_arm64",
":compare_builtins_x86_arm",
]
}
}
action("v8_dump_build_config") {
script = "tools/testrunner/utils/dump_build_config.py"
outputs = [ "$root_out_dir/v8_build_config.json" ]
is_full_debug = v8_enable_verification_features && !v8_optimized_debug
arch = v8_target_cpu
if (v8_target_cpu == "x86") {
arch = "ia32"
}
mips_arch_variant_var = ""
mips_use_msa_var = false
if (arch == "mips64" || arch == "mips64el") {
mips_arch_variant_var = mips_arch_variant
mips_use_msa_var = mips_use_msa
}
js_shared_memory = !v8_disable_write_barriers
simd_mips = mips_arch_variant_var == "r6" && mips_use_msa
simulator_run = target_cpu != v8_target_cpu
use_sanitizer = is_asan || is_cfi || is_msan || is_tsan || is_ubsan
# This lists all build-time switches consumed by the test framework. All
# switches can be used automatically in the status files as is - no
# further files need to be modified.
# However, the switch also has to be entered in `build_config_content` in
# `bazel/defs.bzl` so that the switch also works for tests triggered by bazel.
#
# Naming conventions: Keep switch names short and remove unnecessary
# qualifiers. Drop v8_enable_, v8_, is_ where possible.
# Keep only qualifiers that disambiguate the switches from other things.
# Examples: has_turbofan disambiguates from the turbofan runtime variant,
# is_android disambiguates from the android keyword in status files,
# v8_cfi disambiguates from the global cfi flag.
args = [
rebase_path("$root_out_dir/v8_build_config.json", root_build_dir),
"arch=\"$arch\"",
"asan=$is_asan",
"atomic_object_field_writes=$v8_enable_atomic_object_field_writes",
"cet_shadow_stack=$v8_enable_cet_shadow_stack",
"cfi=$is_cfi",
"clang=$is_clang",
"clang_coverage=$use_clang_coverage",
"code_comments=$v8_code_comments",
"component_build=$is_component_build",
"concurrent_marking=$v8_enable_concurrent_marking",
"current_cpu=\"$current_cpu\"",
"dcheck_always_on=$v8_dcheck_always_on",
"debug_code=$v8_enable_debug_code",
"DEBUG_defined=$is_DEBUG_defined",
"debugging_features=$v8_enable_debugging_features",
"dict_property_const_tracking=$v8_dict_property_const_tracking",
"direct_handle=$v8_enable_direct_handle",
"disassembler=$v8_enable_disassembler",
"full_debug=$is_full_debug",
"gdbjit=$v8_enable_gdbjit",
"has_jitless=$v8_jitless",
"has_maglev=$v8_enable_maglev",
"has_turbofan=$v8_enable_turbofan",
"has_webassembly=$v8_enable_webassembly",
"has_wasm_interpreter=$v8_enable_drumbrake",
"i18n=$v8_enable_i18n_support",
"temporal=$v8_enable_temporal_support",
"is_android=$is_android",
"is_ios=$is_ios",
"js_shared_memory=$js_shared_memory",
"lite_mode=$v8_enable_lite_mode",
"local_off_stack_check=$v8_enable_local_off_stack_check",
"mips_arch_variant=\"$mips_arch_variant_var\"",
"mips_use_msa=$mips_use_msa_var",
"msan=$is_msan",
"official_build=$is_official_build",
"pointer_compression=$v8_enable_pointer_compression",
"pointer_compression_shared_cage=$v8_enable_pointer_compression_shared_cage",
"runtime_call_stats=$v8_enable_runtime_call_stats",
"sandbox=$v8_enable_sandbox",
"sandbox_hardware_support=$v8_enable_sandbox_hardware_support",
"simd_mips=$simd_mips",
"simulator_run=$simulator_run",
"single_generation=$v8_enable_single_generation",
"slow_dchecks=$v8_enable_slow_dchecks",
"target_cpu=\"$target_cpu\"",
"tsan=$is_tsan",
"ubsan=$is_ubsan",
"use_sanitizer=$use_sanitizer",
"v8_cfi=$v8_control_flow_integrity",
"v8_current_cpu=\"$v8_current_cpu\"",
"v8_target_cpu=\"$v8_target_cpu\"",
"verification_features=$v8_enable_verification_features",
"verify_csa=$v8_enable_verify_csa",
"verify_heap=$v8_enable_verify_heap",
"verify_predictable=$v8_enable_verify_predictable",
"wasm_random_fuzzers=$v8_wasm_random_fuzzers",
"memory_corruption_api=$v8_enable_memory_corruption_api",
"lower_limits_mode=$v8_lower_limits_mode",
# Please add new switches also in `build_config_content` in `bazel/defs.bzl`
# so that the switches also work for tests triggered by bazel.
]
}
# Generate a json file containing essential V8 build flags.
# This json file is consumed by embedders like Node.js and Electron to provide
# information for building third party modules. There is currently no exact
# rules on which build flags should be outputed in the json file, but anything
# affecting the |external_v8_defines| list must be listed here and added to
# the common.gypi file in Node.js repo.
generated_file("v8_generate_features_json") {
outputs = [ "$root_out_dir/v8_features.json" ]
output_conversion = "json"
contents = {
v8_deprecation_warnings = v8_deprecation_warnings
v8_enable_31bit_smis_on_64bit_arch = v8_enable_31bit_smis_on_64bit_arch
v8_enable_direct_handle = v8_enable_direct_handle
v8_enable_extensible_ro_snapshot = v8_enable_extensible_ro_snapshot
v8_enable_gdbjit = v8_enable_gdbjit
v8_enable_hugepage = v8_enable_hugepage
v8_enable_i18n_support = v8_enable_i18n_support
v8_enable_temporal_support = v8_enable_temporal_support
v8_enable_javascript_promise_hooks = v8_enable_javascript_promise_hooks
v8_enable_lite_mode = v8_enable_lite_mode
v8_enable_map_packing = v8_enable_map_packing
v8_enable_object_print = v8_enable_object_print
v8_enable_pointer_compression = v8_enable_pointer_compression
v8_enable_pointer_compression_shared_cage =
v8_enable_pointer_compression_shared_cage
v8_enable_sandbox = v8_enable_sandbox
v8_enable_short_builtin_calls = v8_enable_short_builtin_calls
v8_enable_v8_checks = v8_enable_v8_checks
v8_enable_memory_accounting_checks = v8_enable_memory_accounting_checks
v8_enable_webassembly = v8_enable_webassembly
v8_imminent_deprecation_warnings = v8_imminent_deprecation_warnings
v8_optimized_debug = v8_optimized_debug
v8_random_seed = v8_random_seed
v8_use_perfetto = v8_use_perfetto
v8_use_siphash = v8_use_siphash
v8_use_default_hasher_secret = v8_use_default_hasher_secret
}
}
###############################################################################
# Source Sets (aka static libraries)
#
v8_source_set("v8_snapshot") {
# Let external targets depend on v8_snapshot.
if (v8_use_external_startup_data) {
visibility = [ ":*" ] # Targets in this file can depend on this.
}
deps = [
":v8_internal_headers",
":v8_libbase",
":v8_maybe_temporal",
":v8_tracing",
]
public_deps = [
# This should be public so downstream targets can declare the snapshot
# output file as their inputs.
":run_mksnapshot_default",
]
# Do not publicize any header to remove build dependency.
public = []
sources = [ "src/init/setup-isolate-deserialize.cc" ]
if (emit_builtins_as_inline_asm) {
deps += [ ":asm_to_inline_asm_default" ]
sources += [ "$target_gen_dir/embedded.cc" ]
} else {
if (current_os != "zos") {
sources += [ "$target_gen_dir/embedded.S" ]
} else {
sources += [ "$target_gen_dir/embedded.s" ]
}
}
if (is_DEBUG_defined) {
sources += [ "$target_gen_dir/src/builtins/builtins-effects.cc" ]
}
configs = [ ":internal_config" ]
if (v8_use_external_startup_data) {
deps += [ ":v8_base" ]
sources += [ "src/snapshot/snapshot-external.cc" ]
} else {
public_deps += [
":v8_abseil",
":v8_maybe_icu",
]
sources += [ "$target_gen_dir/snapshot.cc" ]
}
}
v8_source_set("v8_initializers") {
visibility = [
":*",
"test/cctest:*",
]
allow_circular_includes_from = [ ":torque_generated_initializers" ]
deps = [
":torque_generated_initializers",
":v8_base_without_compiler",
":v8_shared_internal_headers",
":v8_tracing",
]
sources = [
### gcmole(all) ###
"src/builtins/builtins-array-gen.cc",
"src/builtins/builtins-array-gen.h",
"src/builtins/builtins-async-function-gen.cc",
"src/builtins/builtins-async-gen.cc",
"src/builtins/builtins-async-gen.h",
"src/builtins/builtins-async-generator-gen.cc",
"src/builtins/builtins-async-iterator-gen.cc",
"src/builtins/builtins-bigint-gen.cc",
"src/builtins/builtins-bigint-gen.h",
"src/builtins/builtins-call-gen.cc",
"src/builtins/builtins-call-gen.h",
"src/builtins/builtins-collections-gen.cc",
"src/builtins/builtins-collections-gen.h",
"src/builtins/builtins-constructor-gen.cc",
"src/builtins/builtins-constructor-gen.h",
"src/builtins/builtins-constructor.h",
"src/builtins/builtins-conversion-gen.cc",
"src/builtins/builtins-data-view-gen.h",
"src/builtins/builtins-date-gen.cc",
"src/builtins/builtins-generator-gen.cc",
"src/builtins/builtins-global-gen.cc",
"src/builtins/builtins-handler-gen.cc",
"src/builtins/builtins-ic-gen.cc",
"src/builtins/builtins-internal-gen.cc",
"src/builtins/builtins-interpreter-gen.cc",
"src/builtins/builtins-intl-gen.cc",
"src/builtins/builtins-iterator-gen.cc",
"src/builtins/builtins-iterator-gen.h",
"src/builtins/builtins-microtask-queue-gen.cc",
"src/builtins/builtins-number-gen.cc",
"src/builtins/builtins-number-tsa.cc",
"src/builtins/builtins-object-gen.cc",
"src/builtins/builtins-object-gen.h",
"src/builtins/builtins-promise-gen.cc",
"src/builtins/builtins-promise-gen.h",
"src/builtins/builtins-proxy-gen.cc",
"src/builtins/builtins-proxy-gen.h",
"src/builtins/builtins-regexp-gen.cc",
"src/builtins/builtins-regexp-gen.h",
"src/builtins/builtins-shadow-realm-gen.cc",
"src/builtins/builtins-sharedarraybuffer-gen.cc",
"src/builtins/builtins-string-gen.cc",
"src/builtins/builtins-string-gen.h",
"src/builtins/builtins-string-tsa-inl.h",
"src/builtins/builtins-string-tsa.cc",
"src/builtins/builtins-typed-array-gen.cc",
"src/builtins/builtins-typed-array-gen.h",
"src/builtins/builtins-utils-gen.h",
"src/builtins/growable-fixed-array-gen.cc",
"src/builtins/growable-fixed-array-gen.h",
"src/builtins/js-trampoline-assembler.cc",
"src/builtins/js-trampoline-assembler.h",
"src/builtins/number-builtins-reducer-inl.h",
"src/builtins/profile-data-reader.cc",
"src/builtins/profile-data-reader.h",
"src/builtins/setup-builtins-internal.cc",
"src/builtins/torque-csa-header-includes.h",
"src/codegen/code-stub-assembler-inl.h",
"src/codegen/code-stub-assembler.cc",
"src/codegen/code-stub-assembler.h",
"src/codegen/define-code-stub-assembler-macros.inc",
"src/codegen/heap-object-list.h",
"src/codegen/turboshaft-builtins-assembler-inl.h",
"src/codegen/undef-code-stub-assembler-macros.inc",
"src/compiler/turboshaft/builtin-compiler.cc",
"src/compiler/turboshaft/builtin-compiler.h",
"src/heap/setup-heap-internal.cc",
"src/ic/accessor-assembler.cc",
"src/ic/accessor-assembler.h",
"src/ic/binary-op-assembler.cc",
"src/ic/binary-op-assembler.h",
"src/ic/keyed-store-generic.cc",
"src/ic/keyed-store-generic.h",
"src/ic/unary-op-assembler.cc",
"src/ic/unary-op-assembler.h",
"src/interpreter/interpreter-assembler.cc",
"src/interpreter/interpreter-assembler.h",
"src/interpreter/interpreter-generator-tsa.cc",
"src/interpreter/interpreter-generator-tsa.h",
"src/interpreter/interpreter-generator.cc",
"src/interpreter/interpreter-generator.h",
"src/interpreter/interpreter-intrinsics-generator.cc",
"src/interpreter/interpreter-intrinsics-generator.h",
"src/numbers/integer-literal-inl.h",
"src/numbers/integer-literal.h",
"third_party/v8/codegen/fp16-inl.h",
]
if (v8_enable_webassembly) {
sources += [
"src/builtins/builtins-wasm-gen.cc",
"src/builtins/builtins-wasm-gen.h",
]
if (v8_enable_drumbrake) {
if (v8_current_cpu == "x64") {
sources += [ "src/wasm/interpreter/x64/interpreter-builtins-x64.cc" ]
} else if (v8_current_cpu == "arm64") {
sources +=
[ "src/wasm/interpreter/arm64/interpreter-builtins-arm64.cc" ]
} else if (v8_current_cpu == "riscv64") {
sources +=
[ "src/wasm/interpreter/riscv/interpreter-builtins-riscv.cc" ]
}
}
}
if (v8_current_cpu == "x86") {
sources += [
### gcmole(ia32) ###
"src/builtins/ia32/builtins-ia32.cc",
]
} else if (v8_current_cpu == "x64") {
sources += [
### gcmole(x64) ###
"src/builtins/x64/builtins-x64.cc",
]
} else if (v8_current_cpu == "arm") {
sources += [
### gcmole(arm) ###
"src/builtins/arm/builtins-arm.cc",
]
} else if (v8_current_cpu == "arm64") {
sources += [
### gcmole(arm64) ###
"src/builtins/arm64/builtins-arm64.cc",
]
} else if (v8_current_cpu == "mips64" || v8_current_cpu == "mips64el") {
sources += [
### gcmole(mips64el) ###
"src/builtins/mips64/builtins-mips64.cc",
]
} else if (v8_current_cpu == "loong64") {
sources += [
### gcmole(loong64) ###
"src/builtins/loong64/builtins-loong64.cc",
]
} else if (v8_current_cpu == "ppc64") {
sources += [
### gcmole(ppc64) ###
"src/builtins/ppc/builtins-ppc.cc",
]
} else if (v8_current_cpu == "s390x") {
sources += [
### gcmole(s390) ###
"src/builtins/s390/builtins-s390.cc",
]
} else if (v8_current_cpu == "riscv64") {
sources += [
### gcmole(riscv64) ###
"src/builtins/riscv/builtins-riscv.cc",
]
} else if (v8_current_cpu == "riscv32") {
sources += [
### gcmole(riscv32) ###
"src/builtins/riscv/builtins-riscv.cc",
]
}
if (!v8_enable_i18n_support) {
sources -= [ "src/builtins/builtins-intl-gen.cc" ]
}
configs = [ ":internal_config" ]
}
v8_source_set("v8_init") {
visibility = [ ":*" ] # Only targets in this file can depend on this.
deps = [
":v8_base_without_compiler",
":v8_initializers",
":v8_maybe_temporal",
":v8_tracing",
]
sources = [
### gcmole(all) ###
"src/init/setup-isolate-full.cc",
]
public_deps = [
":v8_abseil",
":v8_maybe_icu",
]
configs = [ ":internal_config" ]
}
# This is split out to be a non-code containing target that the Chromium browser
# DLL can depend upon to get only a version string.
v8_header_set("v8_version") {
configs = [ ":internal_config" ]
sources = [
"include/v8-value-serializer-version.h",
"include/v8-version-string.h",
"include/v8-version.h",
]
}
v8_header_set("v8_config_headers") {
configs = [ ":internal_config" ]
sources = [
"include/v8-platform.h",
"include/v8-source-location.h",
"include/v8config.h",
]
deps = []
if (v8_generate_external_defines_header) {
sources += [ "$target_gen_dir/include/v8-gn.h" ]
deps += [ ":gen_v8_gn" ]
}
}
# This is split out to be a non-code containing target that the Chromium browser
# can depend upon to get basic v8 types.
v8_header_set("v8_headers") {
configs = [ ":internal_config" ]
public_configs = [ ":headers_config" ]
sources = [
"include/v8-array-buffer.h",
"include/v8-callbacks.h",
"include/v8-container.h",
"include/v8-context.h",
"include/v8-cpp-heap-external.h",
"include/v8-cppgc.h",
"include/v8-data.h",
"include/v8-date.h",
"include/v8-debug.h",
"include/v8-embedder-heap.h",
"include/v8-embedder-state-scope.h",
"include/v8-exception.h",
"include/v8-extension.h",
"include/v8-external-memory-accounter.h",
"include/v8-external.h",
"include/v8-fast-api-calls.h",
"include/v8-forward.h",
"include/v8-function-callback.h",
"include/v8-function.h",
"include/v8-handle-base.h",
"include/v8-initialization.h",
"include/v8-internal.h",
"include/v8-isolate.h",
"include/v8-json.h",
"include/v8-local-handle.h",
"include/v8-locker.h",
"include/v8-maybe.h",
"include/v8-memory-span.h",
"include/v8-message.h",
"include/v8-microtask-queue.h",
"include/v8-microtask.h",
"include/v8-object.h",
"include/v8-persistent-handle.h",
"include/v8-primitive-object.h",
"include/v8-primitive.h",
"include/v8-profiler.h",
"include/v8-promise.h",
"include/v8-proxy.h",
"include/v8-regexp.h",
"include/v8-sandbox.h",
"include/v8-script.h",
"include/v8-snapshot.h",
"include/v8-statistics.h",
"include/v8-template.h",
"include/v8-trace-categories.h",
"include/v8-traced-handle.h",
"include/v8-typed-array.h",
"include/v8-unwinder.h",
"include/v8-util.h",
"include/v8-value-serializer.h",
"include/v8-value.h",
"include/v8-wasm.h",
"include/v8-weak-callback-info.h",
"include/v8.h",
]
sources += [
# The following headers cannot be platform-specific. The include validation
# of `gn gen $dir --check` requires all header files to be available on all
# platforms.
"include/v8-wasm-trap-handler-posix.h",
"include/v8-wasm-trap-handler-win.h",
]
public_deps = [ ":v8_config_headers" ]
deps = [
":cppgc_headers",
":v8_tracing",
":v8_version",
]
}
if (v8_generate_external_defines_header) {
action("gen_v8_gn") {
visibility = [ ":*" ]
script = "tools/gen-v8-gn.py"
outputs = [ "$target_gen_dir/include/v8-gn.h" ]
args = [
"-o",
rebase_path("$target_gen_dir/include/v8-gn.h", root_build_dir),
]
foreach(define, enabled_external_defines) {
args += [
"-p",
define,
]
}
foreach(define, disabled_external_defines) {
args += [
"-n",
define,
]
}
}
}
# This is split out to share basic headers with Torque and everything else:(
v8_header_set("v8_shared_internal_headers") {
visibility = [
":*",
"test/*",
"tools/*",
]
configs = [ ":internal_config" ]
sources = [
"src/common/globals.h",
"src/wasm/wasm-constants.h",
"src/wasm/wasm-limits.h",
]
deps = [
":cppgc_headers",
":v8_headers",
":v8_libbase",
]
}
v8_header_set("v8_flags") {
visibility = [
":*",
"tools/*",
]
configs = [ ":internal_config" ]
sources = [
"src/flags/flag-definitions.h",
"src/flags/flags-impl.h",
"src/flags/flags.h",
]
deps = [
":v8_libbase",
":v8_shared_internal_headers",
]
}
if (v8_enable_temporal_support) {
# In cases where we aren't using ICU4C (e.g. v8_enable_i18n_support=false),
# we "bake" in a zoneinfo64.res binary for Temporal
action("make_temporal_zoneinfo_cpp") {
script = "tools/include-file-as-bytes.py"
inputs = [ get_label_info("//third_party/icu/", "dir") +
"/tzres/zoneinfo64.res" ]
outputs =
[ "$target_gen_dir/src/builtins/builtins-temporal-zoneinfo64-data.cc" ]
args = [
rebase_path(inputs[0], root_build_dir),
rebase_path(outputs[0], root_build_dir),
"zoneinfo64_static_data",
]
}
}
v8_header_set("v8_internal_headers") {
configs = [ ":internal_config" ]
public_configs = [ "src/inspector:inspector_config" ]
sources = [
### gcmole(all) ###
"$target_gen_dir/builtins-generated/bytecodes-builtins-list.h",
"include/cppgc/common.h",
"include/v8-inspector-protocol.h",
"include/v8-inspector.h",
"include/v8-metrics.h",
"include/v8-unwinder-state.h",
"include/v8-wasm-trap-handler-posix.h",
"src/api/api-arguments-inl.h",
"src/api/api-arguments.h",
"src/api/api-inl.h",
"src/api/api-natives.h",
"src/api/api.h",
"src/ast/ast-function-literal-id-reindexer.h",
"src/ast/ast-source-ranges.h",
"src/ast/ast-traversal-visitor.h",
"src/ast/ast-value-factory.h",
"src/ast/ast.h",
"src/ast/modules.h",
"src/ast/prettyprinter.h",
"src/ast/scopes.h",
"src/ast/source-range-ast-visitor.h",
"src/ast/variables.h",
"src/baseline/baseline.h",
"src/baseline/bytecode-offset-iterator.h",
"src/builtins/accessors.h",
"src/builtins/builtins-constructor.h",
"src/builtins/builtins-definitions.h",
"src/builtins/builtins-descriptors.h",
"src/builtins/builtins-effects-analyzer.h",
"src/builtins/builtins-inl.h",
"src/builtins/builtins-iterator-inl.h",
"src/builtins/builtins-iterator.h",
"src/builtins/builtins-math-xsum.h",
"src/builtins/builtins-promise.h",
"src/builtins/builtins-utils-inl.h",
"src/builtins/builtins-utils.h",
"src/builtins/builtins.h",
"src/builtins/constants-table-builder.h",
"src/builtins/data-view-ops.h",
"src/builtins/profile-data-reader.h",
"src/codegen/aligned-slot-allocator.h",
"src/codegen/assembler-arch.h",
"src/codegen/assembler-inl.h",
"src/codegen/assembler.h",
"src/codegen/atomic-memory-order.h",
"src/codegen/background-merge-task.h",
"src/codegen/bailout-reason.h",
"src/codegen/callable.h",
"src/codegen/code-comments.h",
"src/codegen/code-desc.h",
"src/codegen/code-factory.h",
"src/codegen/code-reference.h",
"src/codegen/compilation-cache.h",
"src/codegen/compiler.h",
"src/codegen/constant-pool-entry.h",
"src/codegen/constant-pool.h",
"src/codegen/constants-arch.h",
"src/codegen/cpu-features.h",
"src/codegen/external-reference-encoder.h",
"src/codegen/external-reference-table.h",
"src/codegen/external-reference.h",
"src/codegen/flush-instruction-cache.h",
"src/codegen/handler-table.h",
"src/codegen/interface-descriptors-inl.h",
"src/codegen/interface-descriptors.h",
"src/codegen/jump-table-info.h",
"src/codegen/label.h",
"src/codegen/linkage-location.h",
"src/codegen/machine-type.h",
"src/codegen/macro-assembler-base.h",
"src/codegen/macro-assembler-inl.h",
"src/codegen/macro-assembler.h",
"src/codegen/maglev-safepoint-table.h",
"src/codegen/optimized-compilation-info.h",
"src/codegen/pending-optimization-table.h",
"src/codegen/register-arch.h",
"src/codegen/register-base.h",
"src/codegen/register-configuration.h",
"src/codegen/register.h",
"src/codegen/reglist-base.h",
"src/codegen/reglist.h",
"src/codegen/reloc-info-inl.h",
"src/codegen/reloc-info.h",
"src/codegen/safepoint-table-base.h",
"src/codegen/safepoint-table.h",
"src/codegen/script-details.h",
"src/codegen/signature.h",
"src/codegen/source-position-table.h",
"src/codegen/source-position.h",
"src/codegen/tick-counter.h",
"src/codegen/tnode.h",
"src/codegen/unoptimized-compilation-info.h",
"src/common/assert-scope.h",
"src/common/checks.h",
"src/common/code-memory-access-inl.h",
"src/common/code-memory-access.h",
"src/common/high-allocation-throughput-scope.h",
"src/common/message-template.h",
"src/common/operation.h",
"src/common/ptr-compr-inl.h",
"src/common/ptr-compr.h",
"src/common/scoped-modification.h",
"src/common/segmented-table-inl.h",
"src/common/segmented-table.h",
"src/common/simd128.h",
"src/common/thread-local-storage.h",
"src/compiler-dispatcher/lazy-compile-dispatcher.h",
"src/compiler-dispatcher/optimizing-compile-dispatcher.h",
"src/compiler/access-builder.h",
"src/compiler/access-info.h",
"src/compiler/add-type-assertions-reducer.h",
"src/compiler/all-nodes.h",
"src/compiler/allocation-builder-inl.h",
"src/compiler/allocation-builder.h",
"src/compiler/backend/bitcast-elider.h",
"src/compiler/backend/code-generator-impl.h",
"src/compiler/backend/code-generator.h",
"src/compiler/backend/frame-elider.h",
"src/compiler/backend/gap-resolver.h",
"src/compiler/backend/instruction-codes.h",
"src/compiler/backend/instruction-scheduler.h",
"src/compiler/backend/instruction-selector-impl.h",
"src/compiler/backend/instruction-selector.h",
"src/compiler/backend/instruction.h",
"src/compiler/backend/jump-threading.h",
"src/compiler/backend/move-optimizer.h",
"src/compiler/backend/register-allocation.h",
"src/compiler/backend/register-allocator-verifier.h",
"src/compiler/backend/register-allocator.h",
"src/compiler/backend/spill-placer.h",
"src/compiler/backend/unwinding-info-writer.h",
"src/compiler/basic-block-call-graph-profiler.h",
"src/compiler/branch-elimination.h",
"src/compiler/bytecode-analysis.h",
"src/compiler/bytecode-graph-builder.h",
"src/compiler/bytecode-liveness-map.h",
"src/compiler/checkpoint-elimination.h",
"src/compiler/code-assembler-compilation-job.h",
"src/compiler/code-assembler.h",
"src/compiler/common-node-cache.h",
"src/compiler/common-operator-reducer.h",
"src/compiler/common-operator.h",
"src/compiler/common-utils.h",
"src/compiler/compilation-dependencies.h",
"src/compiler/compiler-source-position-table.h",
"src/compiler/constant-folding-reducer.h",
"src/compiler/control-equivalence.h",
"src/compiler/control-path-state.h",
"src/compiler/csa-load-elimination.h",
"src/compiler/dead-code-elimination.h",
"src/compiler/diamond.h",
"src/compiler/escape-analysis-reducer.h",
"src/compiler/escape-analysis.h",
"src/compiler/fast-api-calls.h",
"src/compiler/feedback-source.h",
"src/compiler/frame-states.h",
"src/compiler/frame.h",
"src/compiler/functional-list.h",
"src/compiler/globals.h",
"src/compiler/graph-assembler.h",
"src/compiler/graph-reducer.h",
"src/compiler/graph-trimmer.h",
"src/compiler/graph-zone-traits.h",
"src/compiler/heap-refs.h",
"src/compiler/js-call-reducer.h",
"src/compiler/js-context-specialization.h",
"src/compiler/js-create-lowering.h",
"src/compiler/js-generic-lowering.h",
"src/compiler/js-graph.h",
"src/compiler/js-heap-broker-inl.h",
"src/compiler/js-heap-broker.h",
"src/compiler/js-inlining-heuristic.h",
"src/compiler/js-inlining.h",
"src/compiler/js-intrinsic-lowering.h",
"src/compiler/js-native-context-specialization.h",
"src/compiler/js-operator.h",
"src/compiler/js-type-hint-lowering.h",
"src/compiler/js-typed-lowering.h",
"src/compiler/late-escape-analysis.h",
"src/compiler/linkage.h",
"src/compiler/load-elimination.h",
"src/compiler/loop-analysis.h",
"src/compiler/loop-peeling.h",
"src/compiler/loop-unrolling.h",
"src/compiler/loop-variable-optimizer.h",
"src/compiler/machine-graph-verifier.h",
"src/compiler/machine-graph.h",
"src/compiler/machine-operator-reducer.h",
"src/compiler/machine-operator.h",
"src/compiler/map-inference.h",
"src/compiler/memory-lowering.h",
"src/compiler/memory-optimizer.h",
"src/compiler/node-aux-data.h",
"src/compiler/node-cache.h",
"src/compiler/node-marker.h",
"src/compiler/node-matchers.h",
"src/compiler/node-observer.h",
"src/compiler/node-origin-table.h",
"src/compiler/node-properties.h",
"src/compiler/node.h",
"src/compiler/opcodes.h",
"src/compiler/operation-typer.h",
"src/compiler/operator-properties.h",
"src/compiler/operator.h",
"src/compiler/osr.h",
"src/compiler/pair-load-store-reducer.h",
"src/compiler/per-isolate-compiler-cache.h",
"src/compiler/persistent-map.h",
"src/compiler/phase.h",
"src/compiler/pipeline-data-inl.h",
"src/compiler/pipeline-statistics.h",
"src/compiler/pipeline.h",
"src/compiler/processed-feedback.h",
"src/compiler/property-access-builder.h",
"src/compiler/raw-machine-assembler.h",
"src/compiler/redundancy-elimination.h",
"src/compiler/refs-map.h",
"src/compiler/representation-change.h",
"src/compiler/schedule.h",
"src/compiler/scheduler.h",
"src/compiler/select-lowering.h",
"src/compiler/simplified-lowering-verifier.h",
"src/compiler/simplified-lowering.h",
"src/compiler/simplified-operator-reducer.h",
"src/compiler/simplified-operator.h",
"src/compiler/state-values-utils.h",
"src/compiler/string-builder-optimizer.h",
"src/compiler/turbofan-graph-visualizer.h",
"src/compiler/turbofan-graph.h",
"src/compiler/turbofan-typer.h",
"src/compiler/turbofan-types.h",
"src/compiler/turbofan.h",
"src/compiler/turboshaft/access-builder.h",
"src/compiler/turboshaft/analyzer-iterator.h",
"src/compiler/turboshaft/assembler.h",
"src/compiler/turboshaft/assert-types-reducer.h",
"src/compiler/turboshaft/block-instrumentation-phase.h",
"src/compiler/turboshaft/block-instrumentation-reducer.h",
"src/compiler/turboshaft/branch-elimination-reducer.h",
"src/compiler/turboshaft/build-graph-phase.h",
"src/compiler/turboshaft/builtin-call-descriptors.h",
"src/compiler/turboshaft/call-descriptors-util.h",
"src/compiler/turboshaft/code-elimination-and-simplification-phase.h",
"src/compiler/turboshaft/copying-phase.h",
"src/compiler/turboshaft/csa-branch-elimination-phase.h",
"src/compiler/turboshaft/csa-early-machine-optimization-phase.h",
"src/compiler/turboshaft/csa-effects-computation.h",
"src/compiler/turboshaft/csa-late-escape-analysis-phase.h",
"src/compiler/turboshaft/csa-load-elimination-phase.h",
"src/compiler/turboshaft/csa-memory-optimization-phase.h",
"src/compiler/turboshaft/dataview-lowering-reducer.h",
"src/compiler/turboshaft/dead-code-elimination-reducer.h",
"src/compiler/turboshaft/debug-feature-lowering-phase.h",
"src/compiler/turboshaft/debug-feature-lowering-reducer.h",
"src/compiler/turboshaft/decompression-optimization-phase.h",
"src/compiler/turboshaft/decompression-optimization.h",
"src/compiler/turboshaft/define-assembler-macros.inc",
"src/compiler/turboshaft/deopt-data.h",
"src/compiler/turboshaft/duplication-optimization-reducer.h",
"src/compiler/turboshaft/explicit-truncation-reducer.h",
"src/compiler/turboshaft/fast-api-call-lowering-reducer.h",
"src/compiler/turboshaft/fast-hash.h",
"src/compiler/turboshaft/field-macro.inc",
"src/compiler/turboshaft/graph-builder.h",
"src/compiler/turboshaft/graph-visualizer.h",
"src/compiler/turboshaft/graph.h",
"src/compiler/turboshaft/if-else-cascade-to-switch-reducer.h",
"src/compiler/turboshaft/index.h",
"src/compiler/turboshaft/instruction-selection-normalization-reducer.h",
"src/compiler/turboshaft/instruction-selection-phase.h",
"src/compiler/turboshaft/js-generic-lowering-reducer.h",
"src/compiler/turboshaft/late-escape-analysis-reducer.h",
"src/compiler/turboshaft/late-load-elimination-reducer.h",
"src/compiler/turboshaft/layered-hash-map.h",
"src/compiler/turboshaft/load-store-simplification-reducer.h",
"src/compiler/turboshaft/load-store-verification-reducer.h",
"src/compiler/turboshaft/loop-finder.h",
"src/compiler/turboshaft/loop-peeling-phase.h",
"src/compiler/turboshaft/loop-peeling-reducer.h",
"src/compiler/turboshaft/loop-unrolling-phase.h",
"src/compiler/turboshaft/loop-unrolling-reducer.h",
"src/compiler/turboshaft/machine-lowering-phase.h",
"src/compiler/turboshaft/machine-lowering-reducer-inl.h",
"src/compiler/turboshaft/machine-optimization-reducer.h",
"src/compiler/turboshaft/maglev-assert-types-reducer.h",
"src/compiler/turboshaft/memory-optimization-reducer.h",
"src/compiler/turboshaft/operation-matcher.h",
"src/compiler/turboshaft/operations.h",
"src/compiler/turboshaft/opmasks.h",
"src/compiler/turboshaft/optimize-phase.h",
"src/compiler/turboshaft/phase.h",
"src/compiler/turboshaft/pipelines.h",
"src/compiler/turboshaft/pretenuring-propagation-reducer.h",
"src/compiler/turboshaft/reducer-traits.h",
"src/compiler/turboshaft/register-allocation-phase.h",
"src/compiler/turboshaft/representations.h",
"src/compiler/turboshaft/required-optimization-reducer.h",
"src/compiler/turboshaft/runtime-call-descriptors.h",
"src/compiler/turboshaft/select-lowering-reducer.h",
"src/compiler/turboshaft/sidetable.h",
"src/compiler/turboshaft/simplified-optimization-reducer.h",
"src/compiler/turboshaft/simplify-tf-loops.h",
"src/compiler/turboshaft/snapshot-table-opindex.h",
"src/compiler/turboshaft/snapshot-table.h",
"src/compiler/turboshaft/stack-check-lowering-reducer.h",
"src/compiler/turboshaft/store-store-elimination-phase.h",
"src/compiler/turboshaft/store-store-elimination-reducer-inl.h",
"src/compiler/turboshaft/string-escape-analysis-reducer.h",
"src/compiler/turboshaft/string-view.h",
"src/compiler/turboshaft/tracing.h",
"src/compiler/turboshaft/turbolev-early-lowering-reducer-inl.h",
"src/compiler/turboshaft/turbolev-frontend-pipeline.h",
"src/compiler/turboshaft/turbolev-graph-builder.h",
"src/compiler/turboshaft/type-assertions-phase.h",
"src/compiler/turboshaft/type-inference-analysis.h",
"src/compiler/turboshaft/type-inference-reducer.h",
"src/compiler/turboshaft/type-parser.h",
"src/compiler/turboshaft/typed-optimizations-phase.h",
"src/compiler/turboshaft/typed-optimizations-reducer.h",
"src/compiler/turboshaft/typer.h",
"src/compiler/turboshaft/types.h",
"src/compiler/turboshaft/typeswitch.h",
"src/compiler/turboshaft/undef-assembler-macros.inc",
"src/compiler/turboshaft/uniform-reducer-adapter.h",
"src/compiler/turboshaft/use-map.h",
"src/compiler/turboshaft/utils.h",
"src/compiler/turboshaft/value-numbering-reducer.h",
"src/compiler/turboshaft/variable-reducer.h",
"src/compiler/turboshaft/wasm-code-coverage-reducer.h",
"src/compiler/turboshaft/wasm-dead-code-elimination-phase.h",
"src/compiler/turboshaft/zone-with-name.h",
"src/compiler/type-cache.h",
"src/compiler/type-narrowing-reducer.h",
"src/compiler/typed-optimization.h",
"src/compiler/use-info.h",
"src/compiler/value-numbering-reducer.h",
"src/compiler/verifier.h",
"src/compiler/write-barrier-kind.h",
"src/compiler/zone-stats.h",
"src/date/date.h",
"src/date/dateparser-inl.h",
"src/date/dateparser.h",
"src/debug/debug-coverage.h",
"src/debug/debug-evaluate.h",
"src/debug/debug-frames.h",
"src/debug/debug-interface.h",
"src/debug/debug-property-iterator.h",
"src/debug/debug-scope-iterator.h",
"src/debug/debug-scopes.h",
"src/debug/debug-stack-trace-iterator.h",
"src/debug/debug.h",
"src/debug/interface-types.h",
"src/debug/liveedit-diff.h",
"src/debug/liveedit.h",
"src/deoptimizer/deoptimize-reason.h",
"src/deoptimizer/deoptimized-frame-info.h",
"src/deoptimizer/deoptimizer.h",
"src/deoptimizer/frame-description.h",
"src/deoptimizer/frame-translation-builder.h",
"src/deoptimizer/materialized-object-store.h",
"src/deoptimizer/translated-state.h",
"src/deoptimizer/translation-opcode.h",
"src/diagnostics/basic-block-profiler.h",
"src/diagnostics/code-tracer.h",
"src/diagnostics/compilation-statistics.h",
"src/diagnostics/disasm.h",
"src/diagnostics/disassembler.h",
"src/diagnostics/eh-frame.h",
"src/diagnostics/gdb-jit.h",
"src/diagnostics/perf-jit.h",
"src/diagnostics/unwinder.h",
"src/execution/arguments-inl.h",
"src/execution/arguments.h",
"src/execution/clobber-registers.h",
"src/execution/embedder-state.h",
"src/execution/encoded-c-signature.h",
"src/execution/execution.h",
"src/execution/frame-constants.h",
"src/execution/frames-inl.h",
"src/execution/frames.h",
"src/execution/futex-emulation.h",
"src/execution/interrupts-scope.h",
"src/execution/isolate-data-fields.h",
"src/execution/isolate-data.h",
"src/execution/isolate-inl.h",
"src/execution/isolate-utils-inl.h",
"src/execution/isolate-utils.h",
"src/execution/isolate.h",
"src/execution/local-isolate-inl.h",
"src/execution/local-isolate.h",
"src/execution/messages.h",
"src/execution/microtask-queue.h",
"src/execution/mutex-guard-if-off-thread.h",
"src/execution/pointer-authentication.h",
"src/execution/protectors-inl.h",
"src/execution/protectors.h",
"src/execution/simulator-base.h",
"src/execution/simulator.h",
"src/execution/stack-guard.h",
"src/execution/thread-id.h",
"src/execution/thread-local-top.h",
"src/execution/tiering-manager.h",
"src/execution/v8threads.h",
"src/execution/vm-state-inl.h",
"src/execution/vm-state.h",
"src/extensions/cputracemark-extension.h",
"src/extensions/externalize-string-extension.h",
"src/extensions/gc-extension.h",
"src/extensions/ignition-statistics-extension.h",
"src/extensions/statistics-extension.h",
"src/extensions/trigger-failure-extension.h",
"src/flags/save-flags.h",
"src/handles/global-handles-inl.h",
"src/handles/global-handles.h",
"src/handles/handles-inl.h",
"src/handles/handles.h",
"src/handles/local-handles-inl.h",
"src/handles/local-handles.h",
"src/handles/maybe-handles-inl.h",
"src/handles/maybe-handles.h",
"src/handles/persistent-handles.h",
"src/handles/shared-object-conveyor-handles.h",
"src/handles/traced-handles-inl.h",
"src/handles/traced-handles.h",
"src/heap/allocation-observer.h",
"src/heap/allocation-result.h",
"src/heap/allocation-stats.h",
"src/heap/array-buffer-sweeper.h",
"src/heap/base-page-inl.h",
"src/heap/base-page.h",
"src/heap/base-space.h",
"src/heap/code-range.h",
"src/heap/code-stats.h",
"src/heap/collection-barrier.h",
"src/heap/combined-heap.h",
"src/heap/concurrent-marking.h",
"src/heap/conservative-stack-visitor-inl.h",
"src/heap/conservative-stack-visitor.h",
"src/heap/cppgc-js/cpp-heap.h",
"src/heap/cppgc-js/cpp-marking-state-inl.h",
"src/heap/cppgc-js/cpp-marking-state.h",
"src/heap/cppgc-js/cpp-snapshot.h",
"src/heap/cppgc-js/cross-heap-remembered-set.h",
"src/heap/cppgc-js/unified-heap-marking-state-inl.h",
"src/heap/cppgc-js/unified-heap-marking-state.h",
"src/heap/cppgc-js/unified-heap-marking-verifier.h",
"src/heap/cppgc-js/unified-heap-marking-visitor.h",
"src/heap/ephemeron-remembered-set.h",
"src/heap/evacuation-allocator-inl.h",
"src/heap/evacuation-allocator.h",
"src/heap/evacuation-verifier-inl.h",
"src/heap/evacuation-verifier.h",
"src/heap/factory-base-inl.h",
"src/heap/factory-base.h",
"src/heap/factory-inl.h",
"src/heap/factory.h",
"src/heap/finalization-registry-cleanup-task.h",
"src/heap/free-list-inl.h",
"src/heap/free-list.h",
"src/heap/gc-callbacks-inl.h",
"src/heap/gc-callbacks.h",
"src/heap/gc-tracer-inl.h",
"src/heap/gc-tracer.h",
"src/heap/heap-allocator-inl.h",
"src/heap/heap-allocator.h",
"src/heap/heap-controller.h",
"src/heap/heap-inl.h",
"src/heap/heap-layout-inl.h",
"src/heap/heap-layout-tracer.h",
"src/heap/heap-layout.h",
"src/heap/heap-utils-inl.h",
"src/heap/heap-utils.h",
"src/heap/heap-visitor-inl.h",
"src/heap/heap-visitor.h",
"src/heap/heap-write-barrier-inl.h",
"src/heap/heap-write-barrier.h",
"src/heap/heap.h",
"src/heap/incremental-marking-job.h",
"src/heap/incremental-marking.h",
"src/heap/index-generator.h",
"src/heap/large-page-inl.h",
"src/heap/large-page.h",
"src/heap/large-spaces.h",
"src/heap/linear-allocation-area.h",
"src/heap/list.h",
"src/heap/live-object-range-inl.h",
"src/heap/live-object-range.h",
"src/heap/local-factory-inl.h",
"src/heap/local-factory.h",
"src/heap/local-heap-inl.h",
"src/heap/local-heap.h",
"src/heap/main-allocator-inl.h",
"src/heap/main-allocator.h",
"src/heap/mark-compact-inl.h",
"src/heap/mark-compact.h",
"src/heap/mark-sweep-utilities.h",
"src/heap/marking-barrier-inl.h",
"src/heap/marking-barrier.h",
"src/heap/marking-inl.h",
"src/heap/marking-progress-tracker.h",
"src/heap/marking-state-inl.h",
"src/heap/marking-state.h",
"src/heap/marking-visitor-inl.h",
"src/heap/marking-visitor.h",
"src/heap/marking-worklist-inl.h",
"src/heap/marking-worklist.h",
"src/heap/marking.h",
"src/heap/memory-allocator.h",
"src/heap/memory-balancer.h",
"src/heap/memory-chunk-constants.h",
"src/heap/memory-chunk-inl.h",
"src/heap/memory-chunk-layout.h",
"src/heap/memory-chunk.h",
"src/heap/memory-measurement-inl.h",
"src/heap/memory-measurement.h",
"src/heap/memory-pool.h",
"src/heap/memory-reducer.h",
"src/heap/minor-gc-job.h",
"src/heap/minor-mark-sweep-inl.h",
"src/heap/minor-mark-sweep.h",
"src/heap/mutable-page-inl.h",
"src/heap/mutable-page.h",
"src/heap/new-spaces-inl.h",
"src/heap/new-spaces.h",
"src/heap/normal-page-inl.h",
"src/heap/normal-page.h",
"src/heap/object-lock-inl.h",
"src/heap/object-lock.h",
"src/heap/object-stats.h",
"src/heap/paged-spaces-inl.h",
"src/heap/paged-spaces.h",
"src/heap/parallel-work-item.h",
"src/heap/parked-scope-inl.h",
"src/heap/parked-scope.h",
"src/heap/pretenuring-handler-inl.h",
"src/heap/pretenuring-handler.h",
"src/heap/read-only-heap-inl.h",
"src/heap/read-only-heap.h",
"src/heap/read-only-promotion.h",
"src/heap/read-only-spaces.h",
"src/heap/remembered-set-inl.h",
"src/heap/remembered-set.h",
"src/heap/safepoint.h",
"src/heap/scavenger.h",
"src/heap/slot-set.h",
"src/heap/spaces-inl.h",
"src/heap/spaces.h",
"src/heap/sweeper.h",
"src/heap/traced-handles-marking-visitor.h",
"src/heap/trusted-range.h",
"src/heap/visit-object.h",
"src/heap/weak-object-worklists.h",
"src/heap/young-generation-marking-visitor-inl.h",
"src/heap/young-generation-marking-visitor.h",
"src/heap/zapping.h",
"src/ic/call-optimization.h",
"src/ic/handler-configuration-inl.h",
"src/ic/handler-configuration.h",
"src/ic/ic-inl.h",
"src/ic/ic-stats.h",
"src/ic/ic.h",
"src/ic/stub-cache.h",
"src/init/bootstrapper.h",
"src/init/heap-symbols.h",
"src/init/icu_util.h",
"src/init/isolate-group.h",
"src/init/setup-isolate.h",
"src/init/startup-data-util.h",
"src/init/v8.h",
"src/interpreter/block-coverage-builder.h",
"src/interpreter/bytecode-array-builder.h",
"src/interpreter/bytecode-array-iterator.h",
"src/interpreter/bytecode-array-random-iterator.h",
"src/interpreter/bytecode-array-writer.h",
"src/interpreter/bytecode-decoder.h",
"src/interpreter/bytecode-flags-and-tokens.h",
"src/interpreter/bytecode-generator.h",
"src/interpreter/bytecode-jump-table.h",
"src/interpreter/bytecode-label.h",
"src/interpreter/bytecode-node.h",
"src/interpreter/bytecode-operands.h",
"src/interpreter/bytecode-register-allocator.h",
"src/interpreter/bytecode-register-optimizer.h",
"src/interpreter/bytecode-register.h",
"src/interpreter/bytecode-source-info.h",
"src/interpreter/bytecode-traits.h",
"src/interpreter/bytecodes.h",
"src/interpreter/constant-array-builder.h",
"src/interpreter/control-flow-builders.h",
"src/interpreter/handler-table-builder.h",
"src/interpreter/interpreter-generator.h",
"src/interpreter/interpreter-intrinsics.h",
"src/interpreter/interpreter.h",
"src/interpreter/prototype-assignment-sequence-builder.h",
"src/json/json-parser.h",
"src/json/json-stringifier.h",
"src/libsampler/sampler.h",
"src/logging/code-events.h",
"src/logging/counters-definitions.h",
"src/logging/counters-scopes.h",
"src/logging/counters.h",
"src/logging/local-logger.h",
"src/logging/log-file.h",
"src/logging/log-inl.h",
"src/logging/log.h",
"src/logging/metrics.h",
"src/logging/runtime-call-stats-scope.h",
"src/logging/runtime-call-stats.h",
"src/logging/tracing-flags.h",
"src/numbers/conversions-inl.h",
"src/numbers/conversions.h",
"src/numbers/hash-seed-inl.h",
"src/numbers/hash-seed.h",
"src/numbers/ieee754.h",
"src/numbers/math-random.h",
"src/objects/all-objects-inl.h",
"src/objects/allocation-site-inl.h",
"src/objects/allocation-site-scopes-inl.h",
"src/objects/allocation-site-scopes.h",
"src/objects/allocation-site.h",
"src/objects/api-callbacks-inl.h",
"src/objects/api-callbacks.h",
"src/objects/arguments-inl.h",
"src/objects/arguments.h",
"src/objects/backing-store.h",
"src/objects/bigint.h",
"src/objects/call-site-info-inl.h",
"src/objects/call-site-info.h",
"src/objects/casting.h",
"src/objects/cell-inl.h",
"src/objects/cell.h",
"src/objects/code-inl.h",
"src/objects/code-kind.h",
"src/objects/code.h",
"src/objects/compilation-cache-table-inl.h",
"src/objects/compilation-cache-table.h",
"src/objects/compressed-slots-inl.h",
"src/objects/compressed-slots.h",
"src/objects/contexts-inl.h",
"src/objects/contexts.h",
"src/objects/cpp-heap-external-object-inl.h",
"src/objects/cpp-heap-external-object.h",
"src/objects/cpp-heap-object-wrapper-inl.h",
"src/objects/cpp-heap-object-wrapper.h",
"src/objects/data-handler-inl.h",
"src/objects/data-handler.h",
"src/objects/debug-objects-inl.h",
"src/objects/debug-objects.h",
"src/objects/descriptor-array-inl.h",
"src/objects/descriptor-array.h",
"src/objects/dictionary-inl.h",
"src/objects/dictionary.h",
"src/objects/elements-inl.h",
"src/objects/elements-kind.h",
"src/objects/elements.h",
"src/objects/embedder-data-array-inl.h",
"src/objects/embedder-data-array.h",
"src/objects/embedder-data-slot-inl.h",
"src/objects/embedder-data-slot.h",
"src/objects/feedback-cell-inl.h",
"src/objects/feedback-cell.h",
"src/objects/feedback-vector-inl.h",
"src/objects/feedback-vector.h",
"src/objects/field-index-inl.h",
"src/objects/field-index.h",
"src/objects/field-type.h",
"src/objects/fixed-array-inl.h",
"src/objects/fixed-array.h",
"src/objects/foreign-inl.h",
"src/objects/foreign.h",
"src/objects/free-space-inl.h",
"src/objects/free-space.h",
"src/objects/function-kind.h",
"src/objects/function-syntax-kind.h",
"src/objects/hash-table-inl.h",
"src/objects/hash-table.h",
"src/objects/heap-number-inl.h",
"src/objects/heap-number.h",
"src/objects/heap-object-inl.h",
"src/objects/heap-object.h",
"src/objects/hole.h",
"src/objects/instance-type-checker.h",
"src/objects/instance-type-inl.h",
"src/objects/instance-type.h",
"src/objects/internal-index.h",
"src/objects/js-array-buffer-inl.h",
"src/objects/js-array-buffer.h",
"src/objects/js-array-inl.h",
"src/objects/js-array.h",
"src/objects/js-atomics-synchronization-inl.h",
"src/objects/js-atomics-synchronization.h",
"src/objects/js-collection-inl.h",
"src/objects/js-collection-iterator-inl.h",
"src/objects/js-collection-iterator.h",
"src/objects/js-collection.h",
"src/objects/js-disposable-stack-inl.h",
"src/objects/js-disposable-stack.h",
"src/objects/js-function-inl.h",
"src/objects/js-function.h",
"src/objects/js-generator-inl.h",
"src/objects/js-generator.h",
"src/objects/js-iterator-helpers-inl.h",
"src/objects/js-iterator-helpers.h",
"src/objects/js-objects-inl.h",
"src/objects/js-objects.h",
"src/objects/js-promise-inl.h",
"src/objects/js-promise.h",
"src/objects/js-proxy-inl.h",
"src/objects/js-proxy.h",
"src/objects/js-raw-json-inl.h",
"src/objects/js-raw-json.h",
"src/objects/js-regexp-inl.h",
"src/objects/js-regexp-string-iterator-inl.h",
"src/objects/js-regexp-string-iterator.h",
"src/objects/js-regexp.h",
"src/objects/js-segments-inl.h",
"src/objects/js-segments.h",
"src/objects/js-shadow-realm-inl.h",
"src/objects/js-shadow-realm.h",
"src/objects/js-shared-array-inl.h",
"src/objects/js-shared-array.h",
"src/objects/js-struct-inl.h",
"src/objects/js-struct.h",
"src/objects/js-temporal-helpers.h",
"src/objects/js-weak-refs-inl.h",
"src/objects/js-weak-refs.h",
"src/objects/keys.h",
"src/objects/literal-objects-inl.h",
"src/objects/literal-objects.h",
"src/objects/lookup-cache-inl.h",
"src/objects/lookup-cache.h",
"src/objects/lookup-inl.h",
"src/objects/lookup.h",
"src/objects/managed-inl.h",
"src/objects/managed.h",
"src/objects/map-inl.h",
"src/objects/map-updater.h",
"src/objects/map.h",
"src/objects/maybe-object-inl.h",
"src/objects/maybe-object.h",
"src/objects/megadom-handler-inl.h",
"src/objects/megadom-handler.h",
"src/objects/microtask-inl.h",
"src/objects/microtask.h",
"src/objects/module-inl.h",
"src/objects/module.h",
"src/objects/name-inl.h",
"src/objects/name.h",
"src/objects/object-list-macros.h",
"src/objects/object-macros-undef.h",
"src/objects/object-macros.h",
"src/objects/object-type.h",
"src/objects/objects-body-descriptors-inl.h",
"src/objects/objects-body-descriptors.h",
"src/objects/objects-definitions.h",
"src/objects/objects-inl.h",
"src/objects/objects.h",
"src/objects/oddball-inl.h",
"src/objects/oddball.h",
"src/objects/off-heap-hash-table-inl.h",
"src/objects/off-heap-hash-table.h",
"src/objects/option-utils.h",
"src/objects/ordered-hash-table-inl.h",
"src/objects/ordered-hash-table.h",
"src/objects/primitive-heap-object-inl.h",
"src/objects/primitive-heap-object.h",
"src/objects/promise-inl.h",
"src/objects/promise.h",
"src/objects/property-array-inl.h",
"src/objects/property-array.h",
"src/objects/property-cell-inl.h",
"src/objects/property-cell.h",
"src/objects/property-descriptor-object-inl.h",
"src/objects/property-descriptor-object.h",
"src/objects/property-descriptor.h",
"src/objects/property-details.h",
"src/objects/property.h",
"src/objects/prototype-info-inl.h",
"src/objects/prototype-info.h",
"src/objects/prototype-inl.h",
"src/objects/prototype.h",
"src/objects/regexp-match-info.h",
"src/objects/scope-info-inl.h",
"src/objects/scope-info.h",
"src/objects/script-inl.h",
"src/objects/script.h",
"src/objects/shared-function-info-inl.h",
"src/objects/shared-function-info.h",
"src/objects/simd.h",
"src/objects/slots-atomic-inl.h",
"src/objects/slots-inl.h",
"src/objects/slots.h",
"src/objects/smi-inl.h",
"src/objects/smi.h",
"src/objects/source-text-module-inl.h",
"src/objects/source-text-module.h",
"src/objects/string-comparator.h",
"src/objects/string-forwarding-table-inl.h",
"src/objects/string-forwarding-table.h",
"src/objects/string-inl.h",
"src/objects/string-set-inl.h",
"src/objects/string-set.h",
"src/objects/string-table-inl.h",
"src/objects/string-table.h",
"src/objects/string.h",
"src/objects/struct-inl.h",
"src/objects/struct.h",
"src/objects/swiss-hash-table-helpers.h",
"src/objects/swiss-name-dictionary-inl.h",
"src/objects/swiss-name-dictionary.h",
"src/objects/synthetic-module-inl.h",
"src/objects/synthetic-module.h",
"src/objects/tagged-field-inl.h",
"src/objects/tagged-field.h",
"src/objects/tagged-impl-inl.h",
"src/objects/tagged-impl.h",
"src/objects/tagged-index.h",
"src/objects/tagged-value-inl.h",
"src/objects/tagged-value.h",
"src/objects/tagged.h",
"src/objects/template-objects-inl.h",
"src/objects/template-objects.h",
"src/objects/templates-inl.h",
"src/objects/templates.h",
"src/objects/torque-defined-classes-inl.h",
"src/objects/torque-defined-classes.h",
"src/objects/transitions-inl.h",
"src/objects/transitions.h",
"src/objects/trusted-object-inl.h",
"src/objects/trusted-object.h",
"src/objects/trusted-pointer-inl.h",
"src/objects/trusted-pointer.h",
"src/objects/turbofan-types-inl.h",
"src/objects/turbofan-types.h",
"src/objects/turboshaft-types-inl.h",
"src/objects/turboshaft-types.h",
"src/objects/type-hints.h",
"src/objects/union.h",
"src/objects/value-serializer.h",
"src/objects/visitors-inl.h",
"src/objects/visitors.h",
"src/objects/waiter-queue-node.h",
"src/parsing/expression-scope.h",
"src/parsing/func-name-inferrer.h",
"src/parsing/import-attributes.h",
"src/parsing/keywords-gen.h",
"src/parsing/literal-buffer.h",
"src/parsing/parse-info.h",
"src/parsing/parser-base.h",
"src/parsing/parser.h",
"src/parsing/parsing.h",
"src/parsing/pending-compilation-error-handler.h",
"src/parsing/preparse-data-impl.h",
"src/parsing/preparse-data.h",
"src/parsing/preparser-logger.h",
"src/parsing/preparser.h",
"src/parsing/rewriter.h",
"src/parsing/scanner-character-streams.h",
"src/parsing/scanner-inl.h",
"src/parsing/scanner.h",
"src/parsing/token.h",
"src/profiler/allocation-tracker.h",
"src/profiler/circular-queue-inl.h",
"src/profiler/circular-queue.h",
"src/profiler/cpu-profiler-inl.h",
"src/profiler/cpu-profiler.h",
"src/profiler/heap-profiler.h",
"src/profiler/heap-snapshot-common.h",
"src/profiler/heap-snapshot-generator-inl.h",
"src/profiler/heap-snapshot-generator.h",
"src/profiler/output-stream-writer.h",
"src/profiler/profile-generator-inl.h",
"src/profiler/profile-generator.h",
"src/profiler/profiler-listener.h",
"src/profiler/profiler-stats.h",
"src/profiler/sampling-heap-profiler.h",
"src/profiler/strings-storage.h",
"src/profiler/symbolizer.h",
"src/profiler/tick-sample.h",
"src/profiler/tracing-cpu-profiler.h",
"src/profiler/weak-code-registry.h",
"src/regexp/experimental/experimental-bytecode.h",
"src/regexp/experimental/experimental-compiler.h",
"src/regexp/experimental/experimental-interpreter.h",
"src/regexp/experimental/experimental.h",
"src/regexp/regexp-ast.h",
"src/regexp/regexp-bytecode-analysis.h",
"src/regexp/regexp-bytecode-generator-inl.h",
"src/regexp/regexp-bytecode-generator.h",
"src/regexp/regexp-bytecode-iterator-inl.h",
"src/regexp/regexp-bytecode-iterator.h",
"src/regexp/regexp-bytecode-peephole.h",
"src/regexp/regexp-bytecodes-inl.h",
"src/regexp/regexp-bytecodes.h",
"src/regexp/regexp-code-generator.h",
"src/regexp/regexp-compiler.h",
"src/regexp/regexp-error.h",
"src/regexp/regexp-flags.h",
"src/regexp/regexp-interpreter.h",
"src/regexp/regexp-macro-assembler-arch.h",
"src/regexp/regexp-macro-assembler.h",
"src/regexp/regexp-nodes.h",
"src/regexp/regexp-parser.h",
"src/regexp/regexp-result-vector.h",
"src/regexp/regexp-stack.h",
"src/regexp/regexp-utils.h",
"src/regexp/regexp.h",
"src/regexp/special-case.h",
"src/roots/roots-inl.h",
"src/roots/roots.h",
"src/roots/static-roots-intl-nowasm.h",
"src/roots/static-roots-intl-wasm.h",
"src/roots/static-roots-nointl-nowasm.h",
"src/roots/static-roots-nointl-wasm.h",
"src/roots/static-roots.h",
"src/runtime/runtime-utils.h",
"src/runtime/runtime.h",
"src/sandbox/bounded-size-inl.h",
"src/sandbox/bounded-size.h",
"src/sandbox/bytecode-verifier.h",
"src/sandbox/check.h",
"src/sandbox/code-entrypoint-tag.h",
"src/sandbox/code-pointer-inl.h",
"src/sandbox/code-pointer-table-inl.h",
"src/sandbox/code-pointer-table.h",
"src/sandbox/code-pointer.h",
"src/sandbox/code-sandboxing-mode.h",
"src/sandbox/compactible-external-entity-table-inl.h",
"src/sandbox/compactible-external-entity-table.h",
"src/sandbox/cppheap-pointer-inl.h",
"src/sandbox/cppheap-pointer-table-inl.h",
"src/sandbox/cppheap-pointer-table.h",
"src/sandbox/cppheap-pointer.h",
"src/sandbox/external-entity-table-inl.h",
"src/sandbox/external-entity-table.h",
"src/sandbox/external-pointer-inl.h",
"src/sandbox/external-pointer-table-inl.h",
"src/sandbox/external-pointer-table.h",
"src/sandbox/external-pointer.h",
"src/sandbox/external-strings-cage.h",
"src/sandbox/hardware-support.h",
"src/sandbox/indirect-pointer-inl.h",
"src/sandbox/indirect-pointer-tag.h",
"src/sandbox/indirect-pointer.h",
"src/sandbox/isolate-inl.h",
"src/sandbox/isolate.h",
"src/sandbox/js-dispatch-table-inl.h",
"src/sandbox/js-dispatch-table.h",
"src/sandbox/sandbox-malloc.h",
"src/sandbox/sandbox.h",
"src/sandbox/sandboxable-thread.h",
"src/sandbox/sandboxed-pointer-inl.h",
"src/sandbox/sandboxed-pointer.h",
"src/sandbox/tagged-payload.h",
"src/sandbox/testing.h",
"src/sandbox/trusted-pointer-scope.h",
"src/sandbox/trusted-pointer-table-inl.h",
"src/sandbox/trusted-pointer-table.h",
"src/snapshot/code-serializer.h",
"src/snapshot/context-deserializer.h",
"src/snapshot/context-serializer.h",
"src/snapshot/deserializer.h",
"src/snapshot/embedded/embedded-data-inl.h",
"src/snapshot/embedded/embedded-data.h",
"src/snapshot/embedded/embedded-file-writer-interface.h",
"src/snapshot/object-deserializer.h",
"src/snapshot/read-only-deserializer.h",
"src/snapshot/read-only-serializer-deserializer.h",
"src/snapshot/read-only-serializer.h",
"src/snapshot/references.h",
"src/snapshot/roots-serializer.h",
"src/snapshot/serializer-deserializer.h",
"src/snapshot/serializer-inl.h",
"src/snapshot/serializer.h",
"src/snapshot/shared-heap-deserializer.h",
"src/snapshot/shared-heap-serializer.h",
"src/snapshot/snapshot-data.h",
"src/snapshot/snapshot-source-sink.h",
"src/snapshot/snapshot-utils.h",
"src/snapshot/snapshot.h",
"src/snapshot/sort-builtins.h",
"src/snapshot/startup-deserializer.h",
"src/snapshot/startup-serializer.h",
"src/strings/char-predicates-inl.h",
"src/strings/char-predicates.h",
"src/strings/owning-external-string-resource.h",
"src/strings/string-builder-inl.h",
"src/strings/string-builder.h",
"src/strings/string-case.h",
"src/strings/string-hasher-inl.h",
"src/strings/string-hasher.h",
"src/strings/string-search.h",
"src/strings/string-stream.h",
"src/strings/unicode-decoder.h",
"src/strings/unicode-inl.h",
"src/strings/unicode.h",
"src/strings/uri.h",
"src/tasks/cancelable-task.h",
"src/tasks/operations-barrier.h",
"src/tasks/task-utils.h",
"src/torque/runtime-macro-shims.h",
"src/tracing/trace-event-no-perfetto.h",
"src/tracing/trace-event.h",
"src/tracing/trace-id.h",
"src/tracing/traced-value.h",
"src/tracing/tracing-category-observer.h",
"src/utils/address-map.h",
"src/utils/allocation.h",
"src/utils/bit-vector.h",
"src/utils/boxed-float.h",
"src/utils/detachable-vector.h",
"src/utils/hex-format.h",
"src/utils/identity-map.h",
"src/utils/locked-queue-inl.h",
"src/utils/locked-queue.h",
"src/utils/memcopy.h",
"src/utils/ostreams.h",
"src/utils/output-stream.h",
"src/utils/scoped-list.h",
"src/utils/sha-256.h",
"src/utils/sparse-bit-vector.h",
"src/utils/utils-inl.h",
"src/utils/utils.h",
"src/utils/version.h",
"src/zone/accounting-allocator.h",
"src/zone/type-stats.h",
"src/zone/zone-allocator.h",
"src/zone/zone-chunk-list.h",
"src/zone/zone-compact-set.h",
"src/zone/zone-containers.h",
"src/zone/zone-hashmap.h",
"src/zone/zone-list-inl.h",
"src/zone/zone-list.h",
"src/zone/zone-segment.h",
"src/zone/zone-type-traits.h",
"src/zone/zone-utils.h",
"src/zone/zone.h",
"third_party/rapidhash-v8/rapidhash.h",
"third_party/rapidhash-v8/secret.h",
"third_party/siphash/halfsiphash.h",
"third_party/utf8-decoder/utf8-decoder.h",
]
if (v8_enable_snapshot_compression) {
sources += [ "src/snapshot/snapshot-compression.h" ]
}
if (v8_enable_regexp_diagnostics) {
sources += [
"src/regexp/regexp-ast-printer.h",
"src/regexp/regexp-dotprinter.h",
"src/regexp/regexp-graph-printer.h",
"src/regexp/regexp-macro-assembler-tracer.h",
"src/regexp/regexp-node-printer.h",
"src/regexp/regexp-printer.h",
]
}
if (v8_enable_temporal_support) {
sources += [
"src/objects/js-temporal-objects-inl.h",
"src/objects/js-temporal-objects.h",
"src/objects/js-temporal-zoneinfo64.h",
]
}
if (v8_use_perfetto) {
sources -= [ "src/tracing/trace-event-no-perfetto.h" ]
sources += [
"src/tracing/code-data-source.h",
"src/tracing/code-trace-context.h",
"src/tracing/perfetto-logger.h",
"src/tracing/perfetto-sdk.h",
"src/tracing/perfetto-utils.h",
]
}
if (v8_enable_sparkplug) {
sources += [
"src/baseline/baseline-assembler-inl.h",
"src/baseline/baseline-assembler.h",
"src/baseline/baseline-batch-compiler.h",
"src/baseline/baseline-compiler.h",
]
}
if (v8_enable_maglev) {
sources += [
"src/maglev/hamt.h",
"src/maglev/maglev-assembler-inl.h",
"src/maglev/maglev-assembler.h",
"src/maglev/maglev-basic-block.h",
"src/maglev/maglev-code-gen-state-inl.h",
"src/maglev/maglev-code-gen-state.h",
"src/maglev/maglev-code-generator.h",
"src/maglev/maglev-compilation-info.h",
"src/maglev/maglev-compilation-unit.h",
"src/maglev/maglev-compiler.h",
"src/maglev/maglev-concurrent-dispatcher.h",
"src/maglev/maglev-deopt-frame-visitor.h",
"src/maglev/maglev-graph-builder.h",
"src/maglev/maglev-graph-labeller.h",
"src/maglev/maglev-graph-optimizer.h",
"src/maglev/maglev-graph-printer.h",
"src/maglev/maglev-graph-processor.h",
"src/maglev/maglev-graph-verifier.h",
"src/maglev/maglev-graph.h",
"src/maglev/maglev-inlining.h",
"src/maglev/maglev-interpreter-frame-state.h",
"src/maglev/maglev-ir-inl.h",
"src/maglev/maglev-ir.h",
"src/maglev/maglev-kna-processor.h",
"src/maglev/maglev-known-node-aspects.h",
"src/maglev/maglev-node-type.h",
"src/maglev/maglev-phi-representation-selector.h",
"src/maglev/maglev-pipeline-statistics.h",
"src/maglev/maglev-post-hoc-optimizations-processors.h",
"src/maglev/maglev-pre-regalloc-codegen-processors.h",
"src/maglev/maglev-range-analysis.h",
"src/maglev/maglev-range-verification.h",
"src/maglev/maglev-range.h",
"src/maglev/maglev-reducer-inl.h",
"src/maglev/maglev-reducer.h",
"src/maglev/maglev-regalloc-data.h",
"src/maglev/maglev-regalloc.h",
"src/maglev/maglev-register-frame-array.h",
"src/maglev/maglev-truncation.h",
"src/maglev/maglev.h",
]
if (v8_current_cpu == "arm") {
sources += [ "src/maglev/arm/maglev-assembler-arm-inl.h" ]
} else if (v8_current_cpu == "arm64") {
sources += [ "src/maglev/arm64/maglev-assembler-arm64-inl.h" ]
} else if (v8_current_cpu == "riscv64") {
sources += [ "src/maglev/riscv/maglev-assembler-riscv-inl.h" ]
} else if (v8_current_cpu == "x64") {
sources += [ "src/maglev/x64/maglev-assembler-x64-inl.h" ]
} else if (v8_current_cpu == "s390x") {
sources += [ "src/maglev/s390/maglev-assembler-s390-inl.h" ]
} else if (v8_current_cpu == "ppc64") {
sources += [ "src/maglev/ppc/maglev-assembler-ppc-inl.h" ]
} else if (v8_current_cpu == "loong64") {
sources += [ "src/maglev/loong64/maglev-assembler-loong64-inl.h" ]
}
}
if (v8_enable_webassembly) {
sources += [
"src/asmjs/asm-js.h",
"src/asmjs/asm-names.h",
"src/asmjs/asm-parser.h",
"src/asmjs/asm-scanner.h",
"src/asmjs/asm-types.h",
"src/compiler/int64-lowering.h",
"src/compiler/turboshaft/growable-stacks-reducer.h",
"src/compiler/turboshaft/int64-lowering-phase.h",
"src/compiler/turboshaft/int64-lowering-reducer.h",
"src/compiler/turboshaft/wasm-assembler-helpers.h",
"src/compiler/turboshaft/wasm-debug-memory-lowering-phase.h",
"src/compiler/turboshaft/wasm-gc-optimize-phase.h",
"src/compiler/turboshaft/wasm-gc-typed-optimization-reducer.h",
"src/compiler/turboshaft/wasm-in-js-inlining-phase.h",
"src/compiler/turboshaft/wasm-in-js-inlining-reducer-inl.h",
"src/compiler/turboshaft/wasm-js-lowering-reducer.h",
"src/compiler/turboshaft/wasm-load-elimination-reducer.h",
"src/compiler/turboshaft/wasm-lowering-phase.h",
"src/compiler/turboshaft/wasm-lowering-reducer.h",
"src/compiler/turboshaft/wasm-optimize-phase.h",
"src/compiler/turboshaft/wasm-shuffle-reducer.h",
"src/compiler/turboshaft/wasm-simd-phase.h",
"src/compiler/turboshaft/wasm-turboshaft-compiler.h",
"src/compiler/wasm-address-reassociation.h",
"src/compiler/wasm-call-descriptors.h",
"src/compiler/wasm-compiler-definitions.h",
"src/compiler/wasm-compiler.h",
"src/compiler/wasm-escape-analysis.h",
"src/compiler/wasm-gc-lowering.h",
"src/compiler/wasm-gc-operator-reducer.h",
"src/compiler/wasm-graph-assembler.h",
"src/compiler/wasm-inlining-into-js.h",
"src/compiler/wasm-load-elimination.h",
"src/compiler/wasm-typer.h",
"src/debug/debug-wasm-objects-inl.h",
"src/debug/debug-wasm-objects.h",
"src/trap-handler/trap-handler-internal.h",
"src/trap-handler/trap-handler.h",
"src/wasm/baseline/liftoff-assembler-defs.h",
"src/wasm/baseline/liftoff-assembler-inl.h",
"src/wasm/baseline/liftoff-assembler.h",
"src/wasm/baseline/liftoff-compiler.h",
"src/wasm/baseline/liftoff-register.h",
"src/wasm/baseline/liftoff-varstate.h",
"src/wasm/baseline/parallel-move-inl.h",
"src/wasm/baseline/parallel-move.h",
"src/wasm/basic-block-calculator.h",
"src/wasm/canonical-types.h",
"src/wasm/code-space-access.h",
"src/wasm/compilation-environment-inl.h",
"src/wasm/compilation-environment.h",
"src/wasm/compilation-hints-generation.h",
"src/wasm/constant-expression-interface.h",
"src/wasm/constant-expression.h",
"src/wasm/decoder.h",
"src/wasm/function-body-decoder-impl.h",
"src/wasm/function-body-decoder.h",
"src/wasm/function-compiler.h",
"src/wasm/fuzzing/random-module-generation.h",
"src/wasm/inlining-tree.h",
"src/wasm/jump-table-assembler.h",
"src/wasm/leb-helper.h",
"src/wasm/local-decl-encoder.h",
"src/wasm/module-compiler.h",
"src/wasm/module-decoder-impl.h",
"src/wasm/module-decoder.h",
"src/wasm/module-instantiate.h",
"src/wasm/names-provider.h",
"src/wasm/object-access.h",
"src/wasm/pgo.h",
"src/wasm/signature-hashing.h",
"src/wasm/simd-shuffle.h",
"src/wasm/stacks.h",
"src/wasm/std-object-sizes.h",
"src/wasm/streaming-decoder.h",
"src/wasm/string-builder-multiline.h",
"src/wasm/string-builder.h",
"src/wasm/struct-types.h",
"src/wasm/turboshaft-graph-interface-inl.h",
"src/wasm/turboshaft-graph-interface.h",
"src/wasm/value-type.h",
"src/wasm/wasm-arguments.h",
"src/wasm/wasm-builtin-list.h",
"src/wasm/wasm-code-coverage.h",
"src/wasm/wasm-code-manager.h",
"src/wasm/wasm-code-pointer-table-inl.h",
"src/wasm/wasm-code-pointer-table.h",
"src/wasm/wasm-debug.h",
"src/wasm/wasm-deopt-data.h",
"src/wasm/wasm-disassembler-impl.h",
"src/wasm/wasm-disassembler.h",
"src/wasm/wasm-engine.h",
"src/wasm/wasm-export-wrapper-cache.h",
"src/wasm/wasm-external-refs.h",
"src/wasm/wasm-feature-flags.h",
"src/wasm/wasm-features.h",
"src/wasm/wasm-import-wrapper-cache.h",
"src/wasm/wasm-init-expr.h",
"src/wasm/wasm-js.h",
"src/wasm/wasm-linkage.h",
"src/wasm/wasm-module-builder.h",
"src/wasm/wasm-module-sourcemap.h",
"src/wasm/wasm-module.h",
"src/wasm/wasm-objects-inl.h",
"src/wasm/wasm-objects.h",
"src/wasm/wasm-opcodes-inl.h",
"src/wasm/wasm-opcodes.h",
"src/wasm/wasm-result.h",
"src/wasm/wasm-serialization.h",
"src/wasm/wasm-stack-wrapper-cache.h",
"src/wasm/wasm-subtyping.h",
"src/wasm/wasm-tier.h",
"src/wasm/wasm-tracing.h",
"src/wasm/wasm-value.h",
"src/wasm/wasm-wrapper-cache-inl.h",
"src/wasm/wasm-wrapper-cache.h",
"src/wasm/well-known-imports.h",
"src/wasm/wrappers-inl.h",
"src/wasm/wrappers.h",
"third_party/utf8-decoder/generalized-utf8-decoder.h",
]
if (v8_enable_drumbrake) {
sources += [
"src/wasm/interpreter/instruction-handlers.h",
"src/wasm/interpreter/wasm-interpreter-inl.h",
"src/wasm/interpreter/wasm-interpreter-objects-inl.h",
"src/wasm/interpreter/wasm-interpreter-objects.h",
"src/wasm/interpreter/wasm-interpreter-runtime-inl.h",
"src/wasm/interpreter/wasm-interpreter-runtime.h",
"src/wasm/interpreter/wasm-interpreter.h",
]
}
}
if (v8_enable_wasm_simd256_revec) {
sources += [
"src/compiler/linear-scheduler.h",
"src/compiler/revectorizer.h",
"src/compiler/turboshaft/wasm-revec-phase.h",
"src/compiler/turboshaft/wasm-revec-reducer.h",
]
}
if (v8_enable_i18n_support) {
sources += [
"src/objects/intl-objects.h",
"src/objects/js-break-iterator-inl.h",
"src/objects/js-break-iterator.h",
"src/objects/js-collator-inl.h",
"src/objects/js-collator.h",
"src/objects/js-date-time-format-inl.h",
"src/objects/js-date-time-format.h",
"src/objects/js-display-names-inl.h",
"src/objects/js-display-names.h",
"src/objects/js-duration-format-inl.h",
"src/objects/js-duration-format.h",
"src/objects/js-list-format-inl.h",
"src/objects/js-list-format.h",
"src/objects/js-locale-inl.h",
"src/objects/js-locale.h",
"src/objects/js-number-format-inl.h",
"src/objects/js-number-format.h",
"src/objects/js-plural-rules-inl.h",
"src/objects/js-plural-rules.h",
"src/objects/js-relative-time-format-inl.h",
"src/objects/js-relative-time-format.h",
"src/objects/js-segment-iterator-inl.h",
"src/objects/js-segment-iterator.h",
"src/objects/js-segmenter-inl.h",
"src/objects/js-segmenter.h",
]
}
if (!v8_control_flow_integrity) {
sources += [ "src/execution/pointer-authentication-dummy.h" ]
}
if (v8_enable_wasm_gdb_remote_debugging) {
sources += [
"src/debug/wasm/gdb-server/gdb-remote-util.h",
"src/debug/wasm/gdb-server/gdb-server-thread.h",
"src/debug/wasm/gdb-server/gdb-server.h",
"src/debug/wasm/gdb-server/packet.h",
"src/debug/wasm/gdb-server/session.h",
"src/debug/wasm/gdb-server/target.h",
"src/debug/wasm/gdb-server/transport.h",
"src/debug/wasm/gdb-server/wasm-module-debug.h",
]
}
if (v8_enable_heap_snapshot_verify) {
sources += [ "src/heap/reference-summarizer.h" ]
}
if (v8_current_cpu == "x86") {
sources += [
### gcmole(ia32) ###
"src/baseline/ia32/baseline-assembler-ia32-inl.h",
"src/baseline/ia32/baseline-compiler-ia32-inl.h",
"src/codegen/ia32/assembler-ia32-inl.h",
"src/codegen/ia32/assembler-ia32.h",
"src/codegen/ia32/constants-ia32.h",
"src/codegen/ia32/interface-descriptors-ia32-inl.h",
"src/codegen/ia32/macro-assembler-ia32.h",
"src/codegen/ia32/register-ia32.h",
"src/codegen/ia32/reglist-ia32.h",
"src/codegen/ia32/sse-instr.h",
"src/codegen/shared-ia32-x64/macro-assembler-shared-ia32-x64.h",
"src/compiler/backend/ia32/instruction-codes-ia32.h",
"src/execution/ia32/frame-constants-ia32.h",
"src/regexp/ia32/regexp-macro-assembler-ia32.h",
"src/wasm/baseline/ia32/liftoff-assembler-ia32-inl.h",
]
if (v8_enable_sparkplug) {
sources += [
"src/baseline/ia32/baseline-assembler-ia32-inl.h",
"src/baseline/ia32/baseline-compiler-ia32-inl.h",
]
}
} else if (v8_current_cpu == "x64") {
sources += [
### gcmole(x64) ###
"src/codegen/shared-ia32-x64/macro-assembler-shared-ia32-x64.h",
"src/codegen/x64/assembler-x64-inl.h",
"src/codegen/x64/assembler-x64.h",
"src/codegen/x64/constants-x64.h",
"src/codegen/x64/fma-instr.h",
"src/codegen/x64/interface-descriptors-x64-inl.h",
"src/codegen/x64/macro-assembler-x64.h",
"src/codegen/x64/register-x64.h",
"src/codegen/x64/reglist-x64.h",
"src/codegen/x64/sse-instr.h",
"src/compiler/backend/x64/instruction-codes-x64.h",
"src/compiler/backend/x64/unwinding-info-writer-x64.h",
"src/execution/x64/frame-constants-x64.h",
"src/regexp/x64/regexp-macro-assembler-x64.h",
"src/wasm/baseline/x64/liftoff-assembler-x64-inl.h",
"third_party/valgrind/valgrind.h",
]
if (is_win) {
sources += [ "src/diagnostics/unwinding-info-win64.h" ]
}
if (v8_enable_sparkplug) {
sources += [
"src/baseline/x64/baseline-assembler-x64-inl.h",
"src/baseline/x64/baseline-compiler-x64-inl.h",
]
}
if (v8_enable_webassembly) {
# iOS Xcode simulator builds run on an x64 target. iOS and macOS are both
# based on Darwin and thus POSIX-compliant to a similar degree.
if (is_linux || is_chromeos || is_mac || is_ios ||
target_os == "freebsd") {
sources += [ "src/trap-handler/handler-inside-posix.h" ]
} else if (is_win) {
sources += [ "src/trap-handler/handler-inside-win.h" ]
}
}
} else if (v8_current_cpu == "arm") {
sources += [
### gcmole(arm) ###
"src/codegen/arm/assembler-arm-inl.h",
"src/codegen/arm/assembler-arm.h",
"src/codegen/arm/constants-arm.h",
"src/codegen/arm/interface-descriptors-arm-inl.h",
"src/codegen/arm/macro-assembler-arm.h",
"src/codegen/arm/register-arm.h",
"src/codegen/arm/reglist-arm.h",
"src/compiler/backend/arm/instruction-codes-arm.h",
"src/compiler/backend/arm/unwinding-info-writer-arm.h",
"src/execution/arm/frame-constants-arm.h",
"src/execution/arm/simulator-arm.h",
"src/regexp/arm/regexp-macro-assembler-arm.h",
"src/wasm/baseline/arm/liftoff-assembler-arm-inl.h",
]
if (v8_enable_sparkplug) {
sources += [
"src/baseline/arm/baseline-assembler-arm-inl.h",
"src/baseline/arm/baseline-compiler-arm-inl.h",
]
}
} else if (v8_current_cpu == "arm64") {
sources += [
### gcmole(arm64) ###
"src/codegen/arm64/assembler-arm64-inl.h",
"src/codegen/arm64/assembler-arm64.h",
"src/codegen/arm64/constant-pool-arm64.h",
"src/codegen/arm64/constants-arm64.h",
"src/codegen/arm64/decoder-arm64-inl.h",
"src/codegen/arm64/decoder-arm64.h",
"src/codegen/arm64/instructions-arm64.h",
"src/codegen/arm64/interface-descriptors-arm64-inl.h",
"src/codegen/arm64/macro-assembler-arm64-inl.h",
"src/codegen/arm64/macro-assembler-arm64.h",
"src/codegen/arm64/register-arm64.h",
"src/codegen/arm64/reglist-arm64.h",
"src/codegen/arm64/utils-arm64.h",
"src/compiler/backend/arm64/instruction-codes-arm64.h",
"src/compiler/backend/arm64/unwinding-info-writer-arm64.h",
"src/diagnostics/arm64/disasm-arm64.h",
"src/execution/arm64/frame-constants-arm64.h",
"src/execution/arm64/simulator-arm64.h",
"src/regexp/arm64/regexp-macro-assembler-arm64.h",
"src/wasm/baseline/arm64/liftoff-assembler-arm64-inl.h",
]
if (v8_control_flow_integrity) {
sources += [ "src/execution/arm64/pointer-authentication-arm64.h" ]
}
if (v8_enable_sparkplug) {
sources += [
"src/baseline/arm64/baseline-assembler-arm64-inl.h",
"src/baseline/arm64/baseline-compiler-arm64-inl.h",
]
}
if (v8_enable_webassembly) {
# Trap handling is enabled on arm64 Mac and Linux and in simulators on
# x64 on Linux and Mac.
if ((current_cpu == "arm64" &&
(is_linux || is_chromeos || is_mac || is_ios)) ||
(current_cpu == "x64" && (is_linux || is_chromeos || is_mac))) {
sources += [ "src/trap-handler/handler-inside-posix.h" ]
}
if ((current_cpu == "x64" &&
(is_linux || is_chromeos || is_mac || is_win)) ||
(current_cpu == "arm64" && v8_target_is_simulator &&
(is_linux || is_mac))) {
sources += [ "src/trap-handler/trap-handler-simulator.h" ]
}
}
if (is_win) {
sources += [ "src/diagnostics/unwinding-info-win64.h" ]
}
} else if (v8_current_cpu == "mips64" || v8_current_cpu == "mips64el") {
sources += [
### gcmole(mips64el) ###
"src/codegen/mips64/assembler-mips64-inl.h",
"src/codegen/mips64/assembler-mips64.h",
"src/codegen/mips64/constants-mips64.h",
"src/codegen/mips64/macro-assembler-mips64.h",
"src/codegen/mips64/register-mips64.h",
"src/codegen/mips64/reglist-mips64.h",
"src/compiler/backend/mips64/instruction-codes-mips64.h",
"src/execution/mips64/frame-constants-mips64.h",
"src/execution/mips64/simulator-mips64.h",
"src/regexp/mips64/regexp-macro-assembler-mips64.h",
"src/wasm/baseline/mips64/liftoff-assembler-mips64-inl.h",
]
if (v8_enable_sparkplug) {
sources += [
"src/baseline/mips64/baseline-assembler-mips64-inl.h",
"src/baseline/mips64/baseline-compiler-mips64-inl.h",
]
}
} else if (v8_current_cpu == "loong64") {
sources += [
### gcmole(loong64) ###
"src/codegen/loong64/assembler-loong64-inl.h",
"src/codegen/loong64/assembler-loong64.h",
"src/codegen/loong64/constants-loong64.h",
"src/codegen/loong64/macro-assembler-loong64.h",
"src/codegen/loong64/register-loong64.h",
"src/codegen/loong64/reglist-loong64.h",
"src/compiler/backend/loong64/instruction-codes-loong64.h",
"src/execution/loong64/frame-constants-loong64.h",
"src/execution/loong64/simulator-loong64.h",
"src/regexp/loong64/regexp-macro-assembler-loong64.h",
"src/wasm/baseline/loong64/liftoff-assembler-loong64-inl.h",
]
if (v8_enable_sparkplug) {
sources += [
"src/baseline/loong64/baseline-assembler-loong64-inl.h",
"src/baseline/loong64/baseline-compiler-loong64-inl.h",
]
}
if (v8_enable_webassembly) {
# Trap handling is enabled on loong64 Linux and in simulators on
# x64 on Linux.
if ((current_cpu == "loong64" && is_linux) ||
(current_cpu == "x64" && is_linux)) {
sources += [ "src/trap-handler/handler-inside-posix.h" ]
}
if (current_cpu == "x64" && is_linux) {
sources += [ "src/trap-handler/trap-handler-simulator.h" ]
}
}
} else if (v8_current_cpu == "ppc64") {
sources += [
### gcmole(ppc64) ###
"src/codegen/ppc/assembler-ppc-inl.h",
"src/codegen/ppc/assembler-ppc.h",
"src/codegen/ppc/constant-pool-ppc.h",
"src/codegen/ppc/constants-ppc.h",
"src/codegen/ppc/interface-descriptors-ppc-inl.h",
"src/codegen/ppc/macro-assembler-ppc.h",
"src/codegen/ppc/register-ppc.h",
"src/codegen/ppc/reglist-ppc.h",
"src/compiler/backend/ppc/instruction-codes-ppc.h",
"src/compiler/backend/ppc/unwinding-info-writer-ppc.h",
"src/execution/ppc/frame-constants-ppc.h",
"src/execution/ppc/simulator-ppc.h",
"src/regexp/ppc/regexp-macro-assembler-ppc.h",
"src/wasm/baseline/ppc/liftoff-assembler-ppc-inl.h",
]
if (v8_enable_sparkplug) {
sources += [
"src/baseline/ppc/baseline-assembler-ppc-inl.h",
"src/baseline/ppc/baseline-compiler-ppc-inl.h",
]
}
} else if (v8_current_cpu == "s390x") {
sources += [
### gcmole(s390) ###
"src/codegen/s390/assembler-s390-inl.h",
"src/codegen/s390/assembler-s390.h",
"src/codegen/s390/constants-s390.h",
"src/codegen/s390/interface-descriptors-s390-inl.h",
"src/codegen/s390/macro-assembler-s390.h",
"src/codegen/s390/register-s390.h",
"src/codegen/s390/reglist-s390.h",
"src/compiler/backend/s390/instruction-codes-s390.h",
"src/compiler/backend/s390/unwinding-info-writer-s390.h",
"src/execution/s390/frame-constants-s390.h",
"src/execution/s390/simulator-s390.h",
"src/regexp/s390/regexp-macro-assembler-s390.h",
"src/wasm/baseline/s390/liftoff-assembler-s390-inl.h",
]
if (v8_enable_sparkplug) {
sources += [
"src/baseline/s390/baseline-assembler-s390-inl.h",
"src/baseline/s390/baseline-compiler-s390-inl.h",
]
}
} else if (v8_current_cpu == "riscv64") {
sources += [
### gcmole(riscv64) ###
"src/baseline/riscv/baseline-assembler-riscv-inl.h",
"src/baseline/riscv/baseline-compiler-riscv-inl.h",
"src/codegen/riscv/assembler-riscv-inl.h",
"src/codegen/riscv/assembler-riscv.h",
"src/codegen/riscv/base-assembler-riscv.h",
"src/codegen/riscv/base-constants-riscv.h",
"src/codegen/riscv/base-riscv-i.h",
"src/codegen/riscv/constant-pool-riscv.h",
"src/codegen/riscv/constant-riscv-a.h",
"src/codegen/riscv/constant-riscv-b.h",
"src/codegen/riscv/constant-riscv-c.h",
"src/codegen/riscv/constant-riscv-d.h",
"src/codegen/riscv/constant-riscv-f.h",
"src/codegen/riscv/constant-riscv-m.h",
"src/codegen/riscv/constant-riscv-v.h",
"src/codegen/riscv/constant-riscv-zicond.h",
"src/codegen/riscv/constant-riscv-zicsr.h",
"src/codegen/riscv/constant-riscv-zifencei.h",
"src/codegen/riscv/constants-riscv.h",
"src/codegen/riscv/extension-riscv-a.h",
"src/codegen/riscv/extension-riscv-b.h",
"src/codegen/riscv/extension-riscv-c.h",
"src/codegen/riscv/extension-riscv-d.h",
"src/codegen/riscv/extension-riscv-f.h",
"src/codegen/riscv/extension-riscv-inl.h",
"src/codegen/riscv/extension-riscv-m.h",
"src/codegen/riscv/extension-riscv-v.h",
"src/codegen/riscv/extension-riscv-zicond.h",
"src/codegen/riscv/extension-riscv-zicsr.h",
"src/codegen/riscv/extension-riscv-zifencei.h",
"src/codegen/riscv/extension-riscv-zimop.h",
"src/codegen/riscv/interface-descriptors-riscv-inl.h",
"src/codegen/riscv/macro-assembler-riscv.h",
"src/codegen/riscv/register-riscv.h",
"src/codegen/riscv/reglist-riscv.h",
"src/compiler/backend/riscv/instruction-codes-riscv.h",
"src/execution/riscv/frame-constants-riscv.h",
"src/execution/riscv/simulator-riscv.h",
"src/regexp/riscv/regexp-macro-assembler-riscv.h",
"src/wasm/baseline/riscv/liftoff-assembler-riscv64-inl.h",
]
if (v8_enable_sparkplug) {
sources += [
"src/baseline/riscv/baseline-assembler-riscv-inl.h",
"src/baseline/riscv/baseline-compiler-riscv-inl.h",
]
}
if (riscv_use_zicfiss) {
sources += [ "src/execution/riscv/shadow-stack-riscv.h" ]
}
if (v8_enable_webassembly) {
# Trap handling is enabled on riscv64 Linux and in simulators on
# x64 on Linux.
if ((current_cpu == "riscv64" && is_linux) ||
(current_cpu == "x64" && is_linux)) {
sources += [ "src/trap-handler/handler-inside-posix.h" ]
}
if (current_cpu == "x64" && is_linux) {
sources += [ "src/trap-handler/trap-handler-simulator.h" ]
}
}
} else if (v8_current_cpu == "riscv32") {
sources += [
### gcmole(riscv32) ###
"src/codegen/riscv/assembler-riscv-inl.h",
"src/codegen/riscv/assembler-riscv.h",
"src/codegen/riscv/base-assembler-riscv.h",
"src/codegen/riscv/base-constants-riscv.h",
"src/codegen/riscv/base-riscv-i.h",
"src/codegen/riscv/constant-riscv-a.h",
"src/codegen/riscv/constant-riscv-b.h",
"src/codegen/riscv/constant-riscv-c.h",
"src/codegen/riscv/constant-riscv-d.h",
"src/codegen/riscv/constant-riscv-f.h",
"src/codegen/riscv/constant-riscv-i.h",
"src/codegen/riscv/constant-riscv-m.h",
"src/codegen/riscv/constant-riscv-v.h",
"src/codegen/riscv/constant-riscv-zicsr.h",
"src/codegen/riscv/constant-riscv-zifencei.h",
"src/codegen/riscv/constants-riscv.h",
"src/codegen/riscv/extension-riscv-a.h",
"src/codegen/riscv/extension-riscv-b.h",
"src/codegen/riscv/extension-riscv-c.h",
"src/codegen/riscv/extension-riscv-d.h",
"src/codegen/riscv/extension-riscv-f.h",
"src/codegen/riscv/extension-riscv-inl.h",
"src/codegen/riscv/extension-riscv-m.h",
"src/codegen/riscv/extension-riscv-v.h",
"src/codegen/riscv/extension-riscv-zicsr.h",
"src/codegen/riscv/extension-riscv-zifencei.h",
"src/codegen/riscv/extension-riscv-zimop.h",
"src/codegen/riscv/interface-descriptors-riscv-inl.h",
"src/codegen/riscv/macro-assembler-riscv.h",
"src/codegen/riscv/register-riscv.h",
"src/codegen/riscv/reglist-riscv.h",
"src/compiler/backend/riscv/instruction-codes-riscv.h",
"src/execution/riscv/frame-constants-riscv.h",
"src/execution/riscv/simulator-riscv.h",
"src/regexp/riscv/regexp-macro-assembler-riscv.h",
"src/wasm/baseline/riscv32/liftoff-assembler-riscv32-inl.h",
]
if (v8_enable_sparkplug) {
sources += [
"src/baseline/riscv/baseline-assembler-riscv-inl.h",
"src/baseline/riscv/baseline-compiler-riscv-inl.h",
]
}
}
frameworks = []
# BrowserEngineKit only exists on iOS itself, not on tvOS and other
# iOS-derived platforms, so we need to check `target_platform` here.
if (is_ios && target_platform == "iphoneos") {
frameworks += [ "BrowserEngineKit.framework" ]
}
public_deps = [
":torque_runtime_support",
":v8_flags",
":v8_headers",
":v8_maybe_icu",
":v8_shared_internal_headers",
"//third_party/fp16",
]
if (v8_enable_partition_alloc) {
public_deps += [ "//third_party/partition_alloc" ]
}
deps = [
":cppgc_headers",
":generate_bytecode_builtins_list",
":run_torque",
":v8_abseil",
":v8_heap_base_headers",
":v8_libbase",
":v8_maybe_temporal",
"//third_party/simdutf",
]
if (v8_enable_experimental_tq_to_tsa) {
deps += [ ":run_torque_to_tsa" ]
}
}
v8_compiler_sources = [
### gcmole(all) ###
"src/compiler/access-builder.cc",
"src/compiler/access-info.cc",
"src/compiler/add-type-assertions-reducer.cc",
"src/compiler/all-nodes.cc",
"src/compiler/backend/bitcast-elider.cc",
"src/compiler/backend/code-generator.cc",
"src/compiler/backend/frame-elider.cc",
"src/compiler/backend/gap-resolver.cc",
"src/compiler/backend/instruction-scheduler.cc",
"src/compiler/backend/instruction-selector.cc",
"src/compiler/backend/instruction.cc",
"src/compiler/backend/jump-threading.cc",
"src/compiler/backend/move-optimizer.cc",
"src/compiler/backend/register-allocator-verifier.cc",
"src/compiler/backend/register-allocator.cc",
"src/compiler/backend/spill-placer.cc",
"src/compiler/basic-block-call-graph-profiler.cc",
"src/compiler/branch-elimination.cc",
"src/compiler/bytecode-analysis.cc",
"src/compiler/bytecode-graph-builder.cc",
"src/compiler/bytecode-liveness-map.cc",
"src/compiler/c-linkage.cc",
"src/compiler/checkpoint-elimination.cc",
"src/compiler/code-assembler.cc",
"src/compiler/common-node-cache.cc",
"src/compiler/common-operator-reducer.cc",
"src/compiler/common-operator.cc",
"src/compiler/common-utils.cc",
"src/compiler/compilation-dependencies.cc",
"src/compiler/compiler-source-position-table.cc",
"src/compiler/constant-folding-reducer.cc",
"src/compiler/control-equivalence.cc",
"src/compiler/csa-load-elimination.cc",
"src/compiler/dead-code-elimination.cc",
"src/compiler/escape-analysis-reducer.cc",
"src/compiler/escape-analysis.cc",
"src/compiler/fast-api-calls.cc",
"src/compiler/feedback-source.cc",
"src/compiler/frame-states.cc",
"src/compiler/frame.cc",
"src/compiler/graph-assembler.cc",
"src/compiler/graph-reducer.cc",
"src/compiler/graph-trimmer.cc",
"src/compiler/heap-refs.cc",
"src/compiler/js-call-reducer.cc",
"src/compiler/js-context-specialization.cc",
"src/compiler/js-create-lowering.cc",
"src/compiler/js-generic-lowering.cc",
"src/compiler/js-graph.cc",
"src/compiler/js-heap-broker.cc",
"src/compiler/js-inlining-heuristic.cc",
"src/compiler/js-inlining.cc",
"src/compiler/js-intrinsic-lowering.cc",
"src/compiler/js-native-context-specialization.cc",
"src/compiler/js-operator.cc",
"src/compiler/js-type-hint-lowering.cc",
"src/compiler/js-typed-lowering.cc",
"src/compiler/late-escape-analysis.cc",
"src/compiler/load-elimination.cc",
"src/compiler/loop-analysis.cc",
"src/compiler/loop-peeling.cc",
"src/compiler/loop-unrolling.cc",
"src/compiler/loop-variable-optimizer.cc",
"src/compiler/machine-graph-verifier.cc",
"src/compiler/machine-graph.cc",
"src/compiler/machine-operator-reducer.cc",
"src/compiler/machine-operator.cc",
"src/compiler/map-inference.cc",
"src/compiler/memory-lowering.cc",
"src/compiler/memory-optimizer.cc",
"src/compiler/node-marker.cc",
"src/compiler/node-matchers.cc",
"src/compiler/node-observer.cc",
"src/compiler/node-origin-table.cc",
"src/compiler/node-properties.cc",
"src/compiler/node.cc",
"src/compiler/opcodes.cc",
"src/compiler/operation-typer.cc",
"src/compiler/operator-properties.cc",
"src/compiler/operator.cc",
"src/compiler/osr.cc",
"src/compiler/pair-load-store-reducer.cc",
"src/compiler/pipeline-statistics.cc",
"src/compiler/pipeline.cc",
"src/compiler/property-access-builder.cc",
"src/compiler/raw-machine-assembler.cc",
"src/compiler/redundancy-elimination.cc",
"src/compiler/refs-map.cc",
"src/compiler/representation-change.cc",
"src/compiler/schedule.cc",
"src/compiler/scheduler.cc",
"src/compiler/select-lowering.cc",
"src/compiler/simplified-lowering-verifier.cc",
"src/compiler/simplified-lowering.cc",
"src/compiler/simplified-operator-reducer.cc",
"src/compiler/simplified-operator.cc",
"src/compiler/state-values-utils.cc",
"src/compiler/string-builder-optimizer.cc",
"src/compiler/turbofan-enabled.cc",
"src/compiler/turbofan-graph-visualizer.cc",
"src/compiler/turbofan-graph.cc",
"src/compiler/turbofan-typer.cc",
"src/compiler/turbofan-types.cc",
"src/compiler/turboshaft/analyzer-iterator.cc",
"src/compiler/turboshaft/assembler.cc",
"src/compiler/turboshaft/block-instrumentation-phase.cc",
"src/compiler/turboshaft/block-instrumentation-reducer.cc",
"src/compiler/turboshaft/build-graph-phase.cc",
"src/compiler/turboshaft/code-elimination-and-simplification-phase.cc",
"src/compiler/turboshaft/copying-phase.cc",
"src/compiler/turboshaft/csa-branch-elimination-phase.cc",
"src/compiler/turboshaft/csa-early-machine-optimization-phase.cc",
"src/compiler/turboshaft/csa-effects-computation.cc",
"src/compiler/turboshaft/csa-late-escape-analysis-phase.cc",
"src/compiler/turboshaft/csa-load-elimination-phase.cc",
"src/compiler/turboshaft/csa-memory-optimization-phase.cc",
"src/compiler/turboshaft/debug-feature-lowering-phase.cc",
"src/compiler/turboshaft/decompression-optimization-phase.cc",
"src/compiler/turboshaft/decompression-optimization.cc",
"src/compiler/turboshaft/graph-builder.cc",
"src/compiler/turboshaft/graph-visualizer.cc",
"src/compiler/turboshaft/graph.cc",
"src/compiler/turboshaft/instruction-selection-phase.cc",
"src/compiler/turboshaft/late-escape-analysis-reducer.cc",
"src/compiler/turboshaft/late-load-elimination-reducer.cc",
"src/compiler/turboshaft/loop-finder.cc",
"src/compiler/turboshaft/loop-peeling-phase.cc",
"src/compiler/turboshaft/loop-unrolling-phase.cc",
"src/compiler/turboshaft/loop-unrolling-reducer.cc",
"src/compiler/turboshaft/machine-lowering-phase.cc",
"src/compiler/turboshaft/memory-optimization-reducer.cc",
"src/compiler/turboshaft/operations.cc",
"src/compiler/turboshaft/optimize-phase.cc",
"src/compiler/turboshaft/phase.cc",
"src/compiler/turboshaft/pipelines.cc",
"src/compiler/turboshaft/pretenuring-propagation-reducer.cc",
"src/compiler/turboshaft/representations.cc",
"src/compiler/turboshaft/sidetable.cc",
"src/compiler/turboshaft/simplify-tf-loops.cc",
"src/compiler/turboshaft/store-store-elimination-phase.cc",
"src/compiler/turboshaft/string-escape-analysis-reducer.cc",
"src/compiler/turboshaft/turbolev-frontend-pipeline.cc",
"src/compiler/turboshaft/turbolev-graph-builder.cc",
"src/compiler/turboshaft/type-assertions-phase.cc",
"src/compiler/turboshaft/type-parser.cc",
"src/compiler/turboshaft/typed-optimizations-phase.cc",
"src/compiler/turboshaft/typer.cc",
"src/compiler/turboshaft/types.cc",
"src/compiler/turboshaft/use-map.cc",
"src/compiler/turboshaft/utils.cc",
"src/compiler/type-cache.cc",
"src/compiler/type-narrowing-reducer.cc",
"src/compiler/typed-optimization.cc",
"src/compiler/value-numbering-reducer.cc",
"src/compiler/verifier.cc",
"src/compiler/zone-stats.cc",
]
if (!v8_enable_maglev) {
# When Maglev is not enabled, Turboshaft still needs Maglev's graph builder.
v8_compiler_sources += [
"src/maglev/maglev-compilation-info.cc",
"src/maglev/maglev-compilation-unit.cc",
"src/maglev/maglev-graph-builder.cc",
"src/maglev/maglev-graph-labeller.cc",
"src/maglev/maglev-graph-optimizer.cc",
"src/maglev/maglev-graph-printer.cc",
"src/maglev/maglev-graph.cc",
"src/maglev/maglev-inlining.cc",
"src/maglev/maglev-interpreter-frame-state.cc",
"src/maglev/maglev-ir.cc",
"src/maglev/maglev-known-node-aspects.cc",
"src/maglev/maglev-node-type.cc",
"src/maglev/maglev-phi-representation-selector.cc",
"src/maglev/maglev-range-verification.cc",
"src/maglev/maglev-truncation.cc",
]
}
if (v8_current_cpu == "x86") {
v8_compiler_sources += [
### gcmole(ia32) ###
"src/compiler/backend/ia32/code-generator-ia32.cc",
"src/compiler/backend/ia32/instruction-scheduler-ia32.cc",
"src/compiler/backend/ia32/instruction-selector-ia32.cc",
]
} else if (v8_current_cpu == "x64") {
v8_compiler_sources += [
### gcmole(x64) ###
"src/compiler/backend/x64/code-generator-x64.cc",
"src/compiler/backend/x64/instruction-scheduler-x64.cc",
"src/compiler/backend/x64/instruction-selector-x64.cc",
"src/compiler/backend/x64/unwinding-info-writer-x64.cc",
]
} else if (v8_current_cpu == "arm") {
v8_compiler_sources += [
### gcmole(arm) ###
"src/compiler/backend/arm/code-generator-arm.cc",
"src/compiler/backend/arm/instruction-scheduler-arm.cc",
"src/compiler/backend/arm/instruction-selector-arm.cc",
"src/compiler/backend/arm/unwinding-info-writer-arm.cc",
]
} else if (v8_current_cpu == "arm64") {
v8_compiler_sources += [
### gcmole(arm64) ###
"src/compiler/backend/arm64/code-generator-arm64.cc",
"src/compiler/backend/arm64/instruction-scheduler-arm64.cc",
"src/compiler/backend/arm64/instruction-selector-arm64.cc",
"src/compiler/backend/arm64/unwinding-info-writer-arm64.cc",
]
} else if (v8_current_cpu == "mips64" || v8_current_cpu == "mips64el") {
v8_compiler_sources += [
### gcmole(mips64el) ###
"src/compiler/backend/mips64/code-generator-mips64.cc",
"src/compiler/backend/mips64/instruction-scheduler-mips64.cc",
"src/compiler/backend/mips64/instruction-selector-mips64.cc",
]
} else if (v8_current_cpu == "loong64") {
v8_compiler_sources += [
### gcmole(loong64) ###
"src/compiler/backend/loong64/code-generator-loong64.cc",
"src/compiler/backend/loong64/instruction-scheduler-loong64.cc",
"src/compiler/backend/loong64/instruction-selector-loong64.cc",
]
} else if (v8_current_cpu == "ppc64") {
v8_compiler_sources += [
### gcmole(ppc64) ###
"src/compiler/backend/ppc/code-generator-ppc.cc",
"src/compiler/backend/ppc/instruction-scheduler-ppc.cc",
"src/compiler/backend/ppc/instruction-selector-ppc.cc",
"src/compiler/backend/ppc/unwinding-info-writer-ppc.cc",
]
} else if (v8_current_cpu == "s390x") {
v8_compiler_sources += [
### gcmole(s390) ###
"src/compiler/backend/s390/code-generator-s390.cc",
"src/compiler/backend/s390/instruction-scheduler-s390.cc",
"src/compiler/backend/s390/instruction-selector-s390.cc",
"src/compiler/backend/s390/unwinding-info-writer-s390.cc",
]
} else if (v8_current_cpu == "riscv64") {
v8_compiler_sources += [
### gcmole(riscv64) ###
"src/compiler/backend/riscv/code-generator-riscv.cc",
"src/compiler/backend/riscv/instruction-scheduler-riscv.cc",
"src/compiler/backend/riscv/instruction-selector-riscv64.cc",
]
} else if (v8_current_cpu == "riscv32") {
v8_compiler_sources += [
### gcmole(riscv32) ###
"src/compiler/backend/riscv/code-generator-riscv.cc",
"src/compiler/backend/riscv/instruction-scheduler-riscv.cc",
"src/compiler/backend/riscv/instruction-selector-riscv32.cc",
]
}
if (v8_enable_webassembly) {
v8_compiler_sources += [
"src/compiler/int64-lowering.cc",
"src/compiler/turboshaft/int64-lowering-phase.cc",
"src/compiler/turboshaft/wasm-dead-code-elimination-phase.cc",
"src/compiler/turboshaft/wasm-debug-memory-lowering-phase.cc",
"src/compiler/turboshaft/wasm-gc-optimize-phase.cc",
"src/compiler/turboshaft/wasm-gc-typed-optimization-reducer.cc",
"src/compiler/turboshaft/wasm-in-js-inlining-phase.cc",
"src/compiler/turboshaft/wasm-lowering-phase.cc",
"src/compiler/turboshaft/wasm-optimize-phase.cc",
"src/compiler/turboshaft/wasm-shuffle-reducer.cc",
"src/compiler/turboshaft/wasm-simd-phase.cc",
"src/compiler/turboshaft/wasm-turboshaft-compiler.cc",
"src/compiler/wasm-address-reassociation.cc",
"src/compiler/wasm-call-descriptors.cc",
"src/compiler/wasm-compiler.cc",
"src/compiler/wasm-escape-analysis.cc",
"src/compiler/wasm-gc-lowering.cc",
"src/compiler/wasm-gc-operator-reducer.cc",
"src/compiler/wasm-graph-assembler.cc",
"src/compiler/wasm-inlining-into-js.cc",
"src/compiler/wasm-load-elimination.cc",
"src/compiler/wasm-typer.cc",
"src/wasm/turboshaft-graph-interface.cc",
"src/wasm/wrappers.cc",
]
}
if (v8_enable_wasm_simd256_revec) {
v8_compiler_sources += [
"src/compiler/linear-scheduler.cc",
"src/compiler/revectorizer.cc",
"src/compiler/turboshaft/wasm-revec-phase.cc",
"src/compiler/turboshaft/wasm-revec-reducer.cc",
]
}
# The src/compiler files for use in mksnapshot.
# - These might be built with additional optimizations if
# v8_enable_fast_mksnapshot is set.
# - We always include Turbofan even if v8_enable_turbofan is unset s.t.
# builtins can be generated by mksnapshot.
v8_source_set("v8_compiler_for_mksnapshot_source_set") {
visibility = [ ":*" ] # Only targets in this file can depend on this.
sources = v8_compiler_sources
public_deps = [
":generate_bytecode_builtins_list",
":run_torque",
":v8_abseil",
":v8_maybe_icu",
":v8_tracing",
]
if (v8_enable_experimental_tq_to_tsa) {
public_deps += [ ":run_torque_to_tsa" ]
}
deps = [
":v8_base_without_compiler",
":v8_internal_headers",
":v8_libbase",
":v8_maybe_temporal",
":v8_shared_internal_headers",
]
if (is_debug && !v8_optimized_debug && v8_enable_fast_mksnapshot) {
# The :no_optimize config is added to v8_add_configs in v8.gni.
remove_configs = [ "//build/config/compiler:no_optimize" ]
configs = [ ":always_turbofanimize" ]
} else {
# Without this else branch, gn fails to generate build files for non-debug
# builds (because we try to remove a config that is not present).
# So we include it, even if this config is not used outside of debug builds.
configs = [ ":internal_config" ]
}
}
# The src/compiler files with default behavior.
v8_source_set("v8_compiler") {
visibility = [ ":*" ] # Only targets in this file can depend on this.
if (v8_enable_turbofan) {
sources = v8_compiler_sources
} else {
# With Turbofan disabled, we only include the stubbed-out API.
sources = [ "src/compiler/turbofan-disabled.cc" ]
}
public_deps = [
":generate_bytecode_builtins_list",
":run_torque",
":v8_abseil",
":v8_internal_headers",
":v8_maybe_icu",
":v8_tracing",
]
if (v8_enable_experimental_tq_to_tsa) {
public_deps += [ ":run_torque_to_tsa" ]
}
deps = [
":v8_base_without_compiler",
":v8_libbase",
":v8_maybe_temporal",
":v8_shared_internal_headers",
]
configs = [ ":internal_config" ]
}
group("v8_compiler_for_mksnapshot") {
if ((is_debug && !v8_optimized_debug && v8_enable_fast_mksnapshot) ||
!v8_enable_turbofan) {
# mksnapshot needs its own version of the compiler, either because
# a) we're optimizing for mksnapshot execution speed and the compiler
# should be optimized even if the rest of V8 is not; or
# b) Turbofan is disabled and thus not compiled into the rest of V8, yet
# mksnapshot still needs TF to generate builtins.
deps = [ ":v8_compiler_for_mksnapshot_source_set" ]
} else {
deps = [ ":v8_compiler" ]
}
}
# Any target using trace events must directly or indirectly depend on
# v8_tracing.
group("v8_tracing") {
if (v8_use_perfetto) {
if (build_with_chromium) {
public_deps = [ "//third_party/perfetto:libperfetto" ]
} else {
public_deps = [ ":v8_libperfetto" ]
}
}
}
v8_source_set("v8_base_without_compiler") {
# Only targets in this file and gcmole can depend on this.
visibility = [
":*",
"tools/gcmole/:*",
]
# Split static libraries on windows into two.
split_count = 2
sources = [
### gcmole(all) ###
"src/api/api-arguments.cc",
"src/api/api-natives.cc",
"src/api/api.cc",
"src/ast/ast-function-literal-id-reindexer.cc",
"src/ast/ast-value-factory.cc",
"src/ast/ast.cc",
"src/ast/modules.cc",
"src/ast/prettyprinter.cc",
"src/ast/scopes.cc",
"src/ast/source-range-ast-visitor.cc",
"src/ast/variables.cc",
"src/baseline/baseline.cc",
"src/baseline/bytecode-offset-iterator.cc",
"src/builtins/accessors.cc",
"src/builtins/builtins-abstract-module-source.cc",
"src/builtins/builtins-api.cc",
"src/builtins/builtins-array.cc",
"src/builtins/builtins-arraybuffer.cc",
"src/builtins/builtins-async-disposable-stack.cc",
"src/builtins/builtins-async-module.cc",
"src/builtins/builtins-atomics-synchronization.cc",
"src/builtins/builtins-bigint.cc",
"src/builtins/builtins-callsite.cc",
"src/builtins/builtins-collections.cc",
"src/builtins/builtins-console.cc",
"src/builtins/builtins-dataview.cc",
"src/builtins/builtins-date.cc",
"src/builtins/builtins-disposable-stack.cc",
"src/builtins/builtins-effects-analyzer.cc",
"src/builtins/builtins-error.cc",
"src/builtins/builtins-function.cc",
"src/builtins/builtins-global.cc",
"src/builtins/builtins-internal.cc",
"src/builtins/builtins-intl.cc",
"src/builtins/builtins-json.cc",
"src/builtins/builtins-math-xsum.cc",
"src/builtins/builtins-math.cc",
"src/builtins/builtins-number.cc",
"src/builtins/builtins-object.cc",
"src/builtins/builtins-reflect.cc",
"src/builtins/builtins-regexp.cc",
"src/builtins/builtins-shadow-realm.cc",
"src/builtins/builtins-shared-array.cc",
"src/builtins/builtins-sharedarraybuffer.cc",
"src/builtins/builtins-string.cc",
"src/builtins/builtins-struct.cc",
"src/builtins/builtins-symbol.cc",
"src/builtins/builtins-trace.cc",
"src/builtins/builtins-typed-array.cc",
"src/builtins/builtins-weak-refs.cc",
"src/builtins/builtins.cc",
"src/builtins/constants-table-builder.cc",
"src/codegen/aligned-slot-allocator.cc",
"src/codegen/assembler.cc",
"src/codegen/bailout-reason.cc",
"src/codegen/code-comments.cc",
"src/codegen/code-desc.cc",
"src/codegen/code-factory.cc",
"src/codegen/code-reference.cc",
"src/codegen/compilation-cache.cc",
"src/codegen/compiler.cc",
"src/codegen/external-reference-encoder.cc",
"src/codegen/external-reference-table.cc",
"src/codegen/external-reference.cc",
"src/codegen/flush-instruction-cache.cc",
"src/codegen/handler-table.cc",
"src/codegen/interface-descriptors.cc",
"src/codegen/jump-table-info.cc",
"src/codegen/machine-type.cc",
"src/codegen/macro-assembler-base.cc",
"src/codegen/maglev-safepoint-table.cc",
"src/codegen/optimized-compilation-info.cc",
"src/codegen/pending-optimization-table.cc",
"src/codegen/register-configuration.cc",
"src/codegen/reloc-info.cc",
"src/codegen/safepoint-table.cc",
"src/codegen/source-position-table.cc",
"src/codegen/source-position.cc",
"src/codegen/tick-counter.cc",
"src/codegen/tnode.cc",
"src/codegen/unoptimized-compilation-info.cc",
"src/common/assert-scope.cc",
"src/common/code-memory-access.cc",
"src/common/ptr-compr.cc",
"src/compiler-dispatcher/lazy-compile-dispatcher.cc",
"src/compiler-dispatcher/optimizing-compile-dispatcher.cc",
"src/compiler/linkage.cc",
"src/date/date.cc",
"src/date/dateparser.cc",
"src/debug/debug-coverage.cc",
"src/debug/debug-evaluate.cc",
"src/debug/debug-frames.cc",
"src/debug/debug-interface.cc",
"src/debug/debug-property-iterator.cc",
"src/debug/debug-scope-iterator.cc",
"src/debug/debug-scopes.cc",
"src/debug/debug-stack-trace-iterator.cc",
"src/debug/debug.cc",
"src/debug/liveedit-diff.cc",
"src/debug/liveedit.cc",
"src/deoptimizer/deoptimize-reason.cc",
"src/deoptimizer/deoptimized-frame-info.cc",
"src/deoptimizer/deoptimizer.cc",
"src/deoptimizer/frame-translation-builder.cc",
"src/deoptimizer/materialized-object-store.cc",
"src/deoptimizer/translated-state.cc",
"src/diagnostics/basic-block-profiler.cc",
"src/diagnostics/compilation-statistics.cc",
"src/diagnostics/disassembler.cc",
"src/diagnostics/eh-frame.cc",
"src/diagnostics/gdb-jit.cc",
"src/diagnostics/objects-debug.cc",
"src/diagnostics/objects-printer.cc",
"src/diagnostics/perf-jit.cc",
"src/diagnostics/unwinder.cc",
"src/execution/arguments.cc",
"src/execution/clobber-registers.cc",
"src/execution/embedder-state.cc",
"src/execution/encoded-c-signature.cc",
"src/execution/execution.cc",
"src/execution/frames.cc",
"src/execution/futex-emulation.cc",
"src/execution/interrupts-scope.cc",
"src/execution/isolate.cc",
"src/execution/local-isolate.cc",
"src/execution/messages.cc",
"src/execution/microtask-queue.cc",
"src/execution/protectors.cc",
"src/execution/simulator-base.cc",
"src/execution/stack-guard.cc",
"src/execution/thread-id.cc",
"src/execution/thread-local-top.cc",
"src/execution/tiering-manager.cc",
"src/execution/v8threads.cc",
"src/extensions/cputracemark-extension.cc",
"src/extensions/externalize-string-extension.cc",
"src/extensions/gc-extension.cc",
"src/extensions/ignition-statistics-extension.cc",
"src/extensions/statistics-extension.cc",
"src/extensions/trigger-failure-extension.cc",
"src/flags/flags.cc",
"src/flags/save-flags.cc",
"src/handles/global-handles.cc",
"src/handles/handles.cc",
"src/handles/local-handles.cc",
"src/handles/persistent-handles.cc",
"src/handles/shared-object-conveyor-handles.cc",
"src/handles/traced-handles.cc",
"src/heap/allocation-observer.cc",
"src/heap/array-buffer-sweeper.cc",
"src/heap/base-page.cc",
"src/heap/code-range.cc",
"src/heap/code-stats.cc",
"src/heap/collection-barrier.cc",
"src/heap/combined-heap.cc",
"src/heap/concurrent-marking.cc",
"src/heap/cppgc-js/cpp-heap.cc",
"src/heap/cppgc-js/cpp-snapshot.cc",
"src/heap/cppgc-js/cross-heap-remembered-set.cc",
"src/heap/cppgc-js/unified-heap-marking-state.cc",
"src/heap/cppgc-js/unified-heap-marking-verifier.cc",
"src/heap/cppgc-js/unified-heap-marking-visitor.cc",
"src/heap/ephemeron-remembered-set.cc",
"src/heap/evacuation-allocator.cc",
"src/heap/evacuation-verifier.cc",
"src/heap/factory-base.cc",
"src/heap/factory.cc",
"src/heap/finalization-registry-cleanup-task.cc",
"src/heap/free-list.cc",
"src/heap/gc-tracer.cc",
"src/heap/heap-allocator.cc",
"src/heap/heap-controller.cc",
"src/heap/heap-layout-tracer.cc",
"src/heap/heap-layout.cc",
"src/heap/heap-verifier.cc",
"src/heap/heap-visitor.cc",
"src/heap/heap-write-barrier.cc",
"src/heap/heap.cc",
"src/heap/incremental-marking-job.cc",
"src/heap/incremental-marking.cc",
"src/heap/index-generator.cc",
"src/heap/large-page.cc",
"src/heap/large-spaces.cc",
"src/heap/local-factory.cc",
"src/heap/local-heap.cc",
"src/heap/main-allocator.cc",
"src/heap/mark-compact.cc",
"src/heap/mark-sweep-utilities.cc",
"src/heap/marking-barrier.cc",
"src/heap/marking-worklist.cc",
"src/heap/marking.cc",
"src/heap/memory-allocator.cc",
"src/heap/memory-balancer.cc",
"src/heap/memory-chunk.cc",
"src/heap/memory-measurement.cc",
"src/heap/memory-pool.cc",
"src/heap/memory-reducer.cc",
"src/heap/minor-gc-job.cc",
"src/heap/minor-mark-sweep.cc",
"src/heap/mutable-page.cc",
"src/heap/new-spaces.cc",
"src/heap/normal-page.cc",
"src/heap/object-stats.cc",
"src/heap/paged-spaces.cc",
"src/heap/pretenuring-handler.cc",
"src/heap/read-only-heap.cc",
"src/heap/read-only-promotion.cc",
"src/heap/read-only-spaces.cc",
"src/heap/safepoint.cc",
"src/heap/scavenger.cc",
"src/heap/slot-set.cc",
"src/heap/spaces.cc",
"src/heap/stress-scavenge-observer.cc",
"src/heap/sweeper.cc",
"src/heap/traced-handles-marking-visitor.cc",
"src/heap/trusted-range.cc",
"src/heap/visit-object.cc",
"src/heap/weak-object-worklists.cc",
"src/heap/zapping.cc",
"src/ic/call-optimization.cc",
"src/ic/handler-configuration.cc",
"src/ic/ic-stats.cc",
"src/ic/ic.cc",
"src/ic/stub-cache.cc",
"src/init/bootstrapper.cc",
"src/init/icu_util.cc",
"src/init/isolate-group.cc",
"src/init/startup-data-util.cc",
"src/init/v8.cc",
"src/interpreter/bytecode-array-builder.cc",
"src/interpreter/bytecode-array-iterator.cc",
"src/interpreter/bytecode-array-random-iterator.cc",
"src/interpreter/bytecode-array-writer.cc",
"src/interpreter/bytecode-decoder.cc",
"src/interpreter/bytecode-flags-and-tokens.cc",
"src/interpreter/bytecode-generator.cc",
"src/interpreter/bytecode-label.cc",
"src/interpreter/bytecode-node.cc",
"src/interpreter/bytecode-operands.cc",
"src/interpreter/bytecode-register-optimizer.cc",
"src/interpreter/bytecode-register.cc",
"src/interpreter/bytecode-source-info.cc",
"src/interpreter/bytecodes.cc",
"src/interpreter/constant-array-builder.cc",
"src/interpreter/control-flow-builders.cc",
"src/interpreter/handler-table-builder.cc",
"src/interpreter/interpreter-intrinsics.cc",
"src/interpreter/interpreter.cc",
"src/interpreter/prototype-assignment-sequence-builder.cc",
"src/json/json-parser.cc",
"src/json/json-stringifier.cc",
"src/libsampler/sampler.cc",
"src/logging/counters.cc",
"src/logging/local-logger.cc",
"src/logging/log-file.cc",
"src/logging/log.cc",
"src/logging/metrics.cc",
"src/logging/runtime-call-stats.cc",
"src/logging/tracing-flags.cc",
"src/numbers/conversions.cc",
"src/numbers/hash-seed.cc",
"src/numbers/ieee754.cc",
"src/numbers/math-random.cc",
"src/objects/abstract-code.cc",
"src/objects/backing-store.cc",
"src/objects/bigint.cc",
"src/objects/bytecode-array.cc",
"src/objects/call-site-info.cc",
"src/objects/code-kind.cc",
"src/objects/code.cc",
"src/objects/compilation-cache-table.cc",
"src/objects/contexts.cc",
"src/objects/debug-objects.cc",
"src/objects/deoptimization-data.cc",
"src/objects/dependent-code.cc",
"src/objects/elements-kind.cc",
"src/objects/elements.cc",
"src/objects/embedder-data-array.cc",
"src/objects/feedback-vector.cc",
"src/objects/field-type.cc",
"src/objects/fixed-array.cc",
"src/objects/instruction-stream.cc",
"src/objects/intl-objects.cc",
"src/objects/js-array-buffer.cc",
"src/objects/js-atomics-synchronization.cc",
"src/objects/js-break-iterator.cc",
"src/objects/js-collator.cc",
"src/objects/js-date-time-format.cc",
"src/objects/js-display-names.cc",
"src/objects/js-disposable-stack.cc",
"src/objects/js-duration-format.cc",
"src/objects/js-function.cc",
"src/objects/js-list-format.cc",
"src/objects/js-locale.cc",
"src/objects/js-number-format.cc",
"src/objects/js-objects.cc",
"src/objects/js-plural-rules.cc",
"src/objects/js-raw-json.cc",
"src/objects/js-regexp.cc",
"src/objects/js-relative-time-format.cc",
"src/objects/js-segment-iterator.cc",
"src/objects/js-segmenter.cc",
"src/objects/js-segments.cc",
"src/objects/js-struct.cc",
"src/objects/js-temporal-helpers.cc",
"src/objects/js-weak-refs.cc",
"src/objects/keys.cc",
"src/objects/literal-objects.cc",
"src/objects/lookup-cache.cc",
"src/objects/lookup.cc",
"src/objects/managed.cc",
"src/objects/map-updater.cc",
"src/objects/map.cc",
"src/objects/module.cc",
"src/objects/number-string-cache.cc",
"src/objects/object-type.cc",
"src/objects/objects.cc",
"src/objects/option-utils.cc",
"src/objects/ordered-hash-table.cc",
"src/objects/property-descriptor.cc",
"src/objects/property.cc",
"src/objects/regexp-match-info.cc",
"src/objects/scope-info.cc",
"src/objects/script.cc",
"src/objects/shared-function-info.cc",
"src/objects/simd.cc",
"src/objects/source-text-module.cc",
"src/objects/string-comparator.cc",
"src/objects/string-forwarding-table.cc",
"src/objects/string-table.cc",
"src/objects/string.cc",
"src/objects/swiss-name-dictionary.cc",
"src/objects/symbol-table.cc",
"src/objects/synthetic-module.cc",
"src/objects/tagged-impl.cc",
"src/objects/template-objects.cc",
"src/objects/templates.cc",
"src/objects/transitions.cc",
"src/objects/type-hints.cc",
"src/objects/value-serializer.cc",
"src/objects/visitors.cc",
"src/objects/waiter-queue-node.cc",
"src/parsing/func-name-inferrer.cc",
"src/parsing/import-attributes.cc",
"src/parsing/literal-buffer.cc",
"src/parsing/parse-info.cc",
"src/parsing/parser.cc",
"src/parsing/parsing.cc",
"src/parsing/pending-compilation-error-handler.cc",
"src/parsing/preparse-data.cc",
"src/parsing/preparser.cc",
"src/parsing/rewriter.cc",
"src/parsing/scanner-character-streams.cc",
"src/parsing/scanner.cc",
"src/parsing/token.cc",
"src/profiler/allocation-tracker.cc",
"src/profiler/cpu-profiler.cc",
"src/profiler/heap-profiler.cc",
"src/profiler/heap-snapshot-generator.cc",
"src/profiler/profile-generator.cc",
"src/profiler/profiler-listener.cc",
"src/profiler/profiler-stats.cc",
"src/profiler/sampling-heap-profiler.cc",
"src/profiler/strings-storage.cc",
"src/profiler/symbolizer.cc",
"src/profiler/tick-sample.cc",
"src/profiler/tracing-cpu-profiler.cc",
"src/profiler/weak-code-registry.cc",
"src/regexp/experimental/experimental-bytecode.cc",
"src/regexp/experimental/experimental-compiler.cc",
"src/regexp/experimental/experimental-interpreter.cc",
"src/regexp/experimental/experimental.cc",
"src/regexp/regexp-ast.cc",
"src/regexp/regexp-bytecode-analysis.cc",
"src/regexp/regexp-bytecode-generator.cc",
"src/regexp/regexp-bytecode-iterator.cc",
"src/regexp/regexp-bytecode-peephole.cc",
"src/regexp/regexp-bytecodes.cc",
"src/regexp/regexp-code-generator.cc",
"src/regexp/regexp-compiler-tonode.cc",
"src/regexp/regexp-compiler.cc",
"src/regexp/regexp-error.cc",
"src/regexp/regexp-interpreter.cc",
"src/regexp/regexp-macro-assembler.cc",
"src/regexp/regexp-parser.cc",
"src/regexp/regexp-result-vector.cc",
"src/regexp/regexp-stack.cc",
"src/regexp/regexp-utils.cc",
"src/regexp/regexp.cc",
"src/roots/roots.cc",
"src/runtime/runtime-array.cc",
"src/runtime/runtime-atomics.cc",
"src/runtime/runtime-bigint.cc",
"src/runtime/runtime-classes.cc",
"src/runtime/runtime-collections.cc",
"src/runtime/runtime-compiler.cc",
"src/runtime/runtime-date.cc",
"src/runtime/runtime-debug.cc",
"src/runtime/runtime-forin.cc",
"src/runtime/runtime-function.cc",
"src/runtime/runtime-futex.cc",
"src/runtime/runtime-generator.cc",
"src/runtime/runtime-internal.cc",
"src/runtime/runtime-intl.cc",
"src/runtime/runtime-literals.cc",
"src/runtime/runtime-module.cc",
"src/runtime/runtime-numbers.cc",
"src/runtime/runtime-object.cc",
"src/runtime/runtime-operators.cc",
"src/runtime/runtime-promise.cc",
"src/runtime/runtime-proxy.cc",
"src/runtime/runtime-regexp.cc",
"src/runtime/runtime-scopes.cc",
"src/runtime/runtime-shadow-realm.cc",
"src/runtime/runtime-strings.cc",
"src/runtime/runtime-symbol.cc",
"src/runtime/runtime-test.cc",
"src/runtime/runtime-trace.cc",
"src/runtime/runtime-typedarray.cc",
"src/runtime/runtime-weak-refs.cc",
"src/runtime/runtime.cc",
"src/sandbox/bytecode-verifier.cc",
"src/sandbox/code-pointer-table.cc",
"src/sandbox/cppheap-pointer-table.cc",
"src/sandbox/external-pointer-table.cc",
"src/sandbox/external-strings-cage.cc",
"src/sandbox/hardware-support.cc",
"src/sandbox/js-dispatch-table.cc",
"src/sandbox/sandbox.cc",
"src/sandbox/sandboxable-thread.cc",
"src/sandbox/testing.cc",
"src/sandbox/trusted-pointer-scope.cc",
"src/sandbox/trusted-pointer-table.cc",
"src/snapshot/code-serializer.cc",
"src/snapshot/context-deserializer.cc",
"src/snapshot/context-serializer.cc",
"src/snapshot/deserializer.cc",
"src/snapshot/embedded/embedded-data.cc",
"src/snapshot/object-deserializer.cc",
"src/snapshot/read-only-deserializer.cc",
"src/snapshot/read-only-serializer.cc",
"src/snapshot/roots-serializer.cc",
"src/snapshot/serializer-deserializer.cc",
"src/snapshot/serializer.cc",
"src/snapshot/shared-heap-deserializer.cc",
"src/snapshot/shared-heap-serializer.cc",
"src/snapshot/snapshot-data.cc",
"src/snapshot/snapshot-source-sink.cc",
"src/snapshot/snapshot-utils.cc",
"src/snapshot/snapshot.cc",
"src/snapshot/sort-builtins.cc",
"src/snapshot/startup-deserializer.cc",
"src/snapshot/startup-serializer.cc",
"src/strings/char-predicates.cc",
"src/strings/string-builder.cc",
"src/strings/string-case.cc",
"src/strings/string-hasher.cc",
"src/strings/string-stream.cc",
"src/strings/unicode-decoder.cc",
"src/strings/unicode.cc",
"src/strings/uri.cc",
"src/tasks/cancelable-task.cc",
"src/tasks/operations-barrier.cc",
"src/tasks/task-utils.cc",
"src/tracing/trace-event.cc",
"src/tracing/traced-value.cc",
"src/tracing/tracing-category-observer.cc",
"src/utils/address-map.cc",
"src/utils/allocation.cc",
"src/utils/bit-vector.cc",
"src/utils/detachable-vector.cc",
"src/utils/hex-format.cc",
"src/utils/identity-map.cc",
"src/utils/ostreams.cc",
"src/utils/output-stream.cc",
"src/utils/sha-256.cc",
"src/utils/utils.cc",
"src/utils/version.cc",
"src/zone/accounting-allocator.cc",
"src/zone/type-stats.cc",
"src/zone/zone-segment.cc",
"src/zone/zone.cc",
"third_party/siphash/halfsiphash.cc",
]
if (v8_enable_snapshot_compression) {
sources += [ "src/snapshot/snapshot-compression.cc" ]
}
if (v8_enable_regexp_diagnostics) {
sources += [
"src/regexp/regexp-ast-printer.cc",
"src/regexp/regexp-dotprinter.cc",
"src/regexp/regexp-graph-printer.cc",
"src/regexp/regexp-macro-assembler-tracer.cc",
"src/regexp/regexp-node-printer.cc",
"src/regexp/regexp-printer.cc",
]
}
if (v8_enable_temporal_support) {
sources += [
"src/builtins/builtins-temporal.cc",
"src/objects/js-temporal-objects.cc",
"src/objects/js-temporal-zoneinfo64.cc",
]
}
if (v8_enable_sparkplug) {
sources += [
"src/baseline/baseline-batch-compiler.cc",
"src/baseline/baseline-compiler.cc",
]
}
if (v8_enable_maglev) {
sources += [
"src/maglev/maglev-assembler.cc",
"src/maglev/maglev-code-generator.cc",
"src/maglev/maglev-compilation-info.cc",
"src/maglev/maglev-compilation-unit.cc",
"src/maglev/maglev-compiler.cc",
"src/maglev/maglev-concurrent-dispatcher.cc",
"src/maglev/maglev-graph-builder.cc",
"src/maglev/maglev-graph-labeller.cc",
"src/maglev/maglev-graph-optimizer.cc",
"src/maglev/maglev-graph-printer.cc",
"src/maglev/maglev-graph.cc",
"src/maglev/maglev-inlining.cc",
"src/maglev/maglev-interpreter-frame-state.cc",
"src/maglev/maglev-ir.cc",
"src/maglev/maglev-known-node-aspects.cc",
"src/maglev/maglev-node-type.cc",
"src/maglev/maglev-phi-representation-selector.cc",
"src/maglev/maglev-pipeline-statistics.cc",
"src/maglev/maglev-range-verification.cc",
"src/maglev/maglev-regalloc.cc",
"src/maglev/maglev-truncation.cc",
"src/maglev/maglev.cc",
]
if (v8_current_cpu == "arm") {
sources += [
"src/maglev/arm/maglev-assembler-arm.cc",
"src/maglev/arm/maglev-ir-arm.cc",
]
} else if (v8_current_cpu == "arm64") {
sources += [
"src/maglev/arm64/maglev-assembler-arm64.cc",
"src/maglev/arm64/maglev-ir-arm64.cc",
]
} else if (v8_current_cpu == "riscv64") {
sources += [
"src/maglev/riscv/maglev-assembler-riscv.cc",
"src/maglev/riscv/maglev-ir-riscv.cc",
]
} else if (v8_current_cpu == "x64") {
sources += [
"src/maglev/x64/maglev-assembler-x64.cc",
"src/maglev/x64/maglev-ir-x64.cc",
]
} else if (v8_current_cpu == "s390x") {
sources += [
"src/maglev/s390/maglev-assembler-s390.cc",
"src/maglev/s390/maglev-ir-s390.cc",
]
} else if (v8_current_cpu == "ppc64") {
sources += [
"src/maglev/ppc/maglev-assembler-ppc.cc",
"src/maglev/ppc/maglev-ir-ppc.cc",
]
} else if (v8_current_cpu == "loong64") {
sources += [
"src/maglev/loong64/maglev-assembler-loong64.cc",
"src/maglev/loong64/maglev-ir-loong64.cc",
]
}
}
if (v8_use_perfetto) {
sources += [
"src/tracing/code-data-source.cc",
"src/tracing/perfetto-logger.cc",
"src/tracing/perfetto-utils.cc",
]
}
if (v8_enable_webassembly) {
sources += [
### gcmole(all) ###
"src/asmjs/asm-js.cc",
"src/asmjs/asm-parser.cc",
"src/asmjs/asm-scanner.cc",
"src/asmjs/asm-types.cc",
"src/compiler/wasm-compiler-definitions.cc",
"src/debug/debug-wasm-objects.cc",
"src/runtime/runtime-test-wasm.cc",
"src/runtime/runtime-wasm.cc",
"src/trap-handler/handler-inside.cc",
"src/trap-handler/handler-outside.cc",
"src/trap-handler/handler-shared.cc",
"src/wasm/baseline/liftoff-assembler.cc",
"src/wasm/baseline/liftoff-compiler.cc",
"src/wasm/baseline/parallel-move.cc",
"src/wasm/basic-block-calculator.cc",
"src/wasm/canonical-types.cc",
"src/wasm/code-space-access.cc",
"src/wasm/compilation-hints-generation.cc",
"src/wasm/constant-expression-interface.cc",
"src/wasm/constant-expression.cc",
"src/wasm/function-body-decoder.cc",
"src/wasm/function-compiler.cc",
"src/wasm/jump-table-assembler.cc",
"src/wasm/local-decl-encoder.cc",
"src/wasm/module-compiler.cc",
"src/wasm/module-decoder.cc",
"src/wasm/module-instantiate.cc",
"src/wasm/names-provider.cc",
"src/wasm/pgo.cc",
"src/wasm/simd-shuffle.cc",
"src/wasm/stacks.cc",
"src/wasm/streaming-decoder.cc",
"src/wasm/sync-streaming-decoder.cc",
"src/wasm/value-type.cc",
"src/wasm/wasm-code-manager.cc",
"src/wasm/wasm-code-pointer-table.cc",
"src/wasm/wasm-debug.cc",
"src/wasm/wasm-deopt-data.cc",
"src/wasm/wasm-disassembler.cc",
"src/wasm/wasm-engine.cc",
"src/wasm/wasm-export-wrapper-cache.cc",
"src/wasm/wasm-external-refs.cc",
"src/wasm/wasm-features.cc",
"src/wasm/wasm-import-wrapper-cache.cc",
"src/wasm/wasm-js.cc",
"src/wasm/wasm-module-builder.cc",
"src/wasm/wasm-module-sourcemap.cc",
"src/wasm/wasm-module.cc",
"src/wasm/wasm-objects.cc",
"src/wasm/wasm-opcodes.cc",
"src/wasm/wasm-result.cc",
"src/wasm/wasm-serialization.cc",
"src/wasm/wasm-stack-wrapper-cache.cc",
"src/wasm/wasm-subtyping.cc",
"src/wasm/wasm-tracing.cc",
"src/wasm/wasm-wrapper-cache.cc",
"src/wasm/well-known-imports.cc",
]
if (v8_wasm_random_fuzzers) {
sources += [
### gcmole(all) ###
"src/wasm/fuzzing/random-module-generation.cc",
]
}
if (v8_enable_drumbrake) {
sources += [
"src/wasm/interpreter/wasm-interpreter-objects.cc",
"src/wasm/interpreter/wasm-interpreter-runtime.cc",
"src/wasm/interpreter/wasm-interpreter-simd.cc",
"src/wasm/interpreter/wasm-interpreter.cc",
]
}
}
if (v8_enable_wasm_gdb_remote_debugging) {
sources += [
"src/debug/wasm/gdb-server/gdb-remote-util.cc",
"src/debug/wasm/gdb-server/gdb-server-thread.cc",
"src/debug/wasm/gdb-server/gdb-server.cc",
"src/debug/wasm/gdb-server/packet.cc",
"src/debug/wasm/gdb-server/session.cc",
"src/debug/wasm/gdb-server/target.cc",
"src/debug/wasm/gdb-server/transport.cc",
"src/debug/wasm/gdb-server/wasm-module-debug.cc",
]
}
if (v8_enable_heap_snapshot_verify) {
sources += [ "src/heap/reference-summarizer.cc" ]
}
if (v8_current_cpu == "x86") {
sources += [
### gcmole(ia32) ###
"src/codegen/ia32/assembler-ia32.cc",
"src/codegen/ia32/cpu-ia32.cc",
"src/codegen/ia32/macro-assembler-ia32.cc",
"src/codegen/shared-ia32-x64/macro-assembler-shared-ia32-x64.cc",
"src/deoptimizer/ia32/deoptimizer-ia32.cc",
"src/diagnostics/ia32/disasm-ia32.cc",
"src/diagnostics/ia32/unwinder-ia32.cc",
"src/execution/ia32/frame-constants-ia32.cc",
"src/regexp/ia32/regexp-macro-assembler-ia32.cc",
]
} else if (v8_current_cpu == "x64") {
sources += [
### gcmole(x64) ###
"src/codegen/shared-ia32-x64/macro-assembler-shared-ia32-x64.cc",
"src/codegen/x64/assembler-x64.cc",
"src/codegen/x64/cpu-x64.cc",
"src/codegen/x64/macro-assembler-x64.cc",
"src/deoptimizer/x64/deoptimizer-x64.cc",
"src/diagnostics/x64/disasm-x64.cc",
"src/diagnostics/x64/eh-frame-x64.cc",
"src/diagnostics/x64/unwinder-x64.cc",
"src/execution/x64/frame-constants-x64.cc",
"src/regexp/x64/regexp-macro-assembler-x64.cc",
]
if (is_win) {
sources += [ "src/diagnostics/unwinding-info-win64.cc" ]
}
if (v8_enable_webassembly) {
# iOS Xcode simulator builds run on an x64 target. iOS and macOS are both
# based on Darwin and thus POSIX-compliant to a similar degree.
if (is_linux || is_chromeos || is_mac || is_ios ||
target_os == "freebsd") {
sources += [
"src/trap-handler/handler-inside-posix.cc",
"src/trap-handler/handler-outside-posix.cc",
]
} else if (is_win) {
sources += [
"src/trap-handler/handler-inside-win.cc",
"src/trap-handler/handler-outside-win.cc",
]
}
}
} else if (v8_current_cpu == "arm") {
sources += [
### gcmole(arm) ###
"src/codegen/arm/assembler-arm.cc",
"src/codegen/arm/constants-arm.cc",
"src/codegen/arm/cpu-arm.cc",
"src/codegen/arm/macro-assembler-arm.cc",
"src/deoptimizer/arm/deoptimizer-arm.cc",
"src/diagnostics/arm/disasm-arm.cc",
"src/diagnostics/arm/eh-frame-arm.cc",
"src/diagnostics/arm/unwinder-arm.cc",
"src/execution/arm/frame-constants-arm.cc",
"src/execution/arm/simulator-arm.cc",
"src/regexp/arm/regexp-macro-assembler-arm.cc",
]
} else if (v8_current_cpu == "arm64") {
sources += [
### gcmole(arm64) ###
"src/codegen/arm64/assembler-arm64.cc",
"src/codegen/arm64/constant-pool-arm64.cc",
"src/codegen/arm64/cpu-arm64.cc",
"src/codegen/arm64/decoder-arm64.cc",
"src/codegen/arm64/instructions-arm64-constants.cc",
"src/codegen/arm64/instructions-arm64.cc",
"src/codegen/arm64/macro-assembler-arm64.cc",
"src/codegen/arm64/register-arm64.cc",
"src/codegen/arm64/utils-arm64.cc",
"src/deoptimizer/arm64/deoptimizer-arm64.cc",
"src/diagnostics/arm64/disasm-arm64.cc",
"src/diagnostics/arm64/eh-frame-arm64.cc",
"src/diagnostics/arm64/unwinder-arm64.cc",
"src/execution/arm64/frame-constants-arm64.cc",
"src/execution/arm64/pointer-auth-arm64.cc",
"src/execution/arm64/simulator-arm64.cc",
"src/execution/arm64/simulator-logic-arm64.cc",
"src/regexp/arm64/regexp-macro-assembler-arm64.cc",
]
if (v8_enable_webassembly) {
# Trap handling is enabled on arm64 and x64, on Linux, Mac and Windows.
if ((current_cpu == "arm64" && (is_linux || is_chromeos || is_apple)) ||
(current_cpu == "x64" && (is_linux || is_chromeos || is_mac))) {
sources += [
"src/trap-handler/handler-inside-posix.cc",
"src/trap-handler/handler-outside-posix.cc",
]
} else if ((current_cpu == "arm64" || current_cpu == "x64") && is_win) {
sources += [
"src/trap-handler/handler-inside-win.cc",
"src/trap-handler/handler-outside-win.cc",
]
}
if ((current_cpu == "x64" || current_cpu == "arm64") &&
(is_linux || is_chromeos || is_mac || is_win)) {
sources += [ "src/trap-handler/handler-outside-simulator.cc" ]
}
}
if (is_win) {
sources += [ "src/diagnostics/unwinding-info-win64.cc" ]
}
} else if (v8_current_cpu == "mips64" || v8_current_cpu == "mips64el") {
sources += [
### gcmole(mips64el) ###
"src/codegen/mips64/assembler-mips64.cc",
"src/codegen/mips64/constants-mips64.cc",
"src/codegen/mips64/cpu-mips64.cc",
"src/codegen/mips64/interface-descriptors-mips64-inl.h",
"src/codegen/mips64/macro-assembler-mips64.cc",
"src/deoptimizer/mips64/deoptimizer-mips64.cc",
"src/diagnostics/mips64/disasm-mips64.cc",
"src/diagnostics/mips64/unwinder-mips64.cc",
"src/execution/mips64/frame-constants-mips64.cc",
"src/execution/mips64/simulator-mips64.cc",
"src/regexp/mips64/regexp-macro-assembler-mips64.cc",
]
} else if (v8_current_cpu == "loong64") {
sources += [
### gcmole(loong64) ###
"src/codegen/loong64/assembler-loong64.cc",
"src/codegen/loong64/constants-loong64.cc",
"src/codegen/loong64/cpu-loong64.cc",
"src/codegen/loong64/interface-descriptors-loong64-inl.h",
"src/codegen/loong64/macro-assembler-loong64.cc",
"src/deoptimizer/loong64/deoptimizer-loong64.cc",
"src/diagnostics/loong64/disasm-loong64.cc",
"src/diagnostics/loong64/unwinder-loong64.cc",
"src/execution/loong64/frame-constants-loong64.cc",
"src/execution/loong64/simulator-loong64.cc",
"src/regexp/loong64/regexp-macro-assembler-loong64.cc",
]
if (v8_enable_webassembly) {
# Trap handling is enabled on loong64 Linux and in simulators on
# x64 on Linux.
if ((current_cpu == "loong64" && is_linux) ||
(current_cpu == "x64" && is_linux)) {
sources += [
"src/trap-handler/handler-inside-posix.cc",
"src/trap-handler/handler-outside-posix.cc",
]
}
if (current_cpu == "x64" && is_linux) {
sources += [ "src/trap-handler/handler-outside-simulator.cc" ]
}
}
} else if (v8_current_cpu == "ppc64") {
sources += [
### gcmole(ppc64) ###
"src/codegen/ppc/assembler-ppc.cc",
"src/codegen/ppc/constant-pool-ppc.cc",
"src/codegen/ppc/constants-ppc.cc",
"src/codegen/ppc/cpu-ppc.cc",
"src/codegen/ppc/macro-assembler-ppc.cc",
"src/deoptimizer/ppc/deoptimizer-ppc.cc",
"src/diagnostics/ppc/disasm-ppc.cc",
"src/diagnostics/ppc/eh-frame-ppc.cc",
"src/diagnostics/ppc/unwinder-ppc.cc",
"src/execution/ppc/frame-constants-ppc.cc",
"src/execution/ppc/simulator-ppc.cc",
"src/regexp/ppc/regexp-macro-assembler-ppc.cc",
]
} else if (v8_current_cpu == "s390x") {
sources += [
### gcmole(s390) ###
"src/codegen/s390/assembler-s390.cc",
"src/codegen/s390/constants-s390.cc",
"src/codegen/s390/cpu-s390.cc",
"src/codegen/s390/macro-assembler-s390.cc",
"src/deoptimizer/s390/deoptimizer-s390.cc",
"src/diagnostics/s390/disasm-s390.cc",
"src/diagnostics/s390/eh-frame-s390.cc",
"src/diagnostics/s390/unwinder-s390.cc",
"src/execution/s390/frame-constants-s390.cc",
"src/execution/s390/simulator-s390.cc",
"src/regexp/s390/regexp-macro-assembler-s390.cc",
]
} else if (v8_current_cpu == "riscv64") {
sources += [
### gcmole(riscv64) ###
"src/codegen/riscv/assembler-riscv.cc",
"src/codegen/riscv/base-assembler-riscv.cc",
"src/codegen/riscv/base-constants-riscv.cc",
"src/codegen/riscv/base-riscv-i.cc",
"src/codegen/riscv/constant-pool-riscv.cc",
"src/codegen/riscv/cpu-riscv.cc",
"src/codegen/riscv/extension-riscv-a.cc",
"src/codegen/riscv/extension-riscv-b.cc",
"src/codegen/riscv/extension-riscv-c.cc",
"src/codegen/riscv/extension-riscv-d.cc",
"src/codegen/riscv/extension-riscv-f.cc",
"src/codegen/riscv/extension-riscv-m.cc",
"src/codegen/riscv/extension-riscv-v.cc",
"src/codegen/riscv/extension-riscv-zfh.cc",
"src/codegen/riscv/extension-riscv-zicond.cc",
"src/codegen/riscv/extension-riscv-zicsr.cc",
"src/codegen/riscv/extension-riscv-zifencei.cc",
"src/codegen/riscv/extension-riscv-zimop.cc",
"src/codegen/riscv/macro-assembler-riscv.cc",
"src/deoptimizer/riscv/deoptimizer-riscv.cc",
"src/diagnostics/riscv/disasm-riscv.cc",
"src/diagnostics/riscv/unwinder-riscv.cc",
"src/execution/riscv/frame-constants-riscv.cc",
"src/execution/riscv/simulator-riscv.cc",
"src/regexp/riscv/regexp-macro-assembler-riscv.cc",
]
if (v8_enable_webassembly) {
# Trap handling is enabled on riscv64 Linux and in simulators on
# x64 on Linux.
if ((current_cpu == "riscv64" && is_linux) ||
(current_cpu == "x64" && is_linux)) {
sources += [
"src/trap-handler/handler-inside-posix.cc",
"src/trap-handler/handler-outside-posix.cc",
]
}
if (current_cpu == "x64" && is_linux) {
sources += [ "src/trap-handler/handler-outside-simulator.cc" ]
}
if (riscv_use_zicfiss) {
sources += [ "src/execution/riscv/shadow-stack-riscv.cc" ]
}
}
} else if (v8_current_cpu == "riscv32") {
sources += [
### gcmole(riscv32) ###
"src/codegen/riscv/assembler-riscv.cc",
"src/codegen/riscv/base-assembler-riscv.cc",
"src/codegen/riscv/base-constants-riscv.cc",
"src/codegen/riscv/base-riscv-i.cc",
"src/codegen/riscv/constant-pool-riscv.cc",
"src/codegen/riscv/cpu-riscv.cc",
"src/codegen/riscv/extension-riscv-a.cc",
"src/codegen/riscv/extension-riscv-b.cc",
"src/codegen/riscv/extension-riscv-c.cc",
"src/codegen/riscv/extension-riscv-d.cc",
"src/codegen/riscv/extension-riscv-f.cc",
"src/codegen/riscv/extension-riscv-m.cc",
"src/codegen/riscv/extension-riscv-v.cc",
"src/codegen/riscv/extension-riscv-zfh.cc",
"src/codegen/riscv/extension-riscv-zicond.cc",
"src/codegen/riscv/extension-riscv-zicsr.cc",
"src/codegen/riscv/extension-riscv-zifencei.cc",
"src/codegen/riscv/extension-riscv-zimop.cc",
"src/codegen/riscv/macro-assembler-riscv.cc",
"src/deoptimizer/riscv/deoptimizer-riscv.cc",
"src/diagnostics/riscv/disasm-riscv.cc",
"src/diagnostics/riscv/unwinder-riscv.cc",
"src/execution/riscv/frame-constants-riscv.cc",
"src/execution/riscv/simulator-riscv.cc",
"src/regexp/riscv/regexp-macro-assembler-riscv.cc",
]
}
# Architecture independent but platform-specific sources
if (is_win) {
if (v8_enable_etw_stack_walking) {
sources += [
"src/diagnostics/etw-debug-win.cc",
"src/diagnostics/etw-debug-win.h",
"src/diagnostics/etw-isolate-capture-state-monitor-win.cc",
"src/diagnostics/etw-isolate-capture-state-monitor-win.h",
"src/diagnostics/etw-isolate-load-script-data-win.cc",
"src/diagnostics/etw-isolate-load-script-data-win.h",
"src/diagnostics/etw-isolate-operations-win.cc",
"src/diagnostics/etw-isolate-operations-win.h",
"src/diagnostics/etw-jit-metadata-win.cc",
"src/diagnostics/etw-jit-metadata-win.h",
"src/diagnostics/etw-jit-win.cc",
"src/diagnostics/etw-jit-win.h",
]
}
}
configs = [
":internal_config",
":cppgc_base_config",
]
deps = [
":torque_generated_definitions",
":v8_bigint",
":v8_headers",
":v8_heap_base",
":v8_libbase",
":v8_maybe_temporal",
":v8_shared_internal_headers",
":v8_tracing",
":v8_version",
"src/inspector",
"//third_party/dragonbox",
"//third_party/fast_float",
"//third_party/highway:libhwy",
]
public_deps = [
":cppgc_base",
":generate_bytecode_builtins_list",
":run_torque",
":v8_abseil",
":v8_headers",
":v8_internal_headers",
":v8_maybe_icu",
"//third_party/simdutf",
]
if (v8_enable_experimental_tq_to_tsa) {
public_deps += [ ":run_torque_to_tsa" ]
}
if (v8_fuzzilli) {
sources += [
"src/fuzzilli/cov.cc",
"src/fuzzilli/cov.h",
"src/fuzzilli/fuzzilli.cc",
"src/fuzzilli/fuzzilli.h",
]
}
if (v8_dumpling) {
sources += [
"src/dumpling/dumpling-manager.cc",
"src/dumpling/dumpling-manager.h",
"src/dumpling/object-dumping.cc",
"src/dumpling/object-dumping.h",
]
}
if (v8_enable_i18n_support) {
deps += [ ":run_gen-regexp-special-case" ]
sources += [ "$target_gen_dir/src/regexp/special-case.cc" ]
if (is_win) {
deps += [ "$v8_icu_path:icudata" ]
}
} else {
sources -= [
"src/builtins/builtins-intl.cc",
"src/objects/intl-objects.cc",
"src/objects/js-break-iterator.cc",
"src/objects/js-collator.cc",
"src/objects/js-date-time-format.cc",
"src/objects/js-display-names.cc",
"src/objects/js-duration-format.cc",
"src/objects/js-list-format.cc",
"src/objects/js-locale.cc",
"src/objects/js-number-format.cc",
"src/objects/js-plural-rules.cc",
"src/objects/js-relative-time-format.cc",
"src/objects/js-segment-iterator.cc",
"src/objects/js-segmenter.cc",
"src/objects/js-segments.cc",
"src/runtime/runtime-intl.cc",
"src/strings/char-predicates.cc",
]
}
if (v8_use_zlib) {
deps += [
"$v8_zlib_path",
"$v8_zlib_path/google:compression_utils_portable",
]
}
# In i18n mode, we can use ICU4C to load ICU4C's builtin zoneinfo64.res data
# In non-i18n mode, we need to copy that into the binary
if (v8_enable_temporal_support && !v8_enable_i18n_support) {
sources +=
[ "$target_gen_dir/src/builtins/builtins-temporal-zoneinfo64-data.cc" ]
deps += [ ":make_temporal_zoneinfo_cpp" ]
}
if (v8_postmortem_support) {
sources += [ "$target_gen_dir/debug-support.cc" ]
deps += [ ":postmortem-metadata" ]
}
libs = []
# Platforms that don't have CAS support need to link atomic library
# to implement atomic memory access
if (v8_current_cpu == "mips64" || v8_current_cpu == "mips64el" ||
v8_current_cpu == "ppc64" ||
(current_os != "zos" && v8_current_cpu == "s390x") ||
v8_current_cpu == "riscv64" || v8_current_cpu == "riscv32") {
if (!is_clang) {
libs += [ "atomic" ]
}
}
if (v8_enable_vtunetracemark && (is_linux || is_chromeos || is_win)) {
sources += [
"src/extensions/vtunedomain-support-extension.cc",
"src/extensions/vtunedomain-support-extension.h",
]
deps += [ "third_party/vtune:v8_vtune_trace_mark" ]
}
}
group("v8_base") {
public_deps = [
":v8_base_without_compiler",
":v8_compiler",
]
}
v8_source_set("torque_base") {
visibility = [ ":*" ] # Only targets in this file can depend on this.
sources = [
"src/numbers/integer-literal-inl.h",
"src/numbers/integer-literal.h",
"src/torque/ast.h",
"src/torque/cc-generator.cc",
"src/torque/cc-generator.h",
"src/torque/cfg.cc",
"src/torque/cfg.h",
"src/torque/class-debug-reader-generator.cc",
"src/torque/constants.h",
"src/torque/cpp-builder.cc",
"src/torque/cpp-builder.h",
"src/torque/csa-generator.cc",
"src/torque/csa-generator.h",
"src/torque/declarable.cc",
"src/torque/declarable.h",
"src/torque/declaration-visitor.cc",
"src/torque/declaration-visitor.h",
"src/torque/declarations.cc",
"src/torque/declarations.h",
"src/torque/earley-parser.cc",
"src/torque/earley-parser.h",
"src/torque/global-context.cc",
"src/torque/global-context.h",
"src/torque/implementation-visitor.cc",
"src/torque/implementation-visitor.h",
"src/torque/instance-type-generator.cc",
"src/torque/instructions.cc",
"src/torque/instructions.h",
"src/torque/kythe-data.cc",
"src/torque/kythe-data.h",
"src/torque/parameter-difference.h",
"src/torque/server-data.cc",
"src/torque/server-data.h",
"src/torque/source-positions.cc",
"src/torque/source-positions.h",
"src/torque/torque-code-generator.cc",
"src/torque/torque-code-generator.h",
"src/torque/torque-compiler.cc",
"src/torque/torque-compiler.h",
"src/torque/torque-parser.cc",
"src/torque/torque-parser.h",
"src/torque/type-inference.cc",
"src/torque/type-inference.h",
"src/torque/type-oracle.cc",
"src/torque/type-oracle.h",
"src/torque/type-visitor.cc",
"src/torque/type-visitor.h",
"src/torque/types.cc",
"src/torque/types.h",
"src/torque/utils.cc",
"src/torque/utils.h",
]
if (v8_enable_experimental_tq_to_tsa) {
sources += [
"src/torque/ast-visitor.h",
"src/torque/tsa-generator.cc",
"src/torque/tsa-generator.h",
]
}
deps = [
":v8_flags",
":v8_shared_internal_headers",
]
public_deps = [
":v8_config_headers",
":v8_libbase",
]
# The use of exceptions for Torque in violation of the Chromium style-guide
# is justified by the fact that it is only used from the non-essential
# language server and can be removed anytime if it causes problems.
configs = [
":internal_config",
"//build/config/compiler:exceptions",
"//build/config/compiler:rtti",
]
remove_configs = [
"//build/config/compiler:no_exceptions",
"//build/config/compiler:no_rtti",
]
if (is_debug && !v8_optimized_debug && v8_enable_fast_torque) {
# The :no_optimize config is added to v8_add_configs in v8.gni.
remove_configs += [ "//build/config/compiler:no_optimize" ]
configs += [ ":always_turbofanimize" ]
}
}
v8_source_set("torque_ls_base") {
sources = [
"src/torque/ls/globals.h",
"src/torque/ls/json-parser.cc",
"src/torque/ls/json-parser.h",
"src/torque/ls/json.cc",
"src/torque/ls/json.h",
"src/torque/ls/message-handler.cc",
"src/torque/ls/message-handler.h",
"src/torque/ls/message-macros.h",
"src/torque/ls/message-pipe.h",
"src/torque/ls/message.h",
]
public_deps = [ ":torque_base" ]
# The use of exceptions for Torque in violation of the Chromium style-guide
# is justified by the fact that it is only used from the non-essential
# language server and can be removed anytime if it causes problems.
configs = [
":internal_config",
"//build/config/compiler:exceptions",
"//build/config/compiler:rtti",
]
remove_configs = [
"//build/config/compiler:no_exceptions",
"//build/config/compiler:no_rtti",
]
}
v8_component("v8_libbase") {
sources = [
"src/base/abort-mode.cc",
"src/base/abort-mode.h",
"src/base/address-region.h",
"src/base/algorithm.h",
"src/base/atomic-utils.h",
"src/base/atomicops.h",
"src/base/base-export.h",
"src/base/bit-field.h",
"src/base/bits-iterator.h",
"src/base/bits.cc",
"src/base/bits.h",
"src/base/bounded-page-allocator.cc",
"src/base/bounded-page-allocator.h",
"src/base/bounds.h",
"src/base/build_config.h",
"src/base/compiler-specific.h",
"src/base/container-utils.h",
"src/base/contextual.h",
"src/base/cpu.cc",
"src/base/cpu.h",
"src/base/debug/stack_trace.cc",
"src/base/debug/stack_trace.h",
"src/base/discriminated-union.h",
"src/base/division-by-constant.cc",
"src/base/division-by-constant.h",
"src/base/doubly-threaded-list.h",
"src/base/emulated-virtual-address-subspace.cc",
"src/base/emulated-virtual-address-subspace.h",
"src/base/enum-set.h",
"src/base/export-template.h",
"src/base/file-utils.cc",
"src/base/file-utils.h",
"src/base/flags.h",
"src/base/float16.h",
"src/base/fpu.cc",
"src/base/fpu.h",
"src/base/free_deleter.h",
"src/base/functional/bind-internal.h",
"src/base/functional/function-ref.h",
"src/base/hashing.h",
"src/base/hashmap-entry.h",
"src/base/hashmap.h",
"src/base/ieee754.cc",
"src/base/ieee754.h",
"src/base/immediate-crash.h",
"src/base/intrusive-set.h",
"src/base/iterator.h",
"src/base/lazy-instance.h",
"src/base/logging.cc",
"src/base/logging.h",
"src/base/macros.h",
"src/base/memcopy.h",
"src/base/memory.h",
"src/base/numbers/bignum-dtoa.cc",
"src/base/numbers/bignum-dtoa.h",
"src/base/numbers/bignum.cc",
"src/base/numbers/bignum.h",
"src/base/numbers/cached-powers.cc",
"src/base/numbers/cached-powers.h",
"src/base/numbers/diy-fp.cc",
"src/base/numbers/diy-fp.h",
"src/base/numbers/double.h",
"src/base/numbers/dtoa.cc",
"src/base/numbers/dtoa.h",
"src/base/numbers/fast-dtoa.cc",
"src/base/numbers/fast-dtoa.h",
"src/base/numbers/fixed-dtoa.cc",
"src/base/numbers/fixed-dtoa.h",
"src/base/numbers/strtod.cc",
"src/base/numbers/strtod.h",
"src/base/numerics/angle_conversions.h",
"src/base/numerics/basic_ops_impl.h",
"src/base/numerics/byte_conversions.h",
"src/base/numerics/checked_math.h",
"src/base/numerics/checked_math_impl.h",
"src/base/numerics/clamped_math.h",
"src/base/numerics/clamped_math_impl.h",
"src/base/numerics/integral_constant_like.h",
"src/base/numerics/math_constants.h",
"src/base/numerics/ostream_operators.h",
"src/base/numerics/ranges.h",
"src/base/numerics/safe_conversions.h",
"src/base/numerics/safe_conversions_arm_impl.h",
"src/base/numerics/safe_conversions_impl.h",
"src/base/numerics/safe_math.h",
"src/base/numerics/safe_math_arm_impl.h",
"src/base/numerics/safe_math_clang_gcc_impl.h",
"src/base/numerics/safe_math_shared_impl.h",
"src/base/numerics/wrapping_math.h",
"src/base/once.cc",
"src/base/once.h",
"src/base/overflowing-math.h",
"src/base/page-allocator.cc",
"src/base/page-allocator.h",
"src/base/platform/condition-variable.cc",
"src/base/platform/condition-variable.h",
"src/base/platform/elapsed-timer.h",
"src/base/platform/memory-protection-key.cc",
"src/base/platform/memory-protection-key.h",
"src/base/platform/memory.h",
"src/base/platform/mutex.cc",
"src/base/platform/mutex.h",
"src/base/platform/platform.cc",
"src/base/platform/platform.h",
"src/base/platform/semaphore.cc",
"src/base/platform/semaphore.h",
"src/base/platform/time.cc",
"src/base/platform/time.h",
"src/base/platform/wrappers.h",
"src/base/platform/yield-processor.h",
"src/base/pointer-with-payload.h",
"src/base/region-allocator.cc",
"src/base/region-allocator.h",
"src/base/ring-buffer.h",
"src/base/sanitizer/asan.h",
"src/base/sanitizer/lsan-page-allocator.cc",
"src/base/sanitizer/lsan-page-allocator.h",
"src/base/sanitizer/lsan-virtual-address-space.cc",
"src/base/sanitizer/lsan-virtual-address-space.h",
"src/base/sanitizer/lsan.h",
"src/base/sanitizer/msan.h",
"src/base/sanitizer/tsan.h",
"src/base/sanitizer/ubsan.h",
"src/base/small-map.h",
"src/base/small-vector.h",
"src/base/string-format.h",
"src/base/strings.cc",
"src/base/strings.h",
"src/base/strong-alias.h",
"src/base/sys-info.cc",
"src/base/sys-info.h",
"src/base/template-meta-programming/common.h",
"src/base/template-meta-programming/functional.h",
"src/base/template-meta-programming/list.h",
"src/base/template-meta-programming/string-literal.h",
"src/base/template-utils.h",
"src/base/threaded-list.h",
"src/base/timezone-cache.h",
"src/base/types/is-instantiation.h",
"src/base/utils/random-number-generator.cc",
"src/base/utils/random-number-generator.h",
"src/base/vector.h",
"src/base/virtual-address-space-page-allocator.cc",
"src/base/virtual-address-space-page-allocator.h",
"src/base/virtual-address-space.cc",
"src/base/virtual-address-space.h",
"src/base/vlq-base64.cc",
"src/base/vlq-base64.h",
"src/base/vlq.h",
]
configs = [ ":internal_config_base" ]
public_configs = [ ":libbase_config" ]
v8_add_configs += [ "//build/config/compiler:thinlto_optimize_max" ]
v8_remove_configs += [ "//build/config/compiler:thinlto_optimize_default" ]
deps = [ ":v8_config_headers" ]
public_deps = [ ":v8_abseil" ]
if (current_os == "zos") {
public_configs += [ ":zoslib_config" ]
deps += [ ":zoslib" ]
}
libs = []
data = []
data_deps = []
defines = []
if (is_component_build) {
defines = [ "BUILDING_V8_BASE_SHARED" ]
}
if (is_posix || is_fuchsia) {
sources += [
"src/base/platform/platform-posix.cc",
"src/base/platform/platform-posix.h",
]
if (current_os != "aix" && current_os != "zos") {
sources += [
"src/base/platform/platform-posix-time.cc",
"src/base/platform/platform-posix-time.h",
]
}
}
if (is_linux || is_chromeos) {
sources += [
"src/base/debug/stack_trace_posix.cc",
"src/base/platform/platform-linux.cc",
"src/base/platform/platform-linux.h",
]
libs = [
"dl",
"rt",
]
} else if (current_os == "aix") {
sources += [
"src/base/debug/stack_trace_posix.cc",
"src/base/platform/platform-aix.cc",
]
libs = [ "dl" ]
} else if (is_android) {
if (current_toolchain == host_toolchain) {
libs = [
"dl",
"rt",
]
if (host_os == "mac") {
sources += [
"src/base/debug/stack_trace_posix.cc",
"src/base/platform/platform-darwin.cc",
]
} else {
sources += [
"src/base/debug/stack_trace_posix.cc",
"src/base/platform/platform-linux.cc",
]
}
} else {
sources += [
"src/base/debug/stack_trace_android.cc",
"src/base/platform/platform-linux.cc",
]
}
} else if (is_fuchsia) {
sources += [
"src/base/debug/stack_trace_fuchsia.cc",
"src/base/platform/platform-fuchsia.cc",
]
deps += [
"//third_party/fuchsia-sdk/sdk/fidl/fuchsia.kernel:fuchsia.kernel_cpp",
"//third_party/fuchsia-sdk/sdk/pkg/component_incoming_cpp",
"//third_party/fuchsia-sdk/sdk/pkg/zx",
]
} else if (is_mac) {
sources += [
"src/base/debug/stack_trace_posix.cc",
"src/base/platform/platform-darwin.cc",
]
} else if (is_ios) {
sources += [
"src/base/debug/stack_trace_posix.cc",
"src/base/platform/platform-darwin.cc",
]
} else if (is_win) {
# TODO(infra): Add support for cygwin.
sources += [
"src/base/debug/stack_trace_win.cc",
"src/base/platform/platform-win32.cc",
"src/base/platform/platform-win32.h",
"src/base/win32-headers.h",
]
defines += [ "_CRT_RAND_S" ] # for rand_s()
libs = [
"dbghelp.lib",
"winmm.lib",
"ws2_32.lib",
]
if (v8_enable_etw_stack_walking) {
libs += [ "advapi32.lib" ] # Needed for TraceLoggingProvider.h
}
# TODO(crbug.com/40031409): Fix code that adds exit-time destructors and
# enable the diagnostic by removing this line.
configs += [ "//build/config/compiler:no_exit_time_destructors" ]
data_deps += [ "//build/win:runtime_libs" ]
} else if (current_os == "zos") {
sources += [
"src/base/debug/stack_trace_zos.cc",
"src/base/platform/platform-zos.cc",
]
}
if (v8_current_cpu == "mips64") {
# Add runtime libs for mips.
data += [
"tools/mips_toolchain/sysroot/usr/lib/",
"tools/mips_toolchain/mips-mti-linux-gnu/lib",
]
}
if (is_ubsan && (v8_current_cpu == "x86" || v8_current_cpu == "arm")) {
# Special UBSan 32-bit requirement.
sources += [ "src/base/ubsan.cc" ]
}
if (v8_current_cpu == "riscv64" || v8_current_cpu == "riscv32") {
if (!is_clang) {
libs += [ "atomic" ]
}
}
if (is_tsan && !build_with_chromium) {
data += [ "tools/sanitizers/tsan_suppressions.txt" ]
}
if (using_sanitizer && !build_with_chromium) {
if (is_linux && target_cpu == "arm64") {
# TODO(https://crbug.com/396446140): Switch to the symbolizer from our
# bundled toolchain as soon as one is available for linux-arm64.
data += [ "tools/sanitizers/linux/arm64/llvm-symbolizer" ]
} else {
data_deps += [ "//build/config/clang:llvm-symbolizer_data" ]
}
}
if (v8_use_libm_trig_functions) {
deps += [ ":libm" ]
}
# TODO(infra): Add support for qnx, freebsd, openbsd, netbsd, and solaris.
}
if (v8_use_libm_trig_functions) {
source_set("libm") {
sources = [
"third_party/glibc/src/sysdeps/ieee754/dbl-64/branred.c",
"third_party/glibc/src/sysdeps/ieee754/dbl-64/branred.h",
"third_party/glibc/src/sysdeps/ieee754/dbl-64/dla.h",
"third_party/glibc/src/sysdeps/ieee754/dbl-64/endian.h",
"third_party/glibc/src/sysdeps/ieee754/dbl-64/mydefs.h",
"third_party/glibc/src/sysdeps/ieee754/dbl-64/s_sin.c",
"third_party/glibc/src/sysdeps/ieee754/dbl-64/sincostab.c",
"third_party/glibc/src/sysdeps/ieee754/dbl-64/trig.h",
"third_party/glibc/src/sysdeps/ieee754/dbl-64/usncs.h",
]
configs += [ "//build/config/compiler:no_chromium_code" ]
configs -= [ "//build/config/compiler:chromium_code" ]
if (!is_debug) {
# Build code using -O3, see: crbug.com/1084371.
configs += [ "//build/config/compiler:optimize_speed" ]
}
}
}
v8_component("v8_libplatform") {
sources = [
"include/libplatform/libplatform-export.h",
"include/libplatform/libplatform.h",
"include/libplatform/v8-tracing.h",
"src/libplatform/default-foreground-task-runner.cc",
"src/libplatform/default-foreground-task-runner.h",
"src/libplatform/default-job.cc",
"src/libplatform/default-job.h",
"src/libplatform/default-platform.cc",
"src/libplatform/default-platform.h",
"src/libplatform/default-thread-isolated-allocator.cc",
"src/libplatform/default-thread-isolated-allocator.h",
"src/libplatform/default-worker-threads-task-runner.cc",
"src/libplatform/default-worker-threads-task-runner.h",
"src/libplatform/delayed-task-queue.cc",
"src/libplatform/delayed-task-queue.h",
"src/libplatform/task-queue.cc",
"src/libplatform/task-queue.h",
"src/libplatform/tracing/trace-buffer.cc",
"src/libplatform/tracing/trace-buffer.h",
"src/libplatform/tracing/trace-config.cc",
"src/libplatform/tracing/trace-object.cc",
"src/libplatform/tracing/trace-writer.cc",
"src/libplatform/tracing/trace-writer.h",
"src/libplatform/tracing/tracing-controller.cc",
"src/libplatform/worker-thread.cc",
"src/libplatform/worker-thread.h",
"src/tracing/trace-event-no-perfetto.h",
]
configs = [ ":internal_config_base" ]
v8_add_configs += [ "//build/config/compiler:thinlto_optimize_max" ]
v8_remove_configs += [ "//build/config/compiler:thinlto_optimize_default" ]
if (is_component_build) {
defines = [ "BUILDING_V8_PLATFORM_SHARED" ]
}
public_configs = [ ":libplatform_config" ]
public_deps = []
deps = [
":v8_config_headers",
":v8_libbase",
":v8_tracing",
]
if (v8_use_perfetto) {
sources -= [
"src/libplatform/tracing/trace-buffer.cc",
"src/libplatform/tracing/trace-buffer.h",
"src/libplatform/tracing/trace-object.cc",
"src/libplatform/tracing/trace-writer.cc",
"src/libplatform/tracing/trace-writer.h",
"src/tracing/trace-event-no-perfetto.h",
]
sources += [ "src/libplatform/tracing/trace-event-listener.h" ]
}
if (v8_enable_system_instrumentation) {
sources += [ "src/libplatform/tracing/recorder.h" ]
if (is_mac) {
sources += [ "src/libplatform/tracing/recorder-mac.cc" ]
} else if (is_win) {
sources += [ "src/libplatform/tracing/recorder-win.cc" ]
}
}
if (v8_current_cpu == "riscv64" || v8_current_cpu == "riscv32") {
if (!is_clang) {
libs = [ "atomic" ]
}
}
}
v8_source_set("fuzzer_support") {
visibility = [ ":*" ] # Only targets in this file can depend on this.
sources = [
"test/fuzzer/fuzzer-support.cc",
"test/fuzzer/fuzzer-support.h",
]
configs = [ ":internal_config_base" ]
public_deps = [
":v8",
":v8_libbase",
":v8_libplatform",
":v8_maybe_icu",
]
deps = [ ":v8_maybe_temporal" ]
# TODO(crbug.com/40031409): Fix code that adds exit-time destructors and
# enable the diagnostic by removing this line.
configs += [ "//build/config/compiler:no_exit_time_destructors" ]
}
v8_source_set("v8_bigint") {
sources = [
"src/bigint/bigint-internal.cc",
"src/bigint/bigint-internal.h",
"src/bigint/bigint.h",
"src/bigint/bitwise.cc",
"src/bigint/digit-arithmetic.h",
"src/bigint/div-burnikel.cc",
"src/bigint/div-helpers.cc",
"src/bigint/div-helpers.h",
"src/bigint/div-schoolbook.cc",
"src/bigint/fromstring.cc",
"src/bigint/mul-karatsuba.cc",
"src/bigint/mul-schoolbook.cc",
"src/bigint/tostring.cc",
"src/bigint/util.h",
"src/bigint/vector-arithmetic.cc",
"src/bigint/vector-arithmetic.h",
]
if (v8_advanced_bigint_algorithms) {
sources += [
"src/bigint/div-barrett.cc",
"src/bigint/mul-fft.cc",
"src/bigint/mul-toom.cc",
]
}
configs = [ ":internal_config" ]
}
v8_header_set("v8_heap_base_headers") {
sources = [
"src/heap/base/active-system-pages.h",
"src/heap/base/basic-slot-set.h",
"src/heap/base/bytes.h",
"src/heap/base/cached-unordered-map.h",
"src/heap/base/incremental-marking-schedule.h",
"src/heap/base/memory-tagging.h",
"src/heap/base/stack.h",
"src/heap/base/unsafe-json-emitter.h",
"src/heap/base/worklist.h",
]
configs = [ ":internal_config" ]
public_deps = [ ":v8_libbase" ]
}
v8_source_set("v8_heap_base") {
sources = [
"src/heap/base/active-system-pages.cc",
"src/heap/base/incremental-marking-schedule.cc",
"src/heap/base/memory-tagging.cc",
"src/heap/base/stack.cc",
"src/heap/base/unsafe-json-emitter.cc",
"src/heap/base/worklist.cc",
]
if (current_cpu == "x64") {
if (is_win) {
# Prefer a masm version with unwind directives.
sources += [ "src/heap/base/asm/x64/push_registers_masm.asm" ]
} else {
sources += [ "src/heap/base/asm/x64/push_registers_asm.cc" ]
}
} else if (current_cpu == "x86") {
sources += [ "src/heap/base/asm/ia32/push_registers_asm.cc" ]
} else if (current_cpu == "arm") {
sources += [ "src/heap/base/asm/arm/push_registers_asm.cc" ]
} else if (current_cpu == "arm64") {
sources += [ "src/heap/base/asm/arm64/push_registers_asm.cc" ]
} else if (current_cpu == "ppc64") {
sources += [ "src/heap/base/asm/ppc/push_registers_asm.cc" ]
} else if (current_os == "zos") {
sources += [ "src/heap/base/asm/zos/push_registers_asm.cc" ]
} else if (current_cpu == "s390x") {
sources += [ "src/heap/base/asm/s390/push_registers_asm.cc" ]
} else if (current_cpu == "mips64el") {
sources += [ "src/heap/base/asm/mips64/push_registers_asm.cc" ]
} else if (current_cpu == "loong64") {
sources += [ "src/heap/base/asm/loong64/push_registers_asm.cc" ]
} else if (current_cpu == "riscv64" || current_cpu == "riscv32") {
sources += [ "src/heap/base/asm/riscv/push_registers_asm.cc" ]
}
configs = [ ":internal_config" ]
deps = [ ":v8_config_headers" ]
public_deps = [
":v8_heap_base_headers",
":v8_libbase",
]
}
# This is split out to be a non-code containing target that the Chromium browser
# can depend upon to get basic cppgc types.
v8_header_set("cppgc_headers") {
configs = [ ":internal_config" ]
public_configs = [
":v8_header_features",
":cppgc_header_features",
]
sources = [
"include/cppgc/allocation.h",
"include/cppgc/common.h",
"include/cppgc/cross-thread-persistent.h",
"include/cppgc/custom-space.h",
"include/cppgc/default-platform.h",
"include/cppgc/explicit-management.h",
"include/cppgc/garbage-collected.h",
"include/cppgc/heap-consistency.h",
"include/cppgc/heap-handle.h",
"include/cppgc/heap-state.h",
"include/cppgc/heap-statistics.h",
"include/cppgc/heap.h",
"include/cppgc/internal/api-constants.h",
"include/cppgc/internal/atomic-entry-flag.h",
"include/cppgc/internal/base-page-handle.h",
"include/cppgc/internal/compiler-specific.h",
"include/cppgc/internal/conditional-stack-allocated.h",
"include/cppgc/internal/finalizer-trait.h",
"include/cppgc/internal/gc-info.h",
"include/cppgc/internal/member-storage.h",
"include/cppgc/internal/name-trait.h",
"include/cppgc/internal/persistent-node.h",
"include/cppgc/internal/pointer-policies.h",
"include/cppgc/internal/write-barrier.h",
"include/cppgc/liveness-broker.h",
"include/cppgc/macros.h",
"include/cppgc/member.h",
"include/cppgc/name-provider.h",
"include/cppgc/object-size-trait.h",
"include/cppgc/persistent.h",
"include/cppgc/platform.h",
"include/cppgc/prefinalizer.h",
"include/cppgc/process-heap-statistics.h",
"include/cppgc/sentinel-pointer.h",
"include/cppgc/source-location.h",
"include/cppgc/tagged-member.h",
# TODO(v8:11952): Remove the testing header here once depending on both,
# //v8:v8 and //v8:v8_for_testing does not result in ODR violations.
"include/cppgc/testing.h",
"include/cppgc/trace-trait.h",
"include/cppgc/type-traits.h",
"include/cppgc/visitor.h",
]
if (cppgc_enable_caged_heap) {
sources += [ "include/cppgc/internal/caged-heap-local-data.h" ]
sources += [ "include/cppgc/internal/caged-heap.h" ]
}
deps = [
":v8_libbase",
":v8_libplatform",
]
if (current_os == "zos" && is_component_build) {
deps += [ ":zoslib" ]
}
public_deps = [ ":v8_config_headers" ]
}
v8_source_set("cppgc_base") {
visibility = [ ":*" ]
sources = [
"src/heap/cppgc/allocation.cc",
"src/heap/cppgc/compaction-worklists.cc",
"src/heap/cppgc/compaction-worklists.h",
"src/heap/cppgc/compactor.cc",
"src/heap/cppgc/compactor.h",
"src/heap/cppgc/concurrent-marker.cc",
"src/heap/cppgc/concurrent-marker.h",
"src/heap/cppgc/explicit-management.cc",
"src/heap/cppgc/free-list.cc",
"src/heap/cppgc/free-list.h",
"src/heap/cppgc/garbage-collector.h",
"src/heap/cppgc/gc-info-table.cc",
"src/heap/cppgc/gc-info-table.h",
"src/heap/cppgc/gc-info.cc",
"src/heap/cppgc/gc-invoker.cc",
"src/heap/cppgc/gc-invoker.h",
"src/heap/cppgc/globals.h",
"src/heap/cppgc/heap-base.cc",
"src/heap/cppgc/heap-base.h",
"src/heap/cppgc/heap-config.h",
"src/heap/cppgc/heap-consistency.cc",
"src/heap/cppgc/heap-growing.cc",
"src/heap/cppgc/heap-growing.h",
"src/heap/cppgc/heap-object-header.cc",
"src/heap/cppgc/heap-object-header.h",
"src/heap/cppgc/heap-page.cc",
"src/heap/cppgc/heap-page.h",
"src/heap/cppgc/heap-space.cc",
"src/heap/cppgc/heap-space.h",
"src/heap/cppgc/heap-state.cc",
"src/heap/cppgc/heap-statistics-collector.cc",
"src/heap/cppgc/heap-statistics-collector.h",
"src/heap/cppgc/heap-visitor.h",
"src/heap/cppgc/heap.cc",
"src/heap/cppgc/heap.h",
"src/heap/cppgc/liveness-broker.cc",
"src/heap/cppgc/liveness-broker.h",
"src/heap/cppgc/logging.cc",
"src/heap/cppgc/marker.cc",
"src/heap/cppgc/marker.h",
"src/heap/cppgc/marking-state.cc",
"src/heap/cppgc/marking-state.h",
"src/heap/cppgc/marking-verifier.cc",
"src/heap/cppgc/marking-verifier.h",
"src/heap/cppgc/marking-visitor.cc",
"src/heap/cppgc/marking-visitor.h",
"src/heap/cppgc/marking-worklists.cc",
"src/heap/cppgc/marking-worklists.h",
"src/heap/cppgc/member-storage.cc",
"src/heap/cppgc/member-storage.h",
"src/heap/cppgc/memory.cc",
"src/heap/cppgc/memory.h",
"src/heap/cppgc/metric-recorder.h",
"src/heap/cppgc/name-trait.cc",
"src/heap/cppgc/object-allocator.cc",
"src/heap/cppgc/object-allocator.h",
"src/heap/cppgc/object-poisoner.h",
"src/heap/cppgc/object-size-trait.cc",
"src/heap/cppgc/object-start-bitmap.h",
"src/heap/cppgc/object-view.h",
"src/heap/cppgc/page-memory.cc",
"src/heap/cppgc/page-memory.h",
"src/heap/cppgc/persistent-node.cc",
"src/heap/cppgc/platform.cc",
"src/heap/cppgc/platform.h",
"src/heap/cppgc/pointer-policies.cc",
"src/heap/cppgc/prefinalizer-handler.cc",
"src/heap/cppgc/prefinalizer-handler.h",
"src/heap/cppgc/process-heap-statistics.cc",
"src/heap/cppgc/process-heap-statistics.h",
"src/heap/cppgc/process-heap.cc",
"src/heap/cppgc/process-heap.h",
"src/heap/cppgc/raw-heap.cc",
"src/heap/cppgc/raw-heap.h",
"src/heap/cppgc/remembered-set.cc",
"src/heap/cppgc/remembered-set.h",
"src/heap/cppgc/stats-collector.cc",
"src/heap/cppgc/stats-collector.h",
"src/heap/cppgc/sweeper.cc",
"src/heap/cppgc/sweeper.h",
"src/heap/cppgc/task-handle.h",
"src/heap/cppgc/unmarker.h",
# TODO(v8:11952): Remove the testing header here once depending on both,
# //v8:v8 and //v8:v8_for_testing does not result in ODR violations.
"src/heap/cppgc/testing.cc",
"src/heap/cppgc/trace-event.h",
"src/heap/cppgc/trace-trait.cc",
"src/heap/cppgc/virtual-memory.cc",
"src/heap/cppgc/virtual-memory.h",
"src/heap/cppgc/visitor.cc",
"src/heap/cppgc/visitor.h",
"src/heap/cppgc/write-barrier.cc",
"src/heap/cppgc/write-barrier.h",
]
if (cppgc_enable_caged_heap) {
sources += [
"src/heap/cppgc/caged-heap-local-data.cc",
"src/heap/cppgc/caged-heap.cc",
"src/heap/cppgc/caged-heap.h",
]
}
configs = [
":internal_config",
":cppgc_base_config",
]
public_deps = [
":cppgc_headers",
":v8_heap_base",
":v8_libbase",
":v8_libplatform",
]
if (cppgc_is_standalone && !v8_use_perfetto) {
sources += [ "src/tracing/trace-event-no-perfetto.h" ]
} else {
public_deps += [ ":v8_tracing" ]
}
if (v8_use_perfetto) {
sources += [
"src/tracing/perfetto-sdk.h",
"src/tracing/trace-categories.cc",
"src/tracing/trace-categories.h",
]
}
}
if (v8_check_header_includes) {
# This file will be generated by tools/generate-header-include-checks.py
# if the "check_v8_header_includes" gclient variable is set.
import("check-header-includes/sources.gni")
v8_source_set("check_headers") {
configs = [ ":internal_config" ]
sources = check_header_includes_sources
# Any rules that contain headers files should be added here either directly
# or indirectly by including something that has it transitively in its
# public_deps.
deps = [
":d8",
":mksnapshot",
":torque_base",
":torque_ls_base",
":v8_base_without_compiler",
":v8_bigint",
":v8_headers",
":v8_initializers",
":v8_internal_headers",
":v8_libbase",
":v8_maybe_icu",
":v8_maybe_temporal",
":v8_version",
":wee8",
"src/inspector",
"src/inspector:inspector_string_conversions",
]
}
}
###############################################################################
# Produce a single static library for embedders
#
if (v8_monolithic) {
assert(!is_component_build,
"Set `is_component_build = false` for v8_monolithic.")
# Using external startup data would produce separate files.
assert(!v8_use_external_startup_data,
"Set `v8_use_external_startup_data = false` for v8_monolithic.")
v8_static_library("v8_monolith") {
deps = [
":v8",
":v8_libbase",
":v8_libplatform",
"//build/win:default_exe_manifest",
]
configs = [ ":internal_config" ]
}
}
if (v8_enable_webassembly) {
v8_static_library("wee8") {
deps = [
":v8_base",
":v8_libbase",
":v8_libplatform",
":v8_shared_internal_headers",
":v8_snapshot",
"//build/win:default_exe_manifest",
]
if (v8_enable_vtunejit) {
deps += [ "third_party/vtune:v8_vtune" ]
}
# TODO: v8dll-main.cc equivalent for shared library builds
configs = [ ":internal_config" ]
sources = [
### gcmole(all) ###
"src/wasm/c-api.cc",
"src/wasm/c-api.h",
"third_party/wasm-api/wasm.h",
"third_party/wasm-api/wasm.hh",
]
}
}
###############################################################################
# Executables
#
if (current_toolchain == v8_generator_toolchain) {
v8_executable("bytecode_builtins_list_generator") {
visibility = [ ":*" ] # Only targets in this file can depend on this.
include_dirs = [ "." ]
sources = [
"src/builtins/generate-bytecodes-builtins-list.cc",
"src/interpreter/bytecode-operands.cc",
"src/interpreter/bytecode-operands.h",
"src/interpreter/bytecode-traits.h",
"src/interpreter/bytecodes.cc",
"src/interpreter/bytecodes.h",
]
configs = [ ":internal_config" ]
deps = [
":v8_libbase",
":v8_shared_internal_headers",
"//build/win:default_exe_manifest",
]
}
}
if (current_toolchain == v8_snapshot_toolchain) {
v8_executable("mksnapshot") {
sources = [
"src/snapshot/builtins-effects-dummy.cc",
"src/snapshot/embedded/embedded-empty.cc",
"src/snapshot/embedded/embedded-file-writer.cc",
"src/snapshot/embedded/embedded-file-writer.h",
"src/snapshot/embedded/platform-embedded-file-writer-aix.cc",
"src/snapshot/embedded/platform-embedded-file-writer-aix.h",
"src/snapshot/embedded/platform-embedded-file-writer-base.cc",
"src/snapshot/embedded/platform-embedded-file-writer-base.h",
"src/snapshot/embedded/platform-embedded-file-writer-generic.cc",
"src/snapshot/embedded/platform-embedded-file-writer-generic.h",
"src/snapshot/embedded/platform-embedded-file-writer-mac.cc",
"src/snapshot/embedded/platform-embedded-file-writer-mac.h",
"src/snapshot/embedded/platform-embedded-file-writer-win.cc",
"src/snapshot/embedded/platform-embedded-file-writer-win.h",
"src/snapshot/embedded/platform-embedded-file-writer-zos.cc",
"src/snapshot/embedded/platform-embedded-file-writer-zos.h",
"src/snapshot/mksnapshot.cc",
"src/snapshot/snapshot-empty.cc",
"src/snapshot/static-roots-gen.cc",
"src/snapshot/static-roots-gen.h",
]
configs = [
":internal_config",
":disable_icf",
]
deps = [
":v8_base_without_compiler",
":v8_compiler_for_mksnapshot",
":v8_init",
":v8_libbase",
":v8_libplatform",
":v8_maybe_icu",
":v8_maybe_temporal",
":v8_shared_internal_headers",
":v8_tracing",
"//build/win:default_exe_manifest",
]
}
# This config disables a link time optimization "ICF", which may merge
# different functions into one if the function signature and body of them are
# identical.
#
# ICF breaks 1:1 mappings of the external references for V8 snapshot, so we
# disable it while taking a V8 snapshot.
config("disable_icf") {
visibility = [ ":*" ] # Only targets in this file can depend on this.
if (is_win) {
ldflags = [ "/OPT:NOICF" ] # link.exe, but also lld-link.exe.
} else if (is_apple && !use_lld) {
ldflags = [ "-Wl,-no_deduplicate" ] # ld64.
} else if (use_lld) {
ldflags = [ "-Wl,--icf=none" ]
}
}
}
if (current_toolchain == v8_snapshot_toolchain) {
v8_executable("torque") {
visibility = [ ":*" ] # Only targets in this file can depend on this.
sources = [ "src/torque/torque.cc" ]
deps = [
":torque_base",
"//build/win:default_exe_manifest",
]
# The use of exceptions for Torque in violation of the Chromium style-guide
# is justified by the fact that it is only used from the non-essential
# language server and can be removed anytime if it causes problems.
configs = [
":internal_config",
"//build/config/compiler:exceptions",
"//build/config/compiler:rtti",
]
remove_configs = [
"//build/config/compiler:no_exceptions",
"//build/config/compiler:no_rtti",
]
}
}
v8_executable("torque-language-server") {
visibility = [ ":*" ] # Only targets in this file can depend on this.
sources = [ "src/torque/ls/torque-language-server.cc" ]
deps = [
":torque_base",
":torque_ls_base",
"//build/win:default_exe_manifest",
]
# The use of exceptions for Torque in violation of the Chromium style-guide
# is justified by the fact that it is only used from the non-essential
# language server and can be removed anytime if it causes problems.
configs = [
":internal_config",
"//build/config/compiler:exceptions",
"//build/config/compiler:rtti",
]
remove_configs = [
"//build/config/compiler:no_exceptions",
"//build/config/compiler:no_rtti",
]
}
if (v8_enable_i18n_support) {
if (current_toolchain == v8_generator_toolchain) {
v8_executable("gen-regexp-special-case") {
visibility = [ ":*" ] # Only targets in this file can depend on this.
sources = [
"src/regexp/gen-regexp-special-case.cc",
"src/regexp/special-case.h",
]
deps = [
":v8_libbase",
":v8_shared_internal_headers",
"//build/win:default_exe_manifest",
v8_icu_path,
]
configs = [ ":internal_config" ]
}
}
action("run_gen-regexp-special-case") {
visibility = [ ":*" ] # Only targets in this file can depend on this.
script = "tools/run.py"
deps = [ ":gen-regexp-special-case($v8_generator_toolchain)" ]
output_file = "$target_gen_dir/src/regexp/special-case.cc"
outputs = [ output_file ]
args = [
"./" + rebase_path(
get_label_info(
":gen-regexp-special-case($v8_generator_toolchain)",
"root_out_dir") + "/gen-regexp-special-case",
root_build_dir),
rebase_path(output_file, root_build_dir),
]
}
}
###############################################################################
# Public targets
#
want_v8_shell =
(current_toolchain == host_toolchain && v8_toolset_for_shell == "host") ||
(current_toolchain == v8_snapshot_toolchain &&
v8_toolset_for_shell == "host") ||
(current_toolchain != host_toolchain && v8_toolset_for_shell == "target")
group("gn_all") {
testonly = true
deps = [
":d8",
":v8_fuzzers",
":v8_hello_world",
":v8_sample_process",
"test:gn_all",
"tools:gn_all",
]
if (v8_custom_deps != "") {
# Custom dependency from directory under v8/custom_deps.
deps += [ v8_custom_deps ]
}
if (want_v8_shell) {
deps += [ ":v8_shell" ]
}
if (v8_check_header_includes) {
deps += [ ":check_headers" ]
}
}
group("v8_python_base") {
data = [ ".vpython3" ]
}
group("v8_clusterfuzz") {
testonly = true
deps = [
":d8",
":v8_simple_inspector_fuzzer",
"tools/clusterfuzz/trials:v8_clusterfuzz_resources",
]
if (v8_multi_arch_build) {
deps += [
":d8(//build/toolchain/linux:clang_x64)",
":d8(//build/toolchain/linux:clang_x64_v8_arm64)",
":d8(//build/toolchain/linux:clang_x86)",
":d8(//build/toolchain/linux:clang_x86_v8_arm)",
":d8(tools/clusterfuzz/foozzie/toolchain:clang_x64_fuzzer_experiments)",
]
}
}
# Targets we ensure work with gcc. The aim is to keep this list small to have
# a fast overall compile time.
group("v8_gcc_light") {
testonly = true
deps = [ ":d8" ]
}
group("v8_archive") {
testonly = true
deps = [ ":d8" ]
if (!is_win) {
# On windows, cctest doesn't link with v8_static_library.
deps += [ "test/cctest" ]
}
}
# TODO(dglazkov): Remove the "!build_with_chromium" condition once this clause
# is removed from Chromium.
if (is_fuchsia && !build_with_chromium) {
import("//build/config/fuchsia/generate_runner_scripts.gni")
import("//third_party/fuchsia-sdk/sdk/build/component.gni")
import("//third_party/fuchsia-sdk/sdk/build/package.gni")
fuchsia_component("d8_component") {
testonly = true
manifest = "gni/v8.cml"
data_deps = [ ":d8" ]
}
fuchsia_package("d8_pkg") {
testonly = true
package_name = "d8"
deps = [ ":d8_component" ]
}
fuchsia_package_installer("d8_fuchsia") {
testonly = true
package = ":d8_pkg"
package_name = "d8"
}
}
group("v8_fuzzers") {
testonly = true
data_deps = [
":v8_simple_inspector_fuzzer",
":v8_simple_json_fuzzer",
":v8_simple_parser_fuzzer",
":v8_simple_regexp_fuzzer",
]
if (v8_enable_webassembly) {
if (v8_wasm_random_fuzzers) {
data_deps += [
":v8_simple_wasm_compile_fuzzer",
":v8_simple_wasm_compile_revec_fuzzer",
":v8_simple_wasm_compile_simd_fuzzer",
":v8_simple_wasm_init_expr_fuzzer",
]
if (!v8_disable_write_barriers) {
data_deps += [
":v8_simple_wasm_compile_all_fuzzer",
":v8_simple_wasm_compile_wasmgc_fuzzer",
":v8_simple_wasm_deopt_fuzzer",
]
}
}
data_deps += [
":v8_simple_multi_return_fuzzer",
":v8_simple_wasm_async_fuzzer",
":v8_simple_wasm_code_fuzzer",
":v8_simple_wasm_module_fuzzer",
":v8_simple_wasm_streaming_fuzzer",
]
if (v8_enable_drumbrake) {
data_deps += [
":v8_simple_wasm_fast_interpreter_fuzzer",
":v8_simple_wasm_interpreter_all_fuzzer",
":v8_simple_wasm_interpreter_all_multiple_modules_fuzzer",
":v8_simple_wasm_interpreter_base_fuzzer",
":v8_simple_wasm_interpreter_code_fuzzer",
":v8_simple_wasm_interpreter_diff_fuzzer",
":v8_simple_wasm_interpreter_init_expr_fuzzer",
":v8_simple_wasm_interpreter_simd_fuzzer",
":v8_simple_wasmgc_interpreter_fuzzer",
]
}
}
}
if (is_component_build) {
v8_component("v8") {
sources = [ "src/utils/v8dll-main.cc" ]
public_deps = [
":v8_base",
":v8_snapshot",
]
configs = [ ":internal_config" ]
v8_add_configs += [ "//build/config/compiler:thinlto_optimize_max" ]
v8_remove_configs += [ "//build/config/compiler:thinlto_optimize_default" ]
public_configs = [ ":external_config" ]
}
v8_component("v8_for_testing") {
testonly = true
sources = [ "src/utils/v8dll-main.cc" ]
public_deps = [
":torque_base",
":torque_ls_base",
":v8_base",
":v8_headers",
":v8_snapshot",
]
if (v8_enable_turbofan) {
# For cctest/test-serialize.
public_deps += [ ":v8_initializers" ]
}
configs = [ ":internal_config" ]
public_configs = [ ":external_config" ]
}
v8_component("cppgc") {
public_deps = [ ":cppgc_base" ]
if (!cppgc_is_standalone) {
deps = [ ":v8" ]
}
configs = []
public_configs = [ ":external_config" ]
}
if (cppgc_is_standalone) {
v8_component("cppgc_for_testing") {
testonly = true
public_deps = [ ":cppgc_base" ]
configs = []
public_configs = [ ":external_config" ]
}
}
v8_component("v8_heap_base_for_testing") {
testonly = true
public_deps = [ ":v8_heap_base" ]
configs = []
public_configs = [ ":external_config" ]
}
} else {
group("v8") {
public_deps = [
":v8_base",
":v8_snapshot",
]
public_configs = [ ":external_config" ]
}
group("v8_for_testing") {
testonly = true
public_deps = [
":torque_base",
":torque_ls_base",
":v8_base",
":v8_snapshot",
]
if (v8_enable_turbofan) {
# For cctest/test-serialize.
public_deps += [ ":v8_initializers" ]
}
public_configs = [ ":external_config" ]
}
group("cppgc") {
public_deps = [ ":cppgc_base" ]
if (!cppgc_is_standalone) {
deps = [ ":v8" ]
}
public_configs = [ ":external_config" ]
}
if (cppgc_is_standalone) {
group("cppgc_for_testing") {
testonly = true
public_deps = [ ":cppgc_base" ]
public_configs = [ ":external_config" ]
}
}
group("v8_heap_base_for_testing") {
testonly = true
public_deps = [ ":v8_heap_base" ]
public_configs = [ ":external_config" ]
}
}
v8_executable("d8") {
sources = [
"src/d8/async-hooks-wrapper.cc",
"src/d8/async-hooks-wrapper.h",
"src/d8/d8-console.cc",
"src/d8/d8-console.h",
"src/d8/d8-js.cc",
"src/d8/d8-platforms.cc",
"src/d8/d8-platforms.h",
"src/d8/d8-test.cc",
"src/d8/d8.cc",
"src/d8/d8.h",
"src/d8/hardware-watchpoints.cc",
"src/d8/hardware-watchpoints.h",
]
configs = [
# Note: don't use :internal_config here because this target will get
# the :external_config applied to it by virtue of depending on :v8, and
# you can't have both applied to the same target.
":internal_config_base",
":v8_tracing_config",
]
v8_add_configs += [ "//build/config/compiler:thinlto_optimize_max" ]
v8_remove_configs += [ "//build/config/compiler:thinlto_optimize_default" ]
deps = [
":v8",
":v8_libbase",
":v8_libplatform",
":v8_tracing",
"//build/win:default_exe_manifest",
"//third_party/simdutf",
]
if (is_posix || is_fuchsia) {
sources += [ "src/d8/d8-posix.cc" ]
} else if (is_win) {
sources += [ "src/d8/d8-windows.cc" ]
}
if (v8_correctness_fuzzer) {
deps += [ "tools/clusterfuzz/foozzie:v8_correctness_fuzzer_resources" ]
}
defines = []
if (v8_enable_vtunejit) {
deps += [ "third_party/vtune:v8_vtune" ]
}
if (current_os == "zos" && is_component_build) {
deps += [ ":zoslib" ]
}
# TODO(crbug.com/40031409): Fix code that adds exit-time destructors and
# enable the diagnostic by removing this line.
configs += [ "//build/config/compiler:no_exit_time_destructors" ]
}
v8_executable("v8_hello_world") {
sources = [ "samples/hello-world.cc" ]
configs = [
# Note: don't use :internal_config here because this target will get
# the :external_config applied to it by virtue of depending on :v8, and
# you can't have both applied to the same target.
":internal_config_base",
]
deps = [
":v8",
":v8_libbase",
":v8_libplatform",
"//build/win:default_exe_manifest",
]
# Need to workaround a link error when using devtoolset
# https://bugzilla.redhat.com/show_bug.cgi?id=2268188
if ((v8_current_cpu == "ppc64" || v8_current_cpu == "s390x") && is_linux &&
!is_clang) {
libs = [ "stdc++" ]
}
}
v8_executable("v8_sample_process") {
sources = [ "samples/process.cc" ]
configs = [
# Note: don't use :internal_config here because this target will get
# the :external_config applied to it by virtue of depending on :v8, and
# you can't have both applied to the same target.
":internal_config_base",
]
deps = [
":v8",
":v8_libbase",
":v8_libplatform",
"//build/win:default_exe_manifest",
]
if (current_os == "zos" && is_component_build) {
deps += [ ":zoslib" ]
}
# TODO(crbug.com/40031409): Fix code that adds exit-time destructors and
# enable the diagnostic by removing this line.
configs += [ "//build/config/compiler:no_exit_time_destructors" ]
}
if (want_v8_shell) {
v8_executable("v8_shell") {
sources = [ "samples/shell.cc" ]
configs = [
# Note: don't use :internal_config here because this target will get
# the :external_config applied to it by virtue of depending on :v8, and
# you can't have both applied to the same target.
":internal_config_base",
]
deps = [
":v8",
":v8_libbase",
":v8_libplatform",
"//build/win:default_exe_manifest",
]
if (current_os == "zos" && is_component_build) {
deps += [ ":zoslib" ]
}
}
}
v8_executable("cppgc_hello_world") {
sources = [ "samples/cppgc/hello-world.cc" ]
if (v8_current_cpu == "riscv64" || v8_current_cpu == "riscv32") {
if (!is_clang) {
libs = [ "atomic" ]
}
}
configs = [
# Note: don't use :internal_config here because this target will get
# the :external_config applied to it by virtue of depending on :cppgc, and
# you can't have both applied to the same target.
":internal_config_base",
":cppgc_base_config",
]
deps = [ ":cppgc" ]
if (!cppgc_is_standalone) {
deps += [
":v8",
"//build/win:default_exe_manifest",
]
}
}
template("v8_fuzzer") {
fuzzer_name = target_name
v8_source_set(fuzzer_name) {
testonly = true
sources = invoker.sources
deps = [ ":fuzzer_support" ]
if (defined(invoker.deps)) {
deps += invoker.deps
}
configs = [
":external_config",
":internal_config_base",
]
# TODO(crbug.com/40031409): Fix code that adds exit-time destructors and
# enable the diagnostic by removing this line.
configs += [ "//build/config/compiler:no_exit_time_destructors" ]
}
v8_executable("v8_simple_${fuzzer_name}") {
testonly = true
deps = [
":${fuzzer_name}",
"//build/win:default_exe_manifest",
]
sources = [ "test/fuzzer/fuzzer.cc" ]
configs = [ ":external_config" ]
}
}
v8_fuzzer("json_fuzzer") {
sources = [ "test/fuzzer/json.cc" ]
}
v8_fuzzer("parser_fuzzer") {
sources = [ "test/fuzzer/parser.cc" ]
}
v8_fuzzer("regexp_fuzzer") {
sources = [ "test/fuzzer/regexp.cc" ]
}
if (v8_enable_webassembly) {
v8_fuzzer("multi_return_fuzzer") {
sources = [ "test/fuzzer/multi-return.cc" ]
}
if (v8_enable_drumbrake) {
v8_source_set("lib_wasm_interpreter_fuzzer_common") {
testonly = true
sources = [
"test/fuzzer/wasm/interpreter/interpreter-fuzzer-common.cc",
"test/fuzzer/wasm/interpreter/interpreter-fuzzer-common.h",
]
deps = [
":fuzzer_support",
":v8_internal_headers",
]
public_deps = [ ":wasm_test_common" ]
configs = [
":external_config",
":internal_config_base",
]
}
v8_fuzzer("wasm_fast_interpreter_fuzzer") {
sources = [ "test/fuzzer/wasm/interpreter/fast-interpreter.cc" ]
deps = [ ":lib_wasm_interpreter_fuzzer_common" ]
}
v8_fuzzer("wasm_interpreter_diff_fuzzer") {
sources = [ "test/fuzzer/wasm/interpreter/interpreter-diff.cc" ]
deps = [ ":lib_wasm_interpreter_fuzzer_common" ]
}
v8_fuzzer("wasmgc_interpreter_fuzzer") {
sources = [ "test/fuzzer/wasm/interpreter/interpreter-wasmgc.cc" ]
deps = [ ":lib_wasm_interpreter_fuzzer_common" ]
}
v8_fuzzer("wasm_interpreter_init_expr_fuzzer") {
sources = [ "test/fuzzer/wasm/interpreter/interpreter-init-expr.cc" ]
deps = [ ":lib_wasm_interpreter_fuzzer_common" ]
}
v8_fuzzer("wasm_interpreter_simd_fuzzer") {
sources = [ "test/fuzzer/wasm/interpreter/interpreter-simd.cc" ]
deps = [ ":lib_wasm_interpreter_fuzzer_common" ]
}
v8_fuzzer("wasm_interpreter_all_fuzzer") {
sources = [ "test/fuzzer/wasm/interpreter/interpreter-all.cc" ]
deps = [ ":lib_wasm_interpreter_fuzzer_common" ]
}
v8_fuzzer("wasm_interpreter_all_multiple_modules_fuzzer") {
sources =
[ "test/fuzzer/wasm/interpreter/interpreter-all-multiple-modules.cc" ]
deps = [ ":lib_wasm_interpreter_fuzzer_common" ]
}
v8_fuzzer("wasm_interpreter_base_fuzzer") {
sources = [ "test/fuzzer/wasm/interpreter/interpreter-base.cc" ]
deps = [ ":lib_wasm_interpreter_fuzzer_common" ]
}
v8_fuzzer("wasm_interpreter_code_fuzzer") {
sources = [ "test/fuzzer/wasm/interpreter/interpreter-code.cc" ]
deps = [ ":lib_wasm_interpreter_fuzzer_common" ]
}
}
v8_source_set("wasm_test_common") {
testonly = true
sources = [
"test/common/c-signature.h",
"test/common/flag-utils.h",
"test/common/value-helper.h",
"test/common/wasm/flag-utils.h",
"test/common/wasm/fuzzer-common.cc",
"test/common/wasm/fuzzer-common.h",
"test/common/wasm/wasm-macro-gen.h",
"test/common/wasm/wasm-module-runner.cc",
"test/common/wasm/wasm-module-runner.h",
"test/common/wasm/wasm-run-utils.cc",
"test/common/wasm/wasm-run-utils.h",
"tools/wasm/mjsunit-module-disassembler-impl.h",
]
deps = [
":fuzzer_support",
":generate_bytecode_builtins_list",
":run_torque",
":v8_internal_headers",
":v8_libbase",
":v8_maybe_temporal",
":v8_shared_internal_headers",
":v8_tracing",
]
if (v8_enable_experimental_tq_to_tsa) {
deps += [ ":run_torque_to_tsa" ]
}
public_deps = [
":v8_abseil",
":v8_maybe_icu",
]
configs = [
":external_config",
":internal_config_base",
]
}
template("v8_wasm_fuzzer") {
forward_variables_from(invoker, "*")
v8_fuzzer(target_name) {
deps = [ ":wasm_test_common" ]
}
}
v8_wasm_fuzzer("wasm_module_fuzzer") {
sources = [ "test/fuzzer/wasm/module.cc" ]
}
v8_wasm_fuzzer("wasm_async_fuzzer") {
sources = [ "test/fuzzer/wasm/async.cc" ]
}
v8_wasm_fuzzer("wasm_code_fuzzer") {
sources = [
"test/common/wasm/test-signatures.h",
"test/fuzzer/wasm/code.cc",
]
}
v8_wasm_fuzzer("wasm_streaming_fuzzer") {
sources = [ "test/fuzzer/wasm/streaming.cc" ]
}
if (v8_wasm_random_fuzzers) {
v8_wasm_fuzzer("wasm_compile_fuzzer") {
sources = [
"test/common/wasm/test-signatures.h",
"test/fuzzer/wasm/compile.cc",
]
}
v8_wasm_fuzzer("wasm_compile_simd_fuzzer") {
sources = [
"test/common/wasm/test-signatures.h",
"test/fuzzer/wasm/compile-simd.cc",
]
}
v8_wasm_fuzzer("wasm_compile_revec_fuzzer") {
sources = [
"test/common/wasm/test-signatures.h",
"test/fuzzer/wasm/compile-revec.cc",
]
}
v8_wasm_fuzzer("wasm_init_expr_fuzzer") {
sources = [ "test/fuzzer/wasm/init-expr.cc" ]
}
if (!v8_disable_write_barriers) {
v8_wasm_fuzzer("wasm_compile_all_fuzzer") {
sources = [
"test/common/wasm/test-signatures.h",
"test/fuzzer/wasm/compile-all.cc",
]
}
v8_wasm_fuzzer("wasm_compile_wasmgc_fuzzer") {
sources = [
"test/common/wasm/test-signatures.h",
"test/fuzzer/wasm/compile-wasmgc.cc",
]
}
v8_wasm_fuzzer("wasm_deopt_fuzzer") {
sources = [ "test/fuzzer/wasm/deopt.cc" ]
}
}
} # v8_wasm_random_fuzzers
}
v8_fuzzer("inspector_fuzzer") {
sources = [ "test/fuzzer/inspector-fuzzer.cc" ]
deps = [ "test/inspector:inspector_test" ]
}
# Target to build all generated .cc files.
group("v8_generated_cc_files") {
testonly = true
deps = [
":generate_bytecode_builtins_list",
":run_torque",
"src/inspector:v8_generated_cc_files",
]
if (v8_enable_experimental_tq_to_tsa) {
deps += [ ":run_torque_to_tsa" ]
}
}
# Protobuf targets, used only when building outside of chromium.
if (!build_with_chromium && v8_use_perfetto) {
v8_component("v8_libperfetto") {
configs = [ ":v8_tracing_config" ]
public_configs = [ "//third_party/perfetto/gn:public_config" ]
deps = [
"//third_party/perfetto/src/trace_processor:storage_minimal",
"//third_party/perfetto/src/tracing/core",
# TODO(skyostil): Support non-POSIX platforms.
"//third_party/perfetto/protos/perfetto/trace/track_event:zero",
"//third_party/perfetto/src/tracing:in_process_backend",
"//third_party/perfetto/src/tracing:platform_impl",
]
public_deps = [
"//third_party/perfetto/include/perfetto/trace_processor",
"//third_party/perfetto/protos/perfetto/config:cpp",
"//third_party/perfetto/protos/perfetto/trace/chrome:zero",
"//third_party/perfetto/src/trace_processor:export_json",
"//third_party/perfetto/src/tracing:client_api",
]
}
} # if (!build_with_chromium && v8_use_perfetto)
# GN evaluates each .gn file once per toolchain, so restricting to default
# toolchain will ensure write_file() is called only once.
if (current_toolchain == default_toolchain) {
import("//build/gn_logs.gni")
# Write debug logs to gn_logs.txt.
_lines = [
"Generated during 'gn gen' by //BUILD.gn.",
"",
] + build_gn_logs
write_file("$root_build_dir/gn_logs.txt", _lines)
}