current commit
260504.15 · build: track PDL files as inputs in inspector GN build
import("../../node.gni")
import("$node_v8_path/gni/v8.gni")

# The actual configurations are put inside a template in unofficial.gni to
# prevent accidental edits from contributors.
template("inspector_gn_build") {
  group(target_name) {
    forward_variables_from(invoker, "*")
    deps = [
      ":node_protocol_generated_sources",
      ":v8_inspector_compress_protocol_json",
    ]
  }

  node_gen_dir = get_label_info("../..", "target_gen_dir")
  protocol_tool_path = "$node_inspector_protocol_path"

  gypi_values = exec_script(
      "../../tools/gypi_to_gn.py",
      [ rebase_path("node_inspector.gypi"),
        "--replace=<(SHARED_INTERMEDIATE_DIR)=$node_gen_dir",
        "--replace=<(protocol_tool_path)=$protocol_tool_path" ],
      "scope",
      [ "node_inspector.gypi" ])

  action("node_protocol_generated_sources") {
    script = "$protocol_tool_path/code_generator.py"

    deps = [ ":node_protocol_json" ]

    outputs = gypi_values.node_inspector_generated_sources
    inputs = gypi_values.node_protocol_files + gypi_values.node_pdl_files + [
      "node_protocol_config.json",
      "$node_gen_dir/src/node_protocol.json",
    ]

    args = [
      "--inspector_protocol_dir",
      rebase_path(protocol_tool_path, root_build_dir),
      "--jinja_dir",
      # jinja is in third_party.
      rebase_path("//third_party/", root_build_dir),
      "--output_base",
      rebase_path("$node_gen_dir/src", root_build_dir),
      "--config",
      rebase_path("node_protocol_config.json", root_build_dir),
    ]
  }

  action("v8_inspector_compress_protocol_json") {
    script = "../../tools/compress_json.py"
    deps = [ ":concatenate_protocols" ]
    inputs = [ "$target_gen_dir/concatenated_protocol.json" ]
    outputs = [ "$target_gen_dir/v8_inspector_protocol_json.h" ]
    args = rebase_path(inputs + outputs, root_build_dir)
  }

  action("concatenate_protocols") {
    script = "$protocol_tool_path/concatenate_protocols.py"
    deps = [ ":node_protocol_json" ]
    inputs = [
      "$node_gen_dir/src/js_protocol.json",
      "$node_gen_dir/src/node_protocol.json",
    ]
    outputs = [
      "$target_gen_dir/concatenated_protocol.json",
    ]
    args = rebase_path(inputs + outputs, root_build_dir)
  }

  action_foreach("node_protocol_json") {
    script = "$node_v8_path/third_party/inspector_protocol/convert_protocol_to_json.py"
    sources = [ "node_protocol.pdl", v8_inspector_js_protocol ]
    outputs = [ "$node_gen_dir/src/{{source_name_part}}.json" ]
    args = [ "{{source}}" ] + rebase_path(outputs, root_build_dir)
  }

  config("crdtp_config") {
    include_dirs = [ protocol_tool_path ]
  }

  static_library("crdtp") {
    public_configs = [ ":crdtp_config" ]
    sources = [
      "$protocol_tool_path/crdtp/cbor.cc",
      "$protocol_tool_path/crdtp/cbor.h",
      "$protocol_tool_path/crdtp/dispatch.cc",
      "$protocol_tool_path/crdtp/dispatch.h",
      "$protocol_tool_path/crdtp/error_support.cc",
      "$protocol_tool_path/crdtp/error_support.h",
      "$protocol_tool_path/crdtp/export.h",
      "$protocol_tool_path/crdtp/find_by_first.h",
      "$protocol_tool_path/crdtp/frontend_channel.h",
      "$protocol_tool_path/crdtp/glue.h",
      "$protocol_tool_path/crdtp/json.cc",
      "$protocol_tool_path/crdtp/json.h",
      "$protocol_tool_path/crdtp/parser_handler.h",
      "$protocol_tool_path/crdtp/protocol_core.cc",
      "$protocol_tool_path/crdtp/protocol_core.h",
      "$protocol_tool_path/crdtp/serializable.cc",
      "$protocol_tool_path/crdtp/serializable.h",
      "$protocol_tool_path/crdtp/span.cc",
      "$protocol_tool_path/crdtp/span.h",
      "$protocol_tool_path/crdtp/status.cc",
      "$protocol_tool_path/crdtp/status.h",
      "$protocol_tool_path/crdtp/json_platform.cc",
      "$protocol_tool_path/crdtp/json_platform.h",
    ]
  }
}