build-static.sh 3.4 KB

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