mirror of
https://github.com/godotengine/godot-build-scripts.git
synced 2026-01-01 09:48:47 +03:00
Compare commits
11 Commits
4.3
...
debugsymbo
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
1445dc1fea | ||
|
|
1e4dc88253 | ||
|
|
8c176b460b | ||
|
|
e0891e9fde | ||
|
|
251cea182e | ||
|
|
9259edf571 | ||
|
|
cc7ca0f706 | ||
|
|
5f48331f5d | ||
|
|
fa404f8c17 | ||
|
|
d808ce84ce | ||
|
|
232be2e47f |
3
.gitignore
vendored
3
.gitignore
vendored
@@ -18,3 +18,6 @@ releases/
|
||||
sha512sums/
|
||||
tmp/
|
||||
web/
|
||||
|
||||
# macOS
|
||||
.DS_Store
|
||||
|
||||
@@ -13,6 +13,7 @@ rm -rf godot
|
||||
mkdir godot
|
||||
cd godot
|
||||
tar xf /root/godot.tar.gz --strip-components=1
|
||||
cp -rf /root/swappy/* thirdparty/swappy-frame-pacing/
|
||||
|
||||
# Environment variables and keystore needed for signing store editor build,
|
||||
# as well as signing and publishing to MavenCentral.
|
||||
@@ -35,23 +36,31 @@ if [ "${CLASSICAL}" == "1" ]; then
|
||||
$SCONS platform=android arch=x86_64 $OPTIONS target=editor store_release=${store_release}
|
||||
|
||||
pushd platform/android/java
|
||||
# Generate the regular Android editor.
|
||||
./gradlew generateGodotEditor
|
||||
# Generate the Android editor for HorizonOS devices.
|
||||
./gradlew generateGodotHorizonOSEditor
|
||||
popd
|
||||
|
||||
mkdir -p /root/out/tools
|
||||
# Copy the generated Android editor binaries (apk & aab).
|
||||
if [ "$store_release" == "yes" ]; then
|
||||
cp bin/android_editor_builds/android_editor-release.apk /root/out/tools/android_editor.apk
|
||||
cp bin/android_editor_builds/android_editor-release.aab /root/out/tools/android_editor.aab
|
||||
cp bin/android_editor_builds/android_editor-android-release.apk /root/out/tools/android_editor.apk
|
||||
cp bin/android_editor_builds/android_editor-android-release.aab /root/out/tools/android_editor.aab
|
||||
# For the HorizonOS build, we only copy the apk.
|
||||
cp bin/android_editor_builds/android_editor-horizonos-release.apk /root/out/tools/android_editor_horizonos.apk
|
||||
else
|
||||
cp bin/android_editor_builds/android_editor-debug.apk /root/out/tools/android_editor.apk
|
||||
cp bin/android_editor_builds/android_editor-debug.aab /root/out/tools/android_editor.aab
|
||||
cp bin/android_editor_builds/android_editor-android-debug.apk /root/out/tools/android_editor.apk
|
||||
cp bin/android_editor_builds/android_editor-android-debug.aab /root/out/tools/android_editor.aab
|
||||
# For the HorizonOS build, we only copy the apk.
|
||||
cp bin/android_editor_builds/android_editor-horizonos-debug.apk /root/out/tools/android_editor_horizonos.apk
|
||||
fi
|
||||
|
||||
# Restart from a clean tarball, as we'll copy all the contents
|
||||
# outside the container for the MavenCentral upload.
|
||||
rm -rf /root/godot/*
|
||||
tar xf /root/godot.tar.gz --strip-components=1
|
||||
cp -rf /root/swappy/* thirdparty/swappy-frame-pacing/
|
||||
|
||||
$SCONS platform=android arch=arm32 $OPTIONS target=template_debug
|
||||
$SCONS platform=android arch=arm32 $OPTIONS target=template_release
|
||||
@@ -104,13 +113,13 @@ if [ "${MONO}" == "1" ]; then
|
||||
$SCONS platform=android arch=x86_64 $OPTIONS $OPTIONS_MONO target=template_release
|
||||
|
||||
pushd platform/android/java
|
||||
./gradlew generateGodotTemplates
|
||||
./gradlew generateGodotMonoTemplates
|
||||
popd
|
||||
|
||||
mkdir -p /root/out/templates-mono
|
||||
cp bin/android_source.zip /root/out/templates-mono/
|
||||
cp bin/android_debug.apk /root/out/templates-mono/
|
||||
cp bin/android_release.apk /root/out/templates-mono/
|
||||
cp bin/android_monoDebug.apk /root/out/templates-mono/android_debug.apk
|
||||
cp bin/android_monoRelease.apk /root/out/templates-mono/android_release.apk
|
||||
cp bin/godot-lib.template_release.aar /root/out/templates-mono/
|
||||
fi
|
||||
|
||||
|
||||
@@ -5,7 +5,7 @@ set -e
|
||||
# Config
|
||||
|
||||
export SCONS="scons -j${NUM_CORES} verbose=yes warnings=no progress=no"
|
||||
export OPTIONS="production=yes"
|
||||
export OPTIONS="production=yes debug_symbols=yes separate_debug_symbols=yes debug_paths_relative=yes"
|
||||
export OPTIONS_MONO="module_mono_enabled=yes"
|
||||
export TERM=xterm
|
||||
|
||||
@@ -14,6 +14,8 @@ mkdir godot
|
||||
cd godot
|
||||
tar xf /root/godot.tar.gz --strip-components=1
|
||||
|
||||
dnf install -y binutils
|
||||
|
||||
# Classical
|
||||
|
||||
if [ "${CLASSICAL}" == "1" ]; then
|
||||
|
||||
@@ -5,7 +5,7 @@ set -e
|
||||
# Config
|
||||
|
||||
export SCONS="scons -j${NUM_CORES} verbose=yes warnings=no progress=no"
|
||||
export OPTIONS="osxcross_sdk=darwin23.6 production=yes use_volk=no vulkan_sdk_path=/root/moltenvk angle_libs=/root/angle"
|
||||
export OPTIONS="osxcross_sdk=darwin23.6 production=yes debug_symbols=yes separate_debug_symbols=yes debug_paths_relative=yes use_volk=no vulkan_sdk_path=/root/moltenvk angle_libs=/root/angle"
|
||||
export OPTIONS_MONO="module_mono_enabled=yes"
|
||||
export TERM=xterm
|
||||
|
||||
|
||||
@@ -88,47 +88,14 @@ sign_macos_template() {
|
||||
ssh "${OSX_HOST}" "rm -rf ${_macos_tmpdir}"
|
||||
}
|
||||
|
||||
can_publish_nuget=0
|
||||
if [ ! -z "${NUGET_SOURCE}" ] && [ ! -z "${NUGET_API_KEY}" ] && [[ $(type -P "dotnet") ]]; then
|
||||
can_publish_nuget=1
|
||||
else
|
||||
echo "Disabling NuGet package publishing as config.sh does not define the required data (NUGET_SOURCE, NUGET_API_KEY), or dotnet can't be found in PATH."
|
||||
fi
|
||||
|
||||
publish_nuget_packages() {
|
||||
if [ $can_publish_nuget == 0 ]; then
|
||||
return
|
||||
fi
|
||||
for pkg in "$@"; do
|
||||
dotnet nuget push $pkg --source "${NUGET_SOURCE}" --api-key "${NUGET_API_KEY}" --skip-duplicate
|
||||
done
|
||||
}
|
||||
|
||||
can_publish_maven=0
|
||||
if [ ! -d "${basedir}/deps/keystore" ]; then
|
||||
echo "Disabling Android library publishing as ${basedir}/deps/keystore doesn't exist."
|
||||
else
|
||||
can_publish_maven=1
|
||||
fi
|
||||
|
||||
publish_maven_library() {
|
||||
if [ $can_publish_maven == 0 ]; then
|
||||
return
|
||||
fi
|
||||
# FIXME: Might be worth reworking the script to make it all sudo-safe and use appropriate users throughout.
|
||||
sudo sh build-android/upload-mavencentral.sh
|
||||
}
|
||||
|
||||
godot_version=""
|
||||
templates_version=""
|
||||
do_cleanup=1
|
||||
make_tarball=1
|
||||
build_classical=1
|
||||
build_mono=1
|
||||
publish_nuget=0
|
||||
publish_maven=0
|
||||
|
||||
while getopts "h?v:t:b:p:n-:" opt; do
|
||||
while getopts "h?v:t:b:n-:" opt; do
|
||||
case "$opt" in
|
||||
h|\?)
|
||||
echo "Usage: $0 [OPTIONS...]"
|
||||
@@ -136,7 +103,6 @@ while getopts "h?v:t:b:p:n-:" opt; do
|
||||
echo " -v godot version (e.g: 3.2-stable) [mandatory]"
|
||||
echo " -t templates version (e.g. 3.2.stable) [mandatory]"
|
||||
echo " -b build target: all|classical|mono|none (default: all)"
|
||||
echo " -p publish target: all|nuget|maven|none (default: none)"
|
||||
echo " --no-cleanup disable deleting pre-existing output folders (default: false)"
|
||||
echo " --no-tarball disable generating source tarball (default: false)"
|
||||
echo
|
||||
@@ -158,16 +124,6 @@ while getopts "h?v:t:b:p:n-:" opt; do
|
||||
build_mono=0
|
||||
fi
|
||||
;;
|
||||
p)
|
||||
if [ "$OPTARG" == "nuget" ]; then
|
||||
publish_nuget=1
|
||||
elif [ "$OPTARG" == "maven" ]; then
|
||||
publish_maven=1
|
||||
elif [ "$OPTARG" == "all" ]; then
|
||||
publish_nuget=1
|
||||
publish_maven=1
|
||||
fi
|
||||
;;
|
||||
-)
|
||||
case "${OPTARG}" in
|
||||
no-cleanup)
|
||||
@@ -366,6 +322,8 @@ if [ "${build_classical}" == "1" ]; then
|
||||
# Editor
|
||||
binname="${godot_basename}_android_editor.apk"
|
||||
cp out/android/tools/android_editor.apk ${reldir}/${binname}
|
||||
binname="${godot_basename}_android_editor_horizonos.apk"
|
||||
cp out/android/tools/android_editor_horizonos.apk ${reldir}/${binname}
|
||||
binname="${godot_basename}_android_editor.aab"
|
||||
cp out/android/tools/android_editor.aab ${reldir}/${binname}
|
||||
|
||||
@@ -578,22 +536,4 @@ if [ "${build_mono}" == "1" ]; then
|
||||
|
||||
fi
|
||||
|
||||
# NuGet packages
|
||||
|
||||
if [ "${publish_nuget}" == "1" ]; then
|
||||
|
||||
echo "Publishing NuGet packages..."
|
||||
publish_nuget_packages out/linux/x86_64/tools-mono/GodotSharp/Tools/nupkgs/*.nupkg
|
||||
|
||||
fi
|
||||
|
||||
# Godot Android library
|
||||
|
||||
if [ "${publish_maven}" == "1" ]; then
|
||||
|
||||
echo "Publishing Android library to MavenCentral..."
|
||||
publish_maven_library
|
||||
|
||||
fi
|
||||
|
||||
echo "All editor binaries and templates prepared successfully for release"
|
||||
|
||||
@@ -5,7 +5,7 @@ set -e
|
||||
# Config
|
||||
|
||||
export SCONS="scons -j${NUM_CORES} verbose=yes warnings=no progress=no"
|
||||
export OPTIONS="production=yes use_mingw=yes angle_libs=/root/angle mesa_libs=/root/mesa d3d12=yes"
|
||||
export OPTIONS="production=yes debug_symbols=yes separate_debug_symbols=yes debug_paths_relative=yes use_mingw=yes angle_libs=/root/angle mesa_libs=/root/mesa d3d12=yes"
|
||||
export OPTIONS_MONO="module_mono_enabled=yes"
|
||||
export OPTIONS_LLVM="use_llvm=yes mingw_prefix=/root/llvm-mingw"
|
||||
export TERM=xterm
|
||||
|
||||
19
build.sh
19
build.sh
@@ -180,6 +180,15 @@ if [ ! -d "deps/mesa" ]; then
|
||||
popd
|
||||
fi
|
||||
|
||||
if [ ! -d "deps/swappy" ]; then
|
||||
echo "Missing Swappy libraries, downloading them."
|
||||
mkdir -p deps/swappy
|
||||
pushd deps/swappy
|
||||
curl -L -O https://github.com/darksylinc/godot-swappy/releases/download/v2023.3.0.0/godot-swappy.7z
|
||||
7z x godot-swappy.7z && rm godot-swappy.7z
|
||||
popd
|
||||
fi
|
||||
|
||||
# Keystore for Android editor signing
|
||||
# Optional - the config.sh will be copied but if it's not filled in,
|
||||
# it will do an unsigned build.
|
||||
@@ -224,7 +233,7 @@ mkdir -p ${basedir}/out
|
||||
mkdir -p ${basedir}/out/logs
|
||||
mkdir -p ${basedir}/mono-glue
|
||||
|
||||
export podman_run="${podman} run -it --rm --env BUILD_NAME --env GODOT_VERSION_STATUS --env NUM_CORES --env CLASSICAL=${build_classical} --env MONO=${build_mono} -v ${basedir}/godot-${godot_version}.tar.gz:/root/godot.tar.gz -v ${basedir}/mono-glue:/root/mono-glue -w /root/"
|
||||
export podman_run="${podman} run -it --rm --env BUILD_NAME=${BUILD_NAME} --env GODOT_VERSION_STATUS=${GODOT_VERSION_STATUS} --env NUM_CORES=${NUM_CORES} --env CLASSICAL=${build_classical} --env MONO=${build_mono} -v ${basedir}/godot-${godot_version}.tar.gz:/root/godot.tar.gz -v ${basedir}/mono-glue:/root/mono-glue -w /root/"
|
||||
export img_version=$IMAGE_VERSION
|
||||
|
||||
mkdir -p ${basedir}/mono-glue
|
||||
@@ -243,11 +252,15 @@ mkdir -p ${basedir}/out/macos
|
||||
${podman_run} -v ${basedir}/build-macos:/root/build -v ${basedir}/out/macos:/root/out -v ${basedir}/deps/moltenvk:/root/moltenvk -v ${basedir}/deps/angle:/root/angle localhost/godot-osx:${img_version} bash build/build.sh 2>&1 | tee ${basedir}/out/logs/macos
|
||||
|
||||
mkdir -p ${basedir}/out/android
|
||||
${podman_run} -v ${basedir}/build-android:/root/build -v ${basedir}/out/android:/root/out -v ${basedir}/deps/keystore:/root/keystore localhost/godot-android:${img_version} bash build/build.sh 2>&1 | tee ${basedir}/out/logs/android
|
||||
${podman_run} -v ${basedir}/build-android:/root/build -v ${basedir}/out/android:/root/out -v ${basedir}/deps/swappy:/root/swappy -v ${basedir}/deps/keystore:/root/keystore localhost/godot-android:${img_version} 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 localhost/godot-ios:${img_version} bash build/build.sh 2>&1 | tee ${basedir}/out/logs/ios
|
||||
|
||||
uid=$(id -un)
|
||||
gid=$(id -gn)
|
||||
if [ ! -z "$SUDO_UID" ]; then
|
||||
chown -R "${SUDO_UID}":"${SUDO_GID}" ${basedir}/git ${basedir}/out ${basedir}/mono-glue ${basedir}/godot*.tar.gz
|
||||
uid="${SUDO_UID}"
|
||||
gid="${SUDO_GID}"
|
||||
fi
|
||||
chown -R -f $uid:$gid ${basedir}/git ${basedir}/out ${basedir}/mono-glue ${basedir}/godot*.tar.gz
|
||||
|
||||
@@ -12,6 +12,14 @@
|
||||
# relevant tool in your PATH or an absolute path to run it from.
|
||||
export PODMAN='podman'
|
||||
|
||||
# Path to a Git clone of https://github.com/godotengine/godot-builds.
|
||||
# Only used for uploading official releases.
|
||||
export GODOT_BUILDS_PATH=''
|
||||
|
||||
# SSH hostname to upload Web editor builds to.
|
||||
# Only used for uploading official releases.
|
||||
export WEB_EDITOR_HOSTNAME=''
|
||||
|
||||
# Registry for build containers.
|
||||
# The default registry is the one used for official Godot builds.
|
||||
# Note that some of its images are private and only accessible to selected
|
||||
|
||||
98
publish-release.sh
Executable file
98
publish-release.sh
Executable file
@@ -0,0 +1,98 @@
|
||||
#!/bin/bash
|
||||
|
||||
set -e
|
||||
|
||||
# Config
|
||||
|
||||
# For signing keys, and path to godot-builds repo.
|
||||
source ./config.sh
|
||||
|
||||
godot_version=""
|
||||
web_editor_latest=0
|
||||
|
||||
while getopts "h?v:l" opt; do
|
||||
case "$opt" in
|
||||
h|\?)
|
||||
echo "Usage: $0 [OPTIONS...]"
|
||||
echo
|
||||
echo " -v godot version (e.g: 3.2-stable) [mandatory]"
|
||||
echo " -l mark web editor as latest"
|
||||
echo
|
||||
exit 1
|
||||
;;
|
||||
v)
|
||||
godot_version=$OPTARG
|
||||
;;
|
||||
l)
|
||||
web_editor_latest=1
|
||||
;;
|
||||
esac
|
||||
done
|
||||
|
||||
if [ -z "${godot_version}" ]; then
|
||||
echo "Mandatory argument -v missing."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Confirm
|
||||
|
||||
IFS=- read version status <<< "${godot_version}"
|
||||
echo "Publishing Godot ${version} ${status}."
|
||||
read -p "Is this correct (y/n)? " choice
|
||||
case "$choice" in
|
||||
y|Y ) echo "yes";;
|
||||
n|N ) echo "No, aborting."; exit 0;;
|
||||
* ) echo "Invalid choice, aborting."; exit 1;;
|
||||
esac
|
||||
template_version=${version}.${status}
|
||||
|
||||
# Upload to GitHub godot-builds
|
||||
|
||||
if [ -z "${GODOT_BUILDS_PATH}" ]; then
|
||||
echo "Missing path to godotengine/godot-builds clone in config.sh, necessary to upload releases. Aborting."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
${GODOT_BUILDS_PATH}/tools/upload-github.sh -v ${version} -f ${status}
|
||||
|
||||
# Web editor
|
||||
|
||||
scp -P 22 -r web/${template_version} ${WEB_EDITOR_HOSTNAME}:/home/akien/web_editor/
|
||||
sleep 2
|
||||
command="sudo mv /home/akien/web_editor/${template_version} /var/www/editor.godotengine.org/public/releases/"
|
||||
command="${command}; cd /var/www/editor.godotengine.org; sudo chown -R www-data:www-data public/releases/${template_version}"
|
||||
command="${command}; sudo ./create-symlinks.sh -v ${template_version}"
|
||||
if [ $web_editor_latest == 1 ]; then
|
||||
command="${command} -l"
|
||||
fi
|
||||
ssh -P 22 ${WEB_EDITOR_HOSTNAME} "${command}"
|
||||
|
||||
# NuGet packages
|
||||
|
||||
publish_nuget_packages() {
|
||||
for pkg in "$@"; do
|
||||
dotnet nuget push $pkg --source "${NUGET_SOURCE}" --api-key "${NUGET_API_KEY}" --skip-duplicate
|
||||
done
|
||||
}
|
||||
|
||||
if [ ! -z "${NUGET_SOURCE}" ] && [ ! -z "${NUGET_API_KEY}" ] && [[ $(type -P "dotnet") ]]; then
|
||||
echo "Publishing NuGet packages..."
|
||||
publish_nuget_packages out/linux/x86_64/tools-mono/GodotSharp/Tools/nupkgs/*.nupkg
|
||||
else
|
||||
echo "Disabling NuGet package publishing as config.sh does not define the required data (NUGET_SOURCE, NUGET_API_KEY), or dotnet can't be found in PATH."
|
||||
fi
|
||||
|
||||
# Godot Android library
|
||||
|
||||
if [ -d "deps/keystore" ]; then
|
||||
echo "Publishing Android library to MavenCentral..."
|
||||
sh build-android/upload-mavencentral.sh
|
||||
else
|
||||
echo "Disabling Android library publishing as deps/keystore doesn't exist."
|
||||
fi
|
||||
|
||||
# Stable release only
|
||||
|
||||
if [ "${status}" == "stable" ]; then
|
||||
echo "NOTE: This script doesn't handle yet uploading stable releases to the main GitHub repository, Steam, EGS, and itch.io."
|
||||
fi
|
||||
Reference in New Issue
Block a user