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