# Copyright 2024 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 module configuration for IREE."""

module(
    name = "iree_core",
    version = "0.0.1",
)

# Core Bazel dependencies - versions aligned with LLVM's MODULE.bazel
bazel_dep(name = "apple_support", version = "1.24.1", repo_name = "build_bazel_apple_support")
bazel_dep(name = "bazel_skylib", version = "1.8.2")
bazel_dep(name = "platforms", version = "1.0.0")
bazel_dep(name = "rules_cc", version = "0.2.11")
bazel_dep(name = "rules_python", version = "1.9.0")

# Python pip dependencies
pip = use_extension("@rules_python//python/extensions:pip.bzl", "pip")
pip.parse(
    hub_name = "pip",
    python_version = "3.11",
    requirements_lock = "//build_tools/bazel:requirements.txt",
)
use_repo(pip, "pip")

bazel_dep(name = "rules_shell", version = "0.6.1")

# Required by LLVM (for clang-fuzzer tools)
bazel_dep(name = "protobuf", version = "31.1", repo_name = "com_google_protobuf")

# LLVM also needs these
bazel_dep(name = "rules_android", version = "0.6.6")
bazel_dep(name = "rules_foreign_cc", version = "0.15.1")
bazel_dep(name = "zlib-ng", version = "2.0.7", repo_name = "llvm_zlib")
bazel_dep(name = "zstd", version = "1.5.7", repo_name = "llvm_zstd")

# Stack trace support on Linux.
bazel_dep(name = "libbacktrace", version = "1.0.0-20250926-7939218")

# LLVM project overlay module
bazel_dep(name = "llvm-project-overlay", version = "main")
local_path_override(
    module_name = "llvm-project-overlay",
    path = "third_party/llvm-project/utils/bazel",
)

# Use LLVM's extension for third-party dependencies
llvm_repos_ext = use_extension(
    "@llvm-project-overlay//:extensions.bzl",
    "llvm_repos_extension",
)
use_repo(
    llvm_repos_ext,
    "gmp",
    "mpc",
    "mpfr",
    "nanobind",
    "pfm",
    "pyyaml",
    "robin_map",
    # Note: vulkan_headers is provided by iree_ext with IREE's custom BUILD.overlay
    "vulkan_sdk",
)

# IREE extension creates MLIR-adjacent source repos when IREE is root and other
# IREE-specific repos unconditionally.
iree_ext = use_extension("//build_tools/bazel:extensions.bzl", "iree_extension")
use_repo(
    iree_ext,
    "abseil_cpp",
    "amdgpu_device_libs",
    "com_github_dvidelabs_flatcc",
    "com_google_benchmark",
    "com_google_googletest",
    "dawn",
    "dlmalloc",
    "hip_api_headers",
    "hsa_runtime_headers",
    "iree_amdgpu_device_toolchain",
    "iree_cuda",
    "llvm-raw",
    "nccl",
    "rccl",
    "spirv_cross",
    "spirv_headers",
    "spirv_tools",
    "stablehlo",
    "torch-mlir-raw",
    "tracy_client",
    "vulkan_headers",
    "wasi_sdk",
    "webgpu_headers",
)

# The LLVM overlay imports @llvm-raw from its own llvm_repos_extension, which
# only generates it when the overlay is the root module. IREE is the root
# module here, so inject IREE's @llvm-raw (created by iree_extension) into the
# overlay extension to satisfy its use_repo("llvm-raw").
inject_repo(llvm_repos_ext, "llvm-raw")

# Configure LLVM using the llvm-raw repo (creates llvm-project)
llvm_configure = use_repo_rule("@llvm-raw//utils/bazel:configure.bzl", "llvm_configure")

llvm_configure(
    name = "llvm-project",
    targets = [
        "AArch64",
        "AMDGPU",
        "ARM",
        "NVPTX",
        "RISCV",
        "SPIRV",
        "WebAssembly",
        "X86",
    ],
)

# Configure torch-mlir using its upstream Bazel overlay. The configured
# repository is only needed when the Torch input plugin is selected.
torch_mlir_configure = use_repo_rule("@torch-mlir-raw//utils/bazel:configure.bzl", "torch_mlir_configure")

torch_mlir_configure(
    name = "torch-mlir",
    src_workspace = "@torch-mlir-raw//:CMakeLists.txt",
)
