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