AppImage-build-debian.sh 2.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  1. #! /bin/bash
  2. set -e
  3. # Parse options
  4. for i in "$@"
  5. do
  6. case $i in
  7. -l|--clang)
  8. export BUILD_USE_CLANG=1
  9. echo "-> Using Clang for compilation."
  10. ;;
  11. -o|--thin-lto)
  12. export BUILD_USE_THIN_LTO=1
  13. echo "-> Thin link time optimization enabled."
  14. ;;
  15. -O|--fat-lto)
  16. export BUILD_USE_FAT_LTO=1
  17. echo "-> Fat link time optimization enabled."
  18. ;;
  19. -p|--use-cpm)
  20. export BUILD_USE_CPM=1
  21. echo "-> Using CPM to download most dependencies."
  22. ;;
  23. -k|--keep-rootfs)
  24. BUILD_KEEP_ROOTFS=1
  25. echo "-> Not deleting rootfs after successful build."
  26. ;;
  27. *)
  28. echo "Usage: $0 [--clang/-l] [--thin-lto/-o] [--fat-lto/-O] [--use-cpm/-p] [--keep-rootfs/-k]"
  29. exit 1
  30. ;;
  31. esac
  32. done
  33. # Make sure options are valid
  34. if [ "$BUILD_USE_THIN_LTO" = 1 ] && [ "$BUILD_USE_CLANG" != 1 ]; then
  35. echo "Thin LTO can't be used without Clang!"
  36. exit 2
  37. fi
  38. if [ "$BUILD_USE_THIN_LTO" = 1 ] && [ "$BUILD_USE_FAT_LTO" = 1 ]; then
  39. echo "Only either thin or fat LTO can be used!"
  40. exit 2
  41. fi
  42. # Get torzu source dir
  43. TORZU_SOURCE_DIR="$(realpath "$(dirname "${BASH_SOURCE[0]}")")"
  44. echo "-> Source dir is $TORZU_SOURCE_DIR"
  45. rm -rf "$TORZU_SOURCE_DIR/AppImageBuilder/build"
  46. # Generate debian rootfs
  47. cd /tmp
  48. echo "Cleaning up before build..."
  49. rm -rf torzu-debian-appimage-rootfs
  50. [ -d rootfs-torzu-appimage-build ] ||
  51. debootstrap stable rootfs-torzu-appimage-build http://deb.debian.org/debian/
  52. bwrap --bind rootfs-torzu-appimage-build / \
  53. --unshare-pid \
  54. --dev-bind /dev /dev --proc /proc --tmpfs /tmp --ro-bind /sys /sys --dev-bind /run /run \
  55. --tmpfs /var/tmp \
  56. --chmod 1777 /tmp \
  57. --ro-bind /etc/resolv.conf /etc/resolv.conf \
  58. --ro-bind "$TORZU_SOURCE_DIR" /tmp/torzu-src-ro \
  59. --chdir / \
  60. --tmpfs /home \
  61. --setenv HOME /home \
  62. --bind /tmp /tmp/hosttmp \
  63. /tmp/torzu-src-ro/AppImage-build-debian-inner.sh
  64. appimagetool torzu-debian-appimage-rootfs torzu.AppImage
  65. echo "AppImage generated at /tmp/torzu.AppImage! Cleaning up..."
  66. rm -rf torzu-debian-appimage-rootfs
  67. if [ ! "$BUILD_KEEP_ROOTFS" = 1 ]; then
  68. rm -rf rootfs-torzu-appimage-build
  69. fi