# Copyright 2021 The Cobalt Authors. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

static_library("debug") {
  has_pedantic_warnings = true
  sources = [
    "backend/agent_base.cc",
    "backend/agent_base.h",
    "backend/cobalt_agent.cc",
    "backend/cobalt_agent.h",
    "backend/command_map.h",
    "backend/css_agent.cc",
    "backend/css_agent.h",
    "backend/debug_backend.cc",
    "backend/debug_backend.h",
    "backend/debug_dispatcher.cc",
    "backend/debug_dispatcher.h",
    "backend/debug_module.cc",
    "backend/debug_module.h",
    "backend/debug_script_runner.cc",
    "backend/debug_script_runner.h",
    "backend/debugger_hooks_impl.cc",
    "backend/debugger_hooks_impl.h",
    "backend/dom_agent.cc",
    "backend/dom_agent.h",
    "backend/log_agent.cc",
    "backend/log_agent.h",
    "backend/overlay_agent.cc",
    "backend/overlay_agent.h",
    "backend/page_agent.cc",
    "backend/page_agent.h",
    "backend/render_layer.cc",
    "backend/render_layer.h",
    "backend/render_overlay.cc",
    "backend/render_overlay.h",
    "backend/script_debugger_agent.cc",
    "backend/script_debugger_agent.h",
    "backend/tracing_controller.cc",
    "backend/tracing_controller.h",
    "command.h",
    "console/debug_hub.cc",
    "console/debug_hub.h",
    "console/debugger_event_target.cc",
    "console/debugger_event_target.h",
    "debug_client.cc",
    "debug_client.h",
    "json_object.cc",
    "json_object.h",
    "remote/debug_web_server.cc",
    "remote/debug_web_server.h",
  ]
  deps = [
    ":console_command_manager",
    "//cobalt/base",
    "//cobalt/browser:generated_types",
    "//cobalt/cssom",
    "//cobalt/debug/backend/content:copy_backend_web_files",
    "//cobalt/debug/console/content:copy_console_web_files",
    "//cobalt/debug/remote/content:copy_remote_web_files",
    "//cobalt/dom",
    "//cobalt/layout",
    "//cobalt/math",
    "//cobalt/render_tree",
    "//cobalt/script",
    "//cobalt/speech",
    "//cobalt/web",
    "//net",
    "//net:http_server",
    "//starboard:starboard_group",
    "//third_party/devtools:devtools_frontend_resources",
  ]
}

# Anything that implements a console command can depend on this without
# depending on the whole debug module.
static_library("console_command_manager") {
  # Everything is conditional so implementers of commands can depend on
  # this unconditionally.
  if (!is_gold) {
    sources = [
      "console/command_manager.cc",
      "console/command_manager.h",
    ]
    deps = [
      "//cobalt/base",
      "//starboard:starboard_headers_only",
    ]
  }
}
