# Copyright 2017 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. # Targets in ths file are to take a V8 context snapshot on build time. # Created V8 context snapshot is used in # third_party/WebKit/Source/bindings/core/v8/V8ContextSnapshot.{cpp|h}. # to speedup creating a V8 context and setting up around it. import("//tools/v8_context_snapshot/v8_context_snapshot.gni") import("//build/config/c++/c++.gni") import("//build/config/compiler/compiler.gni") import("//v8/snapshot_toolchain.gni") if (is_android) { import("//build/config/android/rules.gni") } if (is_android) { android_assets("v8_context_snapshot_assets") { deps = [ ":v8_context_snapshot", ] sources = [ "$root_out_dir/v8_context_snapshot.bin", ] disable_compression = true } } group("v8_context_snapshot") { if (use_v8_context_snapshot) { public_deps = [ ":generate_v8_context_snapshot", ] } } config("use_v8_context_snapshot") { if (use_v8_context_snapshot) { defines = [ "USE_V8_CONTEXT_SNAPSHOT" ] } } if (use_v8_context_snapshot) { action("generate_v8_context_snapshot") { script = "//build/gn_run_binary.py" output_file = "$root_out_dir/v8_context_snapshot.bin" output_path = rebase_path(output_file, root_build_dir) args = [ "./" + rebase_path( get_label_info( ":v8_context_snapshot_generator($v8_snapshot_toolchain)", "root_out_dir") + "/v8_context_snapshot_generator", root_build_dir), "--output_file=$output_path", ] outputs = [ output_file, ] deps = [ ":v8_context_snapshot_generator($v8_snapshot_toolchain)", ] } # 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 (use_gold || use_lld) { ldflags = [ "-Wl,--icf=none" ] } } executable("v8_context_snapshot_generator") { sources = [ "v8_context_snapshot_generator.cc", ] deps = [ "//gin:gin", "//mojo/edk/system:system", "//third_party/WebKit/public:blink", "//v8", ] if (is_linux && (is_component_build || using_sanitizer) && use_custom_libcxx) { deps += [ "//buildtools/third_party/libc++:libc++" ] } configs += [ "//v8:external_startup_data", ":disable_icf", ] } }