diff options
Diffstat (limited to 'go/toolchain/toolchains.bzl')
-rw-r--r-- | go/toolchain/toolchains.bzl | 78 |
1 files changed, 78 insertions, 0 deletions
diff --git a/go/toolchain/toolchains.bzl b/go/toolchain/toolchains.bzl new file mode 100644 index 00000000..b4e070cf --- /dev/null +++ b/go/toolchain/toolchains.bzl @@ -0,0 +1,78 @@ +# Copyright 2019 The Bazel Authors. All rights reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +load( + "//go/private:platforms.bzl", + "GOARCH_CONSTRAINTS", + "GOOS_CONSTRAINTS", + "PLATFORMS", +) + +def declare_constraints(): + """Generates constraint_values and platform targets for valid platforms. + + Each constraint_value corresponds to a valid goos or goarch. + The goos and goarch values belong to the constraint_settings + @platforms//os:os and @platforms//cpu:cpu, respectively. + To avoid redundancy, if there is an equivalent value in @platforms, + we define an alias here instead of another constraint_value. + + Each platform defined here selects a goos and goarch constraint value. + These platforms may be used with --platforms for cross-compilation, + though users may create their own platforms (and + @bazel_tools//platforms:default_platform will be used most of the time). + """ + for goos, constraint in GOOS_CONSTRAINTS.items(): + if constraint.startswith("@io_bazel_rules_go//go/toolchain:"): + native.constraint_value( + name = goos, + constraint_setting = "@platforms//os:os", + ) + else: + native.alias( + name = goos, + actual = constraint, + ) + + for goarch, constraint in GOARCH_CONSTRAINTS.items(): + if constraint.startswith("@io_bazel_rules_go//go/toolchain:"): + native.constraint_value( + name = goarch, + constraint_setting = "@platforms//cpu:cpu", + ) + else: + native.alias( + name = goarch, + actual = constraint, + ) + + native.constraint_setting( + name = "cgo_constraint", + ) + + native.constraint_value( + name = "cgo_on", + constraint_setting = ":cgo_constraint", + ) + + native.constraint_value( + name = "cgo_off", + constraint_setting = ":cgo_constraint", + ) + + for p in PLATFORMS: + native.platform( + name = p.name, + constraint_values = p.constraints, + ) |