# Copyright 2019 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 = [
    ":libhwsec",
  ]
  deps += [ ":libhwsec_test" ]
  if (use.test) {
    deps += [ ":hwsec_testrunner" ]
  }
}

pkg_config("target_defaults") {
  pkg_deps = [
    "libbrillo",
    "libchrome-${libbase_ver}",
    "openssl",
  ]
  defines = [ "USE_TPM2=${use.tpm2}" ]
}

static_library("overalls_library") {
  configs += [
    ":target_defaults",
    "//common-mk:pic",
  ]
  sources = [
    "overalls/overalls_api.cc",
    "overalls/overalls_singleton.cc",
  ]
}

static_library("libhwsec_test") {
  configs += [
    ":target_defaults",
    "//common-mk:nouse_thin_archive",
  ]
  configs -= [ "//common-mk:use_thin_archive" ]
  sources = [
    "message_loop_idle.cc",
  ]
  if (!use.tpm2) {
    sources += [ "test_utils/tpm1/test_fixture.cc" ]
  }
}

config("libhwsec_tpm1_config") {
  libs = [ "tspi" ]
}

shared_library("libhwsec") {
  configs += [ ":target_defaults" ]
  sources = [
    "crypto_utility.cc",
  ]
  if (!use.tpm2) {
    deps = [
      ":overalls_library",
    ]
    all_dependent_configs = [ ":libhwsec_tpm1_config" ]
  }
}

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

  executable("hwsec_testrunner") {
    configs += [
      "//common-mk:test",
      ":target_defaults",
      ":test_config",
    ]
    sources = [
      "crypto_utility_test.cc",
      "message_loop_idle_test.cc",
      "task_dispatching_framework_test.cc",
    ]
    deps = [
      ":libhwsec",
      ":libhwsec_test",
      "//common-mk/testrunner",
    ]
    if (!use.tpm2) {
      sources += [
        "overalls/overalls_api_test.cc",
        "overalls/overalls_singleton_test.cc",
      ]
    }
  }
}
