summaryrefslogtreecommitdiff
path: root/hack/lib/golang.sh
diff options
context:
space:
mode:
authorzhangjie <iamkadisi@163.com>2020-02-05 19:41:18 +0800
committerzhangjie <iamkadisi@163.com>2020-02-18 16:12:25 +0800
commitcb3e3dc36f658d1df9d3bd798cef648c26b454cb (patch)
tree8287b844c8d3e410f31ef6ed557c9df0ecf0c24d /hack/lib/golang.sh
parentsupport integrationtest (diff)
downloadkubeedge-cb3e3dc36f658d1df9d3bd798cef648c26b454cb.tar.gz
support make crossbuild
Signed-off-by: zhangjie <iamkadisi@163.com>
Diffstat (limited to 'hack/lib/golang.sh')
-rw-r--r--hack/lib/golang.sh95
1 files changed, 91 insertions, 4 deletions
diff --git a/hack/lib/golang.sh b/hack/lib/golang.sh
index c90a00b33..a1aa13030 100644
--- a/hack/lib/golang.sh
+++ b/hack/lib/golang.sh
@@ -19,11 +19,14 @@
# KubeEdge Authors:
# To Get Detail Version Info for KubeEdge Project
+#set -x
set -o errexit
set -o nounset
set -o pipefail
readonly KUBEEDGE_GO_PACKAGE="github.com/kubeedge/kubeedge"
+YES="y"
+NO="n"
kubeedge::version::get_version_info() {
@@ -129,7 +132,7 @@ kubeedge::golang::binaries_from_targets() {
}
kubeedge::check::env() {
- local -a errors
+ errors=()
if [ -z $GOPATH ]; then
errors+="GOPATH environment value not set"
@@ -147,7 +150,6 @@ kubeedge::check::env() {
fi
}
-
ALL_BINARIES_AND_TARGETS=(
cloudcore:cloud/cmd/cloudcore
admission:cloud/cmd/admission
@@ -185,12 +187,10 @@ kubeedge::golang::get_all_binares() {
echo ${binares[@]}
}
-
IFS=" " read -ra KUBEEDGE_ALL_TARGETS <<< "$(kubeedge::golang::get_all_targets)"
IFS=" " read -ra KUBEEDGE_ALL_BINARIES<<< "$(kubeedge::golang::get_all_binares)"
kubeedge::golang::build_binaries() {
- echo "building binares $@"
kubeedge::check::env
local -a targets=()
@@ -210,11 +210,98 @@ kubeedge::golang::build_binaries() {
read -r ldflags <<< "$(kubeedge::version::ldflags)"
for bin in ${binaries[@]}; do
+ echo "buildding $bin"
go install -ldflags "$ldflags" $bin
done
}
+KUBEEDGE_ALL_CROSS_BINARIES=(
+edgecore
+edgesite
+)
+
+kubeedge::golang::is_cross_build_binary() {
+ local key=$1
+ for bin in "${KUBEEDGE_ALL_CROSS_BINARIES[@]}" ; do
+ if [ "${bin}" == "${key}" ]; then
+ echo ${YES}
+ return
+ fi
+ done
+ echo ${NO}
+}
+
+KUBEEDGE_ALL_CROSS_GOARMS=(
+8
+7
+)
+
+kubeedge::golang::is_supported_goarm() {
+ local key=$1
+ for value in ${KUBEEDGE_ALL_CROSS_GOARMS[@]} ; do
+ if [ "${value}" == "${key}" ]; then
+ echo ${YES}
+ return
+ fi
+ done
+ echo ${NO}
+}
+
+kubeedge::golang::cross_build_place_binaries() {
+ kubeedge::check::env
+
+ local -a targets=()
+ local -a binariesArray=()
+ local goarm=${goarm:-${KUBEEDGE_ALL_CROSS_GOARMS[0]}}
+
+ for arg in "$@"; do
+ if [[ "${arg}" == GOARM* ]]; then
+ # Assume arguments starting with a dash are flags to pass to go.
+ goarm="${arg##*GOARM}"
+ else
+ if [ "$(kubeedge::golang::is_cross_build_binary ${arg})" == "${NO}" ]; then
+ echo "${arg} does not support cross build"
+ exit 1
+ fi
+ targets+=("$(kubeedge::golang::get_target_by_binary $arg)")
+ binariesArray+=("$arg")
+ fi
+ done
+
+ if [[ ${#targets[@]} -eq 0 ]]; then
+ for bin in ${KUBEEDGE_ALL_CROSS_BINARIES[@]}; do
+ targets+=("$(kubeedge::golang::get_target_by_binary $bin)")
+ binariesArray+=("$bin")
+ done
+ fi
+
+ if [ "$(kubeedge::golang::is_supported_goarm ${goarm})" == "${NO}" ]; then
+ echo "GOARM${goarm} does not support cross build"
+ exit 1
+ fi
+
+ local -a binaries
+ while IFS="" read -r binary; do binaries+=("$binary"); done < <(kubeedge::golang::binaries_from_targets "${targets[@]}")
+
+ local ldflags
+ read -r ldflags <<< "$(kubeedge::version::ldflags)"
+
+ for bin in ${binaries[@]}; do
+ echo "cross buildding $bin"
+ if [ "${goarm}" == "8" ]; then
+ GOARCH=arm64 GOOS="linux" CGO_ENABLED=1 CC=aarch64-linux-gnu-gcc; go install -ldflags "$ldflags" $bin
+ elif [ "${goarm}" == "7" ]; then
+ GOARCH=arm GOOS="linux" GOARM=6 CGO_ENABLED=1 CC=arm-linux-gnueabi-gcc; go install -ldflags "$ldflags" $bin
+ fi
+ done
+
+ for name in ${binariesArray[@]}; do
+ mv -f "${GOPATH}/bin/${name}" ${KUBEEDGE_OUTPUT_BINPATH}
+ echo "name:"$name
+ done
+}
+
kubeedge::golang::place_bins() {
echo "Placing binaries $@"