# Copyright 2023 The Bazel Authors. All rights reserved.
#
# 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
#
#    http://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.

# ====================
# NOTE: You probably want to use the constants in test_platforms.bzl
# Otherwise, you'll probably have to manually call Label() on these targets
# to force them to resolve in the proper context.
# ====================

load(":sh_py_run_test.bzl", "current_build_settings")

package(
    default_visibility = ["//:__subpackages__"],
)

platform(
    name = "mac",
    constraint_values = [
        "@platforms//os:macos",
    ],
)

platform(
    name = "linux",
    constraint_values = [
        "@platforms//os:linux",
    ],
)

platform(
    name = "windows",
    constraint_values = [
        "@platforms//os:windows",
    ],
)

# Used when testing downloading of toolchains for a different platform

platform(
    name = "linux_x86_64",
    constraint_values = [
        "@platforms//cpu:x86_64",
        "@platforms//os:linux",
    ],
)

platform(
    name = "linux_aarch64",
    constraint_values = [
        "@platforms//cpu:aarch64",
        "@platforms//os:linux",
    ],
)

platform(
    name = "mac_x86_64",
    constraint_values = [
        "@platforms//cpu:x86_64",
        "@platforms//os:macos",
    ],
)

platform(
    name = "windows_x86_64",
    constraint_values = [
        "@platforms//cpu:x86_64",
        "@platforms//os:windows",
    ],
)

platform(
    name = "win_aarch64",
    constraint_values = [
        "@platforms//os:windows",
        "@platforms//cpu:aarch64",
    ],
)

current_build_settings(
    name = "current_build_settings",
)
