# Copyright 2025 The Chromium Authors
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.

import("//third_party/mediapipe/features.gni")

visibility = [ "//components/optimization_guide/core/*" ]

static_library("op_resolver") {
  _configs = configs
  configs = []
  configs = [ "//third_party/tflite:tflite_shim_config" ] + _configs

  # TODO: crbug.com/422803641 - Move these files to this directory.
  sources = [
    "../tflite_op_resolver.cc",
    "../tflite_op_resolver.h",
  ]
  deps = [
    "//components/optimization_guide/core:features",
    "//third_party/tflite",
    "//third_party/tflite:buildflags",
    "//third_party/tflite:tflite_public_headers",
  ]
  configs += [ "//build/config/compiler:wexit_time_destructors" ]
  visibility += [
    "//media/webrtc/*",
    "//services/on_device_model/safety/*",
    "//services/passage_embeddings/*",
  ]
}

static_library("inference") {
  _configs = configs
  configs = []
  configs = [ "//third_party/tflite:tflite_shim_config" ] + _configs
  sources = [
    "base_model_executor.h",
    "base_model_executor_helpers.h",
    "bert_model_executor.cc",
    "bert_model_executor.h",
    "bert_model_handler.cc",
    "bert_model_handler.h",
    "execution_status.cc",
    "execution_status.h",
    "model_execution_timeout_watchdog.cc",
    "model_execution_timeout_watchdog.h",
    "model_executor.h",
    "model_handler.h",
    "model_validator.cc",
    "model_validator.h",
    "signature_model_executor.h",
    "tflite_model_executor.h",
  ]
  public_deps = [
    ":op_resolver",
    "//components/optimization_guide:machine_learning_tflite_buildflags",
    "//components/optimization_guide/proto:optimization_guide_proto",
    "//third_party/abseil-cpp:absl",
    "//third_party/re2",
    "//third_party/tflite",
    "//third_party/tflite:tflite_public_headers",
    "//third_party/tflite_support",
    "//third_party/tflite_support:tflite_support_proto",
  ]
  deps = [
    "//base",
    "//components/optimization_guide/core:core_util",
    "//components/optimization_guide/core:features",
    "//components/optimization_guide/core:prediction",
    "//net",
    "//url",
  ]
  configs += [ "//build/config/compiler:wexit_time_destructors" ]
  if (build_with_mediapipe_lib) {
    sources += [
      "mediapipe_text_model_executor.cc",
      "mediapipe_text_model_executor.h",
    ]
    public_deps += [ "//third_party/mediapipe" ]
  }
}

static_library("test_support") {
  testonly = true
  sources = [
    "test_model_executor.cc",
    "test_model_executor.h",
    "test_model_handler.h",
    "test_tflite_model_executor.cc",
    "test_tflite_model_executor.h",
    "test_tflite_model_handler.h",
  ]
  deps = [
    ":inference",
    "//base",
    "//third_party/abseil-cpp:absl",
  ]
}

source_set("unit_tests") {
  _configs = configs
  configs = []
  configs = [ "//third_party/tflite:tflite_shim_config" ] + _configs
  testonly = true
  sources = [
    "bert_model_executor_unittest.cc",
    "model_handler_unittest.cc",
    "model_validator_unittest.cc",
    "tflite_model_executor_unittest.cc",
  ]
  deps = [
    ":inference",
    ":test_support",
    "//base",
    "//base/test:test_support",
    "//components/optimization_guide/core:core_util",
    "//components/optimization_guide/core:delivery_test_support",
    "//components/optimization_guide/core:features",
    "//components/optimization_guide/core:prediction",
    "//components/optimization_guide/proto:optimization_guide_proto",
    "//testing/gtest",
    "//third_party/abseil-cpp:absl",
    "//third_party/tflite",
    "//third_party/tflite:tflite_public_headers",
    "//third_party/tflite_support",
    "//third_party/tflite_support:tflite_support_proto",
  ]
  if (build_with_mediapipe_lib) {
    sources += [ "mediapipe_text_model_executor_unittest.cc" ]
    deps += [ "//third_party/mediapipe" ]
  }
}
