# 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_fallback.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",
    ]
  }
}
