# Copyright 2020 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 = [
    ":attestation-injected-keys",
    ":fake_pca_agentd",
    ":hwsec-test-va",
  ]
  if (use.test) {
    deps += [ ":hwsec-test-utils_testrunner" ]
  }
}

pkg_config("target_defaults") {
  pkg_deps = [
    "libbrillo",
    "libchrome",
  ]
  defines = [
    "USE_TPM_DYNAMIC=${use.tpm_dynamic}",
    "USE_TPM1=${use.tpm}",
    "USE_TPM2=${use.tpm2}",
  ]
}

executable("attestation-injected-keys") {
  sources = [
    "attestation_injected_keys/main.cc",
    "attestation_injected_keys/utility.cc",
  ]

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

executable("hwsec-test-va") {
  sources = [ "verified_access/main.cc" ]
  configs += [ ":target_defaults" ]
  deps = [
    ":common_library",
    ":verified_access_library",
  ]

  # NOSORT
  pkg_deps = [
    "openssl",

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

source_set("common_library") {
  configs += [ ":target_defaults" ]
  sources = [
    "common/attestation_crypto.cc",
    "common/openssl_utility.cc",
    "well_known_key_pairs/well_known_key_pairs.cc",
  ]
}

source_set("verified_access_library") {
  configs += [ ":target_defaults" ]
  sources = [ "verified_access/verified_access.cc" ]
}

executable("fake_pca_agentd") {
  sources = [ "fake_pca_agent/main.cc" ]
  configs += [ ":target_defaults" ]
  deps = [
    ":common_library",
    ":fake_pca_agent_library",
  ]

  # NOSORT
  pkg_deps = [
    "openssl",

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

source_set("fake_pca_agent_library") {
  configs += [ ":target_defaults" ]
  sources = [
    "fake_pca_agent/issue_certificate.cc",
    "fake_pca_agent/pca_factory.cc",
    "fake_pca_agent/service.cc",
  ]
  libs = [ "hwsec-foundation" ]
  if (use.tpm2) {
    sources += [
      "fake_pca_agent/kdf.cc",
      "fake_pca_agent/pca_certify_v2.cc",
      "fake_pca_agent/pca_enroll_v2.cc",
      "fake_pca_agent/tpm2_struct_utils.cc",
    ]
    libs += [ "trunks" ]
  }
  if (use.tpm) {
    sources += [
      "fake_pca_agent/pca_certify_v1.cc",
      "fake_pca_agent/pca_enroll_v1.cc",
      "fake_pca_agent/tpm1_struct_utils.cc",
    ]
    libs += [ "tspi" ]
  }
}

if (use.test) {
  pkg_config("hwsec-test-utils_testrunner_config") {
    pkg_deps = [ "libchrome-test" ]
  }

  executable("hwsec-test-utils_testrunner") {
    sources = [ "verified_access/verified_access_test.cc" ]
    configs += [
      ":target_defaults",
      ":hwsec-test-utils_testrunner_config",
      "//common-mk:test",
    ]
    deps = [
      ":common_library",
      ":fake_pca_agent_library",
      ":verified_access_library",
      "//common-mk/testrunner",
    ]
    if (use.tpm2) {
      sources += [
        "fake_pca_agent/pca_certify_v2_test.cc",
        "fake_pca_agent/pca_enroll_v2_test.cc",
      ]
      libs = [ "trunks" ]
    } else {
      sources += [
        "fake_pca_agent/pca_certify_v1_test.cc",
        "fake_pca_agent/pca_enroll_v1_test.cc",
      ]
      libs = [ "tspi" ]
    }

    # NOSORT
    pkg_deps = [
      "openssl",

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