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