# Copyright 2018 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/generate-dbus-proxies.gni")
import("//common-mk/pkg_config.gni")

group("all") {
  deps = [
    ":backlight_tool",
    ":check_powerd_config",
    ":cpufreq_config",
    ":dump_power_status",
    ":inject_powerd_input_event",
    ":libpolicy",
    ":libpolicy_stub",
    ":libpowerd",
    ":libsystem",
    ":libsystem_stub",
    ":libutil",
    ":memory_suspend_test",
    ":power_supply_info",
    ":powerd",
    ":powerd_dbus_suspend",
    ":powerd_setuid_helper",
    ":send_debug_power_status",
    ":set_cellular_transmit_power",
    ":set_power_policy",
    ":set_wifi_transmit_power",
    ":suspend_delay_sample",
  ]
  if (use.cellular) {
    deps += [ ":generate_modemmanager_proxies" ]
  }
  if (use.test) {
    deps += [
      ":libutil_test",
      ":power_manager_daemon_test",
      ":power_manager_policy_test",
      ":power_manager_system_test",
      ":power_manager_util_test",
    ]
  }
  if (use.amd64) {
    deps += [ ":dump_intel_rapl_consumption" ]
  }
  if (use.fuzzer) {
    deps += [
      ":ambient_light_handler_fuzzer",
      ":internal_backlight_controller_fuzzer",
      ":powerd_acpi_wakeup_helper_fuzzer",
      ":powerd_als_fuzzer",
      ":powerd_internal_backlight_fuzzer",
      ":powerd_suspend_configurator_fuzzer",
      ":thermal_device_fuzzer",
    ]
  }

  # TODO(b/188798246) Remove this once qc-netmgr is merged back into modemmanager
  if (use.qrtr) {
    deps += [ ":generate_upstart_proxies" ]
  }
}

# TODO(b/188798246) Remove this once qc-netmgr is merged back into modemmanager
if (use.qrtr) {
  generate_dbus_proxies("generate_upstart_proxies") {
    upstart_in_dir = "${sysroot}/usr/share/dbus-1/interfaces/"
    proxy_output_file = "include/upstart/dbus-proxies.h"
    sources = [ "${upstart_in_dir}/com.ubuntu.Upstart.xml" ]
  }
}

if (use.cellular) {
  generate_dbus_proxies("generate_modemmanager_proxies") {
    modemmanager_in_dir = "${sysroot}/usr/share/dbus-1/interfaces/"
    proxy_output_file = "include/modemmanager/dbus-proxies.h"
    sources = [
      "${modemmanager_in_dir}/org.freedesktop.ModemManager1.Modem.Sar.xml",
      "${modemmanager_in_dir}/org.freedesktop.ModemManager1.Modem.xml",
      "${modemmanager_in_dir}/org.freedesktop.ModemManager1.xml",
      "dbus_bindings/dbus-objectmanager.dbus-xml",
    ]
  }
}

pkg_config("target_defaults") {
  defines = [
    "USE_CELLULAR=${use.cellular}",
    "USE_IIOSERVICE=${use.iioservice}",
    "USE_QRTR=${use.qrtr}",
  ]

  # NOSORT
  pkg_deps = [
    "libbrillo",
    "libchrome",
    "libcros_config",
    "libshill-client",
    "libshill-dbus-client",
    "libec",
    "libml-client",
    "libmojo",
    "libudev",
    "re2",

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

  # TODO(b/188798246) Remove this once qc-netmgr is merged back into modemmanager.
  if (use.qrtr) {
    pkg_deps += [
      "gio-2.0",
      "gio-unix-2.0",
      "glib-2.0",
      "gthread-2.0",
    ]
    libs = [ "qrtr" ]
  }
}

pkg_config("libchrome_test_config") {
  pkg_deps = [ "libchrome-test" ]
}

pkg_config("libutil_dependent_config") {
  pkg_deps = [ "libmetrics" ]
}

static_library("libutil") {
  sources = [
    "common/activity_logger.cc",
    "common/battery_percentage_converter.cc",
    "common/clock.cc",
    "common/cros_config_prefs_source.cc",
    "common/file_prefs_store.cc",
    "common/metrics_constants.cc",
    "common/metrics_sender.cc",
    "common/power_constants.cc",
    "common/prefs.cc",
    "common/util.cc",
  ]
  configs += [ ":target_defaults" ]
  all_dependent_configs = [ ":libutil_dependent_config" ]
}

static_library("libsystem") {
  sources = [
    "powerd/system/acpi_wakeup_helper.cc",
    "powerd/system/ambient_light_sensor.cc",
    "powerd/system/ambient_light_sensor_delegate.cc",
    "powerd/system/ambient_light_sensor_delegate_file.cc",
    "powerd/system/ambient_light_sensor_delegate_mojo.cc",
    "powerd/system/ambient_light_sensor_info.cc",
    "powerd/system/ambient_light_sensor_manager_file.cc",
    "powerd/system/ambient_light_sensor_manager_mojo.cc",
    "powerd/system/ambient_light_sensor_watcher_interface.cc",
    "powerd/system/ambient_light_sensor_watcher_mojo.cc",
    "powerd/system/ambient_light_sensor_watcher_udev.cc",
    "powerd/system/arc_timer_manager.cc",
    "powerd/system/async_file_reader.cc",
    "powerd/system/audio_client.cc",
    "powerd/system/bluez_battery_provider.cc",
    "powerd/system/cros_ec_device_event.cc",
    "powerd/system/cros_ec_helper.cc",
    "powerd/system/dark_resume.cc",
    "powerd/system/dbus_wrapper.cc",
    "powerd/system/display/display_info.cc",
    "powerd/system/display/display_power_setter.cc",
    "powerd/system/display/display_watcher.cc",
    "powerd/system/display/external_display.cc",
    "powerd/system/ec_keyboard_backlight.cc",
    "powerd/system/event_device.cc",
    "powerd/system/external_ambient_light_sensor_factory_file.cc",
    "powerd/system/external_ambient_light_sensor_factory_mojo.cc",
    "powerd/system/input_watcher.cc",
    "powerd/system/internal_backlight.cc",
    "powerd/system/lockfile_checker.cc",
    "powerd/system/machine_quirks.cc",
    "powerd/system/peripheral_battery_watcher.cc",
    "powerd/system/pluggable_internal_backlight.cc",
    "powerd/system/power_supply.cc",
    "powerd/system/rolling_average.cc",
    "powerd/system/sensor_service_handler.cc",
    "powerd/system/sensor_service_handler_observer.cc",
    "powerd/system/smart_discharge_configurator.cc",
    "powerd/system/suspend_configurator.cc",
    "powerd/system/suspend_freezer.cc",
    "powerd/system/tagged_device.cc",
    "powerd/system/thermal/cooling_device.cc",
    "powerd/system/thermal/device_thermal_state.cc",
    "powerd/system/thermal/thermal_device.cc",
    "powerd/system/thermal/thermal_device_factory.cc",
    "powerd/system/udev.cc",
    "powerd/system/user_proximity_watcher.cc",
    "powerd/system/wake_on_dp_configurator.cc",
    "powerd/system/wakeup_device.cc",
    "powerd/system/wakeup_source_identifier.cc",
    "powerd/system/wilco_charge_controller_helper.cc",
  ]
  configs += [ ":target_defaults" ]
  libs = [ "rt" ]
  deps = [
    "//iioservice/libiioservice_ipc:libiioservice_ipc",
    "//iioservice/libiioservice_ipc:libiioservice_ipc_mojom",
  ]
  if (use.cellular) {
    sources += [ "powerd/system/dbus_objectmanager_wrapper.cc" ]
    deps += [ ":generate_modemmanager_proxies" ]
  }
}

pkg_config("libsystem_stub_dependent_config") {
  pkg_deps = [ "dbus-1" ]
}

static_library("libsystem_stub") {
  sources = [
    "powerd/system/acpi_wakeup_helper_stub.cc",
    "powerd/system/ambient_light_sensor_manager_stub.cc",
    "powerd/system/ambient_light_sensor_stub.cc",
    "powerd/system/ambient_light_sensor_watcher_observer_stub.cc",
    "powerd/system/ambient_light_sensor_watcher_stub.cc",
    "powerd/system/audio_client_stub.cc",
    "powerd/system/backlight_stub.cc",
    "powerd/system/charge_controller_helper_stub.cc",
    "powerd/system/cros_ec_helper_stub.cc",
    "powerd/system/dark_resume_stub.cc",
    "powerd/system/dbus_wrapper_stub.cc",
    "powerd/system/display/display_power_setter_stub.cc",
    "powerd/system/display/display_watcher_stub.cc",
    "powerd/system/event_device_stub.cc",
    "powerd/system/external_ambient_light_sensor_factory_stub.cc",
    "powerd/system/input_watcher_stub.cc",
    "powerd/system/lockfile_checker_stub.cc",
    "powerd/system/machine_quirks_stub.cc",
    "powerd/system/power_supply_stub.cc",
    "powerd/system/thermal/thermal_device_stub.cc",
    "powerd/system/udev_stub.cc",
    "powerd/system/user_proximity_watcher_stub.cc",
    "powerd/system/wakeup_source_identifier_stub.cc",
  ]
  configs += [ ":target_defaults" ]
  all_dependent_configs = [ ":libsystem_stub_dependent_config" ]
  deps = [ "//iioservice/libiioservice_ipc:libiioservice_ipc_mojom" ]
}

static_library("libpolicy") {
  sources = [
    "powerd/policy/adaptive_charging_controller.cc",
    "powerd/policy/ambient_light_handler.cc",
    "powerd/policy/backlight_controller.cc",
    "powerd/policy/cellular_controller.cc",
    "powerd/policy/charge_controller.cc",
    "powerd/policy/dim_advisor.cc",
    "powerd/policy/external_ambient_light_handler.cc",
    "powerd/policy/external_backlight_controller.cc",
    "powerd/policy/input_device_controller.cc",
    "powerd/policy/input_event_handler.cc",
    "powerd/policy/internal_backlight_controller.cc",
    "powerd/policy/keyboard_backlight_controller.cc",
    "powerd/policy/shutdown_from_suspend.cc",
    "powerd/policy/state_controller.cc",
    "powerd/policy/suspend_delay_controller.cc",
    "powerd/policy/suspender.cc",
    "powerd/policy/thermal_event_handler.cc",
    "powerd/policy/user_proximity_handler.cc",
    "powerd/policy/user_proximity_voting.cc",
    "powerd/policy/wifi_controller.cc",
  ]
  configs += [ ":target_defaults" ]
  libs = [ "m" ]
  deps = [ "//iioservice/libiioservice_ipc:libiioservice_ipc_mojom" ]
  if (use.cellular) {
    deps += [ ":generate_modemmanager_proxies" ]
  }
  if (use.qrtr) {
    deps += [ ":generate_upstart_proxies" ]
  }
}

static_library("libpolicy_stub") {
  sources = [
    "powerd/policy/backlight_controller_observer_stub.cc",
    "powerd/policy/backlight_controller_stub.cc",
  ]
  configs += [ ":target_defaults" ]
}

pkg_config("libpowerd_dependent_config") {
  # NOSORT
  pkg_deps = [
    "libmetrics",
    "libtpm_manager-client",

    # system_api depends on protobuf. It must appear before protobuf here so the
    # linker flags are in the right order.
    "system_api",
    "protobuf",
  ]
}

static_library("libpowerd") {
  sources = [
    "powerd/daemon.cc",
    "powerd/metrics_collector.cc",
  ]
  configs += [ ":target_defaults" ]
  all_dependent_configs = [ ":libpowerd_dependent_config" ]
  deps = [
    ":libpolicy",
    ":libsystem",
    ":libutil",
  ]
}

executable("powerd") {
  sources = [ "powerd/main.cc" ]
  configs += [ ":target_defaults" ]
  deps = [ ":libpowerd" ]
}

executable("powerd_setuid_helper") {
  sources = [ "powerd/powerd_setuid_helper.cc" ]
  configs += [ ":target_defaults" ]
}

executable("set_cellular_transmit_power") {
  sources = [ "powerd/set_cellular_transmit_power.cc" ]
  configs += [ ":target_defaults" ]
}

pkg_config("set_wifi_transmit_power_config") {
  pkg_deps = [ "libnl-genl-3.0" ]
}

executable("set_wifi_transmit_power") {
  sources = [ "powerd/set_wifi_transmit_power.cc" ]
  configs += [
    ":set_wifi_transmit_power_config",
    ":target_defaults",
  ]
}

executable("backlight_tool") {
  sources = [ "tools/backlight_tool.cc" ]
  configs += [ ":target_defaults" ]
  deps = [
    ":libpolicy",
    ":libsystem",
    ":libsystem_stub",
    ":libutil",
  ]
}

executable("check_powerd_config") {
  sources = [ "tools/check_powerd_config.cc" ]
  configs += [ ":target_defaults" ]
  deps = [ ":libutil" ]
}

executable("cpufreq_config") {
  sources = [ "tools/cpufreq_config.cc" ]
  configs += [ ":target_defaults" ]
  deps = [
    ":libsystem",
    ":libsystem_stub",
    ":libutil",
  ]
}

executable("inject_powerd_input_event") {
  sources = [ "tools/inject_powerd_input_event.cc" ]
  configs += [ ":target_defaults" ]
}

executable("memory_suspend_test") {
  sources = [ "tools/memory_suspend_test.cc" ]
  configs += [ ":target_defaults" ]
}

executable("powerd_dbus_suspend") {
  sources = [ "tools/powerd_dbus_suspend.cc" ]
  configs += [ ":target_defaults" ]
  deps = [ ":libutil" ]
}

executable("power_supply_info") {
  sources = [ "tools/power_supply_info.cc" ]
  configs += [ ":target_defaults" ]
  deps = [
    ":libsystem",
    ":libsystem_stub",
    ":libutil",
  ]
}

executable("dump_power_status") {
  sources = [ "tools/dump_power_status.cc" ]
  configs += [ ":target_defaults" ]
  deps = [
    ":libsystem",
    ":libsystem_stub",
    ":libutil",
  ]
}

executable("send_debug_power_status") {
  sources = [ "tools/send_debug_power_status.cc" ]
  configs += [ ":target_defaults" ]
}

executable("set_power_policy") {
  sources = [ "tools/set_power_policy.cc" ]
  configs += [ ":target_defaults" ]
}

executable("suspend_delay_sample") {
  sources = [ "tools/suspend_delay_sample.cc" ]
  configs += [ ":target_defaults" ]
}

if (use.fuzzer || use.test) {
  static_library("libutil_test") {
    sources = [
      "common/action_recorder.cc",
      "common/battery_percentage_converter.cc",
      "common/fake_prefs.cc",
      "common/metrics_sender_stub.cc",
      "common/test_main_loop_runner.cc",
    ]
    configs += [ ":target_defaults" ]
  }
}

if (use.test) {
  executable("power_manager_util_test") {
    sources = [
      "common/activity_logger_test.cc",
      "common/battery_percentage_converter_test.cc",
      "common/prefs_test.cc",
      "common/testrunner.cc",
      "common/util_test.cc",
    ]
    configs += [
      "//common-mk:test",
      ":target_defaults",
      ":libchrome_test_config",
    ]
    deps = [
      ":libutil",
      ":libutil_test",
    ]
  }

  pkg_config("power_manager_system_test_config") {
    # For base::MockTimer.
    pkg_deps = [ "libchrome-test" ]
  }

  executable("power_manager_system_test") {
    sources = [
      "common/testrunner.cc",
      "powerd/system/acpi_wakeup_helper_test.cc",
      "powerd/system/ambient_light_sensor_delegate_file_test.cc",
      "powerd/system/ambient_light_sensor_delegate_mojo_test.cc",
      "powerd/system/ambient_light_sensor_delegate_test.cc",
      "powerd/system/ambient_light_sensor_manager_file_test.cc",
      "powerd/system/ambient_light_sensor_manager_mojo_test.cc",
      "powerd/system/ambient_light_sensor_test.cc",
      "powerd/system/ambient_light_sensor_watcher_mojo_test.cc",
      "powerd/system/ambient_light_sensor_watcher_udev_test.cc",
      "powerd/system/arc_timer_manager_test.cc",
      "powerd/system/async_file_reader_test.cc",
      "powerd/system/audio_client_test.cc",
      "powerd/system/bluez_battery_provider_test.cc",
      "powerd/system/display/display_watcher_test.cc",
      "powerd/system/display/external_display_test.cc",
      "powerd/system/ec_keyboard_backlight_test.cc",
      "powerd/system/fake_sensor_device.cc",
      "powerd/system/fake_sensor_service.cc",
      "powerd/system/input_watcher_test.cc",
      "powerd/system/internal_backlight_test.cc",
      "powerd/system/lockfile_checker_test.cc",
      "powerd/system/machine_quirks_test.cc",
      "powerd/system/peripheral_battery_watcher_test.cc",
      "powerd/system/pluggable_internal_backlight_test.cc",
      "powerd/system/power_supply_test.cc",
      "powerd/system/rolling_average_test.cc",
      "powerd/system/sensor_service_handler_test.cc",
      "powerd/system/suspend_configurator_test.cc",
      "powerd/system/suspend_freezer_test.cc",
      "powerd/system/tagged_device_test.cc",
      "powerd/system/thermal/cooling_device_test.cc",
      "powerd/system/thermal/thermal_device_factory_test.cc",
      "powerd/system/user_proximity_watcher_test.cc",
      "powerd/system/wakeup_device_test.cc",
      "powerd/system/wakeup_source_identifier_test.cc",
    ]
    configs += [
      "//common-mk:test",
      ":power_manager_system_test_config",
      ":target_defaults",
      ":libchrome_test_config",
    ]
    deps = [
      ":libsystem",
      ":libsystem_stub",
      ":libutil",
      ":libutil_test",
    ]
  }

  executable("power_manager_policy_test") {
    sources = [
      "common/testrunner.cc",
      "powerd/policy/adaptive_charging_controller_test.cc",
      "powerd/policy/ambient_light_handler_test.cc",
      "powerd/policy/backlight_controller_test_util.cc",
      "powerd/policy/cellular_controller_test.cc",
      "powerd/policy/charge_controller_test.cc",
      "powerd/policy/dim_advisor_test.cc",
      "powerd/policy/external_backlight_controller_test.cc",
      "powerd/policy/input_device_controller_test.cc",
      "powerd/policy/input_event_handler_test.cc",
      "powerd/policy/internal_backlight_controller_test.cc",
      "powerd/policy/keyboard_backlight_controller_test.cc",
      "powerd/policy/shutdown_from_suspend_test.cc",
      "powerd/policy/state_controller_test.cc",
      "powerd/policy/suspend_delay_controller_test.cc",
      "powerd/policy/suspender_test.cc",
      "powerd/policy/thermal_event_handler_test.cc",
      "powerd/policy/user_proximity_handler_test.cc",
      "powerd/policy/user_proximity_voting_test.cc",
      "powerd/policy/wifi_controller_test.cc",
    ]
    configs += [
      "//common-mk:test",
      ":target_defaults",
      ":libchrome_test_config",
    ]
    deps = [
      ":libpolicy",
      ":libpolicy_stub",
      ":libsystem",
      ":libsystem_stub",
      ":libutil",
      ":libutil_test",
    ]
  }

  executable("power_manager_daemon_test") {
    sources = [
      "common/testrunner.cc",
      "powerd/daemon_test.cc",
      "powerd/metrics_collector_test.cc",
    ]
    configs += [
      "//common-mk:test",
      ":target_defaults",
      ":libchrome_test_config",
    ]
    deps = [
      ":libpolicy",
      ":libpolicy_stub",
      ":libpowerd",
      ":libsystem",
      ":libsystem_stub",
      ":libutil",
      ":libutil_test",
    ]
  }
}

if (use.amd64) {
  executable("dump_intel_rapl_consumption") {
    sources = [ "tools/dump_intel_rapl_consumption.cc" ]
    configs += [ ":target_defaults" ]
    deps = [ ":libutil" ]
  }
}

if (use.fuzzer) {
  static_library("libpolicy_test") {
    sources = [ "powerd/policy/ambient_light_pref_fuzz_util.cc" ]
    configs += [ ":target_defaults" ]
  }
  executable("ambient_light_handler_fuzzer") {
    sources = [ "powerd/policy/ambient_light_handler_fuzzer.cc" ]
    configs += [
      "//common-mk/common_fuzzer",
      ":target_defaults",
    ]
    deps = [
      ":libpolicy_test",
      ":libpowerd",
      ":libsystem_stub",
    ]
  }
  executable("internal_backlight_controller_fuzzer") {
    sources = [ "powerd/policy/internal_backlight_controller_fuzzer.cc" ]
    configs += [
      "//common-mk/common_fuzzer",
      ":target_defaults",
    ]
    deps = [
      ":libpolicy_test",
      ":libpowerd",
      ":libsystem_stub",
      ":libutil_test",
    ]
  }
  executable("powerd_acpi_wakeup_helper_fuzzer") {
    sources = [ "powerd/system/acpi_wakeup_helper_fuzzer.cc" ]
    configs += [
      "//common-mk/common_fuzzer",
      "//common-mk:test",
      ":target_defaults",
    ]
    deps = [ ":libpowerd" ]
  }
  executable("powerd_internal_backlight_fuzzer") {
    sources = [ "powerd/system/internal_backlight_fuzzer.cc" ]
    configs += [
      "//common-mk/common_fuzzer",
      ":target_defaults",
    ]
    deps = [ ":libpowerd" ]
  }
  executable("powerd_suspend_configurator_fuzzer") {
    sources = [ "powerd/system/suspend_configurator_fuzzer.cc" ]
    configs += [
      "//common-mk/common_fuzzer",
      "//common-mk:test",
      ":fuzzer_config",
      ":target_defaults",
    ]
    deps = [
      ":libpowerd",
      ":libsystem_stub",
      ":libutil_test",
    ]
  }
  executable("thermal_device_fuzzer") {
    sources = [ "powerd/system/thermal/thermal_device_fuzzer.cc" ]
    configs += [
      "//common-mk/common_fuzzer",
      "//common-mk:test",
      ":fuzzer_config",
      ":target_defaults",
    ]
    deps = [
      ":libpowerd",
      ":libsystem_stub",
      ":libutil_test",
    ]
  }
}

# Fuzzer target.
if (use.fuzzer) {
  pkg_config("fuzzer_config") {
    pkg_deps = [
      "libbrillo-test",
      "libchrome-test",
    ]
  }
  executable("powerd_als_fuzzer") {
    sources = [ "powerd/system/fuzzers/powerd_als_fuzzer.cc" ]
    configs += [
      "//common-mk/common_fuzzer:common_fuzzer",
      "//common-mk:test",
      ":fuzzer_config",
      ":target_defaults",
    ]
    deps = [
      ":libsystem",
      ":libutil",
    ]
  }
}
