|  | # Copyright 2020 The Fuchsia 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("//build/config.gni") | 
|  | import("//src/sys/build/components.gni") | 
|  |  | 
|  | ############################################################################### | 
|  | # GROUPS | 
|  | ############################################################################### | 
|  | group("forensics") { | 
|  | testonly = true | 
|  |  | 
|  | deps = [ | 
|  | ":pkg", | 
|  | ":tests", | 
|  | "crasher", | 
|  | "snapshot", | 
|  | ] | 
|  | } | 
|  |  | 
|  | group("tests") { | 
|  | testonly = true | 
|  |  | 
|  | deps = [ | 
|  | "crash_reports/tests", | 
|  | "exceptions/tests", | 
|  | "feedback_data/system_log_recorder/tests", | 
|  | "feedback_data/tests", | 
|  | "last_reboot/tests", | 
|  | "snapshot/tests", | 
|  | "utils/tests", | 
|  | ] | 
|  | } | 
|  |  | 
|  | group("infra_configs") { | 
|  | deps = [ ":crash_reports_upload_to_prod_server_config" ] | 
|  | } | 
|  |  | 
|  | group("userdebug_configs") { | 
|  | deps = [ ":crash_reports_userdebug_config" ] | 
|  | } | 
|  |  | 
|  | group("user_configs") { | 
|  | deps = [ | 
|  | ":crash_reports_user_config", | 
|  | # TODO(fxbug.dev/70450): re-enable once the budget logic works. | 
|  | # ":feedback_data_limit_inspect_data", | 
|  | ] | 
|  | } | 
|  |  | 
|  | ############################################################################### | 
|  | # PACKAGES | 
|  | ############################################################################### | 
|  | # We use a template to keep the real and copy packages in sync. | 
|  | template("forensics_package") { | 
|  | fuchsia_package(target_name) { | 
|  | package_name = invoker.package_name | 
|  |  | 
|  | deps = [ | 
|  | ":crash_reports", | 
|  | ":exceptions", | 
|  | ":feedback_data", | 
|  | ":last_reboot", | 
|  | ] | 
|  | } | 
|  | } | 
|  |  | 
|  | # The real package. | 
|  | forensics_package("pkg") { | 
|  | package_name = "forensics" | 
|  | } | 
|  |  | 
|  | # A copy package for integration test purposes to make sure that: | 
|  | # * all the components used in the test are updated ephemerally, even if the real package | 
|  | #   is a base package. | 
|  | # * any config_data() for the real package does not impact any component used in the test. | 
|  | forensics_package("copy-pkg") { | 
|  | package_name = "copy-forensics" | 
|  | } | 
|  |  | 
|  | # A copy package for integration test purposes where we want a valid override config_data() | 
|  | # for crash_reports that only affects that copy package. | 
|  | forensics_package("copy-pkg-valid-crash-reports-override-config") { | 
|  | package_name = "copy-forensics-valid-crash-reports-override-config" | 
|  | } | 
|  |  | 
|  | # A copy package for integration test purposes where we want an invalid override config_data() | 
|  | # for crash_reports that only affects that copy package. | 
|  | forensics_package("copy-pkg-invalid-crash-reports-override-config") { | 
|  | package_name = "copy-forensics-invalid-crash-reports-override-config" | 
|  | } | 
|  |  | 
|  | ############################################################################### | 
|  | # COMPONENTS | 
|  | ############################################################################### | 
|  | fuchsia_component("crash_reports") { | 
|  | manifest = "crash_reports/meta/crash_reports.cmx" | 
|  |  | 
|  | deps = [ | 
|  | ":crash_reports_default_config", | 
|  | ":crash_reports_exe", | 
|  | ] | 
|  | } | 
|  |  | 
|  | fuchsia_component("exceptions") { | 
|  | manifest = "exceptions/meta/exceptions.cmx" | 
|  |  | 
|  | deps = [ | 
|  | ":exception_handler_exe", | 
|  | ":exceptions_exe", | 
|  | ] | 
|  | } | 
|  |  | 
|  | fuchsia_component("feedback_data") { | 
|  | manifest = "feedback_data/meta/feedback_data.cmx" | 
|  |  | 
|  | deps = [ | 
|  | ":feedback_data_config", | 
|  | ":feedback_data_exe", | 
|  | ":system_log_recorder_exe", | 
|  | ] | 
|  | } | 
|  |  | 
|  | fuchsia_component("last_reboot") { | 
|  | manifest = "last_reboot/meta/last_reboot.cmx" | 
|  |  | 
|  | deps = [ ":last_reboot_exe" ] | 
|  | } | 
|  |  | 
|  | ############################################################################### | 
|  | # EXECUTABLES | 
|  | ############################################################################### | 
|  | # We use a template to have multiple copies of the same binary named differently. | 
|  | template("forensics_unified_binary") { | 
|  | executable(target_name) { | 
|  | output_name = invoker.output_name | 
|  |  | 
|  | sources = [ "unified_binary.cc" ] | 
|  |  | 
|  | deps = [ | 
|  | "crash_reports:main", | 
|  | "exceptions:main", | 
|  | "exceptions/handler:main", | 
|  | "feedback_data:main", | 
|  | "feedback_data/system_log_recorder:main", | 
|  | "last_reboot:main", | 
|  | "//sdk/lib/syslog/cpp", | 
|  | ] | 
|  | } | 
|  | } | 
|  |  | 
|  | forensics_unified_binary("crash_reports_exe") { | 
|  | output_name = "crash_reports" | 
|  | } | 
|  |  | 
|  | forensics_unified_binary("exceptions_exe") { | 
|  | output_name = "exceptions" | 
|  | } | 
|  |  | 
|  | forensics_unified_binary("exception_handler_exe") { | 
|  | output_name = "exception_handler" | 
|  | } | 
|  |  | 
|  | forensics_unified_binary("feedback_data_exe") { | 
|  | output_name = "feedback_data" | 
|  | } | 
|  |  | 
|  | forensics_unified_binary("last_reboot_exe") { | 
|  | output_name = "last_reboot" | 
|  | } | 
|  |  | 
|  | forensics_unified_binary("system_log_recorder_exe") { | 
|  | output_name = "system_log_recorder" | 
|  | } | 
|  |  | 
|  | ############################################################################### | 
|  | # CONFIGS | 
|  | ############################################################################### | 
|  | resource("crash_reports_default_config") { | 
|  | sources = [ "crash_reports/configs/default.json" ] | 
|  |  | 
|  | outputs = [ "data/crash_reports/default_config.json" ] | 
|  | } | 
|  |  | 
|  | config_data("crash_reports_user_config") { | 
|  | for_pkg = "forensics" | 
|  |  | 
|  | sources = [ "crash_reports/configs/user.json" ] | 
|  |  | 
|  | outputs = [ "crash_reports/override_config.json" ] | 
|  | } | 
|  |  | 
|  | config_data("crash_reports_userdebug_config") { | 
|  | for_pkg = "forensics" | 
|  |  | 
|  | sources = [ "crash_reports/configs/userdebug.json" ] | 
|  |  | 
|  | outputs = [ "crash_reports/override_config.json" ] | 
|  | } | 
|  |  | 
|  | config_data("crash_reports_upload_to_prod_server_config") { | 
|  | for_pkg = "forensics" | 
|  |  | 
|  | sources = [ "crash_reports/configs/upload_to_prod_server.json" ] | 
|  |  | 
|  | outputs = [ "crash_reports/override_config.json" ] | 
|  | } | 
|  |  | 
|  | resource("feedback_data_config") { | 
|  | sources = [ "feedback_data/config.json" ] | 
|  |  | 
|  | outputs = [ "data/feedback_data/config.json" ] | 
|  | } | 
|  |  | 
|  | config_data("feedback_data_limit_inspect_data") { | 
|  | for_pkg = "forensics" | 
|  |  | 
|  | sources = [ "feedback_data/configs/limit_inspect_data" ] | 
|  |  | 
|  | outputs = [ "feedback_data/limit_inspect_data" ] | 
|  | } | 
|  |  | 
|  | config_data("exceptions_enable_jitd_on_startup") { | 
|  | for_pkg = "forensics" | 
|  |  | 
|  | sources = [ "exceptions/configs/jitd_on_startup.json" ] | 
|  |  | 
|  | outputs = [ "exceptions/enable_jitd_on_startup.json" ] | 
|  | } |