| # Copyright 2019 The ChromiumOS Authors | |
| # 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 = [ | |
| ":check_tpm_preinit_condition", | |
| ":install_minijail_conf", | |
| ":install_tmpfiles_config", | |
| ":local_data_migration", | |
| ":tpm_managerd", | |
| ] | |
| if (use.test) { | |
| deps += [ ":tpm_manager_testrunner" ] | |
| } | |
| if (use.fuzzer) { | |
| deps += [ ":tpm_manager_service_fuzzer" ] | |
| } | |
| } | |
| pkg_config("target_default_deps") { | |
| # This is a list of pkg-config dependencies | |
| pkg_deps = [ | |
| "libbrillo", | |
| "libchrome", | |
| "openssl", | |
| ] | |
| libs = [ "hwsec" ] | |
| if (use.fuzzer) { | |
| pkg_deps += [ "protobuf" ] | |
| } else { | |
| pkg_deps += [ "protobuf-lite" ] | |
| } | |
| } | |
| config("target_defaults") { | |
| configs = [ ":target_default_deps" ] | |
| defines = [ | |
| "USE_TPM_DYNAMIC=${use.tpm_dynamic}", | |
| "USE_TPM1=${use.tpm}", | |
| "USE_TPM2=${use.tpm2}", | |
| "USE_TPM_INSECURE_FALLBACK=${use.tpm_insecure_fallback}", | |
| "USE_OS_INSTALL_SERVICE=${use.os_install_service}", | |
| "USE_CR50_ONBOARD=${use.cr50_onboard}", | |
| "USE_TI50_ONBOARD=${use.ti50_onboard}", | |
| ] | |
| } | |
| # 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" ] | |
| } | |
| # A library for server code. | |
| config("server_library_tpm2_config") { | |
| libs = [ "trunks" ] | |
| } | |
| config("server_library_tpm1_config") { | |
| libs = [ "tspi" ] | |
| } | |
| static_library("server_library") { | |
| sources = [ | |
| "server/dbus_service.cc", | |
| "server/local_data_migration.cc", | |
| "server/local_data_store_impl.cc", | |
| "server/openssl_crypto_util_impl.cc", | |
| "server/tpm_allowlist_impl.cc", | |
| "server/tpm_manager_metrics.cc", | |
| "server/tpm_manager_service.cc", | |
| ] | |
| configs += [ ":target_defaults" ] | |
| pkg_deps = [ "system_api" ] | |
| libs = [ "hwsec-foundation" ] | |
| all_dependent_configs = [] | |
| deps = [ ":legacy_local_data_proto" ] | |
| 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" ] | |
| } | |
| if (use.tpm) { | |
| 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" ] | |
| } | |
| } | |
| # The tpm_manager daemon. | |
| pkg_config("tpm_managerd_config") { | |
| pkg_deps = [ | |
| "libmetrics", | |
| "libminijail", | |
| ] | |
| } | |
| executable("tpm_managerd") { | |
| sources = [ "server/main.cc" ] | |
| configs += [ | |
| ":target_defaults", | |
| ":tpm_managerd_config", | |
| ] | |
| libs = [ "hwsec-profiling" ] | |
| deps = [ ":server_library" ] | |
| pkg_deps = [ "system_api" ] | |
| } | |
| # Local data migrator. | |
| executable("local_data_migration") { | |
| sources = [ "server/local_data_migration_main.cc" ] | |
| configs += [ ":target_defaults" ] | |
| deps = [ ":server_library" ] | |
| } | |
| # Determine whether to touch NoPreinitFlagFile. | |
| executable("check_tpm_preinit_condition") { | |
| install_path = "sbin" | |
| sources = [ "server/check_tpm_preinit_condition.cc" ] | |
| configs += [ ":target_defaults" ] | |
| libs = [ "rootdev" ] | |
| } | |
| # A library for externally useful tpm_manager_testtest code. | |
| static_library("tpm_manager_test") { | |
| sources = [ | |
| "server/mock_tpm_nvram_interface.cc", | |
| "server/mock_tpm_ownership_interface.cc", | |
| ] | |
| configs += [ | |
| ":target_defaults", | |
| "//common-mk:nouse_thin_archive", | |
| ] | |
| configs -= [ "//common-mk:use_thin_archive" ] | |
| pkg_deps = [ "system_api" ] | |
| } | |
| if (use.test) { | |
| pkg_config("tpm_manager_testrunner_config") { | |
| pkg_deps = [ | |
| "libbrillo-test", | |
| "libchrome-test", | |
| "libmetrics", | |
| "libtpm_manager-client", | |
| "libtpm_manager-client-test", | |
| ] | |
| } | |
| executable("tpm_manager_testrunner") { | |
| sources = [ | |
| "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", | |
| ] | |
| configs += [ | |
| "//common-mk:test", | |
| ":target_defaults", | |
| ":tpm_manager_testrunner_config", | |
| ] | |
| libs = [ "hwsec_test" ] | |
| deps = [ | |
| ":server_library", | |
| ":tpm_manager_test", | |
| ] | |
| pkg_deps = [ "system_api" ] | |
| if (use.tpm2) { | |
| sources += [ | |
| "server/tpm2_initializer_test.cc", | |
| "server/tpm2_nvram_test.cc", | |
| "server/tpm2_status_test.cc", | |
| ] | |
| libs += [ "trunks_test" ] | |
| } | |
| if (use.tpm) { | |
| sources += [ | |
| "server/tpm_connection_test.cc", | |
| "server/tpm_initializer_test.cc", | |
| "server/tpm_nvram_test.cc", | |
| ] | |
| } | |
| } | |
| } | |
| if (use.fuzzer) { | |
| executable("tpm_manager_service_fuzzer") { | |
| sources = [ "server/fuzzers/tpm_manager_service_fuzzer.cc" ] | |
| if (use.tpm) { | |
| sources += [ "server/fuzzers/tpm_fuzzer_utils_impl.cc" ] | |
| } | |
| if (use.tpm2) { | |
| sources += [ "server/fuzzers/tpm2_fuzzer_utils_impl.cc" ] | |
| } | |
| configs += [ | |
| "//common-mk/common_fuzzer:common_fuzzer", | |
| "//common-mk:test", | |
| ":target_defaults", | |
| ":local_proto_include", | |
| ] | |
| libs = [] | |
| if (use.tpm2) { | |
| libs += [ "trunks_test" ] | |
| } | |
| deps = [ | |
| ":server_library", | |
| ":tpm_manager_service_fuzzer_data_proto", | |
| ] | |
| pkg_deps = [ | |
| "libmetrics", | |
| "libprotobuf-mutator", | |
| ] | |
| } | |
| config("local_proto_include") { | |
| include_dirs = [ "${sysroot}/usr/include/tpm_manager/proto_bindings/" ] | |
| } | |
| proto_library("tpm_manager_service_fuzzer_data_proto") { | |
| proto_in_dir = "server/fuzzers" | |
| proto_out_dir = "include/tpm_manager/server/fuzzers" | |
| proto_lib_dirs = [ "${sysroot}/usr/include/chromeos/dbus/tpm_manager" ] | |
| configs = [ ":local_proto_include" ] | |
| sources = [ "${proto_in_dir}/tpm_manager_service_fuzzer_data.proto" ] | |
| } | |
| } | |
| install_config("install_minijail_conf") { | |
| sources = [ "server/minijail/tpm_managerd.conf" ] | |
| install_path = "minijail_conf" | |
| } | |
| install_config("install_tmpfiles_config") { | |
| sources = [ | |
| "server/tmpfiles.d/tpm_manager.conf", | |
| "server/tmpfiles.d/tpm_manager_freezer.conf", | |
| ] | |
| install_path = "tmpfilesd" | |
| } |