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

import("//services/webnn/public/webnn_features.gni")
import("//third_party/blink/renderer/modules/modules.gni")

blink_modules_sources("ml") {
  sources = [
    "ml.cc",
    "ml.h",
    "ml_context.cc",
    "ml_context.h",
    "navigator_ml.cc",
    "navigator_ml.h",
    "webnn/allow_shared_buffer_source_util.h",
    "webnn/ml_constant_operand.cc",
    "webnn/ml_constant_operand.h",
    "webnn/ml_error.cc",
    "webnn/ml_error.h",
    "webnn/ml_graph.cc",
    "webnn/ml_graph.h",
    "webnn/ml_graph_builder.cc",
    "webnn/ml_graph_builder.h",
    "webnn/ml_graph_transform/constant_folding_transformer.cc",
    "webnn/ml_graph_transform/constant_folding_transformer.h",
    "webnn/ml_graph_transform/layout_transformer.cc",
    "webnn/ml_graph_transform/layout_transformer.h",
    "webnn/ml_graph_transform/ml_graph_transformer.cc",
    "webnn/ml_graph_transform/ml_graph_transformer.h",
    "webnn/ml_graph_transform/pipeline.cc",
    "webnn/ml_graph_transform/pipeline.h",
    "webnn/ml_graph_transform/qdq_detection_transformer.cc",
    "webnn/ml_graph_transform/qdq_detection_transformer.h",
    "webnn/ml_graph_transform/transpose_elimination_transformer.cc",
    "webnn/ml_graph_transform/transpose_elimination_transformer.h",
    "webnn/ml_graph_type_converter.cc",
    "webnn/ml_graph_type_converter.h",
    "webnn/ml_graph_utils.cc",
    "webnn/ml_graph_utils.h",
    "webnn/ml_operand.cc",
    "webnn/ml_operand.h",
    "webnn/ml_operator.cc",
    "webnn/ml_operator.h",
    "webnn/ml_tensor.cc",
    "webnn/ml_tensor.h",
    "webnn/webnn_introspection_impl.cc",
    "webnn/webnn_introspection_impl.h",
  ]

  deps = [
    "//services/webnn/public/cpp",
    "//services/webnn/public/cpp:buildflags",
    "//services/webnn/public/cpp:in_process_context_provider",
    "//services/webnn/public/mojom:mojom_blink",
    "//third_party/blink/public/mojom/webnn:webnn_blink",
    "//third_party/blink/renderer/modules/webgpu",
  ]

  if (webnn_enable_graph_dump) {
    sources += [
      "webnn/ml_graph_transform/utils/ml_graph_dump.cc",
      "webnn/ml_graph_transform/utils/ml_graph_dump.h",
    ]
    deps += [ "//third_party/fp16" ]
  }
}

source_set("operand_id_hash_traits") {
  sources = [ "webnn/operand_id_hash_traits.h" ]

  deps = [
    "//services/webnn/public/cpp",
    "//third_party/blink/renderer/platform/wtf",
  ]
}

source_set("unit_tests") {
  testonly = true
  sources = [
    "webnn/ml_graph_builder_test_utils.cc",
    "webnn/ml_graph_builder_test_utils.h",
    "webnn/ml_graph_test.cc",
    "webnn/webnn_introspection_impl_test.cc",
  ]

  deps = [
    "//services/webnn/public/cpp:buildflags",
    "//services/webnn/public/mojom:mojom_blink",
    "//testing/gmock",
    "//testing/gtest",
    "//third_party/blink/public:test_headers",
    "//third_party/blink/renderer/controller:blink_bindings_test_sources",
    "//third_party/blink/renderer/core:unit_test_support",
    "//third_party/blink/renderer/modules",
    "//third_party/blink/renderer/platform",
    "//third_party/blink/renderer/platform:test_support",
    "//third_party/blink/renderer/platform/wtf",
  ]
}
