# Copyright 2018 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")
import("//common-mk/proto_library.gni")

group("all") {
  deps = [
    ":chaps-protos",
    ":chaps_client",
    ":chapsd",
    ":libchaps",
    ":libchaps_static",
    ":p11_replay",
  ]
  if (use.test) {
    deps += [
      ":chaps_service_test",
      ":chaps_test",
      ":chapsd_test",
      ":dbus_test",
      ":isolate_login_client_test",
      ":libchaps_test",
      ":object_policy_test",
      ":object_pool_test",
      ":object_store_test",
      ":object_test",
      ":opencryptoki_importer_test",
      ":session_test",
      ":slot_manager_test",
      ":tpm_utility_test",
    ]
    if (use.tpm2) {
      deps += [ ":tpm2_utility_test" ]
    }
  }
  if (use.fuzzer) {
    deps += [
      ":chaps_attributes_fuzzer",
      ":chaps_object_store_fuzzer",
    ]
  }
}

pkg_config("target_defaults") {
  defines = [ "USE_TPM2=${use.tpm2}" ]

  pkg_deps = [
    # system_api depends on protobuf (or protobuf-lite). It must appear
    # before protobuf here or the linker flags won't be in the right
    # order.
    "system_api",
    "openssl",
    "libbrillo",
    "libchrome-${libbase_ver}",
  ]

  if (use.fuzzer) {
    pkg_deps += [ "protobuf" ]
  } else {
    pkg_deps += [ "protobuf-lite" ]
  }
}

proto_library("chaps-protos") {
  proto_in_dir = "."
  proto_out_dir = "include/chaps/proto_bindings"
  sources = [
    "${proto_in_dir}/attributes.proto",
  ]
  if (use.fuzzer) {
    # Override optimize_for option in proto file.
    gen_cpp_mode = "speed"
  }

  # libchaps-protos.a is used by a shared_libary
  # object, so we need to build it with '-fPIC' instead of '-fPIE'.
  use_pic = true
}

# This is meant only for internal binaries like unittests.  All
# client programs should be using the shared libchaps library.
static_library("libchaps_static") {
  sources = [
    "attributes.cc",
    "chaps.cc",
    "chaps_proxy.cc",
    "chaps_utility.cc",
    "dbus/dbus_proxy_wrapper.cc",
    "dbus/scoped_bus.cc",
    "isolate_chromeos.cc",
    "proto_conversion.cc",
    "token_manager_client.cc",
  ]
  configs += [ ":target_defaults" ]
  deps = [
    ":chaps-protos",
  ]
}

shared_library("libchaps") {
  sources = [
    "attributes.cc",
    "chaps.cc",
    "chaps_proxy.cc",
    "chaps_utility.cc",
    "dbus/dbus_proxy_wrapper.cc",
    "dbus/scoped_bus.cc",
    "isolate_chromeos.cc",
    "proto_conversion.cc",
    "token_manager_client.cc",
  ]
  configs += [ ":target_defaults" ]
  deps = [
    ":chaps-protos",
  ]
}

pkg_config("chapsd_config") {
  pkg_deps = [
    "libmetrics-${libbase_ver}",
    "libminijail",
  ]
}

executable("chapsd") {
  sources = [
    "chaps_adaptor.cc",
    "chaps_factory_impl.cc",
    "chaps_service.cc",
    "chapsd.cc",
    "object_impl.cc",
    "object_policy_cert.cc",
    "object_policy_common.cc",
    "object_policy_data.cc",
    "object_policy_key.cc",
    "object_policy_private_key.cc",
    "object_policy_public_key.cc",
    "object_policy_secret_key.cc",
    "object_pool_impl.cc",
    "object_store_impl.cc",
    "opencryptoki_importer.cc",
    "platform_globals_chromeos.cc",
    "proto_conversion.cc",
    "session_impl.cc",
    "slot_manager_impl.cc",
    "system_shutdown_blocker.cc",
  ]
  configs += [
    ":chapsd_config",
    ":target_defaults",
  ]
  libs = [
    "dl",
    "leveldb",
    "memenv",
  ]
  deps = [
    ":chaps-protos",
    ":libchaps_static",
  ]

  if (use.tpm2) {
    sources += [ "tpm2_utility_impl.cc" ]
    libs += [ "trunks" ]
  }

  if (!use.tpm2) {
    sources += [ "tpm_utility_impl.cc" ]
    libs += [ "tspi" ]
  }
}

executable("chaps_client") {
  sources = [
    "chaps_client.cc",
  ]
  configs += [ ":target_defaults" ]
  deps = [
    ":libchaps_static",
  ]
}

executable("p11_replay") {
  sources = [
    "p11_replay.cc",
  ]
  configs += [ ":target_defaults" ]
  deps = [
    ":libchaps",
  ]
}

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

  static_library("libchaps_test") {
    sources = [
      "chaps_factory_mock.cc",
      "object_importer_mock.cc",
      "object_mock.cc",
      "object_policy_mock.cc",
      "object_pool_mock.cc",
      "object_store_mock.cc",
      "session_mock.cc",
      "slot_manager_mock.cc",
      "tpm_utility_mock.cc",
    ]
    configs += [ ":target_defaults" ]
    all_dependent_configs = [ ":libchaps_test_dependent_config" ]
    deps = [
      ":chaps-protos",
      ":libchaps_static",
    ]
  }

  executable("chaps_test") {
    sources = [
      "chaps_test.cc",
    ]
    configs += [
      "//common-mk:test",
      ":target_defaults",
    ]
    deps = [
      ":libchaps_static",
      "//common-mk/testrunner",
    ]
  }

  executable("chaps_service_test") {
    sources = [
      "chaps_service.cc",
      "chaps_service_test.cc",
    ]
    configs += [
      "//common-mk:test",
      ":target_defaults",
    ]
    deps = [
      ":libchaps_static",
      ":libchaps_test",
      "//common-mk/testrunner",
    ]
  }

  executable("dbus_test") {
    sources = [
      "dbus/dbus_proxy_wrapper_test.cc",
      "dbus/scoped_bus_test.cc",
    ]
    configs += [
      "//common-mk:test",
      ":target_defaults",
    ]
    deps = [
      ":libchaps_static",
      "//common-mk/testrunner",
    ]
  }

  executable("slot_manager_test") {
    sources = [
      "slot_manager_impl.cc",
      "slot_manager_test.cc",
      "system_shutdown_blocker.cc",
    ]
    configs += [
      "//common-mk:test",
      ":target_defaults",
    ]
    deps = [
      ":libchaps_static",
      ":libchaps_test",
      "//common-mk/testrunner",
    ]
  }

  executable("session_test") {
    sources = [
      "chaps_factory_impl.cc",
      "object_impl.cc",
      "object_policy_cert.cc",
      "object_policy_common.cc",
      "object_policy_data.cc",
      "object_policy_key.cc",
      "object_policy_private_key.cc",
      "object_policy_public_key.cc",
      "object_policy_secret_key.cc",
      "object_pool_impl.cc",
      "object_store_impl.cc",
      "opencryptoki_importer.cc",
      "session_impl.cc",
      "session_test.cc",
    ]
    configs += [
      "//common-mk:test",
      ":chapsd_config",
      ":target_defaults",
    ]
    deps = [
      ":libchaps_static",
      ":libchaps_test",
    ]
    libs = [
      "dl",
      "leveldb",
      "memenv",
    ]
  }

  executable("object_test") {
    sources = [
      "object_impl.cc",
      "object_test.cc",
    ]
    configs += [
      "//common-mk:test",
      ":target_defaults",
    ]
    deps = [
      ":libchaps_static",
      ":libchaps_test",
      "//common-mk/testrunner",
    ]
  }

  executable("object_policy_test") {
    sources = [
      "object_policy_cert.cc",
      "object_policy_common.cc",
      "object_policy_data.cc",
      "object_policy_key.cc",
      "object_policy_private_key.cc",
      "object_policy_public_key.cc",
      "object_policy_secret_key.cc",
      "object_policy_test.cc",
    ]
    configs += [
      "//common-mk:test",
      ":target_defaults",
    ]
    deps = [
      ":libchaps_static",
      ":libchaps_test",
      "//common-mk/testrunner",
    ]
  }

  executable("object_pool_test") {
    sources = [
      "object_pool_impl.cc",
      "object_pool_test.cc",
    ]
    configs += [
      "//common-mk:test",
      ":target_defaults",
    ]
    deps = [
      ":libchaps_static",
      ":libchaps_test",
      "//common-mk/testrunner",
    ]
  }

  pkg_config("object_store_test_config") {
    pkg_deps = [ "libmetrics-${libbase_ver}" ]
  }

  executable("object_store_test") {
    sources = [
      "object_store_impl.cc",
      "object_store_test.cc",
    ]
    configs += [
      "//common-mk:test",
      ":object_store_test_config",
      ":target_defaults",
    ]
    libs = [
      "leveldb",
      "memenv",
    ]
    deps = [
      ":libchaps_static",
    ]
  }

  executable("opencryptoki_importer_test") {
    sources = [
      "opencryptoki_importer.cc",
      "opencryptoki_importer_test.cc",
    ]
    configs += [
      "//common-mk:test",
      ":object_store_test_config",
      ":target_defaults",
    ]
    deps = [
      ":libchaps_static",
      ":libchaps_test",
      "//common-mk/testrunner",
    ]
  }

  executable("isolate_login_client_test") {
    sources = [
      "isolate_login_client.cc",
      "isolate_login_client_test.cc",
      "token_file_manager_chromeos.cc",
    ]
    configs += [
      "//common-mk:test",
      ":object_store_test_config",
      ":target_defaults",
    ]
    deps = [
      ":libchaps_static",
      ":libchaps_test",
      "//common-mk/testrunner",
    ]
  }

  # Live Tests
  # Note: These tests require a live system with gtest and gmock
  # installed. These cannot be run without a real TPM and cannot be
  # run with autotest. These tests do not need to be run regularly
  # but may be useful in the future and so have been kept around.
  executable("chapsd_test") {
    sources = [
      "chapsd_test.cc",
      "platform_globals_chromeos.cc",
    ]
    configs += [
      "//common-mk:test",
      ":target_defaults",
    ]
    libs = [ "dl" ]
    deps = [
      ":libchaps_static",
      "//common-mk/testrunner",
    ]
  }

  executable("tpm_utility_test") {
    sources = [
      "tpm_utility_test.cc",
    ]
    configs += [
      "//common-mk:test",
      ":target_defaults",
    ]
    deps = [
      ":libchaps_static",
      ":libchaps_test",
      "//common-mk/testrunner",
    ]
    if (use.tpm2) {
      sources += [ "tpm2_utility_impl.cc" ]
      libs = [ "trunks" ]
    }
    if (!use.tpm2) {
      sources += [ "tpm_utility_impl.cc" ]
      libs = [ "tspi" ]
    }
  }

  # Conditional Unit Tests
  # Unit tests here are gated by conditionals. Since we cannot add
  # conditionals in the middle of a target list, we added it at the end.
  if (use.tpm2) {
    executable("tpm2_utility_test") {
      sources = [
        "tpm2_utility_impl.cc",
        "tpm2_utility_test.cc",
      ]
      configs += [
        "//common-mk:test",
        ":target_defaults",
      ]
      libs = [
        "trunks",
        "trunks_test",
      ]
      deps = [
        ":libchaps_static",
        ":libchaps_test",
        "//common-mk/testrunner",
      ]
    }
  }
}

if (use.fuzzer) {
  executable("chaps_attributes_fuzzer") {
    sources = [
      "attributes_fuzzer.cc",
    ]

    configs += [ "//common-mk/common_fuzzer:common_fuzzer" ]

    pkg_deps = [
      "libchrome-test-${libbase_ver}",
      "libprotobuf-mutator",
      "protobuf",
    ]

    deps = [
      ":chaps-protos",
      ":libchaps_static",
    ]
  }

  executable("chaps_object_store_fuzzer") {
    sources = [
      "object_store_fuzzer.cc",
      "object_store_impl.cc",
    ]

    libs = [
      "leveldb",
      "memenv",
    ]

    configs += [ "//common-mk/common_fuzzer:common_fuzzer" ]

    defines = [ "NO_METRICS" ]

    pkg_deps = [ "libchrome-test-${libbase_ver}" ]

    deps = [
      ":libchaps_static",
    ]
  }
}
