xref: /aosp_15_r20/external/bazelbuild-rules_go/go/toolchain/toolchains.bzl (revision 9bb1b549b6a84214c53be0924760be030e66b93a)
1*9bb1b549SSpandan Das# Copyright 2019 The Bazel Authors. All rights reserved.
2*9bb1b549SSpandan Das#
3*9bb1b549SSpandan Das# Licensed under the Apache License, Version 2.0 (the "License");
4*9bb1b549SSpandan Das# you may not use this file except in compliance with the License.
5*9bb1b549SSpandan Das# You may obtain a copy of the License at
6*9bb1b549SSpandan Das#
7*9bb1b549SSpandan Das#    http://www.apache.org/licenses/LICENSE-2.0
8*9bb1b549SSpandan Das#
9*9bb1b549SSpandan Das# Unless required by applicable law or agreed to in writing, software
10*9bb1b549SSpandan Das# distributed under the License is distributed on an "AS IS" BASIS,
11*9bb1b549SSpandan Das# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12*9bb1b549SSpandan Das# See the License for the specific language governing permissions and
13*9bb1b549SSpandan Das# limitations under the License.
14*9bb1b549SSpandan Das
15*9bb1b549SSpandan Dasload(
16*9bb1b549SSpandan Das    "//go/private:platforms.bzl",
17*9bb1b549SSpandan Das    "GOARCH_CONSTRAINTS",
18*9bb1b549SSpandan Das    "GOOS_CONSTRAINTS",
19*9bb1b549SSpandan Das    "PLATFORMS",
20*9bb1b549SSpandan Das)
21*9bb1b549SSpandan Das
22*9bb1b549SSpandan Dasdef declare_constraints():
23*9bb1b549SSpandan Das    """Generates constraint_values and platform targets for valid platforms.
24*9bb1b549SSpandan Das
25*9bb1b549SSpandan Das    Each constraint_value corresponds to a valid goos or goarch.
26*9bb1b549SSpandan Das    The goos and goarch values belong to the constraint_settings
27*9bb1b549SSpandan Das    @platforms//os:os and @platforms//cpu:cpu, respectively.
28*9bb1b549SSpandan Das    To avoid redundancy, if there is an equivalent value in @platforms,
29*9bb1b549SSpandan Das    we define an alias here instead of another constraint_value.
30*9bb1b549SSpandan Das
31*9bb1b549SSpandan Das    Each platform defined here selects a goos and goarch constraint value.
32*9bb1b549SSpandan Das    These platforms may be used with --platforms for cross-compilation,
33*9bb1b549SSpandan Das    though users may create their own platforms (and
34*9bb1b549SSpandan Das    @bazel_tools//platforms:default_platform will be used most of the time).
35*9bb1b549SSpandan Das    """
36*9bb1b549SSpandan Das    for goos, constraint in GOOS_CONSTRAINTS.items():
37*9bb1b549SSpandan Das        if constraint.startswith("@io_bazel_rules_go//go/toolchain:"):
38*9bb1b549SSpandan Das            native.constraint_value(
39*9bb1b549SSpandan Das                name = goos,
40*9bb1b549SSpandan Das                constraint_setting = "@platforms//os:os",
41*9bb1b549SSpandan Das            )
42*9bb1b549SSpandan Das        else:
43*9bb1b549SSpandan Das            native.alias(
44*9bb1b549SSpandan Das                name = goos,
45*9bb1b549SSpandan Das                actual = constraint,
46*9bb1b549SSpandan Das            )
47*9bb1b549SSpandan Das
48*9bb1b549SSpandan Das    for goarch, constraint in GOARCH_CONSTRAINTS.items():
49*9bb1b549SSpandan Das        if constraint.startswith("@io_bazel_rules_go//go/toolchain:"):
50*9bb1b549SSpandan Das            native.constraint_value(
51*9bb1b549SSpandan Das                name = goarch,
52*9bb1b549SSpandan Das                constraint_setting = "@platforms//cpu:cpu",
53*9bb1b549SSpandan Das            )
54*9bb1b549SSpandan Das        else:
55*9bb1b549SSpandan Das            native.alias(
56*9bb1b549SSpandan Das                name = goarch,
57*9bb1b549SSpandan Das                actual = constraint,
58*9bb1b549SSpandan Das            )
59*9bb1b549SSpandan Das
60*9bb1b549SSpandan Das    native.constraint_setting(
61*9bb1b549SSpandan Das        name = "cgo_constraint",
62*9bb1b549SSpandan Das    )
63*9bb1b549SSpandan Das
64*9bb1b549SSpandan Das    native.constraint_value(
65*9bb1b549SSpandan Das        name = "cgo_on",
66*9bb1b549SSpandan Das        constraint_setting = ":cgo_constraint",
67*9bb1b549SSpandan Das    )
68*9bb1b549SSpandan Das
69*9bb1b549SSpandan Das    native.constraint_value(
70*9bb1b549SSpandan Das        name = "cgo_off",
71*9bb1b549SSpandan Das        constraint_setting = ":cgo_constraint",
72*9bb1b549SSpandan Das    )
73*9bb1b549SSpandan Das
74*9bb1b549SSpandan Das    for p in PLATFORMS:
75*9bb1b549SSpandan Das        native.platform(
76*9bb1b549SSpandan Das            name = p.name,
77*9bb1b549SSpandan Das            constraint_values = p.constraints,
78*9bb1b549SSpandan Das        )
79