123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549 |
- # 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 gen_bindata
- #
- # Helper logic to calculate Go's dependency DAG ourselves.
- #
- # This is a file that will be emitted by the go2make tool, containing a
- # variable for each Go package in the project (including deps) which lists all
- # of the transitive deps of that package. Each variable is named the same as
- # the package - for example the variable for `k8s.io/kubernetes/pkg/api` is
- # $(k8s.io/kubernetes/pkg/api). This is roughly the same DAG that the Go
- # compiler uses. These variables can be used to figure out if, for example,
- # generated code needs to be regenerated.
- GO_PKGDEPS_FILE = go-pkgdeps.mk
- # Include the Go package dependencies file. This will cause the rule of
- # the same name to be considered and if it is updated, make will restart and
- # reload the updated deps.
- sinclude $(META_DIR)/$(GO_PKGDEPS_FILE)
- # Update the set of Go deps for our project. This will let us determine if
- # we really need to do expensive codegen. We use FORCE because it is not a
- # PHONY file, but we do want it to be re-evaluated every time make is run. The
- # file will only be touched if it actually changes.
- $(META_DIR)/$(GO_PKGDEPS_FILE): FORCE
- if [[ "$(DBG_CODEGEN)" == 1 ]]; then \
- echo "DBG: calculating Go dependencies"; \
- fi
- hack/run-in-gopath.sh go install ./hack/make-rules/helpers/go2make
- hack/run-in-gopath.sh go2make \
- k8s.io/kubernetes/... \
- --prune k8s.io/kubernetes/staging \
- --prune k8s.io/kubernetes/vendor \
- k8s.io/kubernetes/vendor/k8s.io/... \
- github.com/go-bindata/go-bindata/go-bindata/... \
- > $@.tmp
- if ! cmp -s $@.tmp $@; then \
- if [[ "$(DBG_CODEGEN)" == 1 ]]; then \
- echo "DBG: $(GO_PKGDEPS_FILE) changed"; \
- fi; \
- cat $@.tmp > $@; \
- fi
- rm -f $@.tmp
- .PHONY: FORCE
- FORCE:
- #
- # Helper logic to find which directories need codegen as quickly as possible.
- #
- # 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 \
- )
- # 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:' \
- )
- #
- # Code generation logic.
- #
- # 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))
- # Reset the list of packages that need generation.
- $(shell mkdir -p $$(dirname $(META_DIR)/$(DEEPCOPY_GEN)))
- $(shell rm -f $(META_DIR)/$(DEEPCOPY_GEN).todo)
- # 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_GEN) $(META_DIR)/$(DEEPCOPY_GEN).todo
- if [[ -s $(META_DIR)/$(DEEPCOPY_GEN).todo ]]; then \
- pkgs=$$(cat $(META_DIR)/$(DEEPCOPY_GEN).todo | paste -sd, -); \
- if [[ "$(DBG_CODEGEN)" == 1 ]]; then \
- echo "DBG: running $(DEEPCOPY_GEN) for $$pkgs"; \
- fi; \
- ./hack/run-in-gopath.sh $(DEEPCOPY_GEN) \
- --v $(KUBE_VERBOSE) \
- --logtostderr \
- -i "$$pkgs" \
- --bounding-dirs $(PRJ_SRC_PATH),"k8s.io/api" \
- -O $(DEEPCOPY_BASENAME) \
- "$$@"; \
- fi \
- # 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.
- $(foreach dir, $(DEEPCOPY_DIRS), $(eval \
- $(dir)/$(DEEPCOPY_FILENAME): $($(PRJ_SRC_PATH)/$(dir)) \
- ))
- # 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.
- $(META_DIR)/$(DEEPCOPY_GEN).todo: $(DEEPCOPY_FILES)
- $(DEEPCOPY_FILES): $(DEEPCOPY_GEN)
- if [[ "$(DBG_CODEGEN)" == 1 ]]; then \
- echo "DBG: deepcopy needed $(@D):"; \
- ls -lf --full-time $@ $? || true; \
- fi
- echo $(PRJ_SRC_PATH)/$(@D) >> $(META_DIR)/$(DEEPCOPY_GEN).todo
- # How to build the generator tool. The deps for this are defined in
- # the $(GO_PKGDEPS_FILE), 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): $(k8s.io/kubernetes/vendor/k8s.io/code-generator/cmd/deepcopy-gen)
- KUBE_BUILD_PLATFORMS="" hack/make-rules/build.sh ./vendor/k8s.io/code-generator/cmd/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))
- # Reset the list of packages that need generation.
- $(shell mkdir -p $$(dirname $(META_DIR)/$(DEFAULTER_GEN)))
- $(shell rm -f $(META_DIR)/$(DEFAULTER_GEN).todo)
- # 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_GEN) $(META_DIR)/$(DEFAULTER_GEN).todo
- if [[ -s $(META_DIR)/$(DEFAULTER_GEN).todo ]]; then \
- pkgs=$$(cat $(META_DIR)/$(DEFAULTER_GEN).todo | paste -sd, -); \
- if [[ "$(DBG_CODEGEN)" == 1 ]]; then \
- echo "DBG: running $(DEFAULTER_GEN) for $$pkgs"; \
- fi; \
- ./hack/run-in-gopath.sh $(DEFAULTER_GEN) \
- --v $(KUBE_VERBOSE) \
- --logtostderr \
- -i "$$pkgs" \
- --extra-peer-dirs $$(echo $(addprefix $(PRJ_SRC_PATH)/, $(DEFAULTER_DIRS)) | sed 's/ /,/g') \
- -O $(DEFAULTER_BASENAME) \
- "$$@"; \
- fi
- # For each dir in DEFAULTER_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 for that).
- #
- # 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, $(DEFAULTER_DIRS), $(eval \
- $(dir)/$(DEFAULTER_FILENAME): $($(PRJ_SRC_PATH)/$(dir)) \
- ))
- # 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.
- $(META_DIR)/$(DEFAULTER_GEN).todo: $(DEFAULTER_FILES)
- $(DEFAULTER_FILES): $(DEFAULTER_GEN)
- if [[ "$(DBG_CODEGEN)" == 1 ]]; then \
- echo "DBG: defaulter needed $(@D):"; \
- ls -lf --full-time $@ $? || true; \
- fi
- echo $(PRJ_SRC_PATH)/$(@D) >> $(META_DIR)/$(DEFAULTER_GEN).todo
- # How to build the generator tool. The deps for this are defined in
- # the $(GO_PKGDEPS_FILE), 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): $(k8s.io/kubernetes/vendor/k8s.io/code-generator/cmd/defaulter-gen)
- KUBE_BUILD_PLATFORMS="" hack/make-rules/build.sh ./vendor/k8s.io/code-generator/cmd/defaulter-gen
- touch $@
- # Conversion generation
- # Any package that wants conversion functions generated into it must
- # include one or more comment-tags in its `doc.go` file, of the form:
- # // +k8s:conversion-gen=<INTERNAL_TYPES_DIR>
- #
- # The INTERNAL_TYPES_DIR is a project-local path to another directory
- # which should be considered when evaluating peer types for
- # conversions. An optional additional comment of the form
- # // +k8s:conversion-gen-external-types=<EXTERNAL_TYPES_DIR>
- #
- # identifies where to find the external types; if there is no such
- # comment then the external types are sought in the package where the
- # `k8s:conversion` tag is found.
- #
- # Conversions, in both directions, are generated for every type name
- # that is defined in both an internal types package and the external
- # types package.
- #
- # 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))
- CONVERSION_EXTRA_PEER_DIRS := k8s.io/kubernetes/pkg/apis/core,k8s.io/kubernetes/pkg/apis/core/v1,k8s.io/api/core/v1
- # Reset the list of packages that need generation.
- $(shell mkdir -p $$(dirname $(META_DIR)/$(CONVERSION_GEN)))
- $(shell rm -f $(META_DIR)/$(CONVERSION_GEN).todo)
- # 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_GEN) $(META_DIR)/$(CONVERSION_GEN).todo
- if [[ -s $(META_DIR)/$(CONVERSION_GEN).todo ]]; then \
- pkgs=$$(cat $(META_DIR)/$(CONVERSION_GEN).todo | paste -sd, -); \
- if [[ "$(DBG_CODEGEN)" == 1 ]]; then \
- echo "DBG: running $(CONVERSION_GEN) for $$pkgs"; \
- fi; \
- ./hack/run-in-gopath.sh $(CONVERSION_GEN) \
- --extra-peer-dirs $(CONVERSION_EXTRA_PEER_DIRS) \
- --v $(KUBE_VERBOSE) \
- --logtostderr \
- -i "$$pkgs" \
- -O $(CONVERSION_BASENAME) \
- "$$@"; \
- fi
- # For each dir in CONVERSION_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 for that).
- #
- # 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 \
- $(dir)/$(CONVERSION_FILENAME): $($(PRJ_SRC_PATH)/$(dir)) \
- ))
- # 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.
- $(META_DIR)/$(CONVERSION_GEN).todo: $(CONVERSION_FILES)
- $(CONVERSION_FILES): $(CONVERSION_GEN)
- if [[ "$(DBG_CODEGEN)" == 1 ]]; then \
- echo "DBG: conversion needed $(@D):"; \
- ls -lf --full-time $@ $? || true; \
- fi
- echo $(PRJ_SRC_PATH)/$(@D) >> $(META_DIR)/$(CONVERSION_GEN).todo
- # How to build the generator tool. The deps for this are defined in
- # the $(GO_PKGDEPS_FILE), 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): $(k8s.io/kubernetes/vendor/k8s.io/code-generator/cmd/conversion-gen)
- KUBE_BUILD_PLATFORMS="" hack/make-rules/build.sh ./vendor/k8s.io/code-generator/cmd/conversion-gen
- touch $@
- # OpenAPI 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
- BOILERPLATE_FILENAME := vendor/k8s.io/code-generator/hack/boilerplate.go.txt
- IGNORED_REPORT_FILENAME := $(OUT_DIR)/ignored_violations.report
- API_RULE_CHECK_FAILURE_MESSAGE = "ERROR: \n\t $(1) API rule check failed. Reported violations differ from known violations. Please read api/api-rules/README.md to resolve the failure in $(2). \n"
- # The tool used to generate open apis.
- OPENAPI_GEN := $(BIN_DIR)/openapi-gen
- KUBE_KNOWN_VIOLATION_FILENAME := api/api-rules/violation_exceptions.list
- APIEXTENSIONS_KNOWN_VIOLATION_FILENAME := api/api-rules/apiextensions_violation_exceptions.list
- CODEGEN_KNOWN_VIOLATION_FILENAME := api/api-rules/codegen_violation_exceptions.list
- SAMPLEAPISERVER_KNOWN_VIOLATION_FILENAME := api/api-rules/sample_apiserver_violation_exceptions.list
- APIMACHINERY_DEFAULT_TAG_FILES := vendor/k8s.io/apimachinery/pkg/apis/meta/v1/% vendor/k8s.io/apimachinery/pkg/runtime/% vendor/k8s.io/apimachinery/pkg/version/%
- KUBE_OPENAPI_TAG_FILES := $(filter-out vendor/k8s.io/code-generator/% vendor/k8s.io/sample-apiserver/%, $(ALL_K8S_TAG_FILES))
- APIEXTENSIONS_OPENAPI_TAG_FILES := $(filter $(APIMACHINERY_DEFAULT_TAG_FILES) vendor/k8s.io/apiextensions/% vendor/k8s.io/api/autoscaling/v1/%, $(ALL_K8S_TAG_FILES))
- CODEGEN_OPENAPI_TAG_FILES := $(filter $(APIMACHINERY_DEFAULT_TAG_FILES) vendor/k8s.io/code-generator/%, $(ALL_K8S_TAG_FILES))
- SAMPLEAPISERVER_OPENAPI_TAG_FILES := $(filter $(APIMACHINERY_DEFAULT_TAG_FILES) vendor/k8s.io/sample-apiserver/%, $(ALL_K8S_TAG_FILES))
- KUBE_OPENAPI_OUTPUT_PKG := pkg/generated/openapi
- APIEXTENSIONS_OPENAPI_OUTPUT_PKG := staging/src/k8s.io/apiextensions-apiserver/pkg/generated/openapi
- CODEGEN_OPENAPI_OUTPUT_PKG := staging/src/k8s.io/code-generator/_examples/apiserver/openapi
- SAMPLEAPISERVER_OPENAPI_OUTPUT_PKG := staging/src/k8s.io/sample-apiserver/pkg/generated/openapi
- OPENAPI_TARGETS := KUBE APIEXTENSIONS CODEGEN SAMPLEAPISERVER
- # Find all the directories that request openapi generation.
- define OPENAPI_DIR_DEF
- ifeq ($$(DBG_MAKEFILE),1)
- $$(warning ***** finding all +k8s:openapi-gen tags for $(prefix))
- endif
- $(prefix)_OPENAPI_DIRS := $(shell \
- grep --color=never -l '+k8s:openapi-gen=' $($(prefix)_OPENAPI_TAG_FILES) \
- | xargs -n1 dirname \
- | LC_ALL=C sort -u \
- )
- endef
- $(foreach prefix, $(OPENAPI_TARGETS), $(eval $(OPENAPI_DIR_DEF)))
- # Compute all openapi output file names
- $(foreach prefix, $(OPENAPI_TARGETS), $(eval \
- $(prefix)_OPENAPI_OUTFILE := $($(prefix)_OPENAPI_OUTPUT_PKG)/$(OPENAPI_FILENAME) \
- ))
- # For each openapi target compute the spec
- define OPENAPI_TARGETS_DEF
- # For each dir in $(prefix)_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 for that).
- #
- # 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, $($(prefix)_OPENAPI_DIRS), $(eval \
- $($(prefix)_OPENAPI_OUTFILE): $($(PRJ_SRC_PATH)/$(dir)) \
- ))
- # Rebuild spec if the violation file changed.
- $($(prefix)_OPENAPI_OUTFILE): $($(prefix)_KNOWN_VIOLATION_FILENAME)
- # When UPDATE_API_KNOWN_VIOLATIONS is set to be true, let the generator to write
- # updated API violations to the known API violation exceptions list.
- ifeq ($(UPDATE_API_KNOWN_VIOLATIONS),true)
- $(prefix)_REPORT_FILENAME := $($(prefix)_KNOWN_VIOLATION_FILENAME)
- # When UPDATE_API_KNOWN_VIOLATIONS is set to be true, touch the exceptions
- # list so that the $(prefix)_OPENAPI_OUTFILE target re-run instead of being cached.
- $$(shell touch $($(prefix)_KNOWN_VIOLATION_FILENAME))
- else
- $(prefix)_REPORT_FILENAME := $(OUT_DIR)/$(prefix)_violations.report
- endif
- # How to regenerate open-api code. This emits a single file for all results.
- # The Make rule fails if generated API rule violation report differs from the
- # checked-in violation file, and prints error message to request developer to
- # fix either the API source code, or the known API rule violation file.
- $$($(prefix)_OPENAPI_OUTFILE): $(OPENAPI_GEN) $($(prefix)_KNOWN_VIOLATION_FILENAME:-)
- ./hack/run-in-gopath.sh $(OPENAPI_GEN) \
- --v $(KUBE_VERBOSE) \
- --logtostderr \
- -i $$$$(echo $(addprefix $(PRJ_SRC_PATH)/, $($(prefix)_OPENAPI_DIRS)) | sed 's/ /,/g') \
- -p $(PRJ_SRC_PATH)/$($(prefix)_OPENAPI_OUTPUT_PKG) \
- -O $(OPENAPI_BASENAME) \
- -h $(BOILERPLATE_FILENAME) \
- -r $$($(prefix)_REPORT_FILENAME) \
- "$$$$@"
- test -f $($(prefix)_KNOWN_VIOLATION_FILENAME) || touch $($(prefix)_KNOWN_VIOLATION_FILENAME)
- diff $$($(prefix)_REPORT_FILENAME) $($(prefix)_KNOWN_VIOLATION_FILENAME) || \
- (echo -e $(call API_RULE_CHECK_FAILURE_MESSAGE,$(prefix),$($(prefix)_KNOWN_VIOLATION_FILENAME)); exit 1)
- endef
- $(foreach prefix, $(OPENAPI_TARGETS), $(eval $(OPENAPI_TARGETS_DEF)))
- # This rule is the user-friendly entrypoint for openapi generation.
- .PHONY: gen_openapi
- gen_openapi: $(OPENAPI_GEN) $(KUBE_OPENAPI_OUTFILE) $(APIEXTENSIONS_OPENAPI_OUTFILE) $(CODEGEN_OPENAPI_OUTFILE) $(SAMPLEAPISERVER_OPENAPI_OUTFILE)
- # How to build the generator tool. The deps for this are defined in
- # the $(GO_PKGDEPS_FILE), 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): $(k8s.io/kubernetes/vendor/k8s.io/kube-openapi/cmd/openapi-gen)
- KUBE_BUILD_PLATFORMS="" hack/make-rules/build.sh ./vendor/k8s.io/kube-openapi/cmd/openapi-gen
- touch $@
- # bindata generation
- #
- # The tool used to generate bindata files.
- BINDATA_GEN := $(BIN_DIR)/go-bindata
- # A wrapper script that generates all bindata files. It is fast enough that we
- # don't care.
- BINDATA_SCRIPT := hack/generate-bindata.sh
- # This rule is the user-friendly entrypoint for bindata generation.
- .PHONY: gen_bindata
- gen_bindata: $(BINDATA_GEN) FORCE
- ./hack/run-in-gopath.sh $(BINDATA_SCRIPT)
- # How to build the generator tool. The deps for this are defined in
- # the $(BINDATA_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.
- $(BINDATA_GEN): $(k8s.io/kubernetes/vendor/github.com/go-bindata/go-bindata/go-bindata)
- KUBE_BUILD_PLATFORMS="" hack/make-rules/build.sh ./vendor/github.com/go-bindata/go-bindata/go-bindata
- touch $@
|