#
# Copyright (C) 2019 The Android Open Source Project
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#      http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#

# Stop linter from complaining XXX_unittest.cc naming.
# gnlint: disable=GnLintSourceFileNames

import("//common-mk/generate-dbus-adaptors.gni")
import("//common-mk/generate-dbus-proxies.gni")
import("//common-mk/openssl_pem.gni")
import("//common-mk/pkg_config.gni")
import("//common-mk/proto_library.gni")
import("//update_engine/tar_bunzip2.gni")

group("all") {
  deps = [
    ":delta_generator",
    ":libpayload_consumer",
    ":libpayload_generator",
    ":libupdate_engine",
    ":libupdate_engine_client",
    ":update_engine",
    ":update_engine-dbus-adaptor",
    ":update_engine-dbus-kiosk-app-client",
    ":update_engine_client",
    ":update_metadata-protos",
  ]

  if (use.test) {
    deps += [
      ":test_http_server",
      ":test_subprocess",
      ":update_engine-test_images",
      ":update_engine-testkeys",
      ":update_engine-testkeys-ec",
      ":update_engine_test_libs",
      ":update_engine_unittests",
    ]
  }

  if (use.fuzzer) {
    deps += [
      ":update_engine_delta_performer_fuzzer",
      ":update_engine_omaha_request_action_fuzzer",
    ]
  }
}

pkg_config("target_defaults") {
  cflags_cc = [
    "-fno-strict-aliasing",
    "-Wnon-virtual-dtor",
  ]
  cflags = [ "-ffunction-sections" ]
  ldflags = [ "-Wl,--gc-sections" ]
  defines = [
    "__CHROMEOS__",
    "_FILE_OFFSET_BITS=64",
    "_POSIX_C_SOURCE=199309L",
    "USE_CFM=${use.cfm}",
    "USE_DBUS=${use.dbus}",
    "USE_FEC=0",
    "USE_HWID_OVERRIDE=${use.hwid_override}",
  ]
  include_dirs = [
    # We need this include dir because we include all the local code as
    # "update_engine/...".
    "${platform2_root}",
    "${platform2_root}/update_engine/client_library/include",
  ]

  # NOSORT
  pkg_deps = [
    "libbrillo",
    "libchrome",

    # 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",
  ]
  if (use.fuzzer) {
    pkg_deps += [ "protobuf" ]
  } else {
    pkg_deps += [ "protobuf-lite" ]
  }
}

# Protobufs.
proto_library("update_metadata-protos") {
  proto_in_dir = "."
  proto_out_dir = "include/update_engine"
  sources = [ "update_metadata.proto" ]
}

# Chrome D-Bus bindings.
generate_dbus_adaptors("update_engine-dbus-adaptor") {
  dbus_adaptors_out_dir = "include/dbus_bindings"
  sources = [ "dbus_bindings/org.chromium.UpdateEngineInterface.dbus-xml" ]
}

generate_dbus_proxies("update_engine-dbus-kiosk-app-client") {
  mock_output_file = "include/kiosk-app/dbus-proxy-mocks.h"
  proxy_output_file = "include/kiosk-app/dbus-proxies.h"
  sources = [ "dbus_bindings/org.chromium.KioskAppService.dbus-xml" ]
}

# The payload application component and common dependencies.
static_library("libpayload_consumer") {
  sources = [
    "common/action_processor.cc",
    "common/boot_control_stub.cc",
    "common/clock.cc",
    "common/constants.cc",
    "common/cpu_limiter.cc",
    "common/dynamic_partition_control_stub.cc",
    "common/error_code_utils.cc",
    "common/hash_calculator.cc",
    "common/http_common.cc",
    "common/http_fetcher.cc",
    "common/hwid_override.cc",
    "common/multi_range_http_fetcher.cc",
    "common/prefs.cc",
    "common/proxy_resolver.cc",
    "common/subprocess.cc",
    "common/terminator.cc",
    "common/utils.cc",
    "cros/platform_constants_chromeos.cc",
    "payload_consumer/bzip_extent_writer.cc",
    "payload_consumer/cached_file_descriptor.cc",
    "payload_consumer/certificate_parser_stub.cc",
    "payload_consumer/delta_performer.cc",
    "payload_consumer/extent_reader.cc",
    "payload_consumer/extent_writer.cc",
    "payload_consumer/file_descriptor.cc",
    "payload_consumer/file_descriptor_utils.cc",
    "payload_consumer/file_writer.cc",
    "payload_consumer/filesystem_verifier_action.cc",
    "payload_consumer/install_plan.cc",
    "payload_consumer/mount_history.cc",
    "payload_consumer/partition_update_generator_stub.cc",
    "payload_consumer/partition_writer_factory_chromeos.cc",
    "payload_consumer/partition_writer.cc",
    "payload_consumer/payload_constants.cc",
    "payload_consumer/payload_metadata.cc",
    "payload_consumer/payload_verifier.cc",
    "payload_consumer/postinstall_runner_action.cc",
    "payload_consumer/verity_writer_stub.cc",
    "payload_consumer/xz_extent_writer.cc",
  ]
  configs += [ ":target_defaults" ]
  libs = [
    "bz2",
    "rt",
  ]

  # TODO(crbug.com/1082873): Remove after fixing usage of deprecated
  # declarations.
  cflags_cc = [ "-Wno-error=deprecated-declarations" ]

  # TODO(deymo): Remove unused dependencies once we stop including files
  # from the root directory.
  all_dependent_pkg_deps = [
    "libbspatch",
    "libcrypto",
    "libpuffpatch",
    "xz-embedded",
  ]
  public_deps = [ ":update_metadata-protos" ]
}

# The main daemon static_library with all the code used to check for updates
# with Omaha and expose a DBus daemon.
static_library("libupdate_engine") {
  sources = [
    "certificate_checker.cc",
    "common/connection_utils.cc",
    "common/system_state.cc",
    "cros/boot_control_chromeos.cc",
    "cros/common_service.cc",
    "cros/connection_manager.cc",
    "cros/daemon_chromeos.cc",
    "cros/dbus_connection.cc",
    "cros/dbus_service.cc",
    "cros/hardware_chromeos.cc",
    "cros/image_properties_chromeos.cc",
    "cros/logging.cc",
    "cros/metrics_reporter_omaha.cc",
    "cros/omaha_request_action.cc",
    "cros/omaha_request_builder_xml.cc",
    "cros/omaha_request_params.cc",
    "cros/omaha_response_handler_action.cc",
    "cros/omaha_utils.cc",
    "cros/p2p_manager.cc",
    "cros/payload_state.cc",
    "cros/power_manager_chromeos.cc",
    "cros/real_system_state.cc",
    "cros/requisition_util.cc",
    "cros/shill_proxy.cc",
    "cros/update_attempter.cc",
    "cros/download_action_chromeos.cc",
    "libcurl_http_fetcher.cc",
    "metrics_utils.cc",
    "update_boot_flags_action.cc",
    "update_manager/boxed_value.cc",
    "update_manager/chromeos_policy.cc",
    "update_manager/default_policy.cc",
    "update_manager/enough_slots_ab_updates_policy_impl.cc",
    "update_manager/enterprise_device_policy_impl.cc",
    "update_manager/enterprise_rollback_policy_impl.cc",
    "update_manager/evaluation_context.cc",
    "update_manager/interactive_update_policy_impl.cc",
    "update_manager/minimum_version_policy_impl.cc",
    "update_manager/next_update_check_policy_impl.cc",
    "update_manager/official_build_check_policy_impl.cc",
    "update_manager/out_of_box_experience_policy_impl.cc",
    "update_manager/policy.cc",
    "update_manager/policy_test_utils.cc",
    "update_manager/real_config_provider.cc",
    "update_manager/real_device_policy_provider.cc",
    "update_manager/real_random_provider.cc",
    "update_manager/real_shill_provider.cc",
    "update_manager/real_system_provider.cc",
    "update_manager/real_time_provider.cc",
    "update_manager/real_updater_provider.cc",
    "update_manager/staging_utils.cc",
    "update_manager/state_factory.cc",
    "update_manager/update_manager.cc",
    "update_manager/update_time_restrictions_monitor.cc",
    "update_manager/update_time_restrictions_policy_impl.cc",
    "update_manager/weekly_time.cc",
    "update_status_utils.cc",
  ]
  configs += [ ":target_defaults" ]
  libs = [
    "bz2",
    "policy",
    "rootdev",
    "rt",
  ]
  all_dependent_pkg_deps = [
    "dbus-1",
    "expat",
    "libcurl",
    "libdebugd-client",
    "libmetrics",
    "libpower_manager-client",
    "libsession_manager-client",
    "libshill-client",
    "libssl",
    "libupdate_engine-client",
    "vboot_host",
  ]
  deps = [
    ":libpayload_consumer",
    ":update_engine-dbus-adaptor",
    ":update_engine-dbus-kiosk-app-client",
    ":update_metadata-protos",
  ]

  if (use.dlc) {
    all_dependent_pkg_deps += [ "libdlcservice-client" ]
  }

  if (use.chrome_network_proxy) {
    sources += [ "cros/chrome_browser_proxy_resolver.cc" ]
  }

  if (use.dlc) {
    sources += [
      "cros/dlcservice_chromeos.cc",
      "cros/excluder_chromeos.cc",
    ]
  } else {
    sources += [
      "common/dlcservice_stub.cc",
      "common/excluder_stub.cc",
    ]
  }
}

# update_engine daemon.
executable("update_engine") {
  sources = [ "main.cc" ]
  configs += [ ":target_defaults" ]
  deps = [ ":libupdate_engine" ]
}

# update_engine client library.
static_library("libupdate_engine_client") {
  sources = [
    "client_library/client_dbus.cc",
    "update_status_utils.cc",
  ]
  include_dirs = [ "client_library/include" ]
  configs += [ ":target_defaults" ]
  pkg_deps = [
    "dbus-1",
    "libupdate_engine-client",
  ]
}

# update_engine console client.
executable("update_engine_client") {
  sources = [
    "common/error_code_utils.cc",
    "cros/omaha_utils.cc",
    "cros/update_engine_client.cc",
  ]
  configs += [ ":target_defaults" ]
  deps = [ ":libupdate_engine_client" ]
}

# server-side code. This is used for delta_generator and unittests but not
# for any client code.
static_library("libpayload_generator") {
  sources = [
    "common/file_fetcher.cc",
    "common/system_state.cc",
    "cros/real_system_state.cc",
    "download_action.cc",
    "payload_generator/ab_generator.cc",
    "payload_generator/annotated_operation.cc",
    "payload_generator/blob_file_writer.cc",
    "payload_generator/block_mapping.cc",
    "payload_generator/boot_img_filesystem_stub.cc",
    "payload_generator/bzip.cc",
    "payload_generator/cow_size_estimator_stub.cc",
    "payload_generator/deflate_utils.cc",
    "payload_generator/delta_diff_generator.cc",
    "payload_generator/delta_diff_utils.cc",
    "payload_generator/ext2_filesystem.cc",
    "payload_generator/extent_ranges.cc",
    "payload_generator/extent_utils.cc",
    "payload_generator/full_update_generator.cc",
    "payload_generator/mapfile_filesystem.cc",
    "payload_generator/merge_sequence_generator.cc",
    "payload_generator/payload_file.cc",
    "payload_generator/payload_generation_config.cc",
    "payload_generator/payload_generation_config_chromeos.cc",
    "payload_generator/payload_properties.cc",
    "payload_generator/payload_signer.cc",
    "payload_generator/raw_filesystem.cc",
    "payload_generator/squashfs_filesystem.cc",
    "payload_generator/xz_chromeos.cc",
  ]
  configs += [ ":target_defaults" ]
  all_dependent_pkg_deps = [
    "ext2fs",
    "libbsdiff",
    "liblzma",
    "libpuffdiff",
  ]
  deps = [
    ":libpayload_consumer",
    ":update_metadata-protos",
  ]

  # TODO(crbug.com/1082873): Remove after fixing usage of deprecated
  # declarations.
  cflags_cc = [ "-Wno-error=deprecated-declarations" ]
}

# server-side delta generator.
executable("delta_generator") {
  sources = [ "payload_generator/generate_delta_main.cc" ]
  configs += [ ":target_defaults" ]
  configs -= [ "//common-mk:pie" ]
  deps = [
    ":libpayload_consumer",
    ":libpayload_generator",
  ]
}

if (use.test || use.fuzzer) {
  static_library("update_engine_test_libs") {
    sources = [
      "common/fake_prefs.cc",
      "common/mock_http_fetcher.cc",
      "common/test_utils.cc",
      "cros/fake_shill_proxy.cc",
      "cros/fake_system_state.cc",
      "payload_consumer/fake_file_descriptor.cc",
      "payload_generator/fake_filesystem.cc",
      "update_manager/umtest_utils.cc",
    ]

    # TODO(crbug.com/887845): After library odering issue is fixed,
    # //common-mk:test can be moved in all_dependent_configs and
    # //common-mk:test in each test configs can be removed.
    configs += [
      "//common-mk:test",
      ":target_defaults",
    ]
    pkg_deps = [ "libshill-client-test" ]
    deps = [ ":libupdate_engine" ]
  }
}

if (use.test) {
  # Public keys used for unit testing.
  genopenssl_key("update_engine-testkeys") {
    openssl_pem_in_dir = "."
    openssl_pem_out_dir = "include/update_engine"
    sources = [
      "unittest_key.pem",
      "unittest_key2.pem",
      "unittest_key_RSA4096.pem",
    ]
  }

  genopenssl_key("update_engine-testkeys-ec") {
    openssl_pem_in_dir = "."
    openssl_pem_out_dir = "include/update_engine"
    openssl_pem_algorithm = "ec"
    sources = [ "unittest_key_EC.pem" ]
  }

  # Unpacks sample images used for testing.
  tar_bunzip2("update_engine-test_images") {
    image_out_dir = "."
    sources = [ "sample_images/sample_images.tar.bz2" ]
  }

  # Test HTTP Server.
  executable("test_http_server") {
    sources = [
      "common/http_common.cc",
      "test_http_server.cc",
    ]

    # //common-mk:test should be on the top.
    # TODO(crbug.com/887845): Remove this after library odering issue is fixed.
    configs += [
      "//common-mk:test",
      ":target_defaults",
    ]
  }

  # Test subprocess helper.
  executable("test_subprocess") {
    sources = [ "test_subprocess.cc" ]

    # //common-mk:test should be on the top.
    # TODO(crbug.com/887845): Remove this after library odering issue is fixed.
    configs += [
      "//common-mk:test",
      ":target_defaults",
    ]
  }

  # Main unittest file.
  executable("update_engine_unittests") {
    sources = [
      "certificate_checker_unittest.cc",
      "common/action_pipe_unittest.cc",
      "common/action_processor_unittest.cc",
      "common/action_unittest.cc",
      "common/cpu_limiter_unittest.cc",
      "common/hash_calculator_unittest.cc",
      "common/http_fetcher_unittest.cc",
      "common/hwid_override_unittest.cc",
      "common/prefs_unittest.cc",
      "common/proxy_resolver_unittest.cc",
      "common/subprocess_unittest.cc",
      "common/terminator_unittest.cc",
      "common/utils_unittest.cc",
      "cros/boot_control_chromeos_unittest.cc",
      "cros/common_service_unittest.cc",
      "cros/connection_manager_unittest.cc",
      "cros/hardware_chromeos_unittest.cc",
      "cros/image_properties_chromeos_unittest.cc",
      "cros/metrics_reporter_omaha_unittest.cc",
      "cros/omaha_request_action_unittest.cc",
      "cros/omaha_request_builder_xml_unittest.cc",
      "cros/omaha_request_params_unittest.cc",
      "cros/omaha_response_handler_action_unittest.cc",
      "cros/omaha_utils_unittest.cc",
      "cros/p2p_manager_unittest.cc",
      "cros/payload_state_unittest.cc",
      "cros/requisition_util_unittest.cc",
      "cros/update_attempter_unittest.cc",
      "cros/download_action_chromeos_unittest.cc",
      "libcurl_http_fetcher_unittest.cc",
      "metrics_utils_unittest.cc",
      "payload_consumer/bzip_extent_writer_unittest.cc",
      "payload_consumer/cached_file_descriptor_unittest.cc",
      "payload_consumer/delta_performer_integration_test.cc",
      "payload_consumer/delta_performer_unittest.cc",
      "payload_consumer/extent_reader_unittest.cc",
      "payload_consumer/extent_writer_unittest.cc",
      "payload_consumer/file_descriptor_utils_unittest.cc",
      "payload_consumer/file_writer_unittest.cc",
      "payload_consumer/filesystem_verifier_action_unittest.cc",
      "payload_consumer/install_plan_unittest.cc",
      "payload_consumer/postinstall_runner_action_unittest.cc",
      "payload_consumer/xz_extent_writer_unittest.cc",
      "payload_generator/ab_generator_unittest.cc",
      "payload_generator/blob_file_writer_unittest.cc",
      "payload_generator/block_mapping_unittest.cc",
      "payload_generator/deflate_utils_unittest.cc",
      "payload_generator/delta_diff_utils_unittest.cc",
      "payload_generator/ext2_filesystem_unittest.cc",
      "payload_generator/extent_ranges_unittest.cc",
      "payload_generator/extent_utils_unittest.cc",
      "payload_generator/full_update_generator_unittest.cc",
      "payload_generator/mapfile_filesystem_unittest.cc",
      "payload_generator/merge_sequence_generator_unittest.cc",
      "payload_generator/payload_file_unittest.cc",
      "payload_generator/payload_generation_config_unittest.cc",
      "payload_generator/payload_properties_unittest.cc",
      "payload_generator/payload_signer_unittest.cc",
      "payload_generator/squashfs_filesystem_unittest.cc",
      "payload_generator/zip_unittest.cc",
      "testrunner.cc",
      "update_boot_flags_action_unittest.cc",
      "update_manager/boxed_value_unittest.cc",
      "update_manager/chromeos_policy_unittest.cc",
      "update_manager/enterprise_device_policy_impl_unittest.cc",
      "update_manager/enterprise_rollback_policy_impl_unittest.cc",
      "update_manager/evaluation_context_unittest.cc",
      "update_manager/generic_variables_unittest.cc",
      "update_manager/minimum_version_policy_impl_unittest.cc",
      "update_manager/prng_unittest.cc",
      "update_manager/real_device_policy_provider_unittest.cc",
      "update_manager/real_random_provider_unittest.cc",
      "update_manager/real_shill_provider_unittest.cc",
      "update_manager/real_system_provider_unittest.cc",
      "update_manager/real_time_provider_unittest.cc",
      "update_manager/real_updater_provider_unittest.cc",
      "update_manager/staging_utils_unittest.cc",
      "update_manager/update_manager_unittest.cc",
      "update_manager/update_time_restrictions_monitor_unittest.cc",
      "update_manager/update_time_restrictions_policy_impl_unittest.cc",
      "update_manager/variable_unittest.cc",
      "update_manager/weekly_time_unittest.cc",
      "update_status_utils_unittest.cc",
    ]
    if (use.dlc) {
      sources += [ "cros/excluder_chromeos_unittest.cc" ]
    }

    # //common-mk:test should be on the top.
    # TODO(crbug.com/887845): Remove this after library odering issue is fixed.
    configs += [
      "//common-mk:test",
      ":target_defaults",
    ]
    pkg_deps = [
      "libbrillo-test",
      "libchrome-test",
      "libdebugd-client-test",
      "libpower_manager-client-test",
      "libsession_manager-client-test",
      "libshill-client-test",
    ]
    deps = [
      ":libpayload_generator",
      ":libupdate_engine",
      ":update_engine_test_libs",
    ]
  }
}

# Fuzzer target.
if (use.fuzzer) {
  executable("update_engine_delta_performer_fuzzer") {
    sources = [ "payload_consumer/delta_performer_fuzzer.cc" ]
    configs += [
      "//common-mk/common_fuzzer",
      ":target_defaults",
    ]
    pkg_deps = [
      "libbrillo-test",
      "libchrome-test",
    ]
    deps = [
      ":libupdate_engine",
      ":update_engine_test_libs",
    ]
  }
  executable("update_engine_omaha_request_action_fuzzer") {
    sources = [ "cros/omaha_request_action_fuzzer.cc" ]
    configs += [
      "//common-mk/common_fuzzer",
      ":target_defaults",
    ]
    pkg_deps = [
      "libbrillo-test",
      "libchrome-test",
    ]
    deps = [
      ":libupdate_engine",
      ":update_engine_test_libs",
    ]
  }
}
