github.com/bazelbuild/rules_go@v0.47.2-0.20240515105122-e7ddb9ea474e/go/toolchain/toolchains.bzl (about)

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