# Copyright 2019 The Chromium OS 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("//common-mk/mojom_bindings_generator.gni")
import("//common-mk/pkg_config.gni")

group("all") {
  deps = [ ":midis" ]
  if (use.test) {
    deps += [ ":midis_testrunner" ]
  }
  if (use.fuzzer) {
    deps += [ ":midis_seq_handler_fuzzer" ]
  }
}

generate_mojom_bindings("midis_mojo_bindings") {
  sources = [ "mojo/midis.mojom" ]
}

pkg_config("midis_common_pkg_deps") {
  pkg_deps = [
    "alsa",
    "libbrillo",
    "libchrome",
    "libmojo",
  ]
}

static_library("midis_common") {
  deps = [ ":midis_mojo_bindings" ]
  all_dependent_configs = [ ":midis_common_pkg_deps" ]
  sources = [
    # Files included from Chrome //src/media/midi checkout.
    # This directory is placed in platform2 as platform2/media/midi.
    "../media/midi/message_util.cc",
    "../media/midi/midi_message_queue.cc",
    "client.cc",
    "client_tracker.cc",
    "device.cc",
    "device_tracker.cc",
    "ports.cc",
    "seq_handler.cc",
    "subdevice_client_fd_holder.cc",
  ]
}

executable("midis") {
  deps = [ ":midis_common" ]
  libs = [ "dl" ]
  sources = [
    "daemon.cc",
    "main.cc",
  ]
}

if (use.test) {
  executable("midis_testrunner") {
    configs += [ "//common-mk:test" ]
    deps = [
      ":midis_common",
      "../common-mk/testrunner:testrunner",
    ]
    sources = [
      "tests/client_test.cc",
      "tests/client_tracker_test.cc",
      "tests/device_tracker_test.cc",
      "tests/seq_handler_test.cc",
      "tests/test_helper.cc",
    ]
  }
}

# Fuzzer target.
if (use.fuzzer) {
  executable("midis_seq_handler_fuzzer") {
    configs += [ "//common-mk/common_fuzzer:common_fuzzer" ]
    deps = [ ":midis_common" ]
    sources = [ "seq_handler_fuzzer.cc" ]
  }
}
