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

oncall("executorch")

non_fbcode_target(_kind = define_common_targets)
fbcode_target(_kind = define_common_targets)

fbcode_target(
    _kind = runtime.python_library,
    name = "lib",
    srcs = [
        "__init__.py",
        "partitioner.py",
        "preprocess.py",
        "recipes/__init__.py",
        "recipes/cpu_recipe_provider.py",
        "recipes/cpu_recipe_types.py",
    ],
    visibility = ["PUBLIC"],
    deps = [
        "//caffe2:torch",
        "//executorch/backends/native:lib",
        "//executorch/backends/transforms:fuse_batch_norm_with_conv",
        "//executorch/backends/transforms:fuse_batch_norm_with_linear",
        "//executorch/exir:lib",
        "//executorch/exir/_serialize:lib",
        "//executorch/exir/backend:backend_details",
        "//executorch/exir/backend:compile_spec_schema",
        "//executorch/exir/backend:partitioner",
        "//executorch/exir/backend:utils",
        "//executorch/export:lib",
    ],
)

fbcode_target(
    _kind = runtime.python_library,
    name = "export_torchvision_lib",
    srcs = [
        "workflows/__init__.py",
        "workflows/export.py",
    ],
    deps = [
        ":lib",
        "//caffe2:torch",
        "//executorch/backends/native:lib",
        "//executorch/backends/xnnpack/_passes:xnnpack_passes",
        "//executorch/backends/xnnpack/recipes:xnnpack_recipes",
        "//executorch/export:lib",
        "//executorch/exir/native:native",
        "//pytorch/ao:torchao",
        "//pytorch/vision:torchvision", # @manual
    ],
)

fbcode_target(
    _kind = runtime.python_test,
    name = "test_workflow_export",
    srcs = ["test/test_workflow_export.py", "workflows/export.py"],
    deps = [
        ":lib",
        "//caffe2:torch",
        "//executorch/backends/xnnpack/_passes:xnnpack_passes",
        "//executorch/backends/xnnpack/recipes:xnnpack_recipes",
        "//executorch/export:lib",
        "//executorch/exir/native:native",
        "//pytorch/ao:torchao",
        "//pytorch/vision:torchvision", # @manual
    ],
)

fbcode_target(
    _kind = runtime.python_binary,
    name = "export_torchvision",
    par_style = "xar",
    main_module = "executorch.backends.cpu.workflows.export",
    deps = [":export_torchvision_lib"],
)

fbcode_target(
    _kind = runtime.python_test,
    name = "test_export_torchvision",
    srcs = ["test/test_export_torchvision.py"],
    deps = [
        ":export_torchvision_lib",
        "//caffe2:torch",
    ],
)

fbcode_target(
    _kind = runtime.python_test,
    name = "test_aot",
    srcs = ["test/test_aot.py"],
    deps = [
        ":lib",
        "//caffe2:torch",
        "//executorch/backends/native:lib",
        "//executorch/exir:lib",
        "//executorch/export:lib",
    ],
)

fbcode_target(
    _kind = runtime.python_library,
    name = "tester",
    srcs = ["test/tester.py"],
    visibility = ["PUBLIC"],
    deps = [
        ":lib",
        "//executorch/backends/test/harness:tester",
        "//executorch/exir:lib",
        "//executorch/extension/pybindings:portable_lib", # @manual
    ],
)

fbcode_target(
    _kind = runtime.python_test,
    name = "test_runtime",
    srcs = ["test/test_runtime.py"],
    preload_deps = [":cpu_backend"],
    deps = [
        ":lib",
        "//caffe2:torch",
        "//executorch/exir:lib",
        "//executorch/extension/pybindings:portable_lib",
    ],
)
