# 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-${libbase_ver}",
    ":libbrillo-glib-${libbase_ver}",
    ":libbrillo-test-${libbase_ver}",
    ":libinstallattributes-${libbase_ver}",
    ":libpolicy-${libbase_ver}",
  ]
  if (use.test) {
    deps += [
      ":libbrillo-${libbase_ver}_tests",
      ":libinstallattributes-${libbase_ver}_tests",
      ":libpolicy-${libbase_ver}_tests",
    ]
  }
  if (use.fuzzer) {
    deps += [
      ":libbrillo_data_encoding_fuzzer",
      ":libbrillo_dbus_data_serialization_fuzzer",
      ":libbrillo_http_form_data_fuzzer",
    ]
  }
}

default_pkg_deps = [ "libchrome-${libbase_ver}" ]
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-${libbase_ver}_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-${libbase_ver}"
    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.cc",
      "brillo/process_information.cc",
      "brillo/process_reaper.cc",
      "brillo/scoped_mount_namespace.cc",
      "brillo/scoped_umask.cc",
      "brillo/secure_blob.cc",
      "brillo/strings/string_utils.cc",
      "brillo/syslog_logging.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_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-${libbase_ver}"
    deps = [
      ":libbrillo-core-${libbase_ver}",
    ]
    sources = [
      "brillo/blkdev_utils/loop_device.cc",
    ]
    if (use.device_mapper) {
      pkg_deps = [ "devmapper" ]
      sources += [
        "brillo/blkdev_utils/device_mapper.cc",
        "brillo/blkdev_utils/device_mapper_task.cc",
      ]
    }
  },

  {
    library_name = "brillo-http-${libbase_ver}"
    deps = [
      ":libbrillo-core-${libbase_ver}",
      ":libbrillo-streams-${libbase_ver}",
    ]
    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-${libbase_ver}"
    deps = [
      ":libbrillo-core-${libbase_ver}",
    ]
    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-${libbase_ver}"
    all_dependent_pkg_deps = [ "openssl" ]
    sources = [
      "brillo/cryptohome.cc",
    ]
  },

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

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

if (use.udev) {
  libbrillo_sublibs += [
    {
      library_name = "brillo-udev-${libbase_ver}"
      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-${libbase_ver}"
  description = "brillo base library"
  version = libbase_ver
  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_private += 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-${libbase_ver}" ]
}

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

libbrillo_test_deps = [ "libbrillo-http-${libbase_ver}" ]

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

  # Because libbrillo-test is static, we have to depend directly on everything.
  requires = [ "libbrillo-${libbase_ver}" ] + 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-${libbase_ver}" ]
}

static_library("libbrillo-test-${libbase_ver}") {
  configs -= [ "//common-mk:use_thin_archive" ]
  configs += [
    "//common-mk:nouse_thin_archive",
    ":target_defaults",
  ]
  deps = [
    ":libbrillo-http-${libbase_ver}",
    ":libbrillo-test_pc",
  ]
  foreach(name, libbrillo_test_deps) {
    deps += [ ":" + name ]
  }
  sources = [
    "brillo/blkdev_utils/loop_device_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" ]
  }
}

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

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

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-${libbase_ver}"
  description = "brillo glib wrapper library"
  version = libbase_ver
  requires_private = libbrillo_glib_pkg_deps
  libs = [ "-lbrillo-glib-${libbase_ver}" ]
}

shared_library("libbrillo-glib-${libbase_ver}") {
  configs += [ ":target_defaults" ]
  deps = [
    ":libbrillo-${libbase_ver}",
    ":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",
    ]
  }
  cflags = [
    # glib uses the deprecated "register" attribute in some header files.
    "-Wno-deprecated-register",
  ]
}

if (use.test) {
  static_library("libbrillo-${libbase_ver}_static") {
    configs += [ ":target_defaults" ]
    deps = [
      ":libbrillo_pc",
      ":libinstallattributes-${libbase_ver}",
      ":libpolicy-${libbase_ver}",
    ]
    foreach(sublib, libbrillo_sublibs) {
      deps += [ ":lib" + sublib.library_name ]
    }
    public_configs = [ ":libbrillo-${libbase_ver}_configs" ]
  }
  proto_library("libbrillo-${libbase_ver}_tests_proto") {
    proto_in_dir = "brillo/dbus"
    proto_out_dir = "include/brillo/dbus"
    sources = [
      "${proto_in_dir}/test.proto",
    ]
  }
  executable("libbrillo-${libbase_ver}_tests") {
    configs += [
      "//common-mk:test",
      ":target_defaults",
    ]
    deps = [
      ":libbrillo-${libbase_ver}_static",
      ":libbrillo-${libbase_ver}_tests_proto",
      ":libbrillo-glib-${libbase_ver}",
      ":libbrillo-test-${libbase_ver}",
    ]
    pkg_deps = [ "libchrome-test-${libbase_ver}" ]
    cflags = [ "-Wno-format-zero-length" ]

    if (is_debug) {
      cflags += [
        "-fprofile-arcs",
        "-ftest-coverage",
        "-fno-inline",
      ]
      libs = [ "gcov" ]
    }
    sources = [
      "brillo/asynchronous_signal_handler_test.cc",
      "brillo/backoff_entry_test.cc",
      "brillo/blkdev_utils/loop_device_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/osrelease_reader_test.cc",
      "brillo/process_reaper_test.cc",
      "brillo/process_test.cc",
      "brillo/scoped_umask_test.cc",
      "brillo/secure_blob_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/unittest_utils.cc",
      "brillo/url_utils_test.cc",
      "brillo/value_conversion_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" ]
    }
  }

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

  executable("libpolicy-${libbase_ver}_tests") {
    configs += [
      "//common-mk:test",
      ":target_defaults",
    ]
    deps = [
      ":libinstallattributes-${libbase_ver}",
      ":libpolicy-${libbase_ver}",
      "../common-mk/external_dependencies:install_attributes-proto",
      "../common-mk/external_dependencies:policy-protos",
      "../common-mk/testrunner:testrunner",
    ]
    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",
    ]
  }
}

if (use.fuzzer) {
  executable("libbrillo_data_encoding_fuzzer") {
    sources = [
      "brillo/data_encoding_fuzzer.cc",
    ]

    configs += [ "//common-mk/common_fuzzer:common_fuzzer" ]

    pkg_deps = [ "libchrome-${libbase_ver}" ]

    include_dirs = [ "../libbrillo" ]

    deps = [
      ":libbrillo-core-${libbase_ver}",
    ]
  }

  executable("libbrillo_dbus_data_serialization_fuzzer") {
    sources = [
      "brillo/dbus/data_serialization_fuzzer.cc",
    ]

    configs += [ "//common-mk/common_fuzzer:common_fuzzer" ]

    pkg_deps = [ "libchrome-${libbase_ver}" ]

    include_dirs = [ "../libbrillo" ]

    deps = [
      ":libbrillo-core-${libbase_ver}",
    ]
  }

  executable("libbrillo_http_form_data_fuzzer") {
    sources = [
      "brillo/http/http_form_data_fuzzer.cc",
    ]

    configs += [ "//common-mk/common_fuzzer:common_fuzzer" ]

    pkg_deps = [ "libchrome-${libbase_ver}" ]

    include_dirs = [ "../libbrillo" ]

    deps = [
      ":libbrillo-http-${libbase_ver}",
      ":libbrillo-streams-${libbase_ver}",
    ]
  }
}

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}}",
  ]
}
