# Copyright 2021 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/go/go_library.gni")
import("//build/go/go_test.gni")
import("//build/testing/host_test_data.gni")

group("bringup_tests") {
  testonly = true
  deps = []
  if (host_os == "linux") {
    deps += [ ":drivers_serial_log_test($host_toolchain)" ]
  }
}

if (is_linux) {
  go_library("lib") {
    testonly = true
    deps = [ "//tools/emulator/emulatortest" ]
    sources = [ "drivers_serial_log_test.go" ]
  }

  host_test_data("bringup_zbi") {
    sources = [ "$root_build_dir/bringup.zbi" ]
  }

  go_test("drivers_serial_log_test") {
    library = ":lib"
    non_go_deps = [ ":bringup_zbi" ]
  }
}
