chromium/content/browser/devtools/BUILD.gn

# Copyright 2014 The Chromium Authors
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.

import("//build/config/compiler/pgo/pgo.gni")
import("//build/config/devtools.gni")
import("//components/viz/common/debugger/viz_debugger.gni")
import("//device/bluetooth/emulation/buildflags.gni")
import("//third_party/inspector_protocol/inspector_protocol.gni")
import("//third_party/protobuf/proto_library.gni")
import("//tools/grit/grit_rule.gni")

# Android and iOS don't support DevTools front-end.
if (!is_android && !is_ios) {
  source_set("devtools_resources_extern") {
    sources = [ "devtools_resources.cc" ]

    # This is to remove unnecessary dependency from compiles of targets depends
    # on this target to grit action.
    public = []

    deps = [ ":devtools_resources" ]
  }
  grit("devtools_resources") {
    source = "$root_gen_dir/$devtools_grd_location"

    # Required because the .grd is generated.
    enable_input_discovery_for_gn_analyze = false
    use_brotli = true

    outputs = [
      "grit/devtools_resources.h",
      "devtools_resources.pak",
      "grit/devtools_resources_map.cc",
      "grit/devtools_resources_map.h",
    ]

    grit_flags = [
      "-E",
      "protocol_file=" + rebase_path(
              "$root_gen_dir/third_party/blink/public/devtools_protocol/protocol.json",
              root_build_dir),
    ]

    deps = [
      "//third_party/blink/public/devtools_protocol:protocol_version",

      # This is the action that generates out .grd input file.
      "//third_party/blink/public:blink_generate_devtools_grd",
    ]
  }
}

# Here we concatenate the viz_debugger.pdl and native_profiling.pdl
# into our browser protocol. This technique is nearly identical to what is
# done for cros_protocol.pdl in chrome/browser/devtools
_concatenated_protocol_path =
    "$root_gen_dir/content/browser/devtools/protocol.json"
action("concatenate_protocols") {
  script = "//third_party/inspector_protocol/concatenate_protocols.py"
  deps = [ "//third_party/blink/public/devtools_protocol:protocol_version" ]

  _blink_protocol_path =
      "$root_gen_dir/third_party/blink/public/devtools_protocol/protocol.json"
  inputs = [ _blink_protocol_path ]
  output_file = _concatenated_protocol_path
  outputs = [ output_file ]

  args = [ rebase_path(_blink_protocol_path, root_build_dir) ]
  if (use_viz_debugger) {
    _visual_debugger_pdl = "//components/viz/common/debugger/viz_debugger.pdl"
    inputs += [ _visual_debugger_pdl ]
    args += [ rebase_path(_visual_debugger_pdl, root_build_dir) ]
  }

  if (use_clang_profiling_inside_sandbox && chrome_pgo_phase == 1) {
    native_profiling_pdl = "//content/browser/native_profiling.pdl"
    inputs += [ native_profiling_pdl ]
    args += [ rebase_path(native_profiling_pdl, root_build_dir) ]
  }

  args += [ rebase_path(output_file, root_build_dir) ]
}

inspector_protocol_generate("protocol_sources") {
  visibility = [ "//content/browser" ]
  deps = [ ":concatenate_protocols" ]
  inspector_protocol_dir = "//third_party/inspector_protocol"
  out_dir = target_gen_dir
  config_file = "protocol_config.json"
  protocol_path = rebase_path(_concatenated_protocol_path, root_build_dir)
  config_values = [ "protocol.path=$protocol_path" ]
  use_embedder_types = true

  inputs = [
    _concatenated_protocol_path,
    config_file,
  ]

  # These are relative to $target_gen_dir.
  outputs = [
    "protocol/audits.cc",
    "protocol/audits.h",
    "protocol/background_service.cc",
    "protocol/background_service.h",
    "protocol/browser.cc",
    "protocol/browser.h",
    "protocol/device_access.cc",
    "protocol/device_access.h",
    "protocol/device_orientation.cc",
    "protocol/device_orientation.h",
    "protocol/dom.cc",
    "protocol/dom.h",
    "protocol/emulation.cc",
    "protocol/emulation.h",
    "protocol/fed_cm.cc",
    "protocol/fed_cm.h",
    "protocol/fetch.cc",
    "protocol/fetch.h",
    "protocol/forward.h",
    "protocol/input.cc",
    "protocol/input.h",
    "protocol/inspector.cc",
    "protocol/inspector.h",
    "protocol/io.cc",
    "protocol/io.h",
    "protocol/log.cc",
    "protocol/log.h",
    "protocol/memory.cc",
    "protocol/memory.h",
    "protocol/network.cc",
    "protocol/network.h",
    "protocol/overlay.cc",
    "protocol/overlay.h",
    "protocol/page.cc",
    "protocol/page.h",
    "protocol/preload.cc",
    "protocol/preload.h",
    "protocol/protocol.h",
    "protocol/runtime.cc",
    "protocol/runtime.h",
    "protocol/schema.cc",
    "protocol/schema.h",
    "protocol/security.cc",
    "protocol/security.h",
    "protocol/service_worker.cc",
    "protocol/service_worker.h",
    "protocol/storage.cc",
    "protocol/storage.h",
    "protocol/system_info.cc",
    "protocol/system_info.h",
    "protocol/target.cc",
    "protocol/target.h",
    "protocol/tethering.cc",
    "protocol/tethering.h",
    "protocol/tracing.cc",
    "protocol/tracing.h",
    "protocol/web_authn.cc",
    "protocol/web_authn.h",
  ]

  if (use_viz_debugger) {
    outputs += [
      "protocol/visual_debugger.cc",
      "protocol/visual_debugger.h",
    ]
  }

  if (chrome_pgo_phase == 1) {
    outputs += [
      "protocol/native_profiling.cc",
      "protocol/native_profiling.h",
    ]
  }

  if (enable_bluetooth_emulation) {
    outputs += [
      "protocol/bluetooth_emulation.cc",
      "protocol/bluetooth_emulation.h",
    ]
  }
}

proto_library("devtools_background_services_proto") {
  sources = [ "devtools_background_services.proto" ]
}