diff --git a/Makefile b/Makefile index f6f0b52e1fa..2fb175a5e5a 100644 --- a/Makefile +++ b/Makefile @@ -206,6 +206,14 @@ release-skip-tests quick-release: gen_deepcopy gen_conversion @KUBE_RELEASE_RUN_TESTS=n KUBE_FASTBUILD=true build/release.sh .PHONY: release-skip-tests quick-release +# Cross-compile for all platforms +# +# Example: +# make cross +.PHONY: cross +cross: + @hack/make-rules/cross.sh + # # Code-generation logic. # diff --git a/build/README.md b/build/README.md index 2c9a964295c..951ea14559f 100644 --- a/build/README.md +++ b/build/README.md @@ -25,7 +25,7 @@ The following scripts are found in the `build/` directory: * `run.sh`: Run a command in a build docker container. Common invocations: * `run.sh make`: Build just linux binaries in the container. Pass options and packages as necessary. - * `run.sh hack/build-cross.sh`: Build all binaries for all platforms + * `run.sh make cross`: Build all binaries for all platforms * `run.sh make test`: Run all unit tests * `run.sh make test-integration`: Run integration test * `run.sh make test-cmd`: Run CLI tests diff --git a/build/release.sh b/build/release.sh index 14856298698..ac9d2c3d1d4 100755 --- a/build/release.sh +++ b/build/release.sh @@ -30,7 +30,7 @@ KUBE_RELEASE_RUN_TESTS=${KUBE_RELEASE_RUN_TESTS-y} kube::build::verify_prereqs kube::build::build_image -kube::build::run_build_command hack/build-cross.sh +kube::build::run_build_command make cross if [[ $KUBE_RELEASE_RUN_TESTS =~ ^[yY]$ ]]; then kube::build::run_build_command make test diff --git a/cluster/images/hyperkube/README.md b/cluster/images/hyperkube/README.md index 52a39b2e852..9e0ae41397e 100644 --- a/cluster/images/hyperkube/README.md +++ b/cluster/images/hyperkube/README.md @@ -10,7 +10,7 @@ See http://kubernetes.io/docs/getting-started-guides/docker/ for up-to-date comm ```console # First, build the binaries -$ build/run.sh hack/build-cross.sh +$ build/run.sh make cross # Build for linux/amd64 (default) $ make push VERSION={target_version} ARCH=amd64 diff --git a/cluster/kubectl.sh b/cluster/kubectl.sh index 8280badff8a..7c37f28f835 100755 --- a/cluster/kubectl.sh +++ b/cluster/kubectl.sh @@ -97,7 +97,7 @@ if [[ -z "${KUBECTL_PATH:-}" ]]; then echo "It looks as if you don't have a compiled kubectl binary" echo echo "If you are running from a clone of the git repo, please run" - echo "'./build/run.sh hack/build-cross.sh'. Note that this requires having" + echo "'./build/run.sh make cross'. Note that this requires having" echo "Docker installed." echo echo "If you are running from a binary release tarball, something is wrong. " diff --git a/docs/devel/development.md b/docs/devel/development.md index 4c00072e57b..571028c2fa9 100644 --- a/docs/devel/development.md +++ b/docs/devel/development.md @@ -79,7 +79,7 @@ You may pass build options and packages to the script as necessary. To build binaries for all platforms: ```sh - hack/build-cross.sh + make cross ``` ## Workflow diff --git a/hack/build-cross.sh b/hack/build-cross.sh index 30cc0faee38..d4cc70b303d 100755 --- a/hack/build-cross.sh +++ b/hack/build-cross.sh @@ -14,23 +14,18 @@ # See the License for the specific language governing permissions and # limitations under the License. -# This script sets up a go workspace locally and builds all for all appropriate -# platforms. +# This script is a vestigial redirection. Please do not add "real" logic. set -o errexit set -o nounset set -o pipefail KUBE_ROOT=$(dirname "${BASH_SOURCE}")/.. -source "${KUBE_ROOT}/hack/lib/init.sh" -KUBE_BUILD_PLATFORMS=("${KUBE_SERVER_PLATFORMS[@]}") -kube::golang::build_binaries "${KUBE_SERVER_TARGETS[@]}" - -KUBE_BUILD_PLATFORMS=("${KUBE_CLIENT_PLATFORMS[@]}") -kube::golang::build_binaries "${KUBE_CLIENT_TARGETS[@]}" - -KUBE_BUILD_PLATFORMS=("${KUBE_TEST_PLATFORMS[@]}") -kube::golang::build_binaries "${KUBE_TEST_TARGETS[@]}" - -kube::golang::place_bins +echo "NOTE: $0 has been replaced by 'make cross'" +echo +echo "The equivalent of this invocation is: " +echo " make cross" +echo +echo +make --no-print-directory -C "${KUBE_ROOT}" cross diff --git a/hack/lib/golang.sh b/hack/lib/golang.sh index e08b895d87a..4f01d81d1fc 100755 --- a/hack/lib/golang.sh +++ b/hack/lib/golang.sh @@ -617,7 +617,7 @@ kube::golang::build_binaries() { targets=("${KUBE_ALL_TARGETS[@]}") fi - local -a platforms=("${KUBE_BUILD_PLATFORMS[@]:+${KUBE_BUILD_PLATFORMS[@]}}") + local -a platforms=(${KUBE_BUILD_PLATFORMS:-}) if [[ ${#platforms[@]} -eq 0 ]]; then platforms=("${host_platform}") fi diff --git a/hack/make-rules/cross.sh b/hack/make-rules/cross.sh new file mode 100755 index 00000000000..46bb4cf0217 --- /dev/null +++ b/hack/make-rules/cross.sh @@ -0,0 +1,34 @@ +#!/bin/bash + +# Copyright 2014 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. + +# This script sets up a go workspace locally and builds all for all appropriate +# platforms. + +set -o errexit +set -o nounset +set -o pipefail + +KUBE_ROOT=$(dirname "${BASH_SOURCE}")/../.. +source "${KUBE_ROOT}/hack/lib/init.sh" + +# NOTE: Using "${array[*]}" here is correct. [@] becomes distinct words (in +# bash parlance). + +make all WHAT="${KUBE_SERVER_TARGETS[*]}" KUBE_BUILD_PLATFORMS="${KUBE_SERVER_PLATFORMS[*]}" + +make all WHAT="${KUBE_CLIENT_TARGETS[*]}" KUBE_BUILD_PLATFORMS="${KUBE_CLIENT_PLATFORMS[*]}" + +make all WHAT="${KUBE_TEST_TARGETS[*]}" KUBE_BUILD_PLATFORMS="${KUBE_TEST_PLATFORMS[*]}"