2024-09-03 09:34:33 +08:00
|
|
|
#!/bin/bash
|
|
|
|
|
PROJECT_ROOT=$(cd -P -- "$(dirname -- "$0")" && printf '%s\n' "$(pwd -P)")
|
|
|
|
|
|
2025-09-17 12:32:36 +08:00
|
|
|
set -e
|
|
|
|
|
|
|
|
|
|
function usage() {
|
|
|
|
|
echo "Usage: ./DockerBuild.sh [-c][-d][-i][-v]"
|
|
|
|
|
echo " -c: Build a self-contained Docker image that can be run directly"
|
|
|
|
|
echo " -d: disable safe parallel number limit(By default, the maximum number of parallels is set to free memory/2.5)"
|
|
|
|
|
echo " -i: Build and export an AppImage"
|
|
|
|
|
echo " -v: Build System Version:ubu22 or ubu24"
|
|
|
|
|
echo " -h: this help output"
|
|
|
|
|
echo "If you only need to run the program on a built Docker container, just use './DockerBuild.sh -c'"
|
|
|
|
|
echo "If you need to build an AppImage using Docker, first run './DockerBuild.sh -d', then run './DockerBuild.sh -s'."
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
unset name
|
|
|
|
|
while getopts "hcdiv:" opt; do
|
|
|
|
|
case ${opt} in
|
|
|
|
|
c )
|
|
|
|
|
BUILD_RUNNER=1
|
|
|
|
|
;;
|
|
|
|
|
d )
|
|
|
|
|
BUILD_DEPS=1
|
|
|
|
|
;;
|
|
|
|
|
i )
|
|
|
|
|
BUILD_APPIMAGE=1
|
|
|
|
|
;;
|
|
|
|
|
v )
|
|
|
|
|
SYSTEM_VERSION="$OPTARG"
|
|
|
|
|
;;
|
|
|
|
|
h ) usage
|
|
|
|
|
exit 0
|
|
|
|
|
;;
|
|
|
|
|
esac
|
|
|
|
|
done
|
|
|
|
|
|
|
|
|
|
if [ -z "$SYSTEM_VERSION" ]; then
|
|
|
|
|
SYSTEM_VERSION="ubu22"
|
|
|
|
|
fi
|
|
|
|
|
|
|
|
|
|
if [[ -n "${BUILD_DEPS}" ]]; then
|
|
|
|
|
if [ "$SYSTEM_VERSION" == "ubu22" ]; then
|
|
|
|
|
echo "Building dependencies for Ubuntu 22.04..."
|
|
|
|
|
docker build -f docker/BuildDepsDockerfile -t studio_dep_22:1.0 .
|
|
|
|
|
else
|
|
|
|
|
docker build -f docker/BuildDepsDockerfile24 -t studio_dep_24:1.0 .
|
|
|
|
|
fi
|
|
|
|
|
fi
|
|
|
|
|
|
|
|
|
|
if [[ -n "${BUILD_APPIMAGE}" ]]; then
|
|
|
|
|
if [ "$SYSTEM_VERSION" == "ubu22" ]; then
|
|
|
|
|
docker build -f docker/BuildAppimageDockerfile --build-arg VERSION=studio_dep_22 -o type=local,dest=./build .
|
|
|
|
|
mv build/QIDIStudio_ubu64.AppImage build/QIDIStudio_ubu22.AppImage
|
|
|
|
|
else
|
|
|
|
|
docker build -f docker/BuildAppimageDockerfile --build-arg VERSION=studio_dep_24 -o type=local,dest=./build .
|
|
|
|
|
mv build/QIDIStudio_ubu64.AppImage build/QIDIStudio_ubu24.AppImage
|
|
|
|
|
fi
|
|
|
|
|
fi
|
|
|
|
|
|
|
|
|
|
if [[ -n "${BUILD_RUNNER}" ]]
|
|
|
|
|
then
|
|
|
|
|
# Wishlist hint: For developers, creating a Docker Compose
|
|
|
|
|
# setup with persistent volumes for the build & deps directories
|
|
|
|
|
# would speed up recompile times significantly. For end users,
|
|
|
|
|
# the simplicity of a single Docker image and a one-time compilation
|
|
|
|
|
# seems better.
|
|
|
|
|
docker build -t qidistudio \
|
|
|
|
|
--build-arg USER=${USER:-root} \
|
|
|
|
|
--build-arg UID=$(id -u) \
|
|
|
|
|
--build-arg GID=$(id -g) \
|
|
|
|
|
$PROJECT_ROOT
|
|
|
|
|
fi
|