# Copyright 2014 The Chromium 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("//mojo/public/tools/bindings/mojom.gni")

# GYP version: device/serial/serial.gyp:device_serial
static_library("serial") {
  output_name = "device_serial"

  sources = [
    "async_waiter.cc",
    "async_waiter.h",
    "buffer.cc",
    "buffer.h",
    "data_receiver.cc",
    "data_receiver.h",
    "data_source_sender.cc",
    "data_source_sender.h",
    "serial_connection.cc",
    "serial_connection.h",
    "serial_connection_factory.cc",
    "serial_connection_factory.h",
    "serial_device_enumerator.cc",
    "serial_device_enumerator.h",
    "serial_device_enumerator_linux.cc",
    "serial_device_enumerator_linux.h",
    "serial_device_enumerator_mac.cc",
    "serial_device_enumerator_mac.h",
    "serial_device_enumerator_win.cc",
    "serial_device_enumerator_win.h",
    "serial_io_handler.cc",
    "serial_io_handler.h",
    "serial_io_handler_posix.cc",
    "serial_io_handler_posix.h",
    "serial_io_handler_win.cc",
    "serial_io_handler_win.h",
    "serial_service_impl.cc",
    "serial_service_impl.h",
  ]

  if (is_linux) {
    configs += [ "//build/config/linux:udev" ]
  }

  deps = [
    ":serial_mojo",
  ]
}

# GYP version: device/serial/serial.gyp:device_serial_test_util
static_library("test_util") {
  output_name = "device_serial_test_util"

  sources = [
    "test_serial_io_handler.cc",
    "test_serial_io_handler.h",
  ]

  deps = [
    ":serial",
  ]
}

# GYP version: device/serial/serial.gyp:device_serial_mojo
mojom("serial_mojo") {
  visibility = [
    ":serial",
    "//extensions:extensions_renderer_resources_grit",
  ]

  sources = [
    "data_stream.mojom",
    "serial.mojom",
  ]
}
