| # Copyright 2025 The Chromium Authors |
| # Use of this source code is governed by a BSD-style license that can be |
| # found in the LICENSE file. |
| |
| import("//tools/v8_context_snapshot/v8_context_snapshot.gni") |
| import("//v8/gni/snapshot_toolchain.gni") |
| |
| template("generate_code_cache") { |
| action(target_name) { |
| script = "//ui/webui/resources/tools/generate_code_cache.py" |
| |
| forward_variables_from(invoker, |
| [ |
| "visibility", |
| "in_folder", |
| "in_files", |
| "out_folder", |
| "out_manifest", |
| ]) |
| |
| # The generator runs on the build host. When cross-compiling, it is built |
| # in the V8 snapshot toolchain, like v8_context_snapshot_generator. |
| _generator_target = "//tools/code_cache_generator($v8_snapshot_toolchain)" |
| _generator_path = get_label_info(_generator_target, "root_out_dir") + |
| "/code_cache_generator" |
| deps = [ _generator_target ] |
| |
| # Without external startup data the snapshot is built into the generator, |
| # which would then carry the host toolchain's snapshot. |
| assert(v8_use_external_startup_data || |
| v8_snapshot_toolchain == current_toolchain, |
| "Cross-toolchain code cache generation needs external startup data") |
| inputs = [] |
| |
| # Pass the target's snapshot explicitly. The code cache embeds the |
| # snapshot's read-only checksum, and a cross-toolchain generator would |
| # otherwise load the snapshot next to itself. |
| snapshot_args = [] |
| if (v8_use_external_startup_data) { |
| if (use_v8_context_snapshot) { |
| deps += [ "//tools/v8_context_snapshot" ] |
| inputs += [ "$root_out_dir/$v8_context_snapshot_filename" ] |
| snapshot_args = [ |
| "--context_snapshot", |
| rebase_path("$root_out_dir/$v8_context_snapshot_filename", |
| root_build_dir), |
| ] |
| } |
| if (!use_v8_context_snapshot || include_both_v8_snapshots) { |
| deps += [ "//v8:run_mksnapshot_default" ] |
| inputs += [ "$root_out_dir/snapshot_blob.bin" ] |
| } |
| if (!use_v8_context_snapshot) { |
| snapshot_args = [ |
| "--snapshot_blob", |
| rebase_path("$root_out_dir/snapshot_blob.bin", root_build_dir), |
| ] |
| } |
| } |
| |
| if (defined(invoker.deps)) { |
| deps += invoker.deps |
| } |
| |
| # Filter .html.js files out of in_files to avoid attempting to generate |
| # code cache for templatized modules. |
| in_files_filtered = filter_exclude(in_files, [ "*.html.js" ]) |
| |
| outputs = [ out_manifest ] |
| foreach(f, in_files_filtered) { |
| extension = get_path_info(f, "extension") |
| assert(extension == "js") |
| inputs += [ "${in_folder}/${f}" ] |
| outputs += [ "${out_folder}/${f}.code_cache" ] |
| } |
| |
| args = [ |
| "--util_path", |
| rebase_path(_generator_path, root_build_dir), |
| "--in_folder", |
| rebase_path(in_folder, root_build_dir), |
| "--out_folder", |
| rebase_path(out_folder, root_build_dir), |
| "--out_manifest", |
| rebase_path(out_manifest, root_build_dir), |
| ] + snapshot_args + [ "--in_files" ] + in_files_filtered |
| } |
| } |