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

import("//build/package.gni")

# Targets meant for helping zxdb development. See README.md

# Test .so ---------------------------------------------------------------------

group("debug_so") {
  testonly = true

  public_deps = [
    ":debug_agent_test_loadable_module",
    ":debug_agent_test_so",
  ]
}

source_set("debug_agent_test_so_lib") {
  testonly = true

  public = [ "test_so_symbols.h" ]

  sources = [ "breakpoint_test_so.cc" ]

  if (current_cpu == "x64") {
    sources += [ "x64_write_register_test_so.cc" ]
  }
}

shared_library("debug_agent_test_so") {
  testonly = true

  public_deps = [ ":debug_agent_test_so_lib" ]
}

loadable_module("debug_agent_test_loadable_module") {
  testonly = true
  output_name = "debug_agent_test_so"

  deps = [ ":debug_agent_test_so_lib" ]
}

# Text Executables -------------------------------------------------------------

group("test_executables") {
  testonly = true

  public_deps = [
    ":breakpoint_test_exe",
    ":load_so_exe",
    ":multithreaded_breakpoint_test_exe",
    ":watchpoint_test_exe",
  ]

  if (current_cpu == "x64") {
    public_deps += [
      # TODO(donosoc): This test should suport both archs inherently.
      ":write_register_test_exe",
    ]
  }
}

executable("breakpoint_test_exe") {
  testonly = true
  output_name = "breakpoint_test_exe"
  sources = [ "breakpoint_test_exe.cc" ]
  deps = [ ":debug_agent_test_so" ]
}

executable("load_so_exe") {
  testonly = true
  sources = [ "load_so.cc" ]

  # This must use the loadable module because it's loaded dynamically.
  deps = [ ":debug_agent_test_loadable_module" ]
}

executable("multithreaded_breakpoint_test_exe") {
  testonly = true
  output_name = "multithreaded_breakpoint_test_exe"

  sources = [ "multithreaded_breakpoint_test_exe.cc" ]

  deps = [ ":debug_agent_test_so" ]
}

executable("watchpoint_test_exe") {
  testonly = true
  output_name = "watchpoint_test_exe"

  sources = [ "watchpoint_test_exe.cc" ]
}

if (current_cpu == "x64") {
  executable("write_register_test_exe") {
    testonly = true
    output_name = "write_register_test_exe"

    sources = [ "x64_write_register_test_exe.cc" ]

    public_deps = [ ":debug_agent_test_so" ]
  }
}

# Helper Executables -----------------------------------------------------------

group("helper_executables") {
  testonly = true

  public_deps = [
    ":backtrace_request",
    ":debug_test_false",
    ":debug_test_true",
    ":hw_watchpointer",
    ":limbo_caller",
    ":multi_threaded",
    ":printer",
    ":process_loop",
    ":process_spawner",
    ":test_suite",
    ":thread_signals",
  ]
}

executable("backtrace_request") {
  sources = [ "backtrace_request.cc" ]

  deps = [
    "//zircon/public/lib/zx",
    "//zircon/system/ulib/backtrace-request",
  ]
}

executable("debug_test_true") {
  sources = [ "true.c" ]
}

executable("debug_test_false") {
  sources = [ "false.c" ]
}

executable("test_suite") {
  testonly = true
  output_name = "test_suite"

  sources = [
    "test_suite.cc",
    "test_suite_helpers.cc",
    "test_suite_helpers.h",
  ]

  deps = [
    "//src/developer/debug/shared",
    "//src/lib/fxl",
    "//zircon/public/lib/fit",
    "//zircon/public/lib/zx",
  ]

  # TODO(fxbug.dev/58162): delete the below and fix compiler warnings
  configs += [ "//build/config:Wno-conversion" ]
}

executable("hw_watchpointer") {
  testonly = true
  output_name = "hw_watchpointer"

  sources = [ "hw_watchpointer.cc" ]

  deps = [
    "//src/developer/debug/shared",
    "//src/lib/fxl",
    "//zircon/public/lib/zx",
  ]

  # TODO(fxbug.dev/58162): delete the below and fix compiler warnings
  configs += [ "//build/config:Wno-conversion" ]
}

executable("multi_threaded") {
  testonly = true

  sources = [ "multi_threaded.cc" ]

  deps = [
    "//src/lib/fxl",
    "//zircon/public/lib/zx",
  ]

  # TODO(fxbug.dev/58162): delete the below and fix compiler warnings
  configs += [ "//build/config:Wno-conversion" ]
}

executable("printer") {
  sources = [ "printer.cc" ]
}

executable("process_loop") {
  testonly = true
  output_name = "process_loop"

  sources = [ "process_loop.cc" ]
}

executable("process_spawner") {
  testonly = true
  output_name = "process_spawner"

  sources = [ "process_spawner.cc" ]

  deps = [
    "//sdk/lib/fdio",
    "//src/lib/fxl",
    "//zircon/public/lib/zx",
  ]

  # TODO(fxbug.dev/58162): delete the below and fix compiler warnings
  configs += [ "//build/config:Wno-conversion" ]
}

executable("thread_signals") {
  testonly = true
  output_name = "thread_signals"

  sources = [ "thread_signals.cc" ]

  deps = [
    "//sdk/lib/fdio",
    "//src/lib/fxl",
    "//zircon/public/lib/zx",
  ]
}

executable("limbo_caller") {
  testonly = true
  output_name = "limbo_caller"

  sources = [ "limbo_caller.cc" ]

  deps = [
    "//sdk/fidl/fuchsia.exception",
    "//sdk/lib/sys/cpp",
    "//src/lib/fsl",
    "//src/lib/fxl",
    "//zircon/public/lib/zx",
    "//zircon/system/ulib/async-loop:async-loop-cpp",
    "//zircon/system/ulib/async-loop:async-loop-default",
  ]
}
