# Copyright 2018 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 = [
    ":cros_config",
  ]
  if (use.test) {
    deps += [
      ":cros_config_main_test",
      ":cros_config_test",
      ":fake_cros_config_test",
    ]
  }
}

pkg_config("target_defaults") {
  pkg_deps = [ "libchrome-${libbase_ver}" ]
}

shared_library("libcros_config") {
  configs += [ ":target_defaults" ]
  sources = [
    "libcros_config/cros_config.cc",
    "libcros_config/cros_config_impl.cc",
    "libcros_config/cros_config_json.cc",
    "libcros_config/fake_cros_config.cc",
    "libcros_config/identity.cc",
    "libcros_config/identity_arm.cc",
    "libcros_config/identity_x86.cc",
  ]
  libs = [ "fdt" ]
}

pkg_config("cros_config_config") {
  pkg_deps = [ "libbrillo-${libbase_ver}" ]
}

executable("cros_config") {
  configs += [
    ":cros_config_config",
    ":target_defaults",
  ]
  deps = [
    ":libcros_config",
  ]
  sources = [
    "cros_config_main.cc",
  ]
}

if (use.test) {
  executable("cros_config_test") {
    configs += [
      "//common-mk:test",
      ":target_defaults",
    ]
    include_dirs = [ "libcros_config" ]
    deps = [
      ":libcros_config",
    ]
    sources = [
      "libcros_config/cros_config_test.cc",
    ]
  }

  executable("cros_config_main_test") {
    configs += [
      "//common-mk:test",
      ":target_defaults",
    ]
    deps = [
      ":cros_config",
    ]
    sources = [
      "cros_config_main_test.cc",
    ]
  }

  executable("fake_cros_config_test") {
    configs += [
      "//common-mk:test",
      ":target_defaults",
    ]
    include_dirs = [ "libcros_config" ]
    deps = [
      ":libcros_config",
    ]
    sources = [
      "libcros_config/fake_cros_config_test.cc",
    ]
  }
}
