# 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",
    ":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.buffet) {
    deps += [ ":buffet_command_handlers" ]
  }
  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_als_fuzzer",
    ]
  }
  if (use.trogdor_sar_hack) {
    deps += [
      ":set_cellular_transmit_power_trogdor",
      ":upstart_proxies",
    ]
  }
}

if (use.trogdor_sar_hack) {
  generate_dbus_proxies("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" ]
  }
}

pkg_config("target_defaults") {
  defines = [
    "USE_BUFFET=${use.buffet}",
    "USE_TROGDOR_SAR_HACK=${use.trogdor_sar_hack}",
  ]

  # NOSORT
  pkg_deps = [
    "libbrillo",
    "libchrome",
    "libcros_config",
    "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" ]
  }
  if (use.trogdor_sar_hack) {
    pkg_deps += [
      "gio-2.0",
      "gio-unix-2.0",
      "glib-2.0",
      "gthread-2.0",
      "qmi-glib",
    ]
    libs = [ "qrtr" ]
  }
}

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

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

static_library("libutil") {
  configs += [ ":target_defaults" ]
  all_dependent_configs = [ ":libutil_dependent_config" ]
  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",
  ]
}

static_library("libsystem") {
  configs += [ ":target_defaults" ]
  sources = [
    "powerd/system/acpi_wakeup_helper.cc",
    "powerd/system/ambient_light_sensor.cc",
    "powerd/system/ambient_light_sensor_delegate_file.cc",
    "powerd/system/ambient_light_sensor_manager.cc",
    "powerd/system/arc_timer_manager.cc",
    "powerd/system/async_file_reader.cc",
    "powerd/system/audio_client.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/event_device.cc",
    "powerd/system/input_watcher.cc",
    "powerd/system/internal_backlight.cc",
    "powerd/system/lockfile_checker.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/smart_discharge_configurator.cc",
    "powerd/system/suspend_configurator.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",
  ]
  libs = [ "rt" ]
}

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

static_library("libsystem_stub") {
  configs += [ ":target_defaults" ]
  all_dependent_configs = [ ":libsystem_stub_dependent_config" ]
  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/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/input_watcher_stub.cc",
    "powerd/system/lockfile_checker_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",
  ]
}

static_library("libpolicy") {
  configs += [ ":target_defaults" ]
  sources = [
    "powerd/policy/ambient_light_handler.cc",
    "powerd/policy/backlight_controller.cc",
    "powerd/policy/cellular_controller.cc",
    "powerd/policy/charge_controller.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",
  ]
  if (use.trogdor_sar_hack) {
    sources += [ "powerd/policy/cellular_controller_trogdor.cc" ]

    deps = [ ":upstart_proxies" ]
  }
  libs = [ "m" ]
}

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

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

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

  deps = [
    ":libpolicy",
    ":libsystem",
    ":libutil",
  ]

  if (use.buffet) {
    deps += [ ":buffet_command_handlers" ]
  }
}

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

if (use.buffet) {
  generate_dbus_proxies("generate_buffet_proxies") {
    dbus_service_config = "../buffet/dbus_bindings/dbus-service-config.json"
    proxy_output_file = "include/buffet/dbus-proxies.h"
    sources = [ "../buffet/dbus_bindings/org.chromium.Buffet.Command.xml" ]
  }
  static_library("buffet_command_handlers") {
    configs += [ ":target_defaults" ]
    sources = [ "powerd/buffet/command_handlers.cc" ]
    deps = [ ":generate_buffet_proxies" ]
  }
}

if (use.fuzzer || use.test) {
  static_library("libutil_test") {
    configs += [ ":target_defaults" ]
    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",
    ]
  }
}

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

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

  executable("power_manager_system_test") {
    configs += [
      "//common-mk:test",
      ":power_manager_system_test_config",
      ":target_defaults",
      ":libchrome_test_config",
    ]
    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_manager_test.cc",
      "powerd/system/ambient_light_sensor_test.cc",
      "powerd/system/arc_timer_manager_test.cc",
      "powerd/system/async_file_reader_test.cc",
      "powerd/system/audio_client_test.cc",
      "powerd/system/cros_ec_ioctl_test.cc",
      "powerd/system/display/display_watcher_test.cc",
      "powerd/system/display/external_display_test.cc",
      "powerd/system/input_watcher_test.cc",
      "powerd/system/internal_backlight_test.cc",
      "powerd/system/lockfile_checker_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/suspend_configurator_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",
    ]
    deps = [
      ":libsystem",
      ":libsystem_stub",
      ":libutil",
      ":libutil_test",
    ]
  }

  executable("power_manager_policy_test") {
    configs += [
      "//common-mk:test",
      ":target_defaults",
      ":libchrome_test_config",
    ]
    sources = [
      "common/testrunner.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/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",
    ]
    deps = [
      ":libpolicy",
      ":libpolicy_stub",
      ":libsystem",
      ":libsystem_stub",
      ":libutil",
      ":libutil_test",
    ]
  }

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

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

if (use.fuzzer) {
  static_library("libpolicy_test") {
    configs += [ ":target_defaults" ]
    sources = [ "powerd/policy/ambient_light_pref_fuzz_util.cc" ]
  }
  executable("ambient_light_handler_fuzzer") {
    configs += [
      "//common-mk/common_fuzzer",
      ":target_defaults",
    ]
    sources = [ "powerd/policy/ambient_light_handler_fuzzer.cc" ]
    deps = [
      ":libpolicy_test",
      ":libpowerd",
      ":libsystem_stub",
    ]
  }
  executable("internal_backlight_controller_fuzzer") {
    configs += [
      "//common-mk/common_fuzzer",
      ":target_defaults",
    ]
    sources = [ "powerd/policy/internal_backlight_controller_fuzzer.cc" ]
    deps = [
      ":libpolicy_test",
      ":libpowerd",
      ":libsystem_stub",
      ":libutil_test",
    ]
  }
}

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