module(
    name = "llvm",
    version = "0.8.21",
    bazel_compatibility = [">=7.7.0"],
)

bazel_dep(name = "bazel_lib", version = "3.2.2")
bazel_dep(name = "bazel_skylib", version = "1.9.0")
bazel_dep(name = "bazel_features", version = "1.42.0")
bazel_dep(name = "platforms", version = "1.1.0")
bazel_dep(name = "rules_cc", version = "0.2.25")
bazel_dep(name = "rules_shell", version = "0.8.0")
bazel_dep(name = "rules_python", version = "1.8.0")
bazel_dep(name = "with_cfg.bzl", version = "0.12.0")
bazel_dep(name = "tar.bzl", version = "0.10.4")
bazel_dep(name = "rules_go", version = "0.62.0", repo_name = None)
bazel_dep(name = "windows_support", version = "0.4.1")
bazel_dep(name = "zlib-ng", version = "2.3.3.bcr.2", repo_name = "llvm_zlib")
bazel_dep(name = "zstd", version = "1.5.7.bcr.1", repo_name = "llvm_zstd")

http_archive = use_repo_rule("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive")

rbe_platform_repository = use_repo_rule("//:rbe.bzl", "rbe_platform_repository")

rbe_platform_repository(
    name = "rbe_platform",
)

http_archive(
    name = "llvm_fdo_zstd",
    build_file = "//toolchain/bootstrap:zstd_fdo.BUILD.bazel",
    sha256 = "7c42d56fac126929a6a85dbc73ff1db2411d04f104fae9bdea51305663a83fd0",
    strip_prefix = "zstd-1.5.2",
    urls = ["https://github.com/facebook/zstd/releases/download/v1.5.2/zstd-1.5.2.tar.gz"],
)

LLVM_VERSION = "23.1.0"

llvm = use_extension("//extensions:llvm.bzl", "llvm")
llvm.version(llvm_version = LLVM_VERSION)
llvm.configure(
    targets = [
        "AArch64",
        "AMDGPU",
        "ARM",
        "BPF",
        "NVPTX",
        "RISCV",
        "SystemZ",
        "WebAssembly",
        "X86",
    ],
)
use_repo(llvm, "llvm-project", "llvm_version")

llvm_toolchain_minimal = use_extension("//extensions:llvm_toolchain_minimal.bzl", "llvm_toolchain_minimal")
llvm_toolchain_minimal.index(file = "//extensions:llvm_toolchain_minimal_index.json")
use_repo(
    llvm_toolchain_minimal,
    "llvm-toolchain-minimal-darwin-amd64",
    "llvm-toolchain-minimal-darwin-arm64",
    "llvm-toolchain-minimal-linux-amd64",
    "llvm-toolchain-minimal-linux-arm64",
    "llvm-toolchain-minimal-windows-amd64",
    "llvm-toolchain-minimal-windows-arm64",
)

TOOLCHAIN_EXTRAS_SHA256 = {
    "darwin-amd64": "7f982146b033650295a568e2db2795753d6610919c4d0e90bc4baf53dfb88d04",
    "darwin-arm64": "4244309df7e1cb3c602597dc30b2cf25064960b877e8087dfaaa2c3f57580588",
    "linux-amd64-musl": "418a27a0ab8ecf46e2e00bd4381efc0bcb54c28312261c4f36114842e5ecb20e",
    "linux-arm64-musl": "5f6bcc5a806902de3e6564675bb9a75cdcbc6167af05e0c888b9930b8890b2e1",
    "windows-amd64-gnu": "a4d8f7893d3d373a928fe4d7be3fb113d3c73101f967718973518acb2a43544e",
    "windows-arm64-gnu": "4a3835588fe46a5d48424d57e8a1c2743215143100bb4fe10b918374787b3505",
}

TOOLCHAIN_EXTRAS_VERSION = "20260429"

[
    http_archive(
        name = "toolchain-extra-prebuilts-{target}".format(target = target.replace("-musl", "").replace("-gnu", "")),
        build_file = "//prebuilt/extras:extras.BUILD.bazel",
        sha256 = sha256,
        urls = ["https://github.com/hermeticbuild/hermetic-llvm/releases/download/prebuilts-extras-{version}/toolchain-extra-prebuilts-{version}-{target}.tar.zst".format(
            target = target,
            version = TOOLCHAIN_EXTRAS_VERSION,
        )],
    )
    for (target, sha256) in TOOLCHAIN_EXTRAS_SHA256.items()
]

tar_toolchains = use_extension("@tar.bzl//tar:extensions.bzl", "toolchains")
use_repo(
    tar_toolchains,
    "bsd_tar_toolchains_darwin_amd64",
    "bsd_tar_toolchains_darwin_arm64",
    "bsd_tar_toolchains_linux_amd64",
    "bsd_tar_toolchains_linux_arm64",
    "bsd_tar_toolchains_windows_amd64",
    "bsd_tar_toolchains_windows_arm64",
)

musl = use_extension("//runtimes/musl/extension:musl.bzl", "musl")
use_repo(musl, "musl_libc")

mingw = use_extension("//runtimes/mingw/extension:mingw.bzl", "mingw")
use_repo(mingw, "mingw")

# The Microsoft payloads remain lazily fetched: the EULA gate is evaluated
# only when an MSVC-ABI target requests @msvc_runtime.
msvc_runtime = use_extension(
    "@windows_support//windows:extensions.bzl",
    "msvc_runtime",
)
msvc_runtime.configure(
    msvc_version = "14.50.35717",
    visual_studio_installer_manifest_integrity = "sha256-qOhU+p8/uurCfXME4pfxZg1xN0ATid61fPeYPzPBb+8=",
    visual_studio_installer_manifest_url = "https://download.visualstudio.microsoft.com/download/pr/fdc37f6e-59f6-4054-838a-b476eeaa6ec3/1d82370739911457e0a2f6be15d8b5f569531b352b2eabb961429eea1e99e356/VisualStudio.vsman",
)
use_repo(msvc_runtime, "msvc_runtime")

windows_sdk = use_extension(
    "@windows_support//windows:extensions.bzl",
    "windows_sdk",
)
windows_sdk.configure(
    windows_sdk_integrity = {
        "Microsoft.Windows.SDK.CPP": "sha256-/0VWYL7gcadEcVqWZWZvopwHaBV509gVlZqe7FpVZCQ=",
        "Microsoft.Windows.SDK.CPP.arm64": "sha256-A7wMA9Q5zvhQdLvNQl+dXTptO0Z5Z6zSHaO6bf7q+mc=",
        "Microsoft.Windows.SDK.CPP.x64": "sha256-rWzpD/lAEGmdKVSLPCseUsieuBFD4hmRVdmlw4ABtSs=",
    },
    windows_sdk_version = "10.0.26100.7705",
)
use_repo(windows_sdk, "windows_sdk")

gcc = use_extension("//3rd_party/gcc/extension:gcc.bzl", "gcc")
use_repo(gcc, "gcc")

osx = use_extension("//extensions:osx.bzl", "osx")
osx.from_archive(
    sha256 = "debe353b27a13cd678b26ab216a040acf07b62c0639d8ac522df4ca07d121eb2",
    strip_prefix = "Payload/Library/Developer/CommandLineTools/SDKs/MacOSX26.5.sdk",
    type = "pkg",
    urls = [
        "https://swcdn.apple.com/content/downloads/33/19/140-17812-A_21ZLMMLY4E/zu3xwktttpoe71qiawhzgzvqss6rovawsa/CLTools_macOSNMOS_SDK.pkg",
        "https://web.archive.org/web/20260902184416id_/https://swcdn.apple.com/content/downloads/33/19/140-17812-A_21ZLMMLY4E/zu3xwktttpoe71qiawhzgzvqss6rovawsa/CLTools_macOSNMOS_SDK.pkg",
    ],
)
use_repo(osx, "macos_sdk")

glibc = use_extension("//runtimes/glibc/extension:glibc.bzl", "glibc")

# https://cerisier.github.io/glibc-headers/index.json
glibc.index(file = "//runtimes/glibc/extension:glibc_headers_index.json")
use_repo(glibc, "glibc")

kernel_headers = use_extension("//kernel/extension:kernel_headers.bzl", "kernel_headers")

# https://cerisier.github.io/kernel-headers/index.json
kernel_headers.index(file = "//kernel/extension:kernel_headers_index.json")
use_repo(kernel_headers, "kernel_headers")

######################### DEV DEPENDENCIES ###################################

bazel_dep(name = "gazelle", version = "0.47.0", dev_dependency = True)
bazel_dep(name = "bazel_skylib_gazelle_plugin", version = "1.9.0", dev_dependency = True)
bazel_dep(name = "buildifier_prebuilt", version = "8.5.1.2", dev_dependency = True)
bazel_dep(name = "rules_go", version = "0.61.1", dev_dependency = True)
bazel_dep(name = "rules_platform", version = "0.1.0", dev_dependency = True)

go_sdk = use_extension("@rules_go//go:extensions.bzl", "go_sdk", dev_dependency = True)
go_sdk.download(version = "1.25.0")

GLIBC_STUBS_GENERATOR_COMMIT = "33276300351d5a3cbedd308f4d21669b8e8ef83d"

bazel_dep(name = "glibc-stubs-generator", version = "2.0.1", dev_dependency = True)
archive_override(
    module_name = "glibc-stubs-generator",
    integrity = "sha256-q7bwGW3nRigiGuXj/2kIZMi/LFCHZpVbMD/kRdllLCg=",
    strip_prefix = "glibc-stubs-generator-{}".format(GLIBC_STUBS_GENERATOR_COMMIT),
    urls = ["https://github.com/cerisier/glibc-stubs-generator/archive/{}.tar.gz".format(GLIBC_STUBS_GENERATOR_COMMIT)],
)

LIBSTDCXX_STUBS_GENERATOR_COMMIT = "ed896a140ef8466140c3bcfd066e710a80a41ebe"

bazel_dep(name = "libstdcxx-stubs-generator", version = "0.0.1", dev_dependency = True)
archive_override(
    module_name = "libstdcxx-stubs-generator",
    integrity = "sha256-OAZfeifniTQmKit60qHpZanOLLIJVyYEiMlpN5Q7Fjw=",
    strip_prefix = "libstdcxx-stubs-generator-{}".format(LIBSTDCXX_STUBS_GENERATOR_COMMIT),
    urls = ["https://github.com/cerisier/libstdcxx-stubs-generator/archive/{}.tar.gz".format(LIBSTDCXX_STUBS_GENERATOR_COMMIT)],
)

PKGUTIL_COMMIT = "2fdc9a2d34d62332aa18e0c735afc8a7e7270530"  # v1.2.0

bazel_dep(name = "xpkgutil", version = "1.2.0", dev_dependency = True)
archive_override(
    module_name = "xpkgutil",
    integrity = "sha256-XHk51jB2RHDmeUI6JiYBAd5hqfI4kN+wpjTqE17WTqA=",
    strip_prefix = "pkgutil-{}".format(PKGUTIL_COMMIT),
    urls = ["https://github.com/cerisier/pkgutil/archive/{}.tar.gz".format(PKGUTIL_COMMIT)],
)

# pbzx support for libarchive
bazel_dep(name = "libarchive", version = "3.8.1.bcr.2", dev_dependency = True)
single_version_override(
    module_name = "libarchive",
    patch_strip = 1,
    patches = [
        "//3rd_party/libarchive:0001-libarchive_enable_xar_support.patch",
        "//3rd_party/libarchive:0002-feat-add-pbzx-read-filter.patch",
        "//3rd_party/libarchive:0003-give-mingw-acceptable-posix-types.patch",
    ],
)

# Workaround for their terrible toolchains...
bazel_dep(name = "rules_swift", version = "3.4.2", dev_dependency = True)
single_version_override(
    module_name = "rules_swift",
    patch_strip = 1,
    patches = ["//3rd_party/rules_swift:0001-allow-disabling-autoconfiguration.patch"],
    version = "3.4.2",
)

go_deps = use_extension("@gazelle//:extensions.bzl", "go_deps", dev_dependency = True)
go_deps.from_file(go_mod = "//tests/wasm:go.mod")
use_repo(go_deps, "com_github_tetratelabs_wazero")

## OVERRIDES PORTS FROM DEPENDENCIES

bazel_dep(name = "rules_zig", version = "0.12.2", dev_dependency = True)

zig = use_extension("@rules_zig//zig:extensions.bzl", "zig", dev_dependency = True)
zig.index(file = "//:zig_index.json")
zig.toolchain(zig_version = "0.14.0")
zig.mirrors(urls = [
    "https://mirror.zml.ai/zig",
])
use_repo(zig, "zig_toolchains")

register_toolchains(
    "@rules_zig//zig/target:all",
    dev_dependency = True,
)

register_toolchains(
    "@zig_toolchains//:all",
    dev_dependency = True,
)
