# Copyright 2019 the V8 project 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("../../gni/snapshot_toolchain.gni")
import("../../gni/v8.gni")

config("internal_config") {
  visibility = [ ":*" ]  # Only targets in this file can depend on this.

  if (is_component_build) {
    defines = [ "BUILDING_V8_DEBUG_HELPER" ]
  }

  configs = [ "../..:v8_tracing_config" ]

  include_dirs = [
    ".",
    "../..",
    "$target_gen_dir",
    "$target_gen_dir/../..",
  ]
}

# This config should be applied to code using v8_debug_helper.
config("external_config") {
  if (is_component_build) {
    defines = [ "USING_V8_DEBUG_HELPER" ]
  }

  configs = [ "../..:external_config" ]

  include_dirs = [ "." ]
}

action("run_mkgrokdump") {
  testonly = true
  visibility = [ ":*" ]

  deps = [
    "../..:run_mksnapshot_default",
    "../../test/mkgrokdump:mkgrokdump($v8_generator_toolchain)",
  ]

  script = "../run.py"

  outputs = [ "$target_gen_dir/v8heapconst.py" ]

  args = [
    "./" + rebase_path(
            get_label_info(
                    "../../test/mkgrokdump:mkgrokdump($v8_generator_toolchain)",
                    "root_out_dir") + "/mkgrokdump",
            root_build_dir),
    "--outfile",
    rebase_path("$target_gen_dir/v8heapconst.py", root_build_dir),
  ]
}

action("gen_heap_constants") {
  testonly = true
  visibility = [ ":*" ]
  deps = [ ":run_mkgrokdump" ]
  script = "gen-heap-constants.py"
  outputs = [ "$target_gen_dir/heap-constants-gen.cc" ]
  args = [
    rebase_path(target_gen_dir, root_build_dir),
    rebase_path("$target_gen_dir/heap-constants-gen.cc", root_build_dir),
  ]
}

v8_component("v8_debug_helper") {
  testonly = true

  public = [ "debug-helper.h" ]

  sources = [
    "$target_gen_dir/../../torque-generated/class-debug-readers.cc",
    "$target_gen_dir/../../torque-generated/class-debug-readers.h",
    "$target_gen_dir/../../torque-generated/instance-types.h",
    "$target_gen_dir/heap-constants-gen.cc",
    "compiler-types.cc",
    "debug-helper-internal.cc",
    "debug-helper-internal.h",
    "debug-helper.h",
    "get-object-properties.cc",
    "heap-constants.cc",
    "heap-constants.h",
    "list-object-classes.cc",
  ]

  deps = [
    ":gen_heap_constants",
    "../..:generate_bytecode_builtins_list",
    "../..:run_torque",
    "../..:v8_headers",
    "../..:v8_libbase",
  ]

  configs = [ ":internal_config" ]
  if (v8_enable_i18n_support) {
    configs += [ "//third_party/icu:icu_config" ]
  }

  remove_configs = [ "//build/config/compiler:no_rtti" ]
  configs += [ "//build/config/compiler:rtti" ]

  public_configs = [ ":external_config" ]
}
