aboutsummaryrefslogtreecommitdiff
path: root/go/toolchain/toolchains.bzl
diff options
context:
space:
mode:
Diffstat (limited to 'go/toolchain/toolchains.bzl')
-rw-r--r--go/toolchain/toolchains.bzl78
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,
+ )