# Copyright 2022 The Fuchsia Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.

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

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

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

bazel_skylib_workspace()

load("@bazel_skylib//lib:versions.bzl", "versions")

versions.check(minimum_bazel_version = "5.1.0")

local_repository(
    name = "fuchsia_infra",
    path = "third_party/fuchsia-infra-bazel-rules",
)

load("@fuchsia_infra//:workspace.bzl", "fuchsia_infra_workspace")
load("@fuchsia_infra//cipd:defs.bzl", "cipd_repository", "cipd_tool_repository")

fuchsia_infra_workspace()

cipd_tool_repository(
    name = "cipd_tool",
)

cipd_repository(
    name = "fuchsia_sdk",
    cipd_bin = "@cipd_tool//:cipd",
    ensure_file = "//manifests:bazel_sdk.ensure",
)

load(
    "@fuchsia_sdk//fuchsia:deps.bzl",
    "fuchsia_clang_repository",
    "rules_fuchsia_deps",
)

rules_fuchsia_deps()

register_toolchains("@fuchsia_sdk//:fuchsia_toolchain_sdk")

fuchsia_clang_repository(
    name = "fuchsia_clang",
    cipd_bin = "@cipd_tool//:cipd",
    cipd_ensure_file = "//manifests:clang.ensure",
    sdk_root_label = "@fuchsia_sdk",
)

load("@fuchsia_clang//:defs.bzl", "register_clang_toolchains")

register_clang_toolchains()

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

http_archive(
    name = "com_grail_bazel_compdb",
    sha256 = "d32835b26dd35aad8fd0ba0d712265df6565a3ad860d39e4c01ad41059ea7eda",
    strip_prefix = "bazel-compilation-database-0.5.2",
    urls = ["https://github.com/grailbio/bazel-compilation-database/archive/0.5.2.tar.gz"],
)

# gTest.
local_repository(
    name = "com_google_googletest",
    path = "third_party/googletest",
)

# firmware blobs are fetched from CIPD
cipd_repository(
    name = "firmwares_cipd",
    build_file_content = "exports_files( glob([ \"*\"]))",
    cipd_bin = "@cipd_tool//:cipd",
    ensure_file = "//third_party/iwlwifi/firmwares/manifest:firmware.ensure",
)
