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

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

shared_library("libcros_config") {
  sources = [
    "libcros_config/configfs.cc",
    "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",
  ]
  configs += [ ":target_defaults" ]
}

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

executable("cros_configfs") {
  sources = [
    "cros_configfs_main.cc",
  ]
  configs += [ ":target_defaults" ]
  deps = [
    ":libcros_config",
  ]
}

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

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

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