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

group("all") {
  deps = [
    ":ml_cmdline",
    ":ml_service",
  ]
  if (use.test) {
    deps += [
      ":ml_cmdline_test",
      ":ml_service_test",
    ]
  }
  if (use.fuzzer) {
    deps += [
      ":ml_service_impl_fuzzer",
      ":ml_service_load_flatbuffer_fuzzer",
      ":web_platform_handwriting_fuzzer",
    ]
  }
  if (use.ml_benchmark_drivers) {
    deps += [ ":libml_for_benchmark" ]
  }
}

generate_mojom_bindings("ml_mojo_bindings") {
  mojo_root = "${platform2_root}"
  if (use.ml_benchmark_drivers) {
    use_pic = true
  }
  sources = [
    "mojom/big_buffer.mojom",
    "mojom/document_scanner.mojom",
    "mojom/document_scanner_param_types.mojom",
    "mojom/geometry.mojom",
    "mojom/grammar_checker.mojom",
    "mojom/graph_executor.mojom",
    "mojom/handwriting_recognizer.mojom",
    "mojom/machine_learning_service.mojom",
    "mojom/model.mojom",
    "mojom/shared_memory.mojom",
    "mojom/soda.mojom",
    "mojom/tensor.mojom",
    "mojom/text_classifier.mojom",
    "mojom/text_suggester.mojom",
    "mojom/time.mojom",
    "mojom/web_platform_handwriting.mojom",
    "mojom/web_platform_model.mojom",
  ]
  mojo_extra_args = [
    "--typemap",
    rebase_path("mojom/type_mappings.json"),
  ]
}

source_set("ml_mojo_bindings_lib") {
  sources = [ "mojom/time_mojom_traits.h" ]
  public_deps = [ ":ml_mojo_bindings" ]
}

pkg_config("ml_common_pkg_deps") {
  pkg_deps = [
    "libbrillo",
    "libchrome",
    "libmetrics",
    "libminijail",
    "libmojo",
    "system_api",
    "zlib",
  ]
}

proto_library("ml_grammar_proto") {
  proto_in_dir = "${sysroot}/usr/include/chromeos/libgrammar/proto"
  proto_out_dir = "chrome/knowledge/grammar/"
  sources = [ "${proto_in_dir}/grammar_interface.proto" ]
}

proto_library("ml_handwriting_proto") {
  proto_in_dir = "${sysroot}/usr/include/chromeos/libhandwriting/proto"
  proto_out_dir = "chrome/knowledge/handwriting/"
  sources = [
    "${proto_in_dir}/handwriting_interface.proto",
    "${proto_in_dir}/handwriting_validate.proto",
  ]
}

proto_library("ml_soda_proto") {
  proto_in_dir = "${sysroot}/usr/include/chromeos/libsoda/proto"
  proto_out_dir = "chrome/knowledge/soda/"
  sources = [ "${proto_in_dir}/extended_soda_api.proto" ]
}

proto_library("ml_text_suggester_proto") {
  proto_in_dir = "${sysroot}/usr/include/chromeos/libsuggest/proto"
  proto_out_dir = "chrome/knowledge/suggest/"
  sources = [ "${proto_in_dir}/text_suggester_interface.proto" ]
}

proto_library("ml_assist_ranker_proto") {
  proto_in_dir = "./proto/"
  proto_out_dir = "chrome/knowledge/assist_ranker/"
  sources = [
    "${proto_in_dir}/example_preprocessor.proto",
    "${proto_in_dir}/ranker_example.proto",
  ]
}

source_set("example_preprocessor") {
  sources = [
    "example_preprocessor/example_preprocessing.cc",
    "example_preprocessor/ranker_example_util.cc",
  ]
  configs += [ ":ml_common_pkg_deps" ]
  deps = [ ":ml_assist_ranker_proto" ]
}

static_library("ml_common") {
  sources = [
    "daemon.cc",
    "dlcservice_client.cc",
    "document_scanner_impl.cc",
    "document_scanner_library.cc",
    "grammar_checker_impl.cc",
    "grammar_library.cc",
    "grammar_proto_mojom_conversion.cc",
    "graph_executor_delegate.cc",
    "graph_executor_impl.cc",
    "handwriting.cc",
    "handwriting_proto_mojom_conversion.cc",
    "handwriting_recognizer_impl.cc",
    "machine_learning_service_impl.cc",
    "metrics.cc",
    "model_conversions.cc",
    "model_delegate.cc",
    "model_impl.cc",
    "model_metadata.cc",
    "process.cc",
    "request_metrics.cc",
    "tensor_view.cc",
    "text_classifier_impl.cc",
    "text_suggester_impl.cc",
    "text_suggester_proto_mojom_conversion.cc",
    "text_suggestions.cc",
    "time_metrics.cc",
    "util.cc",
    "web_platform_handwriting_proto_mojom_conversion.cc",
    "web_platform_handwriting_recognizer_impl.cc",
    "web_platform_model_impl.cc",
    "web_platform_model_loader_impl.cc",
  ]
  include_dirs = [
    "${sysroot}/usr/include/icu-chrome/common",
    "${sysroot}/usr/include/icu-chrome/i18n",
    "${sysroot}/usr/include/libtextclassifier",
    "${sysroot}/usr/include/marisa-aosp",
    "${sysroot}/usr/include/tensorflow",
  ]
  libs = [
    "icui18n-chrome",
    "icuuc-chrome",
    "marisa-aosp",
    "tensorflowlite",
    "textclassifier",
    "utf",
  ]
  pkg_deps = [ "protobuf" ]
  all_dependent_configs = [ ":ml_common_pkg_deps" ]
  defines = [
    "USE_ONDEVICE_DOCUMENT_SCANNER=${use.ondevice_document_scanner}",
    "USE_ONDEVICE_GRAMMAR=${use.ondevice_grammar}",
    "USE_ONDEVICE_TEXT_SUGGESTIONS=${use.ondevice_text_suggestions}",
    "TC3_VOCAB_ANNOTATOR_IMPL",
  ]
  public_deps = [ ":ml_mojo_bindings_lib" ]
  deps = [
    ":benchmark_proto",
    ":example_preprocessor",
    ":ml_assist_ranker_proto",
    ":ml_grammar_proto",
    ":ml_handwriting_proto",
    ":ml_text_suggester_proto",
  ]
  if (use.ondevice_speech) {
    sources += [
      "soda.cc",
      "soda_proto_mojom_conversion.cc",
      "soda_recognizer_impl.cc",
    ]
    deps += [ ":ml_soda_proto" ]
  } else {
    sources += [ "soda_recognizer_impl_fake.cc" ]
  }

  # Enables handwriting for all boards in fuzzer, including those don't support
  # ondevice handwriting, because we want to do fuzzer test on all the boards.
  # This is safe because fuzzer uses a fake handwriting backend which doesn't
  # really dlopen the library.
  if (use.fuzzer) {
    defines += [
      "USE_ONDEVICE_HANDWRITING=true",
      "USE_ONDEVICE_HANDWRITING_DLC=true",
    ]
  } else {
    defines += [
      "USE_ONDEVICE_HANDWRITING=${use.ondevice_handwriting}",
      "USE_ONDEVICE_HANDWRITING_DLC=${use.ondevice_handwriting_dlc}",
    ]
  }
}

proto_library("benchmark_proto") {
  proto_in_dir = "./proto/"
  proto_out_dir = "include/ml"
  sources = [ "${proto_in_dir}/benchmark.proto" ]
  standalone = true
  use_pic = true
}

shared_library("libml_for_benchmark") {
  sources = [
    "benchmark.cc",
    "graph_executor_delegate.cc",
    "graph_executor_impl.cc",
    "metrics.cc",
    "model_conversions.cc",
    "model_delegate.cc",
    "model_impl.cc",
    "model_metadata.cc",
    "process.cc",
    "request_metrics.cc",
    "tensor_view.cc",
    "time_metrics.cc",
    "util.cc",
  ]
  include_dirs = [ "${sysroot}/usr/include/tensorflow" ]
  libs = [ "tensorflowlite" ]
  pkg_deps = [
    "libbrillo",
    "libchrome",
    "libmetrics",
    "libmojo",
    "protobuf",
  ]
  public_deps = [
    ":benchmark_proto",
    "//ml_benchmark:libmlbenchmark_proto",
  ]
  deps = [ ":ml_mojo_bindings_lib" ]
}

static_library("ml_cmdline_common") {
  sources = [ "simple.cc" ]
  deps = [ ":ml_common" ]
}

executable("ml_service") {
  sources = [ "main.cc" ]
  include_dirs = [ "${sysroot}/usr/include/tensorflow" ]
  deps = [
    ":ml_common",
    "//ml/dbus_service:core",
  ]
}

executable("ml_cmdline") {
  sources = [ "command_line.cc" ]
  include_dirs = [ "${sysroot}/usr/include/tensorflow" ]
  install_path = "bin"
  deps = [ ":ml_cmdline_common" ]
}

if (use.test) {
  executable("ml_service_test") {
    sources = [
      "dbus_service/tf_model_graph_executor_test.cc",
      "dlcservice_client_test.cc",
      "document_scanner_library_test.cc",
      "example_preprocessor/example_preprocessing_test.cc",
      "example_preprocessor/ranker_example_util_test.cc",
      "grammar_library_test.cc",
      "grammar_proto_mojom_conversion_test.cc",
      "graph_executor_impl_test.cc",
      "handwriting_proto_mojom_conversion_test.cc",
      "handwriting_test.cc",
      "machine_learning_service_impl_multiprocess_test.cc",
      "machine_learning_service_impl_test.cc",
      "model_impl_test.cc",
      "test_utils.cc",
      "testrunner.cc",
      "text_suggester_proto_mojom_conversion_test.cc",
      "text_suggestions_test.cc",
      "util_test.cc",
      "web_platform_handwriting_proto_mojom_conversion_test.cc",
      "web_platform_model_impl_test.cc",
    ]
    configs += [ "//common-mk:test" ]
    include_dirs = [ "${sysroot}/usr/include/tensorflow" ]
    defines = [
      "USE_ONDEVICE_DOCUMENT_SCANNER=${use.ondevice_document_scanner}",
      "USE_ONDEVICE_GRAMMAR=${use.ondevice_grammar}",
      "USE_ONDEVICE_HANDWRITING=${use.ondevice_handwriting}",
      "USE_ONDEVICE_HANDWRITING_DLC=${use.ondevice_handwriting_dlc}",
      "USE_ONDEVICE_TEXT_SUGGESTIONS=${use.ondevice_text_suggestions}",
    ]
    deps = [
      ":ml_assist_ranker_proto",
      ":ml_common",
      ":ml_grammar_proto",
      ":ml_handwriting_proto",
      ":ml_service",
      ":ml_text_suggester_proto",
      "//common-mk/testrunner:testrunner",
      "//ml/dbus_service:core",
    ]
    if (use.ondevice_speech && !use.asan) {
      sources += [
        "soda_proto_mojom_conversion_test.cc",
        "soda_test.cc",
      ]
      defines += [ "USE_ONDEVICE_SPEECH" ]
    }
    if (use.ml_benchmark_drivers) {
      sources += [ "benchmark_test.cc" ]
      deps += [ ":libml_for_benchmark" ]
    }
  }
  executable("ml_cmdline_test") {
    sources = [
      "simple_test.cc",
      "testrunner.cc",
    ]
    configs += [ "//common-mk:test" ]
    include_dirs = [ "${sysroot}/usr/include/tensorflow" ]
    run_test = true
    deps = [ ":ml_cmdline_common" ]
  }
}

# Fuzzer target.
if (use.fuzzer) {
  executable("ml_service_impl_fuzzer") {
    sources = [ "fuzzers/ml_service_impl_fuzzer.cc" ]
    configs += [ "//common-mk/common_fuzzer:common_fuzzer" ]
    deps = [ ":ml_common" ]
  }
  executable("ml_service_load_flatbuffer_fuzzer") {
    sources = [ "fuzzers/ml_service_load_flatbuffer_fuzzer.cc" ]
    configs += [ "//common-mk/common_fuzzer" ]
    deps = [ ":ml_common" ]
  }

  proto_library("web_platform_handwriting_fuzz_container_proto") {
    proto_in_dir = "./proto/"
    proto_lib_dirs = [ "${sysroot}/usr/include/chromeos/libhandwriting/proto" ]
    proto_out_dir = "chrome/knowledge/handwriting/"
    sources =
        [ "${proto_in_dir}/web_platform_handwriting_fuzz_container.proto" ]
  }

  executable("web_platform_handwriting_fuzzer") {
    sources = [
      "fuzzers/handwriting_fake.cc",
      "fuzzers/web_platform_handwriting_fuzzer.cc",
    ]
    configs += [ "//common-mk/common_fuzzer" ]

    # Enables handwriting for all boards in fuzzer.
    defines = [
      "USE_ONDEVICE_HANDWRITING=true",
      "USE_ONDEVICE_HANDWRITING_DLC=true",
    ]
    pkg_deps = [ "libprotobuf-mutator" ]
    deps = [
      ":ml_common",
      ":web_platform_handwriting_fuzz_container_proto",
    ]
  }
}
