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