# 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/proto_library.gni")

group("all") {
  deps = [
    ":system_api-authpolicy-protos",
    ":system_api-biod-protos",
    ":system_api-bootlockbox-protos",
    ":system_api-chaps-protos",
    ":system_api-cryptohome-protos",
    ":system_api-dlcservice-protos",
    ":system_api-kerberos-protos",
    ":system_api-login_manager-goprotos",
    ":system_api-login_manager-protos",
    ":system_api-metrics_event-goprotos",
    ":system_api-metrics_event-protos",
    ":system_api-oobe_config-protos",
    ":system_api-plugin_vm_service-protos",
    ":system_api-power_manager-goprotos",
    ":system_api-power_manager-protos",
    ":system_api-protos",
    ":system_api-runtime_probe-protos",
    ":system_api-seneschal-protos",
    ":system_api-smbprovider-protos",
    ":system_api-update_engine-protos",
    ":system_api-vm_applications-protos",
    ":system_api-vm_cicerone-goprotos",
    ":system_api-vm_cicerone-protos",
    ":system_api-vm_concierge-goprotos",
    ":system_api-vm_concierge-protos",
    ":system_api-vm_plugin_dispatcher-protos",
  ]
}

proto_library("system_api-protos") {
  proto_in_dir = "dbus"
  proto_out_dir = "include/system_api/proto_bindings"
  sources = [
    "${proto_in_dir}/field_trial_list.proto",
    "${proto_in_dir}/mtp_file_entry.proto",
    "${proto_in_dir}/mtp_storage_info.proto",
  ]
  standalone = true
}

proto_library("system_api-power_manager-protos") {
  proto_in_dir = "dbus/power_manager"
  proto_out_dir = "include/power_manager/proto_bindings"
  sources = [
    "${proto_in_dir}/backlight.proto",
    "${proto_in_dir}/idle.proto",
    "${proto_in_dir}/input_event.proto",
    "${proto_in_dir}/peripheral_battery_status.proto",
    "${proto_in_dir}/policy.proto",
    "${proto_in_dir}/power_supply_properties.proto",
    "${proto_in_dir}/suspend.proto",
    "${proto_in_dir}/switch_states.proto",
  ]
  standalone = true
}

goproto_library("system_api-power_manager-goprotos") {
  proto_in_dir = "dbus/power_manager"
  proto_out_dir = "go/src/chromiumos/system_api/power_manager_proto"
  sources = [
    "${proto_in_dir}/backlight.proto",
    "${proto_in_dir}/idle.proto",
    "${proto_in_dir}/input_event.proto",
    "${proto_in_dir}/peripheral_battery_status.proto",
    "${proto_in_dir}/policy.proto",
    "${proto_in_dir}/power_supply_properties.proto",
    "${proto_in_dir}/suspend.proto",
    "${proto_in_dir}/switch_states.proto",
  ]
}

proto_library("system_api-cryptohome-protos") {
  proto_in_dir = "dbus/cryptohome"
  proto_out_dir = "include/cryptohome/proto_bindings"
  sources = [
    "${proto_in_dir}/UserDataAuth.proto",
    "${proto_in_dir}/key.proto",
    "${proto_in_dir}/rpc.proto",
    "${proto_in_dir}/signed_secret.proto",
  ]
  standalone = true
}

proto_library("system_api-authpolicy-protos") {
  proto_in_dir = "dbus/authpolicy"
  proto_out_dir = "include/authpolicy/proto_bindings"
  sources = [
    "${proto_in_dir}/active_directory_info.proto",
  ]
  standalone = true
}

proto_library("system_api-biod-protos") {
  proto_in_dir = "dbus/biod"
  proto_out_dir = "include/biod/proto_bindings"
  sources = [
    "${proto_in_dir}/constants.proto",
    "${proto_in_dir}/messages.proto",
  ]
  standalone = true
}

proto_library("system_api-kerberos-protos") {
  proto_in_dir = "dbus/kerberos"
  proto_out_dir = "include/kerberos/proto_bindings"
  sources = [
    "${proto_in_dir}/kerberos_service.proto",
  ]
  standalone = true
}

proto_library("system_api-login_manager-protos") {
  proto_in_dir = "dbus/login_manager"
  proto_out_dir = "include/login_manager/proto_bindings"
  sources = [
    "${proto_in_dir}/arc.proto",
    "${proto_in_dir}/policy_descriptor.proto",
  ]
  standalone = true
}

goproto_library("system_api-login_manager-goprotos") {
  proto_in_dir = "dbus/login_manager"
  proto_out_dir = "go/src/chromiumos/system_api/login_manager_proto"
  sources = [
    "${proto_in_dir}/policy_descriptor.proto",
  ]
}

proto_library("system_api-chaps-protos") {
  proto_in_dir = "dbus/chaps"
  proto_out_dir = "include/chaps/proto_bindings"
  sources = [
    "${proto_in_dir}/ck_structs.proto",
  ]
  standalone = true

  # system_api-chaps-protos" is used by a shared_library
  # object, so we need to build it with "-fPIC" instead of "-fPIE".
  use_pic = true
}

proto_library("system_api-metrics_event-protos") {
  proto_in_dir = "dbus/metrics_event"
  proto_out_dir = "include/metrics_event/proto_bindings"
  sources = [
    "${proto_in_dir}/metrics_event.proto",
  ]
  standalone = true
}

goproto_library("system_api-metrics_event-goprotos") {
  proto_in_dir = "dbus/metrics_event"
  proto_out_dir = "go/src/chromiumos/system_api/metrics_event_proto"
  sources = [
    "${proto_in_dir}/metrics_event.proto",
  ]
}

proto_library("system_api-plugin_vm_service-protos") {
  proto_in_dir = "dbus/plugin_vm_service"
  proto_out_dir = "include/plugin_vm_service/proto_bindings"
  sources = [
    "${proto_in_dir}/plugin_vm_service.proto",
  ]
  standalone = true
}

proto_library("system_api-smbprovider-protos") {
  proto_in_dir = "dbus/smbprovider"
  proto_out_dir = "include/smbprovider/proto_bindings"
  sources = [
    "${proto_in_dir}/directory_entry.proto",
  ]
  standalone = true
}

proto_library("system_api-vm_cicerone-protos") {
  proto_in_dir = "dbus/vm_cicerone"
  proto_out_dir = "include/vm_cicerone/proto_bindings"
  sources = [
    "${proto_in_dir}/cicerone_service.proto",
  ]
  standalone = true
}

goproto_library("system_api-vm_cicerone-goprotos") {
  proto_in_dir = "dbus/vm_cicerone"
  proto_out_dir = "go/src/chromiumos/system_api/vm_cicerone_proto"
  sources = [
    "${proto_in_dir}/cicerone_service.proto",
  ]
}

proto_library("system_api-vm_concierge-protos") {
  proto_in_dir = "dbus/vm_concierge"
  proto_out_dir = "include/vm_concierge/proto_bindings"
  sources = [
    "${proto_in_dir}/service.proto",
  ]
  standalone = true
}

goproto_library("system_api-vm_concierge-goprotos") {
  proto_in_dir = "dbus/vm_concierge"
  proto_out_dir = "go/src/chromiumos/system_api/vm_concierge_proto"
  sources = [
    "${proto_in_dir}/service.proto",
  ]
}

proto_library("system_api-vm_applications-protos") {
  proto_in_dir = "dbus/vm_applications"
  proto_out_dir = "include/vm_applications/proto_bindings"
  sources = [
    "${proto_in_dir}/apps.proto",
  ]
  standalone = true
}

proto_library("system_api-seneschal-protos") {
  proto_in_dir = "dbus/seneschal"
  proto_out_dir = "include/seneschal/proto_bindings"
  sources = [
    "${proto_in_dir}/seneschal_service.proto",
  ]
  standalone = true
}

proto_library("system_api-oobe_config-protos") {
  proto_in_dir = "dbus/oobe_config"
  proto_out_dir = "include/oobe_config/proto_bindings"
  sources = [
    "${proto_in_dir}/oobe_config.proto",
  ]
  standalone = true
}

proto_library("system_api-runtime_probe-protos") {
  proto_in_dir = "dbus/runtime_probe"
  proto_out_dir = "include/runtime_probe/proto_bindings"
  sources = [
    "${proto_in_dir}/runtime_probe.proto",
  ]
  standalone = true
}

proto_library("system_api-update_engine-protos") {
  proto_in_dir = "dbus/update_engine"
  proto_out_dir = "include/update_engine/proto_bindings"
  sources = [
    "${proto_in_dir}/update_engine.proto",
  ]
  standalone = true
}

proto_library("system_api-bootlockbox-protos") {
  proto_in_dir = "dbus/bootlockbox"
  proto_out_dir = "include/bootlockbox/proto_bindings"
  sources = [
    "${proto_in_dir}/boot_lockbox_rpc.proto",
  ]
  standalone = true
}

proto_library("system_api-dlcservice-protos") {
  proto_in_dir = "dbus/dlcservice"
  proto_out_dir = "include/dlcservice/proto_bindings"
  sources = [
    "${proto_in_dir}/dlcservice.proto",
  ]
  standalone = true
}

proto_library("system_api-vm_plugin_dispatcher-protos") {
  proto_in_dir = "dbus/vm_plugin_dispatcher"
  proto_out_dir = "include/vm_plugin_dispatcher/proto_bindings"
  sources = [
    "${proto_in_dir}/service.proto",
  ]
  standalone = true
}
