# 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",
    ":install_dbus_config",
    ":install_init",
    ":install_policy",
    ":install_services",
    ":libsystemproxy",
    ":system_proxy",
    ":system_proxy_worker",
    ":worker-protos",
  ]
  if (use.test) {
    deps += [ ":system-proxy_test" ]
  }
  if (use.fuzzer) {
    deps += [
      ":system_proxy_connect_headers_parser_fuzzer",
      ":system_proxy_http_util_fuzzer",
      ":system_proxy_worker_config_fuzzer",
    ]
  }
}

# D-Bus code generator.
generate_dbus_adaptors("dbus_code_generator") {
  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") {
  # NOSORT
  pkg_deps = [
    "dbus-1",
    "libbrillo",
    "libchrome",
    "libminijail",
    "libpatchpanel-client",
    "libpatchpanel-util",

    # system_api depends on protobuf (or protobuf-lite). It must
    # appear before protobuf or the linker flags won't be in the right
    # order.
    "system_api",
    "protobuf-lite",
  ]
  if (use.fuzzer) {
    # Link against protobuf for fuzzers so we can use libprotobuf-mutator.
    pkg_deps += [ "protobuf" ]
  } else {
    pkg_deps += [ "protobuf-lite" ]
  }
}

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

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

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

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

install_config("install_dbus_config") {
  sources = [ "dbus/org.chromium.SystemProxy.conf" ]
  install_path = "/etc/dbus-1/system.d"
}

install_config("install_services") {
  sources = [ "dbus/org.chromium.SystemProxy.service" ]
  install_path = "/usr/share/dbus-1/system-services"
}

install_config("install_init") {
  sources = [ "init/system-proxy.conf" ]
  install_path = "/etc/init"
}

install_config("install_policy") {
  _arch = getenv("ARCH")

  # NOSORT
  sources = [
    "seccomp/system-proxy-seccomp-${_arch}.policy",
    "seccomp/system-proxy-worker-seccomp-${_arch}.policy",
  ]
  install_path = "/usr/share/policy"

  # NOSORT
  outputs = [
    "system-proxy-seccomp.policy",
    "system-proxy-worker-seccomp.policy",
  ]
}

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

if (use.fuzzer) {
  pkg_config("config_fuzzer_pkg_deps") {
    pkg_deps = [ "libprotobuf-mutator" ]
  }
  executable("system_proxy_worker_config_fuzzer") {
    all_dependent_pkg_deps = [ "libcurl" ]
    sources = [ "worker_config_fuzzer.cc" ]
    configs += [
      "//common-mk/common_fuzzer",
      ":config_fuzzer_pkg_deps",
      ":target_defaults",
    ]
    deps = [ ":libsystemproxyworker" ]
  }

  executable("system_proxy_connect_headers_parser_fuzzer") {
    all_dependent_pkg_deps = [ "libcurl" ]
    sources = [ "connect_headers_parser_fuzzer.cc" ]
    configs += [
      "//common-mk/common_fuzzer",
      ":target_defaults",
    ]
    deps = [ ":libsystemproxyworker" ]
  }

  executable("system_proxy_http_util_fuzzer") {
    all_dependent_pkg_deps = [ "libcurl" ]
    sources = [ "http_util_fuzzer.cc" ]
    configs += [
      "//common-mk/common_fuzzer",
      ":target_defaults",
    ]
    deps = [ ":libsystemproxyworker" ]
  }
}
