# Copyright 2022 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/generate-dbus-adaptors.gni")
import("//common-mk/pkg_config.gni")
import("//common-mk/proto_library.gni")

group("all") {
  deps = [
    ":install_init",
    ":install_policy",
    ":install_systemd",
    ":vtpmd",
  ]
  if (use.test) {
    deps += [ ":vtpm_test" ]
  }
}

pkg_config("target_defaults") {
  pkg_deps = [
    # This is a list of pkg-config dependencies
    "libbrillo",
    "libchrome",
    "protobuf",
  ]
}

proto_library("interface_proto") {
  proto_in_dir = "."
  proto_out_dir = "include/vtpm"
  sources = [ "${proto_in_dir}/vtpm_interface.proto" ]
}

proto_library("database_proto") {
  proto_in_dir = "./backends"
  proto_out_dir = "include/vtpm/backends"
  sources = [ "${proto_in_dir}/database.proto" ]
}

generate_dbus_adaptors("vtpm-adaptors") {
  sources = [ "dbus_bindings/org.chromium.Vtpm.xml" ]
  dbus_adaptors_out_dir = "include/vtpm/dbus_adaptors"
  dbus_service_config = "dbus_bindings/dbus-service-config.json"
}

source_set("vtpm_server_library") {
  sources = [
    "backends/cacheable_blob.cc",
    "backends/disk_cache_blob.cc",
    "backends/real_tpm_handle_manager.cc",
    "backends/vsrk.cc",
    "commands/get_capability_command.cc",
    "commands/null_command.cc",
    "commands/unsupported_command.cc",
    "commands/virtualizer.cc",
    "vtpm_service.cc",
  ]
  configs += [ ":target_defaults" ]
  deps = [
    ":database_proto",
    ":interface_proto",
    ":vtpm-adaptors",
  ]
}

config("vtpmd_config") {
  libs = [ "trunks" ]
}

executable("vtpmd") {
  sources = [ "main.cc" ]
  configs += [
    ":target_defaults",
    ":vtpmd_config",
  ]

  install_path = "sbin"

  deps = [
    ":vtpm-adaptors",
    ":vtpm_server_library",
  ]
}

install_config("install_init") {
  sources = [ "vtpmd.conf" ]
  install_path = "/etc/init"
}

install_config("install_policy") {
  _arch = getenv("ARCH")
  sources = [ "vtpmd-seccomp-${_arch}.policy" ]
  install_path = "/usr/share/policy"

  outputs = [ "vtpmd-seccomp.policy" ]
}

install_config("install_systemd") {
  sources = [ "org.chromium.Vtpm.conf" ]
  install_path = "/etc/dbus-1/system.d"
}

if (use.test) {
  config("vtpm_test_config") {
    libs = [
      "trunks",
      "trunks_test",
    ]
  }
  executable("vtpm_test") {
    sources = [
      "backends/cacheable_blob_test.cc",
      "backends/disk_cache_blob_test.cc",
      "backends/real_tpm_handle_manager_test.cc",
      "backends/vsrk_test.cc",
      "commands/get_capability_command_test.cc",
      "commands/unsupported_command_test.cc",
      "commands/virtualizer_test.cc",
      "vtpm_service_test.cc",
    ]
    configs += [
      "//common-mk:test",
      ":target_defaults",
      ":vtpm_test_config",
    ]
    deps = [
      ":vtpm_server_library",
      "//common-mk/testrunner:testrunner",
    ]
    run_test = true
  }
}
