# 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/pkg_config.gni")

group("all") {
  deps = [
    ":libmems",
    ":libmems_test_support",
  ]
  if (use.test) {
    deps += [ ":libmems_testrunner" ]
  }
}

pkg_config("target_defaults_pkg_deps") {
  pkg_deps = [
    "libbrillo",
    "libchrome",
    "libiio",
  ]
}

shared_library("libmems") {
  sources = [
    "iio_channel_impl.cc",
    "iio_context_impl.cc",
    "iio_device.cc",
    "iio_device_impl.cc",
    "iio_device_trigger_impl.cc",
  ]
  configs += [ ":target_defaults_pkg_deps" ]
}

shared_library("libmems_test_support") {
  sources = [ "test_fakes.cc" ]
  configs += [ ":target_defaults_pkg_deps" ]
  deps = [ ":libmems" ]
}

if (use.test) {
  pkg_config("libmems_testrunner_pkg_deps") {
    pkg_deps = [
      "libbrillo-test",
      "libchrome-test",
      "libiio",
    ]
  }

  executable("libmems_testrunner") {
    sources = [ "iio_device_test.cc" ]
    configs += [
      "//common-mk:test",
      ":libmems_testrunner_pkg_deps",
      ":target_defaults_pkg_deps",
    ]
    deps = [
      ":libmems",
      ":libmems_test_support",
      "//common-mk/testrunner",
    ]
  }
}
