# 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 = [
    ":clobber-state",
    ":cros_sysrq_init",
    ":file_attrs_cleaner_tool",
    ":net_poll_tool",
    ":static_node_tool",
    ":usermode-helper",
  ]
  if (use.test) {
    deps += [
      ":clobber_state_test",
      ":file_attrs_cleaner_test",
      ":usermode-helper_test",
    ]
  }
}

pkg_config("target_defaults") {
  pkg_deps = [
    "libbrillo",
    "libchrome-${libbase_ver}",
    "libmetrics-${libbase_ver}",
    "vboot_host",
  ]
  libs = [
    "rootdev",
    "secure_erase_file",
  ]
}

static_library("libcrossystem") {
  configs += [ ":target_defaults" ]
  sources = [
    "crossystem.cc",
    "crossystem_fake.cc",
    "crossystem_impl.cc",
  ]
}

executable("clobber-state") {
  configs += [ ":target_defaults" ]
  sources = [
    "clobber_state.cc",
    "clobber_state_main.cc",
    "clobber_ui.cc",
  ]
  deps = [ ":libcrossystem" ]
}

static_library("file_attrs_cleaner_lib") {
  configs += [ ":target_defaults" ]
  sources = [ "file_attrs_cleaner_lib.cc" ]
}

executable("file_attrs_cleaner_tool") {
  configs += [ ":target_defaults" ]
  deps = [ ":file_attrs_cleaner_lib" ]
  sources = [ "file_attrs_cleaner_tool.cc" ]
}

executable("cros_sysrq_init") {
  configs += [ ":target_defaults" ]
  sources = [ "cros_sysrq_init.cc" ]
  pkg_deps = [ "vboot_host" ]
}

executable("net_poll_tool") {
  configs += [ ":target_defaults" ]
  sources = [ "net_poll_tool.cc" ]
}

executable("static_node_tool") {
  configs += [ ":target_defaults" ]
  sources = [ "static_node_tool.cc" ]
}

static_library("usermode-helper_lib") {
  configs += [ ":target_defaults" ]
  sources = [ "usermode-helper_lib.cc" ]
}

executable("usermode-helper") {
  configs += [ ":target_defaults" ]
  deps = [ ":usermode-helper_lib" ]
  sources = [ "usermode-helper.cc" ]
}

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

  executable("clobber_state_test") {
    configs += [
      "//common-mk:test",
      ":target_defaults",
      ":test_config",
    ]
    sources = [
      "clobber_state.cc",
      "clobber_state_test.cc",
      "clobber_ui.cc",
      "clobber_ui_test.cc",
    ]
    deps = [
      ":libcrossystem",
      "//common-mk/testrunner",
    ]
  }

  executable("file_attrs_cleaner_test") {
    configs += [
      "//common-mk:test",
      ":target_defaults",
      ":test_config",
    ]
    sources = [ "file_attrs_cleaner_test.cc" ]
    deps = [
      ":file_attrs_cleaner_lib",
      "//common-mk/testrunner",
    ]
  }

  executable("usermode-helper_test") {
    configs += [
      "//common-mk:test",
      ":target_defaults",
      ":test_config",
    ]
    sources = [ "usermode-helper_test.cc" ]
    deps = [
      ":usermode-helper_lib",
      "//common-mk/testrunner",
    ]
  }
}
