mirror of
				https://github.com/optim-enterprises-bv/kubernetes.git
				synced 2025-10-31 18:28: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/kubemark",  # TODO: server platforms only | ||||
|         "//cmd/linkcheck", | ||||
|         "//test/e2e:e2e.test", | ||||
|         "//test/e2e_node:e2e_node.test",  # TODO: server platforms only | ||||
|         "//test/e2e:e2e.test_binary", | ||||
|         "//test/e2e_node:e2e_node.test_binary",  # TODO: server platforms only | ||||
|         "//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", | ||||
|     files = [ | ||||
|         "//cmd/kubectl", | ||||
|         "//test/e2e:e2e.test", | ||||
|         "//test/e2e:e2e.test_binary", | ||||
|         "//vendor/github.com/onsi/ginkgo/ginkgo", | ||||
|     ], | ||||
| ) | ||||
|   | ||||
| @@ -1,10 +1,10 @@ | ||||
| package(default_visibility = ["//visibility:public"]) | ||||
|  | ||||
| load( | ||||
|     "@io_bazel_rules_go//go:def.bzl", | ||||
|     "go_binary", | ||||
|     "go_library", | ||||
|     "//build:go.bzl", | ||||
|     go_binary = "go_binary_conditional_pure", | ||||
| ) | ||||
| load("@io_bazel_rules_go//go:def.bzl", "go_library") | ||||
|  | ||||
| go_binary( | ||||
|     name = "gendocs", | ||||
|   | ||||
| @@ -1,8 +1,11 @@ | ||||
| package(default_visibility = ["//visibility:public"]) | ||||
|  | ||||
| load( | ||||
|     "//build:go.bzl", | ||||
|     go_binary = "go_binary_conditional_pure", | ||||
| ) | ||||
| load( | ||||
|     "@io_bazel_rules_go//go:def.bzl", | ||||
|     "go_binary", | ||||
|     "go_library", | ||||
|     "go_test", | ||||
| ) | ||||
|   | ||||
| @@ -1,10 +1,10 @@ | ||||
| package(default_visibility = ["//visibility:public"]) | ||||
|  | ||||
| load( | ||||
|     "@io_bazel_rules_go//go:def.bzl", | ||||
|     "go_binary", | ||||
|     "go_library", | ||||
|     "//build:go.bzl", | ||||
|     go_binary = "go_binary_conditional_pure", | ||||
| ) | ||||
| load("@io_bazel_rules_go//go:def.bzl", "go_library") | ||||
|  | ||||
| go_binary( | ||||
|     name = "genman", | ||||
|   | ||||
| @@ -1,10 +1,10 @@ | ||||
| package(default_visibility = ["//visibility:public"]) | ||||
|  | ||||
| load( | ||||
|     "@io_bazel_rules_go//go:def.bzl", | ||||
|     "go_binary", | ||||
|     "go_library", | ||||
|     "//build:go.bzl", | ||||
|     go_binary = "go_binary_conditional_pure", | ||||
| ) | ||||
| load("@io_bazel_rules_go//go:def.bzl", "go_library") | ||||
|  | ||||
| go_binary( | ||||
|     name = "genswaggertypedocs", | ||||
|   | ||||
| @@ -1,10 +1,10 @@ | ||||
| package(default_visibility = ["//visibility:public"]) | ||||
|  | ||||
| load( | ||||
|     "@io_bazel_rules_go//go:def.bzl", | ||||
|     "go_binary", | ||||
|     "go_library", | ||||
|     "//build:go.bzl", | ||||
|     go_binary = "go_binary_conditional_pure", | ||||
| ) | ||||
| load("@io_bazel_rules_go//go:def.bzl", "go_library") | ||||
|  | ||||
| go_binary( | ||||
|     name = "genyaml", | ||||
|   | ||||
| @@ -1,10 +1,10 @@ | ||||
| package(default_visibility = ["//visibility:public"]) | ||||
|  | ||||
| load( | ||||
|     "@io_bazel_rules_go//go:def.bzl", | ||||
|     "go_binary", | ||||
|     "go_library", | ||||
|     "//build:go.bzl", | ||||
|     go_binary = "go_binary_conditional_pure", | ||||
| ) | ||||
| load("@io_bazel_rules_go//go:def.bzl", "go_library") | ||||
| load("//pkg/version:def.bzl", "version_x_defs") | ||||
|  | ||||
| go_binary( | ||||
|   | ||||
| @@ -1,10 +1,10 @@ | ||||
| package(default_visibility = ["//visibility:public"]) | ||||
|  | ||||
| load( | ||||
|     "@io_bazel_rules_go//go:def.bzl", | ||||
|     "go_binary", | ||||
|     "go_library", | ||||
|     "//build:go.bzl", | ||||
|     go_binary = "go_binary_conditional_pure", | ||||
| ) | ||||
| load("@io_bazel_rules_go//go:def.bzl", "go_library") | ||||
| load("//pkg/version:def.bzl", "version_x_defs") | ||||
|  | ||||
| go_binary( | ||||
|   | ||||
| @@ -1,10 +1,10 @@ | ||||
| package(default_visibility = ["//visibility:public"]) | ||||
|  | ||||
| load( | ||||
|     "@io_bazel_rules_go//go:def.bzl", | ||||
|     "go_binary", | ||||
|     "go_library", | ||||
|     "//build:go.bzl", | ||||
|     go_binary = "go_binary_conditional_pure", | ||||
| ) | ||||
| load("@io_bazel_rules_go//go:def.bzl", "go_library") | ||||
|  | ||||
| go_binary( | ||||
|     name = "kubemark", | ||||
|   | ||||
| @@ -1,10 +1,10 @@ | ||||
| package(default_visibility = ["//visibility:public"]) | ||||
|  | ||||
| load( | ||||
|     "@io_bazel_rules_go//go:def.bzl", | ||||
|     "go_binary", | ||||
|     "go_library", | ||||
|     "//build:go.bzl", | ||||
|     go_binary = "go_binary_conditional_pure", | ||||
| ) | ||||
| load("@io_bazel_rules_go//go:def.bzl", "go_library") | ||||
|  | ||||
| go_binary( | ||||
|     name = "linkcheck", | ||||
|   | ||||
| @@ -1,14 +1,15 @@ | ||||
| package(default_visibility = ["//visibility:public"]) | ||||
|  | ||||
| load( | ||||
|     "@io_bazel_rules_go//go:def.bzl", | ||||
|     "go_library", | ||||
|     "go_test", | ||||
|     "//build:go.bzl", | ||||
|     go_test = "go_test_conditional_pure", | ||||
| ) | ||||
| load("@io_bazel_rules_go//go:def.bzl", "go_library") | ||||
|  | ||||
| go_test( | ||||
|     name = "go_default_test", | ||||
|     srcs = ["e2e_test.go"], | ||||
|     out = "e2e.test", | ||||
|     embed = [":go_default_library"], | ||||
|     tags = ["e2e"], | ||||
|     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( | ||||
|     name = "package-srcs", | ||||
|     srcs = glob(["**"]), | ||||
|   | ||||
| @@ -1,6 +1,10 @@ | ||||
| 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( | ||||
|     name = "go_default_test", | ||||
| @@ -8,6 +12,7 @@ go_test( | ||||
|         "e2e_kubeadm_suite_test.go", | ||||
|         "kubeadm_test.go", | ||||
|     ], | ||||
|     out = "e2e_kubeadm.test", | ||||
|     embed = [":go_default_library"], | ||||
|     tags = ["e2e"], | ||||
|     deps = [ | ||||
| @@ -32,15 +37,6 @@ filegroup( | ||||
|     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( | ||||
|     name = "all-srcs", | ||||
|     srcs = [ | ||||
|   | ||||
| @@ -1,6 +1,10 @@ | ||||
| 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( | ||||
|     name = "go_default_library", | ||||
| @@ -106,6 +110,7 @@ go_test( | ||||
|         "summary_test.go", | ||||
|         "volume_manager_test.go", | ||||
|     ], | ||||
|     out = "e2e_node.test", | ||||
|     embed = [":go_default_library"], | ||||
|     tags = ["e2e"], | ||||
|     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( | ||||
|     name = "package-srcs", | ||||
|     srcs = glob(["**"]), | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 Jeff Grafton
					Jeff Grafton