# Copyright 2016 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.

import("//build/package.gni")
import("//build/test/test_package.gni")
import("//build/testing/environments.gni")

executable("bin") {
  # This is called debugserver and not gdbserver because it is not intended
  # to be gdb specific. E.g., The GDB Remote Serial Protocol is used by other
  # debuggers, e.g., lldb.
  output_name = "debugserver"

  sources = [
    "cmd_handler.cc",
    "cmd_handler.h",
    "io_loop.cc",
    "io_loop.h",
    "main.cc",
    "registers.cc",
    "registers.h",
    "server.cc",
    "server.h",
    "stop_reply_packet.cc",
    "stop_reply_packet.h",
    "thread_action_list.cc",
    "thread_action_list.h",
    "util.cc",
    "util.h",
  ]

  if (current_cpu == "x64") {
    sources += [ "registers_x64.cc" ]
  } else if (current_cpu == "arm64") {
    sources += [ "registers_arm64.cc" ]
  }

  deps = [
    "//garnet/lib/debugger_utils",
    "//garnet/lib/inferior_control",
    "//garnet/public/lib/fsl",
    "//garnet/public/lib/svc/cpp",
    "//sdk/lib/sys/cpp",
    "//src/lib/fxl",
    "//zircon/public/lib/async-loop-cpp",
    "//zircon/public/lib/zx",
  ]

  public_deps = [
    "//zircon/public/lib/fit",
  ]

  libs = [ "zircon" ]
}

group("tests") {
  testonly = true

  public_deps = [
    ":debugserver_tests",
  ]
}

executable("debugserver-unittests") {
  testonly = true

  sources = [
    "stop_reply_packet.cc",
    "stop_reply_packet.h",
    "stop_reply_packet_unittest.cc",
    "thread_action_list.cc",
    "thread_action_list.h",
    "thread_action_list_unittest.cc",
    "util.cc",
    "util.h",
    "util_unittest.cc",
  ]

  deps = [
    "//garnet/lib/debugger_utils",
    "//src/lib/fxl",
    "//src/lib/fxl/test:gtest_main",
    "//third_party/googletest:gtest",
  ]

  libs = [ "zircon" ]
}

package("debugserver") {
  deps = [
    ":bin",
  ]

  binaries = [
    {
      name = "debugserver"
      shell = true
    },
  ]
}

unittest_package("debugserver_tests") {
  deps = [
    ":debugserver-unittests",
    "test_apps",
  ]

  tests = [
    {
      name = "debugserver-unittests"
      environments = basic_envs
    },
  ]

  # These have been very useful with interactive debugging/testing.
  binaries = [
    {
      name = "exit-test"
    },
    {
      name = "crash-test"
    },
    {
      name = "loop-test"
    },
    {
      name = "syscall-test"
    },
    {
      name = "thread-test"
    },
  ]
}
