# Copyright 2019 The ChromiumOS Authors
# 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 = [
    ":install_headers",
    ":libsealed_storage",
    ":libsealed_storage_wrapper",
    ":sealed_storage_tool",
  ]
  if (use.test) {
    deps += [ ":sealed_storage_testrunner" ]
  }
}

config("target_defaults") {
}

pkg_config("cli_defaults") {
  pkg_deps = [
    "libbrillo",
    "libchrome",
  ]
}

pkg_config("test_defaults") {
  pkg_deps = [
    "libbrillo-test",
    "libchrome-test",
    "libtpm_manager-client",
    "libtpm_manager-client-test",
  ]
}

pkg_config("sealed_storage_dependent_config") {
  # NOSORT
  pkg_deps = [
    "libbrillo",
    "libchrome",
    "openssl",

    # per tpm_manager/BUILD.gn, system_api should go before protobuf
    "system_api",
    "protobuf",
  ]
}

static_library("libsealed_storage") {
  sources = [
    "sealed_storage.cc",
    "wrapper.cc",
  ]
  configs += [
    ":target_defaults",
    "//common-mk:nouse_thin_archive",
    "//common-mk:pic",
  ]
  configs -= [
    "//common-mk:pie",
    "//common-mk:use_thin_archive",
  ]
  install_path = "lib"
  libs = [
    "trunks",
    "tpm_manager",
  ]
  all_dependent_configs = [ ":sealed_storage_dependent_config" ]
}

shared_library("libsealed_storage_wrapper") {
  install_path = "lib"
  deps = [ ":libsealed_storage" ]
}

executable("sealed_storage_tool") {
  sources = [ "sealed_storage_tool.cc" ]
  configs += [
    ":cli_defaults",
    ":target_defaults",
  ]
  install_path = "sbin"
  deps = [ ":libsealed_storage" ]
}

install_config("install_headers") {
  sources = [ "sealed_storage.h" ]
  install_path = "/usr/include/chromeos/sealed_storage"
}

if (use.test) {
  executable("sealed_storage_testrunner") {
    sources = [
      "sealed_storage_simulatortests.cc",
      "sealed_storage_testrunner.cc",
      "sealed_storage_unittests.cc",
    ]
    configs += [
      "//common-mk:test",
      ":target_defaults",
      ":test_defaults",
    ]
    run_test = true
    libs = [
      "tpm2",
      "trunks_test",
      "trunksd_lib",
    ]
    deps = [
      ":libsealed_storage",
      "//common-mk/testrunner",
    ]
  }
}
