mirror of
https://github.com/netdata/netdata.git
synced 2025-04-14 01:29:11 +00:00

* Switch to tonistiigi/binfmt for cross-build emulation. It’s actually being actively updated, and it also supports hosts other than x86-64. * Auto-detect existing QEMU user emulation in static build. Instead of relying on the user to explicitly ask for no emulation.
102 lines
3.4 KiB
Bash
Executable file
102 lines
3.4 KiB
Bash
Executable file
#!/bin/bash
|
|
|
|
# SPDX-License-Identifier: GPL-3.0-or-later
|
|
|
|
# shellcheck source=./packaging/installer/functions.sh
|
|
. "$(dirname "$0")"/../installer/functions.sh || exit 1
|
|
|
|
BUILDARCH="${1}"
|
|
|
|
set -e
|
|
|
|
platform="$("$(dirname "${0}")/uname2platform.sh" "${BUILDARCH}")"
|
|
|
|
if [ -z "${platform}" ]; then
|
|
exit 1
|
|
fi
|
|
|
|
if command -v docker > /dev/null 2>&1; then
|
|
docker="docker"
|
|
elif command -v podman > /dev/null 2>&1; then
|
|
docker="podman"
|
|
else
|
|
echo "Could not find a usable OCI runtime, need either Docker or Podman."
|
|
exit 1
|
|
fi
|
|
|
|
case "${BUILDARCH}" in
|
|
x86_64) # x86-64-v2 equivalent
|
|
QEMU_ARCH="x86_64"
|
|
QEMU_CPU="Nehalem-v2"
|
|
TUNING_FLAGS="-march=x86-64"
|
|
GOAMD64="v1"
|
|
;;
|
|
armv6l) # Raspberry Pi 1 equivalent
|
|
QEMU_ARCH="arm"
|
|
QEMU_CPU="arm1176"
|
|
TUNING_FLAGS="-march=armv6zk -mtune=arm1176jzf-s"
|
|
GOARM="6"
|
|
;;
|
|
armv7l) # Baseline ARMv7 CPU
|
|
QEMU_ARCH="arm"
|
|
QEMU_CPU="cortex-a7"
|
|
TUNING_FLAGS="-march=armv7-a"
|
|
GOARM="7"
|
|
;;
|
|
aarch64) # Baseline ARMv8 CPU
|
|
QEMU_ARCH="aarch64"
|
|
QEMU_CPU="cortex-a53"
|
|
TUNING_FLAGS="-march=armv8-a"
|
|
GOARM64="v8.0"
|
|
;;
|
|
ppc64le) # Baseline POWER8+ CPU
|
|
QEMU_ARCH="ppc64le"
|
|
QEMU_CPU="power8nvl"
|
|
TUNING_FLAGS="-mcpu=power8 -mtune=power9"
|
|
GOPPC64="power8"
|
|
;;
|
|
esac
|
|
|
|
[ -f "/proc/sys/fs/binfmt_misc/qemu-${QEMU_ARCH}" ] && SKIP_EMULATION=1
|
|
|
|
if [ "${BUILDARCH}" != "$(uname -m)" ] && [ -z "${SKIP_EMULATION}" ]; then
|
|
${docker} run --rm --privileged tonistiigi/binfmt:master --install "${QEMU_ARCH}" || exit 1
|
|
fi
|
|
|
|
DOCKER_IMAGE_NAME="netdata/static-builder:v1"
|
|
|
|
if ${docker} inspect "${DOCKER_IMAGE_NAME}" > /dev/null 2>&1; then
|
|
if ${docker} image inspect "${DOCKER_IMAGE_NAME}" | grep -q 'Variant'; then
|
|
img_platform="$(${docker} image inspect "${DOCKER_IMAGE_NAME}" --format '{{.Os}}/{{.Architecture}}/{{.Variant}}')"
|
|
else
|
|
img_platform="$(${docker} image inspect "${DOCKER_IMAGE_NAME}" --format '{{.Os}}/{{.Architecture}}')"
|
|
fi
|
|
|
|
if [ "${img_platform}" != "${platform}" ]; then
|
|
${docker} image rm "${DOCKER_IMAGE_NAME}" || exit 1
|
|
fi
|
|
fi
|
|
|
|
if ! ${docker} inspect "${DOCKER_IMAGE_NAME}" > /dev/null 2>&1; then
|
|
${docker} pull --platform "${platform}" "${DOCKER_IMAGE_NAME}"
|
|
fi
|
|
|
|
# Run the build script inside the container
|
|
if [ -t 1 ]; then
|
|
run ${docker} run --rm -e BUILDARCH="${BUILDARCH}" -a stdin -a stdout -a stderr -i -t -v "$(pwd)":/netdata:rw \
|
|
--platform "${platform}" ${EXTRA_INSTALL_FLAGS:+-e EXTRA_INSTALL_FLAGS="${EXTRA_INSTALL_FLAGS}"} \
|
|
${QEMU_CPU:+-e QEMU_CPU="${QEMU_CPU}"} \
|
|
-e TUNING_FLAGS="${TUNING_FLAGS}" \
|
|
${GOAMD64:+-e GOAMD64="${GOAMD64}"} ${GOARM:+-e GOARM="${GOARM}"} \
|
|
${GOARM64:+-e GOARM64="${GOARM64}"} ${GOPPC64:+-e GOPPC64="${GOPPC64}"} \
|
|
"${DOCKER_IMAGE_NAME}" /bin/sh /netdata/packaging/makeself/build.sh "${@}"
|
|
else
|
|
run ${docker} run --rm -e BUILDARCH="${BUILDARCH}" -v "$(pwd)":/netdata:rw \
|
|
-e GITHUB_ACTIONS="${GITHUB_ACTIONS}" --platform "${platform}" \
|
|
${EXTRA_INSTALL_FLAGS:+-e EXTRA_INSTALL_FLAGS="${EXTRA_INSTALL_FLAGS}"} \
|
|
${QEMU_CPU:+-e QEMU_CPU="${QEMU_CPU}"} \
|
|
-e TUNING_FLAGS="${TUNING_FLAGS}" \
|
|
${GOAMD64:+-e GOAMD64="${GOAMD64}"} ${GOARM:+-e GOARM="${GOARM}"} \
|
|
${GOARM64:+-e GOARM64="${GOARM64}"} ${GOPPC64:+-e GOPPC64="${GOPPC64}"} \
|
|
"${DOCKER_IMAGE_NAME}" /bin/sh /netdata/packaging/makeself/build.sh "${@}"
|
|
fi
|