# 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}" ]

  # NOSORT
  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",
    "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" ]
  }

  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" ]
  }
}
