# Copyright 2026 The IREE Authors
#
# Licensed under the Apache License v2.0 with LLVM Exceptions.
# See https://llvm.org/LICENSE.txt for license information.
# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception

# bazel-to-cmake: skip
# Both files are written by hand

load("@rules_python//python:defs.bzl", "py_library")
load("@rules_python//python:pip.bzl", "whl_filegroup")
load(
    "//build_tools/bazel:build_defs.oss.bzl",
    "iree_cc_library",
    "iree_runtime_cc_binary",
    "iree_runtime_cc_library",
)

package(
    default_visibility = ["//visibility:public"],
    features = ["layering_check"],
    licenses = ["notice"],  # Apache 2.0
)

py_library(
    name = "runtime_files",
    srcs = glob(["iree/**/*.py"]),
)

exports_files(glob([
    "iree/**/*.py",
    "iree/**/*.pyi",
]))

whl_filegroup(
    name = "numpy_includes",
    pattern = "numpy/_core/include/.*",
    whl = "@pip//numpy:whl",
)

iree_cc_library(
    name = "numpy_headers",
    hdrs = [":numpy_includes"],
    includes = ["numpy_includes/numpy/_core/include"],
    visibility = ["//visibility:private"],
)

NANOBIND_COPTS = [
    "-fexceptions",
    "-frtti",
]

NANOBIND_FEATURES = [
    "-use_header_modules",
]

iree_runtime_cc_library(
    name = "bindings_python",
    srcs = [
        "hal.cc",
        "invoke.cc",
        "io.cc",
        "loop.cc",
        "numpy_interop.cc",
        "py_module.cc",
        "status_utils.cc",
        "tokenizer.cc",
        "vm.cc",
    ],
    hdrs = [
        "binding.h",
        "buffer_interop.h",
        "hal.h",
        "invoke.h",
        "io.h",
        "local_dlpack.h",
        "loop.h",
        "numpy_interop.h",
        "py_module.h",
        "status_utils.h",
        "tokenizer.h",
        "vm.h",
    ],
    copts = NANOBIND_COPTS,
    features = NANOBIND_FEATURES,
    deps = [
        ":numpy_headers",
        "//runtime/src/iree/async",
        "//runtime/src/iree/async/util:proactor_pool",
        "//runtime/src/iree/base",
        "//runtime/src/iree/base/internal:path",
        "//runtime/src/iree/base/threading",
        "//runtime/src/iree/base/tooling:flags",
        "//runtime/src/iree/hal",
        "//runtime/src/iree/hal/drivers",
        "//runtime/src/iree/hal/utils:allocators",
        "//runtime/src/iree/io:file_handle",
        "//runtime/src/iree/io:parameter_index",
        "//runtime/src/iree/io:parameter_index_provider",
        "//runtime/src/iree/io:parameter_provider",
        "//runtime/src/iree/io/formats:parser_registry",
        "//runtime/src/iree/io/formats/irpa",
        "//runtime/src/iree/modules/hal",
        "//runtime/src/iree/modules/io/parameters",
        "//runtime/src/iree/schemas:parameter_archive",
        "//runtime/src/iree/tokenizer",
        "//runtime/src/iree/tokenizer/format/huggingface:tokenizer_json",
        "//runtime/src/iree/tokenizer/format/tiktoken",
        "//runtime/src/iree/tokenizer/vocab",
        "//runtime/src/iree/tooling:device_util",
        "//runtime/src/iree/tooling/modules",
        "//runtime/src/iree/vm",
        "//runtime/src/iree/vm/bytecode:module",
        "@nanobind",
        "@rules_python//python/cc:current_py_cc_headers",
    ],
)

iree_runtime_cc_binary(
    name = "_runtime.so",
    srcs = ["initialize_module.cc"],
    copts = NANOBIND_COPTS,
    features = NANOBIND_FEATURES,
    linkopts = select({
        "@platforms//os:linux": ["-Wl,--export-dynamic"],
        "//conditions:default": [],
    }),
    linkshared = 1,
    linkstatic = 0,
    deps = [
        ":bindings_python",
        "//runtime/src/iree/base/tooling:flags",
        "//runtime/src/iree/hal/drivers",
        "@nanobind",
    ],
)
