move build related files out of the root directory
This commit is contained in:
		
							
								
								
									
										6
									
								
								.bazelrc
									
									
									
									
									
								
							
							
						
						
									
										6
									
								
								.bazelrc
									
									
									
									
									
								
							| @@ -1,6 +0,0 @@ | ||||
| # Show us information about failures. | ||||
| build --verbose_failures | ||||
| test --test_output=errors | ||||
|  | ||||
| # Include git version info | ||||
| build --workspace_status_command hack/print-workspace-status.sh | ||||
							
								
								
									
										85
									
								
								BUILD.bazel
									
									
									
									
									
								
							
							
						
						
									
										85
									
								
								BUILD.bazel
									
									
									
									
									
								
							| @@ -1,85 +0,0 @@ | ||||
| package(default_visibility = ["//visibility:public"]) | ||||
|  | ||||
| licenses(["notice"]) | ||||
|  | ||||
| load("@io_bazel_rules_go//go:def.bzl", "go_prefix") | ||||
| load("@io_kubernetes_build//defs:build.bzl", "gcs_upload") | ||||
|  | ||||
| go_prefix("k8s.io/kubernetes") | ||||
|  | ||||
| filegroup( | ||||
|     name = "_binary-artifacts-and-hashes", | ||||
|     srcs = [ | ||||
|         "//build:client-targets-and-hashes", | ||||
|         "//build:docker-artifacts-and-hashes", | ||||
|         "//build:node-targets-and-hashes", | ||||
|         "//build:server-targets-and-hashes", | ||||
|         "//build/debs:debs-and-hashes", | ||||
|     ], | ||||
|     visibility = ["//visibility:private"], | ||||
| ) | ||||
|  | ||||
| gcs_upload( | ||||
|     name = "push-build", | ||||
|     data = [ | ||||
|         ":_binary-artifacts-and-hashes", | ||||
|         "//build/release-tars:release-tars-and-hashes", | ||||
|         "//cluster/gce:gcs-release-artifacts-and-hashes", | ||||
|     ], | ||||
|     upload_paths = { | ||||
|         "//:_binary-artifacts-and-hashes": "bin/linux/amd64", | ||||
|         "//build/release-tars:release-tars-and-hashes": "", | ||||
|         "//cluster/gce:gcs-release-artifacts-and-hashes": "extra/gce", | ||||
|     }, | ||||
| ) | ||||
|  | ||||
| # TODO: remove this alias after 2017-05-22 | ||||
| alias( | ||||
|     name = "ci-artifacts", | ||||
|     actual = "push-build", | ||||
|     deprecation = "This rule will be removed after 2017-05-22. Use //:push-build instead.", | ||||
| ) | ||||
|  | ||||
| filegroup( | ||||
|     name = "package-srcs", | ||||
|     srcs = glob( | ||||
|         ["**"], | ||||
|         exclude = [ | ||||
|             "bazel-*/**", | ||||
|             "_*/**", | ||||
|             ".config/**", | ||||
|             ".git/**", | ||||
|             ".gsutil/**", | ||||
|             ".make/**", | ||||
|         ], | ||||
|     ), | ||||
|     visibility = ["//visibility:private"], | ||||
| ) | ||||
|  | ||||
| filegroup( | ||||
|     name = "all-srcs", | ||||
|     srcs = [ | ||||
|         ":package-srcs", | ||||
|         "//api:all-srcs", | ||||
|         "//build:all-srcs", | ||||
|         "//cluster:all-srcs", | ||||
|         "//cmd:all-srcs", | ||||
|         "//docs:all-srcs", | ||||
|         "//examples:all-srcs", | ||||
|         "//federation:all-srcs", | ||||
|         "//hack:all-srcs", | ||||
|         "//pkg:all-srcs", | ||||
|         "//plugin:all-srcs", | ||||
|         "//test:all-srcs", | ||||
|         "//third_party:all-srcs", | ||||
|         "//vendor:all-srcs", | ||||
|     ], | ||||
|     tags = ["automanaged"], | ||||
| ) | ||||
|  | ||||
| genrule( | ||||
|     name = "save_git_version", | ||||
|     outs = ["version"], | ||||
|     cmd = "grep ^STABLE_BUILD_SCM_REVISION bazel-out/stable-status.txt | awk '{print $$2}' >$@", | ||||
|     stamp = 1, | ||||
| ) | ||||
							
								
								
									
										1
									
								
								BUILD.bazel
									
									
									
									
									
										Symbolic link
									
								
							
							
						
						
									
										1
									
								
								BUILD.bazel
									
									
									
									
									
										Symbolic link
									
								
							| @@ -0,0 +1 @@ | ||||
| build/root/BUILD.root | ||||
							
								
								
									
										536
									
								
								Makefile
									
									
									
									
									
								
							
							
						
						
									
										536
									
								
								Makefile
									
									
									
									
									
								
							| @@ -1,536 +0,0 @@ | ||||
| # Copyright 2016 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. | ||||
|  | ||||
| DBG_MAKEFILE ?= | ||||
| ifeq ($(DBG_MAKEFILE),1) | ||||
|     $(warning ***** starting Makefile for goal(s) "$(MAKECMDGOALS)") | ||||
|     $(warning ***** $(shell date)) | ||||
| else | ||||
|     # If we're not debugging the Makefile, don't echo recipes. | ||||
|     MAKEFLAGS += -s | ||||
| endif | ||||
|  | ||||
|  | ||||
| # Old-skool build tools. | ||||
| # | ||||
| # Commonly used targets (see each target for more information): | ||||
| #   all: Build code. | ||||
| #   test: Run tests. | ||||
| #   clean: Clean up. | ||||
|  | ||||
| # It's necessary to set this because some environments don't link sh -> bash. | ||||
| SHELL := /bin/bash | ||||
|  | ||||
| # We don't need make's built-in rules. | ||||
| MAKEFLAGS += --no-builtin-rules | ||||
| .SUFFIXES: | ||||
|  | ||||
| # Constants used throughout. | ||||
| .EXPORT_ALL_VARIABLES: | ||||
| OUT_DIR ?= _output | ||||
| BIN_DIR := $(OUT_DIR)/bin | ||||
| PRJ_SRC_PATH := k8s.io/kubernetes | ||||
| GENERATED_FILE_PREFIX := zz_generated. | ||||
|  | ||||
| # Metadata for driving the build lives here. | ||||
| META_DIR := .make | ||||
|  | ||||
| # Our build flags. | ||||
| # TODO(thockin): it would be nice to just use the native flags.  Can we EOL | ||||
| #                these "wrapper" flags? | ||||
| KUBE_GOFLAGS := $(GOFLAGS) | ||||
| KUBE_GOLDFLAGS := $(GOLDFLAGS) | ||||
| KUBE_GOGCFLAGS = $(GOGCFLAGS) | ||||
|  | ||||
| # Extra options for the release or quick-release options: | ||||
| KUBE_RELEASE_RUN_TESTS := $(KUBE_RELEASE_RUN_TESTS)  | ||||
| KUBE_FASTBUILD := $(KUBE_FASTBUILD) | ||||
|  | ||||
| # This controls the verbosity of the build.  Higher numbers mean more output. | ||||
| KUBE_VERBOSE ?= 1 | ||||
|  | ||||
| define ALL_HELP_INFO | ||||
| # Build code. | ||||
| # | ||||
| # Args: | ||||
| #   WHAT: Directory names to build.  If any of these directories has a 'main' | ||||
| #     package, the build will produce executable files under $(OUT_DIR)/go/bin. | ||||
| #     If not specified, "everything" will be built. | ||||
| #   GOFLAGS: Extra flags to pass to 'go' when building. | ||||
| #   GOLDFLAGS: Extra linking flags passed to 'go' when building. | ||||
| #   GOGCFLAGS: Additional go compile flags passed to 'go' when building. | ||||
| # | ||||
| # Example: | ||||
| #   make | ||||
| #   make all | ||||
| #   make all WHAT=cmd/kubelet GOFLAGS=-v | ||||
| #   make all GOGCFLAGS="-N -l" | ||||
| #     Note: Use the -N -l options to disable compiler optimizations an inlining. | ||||
| #           Using these build options allows you to subsequently use source | ||||
| #           debugging tools like delve. | ||||
| endef | ||||
| .PHONY: all | ||||
| ifeq ($(PRINT_HELP),y) | ||||
| all: | ||||
| 	@echo "$$ALL_HELP_INFO" | ||||
| else | ||||
| all: generated_files | ||||
| 	hack/make-rules/build.sh $(WHAT) | ||||
| endif | ||||
|  | ||||
| define GINKGO_HELP_INFO | ||||
| # Build ginkgo | ||||
| # | ||||
| # Example: | ||||
| # make ginkgo | ||||
| endef | ||||
| .PHONY: ginkgo | ||||
| ifeq ($(PRINT_HELP),y) | ||||
| ginkgo: | ||||
| 	@echo "$$GINKGO_HELP_INFO" | ||||
| else | ||||
| ginkgo: | ||||
| 	hack/make-rules/build.sh vendor/github.com/onsi/ginkgo/ginkgo | ||||
| endif | ||||
|  | ||||
| define VERIFY_HELP_INFO | ||||
| # Runs all the presubmission verifications. | ||||
| # | ||||
| # Args: | ||||
| #   BRANCH: Branch to be passed to verify-godeps.sh script. | ||||
| # | ||||
| # Example: | ||||
| #   make verify | ||||
| #   make verify BRANCH=branch_x | ||||
| endef | ||||
| .PHONY: verify | ||||
| ifeq ($(PRINT_HELP),y) | ||||
| verify: | ||||
| 	@echo "$$VERIFY_HELP_INFO" | ||||
| else | ||||
| verify: verify_generated_files | ||||
| 	KUBE_VERIFY_GIT_BRANCH=$(BRANCH) hack/make-rules/verify.sh -v | ||||
| 	hack/make-rules/vet.sh | ||||
| endif | ||||
|  | ||||
| define UPDATE_HELP_INFO | ||||
| # Runs all the generated updates. | ||||
| # | ||||
| # Example: | ||||
| # make update | ||||
| endef | ||||
| .PHONY: update | ||||
| ifeq ($(PRINT_HELP),y) | ||||
| update: | ||||
| 	@echo "$$UPDATE_HELP_INFO" | ||||
| else | ||||
| update: | ||||
| 	hack/update-all.sh | ||||
| endif | ||||
|  | ||||
| define CHECK_TEST_HELP_INFO | ||||
| # Build and run tests. | ||||
| # | ||||
| # Args: | ||||
| #   WHAT: Directory names to test.  All *_test.go files under these | ||||
| #     directories will be run.  If not specified, "everything" will be tested. | ||||
| #   TESTS: Same as WHAT. | ||||
| #   GOFLAGS: Extra flags to pass to 'go' when building. | ||||
| #   GOLDFLAGS: Extra linking flags to pass to 'go' when building. | ||||
| #   GOGCFLAGS: Additional go compile flags passed to 'go' when building. | ||||
| # | ||||
| # Example: | ||||
| #   make check | ||||
| #   make test | ||||
| #   make check WHAT=pkg/kubelet GOFLAGS=-v | ||||
| endef | ||||
| .PHONY: check test | ||||
| ifeq ($(PRINT_HELP),y) | ||||
| check test: | ||||
| 	@echo "$$CHECK_TEST_HELP_INFO" | ||||
| else | ||||
| check test: generated_files | ||||
| 	hack/make-rules/test.sh $(WHAT) $(TESTS) | ||||
| endif | ||||
|  | ||||
| define TEST_IT_HELP_INFO | ||||
| # Build and run integration tests. | ||||
| # | ||||
| # Args: | ||||
| #   WHAT: Directory names to test.  All *_test.go files under these | ||||
| #     directories will be run.  If not specified, "everything" will be tested. | ||||
| # | ||||
| # Example: | ||||
| #   make test-integration | ||||
| endef | ||||
| .PHONY: test-integration | ||||
| ifeq ($(PRINT_HELP),y) | ||||
| test-integration: | ||||
| 	@echo "$$TEST_IT_HELP_INFO" | ||||
| else | ||||
| test-integration: generated_files | ||||
| 	hack/make-rules/test-integration.sh $(WHAT) | ||||
| endif | ||||
|  | ||||
| define TEST_E2E_HELP_INFO | ||||
| # Build and run end-to-end tests. | ||||
| # | ||||
| # Example: | ||||
| #   make test-e2e | ||||
| endef | ||||
| .PHONY: test-e2e | ||||
| ifeq ($(PRINT_HELP),y) | ||||
| test-e2e: | ||||
| 	@echo "$$TEST_E2E_HELP_INFO" | ||||
| else | ||||
| test-e2e: ginkgo generated_files | ||||
| 	go run hack/e2e.go -- -v --build --up --test --down | ||||
| endif | ||||
|  | ||||
| define TEST_E2E_NODE_HELP_INFO | ||||
| # Build and run node end-to-end tests. | ||||
| # | ||||
| # Args: | ||||
| #  FOCUS: Regexp that matches the tests to be run.  Defaults to "". | ||||
| #  SKIP: Regexp that matches the tests that needs to be skipped.  Defaults | ||||
| #    to "". | ||||
| #  RUN_UNTIL_FAILURE: If true, pass --untilItFails to ginkgo so tests are run | ||||
| #    repeatedly until they fail.  Defaults to false. | ||||
| #  REMOTE: If true, run the tests on a remote host instance on GCE.  Defaults | ||||
| #    to false. | ||||
| #  IMAGES: For REMOTE=true only.  Comma delimited list of images for creating | ||||
| #    remote hosts to run tests against.  Defaults to a recent image. | ||||
| #  LIST_IMAGES: If true, don't run tests.  Just output the list of available | ||||
| #    images for testing.  Defaults to false. | ||||
| #  HOSTS: For REMOTE=true only.  Comma delimited list of running gce hosts to | ||||
| #    run tests against.  Defaults to "". | ||||
| #  DELETE_INSTANCES: For REMOTE=true only.  Delete any instances created as | ||||
| #    part of this test run.  Defaults to false. | ||||
| #  ARTIFACTS: For REMOTE=true only.  Local directory to scp test artifacts into | ||||
| #    from the remote hosts.  Defaults to "/tmp/_artifacts". | ||||
| #  REPORT: For REMOTE=false only.  Local directory to write juntil xml results | ||||
| #    to.  Defaults to "/tmp/". | ||||
| #  CLEANUP: For REMOTE=true only.  If false, do not stop processes or delete | ||||
| #    test files on remote hosts.  Defaults to true. | ||||
| #  IMAGE_PROJECT: For REMOTE=true only.  Project containing images provided to | ||||
| #  IMAGES.  Defaults to "kubernetes-node-e2e-images". | ||||
| #  INSTANCE_PREFIX: For REMOTE=true only.  Instances created from images will | ||||
| #    have the name "${INSTANCE_PREFIX}-${IMAGE_NAME}".  Defaults to "test". | ||||
| #  INSTANCE_METADATA: For REMOTE=true and running on GCE only. | ||||
| #  GUBERNATOR: For REMOTE=true only. Produce link to Gubernator to view logs. | ||||
| #	 Defaults to false. | ||||
| #  PARALLELISM: The number of gingko nodes to run.  Defaults to 8. | ||||
| #  RUNTIME: Container runtime to use (eg. docker, rkt, remote). | ||||
| #    Defaults to "docker". | ||||
| #  CONTAINER_RUNTIME_ENDPOINT: remote container endpoint to connect to. | ||||
| #   Used when RUNTIME is set to "remote". | ||||
| #  IMAGE_SERVICE_ENDPOINT: remote image endpoint to connect to, to prepull images. | ||||
| #   Used when RUNTIME is set to "remote". | ||||
| #  IMAGE_CONFIG_FILE: path to a file containing image configuration. | ||||
| # | ||||
| # Example: | ||||
| #   make test-e2e-node FOCUS=Kubelet SKIP=container | ||||
| #   make test-e2e-node REMOTE=true DELETE_INSTANCES=true | ||||
| #   make test-e2e-node TEST_ARGS='--kubelet-flags="--cgroups-per-qos=true"' | ||||
| # Build and run tests. | ||||
| endef | ||||
| .PHONY: test-e2e-node | ||||
| ifeq ($(PRINT_HELP),y) | ||||
| test-e2e-node: | ||||
| 	@echo "$$TEST_E2E_NODE_HELP_INFO" | ||||
| else | ||||
| test-e2e-node: ginkgo generated_files | ||||
| 	hack/make-rules/test-e2e-node.sh | ||||
| endif | ||||
|  | ||||
| define TEST_CMD_HELP_INFO | ||||
| # Build and run cmdline tests. | ||||
| # | ||||
| # Example: | ||||
| #   make test-cmd | ||||
| endef | ||||
| .PHONY: test-cmd | ||||
| ifeq ($(PRINT_HELP),y) | ||||
| test-cmd: | ||||
| 	@echo "$$TEST_CMD_HELP_INFO" | ||||
| else | ||||
| test-cmd: generated_files | ||||
| 	hack/make-rules/test-kubeadm-cmd.sh | ||||
| 	hack/make-rules/test-cmd.sh | ||||
| 	hack/make-rules/test-federation-cmd.sh | ||||
| endif | ||||
|  | ||||
| define CLEAN_HELP_INFO | ||||
| # Remove all build artifacts. | ||||
| # | ||||
| # Example: | ||||
| #   make clean | ||||
| # | ||||
| # TODO(thockin): call clean_generated when we stop committing generated code. | ||||
| endef | ||||
| .PHONY: clean | ||||
| ifeq ($(PRINT_HELP),y) | ||||
| clean: | ||||
| 	@echo "$$CLEAN_HELP_INFO" | ||||
| else | ||||
| clean: clean_meta | ||||
| 	build/make-clean.sh | ||||
| 	rm -rf $(OUT_DIR) | ||||
| 	rm -rf Godeps/_workspace # Just until we are sure it is gone | ||||
| 	# TODO(thockin): Remove this when we call clean_generated. | ||||
| 	rm -f pkg/generated/openapi/zz_generated.openapi.go | ||||
| endif | ||||
|  | ||||
| define CLEAN_META_HELP_INFO | ||||
| # Remove make-related metadata files. | ||||
| # | ||||
| # Example: | ||||
| #   make clean_meta | ||||
| endef | ||||
| .PHONY: clean_meta | ||||
| ifeq ($(PRINT_HELP),y) | ||||
| clean_meta: | ||||
| 	@echo "$$CLEAN_META_HELP_INFO" | ||||
| else | ||||
| clean_meta: | ||||
| 	rm -rf $(META_DIR) | ||||
| endif | ||||
|  | ||||
| define CLEAN_GENERATED_HELP_INFO | ||||
| # Remove all auto-generated artifacts. Generated artifacts in staging folder should not be removed as they are not | ||||
| # generated using generated_files. | ||||
| # | ||||
| # Example: | ||||
| #   make clean_generated | ||||
| endef | ||||
| .PHONY: clean_generated | ||||
| ifeq ($(PRINT_HELP),y) | ||||
| clean_generated: | ||||
| 	@echo "$$CLEAN_GENERATED_HELP_INFO" | ||||
| else | ||||
| clean_generated: | ||||
| 	find . -type f -name $(GENERATED_FILE_PREFIX)\* | grep -v "[.]/staging/.*" | xargs rm -f | ||||
| endif | ||||
|  | ||||
| define VET_HELP_INFO | ||||
| # Run 'go vet'. | ||||
| # | ||||
| # Args: | ||||
| #   WHAT: Directory names to vet.  All *.go files under these | ||||
| #     directories will be vetted.  If not specified, "everything" will be | ||||
| #     vetted. | ||||
| # | ||||
| # Example: | ||||
| #   make vet | ||||
| #   make vet WHAT=pkg/kubelet | ||||
| endef | ||||
| .PHONY: vet | ||||
| ifeq ($(PRINT_HELP),y) | ||||
| vet: | ||||
| 	@echo "$$VET_HELP_INFO" | ||||
| else | ||||
| vet: | ||||
| 	hack/make-rules/vet.sh $(WHAT) | ||||
| endif | ||||
|  | ||||
| define RELEASE_HELP_INFO | ||||
| # Build a release | ||||
| # | ||||
| # Example: | ||||
| #   make release | ||||
| endef | ||||
| .PHONY: release | ||||
| ifeq ($(PRINT_HELP),y) | ||||
| release: | ||||
| 	@echo "$$RELEASE_HELP_INFO" | ||||
| else | ||||
| release: | ||||
| 	build/release.sh | ||||
| endif | ||||
|  | ||||
| define RELEASE_SKIP_TESTS_HELP_INFO | ||||
| # Build a release, but skip tests | ||||
| #  | ||||
| # Args: | ||||
| #   KUBE_RELEASE_RUN_TESTS: Whether to run tests. Set to 'y' to run tests anyways. | ||||
| #   KUBE_FASTBUILD: Whether to cross-compile for other architectures. Set to 'true' to do so. | ||||
| # | ||||
| # Example: | ||||
| #   make release-skip-tests | ||||
| #   make quick-release | ||||
| endef | ||||
| .PHONY: release-skip-tests quick-release | ||||
| ifeq ($(PRINT_HELP),y) | ||||
| release-skip-tests quick-release: | ||||
| 	@echo "$$RELEASE_SKIP_TESTS_HELP_INFO" | ||||
| else | ||||
| release-skip-tests quick-release: KUBE_RELEASE_RUN_TESTS = n | ||||
| release-skip-tests quick-release: KUBE_FASTBUILD = true | ||||
| release-skip-tests quick-release: | ||||
| 	build/release.sh | ||||
| endif | ||||
|  | ||||
| define CROSS_HELP_INFO | ||||
| # Cross-compile for all platforms | ||||
| # | ||||
| # Example: | ||||
| #   make cross | ||||
| endef | ||||
| .PHONY: cross | ||||
| ifeq ($(PRINT_HELP),y) | ||||
| cross: | ||||
| 	@echo "$$CROSS_HELP_INFO" | ||||
| else | ||||
| cross: | ||||
| 	hack/make-rules/cross.sh | ||||
| endif | ||||
|  | ||||
| define CMD_HELP_INFO | ||||
| # Add rules for all directories in cmd/ | ||||
| # | ||||
| # Example: | ||||
| #   make kubectl kube-proxy | ||||
| endef | ||||
| #TODO: make EXCLUDE_TARGET auto-generated when there are other files in cmd/ | ||||
| #TODO: should we exclude the target "libs" but include "cmd/libs/go2idl/*"? | ||||
| EXCLUDE_TARGET=OWNERS | ||||
| .PHONY: $(filter-out %$(EXCLUDE_TARGET),$(notdir $(abspath $(wildcard cmd/*/)))) | ||||
| ifeq ($(PRINT_HELP),y) | ||||
| $(filter-out %$(EXCLUDE_TARGET),$(notdir $(abspath $(wildcard cmd/*/)))): | ||||
| 	@echo "$$CMD_HELP_INFO" | ||||
| else | ||||
| $(filter-out %$(EXCLUDE_TARGET),$(notdir $(abspath $(wildcard cmd/*/)))): generated_files | ||||
| 	hack/make-rules/build.sh cmd/$@ | ||||
| endif | ||||
|  | ||||
| define PLUGIN_CMD_HELP_INFO | ||||
| # Add rules for all directories in plugin/cmd/ | ||||
| # | ||||
| # Example: | ||||
| #   make kube-scheduler | ||||
| endef | ||||
| .PHONY: $(notdir $(abspath $(wildcard plugin/cmd/*/))) | ||||
| ifeq ($(PRINT_HELP),y) | ||||
| $(notdir $(abspath $(wildcard plugin/cmd/*/))): | ||||
| 	@echo "$$PLUGIN_CMD_HELP_INFO" | ||||
| else | ||||
| $(notdir $(abspath $(wildcard plugin/cmd/*/))): generated_files | ||||
| 	hack/make-rules/build.sh plugin/cmd/$@ | ||||
| endif | ||||
|  | ||||
| define FED_CMD_HELP_INFO | ||||
| # Add rules for all directories in federation/cmd/ | ||||
| # | ||||
| # Example: | ||||
| #   make federation-apiserver federation-controller-manager | ||||
| endef | ||||
| .PHONY: $(notdir $(abspath $(wildcard federation/cmd/*/))) | ||||
| ifeq ($(PRINT_HELP),y) | ||||
| $(notdir $(abspath $(wildcard federation/cmd/*/))): | ||||
| 	@echo "$$FED_CMD_HELP_INFO" | ||||
| else | ||||
| $(notdir $(abspath $(wildcard federation/cmd/*/))): generated_files | ||||
| 	hack/make-rules/build.sh federation/cmd/$@ | ||||
| endif | ||||
|  | ||||
| define GENERATED_FILES_HELP_INFO | ||||
| # Produce auto-generated files needed for the build. | ||||
| # | ||||
| # Example: | ||||
| #   make generated_files | ||||
| endef | ||||
| .PHONY: generated_files | ||||
| ifeq ($(PRINT_HELP),y) | ||||
| generated_files: | ||||
| 	@echo "$$GENERATED_FILES_HELP_INFO" | ||||
| else | ||||
| generated_files: | ||||
| 	$(MAKE) -f Makefile.generated_files $@ CALLED_FROM_MAIN_MAKEFILE=1 | ||||
| endif | ||||
|  | ||||
| define VERIFY_GENERATED_FILES_HELP_INFO | ||||
| # Verify auto-generated files needed for the build. | ||||
| # | ||||
| # Example: | ||||
| #   make verify_generated_files | ||||
| endef | ||||
| .PHONY: verify_generated_files | ||||
| ifeq ($(PRINT_HELP),y) | ||||
| verify_generated_files: | ||||
| 	@echo "$$VERIFY_GENERATED_FILES_HELP_INFO" | ||||
| else | ||||
| verify_generated_files: | ||||
| 	$(MAKE) -f Makefile.generated_files $@ CALLED_FROM_MAIN_MAKEFILE=1 | ||||
| endif | ||||
|  | ||||
| define HELP_INFO | ||||
| # Print make targets and help info | ||||
| # | ||||
| # Example: | ||||
| # make help | ||||
| endef | ||||
| .PHONY: help | ||||
| ifeq ($(PRINT_HELP),y) | ||||
| help: | ||||
| 	@echo "$$HELP_INFO" | ||||
| else | ||||
| help: | ||||
| 	hack/make-rules/make-help.sh | ||||
| endif | ||||
|  | ||||
| # Non-dockerized bazel rules. | ||||
| .PHONY: bazel-build bazel-test bazel-release | ||||
|  | ||||
| ifeq ($(PRINT_HELP),y) | ||||
| define BAZEL_BUILD_HELP_INFO | ||||
| # Build with bazel | ||||
| # | ||||
| # Example: | ||||
| # make bazel-build | ||||
| endef | ||||
| bazel-build: | ||||
| 	@echo "$$BAZEL_BUILD_HELP_INFO" | ||||
| else | ||||
| bazel-build: | ||||
| 	bazel build //cmd/... //pkg/... //federation/... //plugin/... //third_party/... //examples/... //test/... //vendor/k8s.io/... | ||||
| endif | ||||
|  | ||||
|  | ||||
| ifeq ($(PRINT_HELP),y) | ||||
| define BAZEL_TEST_HELP_INFO | ||||
| # Test with bazel | ||||
| # | ||||
| # Example: | ||||
| # make bazel-test | ||||
| endef | ||||
| bazel-test: | ||||
| 	@echo "$$BAZEL_TEST_HELP_INFO" | ||||
| else | ||||
| bazel-test: | ||||
| 	bazel test --test_tag_filters=-integration --flaky_test_attempts=3 //cmd/... //pkg/... //federation/... //plugin/... //third_party/... //hack/... //hack:verify-all //vendor/k8s.io/... | ||||
| endif | ||||
|  | ||||
| ifeq ($(PRINT_HELP),y) | ||||
| define BAZEL_BUILD_HELP_INFO | ||||
| # Build release tars with bazel | ||||
| # | ||||
| # Example: | ||||
| # make bazel-release | ||||
| endef | ||||
| bazel-release: | ||||
| 	@echo "$$BAZEL_BUILD_HELP_INFO" | ||||
| else | ||||
| bazel-release: | ||||
| 	bazel build //build/release-tars | ||||
| endif | ||||
| @@ -1,745 +0,0 @@ | ||||
| # Copyright 2016 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. | ||||
|  | ||||
| # Don't allow users to call this directly.  There are too many variables this | ||||
| # assumes to inherit from the main Makefile.  This is not a user-facing file. | ||||
| ifeq ($(CALLED_FROM_MAIN_MAKEFILE),) | ||||
|     $(error Please use the main Makefile, e.g. `make generated_files`) | ||||
| endif | ||||
|  | ||||
| # Don't allow an implicit 'all' rule.  This is not a user-facing file. | ||||
| ifeq ($(MAKECMDGOALS),) | ||||
|     $(error This Makefile requires an explicit rule to be specified) | ||||
| endif | ||||
|  | ||||
| ifeq ($(DBG_MAKEFILE),1) | ||||
|     $(warning ***** starting Makefile.generated_files for goal(s) "$(MAKECMDGOALS)") | ||||
|     $(warning ***** $(shell date)) | ||||
| endif | ||||
|  | ||||
|  | ||||
| # It's necessary to set this because some environments don't link sh -> bash. | ||||
| SHELL := /bin/bash | ||||
|  | ||||
| # This rule collects all the generated file sets into a single rule.  Other | ||||
| # rules should depend on this to ensure generated files are rebuilt. | ||||
| .PHONY: generated_files | ||||
| generated_files: gen_deepcopy gen_defaulter gen_conversion gen_openapi | ||||
|  | ||||
| .PHONY: verify_generated_files | ||||
| verify_generated_files: verify_gen_deepcopy    \ | ||||
|                         verify_gen_defaulter   \ | ||||
|                         verify_gen_conversion | ||||
|  | ||||
| # Code-generation logic. | ||||
| # | ||||
| # This stuff can be pretty tricky, and there's probably some corner cases that | ||||
| # we don't handle well.  That said, here's a straightforward test to prove that | ||||
| # the most common cases work.  Sadly, it is manual. | ||||
| # | ||||
| #     make clean | ||||
| #     find . -name .make\* | xargs rm -f | ||||
| #     find . -name zz_generated\* | xargs rm -f | ||||
| #     # verify `find . -name zz_generated.deepcopy.go | wc -l` is 0 | ||||
| #     # verify `find . -name .make | wc -l` is 0 | ||||
| # | ||||
| #     make nonexistent | ||||
| #     # expect "No rule to make target" | ||||
| #     # verify `find .make/ -type f | wc -l` has many files | ||||
| # | ||||
| #     make gen_deepcopy | ||||
| #     # expect deepcopy-gen is built exactly once | ||||
| #     # expect many files to be regenerated | ||||
| #     # verify `find . -name zz_generated.deepcopy.go | wc -l` has files | ||||
| #     make gen_deepcopy | ||||
| #     # expect nothing to be rebuilt, finish in O(seconds) | ||||
| #     touch pkg/api/types.go | ||||
| #     make gen_deepcopy | ||||
| #     # expect one file to be regenerated | ||||
| #     make gen_deepcopy | ||||
| #     # expect nothing to be rebuilt, finish in O(seconds) | ||||
| #     touch cmd/libs/go2idl/deepcopy-gen/main.go | ||||
| #     make gen_deepcopy | ||||
| #     # expect deepcopy-gen is built exactly once | ||||
| #     # expect many files to be regenerated | ||||
| #     # verify `find . -name zz_generated.deepcopy.go | wc -l` has files | ||||
| #     make gen_deepcopy | ||||
| #     # expect nothing to be rebuilt, finish in O(seconds) | ||||
| # | ||||
| #     make gen_conversion | ||||
| #     # expect conversion-gen is built exactly once | ||||
| #     # expect many files to be regenerated | ||||
| #     # verify `find . -name zz_generated.conversion.go | wc -l` has files | ||||
| #     make gen_conversion | ||||
| #     # expect nothing to be rebuilt, finish in O(seconds) | ||||
| #     touch pkg/api/types.go | ||||
| #     make gen_conversion | ||||
| #     # expect one file to be regenerated | ||||
| #     make gen_conversion | ||||
| #     # expect nothing to be rebuilt, finish in O(seconds) | ||||
| #     touch cmd/libs/go2idl/conversion-gen/main.go | ||||
| #     make gen_conversion | ||||
| #     # expect conversion-gen is built exactly once | ||||
| #     # expect many files to be regenerated | ||||
| #     # verify `find . -name zz_generated.conversion.go | wc -l` has files | ||||
| #     make gen_conversion | ||||
| #     # expect nothing to be rebuilt, finish in O(seconds) | ||||
| # | ||||
| #     make all | ||||
| #     # expect it to build | ||||
| # | ||||
| #     make test | ||||
| #     # expect it to pass | ||||
| # | ||||
| #     make clean | ||||
| #     # verify `find . -name zz_generated.deepcopy.go | wc -l` is 0 | ||||
| #     # verify `find . -name .make | wc -l` is 0 | ||||
| # | ||||
| #     make all WHAT=cmd/kube-proxy | ||||
| #     # expect it to build | ||||
| # | ||||
| #     make clean | ||||
| #     make test WHAT=cmd/kube-proxy | ||||
| #     # expect it to pass | ||||
|  | ||||
| # This variable holds a list of every directory that contains Go files in this | ||||
| # project.  Other rules and variables can use this as a starting point to | ||||
| # reduce filesystem accesses. | ||||
| ifeq ($(DBG_MAKEFILE),1) | ||||
|     $(warning ***** finding all *.go dirs) | ||||
| endif | ||||
| ALL_GO_DIRS := $(shell                                                   \ | ||||
|     hack/make-rules/helpers/cache_go_dirs.sh $(META_DIR)/all_go_dirs.mk  \ | ||||
| ) | ||||
|  | ||||
| # The name of the metadata file which lists *.go files in each pkg. | ||||
| GOFILES_META := gofiles.mk | ||||
|  | ||||
| # Establish a dependency between the deps file and the dir.  Whenever a dir | ||||
| # changes (files added or removed) the deps file will be considered stale. | ||||
| # | ||||
| # The variable value was set in $(GOFILES_META) and included as part of the | ||||
| # dependency management logic. | ||||
| # | ||||
| # This is looser than we really need (e.g. we don't really care about non *.go | ||||
| # files or even *_test.go files), but this is much easier to represent. | ||||
| # | ||||
| # Because we 'sinclude' the deps file, it is considered for rebuilding, as part | ||||
| # of make's normal evaluation.  If it gets rebuilt, make will restart. | ||||
| # | ||||
| # The '$(eval)' is needed because this has a different RHS for each LHS, and | ||||
| # would otherwise produce results that make can't parse. | ||||
| $(foreach dir, $(ALL_GO_DIRS), $(eval           \ | ||||
|     $(META_DIR)/$(dir)/$(GOFILES_META): $(dir)  \ | ||||
| )) | ||||
|  | ||||
| # How to rebuild a deps file.  When make determines that the deps file is stale | ||||
| # (see above), it executes this rule, and then re-loads the deps file. | ||||
| # | ||||
| # This is looser than we really need (e.g. we don't really care about test | ||||
| # files), but this is MUCH faster than calling `go list`. | ||||
| # | ||||
| # We regenerate the output file in order to satisfy make's "newer than" rules, | ||||
| # but we only need to rebuild targets if the contents actually changed.  That | ||||
| # is what the .stamp file represents. | ||||
| $(foreach dir, $(ALL_GO_DIRS),  \ | ||||
|     $(META_DIR)/$(dir)/$(GOFILES_META)): | ||||
| 	FILES=$$(ls $</*.go | grep --color=never -v $(GENERATED_FILE_PREFIX));  \ | ||||
| 	mkdir -p $(@D);                                           \ | ||||
| 	echo "gofiles__$< := $$(echo $${FILES})" >$@.tmp;         \ | ||||
| 	cmp -s $@.tmp $@ || touch $@.stamp;                       \ | ||||
| 	mv $@.tmp $@ | ||||
| # This is required to fill in the DAG, since some cases (e.g. 'make clean all') | ||||
| # will reference the .stamp file when it doesn't exist.  We don't need to | ||||
| # rebuild it in that case, just keep make happy. | ||||
| $(foreach dir, $(ALL_GO_DIRS),  \ | ||||
|     $(META_DIR)/$(dir)/$(GOFILES_META).stamp): | ||||
|  | ||||
| # Include any deps files as additional Makefile rules.  This triggers make to | ||||
| # consider the deps files for rebuild, which makes the whole | ||||
| # dependency-management logic work.  'sinclude' is "silent include" which does | ||||
| # not fail if the file does not exist. | ||||
| $(foreach dir, $(ALL_GO_DIRS), $(eval            \ | ||||
|     sinclude $(META_DIR)/$(dir)/$(GOFILES_META)  \ | ||||
| )) | ||||
|  | ||||
| # Generate a list of all files that have a `+k8s:` comment-tag.  This will be | ||||
| # used to derive lists of files/dirs for generation tools. | ||||
| ifeq ($(DBG_MAKEFILE),1) | ||||
|     $(warning ***** finding all +k8s: tags) | ||||
| endif | ||||
| ALL_K8S_TAG_FILES := $(shell                             \ | ||||
|     find $(ALL_GO_DIRS) -maxdepth 1 -type f -name \*.go  \ | ||||
|         | xargs grep --color=never -l '^// *+k8s:'       \ | ||||
| ) | ||||
|  | ||||
| # | ||||
| # Deep-copy generation | ||||
| # | ||||
| # Any package that wants deep-copy functions generated must include a | ||||
| # comment-tag in column 0 of one file of the form: | ||||
| #     // +k8s:deepcopy-gen=<VALUE> | ||||
| # | ||||
| # The <VALUE> may be one of: | ||||
| #     generate: generate deep-copy functions into the package | ||||
| #     register: generate deep-copy functions and register them with a | ||||
| #               scheme | ||||
|  | ||||
| # The result file, in each pkg, of deep-copy generation. | ||||
| DEEPCOPY_BASENAME := $(GENERATED_FILE_PREFIX)deepcopy | ||||
| DEEPCOPY_FILENAME := $(DEEPCOPY_BASENAME).go | ||||
|  | ||||
| # The tool used to generate deep copies. | ||||
| DEEPCOPY_GEN := $(BIN_DIR)/deepcopy-gen | ||||
|  | ||||
| # Find all the directories that request deep-copy generation. | ||||
| ifeq ($(DBG_MAKEFILE),1) | ||||
|     $(warning ***** finding all +k8s:deepcopy-gen tags) | ||||
| endif | ||||
| DEEPCOPY_DIRS := $(shell                                             \ | ||||
|     grep --color=never -l '+k8s:deepcopy-gen=' $(ALL_K8S_TAG_FILES)  \ | ||||
|         | xargs -n1 dirname                                          \ | ||||
|         | LC_ALL=C sort -u                                           \ | ||||
| ) | ||||
| DEEPCOPY_FILES := $(addsuffix /$(DEEPCOPY_FILENAME), $(DEEPCOPY_DIRS)) | ||||
|  | ||||
| # Shell function for reuse in rules. | ||||
| RUN_GEN_DEEPCOPY =                                                          \ | ||||
|     function run_gen_deepcopy() {                                           \ | ||||
|         if [[ -f $(META_DIR)/$(DEEPCOPY_GEN).todo ]]; then                  \ | ||||
|             ./hack/run-in-gopath.sh $(DEEPCOPY_GEN)                         \ | ||||
|                 --v $(KUBE_VERBOSE)                                         \ | ||||
|                 --logtostderr                                               \ | ||||
|                 -i $$(cat $(META_DIR)/$(DEEPCOPY_GEN).todo | paste -sd, -)  \ | ||||
|                 --bounding-dirs $(PRJ_SRC_PATH)                             \ | ||||
|                 -O $(DEEPCOPY_BASENAME)                                     \ | ||||
|                 "$$@";                                                      \ | ||||
|         fi                                                                  \ | ||||
|     };                                                                      \ | ||||
|     run_gen_deepcopy | ||||
|  | ||||
| # This rule aggregates the set of files to generate and then generates them all | ||||
| # in a single run of the tool. | ||||
| .PHONY: gen_deepcopy | ||||
| gen_deepcopy: $(DEEPCOPY_FILES) $(DEEPCOPY_GEN) | ||||
| 	$(RUN_GEN_DEEPCOPY) | ||||
|  | ||||
| .PHONY: verify_gen_deepcopy | ||||
| verify_gen_deepcopy: $(DEEPCOPY_GEN) | ||||
| 	$(RUN_GEN_DEEPCOPY) --verify-only | ||||
|  | ||||
| # For each dir in DEEPCOPY_DIRS, this establishes a dependency between the | ||||
| # output file and the input files that should trigger a rebuild. | ||||
| # | ||||
| # Note that this is a deps-only statement, not a full rule (see below).  This | ||||
| # has to be done in a distinct step because wildcards don't work in static | ||||
| # pattern rules. | ||||
| # | ||||
| # The '$(eval)' is needed because this has a different RHS for each LHS, and | ||||
| # would otherwise produce results that make can't parse. | ||||
| # | ||||
| # We depend on the $(GOFILES_META).stamp to detect when the set of input files | ||||
| # has changed.  This allows us to detect deleted input files. | ||||
| $(foreach dir, $(DEEPCOPY_DIRS), $(eval                                    \ | ||||
|     $(dir)/$(DEEPCOPY_FILENAME): $(META_DIR)/$(dir)/$(GOFILES_META).stamp  \ | ||||
|                                  $(gofiles__$(dir))                        \ | ||||
| )) | ||||
|  | ||||
| # Unilaterally remove any leftovers from previous runs. | ||||
| $(shell rm -f $(META_DIR)/$(DEEPCOPY_GEN)*.todo) | ||||
|  | ||||
| # How to regenerate deep-copy code.  This is a little slow to run, so we batch | ||||
| # it up and trigger the batch from the 'generated_files' target. | ||||
| $(DEEPCOPY_FILES): $(DEEPCOPY_GEN) | ||||
| 	mkdir -p $$(dirname $(META_DIR)/$(DEEPCOPY_GEN)) | ||||
| 	echo $(PRJ_SRC_PATH)/$(@D) >> $(META_DIR)/$(DEEPCOPY_GEN).todo | ||||
|  | ||||
| # This calculates the dependencies for the generator tool, so we only rebuild | ||||
| # it when needed.  It is PHONY so that it always runs, but it only updates the | ||||
| # file if the contents have actually changed.  We 'sinclude' this later. | ||||
| .PHONY: $(META_DIR)/$(DEEPCOPY_GEN).mk | ||||
| $(META_DIR)/$(DEEPCOPY_GEN).mk: | ||||
| 	mkdir -p $(@D);                                                       \ | ||||
| 	(echo -n "$(DEEPCOPY_GEN): ";                                         \ | ||||
| 	 ./hack/run-in-gopath.sh go list                                      \ | ||||
| 	     -f '{{.ImportPath}}{{"\n"}}{{range .Deps}}{{.}}{{"\n"}}{{end}}'  \ | ||||
| 	     ./cmd/libs/go2idl/deepcopy-gen                                   \ | ||||
| 	     | grep --color=never "^$(PRJ_SRC_PATH)/"                         \ | ||||
| 	     | xargs ./hack/run-in-gopath.sh go list                          \ | ||||
| 	         -f '{{$$d := .Dir}}{{$$d}}{{"\n"}}{{range .GoFiles}}{{$$d}}/{{.}}{{"\n"}}{{end}}'  \ | ||||
| 	     | paste -sd' ' -                                                 \ | ||||
| 	     | sed 's/ / \\=,/g'                                              \ | ||||
| 	     | tr '=,' '\n\t'                                                 \ | ||||
| 	     | sed "s|$$(pwd -P)/||";                                         \ | ||||
| 	) > $@.tmp;                                                           \ | ||||
| 	cmp -s $@.tmp $@ || cat $@.tmp > $@ && rm -f $@.tmp | ||||
|  | ||||
| # Include dependency info for the generator tool.  This will cause the rule of | ||||
| # the same name to be considered and if it is updated, make will restart. | ||||
| sinclude $(META_DIR)/$(DEEPCOPY_GEN).mk | ||||
|  | ||||
| # How to build the generator tool.  The deps for this are defined in | ||||
| # the $(DEEPCOPY_GEN).mk, above. | ||||
| # | ||||
| # A word on the need to touch: This rule might trigger if, for example, a | ||||
| # non-Go file was added or deleted from a directory on which this depends. | ||||
| # This target needs to be reconsidered, but Go realizes it doesn't actually | ||||
| # have to be rebuilt.  In that case, make will forever see the dependency as | ||||
| # newer than the binary, and try to rebuild it over and over.  So we touch it, | ||||
| # and make is happy. | ||||
| $(DEEPCOPY_GEN): | ||||
| 	hack/make-rules/build.sh cmd/libs/go2idl/deepcopy-gen | ||||
| 	touch $@ | ||||
|  | ||||
| # | ||||
| # Defaulter generation | ||||
| # | ||||
| # Any package that wants defaulter functions generated must include a | ||||
| # comment-tag in column 0 of one file of the form: | ||||
| #     // +k8s:defaulter-gen=<VALUE> | ||||
| # | ||||
| # The <VALUE> depends on context: | ||||
| #     on types: | ||||
| #       true:  always generate a defaulter for this type | ||||
| #       false: never generate a defaulter for this type | ||||
| #     on functions: | ||||
| #       covers: if the function name matches SetDefault_NAME, instructs | ||||
| #               the generator not to recurse | ||||
| #     on packages: | ||||
| #       FIELDNAME: any object with a field of this name is a candidate | ||||
| #                  for having a defaulter generated | ||||
|  | ||||
| # The result file, in each pkg, of defaulter generation. | ||||
| DEFAULTER_BASENAME := $(GENERATED_FILE_PREFIX)defaults | ||||
| DEFAULTER_FILENAME := $(DEFAULTER_BASENAME).go | ||||
|  | ||||
| # The tool used to generate defaulters. | ||||
| DEFAULTER_GEN := $(BIN_DIR)/defaulter-gen | ||||
|  | ||||
| # All directories that request any form of defaulter generation. | ||||
| ifeq ($(DBG_MAKEFILE),1) | ||||
|     $(warning ***** finding all +k8s:defaulter-gen tags) | ||||
| endif | ||||
| DEFAULTER_DIRS := $(shell                                            \ | ||||
|     grep --color=never -l '+k8s:defaulter-gen=' $(ALL_K8S_TAG_FILES) \ | ||||
|         | xargs -n1 dirname                                          \ | ||||
|         | LC_ALL=C sort -u                                           \ | ||||
| ) | ||||
|  | ||||
| DEFAULTER_FILES := $(addsuffix /$(DEFAULTER_FILENAME), $(DEFAULTER_DIRS)) | ||||
|  | ||||
| RUN_GEN_DEFAULTER :=                                                         \ | ||||
|     function run_gen_defaulter() {                                           \ | ||||
|         if [[ -f $(META_DIR)/$(DEFAULTER_GEN).todo ]]; then                  \ | ||||
|             ./hack/run-in-gopath.sh $(DEFAULTER_GEN)                         \ | ||||
|                 --v $(KUBE_VERBOSE)                                          \ | ||||
|                 --logtostderr                                                \ | ||||
|                 -i $$(cat $(META_DIR)/$(DEFAULTER_GEN).todo | paste -sd, -)  \ | ||||
|                 --extra-peer-dirs $$(echo $(addprefix $(PRJ_SRC_PATH)/, $(DEFAULTER_DIRS)) | sed 's/ /,/g') \ | ||||
|                 -O $(DEFAULTER_BASENAME)                                     \ | ||||
|                 "$$@";                                                       \ | ||||
|         fi                                                                   \ | ||||
|     };                                                                       \ | ||||
|     run_gen_defaulter | ||||
|  | ||||
| # This rule aggregates the set of files to generate and then generates them all | ||||
| # in a single run of the tool. | ||||
| .PHONY: gen_defaulter | ||||
| gen_defaulter: $(DEFAULTER_FILES) $(DEFAULTER_GEN) | ||||
| 	$(RUN_GEN_DEFAULTER) | ||||
|  | ||||
| .PHONY: verify_gen_deepcopy | ||||
| verify_gen_defaulter: $(DEFAULTER_GEN) | ||||
| 	$(RUN_GEN_DEFAULTER) --verify-only | ||||
|  | ||||
| # For each dir in DEFAULTER_DIRS, this establishes a dependency between the | ||||
| # output file and the input files that should trigger a rebuild. | ||||
| # | ||||
| # The variable value was set in $(GOFILES_META) and included as part of the | ||||
| # dependency management logic. | ||||
| # | ||||
| # Note that this is a deps-only statement, not a full rule (see below).  This | ||||
| # has to be done in a distinct step because wildcards don't work in static | ||||
| # pattern rules. | ||||
| # | ||||
| # The '$(eval)' is needed because this has a different RHS for each LHS, and | ||||
| # would otherwise produce results that make can't parse. | ||||
| # | ||||
| # We depend on the $(GOFILES_META).stamp to detect when the set of input files | ||||
| # has changed.  This allows us to detect deleted input files. | ||||
| $(foreach dir, $(DEFAULTER_DIRS), $(eval                                    \ | ||||
|     $(dir)/$(DEFAULTER_FILENAME): $(META_DIR)/$(dir)/$(GOFILES_META).stamp  \ | ||||
|                                    $(gofiles__$(dir))                       \ | ||||
| )) | ||||
|  | ||||
| # For each dir in DEFAULTER_DIRS, for each target in $(defaulters__$(dir)), | ||||
| # this establishes a dependency between the output file and the input files | ||||
| # that should trigger a rebuild. | ||||
| # | ||||
| # The variable value was set in $(GOFILES_META) and included as part of the | ||||
| # dependency management logic. | ||||
| # | ||||
| # Note that this is a deps-only statement, not a full rule (see below).  This | ||||
| # has to be done in a distinct step because wildcards don't work in static | ||||
| # pattern rules. | ||||
| # | ||||
| # The '$(eval)' is needed because this has a different RHS for each LHS, and | ||||
| # would otherwise produce results that make can't parse. | ||||
| # | ||||
| # We depend on the $(GOFILES_META).stamp to detect when the set of input files | ||||
| # has changed.  This allows us to detect deleted input files. | ||||
| $(foreach dir, $(DEFAULTER_DIRS),                                               \ | ||||
|     $(foreach tgt, $(defaulters__$(dir)), $(eval                                \ | ||||
|         $(dir)/$(DEFAULTER_FILENAME): $(META_DIR)/$(tgt)/$(GOFILES_META).stamp  \ | ||||
|                                        $(gofiles__$(tgt))                       \ | ||||
|     ))                                                                          \ | ||||
| ) | ||||
|  | ||||
| # Unilaterally remove any leftovers from previous runs. | ||||
| $(shell rm -f $(META_DIR)/$(DEFAULTER_GEN)*.todo) | ||||
|  | ||||
| # How to regenerate defaulter code.  This is a little slow to run, so we batch | ||||
| # it up and trigger the batch from the 'generated_files' target. | ||||
| $(DEFAULTER_FILES): $(DEFAULTER_GEN) | ||||
| 	mkdir -p $$(dirname $(META_DIR)/$(DEFAULTER_GEN)) | ||||
| 	echo $(PRJ_SRC_PATH)/$(@D) >> $(META_DIR)/$(DEFAULTER_GEN).todo | ||||
|  | ||||
| # This calculates the dependencies for the generator tool, so we only rebuild | ||||
| # it when needed.  It is PHONY so that it always runs, but it only updates the | ||||
| # file if the contents have actually changed.  We 'sinclude' this later. | ||||
| .PHONY: $(META_DIR)/$(DEFAULTER_GEN).mk | ||||
| $(META_DIR)/$(DEFAULTER_GEN).mk: | ||||
| 	mkdir -p $(@D);                                                       \ | ||||
| 	(echo -n "$(DEFAULTER_GEN): ";                                        \ | ||||
| 	 ./hack/run-in-gopath.sh go list                                      \ | ||||
| 	     -f '{{.ImportPath}}{{"\n"}}{{range .Deps}}{{.}}{{"\n"}}{{end}}'  \ | ||||
| 	     ./cmd/libs/go2idl/defaulter-gen                                  \ | ||||
| 	     | grep --color=never "^$(PRJ_SRC_PATH)/"                         \ | ||||
| 	     | xargs ./hack/run-in-gopath.sh go list                          \ | ||||
| 	         -f '{{$$d := .Dir}}{{$$d}}{{"\n"}}{{range .GoFiles}}{{$$d}}/{{.}}{{"\n"}}{{end}}'  \ | ||||
| 	     | paste -sd' ' -                                                 \ | ||||
| 	     | sed 's/ / \\=,/g'                                              \ | ||||
| 	     | tr '=,' '\n\t'                                                 \ | ||||
| 	     | sed "s|$$(pwd -P)/||";                                         \ | ||||
| 	) > $@.tmp;                                                           \ | ||||
| 	cmp -s $@.tmp $@ || cat $@.tmp > $@ && rm -f $@.tmp | ||||
|  | ||||
| # Include dependency info for the generator tool.  This will cause the rule of | ||||
| # the same name to be considered and if it is updated, make will restart. | ||||
| sinclude $(META_DIR)/$(DEFAULTER_GEN).mk | ||||
|  | ||||
| # How to build the generator tool.  The deps for this are defined in | ||||
| # the $(DEFAULTER_GEN).mk, above. | ||||
| # | ||||
| # A word on the need to touch: This rule might trigger if, for example, a | ||||
| # non-Go file was added or deleted from a directory on which this depends. | ||||
| # This target needs to be reconsidered, but Go realizes it doesn't actually | ||||
| # have to be rebuilt.  In that case, make will forever see the dependency as | ||||
| # newer than the binary, and try to rebuild it over and over.  So we touch it, | ||||
| # and make is happy. | ||||
| $(DEFAULTER_GEN): | ||||
| 	hack/make-rules/build.sh cmd/libs/go2idl/defaulter-gen | ||||
| 	touch $@ | ||||
|  | ||||
| # | ||||
| # Open-api generation | ||||
| # | ||||
| # Any package that wants open-api functions generated must include a | ||||
| # comment-tag in column 0 of one file of the form: | ||||
| #     // +k8s:openapi-gen=true | ||||
| # | ||||
| # The result file, in each pkg, of open-api generation. | ||||
| OPENAPI_BASENAME := $(GENERATED_FILE_PREFIX)openapi | ||||
| OPENAPI_FILENAME := $(OPENAPI_BASENAME).go | ||||
| OPENAPI_OUTPUT_PKG := pkg/generated/openapi | ||||
|  | ||||
| # The tool used to generate open apis. | ||||
| OPENAPI_GEN := $(BIN_DIR)/openapi-gen | ||||
|  | ||||
| # Find all the directories that request open-api generation. | ||||
| ifeq ($(DBG_MAKEFILE),1) | ||||
|     $(warning ***** finding all +k8s:openapi-gen tags) | ||||
| endif | ||||
| OPENAPI_DIRS := $(shell                                             \ | ||||
|     grep --color=never -l '+k8s:openapi-gen=' $(ALL_K8S_TAG_FILES)  \ | ||||
|         | xargs -n1 dirname                                         \ | ||||
|         | LC_ALL=C sort -u                                          \ | ||||
| ) | ||||
|  | ||||
| OPENAPI_OUTFILE := $(OPENAPI_OUTPUT_PKG)/$(OPENAPI_FILENAME) | ||||
|  | ||||
| # This rule is the user-friendly entrypoint for openapi generation. | ||||
| .PHONY: gen_openapi | ||||
| gen_openapi: $(OPENAPI_OUTFILE) $(OPENAPI_GEN) | ||||
|  | ||||
| # For each dir in OPENAPI_DIRS, this establishes a dependency between the | ||||
| # output file and the input files that should trigger a rebuild. | ||||
| # | ||||
| # Note that this is a deps-only statement, not a full rule (see below).  This | ||||
| # has to be done in a distinct step because wildcards don't work in static | ||||
| # pattern rules. | ||||
| # | ||||
| # The '$(eval)' is needed because this has a different RHS for each LHS, and | ||||
| # would otherwise produce results that make can't parse. | ||||
| # | ||||
| # We depend on the $(GOFILES_META).stamp to detect when the set of input files | ||||
| # has changed.  This allows us to detect deleted input files. | ||||
| $(foreach dir, $(OPENAPI_DIRS), $(eval                                     \ | ||||
|     $(OPENAPI_OUTFILE): $(META_DIR)/$(dir)/$(GOFILES_META).stamp           \ | ||||
|                                  $(gofiles__$(dir))                        \ | ||||
| )) | ||||
|  | ||||
| # How to regenerate open-api code.  This emits a single file for all results. | ||||
| $(OPENAPI_OUTFILE): $(OPENAPI_GEN) $(OPENAPI_GEN) | ||||
| 	function run_gen_openapi() {                                                        \ | ||||
|         ./hack/run-in-gopath.sh $(OPENAPI_GEN)                                          \ | ||||
|             --v $(KUBE_VERBOSE)                                                         \ | ||||
|             --logtostderr                                                               \ | ||||
|             -i $$(echo $(addprefix $(PRJ_SRC_PATH)/, $(OPENAPI_DIRS)) | sed 's/ /,/g')  \ | ||||
|             -p $(PRJ_SRC_PATH)/$(OPENAPI_OUTPUT_PKG)                                    \ | ||||
|             -O $(OPENAPI_BASENAME)                                                      \ | ||||
|             "$$@";                                                                      \ | ||||
|     };                                                                                  \ | ||||
|     run_gen_openapi | ||||
|  | ||||
| # This calculates the dependencies for the generator tool, so we only rebuild | ||||
| # it when needed.  It is PHONY so that it always runs, but it only updates the | ||||
| # file if the contents have actually changed.  We 'sinclude' this later. | ||||
| .PHONY: $(META_DIR)/$(OPENAPI_GEN).mk | ||||
| $(META_DIR)/$(OPENAPI_GEN).mk: | ||||
| 	mkdir -p $(@D);                                                       \ | ||||
| 	(echo -n "$(OPENAPI_GEN): ";                                          \ | ||||
| 	 ./hack/run-in-gopath.sh go list                                      \ | ||||
| 	     -f '{{.ImportPath}}{{"\n"}}{{range .Deps}}{{.}}{{"\n"}}{{end}}'  \ | ||||
| 	     ./cmd/libs/go2idl/openapi-gen                                    \ | ||||
| 	     | grep --color=never "^$(PRJ_SRC_PATH)/"                         \ | ||||
| 	     | xargs ./hack/run-in-gopath.sh go list                          \ | ||||
| 	         -f '{{$$d := .Dir}}{{$$d}}{{"\n"}}{{range .GoFiles}}{{$$d}}/{{.}}{{"\n"}}{{end}}'  \ | ||||
| 	     | paste -sd' ' -                                                 \ | ||||
| 	     | sed 's/ / \\=,/g'                                              \ | ||||
| 	     | tr '=,' '\n\t'                                                 \ | ||||
| 	     | sed "s|$$(pwd -P)/||";                                         \ | ||||
| 	) > $@.tmp;                                                           \ | ||||
| 	cmp -s $@.tmp $@ || cat $@.tmp > $@ && rm -f $@.tmp | ||||
|  | ||||
| # Include dependency info for the generator tool.  This will cause the rule of | ||||
| # the same name to be considered and if it is updated, make will restart. | ||||
| sinclude $(META_DIR)/$(OPENAPI_GEN).mk | ||||
|  | ||||
| # How to build the generator tool.  The deps for this are defined in | ||||
| # the $(OPENAPI_GEN).mk, above. | ||||
| # | ||||
| # A word on the need to touch: This rule might trigger if, for example, a | ||||
| # non-Go file was added or deleted from a directory on which this depends. | ||||
| # This target needs to be reconsidered, but Go realizes it doesn't actually | ||||
| # have to be rebuilt.  In that case, make will forever see the dependency as | ||||
| # newer than the binary, and try to rebuild it over and over.  So we touch it, | ||||
| # and make is happy. | ||||
| $(OPENAPI_GEN): | ||||
| 	hack/make-rules/build.sh cmd/libs/go2idl/openapi-gen | ||||
| 	touch $@ | ||||
|  | ||||
| # | ||||
| # Conversion generation | ||||
| # | ||||
| # Any package that wants conversion functions generated must include one or | ||||
| # more comment-tags in any .go file, in column 0, of the form: | ||||
| #     // +k8s:conversion-gen=<CONVERSION_TARGET_DIR> | ||||
| # | ||||
| # The CONVERSION_TARGET_DIR is a project-local path to another directory which | ||||
| # should be considered when evaluating peer types for conversions.  Types which | ||||
| # are found in the source package (where conversions are being generated) | ||||
| # but do not have a peer in one of the target directories will not have | ||||
| # conversions generated. | ||||
| # | ||||
| # TODO: it might be better in the long term to make peer-types explicit in the | ||||
| # IDL. | ||||
|  | ||||
| # The result file, in each pkg, of conversion generation. | ||||
| CONVERSION_BASENAME := $(GENERATED_FILE_PREFIX)conversion | ||||
| CONVERSION_FILENAME := $(CONVERSION_BASENAME).go | ||||
|  | ||||
| # The tool used to generate conversions. | ||||
| CONVERSION_GEN := $(BIN_DIR)/conversion-gen | ||||
|  | ||||
| # The name of the metadata file listing conversion peers for each pkg. | ||||
| CONVERSIONS_META := conversions.mk | ||||
|  | ||||
| # All directories that request any form of conversion generation. | ||||
| ifeq ($(DBG_MAKEFILE),1) | ||||
|     $(warning ***** finding all +k8s:conversion-gen tags) | ||||
| endif | ||||
| CONVERSION_DIRS := $(shell                                              \ | ||||
|     grep --color=never '^// *+k8s:conversion-gen=' $(ALL_K8S_TAG_FILES) \ | ||||
|         | cut -f1 -d:                                                   \ | ||||
|         | xargs -n1 dirname                                             \ | ||||
|         | LC_ALL=C sort -u                                              \ | ||||
| ) | ||||
|  | ||||
| CONVERSION_FILES := $(addsuffix /$(CONVERSION_FILENAME), $(CONVERSION_DIRS)) | ||||
|  | ||||
| # Shell function for reuse in rules. | ||||
| RUN_GEN_CONVERSION =                                                          \ | ||||
|     function run_gen_conversion() {                                           \ | ||||
|         if [[ -f $(META_DIR)/$(CONVERSION_GEN).todo ]]; then                  \ | ||||
|             ./hack/run-in-gopath.sh $(CONVERSION_GEN)                         \ | ||||
|                 --v $(KUBE_VERBOSE)                                           \ | ||||
|                 --logtostderr                                                 \ | ||||
|                 -i $$(cat $(META_DIR)/$(CONVERSION_GEN).todo | paste -sd, -)  \ | ||||
|                 -O $(CONVERSION_BASENAME)                                     \ | ||||
|                 "$$@";                                                        \ | ||||
|         fi                                                                    \ | ||||
|     };                                                                        \ | ||||
|     run_gen_conversion | ||||
|  | ||||
| # This rule aggregates the set of files to generate and then generates them all | ||||
| # in a single run of the tool. | ||||
| .PHONY: gen_conversion | ||||
| gen_conversion: $(CONVERSION_FILES) $(CONVERSION_GEN) | ||||
| 	$(RUN_GEN_CONVERSION) | ||||
|  | ||||
| .PHONY: verify_gen_conversion | ||||
| verify_gen_conversion: $(CONVERSION_GEN) | ||||
| 	$(RUN_GEN_CONVERSION) --verify-only | ||||
|  | ||||
| # Establish a dependency between the deps file and the dir.  Whenever a dir | ||||
| # changes (files added or removed) the deps file will be considered stale. | ||||
| # | ||||
| # This is looser than we really need (e.g. we don't really care about non *.go | ||||
| # files or even *_test.go files), but this is much easier to represent. | ||||
| # | ||||
| # Because we 'sinclude' the deps file, it is considered for rebuilding, as part | ||||
| # of make's normal evaluation.  If it gets rebuilt, make will restart. | ||||
| # | ||||
| # The '$(eval)' is needed because this has a different RHS for each LHS, and | ||||
| # would otherwise produce results that make can't parse. | ||||
| $(foreach dir, $(CONVERSION_DIRS), $(eval           \ | ||||
|     $(META_DIR)/$(dir)/$(CONVERSIONS_META): $(dir)  \ | ||||
| )) | ||||
|  | ||||
| # How to rebuild a deps file.  When make determines that the deps file is stale | ||||
| # (see above), it executes this rule, and then re-loads the deps file. | ||||
| # | ||||
| # This is looser than we really need (e.g. we don't really care about test | ||||
| # files), but this is MUCH faster than calling `go list`. | ||||
| # | ||||
| # We regenerate the output file in order to satisfy make's "newer than" rules, | ||||
| # but we only need to rebuild targets if the contents actually changed.  That | ||||
| # is what the .stamp file represents. | ||||
| $(foreach dir, $(CONVERSION_DIRS),  \ | ||||
|     $(META_DIR)/$(dir)/$(CONVERSIONS_META)): | ||||
| 	TAGS=$$(grep --color=never -h '^// *+k8s:conversion-gen=' $</*.go   \ | ||||
| 	    | cut -f2- -d=                                                  \ | ||||
| 	    | sed 's|$(PRJ_SRC_PATH)/||');                                  \ | ||||
| 	mkdir -p $(@D);                                                     \ | ||||
| 	echo "conversions__$< := $$(echo $${TAGS})" >$@.tmp;                \ | ||||
| 	cmp -s $@.tmp $@ || touch $@.stamp;                                 \ | ||||
| 	mv $@.tmp $@ | ||||
|  | ||||
| # Include any deps files as additional Makefile rules.  This triggers make to | ||||
| # consider the deps files for rebuild, which makes the whole | ||||
| # dependency-management logic work.  'sinclude' is "silent include" which does | ||||
| # not fail if the file does not exist. | ||||
| $(foreach dir, $(CONVERSION_DIRS), $(eval            \ | ||||
|     sinclude $(META_DIR)/$(dir)/$(CONVERSIONS_META)  \ | ||||
| )) | ||||
|  | ||||
| # For each dir in CONVERSION_DIRS, this establishes a dependency between the | ||||
| # output file and the input files that should trigger a rebuild. | ||||
| # | ||||
| # The variable value was set in $(GOFILES_META) and included as part of the | ||||
| # dependency management logic. | ||||
| # | ||||
| # Note that this is a deps-only statement, not a full rule (see below).  This | ||||
| # has to be done in a distinct step because wildcards don't work in static | ||||
| # pattern rules. | ||||
| # | ||||
| # The '$(eval)' is needed because this has a different RHS for each LHS, and | ||||
| # would otherwise produce results that make can't parse. | ||||
| # | ||||
| # We depend on the $(GOFILES_META).stamp to detect when the set of input files | ||||
| # has changed.  This allows us to detect deleted input files. | ||||
| $(foreach dir, $(CONVERSION_DIRS), $(eval                                    \ | ||||
|     $(dir)/$(CONVERSION_FILENAME): $(META_DIR)/$(dir)/$(GOFILES_META).stamp  \ | ||||
|                                    $(gofiles__$(dir))                        \ | ||||
| )) | ||||
|  | ||||
| # For each dir in CONVERSION_DIRS, for each target in $(conversions__$(dir)), | ||||
| # this establishes a dependency between the output file and the input files | ||||
| # that should trigger a rebuild. | ||||
| # | ||||
| # The variable value was set in $(GOFILES_META) and included as part of the | ||||
| # dependency management logic. | ||||
| # | ||||
| # Note that this is a deps-only statement, not a full rule (see below).  This | ||||
| # has to be done in a distinct step because wildcards don't work in static | ||||
| # pattern rules. | ||||
| # | ||||
| # The '$(eval)' is needed because this has a different RHS for each LHS, and | ||||
| # would otherwise produce results that make can't parse. | ||||
| # | ||||
| # We depend on the $(GOFILES_META).stamp to detect when the set of input files | ||||
| # has changed.  This allows us to detect deleted input files. | ||||
| $(foreach dir, $(CONVERSION_DIRS),                                               \ | ||||
|     $(foreach tgt, $(conversions__$(dir)), $(eval                                \ | ||||
|         $(dir)/$(CONVERSION_FILENAME): $(META_DIR)/$(tgt)/$(GOFILES_META).stamp  \ | ||||
|                                        $(gofiles__$(tgt))                        \ | ||||
|     ))                                                                           \ | ||||
| ) | ||||
|  | ||||
| # Unilaterally remove any leftovers from previous runs. | ||||
| $(shell rm -f $(META_DIR)/$(CONVERSION_GEN)*.todo) | ||||
|  | ||||
| # How to regenerate conversion code.  This is a little slow to run, so we batch | ||||
| # it up and trigger the batch from the 'generated_files' target. | ||||
| $(CONVERSION_FILES): $(CONVERSION_GEN) | ||||
| 	mkdir -p $$(dirname $(META_DIR)/$(CONVERSION_GEN)) | ||||
| 	echo $(PRJ_SRC_PATH)/$(@D) >> $(META_DIR)/$(CONVERSION_GEN).todo | ||||
|  | ||||
| # This calculates the dependencies for the generator tool, so we only rebuild | ||||
| # it when needed.  It is PHONY so that it always runs, but it only updates the | ||||
| # file if the contents have actually changed.  We 'sinclude' this later. | ||||
| .PHONY: $(META_DIR)/$(CONVERSION_GEN).mk | ||||
| $(META_DIR)/$(CONVERSION_GEN).mk: | ||||
| 	mkdir -p $(@D);                                                       \ | ||||
| 	(echo -n "$(CONVERSION_GEN): ";                                       \ | ||||
| 	 ./hack/run-in-gopath.sh go list                                      \ | ||||
| 	     -f '{{.ImportPath}}{{"\n"}}{{range .Deps}}{{.}}{{"\n"}}{{end}}'  \ | ||||
| 	     ./cmd/libs/go2idl/conversion-gen                                 \ | ||||
| 	     | grep --color=never "^$(PRJ_SRC_PATH)/"                         \ | ||||
| 	     | xargs ./hack/run-in-gopath.sh go list                          \ | ||||
| 	         -f '{{$$d := .Dir}}{{$$d}}{{"\n"}}{{range .GoFiles}}{{$$d}}/{{.}}{{"\n"}}{{end}}'  \ | ||||
| 	     | paste -sd' ' -                                                 \ | ||||
| 	     | sed 's/ / \\=,/g'                                              \ | ||||
| 	     | tr '=,' '\n\t'                                                 \ | ||||
| 	     | sed "s|$$(pwd -P)/||";                                         \ | ||||
| 	) > $@.tmp;                                                           \ | ||||
| 	cmp -s $@.tmp $@ || cat $@.tmp > $@ && rm -f $@.tmp | ||||
|  | ||||
| # Include dependency info for the generator tool.  This will cause the rule of | ||||
| # the same name to be considered and if it is updated, make will restart. | ||||
| sinclude $(META_DIR)/$(CONVERSION_GEN).mk | ||||
|  | ||||
| # How to build the generator tool.  The deps for this are defined in | ||||
| # the $(CONVERSION_GEN).mk, above. | ||||
| # | ||||
| # A word on the need to touch: This rule might trigger if, for example, a | ||||
| # non-Go file was added or deleted from a directory on which this depends. | ||||
| # This target needs to be reconsidered, but Go realizes it doesn't actually | ||||
| # have to be rebuilt.  In that case, make will forever see the dependency as | ||||
| # newer than the binary, and try to rebuild it over and over.  So we touch it, | ||||
| # and make is happy. | ||||
| $(CONVERSION_GEN): | ||||
| 	hack/make-rules/build.sh cmd/libs/go2idl/conversion-gen | ||||
| 	touch $@ | ||||
							
								
								
									
										1
									
								
								Makefile.generated_files
									
									
									
									
									
										Symbolic link
									
								
							
							
						
						
									
										1
									
								
								Makefile.generated_files
									
									
									
									
									
										Symbolic link
									
								
							| @@ -0,0 +1 @@ | ||||
| build/root/Makefile.generated_files | ||||
							
								
								
									
										91
									
								
								WORKSPACE
									
									
									
									
									
								
							
							
						
						
									
										91
									
								
								WORKSPACE
									
									
									
									
									
								
							| @@ -1,91 +0,0 @@ | ||||
| http_archive( | ||||
|     name = "io_bazel_rules_go", | ||||
|     sha256 = "a1cae429e9d591017421150e3173478c46c693bc594322c7fa7e6cb5f672ef59", | ||||
|     strip_prefix = "rules_go-805fd1566500997379806373feb05e138a4dfe28", | ||||
|     urls = ["https://github.com/bazelbuild/rules_go/archive/805fd1566500997379806373feb05e138a4dfe28.tar.gz"], | ||||
| ) | ||||
|  | ||||
| http_archive( | ||||
|     name = "io_kubernetes_build", | ||||
|     sha256 = "8d1cff71523565996903076cec6cad8424afa6eb93a342d0d810a55c911e23c7", | ||||
|     strip_prefix = "repo-infra-61b7247ebf472398bdea148d8f67e3a1849d6de9", | ||||
|     urls = ["https://github.com/kubernetes/repo-infra/archive/61b7247ebf472398bdea148d8f67e3a1849d6de9.tar.gz"], | ||||
| ) | ||||
|  | ||||
| # This contains a patch to not prepend ./ to tarfiles produced by pkg_tar. | ||||
| # When merged upstream, we'll no longer need to use ixdy's fork: | ||||
| # https://bazel-review.googlesource.com/#/c/10390/ | ||||
| http_archive( | ||||
|     name = "io_bazel", | ||||
|     sha256 = "667d32da016b1e2f63cf345cd3583989ec4a165034df383a01996d93635753a0", | ||||
|     strip_prefix = "bazel-df2c687c22bdd7c76f3cdcc85f38fefd02f0b844", | ||||
|     urls = ["https://github.com/ixdy/bazel/archive/df2c687c22bdd7c76f3cdcc85f38fefd02f0b844.tar.gz"], | ||||
| ) | ||||
|  | ||||
| http_archive( | ||||
|     name = "io_bazel_rules_docker", | ||||
|     sha256 = "261fbd8fda1d06a12a0479019b46acd302c6aaa8df8e49383dc37917f20492a1", | ||||
|     strip_prefix = "rules_docker-52d9faf209ff6d16eb850b6b66d03483735e0633", | ||||
|     urls = ["https://github.com/bazelbuild/rules_docker/archive/52d9faf209ff6d16eb850b6b66d03483735e0633.tar.gz"], | ||||
| ) | ||||
|  | ||||
| load("@io_bazel_rules_go//go:def.bzl", "go_repositories") | ||||
| load("@io_bazel_rules_docker//docker:docker.bzl", "docker_repositories") | ||||
|  | ||||
| go_repositories( | ||||
|     go_version = "1.8.1", | ||||
| ) | ||||
|  | ||||
| docker_repositories() | ||||
|  | ||||
| # for building docker base images | ||||
| debs = ( | ||||
|     ( | ||||
|         "busybox_deb", | ||||
|         "5f81f140777454e71b9e5bfdce9c89993de5ddf4a7295ea1cfda364f8f630947", | ||||
|         "http://ftp.us.debian.org/debian/pool/main/b/busybox/busybox-static_1.22.0-19+b3_amd64.deb", | ||||
|         "https://storage.googleapis.com/kubernetes-release/debs/busybox-static_1.22.0-19+b3_amd64.deb", | ||||
|     ), | ||||
|     ( | ||||
|         "libc_deb", | ||||
|         "372aac4a9ce9dbb26a08de0b9c41b0500ba019430295d29f39566483f5f32732", | ||||
|         "http://ftp.us.debian.org/debian/pool/main/g/glibc/libc6_2.24-10_amd64.deb", | ||||
|         "https://storage.googleapis.com/kubernetes-release/debs/libc6_2.24-10_amd64.deb", | ||||
|     ), | ||||
|     ( | ||||
|         "iptables_deb", | ||||
|         "7747388a97ba71fede302d70361c81d486770a2024185514c18b5d8eab6aaf4e", | ||||
|         "http://ftp.us.debian.org/debian/pool/main/i/iptables/iptables_1.4.21-2+b1_amd64.deb", | ||||
|         "https://storage.googleapis.com/kubernetes-release/debs/iptables_1.4.21-2+b1_amd64.deb", | ||||
|     ), | ||||
|     ( | ||||
|         "libnetlink_deb", | ||||
|         "5d486022cd9e047e9afbb1617cf4519c0decfc3d2c1fad7e7fe5604943dbbf37", | ||||
|         "http://ftp.us.debian.org/debian/pool/main/libn/libnfnetlink/libnfnetlink0_1.0.1-3_amd64.deb", | ||||
|         "https://storage.googleapis.com/kubernetes-release/debs/libnfnetlink0_1.0.1-3_amd64.deb", | ||||
|     ), | ||||
|     ( | ||||
|         "libxtables_deb", | ||||
|         "6783f316af4cbf3ada8b9a2b7bb5f53a87c0c2575c1903ce371fdbd45d3626c6", | ||||
|         "http://ftp.us.debian.org/debian/pool/main/i/iptables/libxtables10_1.4.21-2+b1_amd64.deb", | ||||
|         "https://storage.googleapis.com/kubernetes-release/debs/libxtables10_1.4.21-2+b1_amd64.deb", | ||||
|     ), | ||||
|     ( | ||||
|         "iproute2_deb", | ||||
|         "3ce9cb1d03a2a1359cbdd4f863b15d0c906096bf713e8eb688149da2f4e350bc", | ||||
|         "http://ftp.us.debian.org/debian/pool/main/i/iproute2/iproute_3.16.0-2_all.deb", | ||||
|         "https://storage.googleapis.com/kubernetes-release/debs/iproute_3.16.0-2_all.deb", | ||||
|     ), | ||||
| ) | ||||
|  | ||||
| [http_file( | ||||
|     name = name, | ||||
|     sha256 = sha256, | ||||
|     url = url, | ||||
| ) for name, sha256, origin, url in debs] | ||||
|  | ||||
| http_file( | ||||
|     name = "kubernetes_cni", | ||||
|     sha256 = "05ab3937bc68562e989dc143362ec4d4275262ba9f359338aed720fc914457a5", | ||||
|     url = "https://storage.googleapis.com/kubernetes-release/network-plugins/cni-amd64-0799f5732f2a11b329d9e3d51b9c8f2e3759f2ff.tar.gz", | ||||
| ) | ||||
							
								
								
									
										6
									
								
								build/root/.bazelrc
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										6
									
								
								build/root/.bazelrc
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,6 @@ | ||||
| # Show us information about failures. | ||||
| build --verbose_failures | ||||
| test --test_output=errors | ||||
|  | ||||
| # Include git version info | ||||
| build --workspace_status_command hack/print-workspace-status.sh | ||||
							
								
								
									
										85
									
								
								build/root/BUILD.root
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										85
									
								
								build/root/BUILD.root
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,85 @@ | ||||
| package(default_visibility = ["//visibility:public"]) | ||||
|  | ||||
| licenses(["notice"]) | ||||
|  | ||||
| load("@io_bazel_rules_go//go:def.bzl", "go_prefix") | ||||
| load("@io_kubernetes_build//defs:build.bzl", "gcs_upload") | ||||
|  | ||||
| go_prefix("k8s.io/kubernetes") | ||||
|  | ||||
| filegroup( | ||||
|     name = "_binary-artifacts-and-hashes", | ||||
|     srcs = [ | ||||
|         "//build:client-targets-and-hashes", | ||||
|         "//build:docker-artifacts-and-hashes", | ||||
|         "//build:node-targets-and-hashes", | ||||
|         "//build:server-targets-and-hashes", | ||||
|         "//build/debs:debs-and-hashes", | ||||
|     ], | ||||
|     visibility = ["//visibility:private"], | ||||
| ) | ||||
|  | ||||
| gcs_upload( | ||||
|     name = "push-build", | ||||
|     data = [ | ||||
|         ":_binary-artifacts-and-hashes", | ||||
|         "//build/release-tars:release-tars-and-hashes", | ||||
|         "//cluster/gce:gcs-release-artifacts-and-hashes", | ||||
|     ], | ||||
|     upload_paths = { | ||||
|         "//:_binary-artifacts-and-hashes": "bin/linux/amd64", | ||||
|         "//build/release-tars:release-tars-and-hashes": "", | ||||
|         "//cluster/gce:gcs-release-artifacts-and-hashes": "extra/gce", | ||||
|     }, | ||||
| ) | ||||
|  | ||||
| # TODO: remove this alias after 2017-05-22 | ||||
| alias( | ||||
|     name = "ci-artifacts", | ||||
|     actual = "push-build", | ||||
|     deprecation = "This rule will be removed after 2017-05-22. Use //:push-build instead.", | ||||
| ) | ||||
|  | ||||
| filegroup( | ||||
|     name = "package-srcs", | ||||
|     srcs = glob( | ||||
|         ["**"], | ||||
|         exclude = [ | ||||
|             "bazel-*/**", | ||||
|             "_*/**", | ||||
|             ".config/**", | ||||
|             ".git/**", | ||||
|             ".gsutil/**", | ||||
|             ".make/**", | ||||
|         ], | ||||
|     ), | ||||
|     visibility = ["//visibility:private"], | ||||
| ) | ||||
|  | ||||
| filegroup( | ||||
|     name = "all-srcs", | ||||
|     srcs = [ | ||||
|         ":package-srcs", | ||||
|         "//api:all-srcs", | ||||
|         "//build:all-srcs", | ||||
|         "//cluster:all-srcs", | ||||
|         "//cmd:all-srcs", | ||||
|         "//docs:all-srcs", | ||||
|         "//examples:all-srcs", | ||||
|         "//federation:all-srcs", | ||||
|         "//hack:all-srcs", | ||||
|         "//pkg:all-srcs", | ||||
|         "//plugin:all-srcs", | ||||
|         "//test:all-srcs", | ||||
|         "//third_party:all-srcs", | ||||
|         "//vendor:all-srcs", | ||||
|     ], | ||||
|     tags = ["automanaged"], | ||||
| ) | ||||
|  | ||||
| genrule( | ||||
|     name = "save_git_version", | ||||
|     outs = ["version"], | ||||
|     cmd = "grep ^STABLE_BUILD_SCM_REVISION bazel-out/stable-status.txt | awk '{print $$2}' >$@", | ||||
|     stamp = 1, | ||||
| ) | ||||
							
								
								
									
										536
									
								
								build/root/Makefile
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										536
									
								
								build/root/Makefile
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,536 @@ | ||||
| # Copyright 2016 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. | ||||
|  | ||||
| DBG_MAKEFILE ?= | ||||
| ifeq ($(DBG_MAKEFILE),1) | ||||
|     $(warning ***** starting Makefile for goal(s) "$(MAKECMDGOALS)") | ||||
|     $(warning ***** $(shell date)) | ||||
| else | ||||
|     # If we're not debugging the Makefile, don't echo recipes. | ||||
|     MAKEFLAGS += -s | ||||
| endif | ||||
|  | ||||
|  | ||||
| # Old-skool build tools. | ||||
| # | ||||
| # Commonly used targets (see each target for more information): | ||||
| #   all: Build code. | ||||
| #   test: Run tests. | ||||
| #   clean: Clean up. | ||||
|  | ||||
| # It's necessary to set this because some environments don't link sh -> bash. | ||||
| SHELL := /bin/bash | ||||
|  | ||||
| # We don't need make's built-in rules. | ||||
| MAKEFLAGS += --no-builtin-rules | ||||
| .SUFFIXES: | ||||
|  | ||||
| # Constants used throughout. | ||||
| .EXPORT_ALL_VARIABLES: | ||||
| OUT_DIR ?= _output | ||||
| BIN_DIR := $(OUT_DIR)/bin | ||||
| PRJ_SRC_PATH := k8s.io/kubernetes | ||||
| GENERATED_FILE_PREFIX := zz_generated. | ||||
|  | ||||
| # Metadata for driving the build lives here. | ||||
| META_DIR := .make | ||||
|  | ||||
| # Our build flags. | ||||
| # TODO(thockin): it would be nice to just use the native flags.  Can we EOL | ||||
| #                these "wrapper" flags? | ||||
| KUBE_GOFLAGS := $(GOFLAGS) | ||||
| KUBE_GOLDFLAGS := $(GOLDFLAGS) | ||||
| KUBE_GOGCFLAGS = $(GOGCFLAGS) | ||||
|  | ||||
| # Extra options for the release or quick-release options: | ||||
| KUBE_RELEASE_RUN_TESTS := $(KUBE_RELEASE_RUN_TESTS)  | ||||
| KUBE_FASTBUILD := $(KUBE_FASTBUILD) | ||||
|  | ||||
| # This controls the verbosity of the build.  Higher numbers mean more output. | ||||
| KUBE_VERBOSE ?= 1 | ||||
|  | ||||
| define ALL_HELP_INFO | ||||
| # Build code. | ||||
| # | ||||
| # Args: | ||||
| #   WHAT: Directory names to build.  If any of these directories has a 'main' | ||||
| #     package, the build will produce executable files under $(OUT_DIR)/go/bin. | ||||
| #     If not specified, "everything" will be built. | ||||
| #   GOFLAGS: Extra flags to pass to 'go' when building. | ||||
| #   GOLDFLAGS: Extra linking flags passed to 'go' when building. | ||||
| #   GOGCFLAGS: Additional go compile flags passed to 'go' when building. | ||||
| # | ||||
| # Example: | ||||
| #   make | ||||
| #   make all | ||||
| #   make all WHAT=cmd/kubelet GOFLAGS=-v | ||||
| #   make all GOGCFLAGS="-N -l" | ||||
| #     Note: Use the -N -l options to disable compiler optimizations an inlining. | ||||
| #           Using these build options allows you to subsequently use source | ||||
| #           debugging tools like delve. | ||||
| endef | ||||
| .PHONY: all | ||||
| ifeq ($(PRINT_HELP),y) | ||||
| all: | ||||
| 	@echo "$$ALL_HELP_INFO" | ||||
| else | ||||
| all: generated_files | ||||
| 	hack/make-rules/build.sh $(WHAT) | ||||
| endif | ||||
|  | ||||
| define GINKGO_HELP_INFO | ||||
| # Build ginkgo | ||||
| # | ||||
| # Example: | ||||
| # make ginkgo | ||||
| endef | ||||
| .PHONY: ginkgo | ||||
| ifeq ($(PRINT_HELP),y) | ||||
| ginkgo: | ||||
| 	@echo "$$GINKGO_HELP_INFO" | ||||
| else | ||||
| ginkgo: | ||||
| 	hack/make-rules/build.sh vendor/github.com/onsi/ginkgo/ginkgo | ||||
| endif | ||||
|  | ||||
| define VERIFY_HELP_INFO | ||||
| # Runs all the presubmission verifications. | ||||
| # | ||||
| # Args: | ||||
| #   BRANCH: Branch to be passed to verify-godeps.sh script. | ||||
| # | ||||
| # Example: | ||||
| #   make verify | ||||
| #   make verify BRANCH=branch_x | ||||
| endef | ||||
| .PHONY: verify | ||||
| ifeq ($(PRINT_HELP),y) | ||||
| verify: | ||||
| 	@echo "$$VERIFY_HELP_INFO" | ||||
| else | ||||
| verify: verify_generated_files | ||||
| 	KUBE_VERIFY_GIT_BRANCH=$(BRANCH) hack/make-rules/verify.sh -v | ||||
| 	hack/make-rules/vet.sh | ||||
| endif | ||||
|  | ||||
| define UPDATE_HELP_INFO | ||||
| # Runs all the generated updates. | ||||
| # | ||||
| # Example: | ||||
| # make update | ||||
| endef | ||||
| .PHONY: update | ||||
| ifeq ($(PRINT_HELP),y) | ||||
| update: | ||||
| 	@echo "$$UPDATE_HELP_INFO" | ||||
| else | ||||
| update: | ||||
| 	hack/update-all.sh | ||||
| endif | ||||
|  | ||||
| define CHECK_TEST_HELP_INFO | ||||
| # Build and run tests. | ||||
| # | ||||
| # Args: | ||||
| #   WHAT: Directory names to test.  All *_test.go files under these | ||||
| #     directories will be run.  If not specified, "everything" will be tested. | ||||
| #   TESTS: Same as WHAT. | ||||
| #   GOFLAGS: Extra flags to pass to 'go' when building. | ||||
| #   GOLDFLAGS: Extra linking flags to pass to 'go' when building. | ||||
| #   GOGCFLAGS: Additional go compile flags passed to 'go' when building. | ||||
| # | ||||
| # Example: | ||||
| #   make check | ||||
| #   make test | ||||
| #   make check WHAT=pkg/kubelet GOFLAGS=-v | ||||
| endef | ||||
| .PHONY: check test | ||||
| ifeq ($(PRINT_HELP),y) | ||||
| check test: | ||||
| 	@echo "$$CHECK_TEST_HELP_INFO" | ||||
| else | ||||
| check test: generated_files | ||||
| 	hack/make-rules/test.sh $(WHAT) $(TESTS) | ||||
| endif | ||||
|  | ||||
| define TEST_IT_HELP_INFO | ||||
| # Build and run integration tests. | ||||
| # | ||||
| # Args: | ||||
| #   WHAT: Directory names to test.  All *_test.go files under these | ||||
| #     directories will be run.  If not specified, "everything" will be tested. | ||||
| # | ||||
| # Example: | ||||
| #   make test-integration | ||||
| endef | ||||
| .PHONY: test-integration | ||||
| ifeq ($(PRINT_HELP),y) | ||||
| test-integration: | ||||
| 	@echo "$$TEST_IT_HELP_INFO" | ||||
| else | ||||
| test-integration: generated_files | ||||
| 	hack/make-rules/test-integration.sh $(WHAT) | ||||
| endif | ||||
|  | ||||
| define TEST_E2E_HELP_INFO | ||||
| # Build and run end-to-end tests. | ||||
| # | ||||
| # Example: | ||||
| #   make test-e2e | ||||
| endef | ||||
| .PHONY: test-e2e | ||||
| ifeq ($(PRINT_HELP),y) | ||||
| test-e2e: | ||||
| 	@echo "$$TEST_E2E_HELP_INFO" | ||||
| else | ||||
| test-e2e: ginkgo generated_files | ||||
| 	go run hack/e2e.go -- -v --build --up --test --down | ||||
| endif | ||||
|  | ||||
| define TEST_E2E_NODE_HELP_INFO | ||||
| # Build and run node end-to-end tests. | ||||
| # | ||||
| # Args: | ||||
| #  FOCUS: Regexp that matches the tests to be run.  Defaults to "". | ||||
| #  SKIP: Regexp that matches the tests that needs to be skipped.  Defaults | ||||
| #    to "". | ||||
| #  RUN_UNTIL_FAILURE: If true, pass --untilItFails to ginkgo so tests are run | ||||
| #    repeatedly until they fail.  Defaults to false. | ||||
| #  REMOTE: If true, run the tests on a remote host instance on GCE.  Defaults | ||||
| #    to false. | ||||
| #  IMAGES: For REMOTE=true only.  Comma delimited list of images for creating | ||||
| #    remote hosts to run tests against.  Defaults to a recent image. | ||||
| #  LIST_IMAGES: If true, don't run tests.  Just output the list of available | ||||
| #    images for testing.  Defaults to false. | ||||
| #  HOSTS: For REMOTE=true only.  Comma delimited list of running gce hosts to | ||||
| #    run tests against.  Defaults to "". | ||||
| #  DELETE_INSTANCES: For REMOTE=true only.  Delete any instances created as | ||||
| #    part of this test run.  Defaults to false. | ||||
| #  ARTIFACTS: For REMOTE=true only.  Local directory to scp test artifacts into | ||||
| #    from the remote hosts.  Defaults to "/tmp/_artifacts". | ||||
| #  REPORT: For REMOTE=false only.  Local directory to write juntil xml results | ||||
| #    to.  Defaults to "/tmp/". | ||||
| #  CLEANUP: For REMOTE=true only.  If false, do not stop processes or delete | ||||
| #    test files on remote hosts.  Defaults to true. | ||||
| #  IMAGE_PROJECT: For REMOTE=true only.  Project containing images provided to | ||||
| #  IMAGES.  Defaults to "kubernetes-node-e2e-images". | ||||
| #  INSTANCE_PREFIX: For REMOTE=true only.  Instances created from images will | ||||
| #    have the name "${INSTANCE_PREFIX}-${IMAGE_NAME}".  Defaults to "test". | ||||
| #  INSTANCE_METADATA: For REMOTE=true and running on GCE only. | ||||
| #  GUBERNATOR: For REMOTE=true only. Produce link to Gubernator to view logs. | ||||
| #	 Defaults to false. | ||||
| #  PARALLELISM: The number of gingko nodes to run.  Defaults to 8. | ||||
| #  RUNTIME: Container runtime to use (eg. docker, rkt, remote). | ||||
| #    Defaults to "docker". | ||||
| #  CONTAINER_RUNTIME_ENDPOINT: remote container endpoint to connect to. | ||||
| #   Used when RUNTIME is set to "remote". | ||||
| #  IMAGE_SERVICE_ENDPOINT: remote image endpoint to connect to, to prepull images. | ||||
| #   Used when RUNTIME is set to "remote". | ||||
| #  IMAGE_CONFIG_FILE: path to a file containing image configuration. | ||||
| # | ||||
| # Example: | ||||
| #   make test-e2e-node FOCUS=Kubelet SKIP=container | ||||
| #   make test-e2e-node REMOTE=true DELETE_INSTANCES=true | ||||
| #   make test-e2e-node TEST_ARGS='--kubelet-flags="--cgroups-per-qos=true"' | ||||
| # Build and run tests. | ||||
| endef | ||||
| .PHONY: test-e2e-node | ||||
| ifeq ($(PRINT_HELP),y) | ||||
| test-e2e-node: | ||||
| 	@echo "$$TEST_E2E_NODE_HELP_INFO" | ||||
| else | ||||
| test-e2e-node: ginkgo generated_files | ||||
| 	hack/make-rules/test-e2e-node.sh | ||||
| endif | ||||
|  | ||||
| define TEST_CMD_HELP_INFO | ||||
| # Build and run cmdline tests. | ||||
| # | ||||
| # Example: | ||||
| #   make test-cmd | ||||
| endef | ||||
| .PHONY: test-cmd | ||||
| ifeq ($(PRINT_HELP),y) | ||||
| test-cmd: | ||||
| 	@echo "$$TEST_CMD_HELP_INFO" | ||||
| else | ||||
| test-cmd: generated_files | ||||
| 	hack/make-rules/test-kubeadm-cmd.sh | ||||
| 	hack/make-rules/test-cmd.sh | ||||
| 	hack/make-rules/test-federation-cmd.sh | ||||
| endif | ||||
|  | ||||
| define CLEAN_HELP_INFO | ||||
| # Remove all build artifacts. | ||||
| # | ||||
| # Example: | ||||
| #   make clean | ||||
| # | ||||
| # TODO(thockin): call clean_generated when we stop committing generated code. | ||||
| endef | ||||
| .PHONY: clean | ||||
| ifeq ($(PRINT_HELP),y) | ||||
| clean: | ||||
| 	@echo "$$CLEAN_HELP_INFO" | ||||
| else | ||||
| clean: clean_meta | ||||
| 	build/make-clean.sh | ||||
| 	rm -rf $(OUT_DIR) | ||||
| 	rm -rf Godeps/_workspace # Just until we are sure it is gone | ||||
| 	# TODO(thockin): Remove this when we call clean_generated. | ||||
| 	rm -f pkg/generated/openapi/zz_generated.openapi.go | ||||
| endif | ||||
|  | ||||
| define CLEAN_META_HELP_INFO | ||||
| # Remove make-related metadata files. | ||||
| # | ||||
| # Example: | ||||
| #   make clean_meta | ||||
| endef | ||||
| .PHONY: clean_meta | ||||
| ifeq ($(PRINT_HELP),y) | ||||
| clean_meta: | ||||
| 	@echo "$$CLEAN_META_HELP_INFO" | ||||
| else | ||||
| clean_meta: | ||||
| 	rm -rf $(META_DIR) | ||||
| endif | ||||
|  | ||||
| define CLEAN_GENERATED_HELP_INFO | ||||
| # Remove all auto-generated artifacts. Generated artifacts in staging folder should not be removed as they are not | ||||
| # generated using generated_files. | ||||
| # | ||||
| # Example: | ||||
| #   make clean_generated | ||||
| endef | ||||
| .PHONY: clean_generated | ||||
| ifeq ($(PRINT_HELP),y) | ||||
| clean_generated: | ||||
| 	@echo "$$CLEAN_GENERATED_HELP_INFO" | ||||
| else | ||||
| clean_generated: | ||||
| 	find . -type f -name $(GENERATED_FILE_PREFIX)\* | grep -v "[.]/staging/.*" | xargs rm -f | ||||
| endif | ||||
|  | ||||
| define VET_HELP_INFO | ||||
| # Run 'go vet'. | ||||
| # | ||||
| # Args: | ||||
| #   WHAT: Directory names to vet.  All *.go files under these | ||||
| #     directories will be vetted.  If not specified, "everything" will be | ||||
| #     vetted. | ||||
| # | ||||
| # Example: | ||||
| #   make vet | ||||
| #   make vet WHAT=pkg/kubelet | ||||
| endef | ||||
| .PHONY: vet | ||||
| ifeq ($(PRINT_HELP),y) | ||||
| vet: | ||||
| 	@echo "$$VET_HELP_INFO" | ||||
| else | ||||
| vet: | ||||
| 	hack/make-rules/vet.sh $(WHAT) | ||||
| endif | ||||
|  | ||||
| define RELEASE_HELP_INFO | ||||
| # Build a release | ||||
| # | ||||
| # Example: | ||||
| #   make release | ||||
| endef | ||||
| .PHONY: release | ||||
| ifeq ($(PRINT_HELP),y) | ||||
| release: | ||||
| 	@echo "$$RELEASE_HELP_INFO" | ||||
| else | ||||
| release: | ||||
| 	build/release.sh | ||||
| endif | ||||
|  | ||||
| define RELEASE_SKIP_TESTS_HELP_INFO | ||||
| # Build a release, but skip tests | ||||
| #  | ||||
| # Args: | ||||
| #   KUBE_RELEASE_RUN_TESTS: Whether to run tests. Set to 'y' to run tests anyways. | ||||
| #   KUBE_FASTBUILD: Whether to cross-compile for other architectures. Set to 'true' to do so. | ||||
| # | ||||
| # Example: | ||||
| #   make release-skip-tests | ||||
| #   make quick-release | ||||
| endef | ||||
| .PHONY: release-skip-tests quick-release | ||||
| ifeq ($(PRINT_HELP),y) | ||||
| release-skip-tests quick-release: | ||||
| 	@echo "$$RELEASE_SKIP_TESTS_HELP_INFO" | ||||
| else | ||||
| release-skip-tests quick-release: KUBE_RELEASE_RUN_TESTS = n | ||||
| release-skip-tests quick-release: KUBE_FASTBUILD = true | ||||
| release-skip-tests quick-release: | ||||
| 	build/release.sh | ||||
| endif | ||||
|  | ||||
| define CROSS_HELP_INFO | ||||
| # Cross-compile for all platforms | ||||
| # | ||||
| # Example: | ||||
| #   make cross | ||||
| endef | ||||
| .PHONY: cross | ||||
| ifeq ($(PRINT_HELP),y) | ||||
| cross: | ||||
| 	@echo "$$CROSS_HELP_INFO" | ||||
| else | ||||
| cross: | ||||
| 	hack/make-rules/cross.sh | ||||
| endif | ||||
|  | ||||
| define CMD_HELP_INFO | ||||
| # Add rules for all directories in cmd/ | ||||
| # | ||||
| # Example: | ||||
| #   make kubectl kube-proxy | ||||
| endef | ||||
| #TODO: make EXCLUDE_TARGET auto-generated when there are other files in cmd/ | ||||
| #TODO: should we exclude the target "libs" but include "cmd/libs/go2idl/*"? | ||||
| EXCLUDE_TARGET=OWNERS | ||||
| .PHONY: $(filter-out %$(EXCLUDE_TARGET),$(notdir $(abspath $(wildcard cmd/*/)))) | ||||
| ifeq ($(PRINT_HELP),y) | ||||
| $(filter-out %$(EXCLUDE_TARGET),$(notdir $(abspath $(wildcard cmd/*/)))): | ||||
| 	@echo "$$CMD_HELP_INFO" | ||||
| else | ||||
| $(filter-out %$(EXCLUDE_TARGET),$(notdir $(abspath $(wildcard cmd/*/)))): generated_files | ||||
| 	hack/make-rules/build.sh cmd/$@ | ||||
| endif | ||||
|  | ||||
| define PLUGIN_CMD_HELP_INFO | ||||
| # Add rules for all directories in plugin/cmd/ | ||||
| # | ||||
| # Example: | ||||
| #   make kube-scheduler | ||||
| endef | ||||
| .PHONY: $(notdir $(abspath $(wildcard plugin/cmd/*/))) | ||||
| ifeq ($(PRINT_HELP),y) | ||||
| $(notdir $(abspath $(wildcard plugin/cmd/*/))): | ||||
| 	@echo "$$PLUGIN_CMD_HELP_INFO" | ||||
| else | ||||
| $(notdir $(abspath $(wildcard plugin/cmd/*/))): generated_files | ||||
| 	hack/make-rules/build.sh plugin/cmd/$@ | ||||
| endif | ||||
|  | ||||
| define FED_CMD_HELP_INFO | ||||
| # Add rules for all directories in federation/cmd/ | ||||
| # | ||||
| # Example: | ||||
| #   make federation-apiserver federation-controller-manager | ||||
| endef | ||||
| .PHONY: $(notdir $(abspath $(wildcard federation/cmd/*/))) | ||||
| ifeq ($(PRINT_HELP),y) | ||||
| $(notdir $(abspath $(wildcard federation/cmd/*/))): | ||||
| 	@echo "$$FED_CMD_HELP_INFO" | ||||
| else | ||||
| $(notdir $(abspath $(wildcard federation/cmd/*/))): generated_files | ||||
| 	hack/make-rules/build.sh federation/cmd/$@ | ||||
| endif | ||||
|  | ||||
| define GENERATED_FILES_HELP_INFO | ||||
| # Produce auto-generated files needed for the build. | ||||
| # | ||||
| # Example: | ||||
| #   make generated_files | ||||
| endef | ||||
| .PHONY: generated_files | ||||
| ifeq ($(PRINT_HELP),y) | ||||
| generated_files: | ||||
| 	@echo "$$GENERATED_FILES_HELP_INFO" | ||||
| else | ||||
| generated_files: | ||||
| 	$(MAKE) -f Makefile.generated_files $@ CALLED_FROM_MAIN_MAKEFILE=1 | ||||
| endif | ||||
|  | ||||
| define VERIFY_GENERATED_FILES_HELP_INFO | ||||
| # Verify auto-generated files needed for the build. | ||||
| # | ||||
| # Example: | ||||
| #   make verify_generated_files | ||||
| endef | ||||
| .PHONY: verify_generated_files | ||||
| ifeq ($(PRINT_HELP),y) | ||||
| verify_generated_files: | ||||
| 	@echo "$$VERIFY_GENERATED_FILES_HELP_INFO" | ||||
| else | ||||
| verify_generated_files: | ||||
| 	$(MAKE) -f Makefile.generated_files $@ CALLED_FROM_MAIN_MAKEFILE=1 | ||||
| endif | ||||
|  | ||||
| define HELP_INFO | ||||
| # Print make targets and help info | ||||
| # | ||||
| # Example: | ||||
| # make help | ||||
| endef | ||||
| .PHONY: help | ||||
| ifeq ($(PRINT_HELP),y) | ||||
| help: | ||||
| 	@echo "$$HELP_INFO" | ||||
| else | ||||
| help: | ||||
| 	hack/make-rules/make-help.sh | ||||
| endif | ||||
|  | ||||
| # Non-dockerized bazel rules. | ||||
| .PHONY: bazel-build bazel-test bazel-release | ||||
|  | ||||
| ifeq ($(PRINT_HELP),y) | ||||
| define BAZEL_BUILD_HELP_INFO | ||||
| # Build with bazel | ||||
| # | ||||
| # Example: | ||||
| # make bazel-build | ||||
| endef | ||||
| bazel-build: | ||||
| 	@echo "$$BAZEL_BUILD_HELP_INFO" | ||||
| else | ||||
| bazel-build: | ||||
| 	bazel build //cmd/... //pkg/... //federation/... //plugin/... //third_party/... //examples/... //test/... //vendor/k8s.io/... | ||||
| endif | ||||
|  | ||||
|  | ||||
| ifeq ($(PRINT_HELP),y) | ||||
| define BAZEL_TEST_HELP_INFO | ||||
| # Test with bazel | ||||
| # | ||||
| # Example: | ||||
| # make bazel-test | ||||
| endef | ||||
| bazel-test: | ||||
| 	@echo "$$BAZEL_TEST_HELP_INFO" | ||||
| else | ||||
| bazel-test: | ||||
| 	bazel test --test_tag_filters=-integration --flaky_test_attempts=3 //cmd/... //pkg/... //federation/... //plugin/... //third_party/... //hack/... //hack:verify-all //vendor/k8s.io/... | ||||
| endif | ||||
|  | ||||
| ifeq ($(PRINT_HELP),y) | ||||
| define BAZEL_BUILD_HELP_INFO | ||||
| # Build release tars with bazel | ||||
| # | ||||
| # Example: | ||||
| # make bazel-release | ||||
| endef | ||||
| bazel-release: | ||||
| 	@echo "$$BAZEL_BUILD_HELP_INFO" | ||||
| else | ||||
| bazel-release: | ||||
| 	bazel build //build/release-tars | ||||
| endif | ||||
							
								
								
									
										745
									
								
								build/root/Makefile.generated_files
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										745
									
								
								build/root/Makefile.generated_files
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,745 @@ | ||||
| # Copyright 2016 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. | ||||
|  | ||||
| # Don't allow users to call this directly.  There are too many variables this | ||||
| # assumes to inherit from the main Makefile.  This is not a user-facing file. | ||||
| ifeq ($(CALLED_FROM_MAIN_MAKEFILE),) | ||||
|     $(error Please use the main Makefile, e.g. `make generated_files`) | ||||
| endif | ||||
|  | ||||
| # Don't allow an implicit 'all' rule.  This is not a user-facing file. | ||||
| ifeq ($(MAKECMDGOALS),) | ||||
|     $(error This Makefile requires an explicit rule to be specified) | ||||
| endif | ||||
|  | ||||
| ifeq ($(DBG_MAKEFILE),1) | ||||
|     $(warning ***** starting Makefile.generated_files for goal(s) "$(MAKECMDGOALS)") | ||||
|     $(warning ***** $(shell date)) | ||||
| endif | ||||
|  | ||||
|  | ||||
| # It's necessary to set this because some environments don't link sh -> bash. | ||||
| SHELL := /bin/bash | ||||
|  | ||||
| # This rule collects all the generated file sets into a single rule.  Other | ||||
| # rules should depend on this to ensure generated files are rebuilt. | ||||
| .PHONY: generated_files | ||||
| generated_files: gen_deepcopy gen_defaulter gen_conversion gen_openapi | ||||
|  | ||||
| .PHONY: verify_generated_files | ||||
| verify_generated_files: verify_gen_deepcopy    \ | ||||
|                         verify_gen_defaulter   \ | ||||
|                         verify_gen_conversion | ||||
|  | ||||
| # Code-generation logic. | ||||
| # | ||||
| # This stuff can be pretty tricky, and there's probably some corner cases that | ||||
| # we don't handle well.  That said, here's a straightforward test to prove that | ||||
| # the most common cases work.  Sadly, it is manual. | ||||
| # | ||||
| #     make clean | ||||
| #     find . -name .make\* | xargs rm -f | ||||
| #     find . -name zz_generated\* | xargs rm -f | ||||
| #     # verify `find . -name zz_generated.deepcopy.go | wc -l` is 0 | ||||
| #     # verify `find . -name .make | wc -l` is 0 | ||||
| # | ||||
| #     make nonexistent | ||||
| #     # expect "No rule to make target" | ||||
| #     # verify `find .make/ -type f | wc -l` has many files | ||||
| # | ||||
| #     make gen_deepcopy | ||||
| #     # expect deepcopy-gen is built exactly once | ||||
| #     # expect many files to be regenerated | ||||
| #     # verify `find . -name zz_generated.deepcopy.go | wc -l` has files | ||||
| #     make gen_deepcopy | ||||
| #     # expect nothing to be rebuilt, finish in O(seconds) | ||||
| #     touch pkg/api/types.go | ||||
| #     make gen_deepcopy | ||||
| #     # expect one file to be regenerated | ||||
| #     make gen_deepcopy | ||||
| #     # expect nothing to be rebuilt, finish in O(seconds) | ||||
| #     touch cmd/libs/go2idl/deepcopy-gen/main.go | ||||
| #     make gen_deepcopy | ||||
| #     # expect deepcopy-gen is built exactly once | ||||
| #     # expect many files to be regenerated | ||||
| #     # verify `find . -name zz_generated.deepcopy.go | wc -l` has files | ||||
| #     make gen_deepcopy | ||||
| #     # expect nothing to be rebuilt, finish in O(seconds) | ||||
| # | ||||
| #     make gen_conversion | ||||
| #     # expect conversion-gen is built exactly once | ||||
| #     # expect many files to be regenerated | ||||
| #     # verify `find . -name zz_generated.conversion.go | wc -l` has files | ||||
| #     make gen_conversion | ||||
| #     # expect nothing to be rebuilt, finish in O(seconds) | ||||
| #     touch pkg/api/types.go | ||||
| #     make gen_conversion | ||||
| #     # expect one file to be regenerated | ||||
| #     make gen_conversion | ||||
| #     # expect nothing to be rebuilt, finish in O(seconds) | ||||
| #     touch cmd/libs/go2idl/conversion-gen/main.go | ||||
| #     make gen_conversion | ||||
| #     # expect conversion-gen is built exactly once | ||||
| #     # expect many files to be regenerated | ||||
| #     # verify `find . -name zz_generated.conversion.go | wc -l` has files | ||||
| #     make gen_conversion | ||||
| #     # expect nothing to be rebuilt, finish in O(seconds) | ||||
| # | ||||
| #     make all | ||||
| #     # expect it to build | ||||
| # | ||||
| #     make test | ||||
| #     # expect it to pass | ||||
| # | ||||
| #     make clean | ||||
| #     # verify `find . -name zz_generated.deepcopy.go | wc -l` is 0 | ||||
| #     # verify `find . -name .make | wc -l` is 0 | ||||
| # | ||||
| #     make all WHAT=cmd/kube-proxy | ||||
| #     # expect it to build | ||||
| # | ||||
| #     make clean | ||||
| #     make test WHAT=cmd/kube-proxy | ||||
| #     # expect it to pass | ||||
|  | ||||
| # This variable holds a list of every directory that contains Go files in this | ||||
| # project.  Other rules and variables can use this as a starting point to | ||||
| # reduce filesystem accesses. | ||||
| ifeq ($(DBG_MAKEFILE),1) | ||||
|     $(warning ***** finding all *.go dirs) | ||||
| endif | ||||
| ALL_GO_DIRS := $(shell                                                   \ | ||||
|     hack/make-rules/helpers/cache_go_dirs.sh $(META_DIR)/all_go_dirs.mk  \ | ||||
| ) | ||||
|  | ||||
| # The name of the metadata file which lists *.go files in each pkg. | ||||
| GOFILES_META := gofiles.mk | ||||
|  | ||||
| # Establish a dependency between the deps file and the dir.  Whenever a dir | ||||
| # changes (files added or removed) the deps file will be considered stale. | ||||
| # | ||||
| # The variable value was set in $(GOFILES_META) and included as part of the | ||||
| # dependency management logic. | ||||
| # | ||||
| # This is looser than we really need (e.g. we don't really care about non *.go | ||||
| # files or even *_test.go files), but this is much easier to represent. | ||||
| # | ||||
| # Because we 'sinclude' the deps file, it is considered for rebuilding, as part | ||||
| # of make's normal evaluation.  If it gets rebuilt, make will restart. | ||||
| # | ||||
| # The '$(eval)' is needed because this has a different RHS for each LHS, and | ||||
| # would otherwise produce results that make can't parse. | ||||
| $(foreach dir, $(ALL_GO_DIRS), $(eval           \ | ||||
|     $(META_DIR)/$(dir)/$(GOFILES_META): $(dir)  \ | ||||
| )) | ||||
|  | ||||
| # How to rebuild a deps file.  When make determines that the deps file is stale | ||||
| # (see above), it executes this rule, and then re-loads the deps file. | ||||
| # | ||||
| # This is looser than we really need (e.g. we don't really care about test | ||||
| # files), but this is MUCH faster than calling `go list`. | ||||
| # | ||||
| # We regenerate the output file in order to satisfy make's "newer than" rules, | ||||
| # but we only need to rebuild targets if the contents actually changed.  That | ||||
| # is what the .stamp file represents. | ||||
| $(foreach dir, $(ALL_GO_DIRS),  \ | ||||
|     $(META_DIR)/$(dir)/$(GOFILES_META)): | ||||
| 	FILES=$$(ls $</*.go | grep --color=never -v $(GENERATED_FILE_PREFIX));  \ | ||||
| 	mkdir -p $(@D);                                           \ | ||||
| 	echo "gofiles__$< := $$(echo $${FILES})" >$@.tmp;         \ | ||||
| 	cmp -s $@.tmp $@ || touch $@.stamp;                       \ | ||||
| 	mv $@.tmp $@ | ||||
| # This is required to fill in the DAG, since some cases (e.g. 'make clean all') | ||||
| # will reference the .stamp file when it doesn't exist.  We don't need to | ||||
| # rebuild it in that case, just keep make happy. | ||||
| $(foreach dir, $(ALL_GO_DIRS),  \ | ||||
|     $(META_DIR)/$(dir)/$(GOFILES_META).stamp): | ||||
|  | ||||
| # Include any deps files as additional Makefile rules.  This triggers make to | ||||
| # consider the deps files for rebuild, which makes the whole | ||||
| # dependency-management logic work.  'sinclude' is "silent include" which does | ||||
| # not fail if the file does not exist. | ||||
| $(foreach dir, $(ALL_GO_DIRS), $(eval            \ | ||||
|     sinclude $(META_DIR)/$(dir)/$(GOFILES_META)  \ | ||||
| )) | ||||
|  | ||||
| # Generate a list of all files that have a `+k8s:` comment-tag.  This will be | ||||
| # used to derive lists of files/dirs for generation tools. | ||||
| ifeq ($(DBG_MAKEFILE),1) | ||||
|     $(warning ***** finding all +k8s: tags) | ||||
| endif | ||||
| ALL_K8S_TAG_FILES := $(shell                             \ | ||||
|     find $(ALL_GO_DIRS) -maxdepth 1 -type f -name \*.go  \ | ||||
|         | xargs grep --color=never -l '^// *+k8s:'       \ | ||||
| ) | ||||
|  | ||||
| # | ||||
| # Deep-copy generation | ||||
| # | ||||
| # Any package that wants deep-copy functions generated must include a | ||||
| # comment-tag in column 0 of one file of the form: | ||||
| #     // +k8s:deepcopy-gen=<VALUE> | ||||
| # | ||||
| # The <VALUE> may be one of: | ||||
| #     generate: generate deep-copy functions into the package | ||||
| #     register: generate deep-copy functions and register them with a | ||||
| #               scheme | ||||
|  | ||||
| # The result file, in each pkg, of deep-copy generation. | ||||
| DEEPCOPY_BASENAME := $(GENERATED_FILE_PREFIX)deepcopy | ||||
| DEEPCOPY_FILENAME := $(DEEPCOPY_BASENAME).go | ||||
|  | ||||
| # The tool used to generate deep copies. | ||||
| DEEPCOPY_GEN := $(BIN_DIR)/deepcopy-gen | ||||
|  | ||||
| # Find all the directories that request deep-copy generation. | ||||
| ifeq ($(DBG_MAKEFILE),1) | ||||
|     $(warning ***** finding all +k8s:deepcopy-gen tags) | ||||
| endif | ||||
| DEEPCOPY_DIRS := $(shell                                             \ | ||||
|     grep --color=never -l '+k8s:deepcopy-gen=' $(ALL_K8S_TAG_FILES)  \ | ||||
|         | xargs -n1 dirname                                          \ | ||||
|         | LC_ALL=C sort -u                                           \ | ||||
| ) | ||||
| DEEPCOPY_FILES := $(addsuffix /$(DEEPCOPY_FILENAME), $(DEEPCOPY_DIRS)) | ||||
|  | ||||
| # Shell function for reuse in rules. | ||||
| RUN_GEN_DEEPCOPY =                                                          \ | ||||
|     function run_gen_deepcopy() {                                           \ | ||||
|         if [[ -f $(META_DIR)/$(DEEPCOPY_GEN).todo ]]; then                  \ | ||||
|             ./hack/run-in-gopath.sh $(DEEPCOPY_GEN)                         \ | ||||
|                 --v $(KUBE_VERBOSE)                                         \ | ||||
|                 --logtostderr                                               \ | ||||
|                 -i $$(cat $(META_DIR)/$(DEEPCOPY_GEN).todo | paste -sd, -)  \ | ||||
|                 --bounding-dirs $(PRJ_SRC_PATH)                             \ | ||||
|                 -O $(DEEPCOPY_BASENAME)                                     \ | ||||
|                 "$$@";                                                      \ | ||||
|         fi                                                                  \ | ||||
|     };                                                                      \ | ||||
|     run_gen_deepcopy | ||||
|  | ||||
| # This rule aggregates the set of files to generate and then generates them all | ||||
| # in a single run of the tool. | ||||
| .PHONY: gen_deepcopy | ||||
| gen_deepcopy: $(DEEPCOPY_FILES) $(DEEPCOPY_GEN) | ||||
| 	$(RUN_GEN_DEEPCOPY) | ||||
|  | ||||
| .PHONY: verify_gen_deepcopy | ||||
| verify_gen_deepcopy: $(DEEPCOPY_GEN) | ||||
| 	$(RUN_GEN_DEEPCOPY) --verify-only | ||||
|  | ||||
| # For each dir in DEEPCOPY_DIRS, this establishes a dependency between the | ||||
| # output file and the input files that should trigger a rebuild. | ||||
| # | ||||
| # Note that this is a deps-only statement, not a full rule (see below).  This | ||||
| # has to be done in a distinct step because wildcards don't work in static | ||||
| # pattern rules. | ||||
| # | ||||
| # The '$(eval)' is needed because this has a different RHS for each LHS, and | ||||
| # would otherwise produce results that make can't parse. | ||||
| # | ||||
| # We depend on the $(GOFILES_META).stamp to detect when the set of input files | ||||
| # has changed.  This allows us to detect deleted input files. | ||||
| $(foreach dir, $(DEEPCOPY_DIRS), $(eval                                    \ | ||||
|     $(dir)/$(DEEPCOPY_FILENAME): $(META_DIR)/$(dir)/$(GOFILES_META).stamp  \ | ||||
|                                  $(gofiles__$(dir))                        \ | ||||
| )) | ||||
|  | ||||
| # Unilaterally remove any leftovers from previous runs. | ||||
| $(shell rm -f $(META_DIR)/$(DEEPCOPY_GEN)*.todo) | ||||
|  | ||||
| # How to regenerate deep-copy code.  This is a little slow to run, so we batch | ||||
| # it up and trigger the batch from the 'generated_files' target. | ||||
| $(DEEPCOPY_FILES): $(DEEPCOPY_GEN) | ||||
| 	mkdir -p $$(dirname $(META_DIR)/$(DEEPCOPY_GEN)) | ||||
| 	echo $(PRJ_SRC_PATH)/$(@D) >> $(META_DIR)/$(DEEPCOPY_GEN).todo | ||||
|  | ||||
| # This calculates the dependencies for the generator tool, so we only rebuild | ||||
| # it when needed.  It is PHONY so that it always runs, but it only updates the | ||||
| # file if the contents have actually changed.  We 'sinclude' this later. | ||||
| .PHONY: $(META_DIR)/$(DEEPCOPY_GEN).mk | ||||
| $(META_DIR)/$(DEEPCOPY_GEN).mk: | ||||
| 	mkdir -p $(@D);                                                       \ | ||||
| 	(echo -n "$(DEEPCOPY_GEN): ";                                         \ | ||||
| 	 ./hack/run-in-gopath.sh go list                                      \ | ||||
| 	     -f '{{.ImportPath}}{{"\n"}}{{range .Deps}}{{.}}{{"\n"}}{{end}}'  \ | ||||
| 	     ./cmd/libs/go2idl/deepcopy-gen                                   \ | ||||
| 	     | grep --color=never "^$(PRJ_SRC_PATH)/"                         \ | ||||
| 	     | xargs ./hack/run-in-gopath.sh go list                          \ | ||||
| 	         -f '{{$$d := .Dir}}{{$$d}}{{"\n"}}{{range .GoFiles}}{{$$d}}/{{.}}{{"\n"}}{{end}}'  \ | ||||
| 	     | paste -sd' ' -                                                 \ | ||||
| 	     | sed 's/ / \\=,/g'                                              \ | ||||
| 	     | tr '=,' '\n\t'                                                 \ | ||||
| 	     | sed "s|$$(pwd -P)/||";                                         \ | ||||
| 	) > $@.tmp;                                                           \ | ||||
| 	cmp -s $@.tmp $@ || cat $@.tmp > $@ && rm -f $@.tmp | ||||
|  | ||||
| # Include dependency info for the generator tool.  This will cause the rule of | ||||
| # the same name to be considered and if it is updated, make will restart. | ||||
| sinclude $(META_DIR)/$(DEEPCOPY_GEN).mk | ||||
|  | ||||
| # How to build the generator tool.  The deps for this are defined in | ||||
| # the $(DEEPCOPY_GEN).mk, above. | ||||
| # | ||||
| # A word on the need to touch: This rule might trigger if, for example, a | ||||
| # non-Go file was added or deleted from a directory on which this depends. | ||||
| # This target needs to be reconsidered, but Go realizes it doesn't actually | ||||
| # have to be rebuilt.  In that case, make will forever see the dependency as | ||||
| # newer than the binary, and try to rebuild it over and over.  So we touch it, | ||||
| # and make is happy. | ||||
| $(DEEPCOPY_GEN): | ||||
| 	hack/make-rules/build.sh cmd/libs/go2idl/deepcopy-gen | ||||
| 	touch $@ | ||||
|  | ||||
| # | ||||
| # Defaulter generation | ||||
| # | ||||
| # Any package that wants defaulter functions generated must include a | ||||
| # comment-tag in column 0 of one file of the form: | ||||
| #     // +k8s:defaulter-gen=<VALUE> | ||||
| # | ||||
| # The <VALUE> depends on context: | ||||
| #     on types: | ||||
| #       true:  always generate a defaulter for this type | ||||
| #       false: never generate a defaulter for this type | ||||
| #     on functions: | ||||
| #       covers: if the function name matches SetDefault_NAME, instructs | ||||
| #               the generator not to recurse | ||||
| #     on packages: | ||||
| #       FIELDNAME: any object with a field of this name is a candidate | ||||
| #                  for having a defaulter generated | ||||
|  | ||||
| # The result file, in each pkg, of defaulter generation. | ||||
| DEFAULTER_BASENAME := $(GENERATED_FILE_PREFIX)defaults | ||||
| DEFAULTER_FILENAME := $(DEFAULTER_BASENAME).go | ||||
|  | ||||
| # The tool used to generate defaulters. | ||||
| DEFAULTER_GEN := $(BIN_DIR)/defaulter-gen | ||||
|  | ||||
| # All directories that request any form of defaulter generation. | ||||
| ifeq ($(DBG_MAKEFILE),1) | ||||
|     $(warning ***** finding all +k8s:defaulter-gen tags) | ||||
| endif | ||||
| DEFAULTER_DIRS := $(shell                                            \ | ||||
|     grep --color=never -l '+k8s:defaulter-gen=' $(ALL_K8S_TAG_FILES) \ | ||||
|         | xargs -n1 dirname                                          \ | ||||
|         | LC_ALL=C sort -u                                           \ | ||||
| ) | ||||
|  | ||||
| DEFAULTER_FILES := $(addsuffix /$(DEFAULTER_FILENAME), $(DEFAULTER_DIRS)) | ||||
|  | ||||
| RUN_GEN_DEFAULTER :=                                                         \ | ||||
|     function run_gen_defaulter() {                                           \ | ||||
|         if [[ -f $(META_DIR)/$(DEFAULTER_GEN).todo ]]; then                  \ | ||||
|             ./hack/run-in-gopath.sh $(DEFAULTER_GEN)                         \ | ||||
|                 --v $(KUBE_VERBOSE)                                          \ | ||||
|                 --logtostderr                                                \ | ||||
|                 -i $$(cat $(META_DIR)/$(DEFAULTER_GEN).todo | paste -sd, -)  \ | ||||
|                 --extra-peer-dirs $$(echo $(addprefix $(PRJ_SRC_PATH)/, $(DEFAULTER_DIRS)) | sed 's/ /,/g') \ | ||||
|                 -O $(DEFAULTER_BASENAME)                                     \ | ||||
|                 "$$@";                                                       \ | ||||
|         fi                                                                   \ | ||||
|     };                                                                       \ | ||||
|     run_gen_defaulter | ||||
|  | ||||
| # This rule aggregates the set of files to generate and then generates them all | ||||
| # in a single run of the tool. | ||||
| .PHONY: gen_defaulter | ||||
| gen_defaulter: $(DEFAULTER_FILES) $(DEFAULTER_GEN) | ||||
| 	$(RUN_GEN_DEFAULTER) | ||||
|  | ||||
| .PHONY: verify_gen_deepcopy | ||||
| verify_gen_defaulter: $(DEFAULTER_GEN) | ||||
| 	$(RUN_GEN_DEFAULTER) --verify-only | ||||
|  | ||||
| # For each dir in DEFAULTER_DIRS, this establishes a dependency between the | ||||
| # output file and the input files that should trigger a rebuild. | ||||
| # | ||||
| # The variable value was set in $(GOFILES_META) and included as part of the | ||||
| # dependency management logic. | ||||
| # | ||||
| # Note that this is a deps-only statement, not a full rule (see below).  This | ||||
| # has to be done in a distinct step because wildcards don't work in static | ||||
| # pattern rules. | ||||
| # | ||||
| # The '$(eval)' is needed because this has a different RHS for each LHS, and | ||||
| # would otherwise produce results that make can't parse. | ||||
| # | ||||
| # We depend on the $(GOFILES_META).stamp to detect when the set of input files | ||||
| # has changed.  This allows us to detect deleted input files. | ||||
| $(foreach dir, $(DEFAULTER_DIRS), $(eval                                    \ | ||||
|     $(dir)/$(DEFAULTER_FILENAME): $(META_DIR)/$(dir)/$(GOFILES_META).stamp  \ | ||||
|                                    $(gofiles__$(dir))                       \ | ||||
| )) | ||||
|  | ||||
| # For each dir in DEFAULTER_DIRS, for each target in $(defaulters__$(dir)), | ||||
| # this establishes a dependency between the output file and the input files | ||||
| # that should trigger a rebuild. | ||||
| # | ||||
| # The variable value was set in $(GOFILES_META) and included as part of the | ||||
| # dependency management logic. | ||||
| # | ||||
| # Note that this is a deps-only statement, not a full rule (see below).  This | ||||
| # has to be done in a distinct step because wildcards don't work in static | ||||
| # pattern rules. | ||||
| # | ||||
| # The '$(eval)' is needed because this has a different RHS for each LHS, and | ||||
| # would otherwise produce results that make can't parse. | ||||
| # | ||||
| # We depend on the $(GOFILES_META).stamp to detect when the set of input files | ||||
| # has changed.  This allows us to detect deleted input files. | ||||
| $(foreach dir, $(DEFAULTER_DIRS),                                               \ | ||||
|     $(foreach tgt, $(defaulters__$(dir)), $(eval                                \ | ||||
|         $(dir)/$(DEFAULTER_FILENAME): $(META_DIR)/$(tgt)/$(GOFILES_META).stamp  \ | ||||
|                                        $(gofiles__$(tgt))                       \ | ||||
|     ))                                                                          \ | ||||
| ) | ||||
|  | ||||
| # Unilaterally remove any leftovers from previous runs. | ||||
| $(shell rm -f $(META_DIR)/$(DEFAULTER_GEN)*.todo) | ||||
|  | ||||
| # How to regenerate defaulter code.  This is a little slow to run, so we batch | ||||
| # it up and trigger the batch from the 'generated_files' target. | ||||
| $(DEFAULTER_FILES): $(DEFAULTER_GEN) | ||||
| 	mkdir -p $$(dirname $(META_DIR)/$(DEFAULTER_GEN)) | ||||
| 	echo $(PRJ_SRC_PATH)/$(@D) >> $(META_DIR)/$(DEFAULTER_GEN).todo | ||||
|  | ||||
| # This calculates the dependencies for the generator tool, so we only rebuild | ||||
| # it when needed.  It is PHONY so that it always runs, but it only updates the | ||||
| # file if the contents have actually changed.  We 'sinclude' this later. | ||||
| .PHONY: $(META_DIR)/$(DEFAULTER_GEN).mk | ||||
| $(META_DIR)/$(DEFAULTER_GEN).mk: | ||||
| 	mkdir -p $(@D);                                                       \ | ||||
| 	(echo -n "$(DEFAULTER_GEN): ";                                        \ | ||||
| 	 ./hack/run-in-gopath.sh go list                                      \ | ||||
| 	     -f '{{.ImportPath}}{{"\n"}}{{range .Deps}}{{.}}{{"\n"}}{{end}}'  \ | ||||
| 	     ./cmd/libs/go2idl/defaulter-gen                                  \ | ||||
| 	     | grep --color=never "^$(PRJ_SRC_PATH)/"                         \ | ||||
| 	     | xargs ./hack/run-in-gopath.sh go list                          \ | ||||
| 	         -f '{{$$d := .Dir}}{{$$d}}{{"\n"}}{{range .GoFiles}}{{$$d}}/{{.}}{{"\n"}}{{end}}'  \ | ||||
| 	     | paste -sd' ' -                                                 \ | ||||
| 	     | sed 's/ / \\=,/g'                                              \ | ||||
| 	     | tr '=,' '\n\t'                                                 \ | ||||
| 	     | sed "s|$$(pwd -P)/||";                                         \ | ||||
| 	) > $@.tmp;                                                           \ | ||||
| 	cmp -s $@.tmp $@ || cat $@.tmp > $@ && rm -f $@.tmp | ||||
|  | ||||
| # Include dependency info for the generator tool.  This will cause the rule of | ||||
| # the same name to be considered and if it is updated, make will restart. | ||||
| sinclude $(META_DIR)/$(DEFAULTER_GEN).mk | ||||
|  | ||||
| # How to build the generator tool.  The deps for this are defined in | ||||
| # the $(DEFAULTER_GEN).mk, above. | ||||
| # | ||||
| # A word on the need to touch: This rule might trigger if, for example, a | ||||
| # non-Go file was added or deleted from a directory on which this depends. | ||||
| # This target needs to be reconsidered, but Go realizes it doesn't actually | ||||
| # have to be rebuilt.  In that case, make will forever see the dependency as | ||||
| # newer than the binary, and try to rebuild it over and over.  So we touch it, | ||||
| # and make is happy. | ||||
| $(DEFAULTER_GEN): | ||||
| 	hack/make-rules/build.sh cmd/libs/go2idl/defaulter-gen | ||||
| 	touch $@ | ||||
|  | ||||
| # | ||||
| # Open-api generation | ||||
| # | ||||
| # Any package that wants open-api functions generated must include a | ||||
| # comment-tag in column 0 of one file of the form: | ||||
| #     // +k8s:openapi-gen=true | ||||
| # | ||||
| # The result file, in each pkg, of open-api generation. | ||||
| OPENAPI_BASENAME := $(GENERATED_FILE_PREFIX)openapi | ||||
| OPENAPI_FILENAME := $(OPENAPI_BASENAME).go | ||||
| OPENAPI_OUTPUT_PKG := pkg/generated/openapi | ||||
|  | ||||
| # The tool used to generate open apis. | ||||
| OPENAPI_GEN := $(BIN_DIR)/openapi-gen | ||||
|  | ||||
| # Find all the directories that request open-api generation. | ||||
| ifeq ($(DBG_MAKEFILE),1) | ||||
|     $(warning ***** finding all +k8s:openapi-gen tags) | ||||
| endif | ||||
| OPENAPI_DIRS := $(shell                                             \ | ||||
|     grep --color=never -l '+k8s:openapi-gen=' $(ALL_K8S_TAG_FILES)  \ | ||||
|         | xargs -n1 dirname                                         \ | ||||
|         | LC_ALL=C sort -u                                          \ | ||||
| ) | ||||
|  | ||||
| OPENAPI_OUTFILE := $(OPENAPI_OUTPUT_PKG)/$(OPENAPI_FILENAME) | ||||
|  | ||||
| # This rule is the user-friendly entrypoint for openapi generation. | ||||
| .PHONY: gen_openapi | ||||
| gen_openapi: $(OPENAPI_OUTFILE) $(OPENAPI_GEN) | ||||
|  | ||||
| # For each dir in OPENAPI_DIRS, this establishes a dependency between the | ||||
| # output file and the input files that should trigger a rebuild. | ||||
| # | ||||
| # Note that this is a deps-only statement, not a full rule (see below).  This | ||||
| # has to be done in a distinct step because wildcards don't work in static | ||||
| # pattern rules. | ||||
| # | ||||
| # The '$(eval)' is needed because this has a different RHS for each LHS, and | ||||
| # would otherwise produce results that make can't parse. | ||||
| # | ||||
| # We depend on the $(GOFILES_META).stamp to detect when the set of input files | ||||
| # has changed.  This allows us to detect deleted input files. | ||||
| $(foreach dir, $(OPENAPI_DIRS), $(eval                                     \ | ||||
|     $(OPENAPI_OUTFILE): $(META_DIR)/$(dir)/$(GOFILES_META).stamp           \ | ||||
|                                  $(gofiles__$(dir))                        \ | ||||
| )) | ||||
|  | ||||
| # How to regenerate open-api code.  This emits a single file for all results. | ||||
| $(OPENAPI_OUTFILE): $(OPENAPI_GEN) $(OPENAPI_GEN) | ||||
| 	function run_gen_openapi() {                                                        \ | ||||
|         ./hack/run-in-gopath.sh $(OPENAPI_GEN)                                          \ | ||||
|             --v $(KUBE_VERBOSE)                                                         \ | ||||
|             --logtostderr                                                               \ | ||||
|             -i $$(echo $(addprefix $(PRJ_SRC_PATH)/, $(OPENAPI_DIRS)) | sed 's/ /,/g')  \ | ||||
|             -p $(PRJ_SRC_PATH)/$(OPENAPI_OUTPUT_PKG)                                    \ | ||||
|             -O $(OPENAPI_BASENAME)                                                      \ | ||||
|             "$$@";                                                                      \ | ||||
|     };                                                                                  \ | ||||
|     run_gen_openapi | ||||
|  | ||||
| # This calculates the dependencies for the generator tool, so we only rebuild | ||||
| # it when needed.  It is PHONY so that it always runs, but it only updates the | ||||
| # file if the contents have actually changed.  We 'sinclude' this later. | ||||
| .PHONY: $(META_DIR)/$(OPENAPI_GEN).mk | ||||
| $(META_DIR)/$(OPENAPI_GEN).mk: | ||||
| 	mkdir -p $(@D);                                                       \ | ||||
| 	(echo -n "$(OPENAPI_GEN): ";                                          \ | ||||
| 	 ./hack/run-in-gopath.sh go list                                      \ | ||||
| 	     -f '{{.ImportPath}}{{"\n"}}{{range .Deps}}{{.}}{{"\n"}}{{end}}'  \ | ||||
| 	     ./cmd/libs/go2idl/openapi-gen                                    \ | ||||
| 	     | grep --color=never "^$(PRJ_SRC_PATH)/"                         \ | ||||
| 	     | xargs ./hack/run-in-gopath.sh go list                          \ | ||||
| 	         -f '{{$$d := .Dir}}{{$$d}}{{"\n"}}{{range .GoFiles}}{{$$d}}/{{.}}{{"\n"}}{{end}}'  \ | ||||
| 	     | paste -sd' ' -                                                 \ | ||||
| 	     | sed 's/ / \\=,/g'                                              \ | ||||
| 	     | tr '=,' '\n\t'                                                 \ | ||||
| 	     | sed "s|$$(pwd -P)/||";                                         \ | ||||
| 	) > $@.tmp;                                                           \ | ||||
| 	cmp -s $@.tmp $@ || cat $@.tmp > $@ && rm -f $@.tmp | ||||
|  | ||||
| # Include dependency info for the generator tool.  This will cause the rule of | ||||
| # the same name to be considered and if it is updated, make will restart. | ||||
| sinclude $(META_DIR)/$(OPENAPI_GEN).mk | ||||
|  | ||||
| # How to build the generator tool.  The deps for this are defined in | ||||
| # the $(OPENAPI_GEN).mk, above. | ||||
| # | ||||
| # A word on the need to touch: This rule might trigger if, for example, a | ||||
| # non-Go file was added or deleted from a directory on which this depends. | ||||
| # This target needs to be reconsidered, but Go realizes it doesn't actually | ||||
| # have to be rebuilt.  In that case, make will forever see the dependency as | ||||
| # newer than the binary, and try to rebuild it over and over.  So we touch it, | ||||
| # and make is happy. | ||||
| $(OPENAPI_GEN): | ||||
| 	hack/make-rules/build.sh cmd/libs/go2idl/openapi-gen | ||||
| 	touch $@ | ||||
|  | ||||
| # | ||||
| # Conversion generation | ||||
| # | ||||
| # Any package that wants conversion functions generated must include one or | ||||
| # more comment-tags in any .go file, in column 0, of the form: | ||||
| #     // +k8s:conversion-gen=<CONVERSION_TARGET_DIR> | ||||
| # | ||||
| # The CONVERSION_TARGET_DIR is a project-local path to another directory which | ||||
| # should be considered when evaluating peer types for conversions.  Types which | ||||
| # are found in the source package (where conversions are being generated) | ||||
| # but do not have a peer in one of the target directories will not have | ||||
| # conversions generated. | ||||
| # | ||||
| # TODO: it might be better in the long term to make peer-types explicit in the | ||||
| # IDL. | ||||
|  | ||||
| # The result file, in each pkg, of conversion generation. | ||||
| CONVERSION_BASENAME := $(GENERATED_FILE_PREFIX)conversion | ||||
| CONVERSION_FILENAME := $(CONVERSION_BASENAME).go | ||||
|  | ||||
| # The tool used to generate conversions. | ||||
| CONVERSION_GEN := $(BIN_DIR)/conversion-gen | ||||
|  | ||||
| # The name of the metadata file listing conversion peers for each pkg. | ||||
| CONVERSIONS_META := conversions.mk | ||||
|  | ||||
| # All directories that request any form of conversion generation. | ||||
| ifeq ($(DBG_MAKEFILE),1) | ||||
|     $(warning ***** finding all +k8s:conversion-gen tags) | ||||
| endif | ||||
| CONVERSION_DIRS := $(shell                                              \ | ||||
|     grep --color=never '^// *+k8s:conversion-gen=' $(ALL_K8S_TAG_FILES) \ | ||||
|         | cut -f1 -d:                                                   \ | ||||
|         | xargs -n1 dirname                                             \ | ||||
|         | LC_ALL=C sort -u                                              \ | ||||
| ) | ||||
|  | ||||
| CONVERSION_FILES := $(addsuffix /$(CONVERSION_FILENAME), $(CONVERSION_DIRS)) | ||||
|  | ||||
| # Shell function for reuse in rules. | ||||
| RUN_GEN_CONVERSION =                                                          \ | ||||
|     function run_gen_conversion() {                                           \ | ||||
|         if [[ -f $(META_DIR)/$(CONVERSION_GEN).todo ]]; then                  \ | ||||
|             ./hack/run-in-gopath.sh $(CONVERSION_GEN)                         \ | ||||
|                 --v $(KUBE_VERBOSE)                                           \ | ||||
|                 --logtostderr                                                 \ | ||||
|                 -i $$(cat $(META_DIR)/$(CONVERSION_GEN).todo | paste -sd, -)  \ | ||||
|                 -O $(CONVERSION_BASENAME)                                     \ | ||||
|                 "$$@";                                                        \ | ||||
|         fi                                                                    \ | ||||
|     };                                                                        \ | ||||
|     run_gen_conversion | ||||
|  | ||||
| # This rule aggregates the set of files to generate and then generates them all | ||||
| # in a single run of the tool. | ||||
| .PHONY: gen_conversion | ||||
| gen_conversion: $(CONVERSION_FILES) $(CONVERSION_GEN) | ||||
| 	$(RUN_GEN_CONVERSION) | ||||
|  | ||||
| .PHONY: verify_gen_conversion | ||||
| verify_gen_conversion: $(CONVERSION_GEN) | ||||
| 	$(RUN_GEN_CONVERSION) --verify-only | ||||
|  | ||||
| # Establish a dependency between the deps file and the dir.  Whenever a dir | ||||
| # changes (files added or removed) the deps file will be considered stale. | ||||
| # | ||||
| # This is looser than we really need (e.g. we don't really care about non *.go | ||||
| # files or even *_test.go files), but this is much easier to represent. | ||||
| # | ||||
| # Because we 'sinclude' the deps file, it is considered for rebuilding, as part | ||||
| # of make's normal evaluation.  If it gets rebuilt, make will restart. | ||||
| # | ||||
| # The '$(eval)' is needed because this has a different RHS for each LHS, and | ||||
| # would otherwise produce results that make can't parse. | ||||
| $(foreach dir, $(CONVERSION_DIRS), $(eval           \ | ||||
|     $(META_DIR)/$(dir)/$(CONVERSIONS_META): $(dir)  \ | ||||
| )) | ||||
|  | ||||
| # How to rebuild a deps file.  When make determines that the deps file is stale | ||||
| # (see above), it executes this rule, and then re-loads the deps file. | ||||
| # | ||||
| # This is looser than we really need (e.g. we don't really care about test | ||||
| # files), but this is MUCH faster than calling `go list`. | ||||
| # | ||||
| # We regenerate the output file in order to satisfy make's "newer than" rules, | ||||
| # but we only need to rebuild targets if the contents actually changed.  That | ||||
| # is what the .stamp file represents. | ||||
| $(foreach dir, $(CONVERSION_DIRS),  \ | ||||
|     $(META_DIR)/$(dir)/$(CONVERSIONS_META)): | ||||
| 	TAGS=$$(grep --color=never -h '^// *+k8s:conversion-gen=' $</*.go   \ | ||||
| 	    | cut -f2- -d=                                                  \ | ||||
| 	    | sed 's|$(PRJ_SRC_PATH)/||');                                  \ | ||||
| 	mkdir -p $(@D);                                                     \ | ||||
| 	echo "conversions__$< := $$(echo $${TAGS})" >$@.tmp;                \ | ||||
| 	cmp -s $@.tmp $@ || touch $@.stamp;                                 \ | ||||
| 	mv $@.tmp $@ | ||||
|  | ||||
| # Include any deps files as additional Makefile rules.  This triggers make to | ||||
| # consider the deps files for rebuild, which makes the whole | ||||
| # dependency-management logic work.  'sinclude' is "silent include" which does | ||||
| # not fail if the file does not exist. | ||||
| $(foreach dir, $(CONVERSION_DIRS), $(eval            \ | ||||
|     sinclude $(META_DIR)/$(dir)/$(CONVERSIONS_META)  \ | ||||
| )) | ||||
|  | ||||
| # For each dir in CONVERSION_DIRS, this establishes a dependency between the | ||||
| # output file and the input files that should trigger a rebuild. | ||||
| # | ||||
| # The variable value was set in $(GOFILES_META) and included as part of the | ||||
| # dependency management logic. | ||||
| # | ||||
| # Note that this is a deps-only statement, not a full rule (see below).  This | ||||
| # has to be done in a distinct step because wildcards don't work in static | ||||
| # pattern rules. | ||||
| # | ||||
| # The '$(eval)' is needed because this has a different RHS for each LHS, and | ||||
| # would otherwise produce results that make can't parse. | ||||
| # | ||||
| # We depend on the $(GOFILES_META).stamp to detect when the set of input files | ||||
| # has changed.  This allows us to detect deleted input files. | ||||
| $(foreach dir, $(CONVERSION_DIRS), $(eval                                    \ | ||||
|     $(dir)/$(CONVERSION_FILENAME): $(META_DIR)/$(dir)/$(GOFILES_META).stamp  \ | ||||
|                                    $(gofiles__$(dir))                        \ | ||||
| )) | ||||
|  | ||||
| # For each dir in CONVERSION_DIRS, for each target in $(conversions__$(dir)), | ||||
| # this establishes a dependency between the output file and the input files | ||||
| # that should trigger a rebuild. | ||||
| # | ||||
| # The variable value was set in $(GOFILES_META) and included as part of the | ||||
| # dependency management logic. | ||||
| # | ||||
| # Note that this is a deps-only statement, not a full rule (see below).  This | ||||
| # has to be done in a distinct step because wildcards don't work in static | ||||
| # pattern rules. | ||||
| # | ||||
| # The '$(eval)' is needed because this has a different RHS for each LHS, and | ||||
| # would otherwise produce results that make can't parse. | ||||
| # | ||||
| # We depend on the $(GOFILES_META).stamp to detect when the set of input files | ||||
| # has changed.  This allows us to detect deleted input files. | ||||
| $(foreach dir, $(CONVERSION_DIRS),                                               \ | ||||
|     $(foreach tgt, $(conversions__$(dir)), $(eval                                \ | ||||
|         $(dir)/$(CONVERSION_FILENAME): $(META_DIR)/$(tgt)/$(GOFILES_META).stamp  \ | ||||
|                                        $(gofiles__$(tgt))                        \ | ||||
|     ))                                                                           \ | ||||
| ) | ||||
|  | ||||
| # Unilaterally remove any leftovers from previous runs. | ||||
| $(shell rm -f $(META_DIR)/$(CONVERSION_GEN)*.todo) | ||||
|  | ||||
| # How to regenerate conversion code.  This is a little slow to run, so we batch | ||||
| # it up and trigger the batch from the 'generated_files' target. | ||||
| $(CONVERSION_FILES): $(CONVERSION_GEN) | ||||
| 	mkdir -p $$(dirname $(META_DIR)/$(CONVERSION_GEN)) | ||||
| 	echo $(PRJ_SRC_PATH)/$(@D) >> $(META_DIR)/$(CONVERSION_GEN).todo | ||||
|  | ||||
| # This calculates the dependencies for the generator tool, so we only rebuild | ||||
| # it when needed.  It is PHONY so that it always runs, but it only updates the | ||||
| # file if the contents have actually changed.  We 'sinclude' this later. | ||||
| .PHONY: $(META_DIR)/$(CONVERSION_GEN).mk | ||||
| $(META_DIR)/$(CONVERSION_GEN).mk: | ||||
| 	mkdir -p $(@D);                                                       \ | ||||
| 	(echo -n "$(CONVERSION_GEN): ";                                       \ | ||||
| 	 ./hack/run-in-gopath.sh go list                                      \ | ||||
| 	     -f '{{.ImportPath}}{{"\n"}}{{range .Deps}}{{.}}{{"\n"}}{{end}}'  \ | ||||
| 	     ./cmd/libs/go2idl/conversion-gen                                 \ | ||||
| 	     | grep --color=never "^$(PRJ_SRC_PATH)/"                         \ | ||||
| 	     | xargs ./hack/run-in-gopath.sh go list                          \ | ||||
| 	         -f '{{$$d := .Dir}}{{$$d}}{{"\n"}}{{range .GoFiles}}{{$$d}}/{{.}}{{"\n"}}{{end}}'  \ | ||||
| 	     | paste -sd' ' -                                                 \ | ||||
| 	     | sed 's/ / \\=,/g'                                              \ | ||||
| 	     | tr '=,' '\n\t'                                                 \ | ||||
| 	     | sed "s|$$(pwd -P)/||";                                         \ | ||||
| 	) > $@.tmp;                                                           \ | ||||
| 	cmp -s $@.tmp $@ || cat $@.tmp > $@ && rm -f $@.tmp | ||||
|  | ||||
| # Include dependency info for the generator tool.  This will cause the rule of | ||||
| # the same name to be considered and if it is updated, make will restart. | ||||
| sinclude $(META_DIR)/$(CONVERSION_GEN).mk | ||||
|  | ||||
| # How to build the generator tool.  The deps for this are defined in | ||||
| # the $(CONVERSION_GEN).mk, above. | ||||
| # | ||||
| # A word on the need to touch: This rule might trigger if, for example, a | ||||
| # non-Go file was added or deleted from a directory on which this depends. | ||||
| # This target needs to be reconsidered, but Go realizes it doesn't actually | ||||
| # have to be rebuilt.  In that case, make will forever see the dependency as | ||||
| # newer than the binary, and try to rebuild it over and over.  So we touch it, | ||||
| # and make is happy. | ||||
| $(CONVERSION_GEN): | ||||
| 	hack/make-rules/build.sh cmd/libs/go2idl/conversion-gen | ||||
| 	touch $@ | ||||
							
								
								
									
										91
									
								
								build/root/WORKSPACE
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										91
									
								
								build/root/WORKSPACE
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,91 @@ | ||||
| http_archive( | ||||
|     name = "io_bazel_rules_go", | ||||
|     sha256 = "a1cae429e9d591017421150e3173478c46c693bc594322c7fa7e6cb5f672ef59", | ||||
|     strip_prefix = "rules_go-805fd1566500997379806373feb05e138a4dfe28", | ||||
|     urls = ["https://github.com/bazelbuild/rules_go/archive/805fd1566500997379806373feb05e138a4dfe28.tar.gz"], | ||||
| ) | ||||
|  | ||||
| http_archive( | ||||
|     name = "io_kubernetes_build", | ||||
|     sha256 = "8d1cff71523565996903076cec6cad8424afa6eb93a342d0d810a55c911e23c7", | ||||
|     strip_prefix = "repo-infra-61b7247ebf472398bdea148d8f67e3a1849d6de9", | ||||
|     urls = ["https://github.com/kubernetes/repo-infra/archive/61b7247ebf472398bdea148d8f67e3a1849d6de9.tar.gz"], | ||||
| ) | ||||
|  | ||||
| # This contains a patch to not prepend ./ to tarfiles produced by pkg_tar. | ||||
| # When merged upstream, we'll no longer need to use ixdy's fork: | ||||
| # https://bazel-review.googlesource.com/#/c/10390/ | ||||
| http_archive( | ||||
|     name = "io_bazel", | ||||
|     sha256 = "667d32da016b1e2f63cf345cd3583989ec4a165034df383a01996d93635753a0", | ||||
|     strip_prefix = "bazel-df2c687c22bdd7c76f3cdcc85f38fefd02f0b844", | ||||
|     urls = ["https://github.com/ixdy/bazel/archive/df2c687c22bdd7c76f3cdcc85f38fefd02f0b844.tar.gz"], | ||||
| ) | ||||
|  | ||||
| http_archive( | ||||
|     name = "io_bazel_rules_docker", | ||||
|     sha256 = "261fbd8fda1d06a12a0479019b46acd302c6aaa8df8e49383dc37917f20492a1", | ||||
|     strip_prefix = "rules_docker-52d9faf209ff6d16eb850b6b66d03483735e0633", | ||||
|     urls = ["https://github.com/bazelbuild/rules_docker/archive/52d9faf209ff6d16eb850b6b66d03483735e0633.tar.gz"], | ||||
| ) | ||||
|  | ||||
| load("@io_bazel_rules_go//go:def.bzl", "go_repositories") | ||||
| load("@io_bazel_rules_docker//docker:docker.bzl", "docker_repositories") | ||||
|  | ||||
| go_repositories( | ||||
|     go_version = "1.8.1", | ||||
| ) | ||||
|  | ||||
| docker_repositories() | ||||
|  | ||||
| # for building docker base images | ||||
| debs = ( | ||||
|     ( | ||||
|         "busybox_deb", | ||||
|         "5f81f140777454e71b9e5bfdce9c89993de5ddf4a7295ea1cfda364f8f630947", | ||||
|         "http://ftp.us.debian.org/debian/pool/main/b/busybox/busybox-static_1.22.0-19+b3_amd64.deb", | ||||
|         "https://storage.googleapis.com/kubernetes-release/debs/busybox-static_1.22.0-19+b3_amd64.deb", | ||||
|     ), | ||||
|     ( | ||||
|         "libc_deb", | ||||
|         "372aac4a9ce9dbb26a08de0b9c41b0500ba019430295d29f39566483f5f32732", | ||||
|         "http://ftp.us.debian.org/debian/pool/main/g/glibc/libc6_2.24-10_amd64.deb", | ||||
|         "https://storage.googleapis.com/kubernetes-release/debs/libc6_2.24-10_amd64.deb", | ||||
|     ), | ||||
|     ( | ||||
|         "iptables_deb", | ||||
|         "7747388a97ba71fede302d70361c81d486770a2024185514c18b5d8eab6aaf4e", | ||||
|         "http://ftp.us.debian.org/debian/pool/main/i/iptables/iptables_1.4.21-2+b1_amd64.deb", | ||||
|         "https://storage.googleapis.com/kubernetes-release/debs/iptables_1.4.21-2+b1_amd64.deb", | ||||
|     ), | ||||
|     ( | ||||
|         "libnetlink_deb", | ||||
|         "5d486022cd9e047e9afbb1617cf4519c0decfc3d2c1fad7e7fe5604943dbbf37", | ||||
|         "http://ftp.us.debian.org/debian/pool/main/libn/libnfnetlink/libnfnetlink0_1.0.1-3_amd64.deb", | ||||
|         "https://storage.googleapis.com/kubernetes-release/debs/libnfnetlink0_1.0.1-3_amd64.deb", | ||||
|     ), | ||||
|     ( | ||||
|         "libxtables_deb", | ||||
|         "6783f316af4cbf3ada8b9a2b7bb5f53a87c0c2575c1903ce371fdbd45d3626c6", | ||||
|         "http://ftp.us.debian.org/debian/pool/main/i/iptables/libxtables10_1.4.21-2+b1_amd64.deb", | ||||
|         "https://storage.googleapis.com/kubernetes-release/debs/libxtables10_1.4.21-2+b1_amd64.deb", | ||||
|     ), | ||||
|     ( | ||||
|         "iproute2_deb", | ||||
|         "3ce9cb1d03a2a1359cbdd4f863b15d0c906096bf713e8eb688149da2f4e350bc", | ||||
|         "http://ftp.us.debian.org/debian/pool/main/i/iproute2/iproute_3.16.0-2_all.deb", | ||||
|         "https://storage.googleapis.com/kubernetes-release/debs/iproute_3.16.0-2_all.deb", | ||||
|     ), | ||||
| ) | ||||
|  | ||||
| [http_file( | ||||
|     name = name, | ||||
|     sha256 = sha256, | ||||
|     url = url, | ||||
| ) for name, sha256, origin, url in debs] | ||||
|  | ||||
| http_file( | ||||
|     name = "kubernetes_cni", | ||||
|     sha256 = "05ab3937bc68562e989dc143362ec4d4275262ba9f359338aed720fc914457a5", | ||||
|     url = "https://storage.googleapis.com/kubernetes-release/network-plugins/cni-amd64-0799f5732f2a11b329d9e3d51b9c8f2e3759f2ff.tar.gz", | ||||
| ) | ||||
		Reference in New Issue
	
	Block a user
	 Mike Danese
					Mike Danese