mirror of
				https://github.com/optim-enterprises-bv/kubernetes.git
				synced 2025-10-30 17:58:14 +00:00 
			
		
		
		
	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