# Copyright 2020 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 = [
    ":ureadahead-diff",
  ]
  if (use.test) {
    deps += [ ":ureadahead-diff_testrunner" ]
  }
}

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

config("target_defaults") {
  configs = [ ":target_defaults_pkg_deps" ]
  defines = [ "OS_CHROMEOS" ]
}

static_library("libureadahead_diff") {
  sources = [
    "ureadahead_diff.cc",
  ]
  configs += [ ":target_defaults" ]
  defines = []
}

executable("ureadahead-diff") {
  sources = [
    "main.cc",
  ]
  configs += [ ":target_defaults" ]
  deps = [
    ":libureadahead_diff",
  ]
}

if (use.test) {
  pkg_config("ureadahead-diff_testrunner_pkg_deps") {
    pkg_deps = [
      "libbrillo-test",
      "libchrome-test-${libbase_ver}",
    ]
  }
  executable("ureadahead-diff_testrunner") {
    sources = [
      "ureadahead_diff_test.cc",
    ]
    configs += [
      "//common-mk:test",
      ":ureadahead-diff_testrunner_pkg_deps",
      ":target_defaults",
    ]

    deps = [
      ":libureadahead_diff",
      "../../common-mk/testrunner:testrunner",
    ]
  }
}
