mirror of
https://github.com/godotengine/godot-build-scripts.git
synced 2025-12-31 05:48:35 +03:00
The in-container build scripts now get passed CLASSICAL and MONO env variables which can be used to build one or the other, or both (default). `build.sh`, `build-release.sh` and `build-templates.sh` now all expect command line switches to specify the version details, and optionally which flavor to build. For example to build Mono only: ./build.sh -v 3.2-beta4 -g master -b mono ./build-release.sh -v 3.2-beta4 -b mono ./build-templates.sh -v 3.2-beta4 -t 3.2.beta4 -b mono Also took the opportunity to do some extra cleanup, like removing unnecessary `builtin_*` options since they all default to True, even for Linux in 3.2, as well as `use_lto` and `use_static_cpp` options on platforms which don't implement them. And I improved the `build-release.sh` script to be a bit easier to read, and avoid having too many stray folders to cleanup. The build scripts should now generate the final structure that we'd use on the official mirrors, with the `mono` distribution as a subfolder of the main release folder.
185 lines
5.6 KiB
Bash
Executable File
185 lines
5.6 KiB
Bash
Executable File
#!/bin/bash
|
|
|
|
set -e
|
|
|
|
OPTIND=1
|
|
|
|
# Config
|
|
|
|
# For default registry and number of cores.
|
|
if [ ! -e config.sh ]; then
|
|
echo "No config.sh, copying default values from config.sh.in."
|
|
cp config.sh.in config.sh
|
|
fi
|
|
source ./config.sh
|
|
|
|
if [ -z "${NUM_CORES}" ]; then
|
|
export NUM_CORES=16
|
|
fi
|
|
|
|
registry="${REGISTRY}"
|
|
username=""
|
|
password=""
|
|
godot_version=""
|
|
git_treeish="master"
|
|
build_classical=1
|
|
build_mono=1
|
|
force_download=0
|
|
skip_download=0
|
|
skip_git_checkout=0
|
|
|
|
while getopts "h?r:u:p:v:g:b:fsc" opt; do
|
|
case "$opt" in
|
|
h|\?)
|
|
echo "Usage: $0 [OPTIONS...]"
|
|
echo
|
|
echo " -r registry"
|
|
echo " -u username"
|
|
echo " -p password"
|
|
echo " -v godot version (e.g. 3.1-alpha5) [mandatory]"
|
|
echo " -g git treeish (e.g. master)"
|
|
echo " -b all|classical|mono (default: all)"
|
|
echo " -f force redownload of all images"
|
|
echo " -s skip downloading"
|
|
echo " -c skip checkout"
|
|
echo
|
|
exit 1
|
|
;;
|
|
r)
|
|
registry=$OPTARG
|
|
;;
|
|
u)
|
|
username=$OPTARG
|
|
;;
|
|
p)
|
|
password=$OPTARG
|
|
;;
|
|
v)
|
|
godot_version=$OPTARG
|
|
;;
|
|
g)
|
|
git_treeish=$OPTARG
|
|
;;
|
|
b)
|
|
if [ "$OPTARG" == "classical" ]; then
|
|
build_mono=0
|
|
elif [ "$OPTARG" == "mono" ]; then
|
|
build_classical=0
|
|
fi
|
|
;;
|
|
f)
|
|
force_download=1
|
|
;;
|
|
s)
|
|
skip_download=1
|
|
;;
|
|
c)
|
|
skip_git_checkout=1
|
|
;;
|
|
esac
|
|
done
|
|
|
|
export podman=none
|
|
if which podman > /dev/null; then
|
|
export podman=podman
|
|
elif which docker > /dev/null; then
|
|
export podman=docker
|
|
fi
|
|
|
|
if [ "${podman}" == "none" ]; then
|
|
echo "Either podman or docker needs to be installed"
|
|
exit 1
|
|
fi
|
|
|
|
if [ $UID != 0 ]; then
|
|
echo "WARNING: Running as non-root may cause problems for the uwp build"
|
|
fi
|
|
|
|
if [ -z "${godot_version}" ]; then
|
|
echo "-v <version> is mandatory!"
|
|
exit 1
|
|
fi
|
|
|
|
if [ ! -z "${username}" ] && [ ! -z "${password}" ]; then
|
|
if ${podman} login ${registry} -u "${username}" -p "${password}"; then
|
|
export logged_in=true
|
|
fi
|
|
fi
|
|
|
|
if [ $skip_download == 0 ]; then
|
|
echo "Fetching images"
|
|
for image in mono-glue windows ubuntu-64 ubuntu-32 javascript; do
|
|
if [ ${force_download} == 1 ] || ! ${podman} image exists godot/$image; then
|
|
if ! ${podman} pull ${registry}/godot/${image}; then
|
|
echo "ERROR: image $image does not exist and can't be downloaded"
|
|
exit 1
|
|
fi
|
|
fi
|
|
done
|
|
|
|
if [ ! -z "${logged_in}" ]; then
|
|
echo "Fetching private images"
|
|
|
|
for image in macosx android ios uwp; do
|
|
if [ ${force_download} == 1 ] || ! ${podman} image exists godot-private/$image; then
|
|
if ! ${podman} pull ${registry}/godot-private/${image}; then
|
|
echo "ERROR: image $image does not exist and can't be downloaded"
|
|
exit 1
|
|
fi
|
|
fi
|
|
done
|
|
fi
|
|
fi
|
|
|
|
if [ "${skip_git_checkout}" == 0 ]; then
|
|
git clone https://github.com/godotengine/godot git || /bin/true
|
|
pushd git
|
|
git checkout -b ${git_treeish} origin/${git_treeish} || git checkout ${git_treeish}
|
|
git reset --hard
|
|
git clean -fdx
|
|
git pull origin ${git_treeish} || /bin/true
|
|
|
|
git archive --format=tar $git_treeish --prefix=godot-${godot_version}/ | gzip > ../godot.tar.gz
|
|
popd
|
|
fi
|
|
|
|
export basedir="$(pwd)"
|
|
mkdir -p ${basedir}/out
|
|
mkdir -p ${basedir}/out/logs
|
|
|
|
export podman_run="${podman} run -it --rm --env NUM_CORES --env CLASSICAL=${build_classical} --env MONO=${build_mono} -v ${basedir}/godot.tar.gz:/root/godot.tar.gz -v ${basedir}/mono-glue:/root/mono-glue -w /root/"
|
|
|
|
mkdir -p ${basedir}/mono-glue
|
|
${podman_run} -v ${basedir}/build-mono-glue:/root/build ${registry}/godot/mono-glue:latest bash build/build.sh 2>&1 | tee ${basedir}/out/logs/mono-glue
|
|
|
|
mkdir -p ${basedir}/out/windows
|
|
${podman_run} -v ${basedir}/build-windows:/root/build -v ${basedir}/out/windows:/root/out ${registry}/godot/windows:latest bash build/build.sh 2>&1 | tee ${basedir}/out/logs/windows
|
|
|
|
mkdir -p ${basedir}/out/linux/x64
|
|
${podman_run} -v ${basedir}/build-linux:/root/build -v ${basedir}/out/linux/x64:/root/out ${registry}/godot/ubuntu-64:latest bash build/build.sh 2>&1 | tee ${basedir}/out/logs/linux64
|
|
|
|
mkdir -p ${basedir}/out/linux/x86
|
|
${podman_run} -v ${basedir}/build-linux:/root/build -v ${basedir}/out/linux/x86:/root/out ${registry}/godot/ubuntu-32:latest bash build/build.sh 2>&1 | tee ${basedir}/out/logs/linux32
|
|
|
|
mkdir -p ${basedir}/out/javascript
|
|
${podman_run} -v ${basedir}/build-javascript:/root/build -v ${basedir}/out/javascript:/root/out ${registry}/godot/javascript:latest bash build/build.sh 2>&1 | tee ${basedir}/out/logs/javascript
|
|
|
|
mkdir -p ${basedir}/out/macosx/x64
|
|
${podman_run} -v ${basedir}/build-macosx:/root/build -v ${basedir}/out/macosx/x64:/root/out ${registry}/godot-private/macosx:latest bash build/build.sh 2>&1 | tee ${basedir}/out/logs/macosx
|
|
|
|
mkdir -p ${basedir}/out/android
|
|
${podman_run} -v ${basedir}/build-android:/root/build -v ${basedir}/out/android:/root/out ${registry}/godot-private/android:latest bash build/build.sh 2>&1 | tee ${basedir}/out/logs/android
|
|
|
|
mkdir -p ${basedir}/out/ios
|
|
${podman_run} -v ${basedir}/build-ios:/root/build -v ${basedir}/out/ios:/root/out ${registry}/godot-private/ios:latest bash build/build.sh 2>&1 | tee ${basedir}/out/logs/ios
|
|
|
|
mkdir -p ${basedir}/out/server/x64
|
|
${podman_run} -v ${basedir}/build-server:/root/build -v ${basedir}/out/server/x64:/root/out ${registry}/godot/ubuntu-64:latest bash build/build.sh 2>&1 | tee ${basedir}/out/logs/server
|
|
|
|
mkdir -p ${basedir}/out/uwp
|
|
${podman_run} --ulimit nofile=32768:32768 -v ${basedir}/build-uwp:/root/build -v ${basedir}/out/uwp:/root/out ${registry}/godot-private/uwp:latest bash build/build.sh 2>&1 | tee ${basedir}/out/logs/uwp
|
|
|
|
if [ ! -z "$SUDO_UID" ]; then
|
|
chown -R "${SUDO_UID}":"${SUDO_GID}" ${basedir}/out
|
|
fi
|