# Copyright 2024 The Pigweed Authors
#
# Licensed under the Apache License, Version 2.0 (the "License"); you may not
# use this file except in compliance with the License. You may obtain a copy of
# the License at
#
#     https://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
# License for the specific language governing permissions and limitations under
# the License.
module(
    name = "quickstart",
)

bazel_dep(name = "bazel_skylib", version = "1.7.1")
bazel_dep(name = "freertos", version = "10.5.1.bcr.2")
bazel_dep(name = "nanopb", repo_name = "com_github_nanopb_nanopb")
bazel_dep(name = "pico-sdk", version = "2.0.0")
bazel_dep(name = "pigweed")
bazel_dep(name = "platforms", version = "0.0.10")
bazel_dep(name = "pw_toolchain")
bazel_dep(name = "rules_platform", version = "0.1.0")
bazel_dep(name = "rules_python", version = "0.34.0")

bazel_dep(name = "hedron_compile_commands", dev_dependency = True)

# Module overrides
# ================
# TODO: https://pwbug.dev/349880767 - Point this back to the upstream repo once
# this PR is merged.
archive_override(
    module_name = "hedron_compile_commands",
    strip_prefix = "bazel-compile-commands-extractor-163521345aa6366fd1ed801b989b668b5c806f69",
    urls = ["https://github.com/chadnorvell/bazel-compile-commands-extractor/archive/163521345aa6366fd1ed801b989b668b5c806f69.tar.gz"],
)

# TODO: https://pwbug.dev/354274498 - nanopb is not yet in the BCR.
git_override(
    module_name = "nanopb",
    commit = "7c6c581bc6f7406a4f01c3b9853251ff0a68458b",
    remote = "https://github.com/nanopb/nanopb.git",
)

git_override(
    module_name = "pigweed",
    # ROLL: Warning: this entry is automatically updated.
    # ROLL: Last updated 2024-11-20.
    # ROLL: By https://cr-buildbucket.appspot.com/build/8730709639177749697.
    commit = "55f09ff7516de0be1f75bf8154a9a370690f67c5",
    remote = "https://pigweed.googlesource.com/pigweed/pigweed",
)

git_override(
    module_name = "pw_toolchain",
    # ROLL: Warning: this entry is automatically updated.
    # ROLL: Last updated 2024-11-20.
    # ROLL: By https://cr-buildbucket.appspot.com/build/8730709639177749697.
    commit = "55f09ff7516de0be1f75bf8154a9a370690f67c5",
    remote = "https://pigweed.googlesource.com/pigweed/pigweed",
    strip_prefix = "pw_toolchain_bazel",
)

# Toolchain registration
# ======================
# Register Pigweed's C++ toolchains.
register_toolchains(
    "@pigweed//pw_toolchain:cc_toolchain_cortex-m0",
    "@pigweed//pw_toolchain:cc_toolchain_cortex-m33",
    "@pigweed//pw_toolchain/host_clang:host_cc_toolchain_linux",
    "@pigweed//pw_toolchain/host_clang:host_cc_toolchain_macos",
    dev_dependency = True,
)
