# 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 = [
    ":mems_setup",
  ]
  if (use.test) {
    deps += [ ":mems_setup_testrunner" ]
  }
}

pkg_config("target_defaults_pkg_deps") {
  pkg_deps = [
    "libbrillo-${libbase_ver}",
    "libchrome-${libbase_ver}",
  ]
}

config("target_defaults") {
  configs = [ ":target_defaults_pkg_deps" ]
}

static_library("libmems_setup") {
  configs += [ ":target_defaults" ]
  sources = [
    "configuration.cc",
    "delegate_impl.cc",
    "sensor_kind.cc",
  ]
  pkg_deps = [ "libmems" ]
}

executable("mems_setup") {
  configs += [ ":target_defaults" ]
  sources = [
    "main.cc",
  ]
  deps = [
    ":libmems_setup",
  ]
  pkg_deps = [ "libmems" ]
}

if (use.test) {
  pkg_config("mems_setup_testrunner_pkg_deps") {
    pkg_deps = [
      "libbrillo-test-${libbase_ver}",
      "libchrome-test-${libbase_ver}",
    ]
  }

  executable("mems_setup_testrunner") {
    configs += [
      "//common-mk:test",
      ":mems_setup_testrunner_pkg_deps",
      ":target_defaults",
    ]
    deps = [
      ":libmems_setup",
      "//common-mk/testrunner",
    ]

    pkg_deps = [
      "libmems",
      "libmems_test_support",
    ]

    sources = [
      "accelerometer_test.cc",
      "gyroscope_test.cc",
      "test_fakes.cc",
      "test_helper.cc",
      "vpd_loader_test.cc",
    ]
  }
}
