master
sh 101 lines 3.44 KB
Raw
1 #!/bin/bash
2
3 # SPDX-License-Identifier: GPL-3.0-or-later
4
5 # shellcheck source=./packaging/installer/functions.sh
6 . "$(dirname "$0")"/../installer/functions.sh || exit 1
7
8 BUILDARCH="${1}"
9
10 set -e
11
12 platform="$("$(dirname "${0}")/uname2platform.sh" "${BUILDARCH}")"
13
14 if [ -z "${platform}" ]; then
15 exit 1
16 fi
17
18 if command -v docker > /dev/null 2>&1; then
19 docker="docker"
20 elif command -v podman > /dev/null 2>&1; then
21 docker="podman"
22 else
23 echo "Could not find a usable OCI runtime, need either Docker or Podman."
24 exit 1
25 fi
26
27 case "${BUILDARCH}" in
28 x86_64) # x86-64-v2 equivalent
29 QEMU_ARCH="x86_64"
30 QEMU_CPU="Nehalem-v2"
31 TUNING_FLAGS="-march=x86-64"
32 GOAMD64="v1"
33 GOARCH="amd64"
34 ;;
35 armv6l) # Raspberry Pi 1 equivalent
36 QEMU_ARCH="arm"
37 QEMU_CPU="arm1176"
38 TUNING_FLAGS="-march=armv6zk -mtune=arm1176jzf-s"
39 GOARM="6"
40 GOARCH="arm"
41 ;;
42 armv7l) # Baseline ARMv7 CPU
43 QEMU_ARCH="arm"
44 QEMU_CPU="cortex-a7"
45 TUNING_FLAGS="-march=armv7-a"
46 GOARM="7"
47 GOARCH="arm"
48 ;;
49 aarch64) # Baseline ARMv8 CPU
50 QEMU_ARCH="aarch64"
51 QEMU_CPU="cortex-a53"
52 TUNING_FLAGS="-march=armv8-a"
53 GOARM64="v8.0"
54 GOARCH="arm64"
55 ;;
56 esac
57
58 [ -f "/proc/sys/fs/binfmt_misc/qemu-${QEMU_ARCH}" ] && SKIP_EMULATION=1
59
60 if [ "${BUILDARCH}" != "$(uname -m)" ] && [ -z "${SKIP_EMULATION}" ]; then
61 ${docker} run --rm --privileged tonistiigi/binfmt:master --install "${QEMU_ARCH}" || exit 1
62 fi
63
64 DOCKER_IMAGE_NAME="netdata/static-builder:v1"
65
66 if ${docker} inspect "${DOCKER_IMAGE_NAME}" > /dev/null 2>&1; then
67 if ${docker} image inspect "${DOCKER_IMAGE_NAME}" | grep -q 'Variant'; then
68 img_platform="$(${docker} image inspect "${DOCKER_IMAGE_NAME}" --format '{{.Os}}/{{.Architecture}}/{{.Variant}}')"
69 else
70 img_platform="$(${docker} image inspect "${DOCKER_IMAGE_NAME}" --format '{{.Os}}/{{.Architecture}}')"
71 fi
72
73 if [ "${img_platform}" != "${platform}" ]; then
74 ${docker} image rm "${DOCKER_IMAGE_NAME}" || exit 1
75 fi
76 fi
77
78 if ! ${docker} inspect "${DOCKER_IMAGE_NAME}" > /dev/null 2>&1; then
79 ${docker} pull --platform "${platform}" "${DOCKER_IMAGE_NAME}"
80 fi
81
82 # Run the build script inside the container
83 if [ -t 1 ]; then
84 run ${docker} run --rm -e BUILDARCH="${BUILDARCH}" -a stdin -a stdout -a stderr -i -t -v "$(pwd)":/netdata:rw \
85 --platform "${platform}" ${EXTRA_INSTALL_FLAGS:+-e EXTRA_INSTALL_FLAGS="${EXTRA_INSTALL_FLAGS}"} \
86 ${DEBUG_BUILD_INFRA:+-e DEBUG_BUILD_INFRA=1} \
87 ${QEMU_CPU:+-e QEMU_CPU="${QEMU_CPU}"} \
88 -e TUNING_FLAGS="${TUNING_FLAGS}" ${GOARCH:+-e GOARCH="${GOARCH}"} \
89 ${GOAMD64:+-e GOAMD64="${GOAMD64}"} ${GOARM:+-e GOARM="${GOARM}"} \
90 ${GOARM64:+-e GOARM64="${GOARM64}"} ${GOPPC64:+-e GOPPC64="${GOPPC64}"} \
91 "${DOCKER_IMAGE_NAME}" /bin/sh /netdata/packaging/makeself/build.sh "${@}"
92 else
93 run ${docker} run --rm -e BUILDARCH="${BUILDARCH}" -v "$(pwd)":/netdata:rw \
94 -e GITHUB_ACTIONS="${GITHUB_ACTIONS}" --platform "${platform}" \
95 ${EXTRA_INSTALL_FLAGS:+-e EXTRA_INSTALL_FLAGS="${EXTRA_INSTALL_FLAGS}"} \
96 ${QEMU_CPU:+-e QEMU_CPU="${QEMU_CPU}"} \
97 -e TUNING_FLAGS="${TUNING_FLAGS}" ${GOARCH:+-e GOARCH="${GOARCH}"} \
98 ${GOAMD64:+-e GOAMD64="${GOAMD64}"} ${GOARM:+-e GOARM="${GOARM}"} \
99 ${GOARM64:+-e GOARM64="${GOARM64}"} ${GOPPC64:+-e GOPPC64="${GOPPC64}"} \
100 "${DOCKER_IMAGE_NAME}" /bin/sh /netdata/packaging/makeself/build.sh "${@}"
101 fi