# Copyright 2018 The Fuchsia Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.

static_library("console") {
  sources = [
    "actions.cc",
    "actions.h",
    "analyze_memory.cc",
    "analyze_memory.h",
    "async_output_buffer.cc",
    "async_output_buffer.h",
    "command.cc",
    "command.h",
    "command_group.h",
    "command_line_options.cc",
    "command_line_options.h",
    "command_parser.cc",
    "command_parser.h",
    "command_utils.cc",
    "command_utils.h",
    "commands/verb_aspace.cc",
    "commands/verb_aspace.h",
    "commands/verb_attach.cc",
    "commands/verb_attach.h",
    "commands/verb_attach_job.cc",
    "commands/verb_attach_job.h",
    "commands/verb_auth.cc",
    "commands/verb_auth.h",
    "commands/verb_backtrace.cc",
    "commands/verb_backtrace.h",
    "commands/verb_break.cc",
    "commands/verb_break.h",
    "commands/verb_clear.cc",
    "commands/verb_clear.h",
    "commands/verb_cls.cc",
    "commands/verb_cls.h",
    "commands/verb_connect.cc",
    "commands/verb_connect.h",
    "commands/verb_continue.cc",
    "commands/verb_continue.h",
    "commands/verb_detach.cc",
    "commands/verb_detach.h",
    "commands/verb_disable.cc",
    "commands/verb_disable.h",
    "commands/verb_disassemble.cc",
    "commands/verb_disassemble.h",
    "commands/verb_disconnect.cc",
    "commands/verb_disconnect.h",
    "commands/verb_display.cc",
    "commands/verb_display.h",
    "commands/verb_down.cc",
    "commands/verb_down.h",
    "commands/verb_enable.cc",
    "commands/verb_enable.h",
    "commands/verb_finish.cc",
    "commands/verb_finish.h",
    "commands/verb_handle.cc",
    "commands/verb_handle.h",
    "commands/verb_help.cc",
    "commands/verb_help.h",
    "commands/verb_jump.cc",
    "commands/verb_jump.h",
    "commands/verb_kill.cc",
    "commands/verb_kill.h",
    "commands/verb_libs.cc",
    "commands/verb_libs.h",
    "commands/verb_list.cc",
    "commands/verb_list.h",
    "commands/verb_locals.cc",
    "commands/verb_locals.h",
    "commands/verb_mem_analyze.cc",
    "commands/verb_mem_analyze.h",
    "commands/verb_mem_read.cc",
    "commands/verb_mem_read.h",
    "commands/verb_new.cc",
    "commands/verb_new.h",
    "commands/verb_next.cc",
    "commands/verb_next.h",
    "commands/verb_nexti.cc",
    "commands/verb_nexti.h",
    "commands/verb_opendump.cc",
    "commands/verb_opendump.h",
    "commands/verb_pause.cc",
    "commands/verb_pause.h",
    "commands/verb_print.cc",
    "commands/verb_print.h",
    "commands/verb_ps.cc",
    "commands/verb_ps.h",
    "commands/verb_quit.cc",
    "commands/verb_quit.h",
    "commands/verb_quit_agent.cc",
    "commands/verb_quit_agent.h",
    "commands/verb_regs.cc",
    "commands/verb_regs.h",
    "commands/verb_rm.cc",
    "commands/verb_rm.h",
    "commands/verb_run.cc",
    "commands/verb_run.h",
    "commands/verb_stack.cc",
    "commands/verb_stack.h",
    "commands/verb_status.cc",
    "commands/verb_status.h",
    "commands/verb_stderr.cc",
    "commands/verb_stderr.h",
    "commands/verb_stdout.cc",
    "commands/verb_stdout.h",
    "commands/verb_step.cc",
    "commands/verb_step.h",
    "commands/verb_stepi.cc",
    "commands/verb_stepi.h",
    "commands/verb_steps.cc",
    "commands/verb_steps.h",
    "commands/verb_sym_info.cc",
    "commands/verb_sym_info.h",
    "commands/verb_sym_near.cc",
    "commands/verb_sym_near.h",
    "commands/verb_sym_search.cc",
    "commands/verb_sym_search.h",
    "commands/verb_sym_stat.cc",
    "commands/verb_sym_stat.h",
    "commands/verb_sys_info.cc",
    "commands/verb_sys_info.h",
    "commands/verb_until.cc",
    "commands/verb_until.h",
    "commands/verb_up.cc",
    "commands/verb_up.h",
    "commands/verb_watch.cc",
    "commands/verb_watch.h",
    "console.cc",
    "console.h",
    "console_context.cc",
    "console_context.h",
    "console_impl.cc",
    "console_impl.h",
    "console_main.cc",
    "console_main.h",
    "format_context.cc",
    "format_context.h",
    "format_exception.cc",
    "format_exception.h",
    "format_frame.cc",
    "format_frame.h",
    "format_handle.cc",
    "format_handle.h",
    "format_job.cc",
    "format_job.h",
    "format_location.cc",
    "format_location.h",
    "format_memory.cc",
    "format_memory.h",
    "format_name.cc",
    "format_name.h",
    "format_node_console.cc",
    "format_node_console.h",
    "format_register.cc",
    "format_register.h",
    "format_register_arm64.cc",
    "format_register_arm64.h",
    "format_register_x64.cc",
    "format_register_x64.h",
    "format_settings.cc",
    "format_settings.h",
    "format_symbol.cc",
    "format_symbol.h",
    "format_table.cc",
    "format_table.h",
    "format_target.cc",
    "format_target.h",
    "input_location_parser.cc",
    "input_location_parser.h",
    "nouns.cc",
    "nouns.h",
    "output_buffer.cc",
    "output_buffer.h",
    "print_command_utils.cc",
    "print_command_utils.h",
    "string_formatters.cc",
    "string_formatters.h",
    "string_util.cc",
    "string_util.h",
    "switch_record.h",
    "verbs.cc",
    "verbs.h",
    "verbs_settings.cc",
  ]

  deps = []
  public_deps = [
    "//src/developer/debug/zxdb/client",
    "//src/developer/debug/zxdb/expr",
    "//src/lib/fxl",
    "//src/lib/line_input",
    "//zircon/public/lib/cmdline",
    "//zircon/public/lib/fit",
  ]

  if (current_toolchain != host_toolchain) {
    deps += [
      "//sdk/lib/fdio",
      "//src/lib/fxl",
      "//zircon/public/lib/zx",
    ]
  }
}

source_set("tests") {
  testonly = true
  sources = [
    "actions_unittest.cc",
    "analyze_memory_unittest.cc",
    "async_output_buffer_test_util.cc",
    "async_output_buffer_test_util.h",
    "async_output_buffer_unittest.cc",
    "command_parser_unittest.cc",
    "command_utils_unittest.cc",
    "commands/verb_attach_job_unittest.cc",
    "commands/verb_attach_unittest.cc",
    "commands/verb_break_unittest.cc",
    "commands/verb_clear_unittest.cc",
    "commands/verb_detach_unittest.cc",
    "commands/verb_disassemble_unittest.cc",
    "commands/verb_display_unittest.cc",
    "commands/verb_new_rm_unittest.cc",
    "commands/verb_print_unittest.cc",
    "commands/verb_quit_unittest.cc",
    "commands/verb_status_unittest.cc",
    "commands/verb_steps_unittest.cc",
    "commands/verb_sym_info_unittest.cc",
    "commands/verb_sym_stat_unittest.cc",
    "commands/verb_up_unittest.cc",
    "commands/verb_watch_unittest.cc",
    "console_context_unittest.cc",
    "console_test.cc",
    "console_test.h",
    "format_context_unittest.cc",
    "format_exception_unittest.cc",
    "format_frame_unittest.cc",
    "format_handle_unittest.cc",
    "format_job_unittest.cc",
    "format_location_unittest.cc",
    "format_memory_unittest.cc",
    "format_name_unittest.cc",
    "format_node_console_unittest.cc",
    "format_register_unittest.cc",
    "format_settings_unittest.cc",
    "format_symbol_unittest.cc",
    "format_table_unittest.cc",
    "input_location_parser_unittest.cc",
    "mock_console.cc",
    "nouns_unittest.cc",
    "output_buffer_unittest.cc",
    "string_formatters_unittest.cc",
    "string_util_unittest.cc",
    "verbs_memory_unittest.cc",
    "verbs_settings_unittest.cc",
  ]

  deps = [
    ":console",
    "//src/developer/debug/zxdb/client:test_support",
    "//src/developer/debug/zxdb/common:test_support",
    "//src/developer/debug/zxdb/expr:test_support",
    "//src/developer/debug/zxdb/symbols:test_support",
    "//third_party/googletest:gtest",
  ]
}

source_set("e2e_tests") {
  testonly = true
  sources = [
    "e2e_test.cc",
    "mock_console.cc",
  ]

  deps = [
    ":console",
    "//src/developer/debug/zxdb:e2e_test_headers",
    "//src/developer/debug/zxdb/common:test_support",
    "//third_party/googletest:gtest",
  ]
}
