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