# 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/generate-dbus-adaptors.gni")
import("//common-mk/pkg_config.gni")
import("//common-mk/proto_library.gni")

group("all") {
  deps = [
    ":dbus_code_generator",
    ":libsystemproxy",
    ":system_proxy",
    ":system_proxy_worker",
    ":worker-protos",
  ]
  if (use.test) {
    deps += [ ":system-proxy_test" ]
  }
}

# D-Bus code generator.
generate_dbus_adaptors("dbus_code_generator") {
  new_fd_bindings = true
  dbus_service_config = "dbus_bindings/dbus-service-config.json"
  dbus_adaptors_out_dir = "include/system_proxy"
  sources = [
    "dbus_bindings/org.chromium.SystemProxy.xml",
  ]
}

# Worker configs protos.
proto_library("worker-protos") {
  proto_in_dir = "proto"
  proto_out_dir = "include/bindings"
  sources = [
    "${proto_in_dir}/worker_common.proto",
  ]
}

pkg_config("target_defaults") {
  pkg_deps = [
    "dbus-1",
    "libarcnetwork-util",
    "libbrillo-${libbase_ver}",
    "libchrome-${libbase_ver}",
    "libminijail",

    # system_api depends on protobuf (or protobuf-lite). It must
    # appear before protobuf or the linker flags won't be in the right
    # order.
    "protobuf-lite",
    "system_api",
  ]
}

# System-proxy library (shared between executables and tests).
static_library("libsystemproxy") {
  configs += [ ":target_defaults" ]
  sources = [
    "protobuf_util.cc",
    "sandboxed_worker.cc",
    "system_proxy_adaptor.cc",
    "system_proxy_daemon.cc",
  ]
  deps = [
    ":dbus_code_generator",
    ":worker-protos",
  ]
}

# System-proxy worker library (shared between executables and tests).
static_library("libsystemproxyworker") {
  configs += [ ":target_defaults" ]
  sources = [
    "protobuf_util.cc",
    "server_proxy.cc",
  ]
  deps = [
    ":worker-protos",
  ]
}

executable("system_proxy_worker") {
  configs += [ ":target_defaults" ]
  all_dependent_pkg_deps = [ "libcurl" ]
  sources = [
    "system_proxy_worker.cc",
  ]
  deps = [
    ":libsystemproxyworker",
    ":worker-protos",
  ]
}

executable("system_proxy") {
  configs += [ ":target_defaults" ]
  sources = [
    "system_proxy.cc",
  ]
  deps = [
    ":libsystemproxy",
  ]
}

# Unit tests.
if (use.test) {
  pkg_config("system-proxy_test_config") {
    pkg_deps = [
      "libchrome-${libbase_ver}",
      "libchrome-test-${libbase_ver}",
    ]
  }
  executable("system-proxy_test") {
    configs += [
      "//common-mk:test",
      ":system-proxy_test_config",
      ":target_defaults",
    ]
    sources = [
      "server_proxy_test.cc",
      "system_proxy_adaptor_test.cc",
    ]
    defines = [ "UNIT_TEST" ]
    deps = [
      ":libsystemproxy",
      ":libsystemproxyworker",
      "//common-mk/testrunner:testrunner",
    ]
  }
}
