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

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

  pkg_deps = [
    "libbrillo-${libbase_ver}",
    "libchrome-${libbase_ver}",
    "libcros_config",
    "libudev",

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

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

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_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/sar_watcher.cc",
    "powerd/system/suspend_configurator.cc",
    "powerd/system/tagged_device.cc",
    "powerd/system/udev.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/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/user_proximity_handler.cc",
    "powerd/policy/user_proximity_voting.cc",
    "powerd/policy/wifi_controller.cc",
  ]
  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-${libbase_ver}" ]
}

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

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

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",
    ]
    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-${libbase_ver}" ]
  }

  executable("power_manager_system_test") {
    configs += [
      "//common-mk:test",
      ":power_manager_system_test_config",
      ":target_defaults",
    ]
    sources = [
      "common/testrunner.cc",
      "powerd/system/acpi_wakeup_helper_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/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/sar_watcher_test.cc",
      "powerd/system/suspend_configurator_test.cc",
      "powerd/system/tagged_device_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",
    ]
    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/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",
    ]
    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-${libbase_ver}",
      "libchrome-test-${libbase_ver}",
    ]
  }
  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",
    ]
  }
}
