# Copyright (c) Meta Platforms, Inc. and affiliates.
# All rights reserved.
# Copyright 2025-2026 Arm Limited and/or its affiliates.
#
# This source code is licensed under the BSD-style license found in the
# LICENSE file in the root directory of this source tree.

# @noautodeps
load("@fbcode_macros//build_defs:build_file_migration.bzl", "fbcode_target")
load("@fbsource//xplat/executorch/build:runtime_wrapper.bzl", "runtime")

oncall("executorch")

fbcode_target(
    _kind = runtime.python_library,
    name = "constants",
    srcs = [
        "constants.py",
    ],
    deps = [
        "//executorch/exir/dialects:lib",
    ],
)
fbcode_target(
    _kind = runtime.python_library,
    name = "ao_ext",
    srcs = glob([
        "ao_ext/*.py",
        "ao_ext/ops/*.py",
    ]),
    deps = [
        "//caffe2:torch",
        "//executorch/exir:_warnings",
        "//pytorch/ao:torchao",
    ],
)

fbcode_target(
    _kind = runtime.python_library,
    name = "lib",
    srcs = [
        "__init__.py",
    ],
    deps = [
        ":ao_ext",
        ":ethosu",
        ":vgf",
        "//executorch/backends/arm/quantizer:lib",
    ],
)
fbcode_target(
    _kind = runtime.python_library,
    name = "common",
    srcs = glob(["common/*.py"]),
    deps = [
        "fbsource//third-party/tosa_tools:serializer",
        "//caffe2:torch",
        "//executorch/exir:lib",
    ],
)

fbcode_target(
    _kind = runtime.python_library,
    name = "arm_compile_spec",
    srcs = [
        "common/arm_compile_spec.py",
    ],
    deps = [
        "fbsource//third-party/pypi/flatbuffers:flatbuffers",
        "fbsource//third-party/pypi/ml-dtypes:ml-dtypes",
        "fbsource//third-party/tosa_tools:serializer",
        "fbsource//third-party/tosa_tools:tosa",
        ":process_node",
        "//executorch/exir/backend:compile_spec_schema",
        "//executorch/backends/arm/operators:lib",
        "//executorch/backends/arm/operators:node_visitor",
        "//executorch/backends/arm/_passes:passes",
    ],
)
fbcode_target(
    _kind = runtime.python_library,
    name = "ethosu",
    srcs = [
        "ethosu/__init__.py",
        "ethosu/backend.py",
        "ethosu/compile_spec.py",
        "ethosu/partitioner.py",
    ],
    deps = [
        ":arm_compile_spec",
        ":arm_vela",
        "//executorch/backends/arm/tosa:specification",
        "//executorch/backends/arm/tosa:partitioner",
        "//executorch/exir:_warnings",
        "//executorch/exir/_serialize:lib",
    ],
)

fbcode_target(
    _kind = runtime.python_library,
    name = "vgf",
    srcs = [
        "vgf/__init__.py",
        "vgf/_passes/__init__.py",
        "vgf/_passes/fuse_grid_sampler_flow_offset.py",
        "vgf/_passes/group_independent_custom_shaders.py",
        "vgf/_passes/insert_grid_sampler_grid_dequant_pass.py",
        "vgf/_passes/rewrite_grid_sampler_to_tosa_custom.py",
        "vgf/backend.py",
        "vgf/check_env.py",
        "vgf/compile_spec.py",
        "vgf/model_converter.py",
        "vgf/quantization_quality.py",
        "vgf/quantization_assessment.py",
        "vgf/quantization_sensitivity.py",
        "vgf/quantization_visualization.py",
        "vgf/partitioner.py",
        "vgf/shaders/__init__.py",
        "vgf/shaders/grid_sampler.py",
    ],
    resources = [
        "vgf/shaders/flow_offset_grid_sampler_int8_align_corners.glsl",
        "vgf/shaders/grid_sampler.glsl",
        "vgf/shaders/grid_sampler.spirv.b64",
        "vgf/shaders/grid_sampler_sampler.glsl",
        "vgf/shaders/grid_sampler_sampler.spirv.b64",
        "vgf/shaders/grid_sampler_sampler_align_corners.glsl",
        "vgf/shaders/grid_sampler_sampler_align_corners.spirv.b64",
        "vgf/shaders/grid_sampler_sampler_int8.glsl",
        "vgf/shaders/grid_sampler_sampler_int8.spirv.b64",
        "vgf/shaders/grid_sampler_sampler_int8_align_corners.glsl",
        "vgf/shaders/grid_sampler_sampler_int8_align_corners.spirv.b64",
    ],
    deps = [
        ":arm_compile_spec",
        "//caffe2:torch",
        "//executorch/backends/arm/_passes:passes",
        "//executorch/backends/arm/tosa/dialect:lib",
        "//executorch/backends/arm/tosa:specification",
        "//executorch/backends/arm/tosa:partitioner",
        "//executorch/devtools/inspector/numerical_comparator:mse_numerical_comparator",
        "//executorch/devtools/inspector/numerical_comparator:snr_numerical_comparator",
        "//executorch/devtools/visualization:visualization",
        "//executorch/exir:lib",
    ],
)
fbcode_target(
    _kind = runtime.python_library,
    name = "public_api",
    srcs = ["__init__.py"],
    deps = [
        ":ethosu",
        ":vgf",
        "//executorch/backends/arm/quantizer:lib",
    ],
)

fbcode_target(
    _kind = runtime.python_library,
    name = "process_node",
    srcs = ["process_node.py"],
    deps = [
        "fbsource//third-party/tosa_tools:tosa",
        "//executorch/backends/arm/operators:node_visitor",
        "//executorch/backends/arm/tosa:mapping",
        "//executorch/backends/arm/tosa:utils",
        "//executorch/backends/arm/tosa/dialect:core",
        "//executorch/exir:lib",
    ],
)
fbcode_target(
    _kind = runtime.python_library,
    name = "arm_vela",
    srcs = [
        "arm_vela.py",
    ],
    deps = [
        "fbsource//third-party/pypi/ethos-u-vela:ethos-u-vela",
        "//executorch/exir/_serialize:lib",
    ],
)
fbcode_target(
    _kind = runtime.python_library,
    name = "arm_model_evaluator",
    srcs = [
        "util/arm_model_evaluator.py",
    ],
    deps = [
        "//caffe2:torch",
    ]
)
fbcode_target(
    _kind = runtime.python_library,
    name = "_factory",
    srcs = [
        "util/_factory.py"
    ],
    deps = [
        ":ethosu",
        ":vgf",
        ":arm_compile_spec",
        "//executorch/backends/arm/quantizer:lib",
        "//executorch/exir/backend:operator_support",
        "//executorch/exir/backend:compile_spec_schema",
    ]
)
