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

oncall("executorch")

fbcode_target(_kind = runtime.python_library,
    name = "device_util",
    srcs = [
        "device_util.py",
    ],
    visibility = [
        "//executorch/...",
        "//executorch/test/...",
    ],
    deps = [
        "//caffe2:torch",
        "//executorch/exir/backend:compile_spec_schema",
        "//executorch/exir/backend:partitioner",
        "//executorch/exir/backend/canonical_partitioners:canonical_partitioner_lib",
        "//executorch/exir/backend/test:backend_with_compiler_demo",
        "//executorch/exir/dialects:lib",
        "//executorch/exir/passes:propagate_device_pass",
    ],
)

fbcode_target(_kind = runtime.python_library,
    name = "backend_with_compiler_demo",
    srcs = [
        "backend_with_compiler_demo.py",
    ],
    visibility = [
        "//executorch/...",
        "//executorch/test/...",
    ],
    deps = [
        "//caffe2:torch",
        "//executorch/exir/backend:backend_details",
        "//executorch/exir/backend:compile_spec_schema",
        "//executorch/exir/dialects:lib",
    ],
)

fbcode_target(_kind = runtime.python_library,
    name = "backend_with_delegate_mapping_demo",
    srcs = [
        "backend_with_delegate_mapping_demo.py",
    ],
    visibility = [
        "//executorch/...",
        "//executorch/test/...",
    ],
    deps = [
        "//caffe2:torch",
        "//executorch/exir/backend:backend_details",
        "//executorch/exir/backend:compile_spec_schema",
        "//executorch/exir/backend:utils",
        "//executorch/exir/dialects:lib",
    ],
)

fbcode_target(_kind = runtime.python_library,
    name = "backend_with_named_data_map",
    srcs = [
        "backend_with_named_data_map.py",
    ],
    visibility = [
        "//executorch/...",
        "//executorch/test/...",
    ],
    deps = [
        "//caffe2:torch",
        "//caffe2/functorch:functorch_src",
        "//executorch/exir:delegate",
        "//executorch/exir:graph_module",
        "//executorch/exir:lib",
        "//executorch/exir:lowered_backend_module",
        "//executorch/exir:print_program",
        "//executorch/exir:schema",
        "//executorch/exir/backend:backend_api",
        "//executorch/exir/backend:compile_spec_schema",
        "//executorch/exir/backend:partitioner",
        "//executorch/exir/dialects:lib",
        "//executorch/extension/pybindings:portable_lib",  # @manual
        "//executorch/extension/pytree:pylib",
        "//executorch/exir/backend/canonical_partitioners:canonical_partitioner_lib",
    ],
)

fbcode_target(_kind = runtime.python_test,
    name = "test_backend_with_named_data_map",
    srcs = [
        "test_backend_with_named_data_map.py",
    ],
    visibility = [
        "//executorch/...",
        "//executorch/test/...",
    ],
    deps = [
        "//caffe2:torch",
        "//caffe2/functorch:functorch_src",
        "//executorch/exir:delegate",
        "//executorch/exir:graph_module",
        "//executorch/exir:lib",
        "//executorch/exir:lowered_backend_module",
        "//executorch/exir:print_program",
        "//executorch/exir:schema",
        "//executorch/exir/backend:backend_api",
        "//executorch/exir/backend:compile_spec_schema",
        "//executorch/exir/backend:partitioner",
        "//executorch/exir/dialects:lib",
        "//executorch/extension/pybindings:portable_lib",  # @manual
        "//executorch/extension/pytree:pylib",
        ":backend_with_named_data_map",
    ],
)

fbcode_target(_kind = runtime.python_library,
    name = "demo_backend",
    srcs = [
        "demo_backend.py",
    ],
    visibility = [
        "//executorch/...",
        "//executorch/test/...",
    ],
    deps = [
        "//executorch/exir/backend:backend_details",
        "//executorch/exir/backend:compile_spec_schema",
    ],
)

fbcode_target(_kind = runtime.python_library,
    name = "hta_partitioner_demo",
    srcs = [
        "hta_partitioner_demo.py",
    ],
    visibility = [
        "//executorch/...",
        "//executorch/test/...",
    ],
    deps = [
        ":demo_backend",
        "//caffe2:torch",
        "//executorch/exir:lib",
        "//executorch/exir/backend:partitioner",
        "//executorch/exir/backend:utils",
        "//executorch/exir/backend/canonical_partitioners:canonical_partitioner_lib",
    ],
)

fbcode_target(_kind = runtime.python_library,
    name = "op_partitioner_demo",
    srcs = [
        "op_partitioner_demo.py",
    ],
    visibility = [
        "//executorch/...",
        "//executorch/test/...",
    ],
    deps = [
        "fbcode//caffe2:torch",
        "fbcode//executorch/exir:graph_module",
        "fbcode//executorch/exir/backend:compile_spec_schema",
        "fbcode//executorch/exir/backend:partitioner",
        "fbcode//executorch/exir/backend/canonical_partitioners:canonical_partitioner_lib",
        "fbcode//executorch/exir/backend/test:backend_with_compiler_demo",
        "fbcode//executorch/exir/backend/test/demos/rpc:executor_backend_preprocess",
        "fbcode//executorch/exir/dialects:lib",
    ],
)

fbcode_target(_kind = runtime.python_library,
    name = "example_backends",
    deps = [
        ":backend_with_compiler_demo",
        ":demo_backend",
    ],
)


fbcode_target(_kind = runtime.python_test,
    name = "test_to_backend_multi_method",
    srcs = [
        "test_to_backend_multi_method.py",
    ],
    preload_deps = [
        "//executorch/kernels/portable:custom_ops_generated_lib",
        "//executorch/kernels/quantized:custom_ops_generated_lib",
        "//executorch/runtime/executor/test:test_backend_compiler_lib",
    ],
    deps = [
        ":backend_with_preprocess_all_demo",
        "//caffe2:torch",
        "//caffe2/functorch:functorch_src",
        "//executorch/exir/backend/test:backend_with_compiler_demo",
        "//executorch/exir:delegate",
        "//executorch/exir:graph_module",
        "//executorch/exir:lib",
        "//executorch/exir:lowered_backend_module",
        "//executorch/exir:print_program",
        "//executorch/exir:schema",
        "//executorch/exir/backend:backend_api",
        "//executorch/exir/backend:compile_spec_schema",
        "//executorch/exir/backend:partitioner",
        "//executorch/exir/dialects:lib",
        "//executorch/extension/pybindings:portable_lib",  # @manual
        "//executorch/extension/pytree:pylib",
    ],
)

fbcode_target(_kind = runtime.python_library,
    name = "backend_with_preprocess_all_demo",
    srcs = [
        "backend_with_preprocess_all_demo.py"
    ],
    deps = [
        "//caffe2:torch",
        "//caffe2/functorch:functorch_src",
        "//executorch/exir:delegate",
        "//executorch/exir:graph_module",
        "//executorch/exir:lib",
        "//executorch/exir:lowered_backend_module",
        "//executorch/exir:print_program",
        "//executorch/exir:schema",
        "//executorch/exir/backend:backend_api",
        "//executorch/exir/backend:compile_spec_schema",
        "//executorch/exir/backend:partitioner",
        "//executorch/exir/dialects:lib",
        "//executorch/extension/pybindings:portable_lib",  # @manual
        "//executorch/extension/pytree:pylib",
    ],
)

fbcode_target(_kind = runtime.python_test,
    name = "test_debug_handle_map",
    srcs = [
        "test_debug_handle_map.py",
    ],
    deps = [
        "fbsource//third-party/pypi/hypothesis:hypothesis",
        ":op_partitioner_demo",
        ":demo_backend",
        "//caffe2:torch",
        "//executorch/exir:delegate",
        "//executorch/exir:lib",
        "//executorch/exir/backend:backend_api",
        "//executorch/exir/tests:models",
    ],
)

fbcode_target(_kind = runtime.python_test,
    name = "test_backends_lifted",
    srcs = [
        "test_backends_lifted.py",
    ],
    preload_deps = [
        "//executorch/kernels/portable:custom_ops_generated_lib",
        "//executorch/kernels/quantized:custom_ops_generated_lib",
        "//executorch/runtime/executor/test:test_backend_compiler_lib",
    ],
    deps = [
        ":backend_with_compiler_demo",
        ":hta_partitioner_demo",
        ":op_partitioner_demo",
        ":demo_backend",
        "//caffe2:torch",
        "//caffe2/functorch:functorch_src",
        "//executorch/exir:delegate",
        "//executorch/exir:graph_module",
        "//executorch/exir:lib",
        "//executorch/exir:lowered_backend_module",
        "//executorch/exir:print_program",
        "//executorch/exir:schema",
        "//executorch/exir/backend:backend_api",
        "//executorch/exir/backend:compile_spec_schema",
        "//executorch/exir/backend:partitioner",
        "//executorch/exir/dialects:lib",
        "//executorch/extension/pybindings:portable_lib",  # @manual
        "//executorch/extension/pytree:pylib",
    ],
)

fbcode_target(_kind = runtime.python_test,
    name = "test_lowered_backend_module",
    srcs = [
        "test_lowered_backend_module.py",
    ],
    preload_deps = [
        "//executorch/runtime/executor/test:test_backend_compiler_lib",
    ],
    supports_static_listing = True,
    deps = [
        "fbsource//third-party/pypi/hypothesis:hypothesis",
        ":backend_with_compiler_demo",
        ":demo_backend",
        ":op_partitioner_demo",
        "//caffe2:torch",
        "//executorch/exir:lib",
        "//executorch/exir:schema",
        "//executorch/exir:tensor",
        "//executorch/exir/_serialize:lib",
        "//executorch/exir/backend:backend_api",
        "//executorch/exir/backend:compile_spec_schema",
        "//executorch/exir/tests:models",
        "//executorch/extension/pybindings:portable_lib",  # @manual
        "//executorch/kernels/portable:custom_ops_generated_lib",
        "//executorch/kernels/quantized:custom_ops_generated_lib",
    ],
)

fbcode_target(_kind = runtime.python_test,
    name = "test_graph_partition",
    srcs = [
        "test_graph_partition.py",
    ],
    visibility = [
        "//executorch/...",
        "//executorch/test/...",
    ],
    deps = [
        "//caffe2:torch",
        "//executorch/exir:lib",
        "//executorch/exir/backend/canonical_partitioners:canonical_partitioner_lib",
        "//executorch/exir/dialects:lib",
    ],
)

fbcode_target(_kind = runtime.python_test,
    name = "test_backends_nested",
    srcs = [
        "test_backends_nested.py",
    ],
    preload_deps = [
        "//executorch/kernels/portable:custom_ops_generated_lib",
        "//executorch/kernels/quantized:custom_ops_generated_lib",
    ],
    deps = [
        ":op_partitioner_demo",
        "//caffe2:torch",
        "//caffe2/functorch:functorch_src",
        "//executorch/exir:delegate",
        "//executorch/exir:graph_module",
        "//executorch/exir:lib",
        "//executorch/exir:lowered_backend_module",
        "//executorch/exir/backend:backend_api",
        "//executorch/exir/backend:backend_details",
        "//executorch/exir/backend:compile_spec_schema",
        "//executorch/exir/backend:partitioner",
        "//executorch/exir/backend/canonical_partitioners:canonical_partitioner_lib",
        "//executorch/runtime/executor/test:test_backend_compiler_lib",
    ],
)

fbcode_target(_kind = runtime.python_test,
    name = "test_delegate_map_builder",
    srcs = [
        "test_delegate_map_builder.py",
    ],
    deps = [
        ":backend_with_delegate_mapping_demo",
        "//caffe2:torch",
        "//executorch/exir:lib",
        "//executorch/exir/backend:backend_api",
        "//executorch/exir/backend:utils",
    ],
)

fbcode_target(_kind = runtime.python_test,
    name = "test_utils",
    srcs = [
        "test_utils.py",
    ],
    deps = [
        ":op_partitioner_demo",
        "//caffe2:torch",
        "//executorch/exir:lib",
        "//executorch/exir/backend:backend_api",
        "//executorch/exir/backend:partitioner",
        "//executorch/exir/backend:utils",
        "//executorch/exir/dialects:lib",
        "//executorch/extension/pybindings:portable_lib",  # @manual
        "//executorch/runtime/executor/test:test_backend_compiler_lib",
    ],
)

fbcode_target(_kind = runtime.python_test,
    name = "test_partitioner",
    srcs = [
        "test_partitioner.py",
    ],
    preload_deps = [
        "//executorch/exir/backend/test/demos/rpc:executor_backend_register",
    ],
    deps = [
        ":op_partitioner_demo",
        "//caffe2:torch",
        "//executorch/exir:lib",
        "//executorch/exir/backend:backend_details",
        "//executorch/exir/backend:partitioner",
        "//executorch/exir/backend:utils",
        "//executorch/exir/backend/canonical_partitioners:canonical_partitioner_lib",
        "//executorch/exir/backend/test/demos/rpc:executor_backend_partitioner",
        "//executorch/exir/backend/test/demos/rpc:executor_backend_preprocess",
        "//executorch/exir/dialects:lib",
        "//executorch/exir/tests:models",
        "//executorch/extension/pybindings:portable_lib",  # @manual
        "//executorch/extension/pytree:pylib",
        "//executorch/runtime/executor/test:test_backend_compiler_lib",
    ],
)

fbcode_target(_kind = runtime.python_test,
    name = "test_passes",
    srcs = [
        "test_passes.py",
    ],
    deps = [
        "//caffe2:torch",
        "//executorch/exir:lib",
        "//executorch/exir/backend/canonical_partitioners:duplicate_constant_node_pass",
    ],
)

fbcode_target(_kind = runtime.python_test,
    name = "test_delegate_scratch",
    srcs = [
        "test_delegate_scratch.py",
    ],
    deps = [
        "//caffe2:torch",
        "//executorch/exir/_serialize:lib",
        "//executorch/exir:delegate",
        "//executorch/exir:error",
        "//executorch/exir:graph_module",
        "//executorch/exir:lib",
        "//executorch/exir:memory",
        "//executorch/exir:memory_planning",
        "//executorch/exir:print_program",
        "//executorch/exir:schema",
        "//executorch/exir:tensor",
        "//executorch/exir/backend:backend_api",
        "//executorch/exir/backend:backend_details",
        "//executorch/exir/backend:compile_spec_schema",
        "//executorch/exir/backend:partitioner",
        "//executorch/exir/dialects:lib",
        "//executorch/exir/passes:delegate_scratch_pass",
        "//executorch/exir/passes:memory_planning_pass",
        "//executorch/util:memory_profiler",
    ],
)

fbcode_target(_kind = runtime.python_test,
    name = "test_compatibility",
    srcs = [
        "test_compatibility.py",
    ],
    preload_deps = [
        "//executorch/runtime/executor/test:test_backend_compiler_lib",
    ],
    deps = [
        ":backend_with_compiler_demo",
        "//caffe2:torch",
        "//executorch/exir:lib",
        "//executorch/exir/_serialize:lib",
        "//executorch/exir/backend:backend_api",
        "//executorch/exir/backend:compile_spec_schema",
        "//executorch/extension/pybindings:portable_lib",  # @manual
    ],
)

fbcode_target(_kind = runtime.python_test,
    name = "test_group_partitioner",
    srcs = [
        "test_group_partitioner.py",
    ],
    deps = [
        "//caffe2:torch",
        "//executorch/exir/backend/canonical_partitioners:group_partitioner_lib",
        "//executorch/backends/xnnpack/partition:xnnpack_partitioner",
        "//executorch/backends/xnnpack/quantizer:xnnpack_quantizer",
        "//executorch/exir:lib",
        "//pytorch/ao:torchao",
    ],
)
