# Copyright 2019 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")
import("//common-mk/proto_library.gni")

group("all") {
  deps = [
    ":libbrillo",
    ":libbrillo-glib",
    ":libbrillo-test",
    ":libinstallattributes",
    ":libpolicy",
  ]
  if (use.test) {
    deps += [
      ":libbrillo-grpc_tests",
      ":libbrillo_tests",
      ":libinstallattributes_tests",
      ":libpolicy_tests",
    ]
  }
  if (use.fuzzer) {
    deps += [
      ":libbrillo_data_encoding_fuzzer",
      ":libbrillo_dbus_data_serialization_fuzzer",
      ":libbrillo_http_form_data_fuzzer",
      ":libbrillo_url_utils_fuzzer",
    ]
  }
}

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

config("target_defaults") {
  configs = [ ":target_defaults_pkg_deps" ]
  include_dirs = [ "../libbrillo" ]
  defines = [
    "USE_DBUS=${use.dbus}",
    "USE_RTTI_FOR_TYPE_TAGS",
  ]
}

config("libbrillo_configs") {
  include_dirs = [ "../libbrillo" ]
}

# Properties of shared libraries which libbrillo consists of.
# Stored to variables once before actually declaring the targets, so that
# another target can collect information for making the .pc and .so files.
libbrillo_sublibs = [
  {
    # |library_name| is library file name without "lib" prefix. This is needed
    # for composing -l*** flags in libbrillo-${libbasever}.so.
    # (Current version of GN deployed to ChromeOS doesn't have string_replace.)
    library_name = "brillo-core"
    all_dependent_pkg_deps = [ "openssl" ]
    if (use.dbus) {
      all_dependent_pkg_deps += [ "dbus-1" ]
    }
    libs = [ "modp_b64" ]
    sources = [
      "brillo/asynchronous_signal_handler.cc",
      "brillo/backoff_entry.cc",
      "brillo/daemons/daemon.cc",
      "brillo/data_encoding.cc",
      "brillo/errors/error.cc",
      "brillo/errors/error_codes.cc",
      "brillo/file_utils.cc",
      "brillo/files/file_util.cc",
      "brillo/files/safe_fd.cc",
      "brillo/flag_helper.cc",
      "brillo/key_value_store.cc",
      "brillo/message_loops/base_message_loop.cc",
      "brillo/message_loops/message_loop.cc",
      "brillo/message_loops/message_loop_utils.cc",
      "brillo/mime_utils.cc",
      "brillo/osrelease_reader.cc",
      "brillo/process/process.cc",
      "brillo/process/process_information.cc",
      "brillo/process/process_reaper.cc",
      "brillo/scoped_umask.cc",
      "brillo/secure_blob.cc",
      "brillo/secure_string.cc",
      "brillo/strings/string_utils.cc",
      "brillo/syslog_logging.cc",
      "brillo/timezone/tzif_parser.cc",
      "brillo/type_name_undecorate.cc",
      "brillo/url_utils.cc",
      "brillo/userdb_utils.cc",
      "brillo/value_conversion.cc",
    ]
    if (use.dbus) {
      sources += [
        "brillo/any.cc",
        "brillo/daemons/dbus_daemon.cc",
        "brillo/dbus/async_event_sequencer.cc",
        "brillo/dbus/data_serialization.cc",
        "brillo/dbus/dbus_connection.cc",
        "brillo/dbus/dbus_method_invoker.cc",
        "brillo/dbus/dbus_method_response.cc",
        "brillo/dbus/dbus_object.cc",
        "brillo/dbus/dbus_proxy_util.cc",
        "brillo/dbus/dbus_service_watcher.cc",
        "brillo/dbus/dbus_signal.cc",
        "brillo/dbus/exported_object_manager.cc",
        "brillo/dbus/exported_property_set.cc",
        "brillo/dbus/introspectable_helper.cc",
        "brillo/dbus/utils.cc",
      ]
    }
  },

  {
    library_name = "brillo-blockdeviceutils"
    deps = [ ":libbrillo-core" ]
    sources = [ "brillo/blkdev_utils/loop_device.cc" ]
    if (use.device_mapper) {
      libs = [ "lvm2cmd" ]
      pkg_deps = [ "devmapper" ]
      sources += [
        "brillo/blkdev_utils/device_mapper.cc",
        "brillo/blkdev_utils/device_mapper_task.cc",
        "brillo/blkdev_utils/lvm.cc",
        "brillo/blkdev_utils/lvm_device.cc",
      ]
    }
  },

  {
    library_name = "brillo-http"
    deps = [
      ":libbrillo-core",
      ":libbrillo-streams",
    ]
    all_dependent_pkg_deps = [ "libcurl" ]
    sources = [
      "brillo/http/curl_api.cc",
      "brillo/http/http_connection_curl.cc",
      "brillo/http/http_form_data.cc",
      "brillo/http/http_request.cc",
      "brillo/http/http_transport.cc",
      "brillo/http/http_transport_curl.cc",
      "brillo/http/http_utils.cc",
    ]
    if (use.dbus) {
      sources += [ "brillo/http/http_proxy.cc" ]
    }
  },

  {
    library_name = "brillo-streams"
    deps = [ ":libbrillo-core" ]
    all_dependent_pkg_deps = [ "openssl" ]
    sources = [
      "brillo/streams/file_stream.cc",
      "brillo/streams/input_stream_set.cc",
      "brillo/streams/memory_containers.cc",
      "brillo/streams/memory_stream.cc",
      "brillo/streams/openssl_stream_bio.cc",
      "brillo/streams/stream.cc",
      "brillo/streams/stream_errors.cc",
      "brillo/streams/stream_utils.cc",
      "brillo/streams/tls_stream.cc",
    ]
  },

  {
    library_name = "brillo-cryptohome"
    all_dependent_pkg_deps = [ "openssl" ]
    deps = [ ":libbrillo-core" ]
    sources = [ "brillo/cryptohome.cc" ]
  },

  {
    library_name = "brillo-namespaces"
    deps = [ ":libbrillo-core" ]
    sources = [
      "brillo/namespaces/mount_namespace.cc",
      "brillo/namespaces/platform.cc",
      "brillo/scoped_mount_namespace.cc",
    ]
  },

  {
    library_name = "brillo-minijail"
    all_dependent_pkg_deps = [ "libminijail" ]
    sources = [ "brillo/minijail/minijail.cc" ]
  },

  {
    library_name = "brillo-protobuf"
    all_dependent_pkg_deps = [ "protobuf" ]
    sources = [ "brillo/proto_file_io.cc" ]
  },

  {
    library_name = "brillo-grpc"
    public_pkg_deps = [ "grpc" ]
    all_dependent_pkg_deps = [
      "gpr",
      "grpc++",
      "protobuf",
    ]
    sources = [
      "brillo/grpc/async_grpc_client.cc",
      "brillo/grpc/async_grpc_constants.cc",
      "brillo/grpc/async_grpc_server.cc",
      "brillo/grpc/grpc_completion_queue_dispatcher.cc",
      "brillo/grpc/rpc_state.cc",
      "brillo/grpc/time_util.cc",
    ]
  },

  {
    library_name = "brillo-crossystem"
    deps = [ ":libbrillo-core" ]
    sources = [ "brillo/crossystem/crossystem.cc" ]
    pkg_deps = [ "vboot_host" ]
  },
]

if (use.udev) {
  libbrillo_sublibs += [
    {
      library_name = "brillo-udev"
      all_dependent_pkg_deps = [ "libudev" ]
      sources = [
        "brillo/udev/udev.cc",
        "brillo/udev/udev_device.cc",
        "brillo/udev/udev_enumerate.cc",
        "brillo/udev/udev_list_entry.cc",
        "brillo/udev/udev_monitor.cc",
      ]
    },
  ]
}

# Generate shared libraries.
foreach(attr, libbrillo_sublibs) {
  shared_library("lib" + attr.library_name) {
    sources = attr.sources
    if (defined(attr.deps)) {
      deps = attr.deps
    }
    if (defined(attr.libs)) {
      libs = attr.libs
    }
    if (defined(attr.pkg_deps)) {
      pkg_deps = attr.pkg_deps
    }
    if (defined(attr.public_pkg_deps)) {
      public_pkg_deps = attr.public_pkg_deps
    }
    if (defined(attr.all_dependent_pkg_deps)) {
      all_dependent_pkg_deps = attr.all_dependent_pkg_deps
    }
    if (defined(attr.cflags)) {
      cflags = attr.cflags
    }
    if (defined(attr.configs)) {
      configs += attr.configs
    }
    configs += [ ":target_defaults" ]
  }
}

generate_pkg_config("libbrillo_pc") {
  name = "libbrillo"
  output_name = "libbrillo"
  description = "brillo base library"
  version = libbase_ver
  requires = []
  requires_private = default_pkg_deps
  foreach(sublib, libbrillo_sublibs) {
    if (defined(sublib.pkg_deps)) {
      requires_private += sublib.pkg_deps
    }
    if (defined(sublib.public_pkg_deps)) {
      requires += sublib.public_pkg_deps
    }
    if (defined(sublib.all_dependent_pkg_deps)) {
      requires_private += sublib.all_dependent_pkg_deps
    }
  }
  defines = [ "USE_RTTI_FOR_TYPE_TAGS" ]
  libs = [ "-lbrillo" ]
}

action("libbrillo") {
  deps = [ ":libbrillo_pc" ]
  foreach(sublib, libbrillo_sublibs) {
    deps += [ ":lib" + sublib.library_name ]
  }
  script = "//common-mk/write_args.py"
  outputs = [ "${root_out_dir}/lib/libbrillo.so" ]
  args = [ "--output" ] + outputs + [ "--" ] + [
           "GROUP",
           "(",
           "AS_NEEDED",
           "(",
         ]
  foreach(sublib, libbrillo_sublibs) {
    args += [ "-l" + sublib.library_name ]
  }
  args += [
    ")",
    ")",
  ]
}

libbrillo_test_deps = [ "libbrillo-http" ]

generate_pkg_config("libbrillo-test_pc") {
  name = "libbrillo-test"
  output_name = "libbrillo-test"
  description = "brillo test library"
  version = libbase_ver

  # Because libbrillo-test is static, we have to depend directly on everything.
  requires = [ "libbrillo" ] + default_pkg_deps
  foreach(name, libbrillo_test_deps) {
    foreach(t, libbrillo_sublibs) {
      if ("lib" + t.library_name == name) {
        if (defined(t.pkg_deps)) {
          requires += t.pkg_deps
        }
        if (defined(t.public_pkg_deps)) {
          requires += t.public_pkg_deps
        }
        if (defined(t.all_dependent_pkg_deps)) {
          requires += t.all_dependent_pkg_deps
        }
      }
    }
  }
  libs = [ "-lbrillo-test" ]
}

static_library("libbrillo-test") {
  sources = [
    "brillo/blkdev_utils/loop_device_fake.cc",
    "brillo/crossystem/crossystem_fake.cc",
    "brillo/http/http_connection_fake.cc",
    "brillo/http/http_transport_fake.cc",
    "brillo/message_loops/fake_message_loop.cc",
    "brillo/streams/fake_stream.cc",
    "brillo/unittest_utils.cc",
  ]
  if (use.device_mapper) {
    sources += [ "brillo/blkdev_utils/device_mapper_fake.cc" ]
  }
  configs -= [ "//common-mk:use_thin_archive" ]
  configs += [
    "//common-mk:nouse_thin_archive",
    ":target_defaults",
  ]
  deps = [
    ":libbrillo-http",
    ":libbrillo-test_pc",
  ]
  foreach(name, libbrillo_test_deps) {
    deps += [ ":" + name ]
  }
}

shared_library("libinstallattributes") {
  sources = [ "install_attributes/libinstallattributes.cc" ]
  configs += [ ":target_defaults" ]
  deps = [
    ":libinstallattributes-includes",
    "../common-mk/external_dependencies:install_attributes-proto",
  ]
  all_dependent_pkg_deps = [ "protobuf-lite" ]
}

shared_library("libpolicy") {
  sources = [
    "policy/device_policy.cc",
    "policy/device_policy_impl.cc",
    "policy/libpolicy.cc",
    "policy/policy_util.cc",
    "policy/resilient_policy_util.cc",
  ]
  configs += [ ":target_defaults" ]
  ldflags = [ "-Wl,--version-script,${platform2_root}/libbrillo/libpolicy.ver" ]
  deps = [
    ":libinstallattributes",
    ":libpolicy-includes",
    "../common-mk/external_dependencies:policy-protos",
  ]
  all_dependent_pkg_deps = [
    "openssl",
    "protobuf-lite",
  ]
}

libbrillo_glib_pkg_deps = [
  "glib-2.0",
  "gobject-2.0",
]
if (use.dbus) {
  libbrillo_glib_pkg_deps += [
    "dbus-1",
    "dbus-glib-1",
  ]
}

generate_pkg_config("libbrillo-glib_pc") {
  name = "libbrillo-glib"
  output_name = "libbrillo-glib"
  description = "brillo glib wrapper library"
  version = libbase_ver
  requires_private = libbrillo_glib_pkg_deps
  libs = [ "-lbrillo-glib" ]
}

shared_library("libbrillo-glib") {
  configs += [ ":target_defaults" ]
  cflags = [
    # glib uses the deprecated "register" attribute in some header files.
    "-Wno-deprecated-register",
  ]
  deps = [
    ":libbrillo",
    ":libbrillo-glib_pc",
  ]
  all_dependent_pkg_deps = libbrillo_glib_pkg_deps
  if (use.dbus) {
    sources = [
      "brillo/glib/abstract_dbus_service.cc",
      "brillo/glib/dbus.cc",
    ]
  }
}

if (use.test) {
  static_library("libbrillo_static") {
    configs += [ ":target_defaults" ]
    public_configs = [ ":libbrillo_configs" ]
    deps = [
      ":libbrillo_pc",
      ":libinstallattributes",
      ":libpolicy",
    ]
    foreach(sublib, libbrillo_sublibs) {
      deps += [ ":lib" + sublib.library_name ]
    }
  }
  proto_library("libbrillo_tests_proto") {
    proto_in_dir = "brillo/dbus"
    proto_out_dir = "include/brillo/dbus"
    sources = [ "${proto_in_dir}/test.proto" ]
  }
  proto_library("grpc_test_rpcs_protolib") {
    proto_in_dir = "brillo/grpc"
    proto_out_dir = "include"
    sources = [ "${proto_in_dir}/test_rpcs.proto" ]
    gen_grpc = true
  }
  executable("libbrillo_tests") {
    sources = [
      "brillo/asynchronous_signal_handler_test.cc",
      "brillo/backoff_entry_test.cc",
      "brillo/blkdev_utils/loop_device_test.cc",
      "brillo/cryptohome_test.cc",
      "brillo/data_encoding_test.cc",
      "brillo/enum_flags_test.cc",
      "brillo/errors/error_codes_test.cc",
      "brillo/errors/error_test.cc",
      "brillo/file_utils_test.cc",
      "brillo/files/file_util_test.cc",
      "brillo/files/safe_fd_test.cc",
      "brillo/flag_helper_test.cc",
      "brillo/glib/object_test.cc",
      "brillo/http/http_connection_curl_test.cc",
      "brillo/http/http_form_data_test.cc",
      "brillo/http/http_request_test.cc",
      "brillo/http/http_transport_curl_test.cc",
      "brillo/http/http_utils_test.cc",
      "brillo/key_value_store_test.cc",
      "brillo/map_utils_test.cc",
      "brillo/message_loops/base_message_loop_test.cc",
      "brillo/message_loops/fake_message_loop_test.cc",
      "brillo/message_loops/message_loop_test.cc",
      "brillo/mime_utils_test.cc",
      "brillo/namespaces/mount_namespace_test.cc",
      "brillo/osrelease_reader_test.cc",
      "brillo/process/process_reaper_test.cc",
      "brillo/process/process_test.cc",
      "brillo/scoped_umask_test.cc",
      "brillo/secure_blob_test.cc",
      "brillo/secure_string_test.cc",
      "brillo/streams/fake_stream_test.cc",
      "brillo/streams/file_stream_test.cc",
      "brillo/streams/input_stream_set_test.cc",
      "brillo/streams/memory_containers_test.cc",
      "brillo/streams/memory_stream_test.cc",
      "brillo/streams/openssl_stream_bio_test.cc",
      "brillo/streams/stream_test.cc",
      "brillo/streams/stream_utils_test.cc",
      "brillo/strings/string_utils_test.cc",
      "brillo/timezone/tzif_parser_test.cc",
      "brillo/unittest_utils.cc",
      "brillo/url_utils_test.cc",
      "brillo/value_conversion_test.cc",
      "brillo/vcsid_set_test.cc",
      "brillo/vcsid_unset_test.cc",
      "testrunner.cc",
    ]
    if (use.dbus) {
      sources += [
        "brillo/any_internal_impl_test.cc",
        "brillo/any_test.cc",
        "brillo/dbus/async_event_sequencer_test.cc",
        "brillo/dbus/data_serialization_test.cc",
        "brillo/dbus/dbus_method_invoker_test.cc",
        "brillo/dbus/dbus_object_test.cc",
        "brillo/dbus/dbus_param_reader_test.cc",
        "brillo/dbus/dbus_param_writer_test.cc",
        "brillo/dbus/dbus_signal_handler_test.cc",
        "brillo/dbus/exported_object_manager_test.cc",
        "brillo/dbus/exported_property_set_test.cc",
        "brillo/http/http_proxy_test.cc",
        "brillo/type_name_undecorate_test.cc",
        "brillo/variant_dictionary_test.cc",
      ]
    }
    if (use.device_mapper) {
      sources += [
        "brillo/blkdev_utils/device_mapper_test.cc",
        "brillo/blkdev_utils/lvm_device_test.cc",
        "brillo/blkdev_utils/lvm_test.cc",
      ]
    }
    configs += [
      "//common-mk:test",
      ":target_defaults",
    ]
    cflags = [ "-Wno-format-zero-length" ]
    pkg_deps = [ "libchrome-test" ]
    deps = [
      ":libbrillo-glib",
      ":libbrillo-test",
      ":libbrillo_static",
      ":libbrillo_tests_proto",
    ]

    if (is_debug) {
      cflags += [
        "-fprofile-arcs",
        "-ftest-coverage",
        "-fno-inline",
      ]
      libs = [ "gcov" ]
    }
  }

  executable("libinstallattributes_tests") {
    sources = [ "install_attributes/tests/libinstallattributes_test.cc" ]
    configs += [
      "//common-mk:test",
      ":target_defaults",
    ]
    deps = [
      ":libinstallattributes",
      "../common-mk/external_dependencies:install_attributes-proto",
      "../common-mk/testrunner:testrunner",
    ]
  }

  executable("libpolicy_tests") {
    sources = [
      "install_attributes/mock_install_attributes_reader.cc",
      "policy/tests/device_policy_impl_test.cc",
      "policy/tests/libpolicy_test.cc",
      "policy/tests/policy_util_test.cc",
      "policy/tests/resilient_policy_util_test.cc",
    ]
    configs += [
      "//common-mk:test",
      ":target_defaults",
    ]
    deps = [
      ":libinstallattributes",
      ":libpolicy",
      "../common-mk/external_dependencies:install_attributes-proto",
      "../common-mk/external_dependencies:policy-protos",
      "../common-mk/testrunner:testrunner",
    ]
  }

  executable("libbrillo-grpc_tests") {
    sources = [
      "brillo/grpc/async_grpc_client_server_test.cc",
      "brillo/grpc/async_grpc_server_test.cc",
      "brillo/grpc/grpc_completion_queue_dispatcher_test.cc",
    ]
    configs += [
      "//common-mk:test",
      ":target_defaults",
    ]
    deps = [
      ":grpc_test_rpcs_protolib",
      ":libbrillo-grpc",
      "../common-mk/testrunner:testrunner",
    ]
  }
}

if (use.fuzzer) {
  executable("libbrillo_data_encoding_fuzzer") {
    sources = [ "brillo/data_encoding_fuzzer.cc" ]
    configs += [ "//common-mk/common_fuzzer:common_fuzzer" ]
    pkg_deps = [ "libchrome" ]
    include_dirs = [ "../libbrillo" ]
    deps = [ ":libbrillo-core" ]
  }

  executable("libbrillo_dbus_data_serialization_fuzzer") {
    sources = [ "brillo/dbus/data_serialization_fuzzer.cc" ]
    configs += [ "//common-mk/common_fuzzer:common_fuzzer" ]
    pkg_deps = [ "libchrome" ]
    include_dirs = [ "../libbrillo" ]
    deps = [ ":libbrillo-core" ]
  }

  executable("libbrillo_http_form_data_fuzzer") {
    sources = [ "brillo/http/http_form_data_fuzzer.cc" ]
    configs += [ "//common-mk/common_fuzzer:common_fuzzer" ]
    pkg_deps = [ "libchrome" ]
    include_dirs = [ "../libbrillo" ]
    deps = [
      ":libbrillo-http",
      ":libbrillo-streams",
    ]
  }

  executable("libbrillo_url_utils_fuzzer") {
    sources = [ "brillo/url_utils_fuzzer.cc" ]
    configs += [ "//common-mk/common_fuzzer:common_fuzzer" ]
    pkg_deps = [ "libchrome" ]
    include_dirs = [ "../libbrillo" ]
    deps = [ ":libbrillo-core" ]
  }
}

copy("libinstallattributes-includes") {
  sources = [ "install_attributes/libinstallattributes.h" ]
  outputs =
      [ "${root_gen_dir}/include/install_attributes/{{source_file_part}}" ]
}

copy("libpolicy-includes") {
  sources = [
    "policy/device_policy.h",
    "policy/device_policy_impl.h",
    "policy/libpolicy.h",
    "policy/mock_device_policy.h",
    "policy/mock_libpolicy.h",
    "policy/policy_util.h",
    "policy/resilient_policy_util.h",
  ]
  outputs = [ "${root_gen_dir}/include/policy/{{source_file_part}}" ]
}
