mirror of
				https://github.com/optim-enterprises-bv/kubernetes.git
				synced 2025-10-31 10:18:13 +00:00 
			
		
		
		
	Create work-around wrappers for pure attribute on go_binary and go_test
This enables cgo when cross-compiling certain tests and binaries to Linux, while disabling cgo for Windows and Darwin.
This commit is contained in:
		| @@ -143,8 +143,8 @@ filegroup( | |||||||
|         "//cmd/genyaml", |         "//cmd/genyaml", | ||||||
|         "//cmd/kubemark",  # TODO: server platforms only |         "//cmd/kubemark",  # TODO: server platforms only | ||||||
|         "//cmd/linkcheck", |         "//cmd/linkcheck", | ||||||
|         "//test/e2e:e2e.test", |         "//test/e2e:e2e.test_binary", | ||||||
|         "//test/e2e_node:e2e_node.test",  # TODO: server platforms only |         "//test/e2e_node:e2e_node.test_binary",  # TODO: server platforms only | ||||||
|         "//vendor/github.com/onsi/ginkgo/ginkgo", |         "//vendor/github.com/onsi/ginkgo/ginkgo", | ||||||
|     ], |     ], | ||||||
| ) | ) | ||||||
|   | |||||||
							
								
								
									
										103
									
								
								build/go.bzl
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										103
									
								
								build/go.bzl
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,103 @@ | |||||||
|  | # Copyright 2019 The Kubernetes Authors. | ||||||
|  | # | ||||||
|  | # 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("@io_bazel_rules_go//go:def.bzl", "go_binary", "go_test") | ||||||
|  |  | ||||||
|  | # Defines several go_binary rules to work around a Bazel issue which makes | ||||||
|  | # the pure attribute on go_binary not configurable. | ||||||
|  | # The name provided will have cgo enabled if targeting Linux, and will | ||||||
|  | # be a pure go binary otherwise. Additionally, if targeting Windows, the | ||||||
|  | # output filename will have a .exe suffix. | ||||||
|  | def go_binary_conditional_pure(name, tags = None, **kwargs): | ||||||
|  |     tags = tags or [] | ||||||
|  |     tags.append("manual") | ||||||
|  |     go_binary( | ||||||
|  |         name = "_%s-cgo" % name, | ||||||
|  |         out = name, | ||||||
|  |         pure = "off", | ||||||
|  |         tags = tags, | ||||||
|  |         **kwargs | ||||||
|  |     ) | ||||||
|  |  | ||||||
|  |     # Define a rule for both Unix and Windows exe suffixes. | ||||||
|  |     [go_binary( | ||||||
|  |         name = "_%s-pure" % out, | ||||||
|  |         out = out, | ||||||
|  |         pure = "on", | ||||||
|  |         tags = tags, | ||||||
|  |         **kwargs | ||||||
|  |     ) for out in [name, name + ".exe"]] | ||||||
|  |  | ||||||
|  |     # The real magic, where we work around the pure attribute not being | ||||||
|  |     # configurable: select the appropriate go_binary rule above based on the | ||||||
|  |     # configured platform. | ||||||
|  |     native.alias( | ||||||
|  |         name = name, | ||||||
|  |         actual = select({ | ||||||
|  |             "@io_bazel_rules_go//go/platform:linux": ":_%s-cgo" % name, | ||||||
|  |             "@io_bazel_rules_go//go/platform:windows": ":_%s.exe-pure" % name, | ||||||
|  |             "//conditions:default": ":_%s-pure" % name, | ||||||
|  |         }), | ||||||
|  |     ) | ||||||
|  |  | ||||||
|  | # Defines several go_test rules to work around a Bazel issue which makes | ||||||
|  | # the pure attribute on go_test not configurable. | ||||||
|  | # This also defines genrules to produce test binaries named ${out} and | ||||||
|  | # ${out}.exe, and an alias named ${out}_binary which automatically selects | ||||||
|  | # the correct filename suffix (i.e. with a .exe on Windows). | ||||||
|  | def go_test_conditional_pure(name, out, tags = None, **kwargs): | ||||||
|  |     tags = tags or [] | ||||||
|  |     tags.append("manual") | ||||||
|  |  | ||||||
|  |     go_test( | ||||||
|  |         name = "_%s-cgo" % name, | ||||||
|  |         pure = "off", | ||||||
|  |         testonly = False, | ||||||
|  |         tags = tags, | ||||||
|  |         **kwargs | ||||||
|  |     ) | ||||||
|  |  | ||||||
|  |     go_test( | ||||||
|  |         name = "_%s-pure" % name, | ||||||
|  |         pure = "on", | ||||||
|  |         testonly = False, | ||||||
|  |         tags = tags, | ||||||
|  |         **kwargs | ||||||
|  |     ) | ||||||
|  |  | ||||||
|  |     native.alias( | ||||||
|  |         name = name, | ||||||
|  |         actual = select({ | ||||||
|  |             "@io_bazel_rules_go//go/platform:linux": ":_%s-cgo" % name, | ||||||
|  |             "//conditions:default": ":_%s-pure" % name, | ||||||
|  |         }), | ||||||
|  |     ) | ||||||
|  |  | ||||||
|  |     [native.genrule( | ||||||
|  |         name = "gen_%s" % o, | ||||||
|  |         srcs = [name], | ||||||
|  |         outs = [o], | ||||||
|  |         cmd = "cp $< $@;", | ||||||
|  |         output_to_bindir = True, | ||||||
|  |         executable = True, | ||||||
|  |         tags = tags, | ||||||
|  |     ) for o in [out, out + ".exe"]] | ||||||
|  |  | ||||||
|  |     native.alias( | ||||||
|  |         name = "%s_binary" % out, | ||||||
|  |         actual = select({ | ||||||
|  |             "@io_bazel_rules_go//go/platform:windows": ":gen_%s.exe" % out, | ||||||
|  |             "//conditions:default": ":gen_%s" % out, | ||||||
|  |         }), | ||||||
|  |     ) | ||||||
| @@ -12,7 +12,7 @@ container_layer( | |||||||
|     directory = "/usr/local/bin", |     directory = "/usr/local/bin", | ||||||
|     files = [ |     files = [ | ||||||
|         "//cmd/kubectl", |         "//cmd/kubectl", | ||||||
|         "//test/e2e:e2e.test", |         "//test/e2e:e2e.test_binary", | ||||||
|         "//vendor/github.com/onsi/ginkgo/ginkgo", |         "//vendor/github.com/onsi/ginkgo/ginkgo", | ||||||
|     ], |     ], | ||||||
| ) | ) | ||||||
|   | |||||||
| @@ -1,10 +1,10 @@ | |||||||
| package(default_visibility = ["//visibility:public"]) | package(default_visibility = ["//visibility:public"]) | ||||||
|  |  | ||||||
| load( | load( | ||||||
|     "@io_bazel_rules_go//go:def.bzl", |     "//build:go.bzl", | ||||||
|     "go_binary", |     go_binary = "go_binary_conditional_pure", | ||||||
|     "go_library", |  | ||||||
| ) | ) | ||||||
|  | load("@io_bazel_rules_go//go:def.bzl", "go_library") | ||||||
|  |  | ||||||
| go_binary( | go_binary( | ||||||
|     name = "gendocs", |     name = "gendocs", | ||||||
|   | |||||||
| @@ -1,8 +1,11 @@ | |||||||
| package(default_visibility = ["//visibility:public"]) | package(default_visibility = ["//visibility:public"]) | ||||||
|  |  | ||||||
|  | load( | ||||||
|  |     "//build:go.bzl", | ||||||
|  |     go_binary = "go_binary_conditional_pure", | ||||||
|  | ) | ||||||
| load( | load( | ||||||
|     "@io_bazel_rules_go//go:def.bzl", |     "@io_bazel_rules_go//go:def.bzl", | ||||||
|     "go_binary", |  | ||||||
|     "go_library", |     "go_library", | ||||||
|     "go_test", |     "go_test", | ||||||
| ) | ) | ||||||
|   | |||||||
| @@ -1,10 +1,10 @@ | |||||||
| package(default_visibility = ["//visibility:public"]) | package(default_visibility = ["//visibility:public"]) | ||||||
|  |  | ||||||
| load( | load( | ||||||
|     "@io_bazel_rules_go//go:def.bzl", |     "//build:go.bzl", | ||||||
|     "go_binary", |     go_binary = "go_binary_conditional_pure", | ||||||
|     "go_library", |  | ||||||
| ) | ) | ||||||
|  | load("@io_bazel_rules_go//go:def.bzl", "go_library") | ||||||
|  |  | ||||||
| go_binary( | go_binary( | ||||||
|     name = "genman", |     name = "genman", | ||||||
|   | |||||||
| @@ -1,10 +1,10 @@ | |||||||
| package(default_visibility = ["//visibility:public"]) | package(default_visibility = ["//visibility:public"]) | ||||||
|  |  | ||||||
| load( | load( | ||||||
|     "@io_bazel_rules_go//go:def.bzl", |     "//build:go.bzl", | ||||||
|     "go_binary", |     go_binary = "go_binary_conditional_pure", | ||||||
|     "go_library", |  | ||||||
| ) | ) | ||||||
|  | load("@io_bazel_rules_go//go:def.bzl", "go_library") | ||||||
|  |  | ||||||
| go_binary( | go_binary( | ||||||
|     name = "genswaggertypedocs", |     name = "genswaggertypedocs", | ||||||
|   | |||||||
| @@ -1,10 +1,10 @@ | |||||||
| package(default_visibility = ["//visibility:public"]) | package(default_visibility = ["//visibility:public"]) | ||||||
|  |  | ||||||
| load( | load( | ||||||
|     "@io_bazel_rules_go//go:def.bzl", |     "//build:go.bzl", | ||||||
|     "go_binary", |     go_binary = "go_binary_conditional_pure", | ||||||
|     "go_library", |  | ||||||
| ) | ) | ||||||
|  | load("@io_bazel_rules_go//go:def.bzl", "go_library") | ||||||
|  |  | ||||||
| go_binary( | go_binary( | ||||||
|     name = "genyaml", |     name = "genyaml", | ||||||
|   | |||||||
| @@ -1,10 +1,10 @@ | |||||||
| package(default_visibility = ["//visibility:public"]) | package(default_visibility = ["//visibility:public"]) | ||||||
|  |  | ||||||
| load( | load( | ||||||
|     "@io_bazel_rules_go//go:def.bzl", |     "//build:go.bzl", | ||||||
|     "go_binary", |     go_binary = "go_binary_conditional_pure", | ||||||
|     "go_library", |  | ||||||
| ) | ) | ||||||
|  | load("@io_bazel_rules_go//go:def.bzl", "go_library") | ||||||
| load("//pkg/version:def.bzl", "version_x_defs") | load("//pkg/version:def.bzl", "version_x_defs") | ||||||
|  |  | ||||||
| go_binary( | go_binary( | ||||||
|   | |||||||
| @@ -1,10 +1,10 @@ | |||||||
| package(default_visibility = ["//visibility:public"]) | package(default_visibility = ["//visibility:public"]) | ||||||
|  |  | ||||||
| load( | load( | ||||||
|     "@io_bazel_rules_go//go:def.bzl", |     "//build:go.bzl", | ||||||
|     "go_binary", |     go_binary = "go_binary_conditional_pure", | ||||||
|     "go_library", |  | ||||||
| ) | ) | ||||||
|  | load("@io_bazel_rules_go//go:def.bzl", "go_library") | ||||||
| load("//pkg/version:def.bzl", "version_x_defs") | load("//pkg/version:def.bzl", "version_x_defs") | ||||||
|  |  | ||||||
| go_binary( | go_binary( | ||||||
|   | |||||||
| @@ -1,10 +1,10 @@ | |||||||
| package(default_visibility = ["//visibility:public"]) | package(default_visibility = ["//visibility:public"]) | ||||||
|  |  | ||||||
| load( | load( | ||||||
|     "@io_bazel_rules_go//go:def.bzl", |     "//build:go.bzl", | ||||||
|     "go_binary", |     go_binary = "go_binary_conditional_pure", | ||||||
|     "go_library", |  | ||||||
| ) | ) | ||||||
|  | load("@io_bazel_rules_go//go:def.bzl", "go_library") | ||||||
|  |  | ||||||
| go_binary( | go_binary( | ||||||
|     name = "kubemark", |     name = "kubemark", | ||||||
|   | |||||||
| @@ -1,10 +1,10 @@ | |||||||
| package(default_visibility = ["//visibility:public"]) | package(default_visibility = ["//visibility:public"]) | ||||||
|  |  | ||||||
| load( | load( | ||||||
|     "@io_bazel_rules_go//go:def.bzl", |     "//build:go.bzl", | ||||||
|     "go_binary", |     go_binary = "go_binary_conditional_pure", | ||||||
|     "go_library", |  | ||||||
| ) | ) | ||||||
|  | load("@io_bazel_rules_go//go:def.bzl", "go_library") | ||||||
|  |  | ||||||
| go_binary( | go_binary( | ||||||
|     name = "linkcheck", |     name = "linkcheck", | ||||||
|   | |||||||
| @@ -1,14 +1,15 @@ | |||||||
| package(default_visibility = ["//visibility:public"]) | package(default_visibility = ["//visibility:public"]) | ||||||
|  |  | ||||||
| load( | load( | ||||||
|     "@io_bazel_rules_go//go:def.bzl", |     "//build:go.bzl", | ||||||
|     "go_library", |     go_test = "go_test_conditional_pure", | ||||||
|     "go_test", |  | ||||||
| ) | ) | ||||||
|  | load("@io_bazel_rules_go//go:def.bzl", "go_library") | ||||||
|  |  | ||||||
| go_test( | go_test( | ||||||
|     name = "go_default_test", |     name = "go_default_test", | ||||||
|     srcs = ["e2e_test.go"], |     srcs = ["e2e_test.go"], | ||||||
|  |     out = "e2e.test", | ||||||
|     embed = [":go_default_library"], |     embed = [":go_default_library"], | ||||||
|     tags = ["e2e"], |     tags = ["e2e"], | ||||||
|     deps = [ |     deps = [ | ||||||
| @@ -78,17 +79,6 @@ go_library( | |||||||
|     ], |     ], | ||||||
| ) | ) | ||||||
|  |  | ||||||
| # This is a handwritten rule. Do not delete, it will not be regenerated by |  | ||||||
| # update-bazel.sh. |  | ||||||
| genrule( |  | ||||||
|     name = "gen_e2e.test", |  | ||||||
|     testonly = 1, |  | ||||||
|     srcs = [":go_default_test"], |  | ||||||
|     outs = ["e2e.test"], |  | ||||||
|     cmd = "srcs=($(SRCS)); cp $$(dirname $${srcs[0]})/go_default_test $@;", |  | ||||||
|     output_to_bindir = 1, |  | ||||||
| ) |  | ||||||
|  |  | ||||||
| filegroup( | filegroup( | ||||||
|     name = "package-srcs", |     name = "package-srcs", | ||||||
|     srcs = glob(["**"]), |     srcs = glob(["**"]), | ||||||
|   | |||||||
| @@ -1,6 +1,10 @@ | |||||||
| package(default_visibility = ["//visibility:public"]) | package(default_visibility = ["//visibility:public"]) | ||||||
|  |  | ||||||
| load("@io_bazel_rules_go//go:def.bzl", "go_library", "go_test") | load( | ||||||
|  |     "//build:go.bzl", | ||||||
|  |     go_test = "go_test_conditional_pure", | ||||||
|  | ) | ||||||
|  | load("@io_bazel_rules_go//go:def.bzl", "go_library") | ||||||
|  |  | ||||||
| go_test( | go_test( | ||||||
|     name = "go_default_test", |     name = "go_default_test", | ||||||
| @@ -8,6 +12,7 @@ go_test( | |||||||
|         "e2e_kubeadm_suite_test.go", |         "e2e_kubeadm_suite_test.go", | ||||||
|         "kubeadm_test.go", |         "kubeadm_test.go", | ||||||
|     ], |     ], | ||||||
|  |     out = "e2e_kubeadm.test", | ||||||
|     embed = [":go_default_library"], |     embed = [":go_default_library"], | ||||||
|     tags = ["e2e"], |     tags = ["e2e"], | ||||||
|     deps = [ |     deps = [ | ||||||
| @@ -32,15 +37,6 @@ filegroup( | |||||||
|     visibility = ["//visibility:private"], |     visibility = ["//visibility:private"], | ||||||
| ) | ) | ||||||
|  |  | ||||||
| genrule( |  | ||||||
|     name = "gen_e2e_kubeadm.test", |  | ||||||
|     testonly = 1, |  | ||||||
|     srcs = [":go_default_test"], |  | ||||||
|     outs = ["e2e_kubeadm.test"], |  | ||||||
|     cmd = "srcs=($(SRCS)); cp $$(dirname $${srcs[0]})/go_default_test $@;", |  | ||||||
|     output_to_bindir = 1, |  | ||||||
| ) |  | ||||||
|  |  | ||||||
| filegroup( | filegroup( | ||||||
|     name = "all-srcs", |     name = "all-srcs", | ||||||
|     srcs = [ |     srcs = [ | ||||||
|   | |||||||
| @@ -1,6 +1,10 @@ | |||||||
| package(default_visibility = ["//visibility:public"]) | package(default_visibility = ["//visibility:public"]) | ||||||
|  |  | ||||||
| load("@io_bazel_rules_go//go:def.bzl", "go_library", "go_test") | load( | ||||||
|  |     "//build:go.bzl", | ||||||
|  |     go_test = "go_test_conditional_pure", | ||||||
|  | ) | ||||||
|  | load("@io_bazel_rules_go//go:def.bzl", "go_library") | ||||||
|  |  | ||||||
| go_library( | go_library( | ||||||
|     name = "go_default_library", |     name = "go_default_library", | ||||||
| @@ -106,6 +110,7 @@ go_test( | |||||||
|         "summary_test.go", |         "summary_test.go", | ||||||
|         "volume_manager_test.go", |         "volume_manager_test.go", | ||||||
|     ], |     ], | ||||||
|  |     out = "e2e_node.test", | ||||||
|     embed = [":go_default_library"], |     embed = [":go_default_library"], | ||||||
|     tags = ["e2e"], |     tags = ["e2e"], | ||||||
|     deps = [ |     deps = [ | ||||||
| @@ -180,15 +185,6 @@ go_test( | |||||||
|     }), |     }), | ||||||
| ) | ) | ||||||
|  |  | ||||||
| genrule( |  | ||||||
|     name = "gen_e2e_node.test", |  | ||||||
|     testonly = 1, |  | ||||||
|     srcs = [":go_default_test"], |  | ||||||
|     outs = ["e2e_node.test"], |  | ||||||
|     cmd = "srcs=($(SRCS)); cp $$(dirname $${srcs[0]})/go_default_test $@;", |  | ||||||
|     output_to_bindir = 1, |  | ||||||
| ) |  | ||||||
|  |  | ||||||
| filegroup( | filegroup( | ||||||
|     name = "package-srcs", |     name = "package-srcs", | ||||||
|     srcs = glob(["**"]), |     srcs = glob(["**"]), | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user
	 Jeff Grafton
					Jeff Grafton