# Part of the Crubit project, under the Apache License v2.0 with LLVM
# Exceptions. See /LICENSE for license information.
# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception

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

# https://github.com/bazelbuild/bazel-skylib/releases/tag/1.3.0

http_archive(
    name = "platforms",
    sha256 = "3a561c99e7bdbe9173aa653fd579fe849f1d8d67395780ab4770b1f381431d51",
    urls = [
        "https://mirror.bazel.build/github.com/bazelbuild/platforms/releases/download/0.0.7/platforms-0.0.7.tar.gz",
        "https://github.com/bazelbuild/platforms/releases/download/0.0.7/platforms-0.0.7.tar.gz",
    ],
)

http_archive(
    name = "bazel_skylib",
    sha256 = "74d544d96f4a5bb630d465ca8bbcfe231e3594e5aae57e1edbf17a6eb3ca2506",
    urls = [
        "https://mirror.bazel.build/github.com/bazelbuild/bazel-skylib/releases/download/1.3.0/bazel-skylib-1.3.0.tar.gz",
        "https://github.com/bazelbuild/bazel-skylib/releases/download/1.3.0/bazel-skylib-1.3.0.tar.gz",
    ],
)

load("@bazel_skylib//:workspace.bzl", "bazel_skylib_workspace")

bazel_skylib_workspace()

http_archive(
    name = "rules_license",
    sha256 = "6157e1e68378532d0241ecd15d3c45f6e5cfd98fc10846045509fb2a7cc9e381",
    urls = [
        "https://mirror.bazel.build/github.com/bazelbuild/rules_license/releases/download/0.0.4/rules_license-0.0.4.tar.gz",
        "https://github.com/bazelbuild/rules_license/releases/download/0.0.4/rules_license-0.0.4.tar.gz",
    ],
)

http_archive(
    name = "rules_rust",
    patch_args = [
        "-p1",
    ],
    patches = [
        # copybara:strip_begin(Google-internal)
        # The patch is based on the copybara transformations here:
        # http://google3/third_party/bazel_rules/rules_rust/copy.bara.sky;l=398;rcl=549936350
        # copybara:strip_end
        "@@//bazel/rules_rust:attach_rust_bindings_from_cc_aspect.patch",
    ],
    sha256 = "4a9cb4fda6ccd5b5ec393b2e944822a62e050c7c06f1ea41607f14c4fdec57a2",
    urls = ["https://github.com/bazelbuild/rules_rust/releases/download/0.25.1/rules_rust-v0.25.1.tar.gz"],
)

load("@rules_rust//rust:repositories.bzl", "rules_rust_dependencies", "rust_register_toolchains")

rules_rust_dependencies()

RUST_TOOLCHAIN_VERSION = "nightly/2024-04-14"

rust_register_toolchains(
    allocator_library = "@//common:rust_allocator_shims",
    dev_components = True,
    edition = "2021",
    versions = [
        RUST_TOOLCHAIN_VERSION,
    ],
)

load("@rules_rust//crate_universe:repositories.bzl", "crate_universe_dependencies")

crate_universe_dependencies()

load("@rules_rust//crate_universe:defs.bzl", "crate", "crates_repository", "render_config")

# after changing `packages`, re-generate Cargo.lock:
#   CARGO_BAZEL_REPIN=1 bazelisk sync --only=crate_index
crates_repository(
    name = "crate_index",
    cargo_lockfile = "//:Cargo.lock",
    packages = {
        "anyhow": crate.spec(
            version = ">0.0.0",
        ),
        "clap": crate.spec(
            features = [
                "derive",
                "color",
                "derive",
                "env",
                "std",
                "string",
                "suggestions",
            ],
            version = ">=4.3.12",
        ),
        "either": crate.spec(
            version = ">1.0.0",
        ),
        "flagset": crate.spec(
            version = ">0.0.0",
        ),
        "itertools": crate.spec(
            version = ">0.0.0",
        ),
        "maplit": crate.spec(
            version = ">0.0.0",
        ),
        "once_cell": crate.spec(
            version = ">0.0.0",
        ),
        "pin-project": crate.spec(
            version = ">0.0.0",
        ),
        "proc-macro2": crate.spec(
            version = ">0.0.0",
        ),
        "quote": crate.spec(
            version = ">0.0.0",
        ),
        "regex": crate.spec(
            version = ">=1.6.0",
        ),
        "salsa": crate.spec(
            version = ">0.0.0",
        ),
        "serde": crate.spec(
            features = [
                "derive",
                "rc",
            ],
            version = ">0.0.0",
        ),
        "serde_json": crate.spec(
            version = ">0.0.0",
        ),
        "static_assertions": crate.spec(
            version = ">0.0.0",
        ),
        "syn": crate.spec(
            features = ["extra-traits"],
            version = ">0.0.0",
        ),
        "tempfile": crate.spec(
            version = "=3.4.0",
        ),
        "unicode-ident": crate.spec(
            version = ">0.0.0",
        ),
    },
    render_config = render_config(
        default_package_name = "",
    ),
    rust_version = RUST_TOOLCHAIN_VERSION,
)

load("@crate_index//:defs.bzl", "crate_repositories")

crate_repositories()

# https://google.github.io/googletest/quickstart-bazel.html
http_archive(
    name = "com_google_googletest",
    sha256 = "7fda611bceb5a793824a3c63ecbf68d2389e70c38f5763e9b1d415ca24912f44",
    strip_prefix = "googletest-1336c4b6d1a6f4bc6beebccb920e5ff858889292",
    urls = ["https://github.com/google/googletest/archive/1336c4b6d1a6f4bc6beebccb920e5ff858889292.zip"],
)

# zstd is a dependency of llvm.  See https://reviews.llvm.org/D143344#4232172
http_archive(
    name = "llvm_zstd",
    build_file = "@llvm-raw//utils/bazel/third_party_build:zstd.BUILD",
    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-project//llvm:Support needs zlib.
http_archive(
    name = "llvm_zlib",
    build_file = "@llvm-raw//utils/bazel/third_party_build:zlib-ng.BUILD",
    sha256 = "e36bb346c00472a1f9ff2a0a4643e590a254be6379da7cddd9daeb9a7f296731",
    strip_prefix = "zlib-ng-2.0.7",
    urls = [
        "https://github.com/zlib-ng/zlib-ng/archive/refs/tags/2.0.7.zip",
    ],
)

# Create the "loader" repository, then use it to configure the desired LLVM
# repository. For more details, see the comment in bazel/llvm.bzl.

load("//bazel:llvm.bzl", "llvm_loader_repository", "llvm_loader_repository_dependencies")

llvm_loader_repository_dependencies()

llvm_loader_repository(name = "llvm-loader")

load("@llvm-loader//:llvm.bzl", "llvm_repository")

llvm_repository(name = "llvm-project")

# protobuf (used in nullability/; crubit proper should not depend on it)
http_archive(
    name = "rules_proto",
    sha256 = "dc3fb206a2cb3441b485eb1e423165b231235a1ea9b031b4433cf7bc1fa460dd",
    strip_prefix = "rules_proto-5.3.0-21.7",
    urls = [
        "https://github.com/bazelbuild/rules_proto/archive/refs/tags/5.3.0-21.7.tar.gz",
    ],
)

load("@rules_proto//proto:repositories.bzl", "rules_proto_dependencies", "rules_proto_toolchains")

rules_proto_dependencies()

rules_proto_toolchains()
