# Copyright 2020 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/deps.gni")
import("//common-mk/pkg_config.gni")

group("all") {
  deps = [
    ":install_fingerprint_headers",
    ":install_libec_headers",
    ":libec",
    ":libec_pc",
    ":libec_static",
  ]
  if (use.test) {
    deps += [ ":libec_tests" ]
  }
}

default_pkg_deps = [
  "libbrillo",
  "libchrome",
]
pkg_config("target_defaults_pkg_deps") {
  pkg_deps = default_pkg_deps
}

libec_sources = [
  "device_event_command.cc",
  "display_soc_command.cc",
  "ec_command_factory.cc",
  "fingerprint/fp_context_command.cc",
  "fingerprint/fp_context_command_factory.cc",
  "fingerprint/fp_flashprotect_command.cc",
  "fingerprint/fp_frame_command.cc",
  "fingerprint/fp_info_command.cc",
  "fingerprint/fp_mode.cc",
  "fingerprint/fp_mode_command.cc",
  "fingerprint/fp_read_match_secret_command.cc",
  "fingerprint/fp_seed_command.cc",
  "fingerprint/fp_template_command.cc",
  "get_protocol_info_command.cc",
  "get_version_command.cc",
  "mkbp_wake_mask_command.cc",
  "smart_discharge_command.cc",
  "versions_command.cc",
]

static_library("libec_static") {
  sources = libec_sources
  configs += [ ":target_defaults_pkg_deps" ]
  install_path = "lib"
}

shared_library("libec") {
  sources = libec_sources
  configs += [ ":target_defaults_pkg_deps" ]
  install_path = "lib"
}

install_config("install_libec_headers") {
  sources = [
    "charge_control_set_command.h",
    "device_event_command.h",
    "display_soc_command.h",
    "ec_command.h",
    "ec_command_async.h",
    "ec_command_factory.h",
    "get_protocol_info_command.h",
    "get_version_command.h",
    "mkbp_wake_mask_command.h",
    "mock_ec_command_factory.h",
    "pd_chip_info_command.h",
    "reboot_command.h",
    "rgb_keyboard_command.h",
    "rwsig_action_command.h",
    "smart_discharge_command.h",
    "versions_command.h",
  ]
  install_path = "/usr/include/libec"
}

install_config("install_fingerprint_headers") {
  sources = [
    "fingerprint/fp_context_command.h",
    "fingerprint/fp_context_command_factory.h",
    "fingerprint/fp_flashprotect_command.h",
    "fingerprint/fp_frame_command.h",
    "fingerprint/fp_info_command.h",
    "fingerprint/fp_mode.h",
    "fingerprint/fp_mode_command.h",
    "fingerprint/fp_read_match_secret_command.h",
    "fingerprint/fp_seed_command.h",
    "fingerprint/fp_sensor_errors.h",
    "fingerprint/fp_template_command.h",
    "fingerprint/sensor_id.h",
    "fingerprint/sensor_image.h",
    "fingerprint/template_info.h",
  ]
  install_path = "/usr/include/libec/fingerprint"
}

if (use.test) {
  executable("libec_tests") {
    sources = [
      "charge_control_set_command_test.cc",
      "device_event_command_test.cc",
      "display_soc_command_test.cc",
      "ec_command_async_test.cc",
      "ec_command_test.cc",
      "fingerprint/fp_context_command_factory_test.cc",
      "fingerprint/fp_context_command_test.cc",
      "fingerprint/fp_flashprotect_command_test.cc",
      "fingerprint/fp_frame_command_test.cc",
      "fingerprint/fp_info_command_test.cc",
      "fingerprint/fp_mode_command_test.cc",
      "fingerprint/fp_mode_test.cc",
      "fingerprint/fp_read_match_secret_command_test.cc",
      "fingerprint/fp_seed_command_test.cc",
      "fingerprint/fp_template_command_test.cc",
      "fingerprint/fp_template_params_test.cc",
      "get_protocol_info_command_test.cc",
      "get_version_command_test.cc",
      "mkbp_wake_mask_command_test.cc",
      "pd_chip_info_command_test.cc",
      "reboot_command_test.cc",
      "rgb_keyboard_command_test.cc",
      "rwsig_action_command_test.cc",
      "smart_discharge_command_test.cc",
      "versions_command_test.cc",
    ]
    configs += [
      "//common-mk:test",
      ":target_defaults_pkg_deps",
    ]
    run_test = true
    deps = [
      ":libec_static",
      "//common-mk/testrunner",
    ]
    pkg_deps = [ "libchrome-test" ]
  }
}

generate_pkg_config("libec_pc") {
  name = "libec"
  output_name = "libec"
  description = "Chromium OS Embedded Controller Library"
  version = "0.1"

  # ec_command.h uses base/logging.h (and is a header-only class), so we need
  # a direct dependency on libchrome.
  requires = [ "libchrome" ]
  requires_private = default_pkg_deps
  libs = [ "-lec" ]
  install = true
}
