# 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("//build/config/android/config.gni") import("//build/config/android/rules.gni") import("//mojo/public/tools/bindings/mojom.gni") import("//services/on_device_model/on_device_model.gni") import("//third_party/jni_zero/jni_zero.gni") source_set("android") { sources = [ "backend_model_impl_android.cc", "backend_model_impl_android.h", "backend_session_impl_android.cc", "backend_session_impl_android.h", "model_downloader_android.cc", "model_downloader_android.h", "on_device_model_bridge.cc", "on_device_model_bridge.h", "sequence_checker_helper.cc", "sequence_checker_helper.h", ] deps = [ ":jni_headers", ":mojom", "//base", "//components/optimization_guide/core:core_util", "//components/optimization_guide/proto:optimization_guide_proto", "//mojo/public/cpp/bindings", "//services/on_device_model:backend_interfaces", "//services/on_device_model/public/cpp", "//services/on_device_model/public/mojom", ] } source_set("test_support") { testonly = true sources = [ "on_device_model_bridge_native_unittest_helper.cc", "on_device_model_bridge_native_unittest_helper.h", ] deps = [ ":android", ":native_j_unittests_jni_headers", "//base", "//components/optimization_guide/proto:optimization_guide_proto", ] } source_set("unit_tests") { testonly = true sources = [ "backend_model_impl_android_unittest.cc", "model_downloader_android_unittest.cc", ] deps = [ ":android", ":mojom", ":native_java_unittests_java", ":test_support", "//base/test:test_support", "//components/optimization_guide/proto:optimization_guide_proto", "//services/on_device_model/public/cpp/test_support", "//testing/gmock", "//testing/gtest", ] } android_library("java") { sources = [ "java/src/org/chromium/on_device_model/AiCoreFactory.java", "java/src/org/chromium/on_device_model/AiCoreModelDownloaderBackend.java", "java/src/org/chromium/on_device_model/AiCoreModelDownloaderBackendUpstreamImpl.java", "java/src/org/chromium/on_device_model/AiCoreModelDownloaderWrapper.java", "java/src/org/chromium/on_device_model/AiCoreSessionBackend.java", "java/src/org/chromium/on_device_model/AiCoreSessionBackendUpstreamImpl.java", "java/src/org/chromium/on_device_model/AiCoreSessionWrapper.java", "java/src/org/chromium/on_device_model/DownloaderResponder.java", "java/src/org/chromium/on_device_model/GenerateOptionsHelper.java", "java/src/org/chromium/on_device_model/InputPieceHelper.java", "java/src/org/chromium/on_device_model/JniSafeCallback.java", "java/src/org/chromium/on_device_model/OnDeviceModelBridge.java", "java/src/org/chromium/on_device_model/SessionResponder.java", ] # MLKit-based implementations for AICore backend for non-Chrome branded # builds. if (use_mlkit_for_aicore) { sources += [ "java/src/org/chromium/on_device_model/MlKitAiCoreFactoryImpl.java", "java/src/org/chromium/on_device_model/MlKitAiCoreModelDownloaderBackendImpl.java", "java/src/org/chromium/on_device_model/MlKitAiCoreSessionBackendImpl.java", ] } deps = [ ":mojom_java", "//base:base_java", "//base:service_loader_java", "//components/optimization_guide/proto:optimization_guide_proto_java", "//services/on_device_model/public/mojom:mojom_java", "//third_party/androidx:androidx_annotation_annotation_java", "//third_party/jni_zero:jni_zero_java", ] # Dependencies of MLKit-based implementations for AICore backend. if (use_mlkit_for_aicore) { deps += [ "//third_party/android_deps:guava_java", "//third_party/android_deps:mlkit_java", ] } srcjar_deps = [ ":java_enum_srcjar", ":jni_headers", ] } android_library("native_java_unittests_java") { testonly = true sources = [ "native_java_unittests/src/org/chromium/on_device_model/OnDeviceModelBridgeNativeUnitTestHelper.java" ] deps = [ ":java", ":mojom_java", "//base:base_java", "//base:base_java_test_support", "//base:service_loader_java", "//components/optimization_guide/proto:optimization_guide_proto_java", "//services/on_device_model/public/mojom:mojom_java", "//third_party/jni_zero:jni_zero_java", "//third_party/junit", ] srcjar_deps = [ ":native_j_unittests_jni_headers" ] } generate_jni("jni_headers") { sources = [ "java/src/org/chromium/on_device_model/AiCoreModelDownloaderWrapper.java", "java/src/org/chromium/on_device_model/AiCoreSessionWrapper.java", "java/src/org/chromium/on_device_model/GenerateOptionsHelper.java", "java/src/org/chromium/on_device_model/InputPieceHelper.java", "java/src/org/chromium/on_device_model/OnDeviceModelBridge.java", ] } generate_jni("native_j_unittests_jni_headers") { testonly = true sources = [ "native_java_unittests/src/org/chromium/on_device_model/OnDeviceModelBridgeNativeUnitTestHelper.java" ] } java_cpp_enum("java_enum_srcjar") { sources = [ "backend_session_impl_android.h", "model_downloader_android.h", ] } mojom("mojom") { sources = [ "downloader_params.mojom" ] generate_java = true } # Unit tests of MLKit-based implementations for AICore backend. if (use_mlkit_for_aicore) { robolectric_library("junit") { testonly = true sources = [ "junit/src/org/chromium/on_device_model/MlKitAiCoreModelDownloaderBackendImplTest.java", "junit/src/org/chromium/on_device_model/MlKitAiCoreSessionBackendImplTest.java", ] deps = [ ":java", ":mojom_java", "//base:base_java", "//base:base_java_test_support", "//base:base_junit_test_support", "//components/optimization_guide/proto:optimization_guide_proto_java", "//services/on_device_model/public/mojom:mojom_java", "//third_party/android_deps:guava_java", "//third_party/android_deps:mlkit_java", "//third_party/junit", "//third_party/mockito:mockito_java", ] } }