blob: 974f93f38509891b7b227eba1a2511d2cc3d4667 [file] [log] [blame]
# 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.
# TODO: Fix the visibility on some libs.
# gnlint: disable=GnLintVisibilityFlags
import("//common-mk/pkg_config.gni")
import("//common-mk/proto_library.gni")
group("all") {
deps = [
":libtpm_manager",
":local_data_migration",
":tpm_manager_client",
":tpm_manager_test",
":tpm_managerd",
]
if (use.test) {
deps += [ ":tpm_manager_testrunner" ]
}
}
pkg_config("target_default_deps") {
# This is a list of pkg-config dependencies
pkg_deps = [
"libbrillo",
"libchrome",
"libtpmcrypto",
"openssl",
]
if (use.fuzzer) {
pkg_deps += [ "protobuf" ]
} else {
pkg_deps += [ "protobuf-lite" ]
}
}
config("target_defaults") {
configs = [ ":target_default_deps" ]
defines = [ "USE_TPM2=${use.tpm2}" ]
}
# A protobuf library of legacy local data.
proto_library("legacy_local_data_proto") {
# Use -fPIC so this code can be linked into a shared library.
use_pic = true
proto_in_dir = "server"
proto_out_dir = "include/tpm_manager/server"
sources = [ "${proto_in_dir}/legacy_local_data.proto" ]
}
static_library("proto_library") {
configs -= [
"//common-mk:use_thin_archive",
"//common-mk:pie",
]
configs += [
":target_defaults",
"//common-mk:nouse_thin_archive",
# TODO: Use brillo/brillo_export.h instead to export symbols.
"//common-mk:visibility_default",
"//common-mk:pic",
]
proto_in_dir = "common"
sources = [ "${proto_in_dir}/print_tpm_manager_proto.cc" ]
}
# A shared library for clients.
shared_library("libtpm_manager") {
configs += [ ":target_defaults" ]
sources = [
"client/tpm_manager_utility.cc",
"client/tpm_nvram_dbus_proxy.cc",
"client/tpm_ownership_dbus_proxy.cc",
]
libs = [ "system_api" ]
deps = [ ":proto_library" ]
}
# A client command line utility.
executable("tpm_manager_client") {
configs += [ ":target_defaults" ]
sources = [ "client/main.cc" ]
deps = [
":libtpm_manager",
":proto_library",
]
# 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",
]
}
# A library for server code.
config("server_library_tpm2_config") {
libs = [ "trunks" ]
}
config("server_library_tpm1_config") {
libs = [
"hwsec",
"tspi",
]
}
static_library("server_library") {
configs += [ ":target_defaults" ]
sources = [
"server/dbus_service.cc",
"server/local_data_migration.cc",
"server/local_data_store_impl.cc",
"server/openssl_crypto_util_impl.cc",
"server/tpm_manager_metrics.cc",
"server/tpm_manager_service.cc",
]
if (use.tpm2) {
sources += [
"server/tpm2_initializer_impl.cc",
"server/tpm2_nvram_impl.cc",
"server/tpm2_status_impl.cc",
]
all_dependent_configs = [ ":server_library_tpm2_config" ]
} else {
sources += [
"server/tpm_connection.cc",
"server/tpm_initializer_impl.cc",
"server/tpm_nvram_impl.cc",
"server/tpm_status_impl.cc",
]
all_dependent_configs = [ ":server_library_tpm1_config" ]
}
deps = [
":legacy_local_data_proto",
":proto_library",
]
# 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",
]
}
# The tpm_manager daemon.
pkg_config("tpm_managerd_config") {
pkg_deps = [
"libmetrics",
"libminijail",
]
}
executable("tpm_managerd") {
configs += [
":target_defaults",
":tpm_managerd_config",
]
sources = [ "server/main.cc" ]
deps = [
":proto_library",
":server_library",
]
# 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",
]
}
config("local_data_migration_config") {
libs = [ "tpmcrypto" ]
}
# Local data migrator.
executable("local_data_migration") {
configs += [
":local_data_migration_config",
":target_defaults",
]
sources = [ "server/local_data_migration_main.cc" ]
deps = [ ":server_library" ]
}
# A library for externally useful tpm_manager_testtest code.
static_library("tpm_manager_test") {
configs += [
":target_defaults",
"//common-mk:nouse_thin_archive",
]
configs -= [ "//common-mk:use_thin_archive" ]
sources = [
"common/mock_tpm_nvram_interface.cc",
"common/mock_tpm_ownership_interface.cc",
]
deps = [ ":proto_library" ]
# 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",
]
}
if (use.test) {
pkg_config("tpm_manager_testrunner_config") {
pkg_deps = [
"libbrillo-test",
"libchrome-test",
"libmetrics",
]
}
executable("tpm_manager_testrunner") {
configs += [
"//common-mk:test",
":target_defaults",
":tpm_manager_testrunner_config",
]
sources = [
"client/tpm_manager_utility_test.cc",
"client/tpm_nvram_dbus_proxy_test.cc",
"client/tpm_ownership_dbus_proxy_test.cc",
# "server/dbus_service_test.cc",
"server/local_data_migration_test.cc",
"server/mock_local_data_store.cc",
"server/mock_openssl_crypto_util.cc",
"server/mock_tpm_initializer.cc",
"server/mock_tpm_nvram.cc",
"server/mock_tpm_status.cc",
"server/tpm_manager_metrics_test.cc",
"server/tpm_manager_service_test.cc",
"tpm_manager_testrunner.cc",
]
if (use.tpm2) {
sources += [
"server/tpm2_initializer_test.cc",
"server/tpm2_nvram_test.cc",
"server/tpm2_status_test.cc",
]
libs = [ "trunks_test" ]
} else {
sources += [
"server/tpm_connection_test.cc",
"server/tpm_initializer_test.cc",
]
libs = [ "hwsec_test" ]
}
deps = [
":libtpm_manager",
":proto_library",
":server_library",
":tpm_manager_test",
]
# 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",
]
}
}