xref: /aosp_15_r20/external/bazelbuild-rules_go/go/private/platforms.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 Das# platforms.bzl defines PLATFORMS, a table that describes each possible
16*9bb1b549SSpandan Das# target platform. This table is used to generate config_settings,
17*9bb1b549SSpandan Das# constraint_values, platforms, and toolchains.
18*9bb1b549SSpandan Das
19*9bb1b549SSpandan DasBAZEL_GOOS_CONSTRAINTS = {
20*9bb1b549SSpandan Das    "android": "@platforms//os:android",
21*9bb1b549SSpandan Das    "darwin": "@platforms//os:osx",
22*9bb1b549SSpandan Das    "freebsd": "@platforms//os:freebsd",
23*9bb1b549SSpandan Das    "ios": "@platforms//os:ios",
24*9bb1b549SSpandan Das    "linux": "@platforms//os:linux",
25*9bb1b549SSpandan Das    "windows": "@platforms//os:windows",
26*9bb1b549SSpandan Das}
27*9bb1b549SSpandan Das
28*9bb1b549SSpandan DasBAZEL_GOARCH_CONSTRAINTS = {
29*9bb1b549SSpandan Das    "386": "@platforms//cpu:x86_32",
30*9bb1b549SSpandan Das    "amd64": "@platforms//cpu:x86_64",
31*9bb1b549SSpandan Das    "arm": "@platforms//cpu:arm",
32*9bb1b549SSpandan Das    "arm64": "@platforms//cpu:aarch64",
33*9bb1b549SSpandan Das    "ppc64": "@platforms//cpu:ppc",
34*9bb1b549SSpandan Das    "ppc64le": "@platforms//cpu:ppc",
35*9bb1b549SSpandan Das    "s390x": "@platforms//cpu:s390x",
36*9bb1b549SSpandan Das}
37*9bb1b549SSpandan Das
38*9bb1b549SSpandan DasGOOS_GOARCH = (
39*9bb1b549SSpandan Das    ("aix", "ppc64"),
40*9bb1b549SSpandan Das    ("android", "386"),
41*9bb1b549SSpandan Das    ("android", "amd64"),
42*9bb1b549SSpandan Das    ("android", "arm"),
43*9bb1b549SSpandan Das    ("android", "arm64"),
44*9bb1b549SSpandan Das    ("darwin", "386"),
45*9bb1b549SSpandan Das    ("darwin", "amd64"),
46*9bb1b549SSpandan Das    ("darwin", "arm"),
47*9bb1b549SSpandan Das    ("darwin", "arm64"),
48*9bb1b549SSpandan Das    ("dragonfly", "amd64"),
49*9bb1b549SSpandan Das    ("freebsd", "386"),
50*9bb1b549SSpandan Das    ("freebsd", "amd64"),
51*9bb1b549SSpandan Das    ("freebsd", "arm"),
52*9bb1b549SSpandan Das    ("freebsd", "arm64"),
53*9bb1b549SSpandan Das    ("illumos", "amd64"),
54*9bb1b549SSpandan Das    ("ios", "amd64"),
55*9bb1b549SSpandan Das    ("ios", "arm64"),
56*9bb1b549SSpandan Das    ("js", "wasm"),
57*9bb1b549SSpandan Das    ("linux", "386"),
58*9bb1b549SSpandan Das    ("linux", "amd64"),
59*9bb1b549SSpandan Das    ("linux", "arm"),
60*9bb1b549SSpandan Das    ("linux", "arm64"),
61*9bb1b549SSpandan Das    ("linux", "mips"),
62*9bb1b549SSpandan Das    ("linux", "mips64"),
63*9bb1b549SSpandan Das    ("linux", "mips64le"),
64*9bb1b549SSpandan Das    ("linux", "mipsle"),
65*9bb1b549SSpandan Das    ("linux", "ppc64"),
66*9bb1b549SSpandan Das    ("linux", "ppc64le"),
67*9bb1b549SSpandan Das    ("linux", "riscv64"),
68*9bb1b549SSpandan Das    ("linux", "s390x"),
69*9bb1b549SSpandan Das    ("nacl", "386"),
70*9bb1b549SSpandan Das    ("nacl", "amd64p32"),
71*9bb1b549SSpandan Das    ("nacl", "arm"),
72*9bb1b549SSpandan Das    ("netbsd", "386"),
73*9bb1b549SSpandan Das    ("netbsd", "amd64"),
74*9bb1b549SSpandan Das    ("netbsd", "arm"),
75*9bb1b549SSpandan Das    ("netbsd", "arm64"),
76*9bb1b549SSpandan Das    ("openbsd", "386"),
77*9bb1b549SSpandan Das    ("openbsd", "amd64"),
78*9bb1b549SSpandan Das    ("openbsd", "arm"),
79*9bb1b549SSpandan Das    ("openbsd", "arm64"),
80*9bb1b549SSpandan Das    ("plan9", "386"),
81*9bb1b549SSpandan Das    ("plan9", "amd64"),
82*9bb1b549SSpandan Das    ("plan9", "arm"),
83*9bb1b549SSpandan Das    ("solaris", "amd64"),
84*9bb1b549SSpandan Das    ("windows", "386"),
85*9bb1b549SSpandan Das    ("windows", "amd64"),
86*9bb1b549SSpandan Das    ("windows", "arm"),
87*9bb1b549SSpandan Das    ("windows", "arm64"),
88*9bb1b549SSpandan Das)
89*9bb1b549SSpandan Das
90*9bb1b549SSpandan DasRACE_GOOS_GOARCH = {
91*9bb1b549SSpandan Das    ("darwin", "amd64"): None,
92*9bb1b549SSpandan Das    ("freebsd", "amd64"): None,
93*9bb1b549SSpandan Das    ("linux", "amd64"): None,
94*9bb1b549SSpandan Das    ("windows", "amd64"): None,
95*9bb1b549SSpandan Das}
96*9bb1b549SSpandan Das
97*9bb1b549SSpandan DasMSAN_GOOS_GOARCH = {
98*9bb1b549SSpandan Das    ("linux", "amd64"): None,
99*9bb1b549SSpandan Das}
100*9bb1b549SSpandan Das
101*9bb1b549SSpandan DasCGO_GOOS_GOARCH = {
102*9bb1b549SSpandan Das    ("aix", "ppc64"): None,
103*9bb1b549SSpandan Das    ("android", "386"): None,
104*9bb1b549SSpandan Das    ("android", "amd64"): None,
105*9bb1b549SSpandan Das    ("android", "arm"): None,
106*9bb1b549SSpandan Das    ("android", "arm64"): None,
107*9bb1b549SSpandan Das    ("darwin", "amd64"): None,
108*9bb1b549SSpandan Das    ("darwin", "arm"): None,
109*9bb1b549SSpandan Das    ("darwin", "arm64"): None,
110*9bb1b549SSpandan Das    ("dragonfly", "amd64"): None,
111*9bb1b549SSpandan Das    ("freebsd", "386"): None,
112*9bb1b549SSpandan Das    ("freebsd", "amd64"): None,
113*9bb1b549SSpandan Das    ("freebsd", "arm"): None,
114*9bb1b549SSpandan Das    ("illumos", "amd64"): None,
115*9bb1b549SSpandan Das    ("ios", "amd64"): None,
116*9bb1b549SSpandan Das    ("ios", "arm64"): None,
117*9bb1b549SSpandan Das    ("linux", "386"): None,
118*9bb1b549SSpandan Das    ("linux", "amd64"): None,
119*9bb1b549SSpandan Das    ("linux", "arm"): None,
120*9bb1b549SSpandan Das    ("linux", "arm64"): None,
121*9bb1b549SSpandan Das    ("linux", "mips"): None,
122*9bb1b549SSpandan Das    ("linux", "mips64"): None,
123*9bb1b549SSpandan Das    ("linux", "mips64le"): None,
124*9bb1b549SSpandan Das    ("linux", "mipsle"): None,
125*9bb1b549SSpandan Das    ("linux", "ppc64le"): None,
126*9bb1b549SSpandan Das    ("linux", "riscv64"): None,
127*9bb1b549SSpandan Das    ("linux", "s390x"): None,
128*9bb1b549SSpandan Das    ("linux", "sparc64"): None,
129*9bb1b549SSpandan Das    ("netbsd", "386"): None,
130*9bb1b549SSpandan Das    ("netbsd", "amd64"): None,
131*9bb1b549SSpandan Das    ("netbsd", "arm"): None,
132*9bb1b549SSpandan Das    ("netbsd", "arm64"): None,
133*9bb1b549SSpandan Das    ("openbsd", "386"): None,
134*9bb1b549SSpandan Das    ("openbsd", "amd64"): None,
135*9bb1b549SSpandan Das    ("openbsd", "arm"): None,
136*9bb1b549SSpandan Das    ("openbsd", "arm64"): None,
137*9bb1b549SSpandan Das    ("solaris", "amd64"): None,
138*9bb1b549SSpandan Das    ("windows", "386"): None,
139*9bb1b549SSpandan Das    ("windows", "amd64"): None,
140*9bb1b549SSpandan Das    ("windows", "arm64"): None,
141*9bb1b549SSpandan Das}
142*9bb1b549SSpandan Das
143*9bb1b549SSpandan Dasdef _generate_constraints(names, bazel_constraints):
144*9bb1b549SSpandan Das    return {
145*9bb1b549SSpandan Das        name: bazel_constraints.get(name, "@io_bazel_rules_go//go/toolchain:" + name)
146*9bb1b549SSpandan Das        for name in names
147*9bb1b549SSpandan Das    }
148*9bb1b549SSpandan Das
149*9bb1b549SSpandan DasGOOS_CONSTRAINTS = _generate_constraints([p[0] for p in GOOS_GOARCH], BAZEL_GOOS_CONSTRAINTS)
150*9bb1b549SSpandan DasGOARCH_CONSTRAINTS = _generate_constraints([p[1] for p in GOOS_GOARCH], BAZEL_GOARCH_CONSTRAINTS)
151*9bb1b549SSpandan Das
152*9bb1b549SSpandan Dasdef _generate_platforms():
153*9bb1b549SSpandan Das    platforms = []
154*9bb1b549SSpandan Das    for goos, goarch in GOOS_GOARCH:
155*9bb1b549SSpandan Das        constraints = [
156*9bb1b549SSpandan Das            GOOS_CONSTRAINTS[goos],
157*9bb1b549SSpandan Das            GOARCH_CONSTRAINTS[goarch],
158*9bb1b549SSpandan Das        ]
159*9bb1b549SSpandan Das        platforms.append(struct(
160*9bb1b549SSpandan Das            name = goos + "_" + goarch,
161*9bb1b549SSpandan Das            goos = goos,
162*9bb1b549SSpandan Das            goarch = goarch,
163*9bb1b549SSpandan Das            constraints = constraints + ["@io_bazel_rules_go//go/toolchain:cgo_off"],
164*9bb1b549SSpandan Das            cgo = False,
165*9bb1b549SSpandan Das        ))
166*9bb1b549SSpandan Das        if (goos, goarch) in CGO_GOOS_GOARCH:
167*9bb1b549SSpandan Das            # On Windows, Bazel will pick an MSVC toolchain unless we
168*9bb1b549SSpandan Das            # specifically request mingw or msys.
169*9bb1b549SSpandan Das            mingw = ["@bazel_tools//tools/cpp:mingw"] if goos == "windows" else []
170*9bb1b549SSpandan Das            platforms.append(struct(
171*9bb1b549SSpandan Das                name = goos + "_" + goarch + "_cgo",
172*9bb1b549SSpandan Das                goos = goos,
173*9bb1b549SSpandan Das                goarch = goarch,
174*9bb1b549SSpandan Das                constraints = constraints + ["@io_bazel_rules_go//go/toolchain:cgo_on"] + mingw,
175*9bb1b549SSpandan Das                cgo = True,
176*9bb1b549SSpandan Das            ))
177*9bb1b549SSpandan Das
178*9bb1b549SSpandan Das    return platforms
179*9bb1b549SSpandan Das
180*9bb1b549SSpandan DasPLATFORMS = _generate_platforms()
181