2023-12-08 14:44:17 +00:00
name : GDExtension Build
description : Build GDExtension
inputs :
platform :
required : true
description : Target platform.
arch :
required : true
description : Target architecture.
2024-11-08 13:42:51 +00:00
scons-arguments :
default : ''
description : Additional space-separated arguments to pass to the scons build command.
cache-key :
default : ''
description : Key to use for caches. This input is used in paths and should not contain POSIX incompatible characters.
2023-12-08 14:44:17 +00:00
float-precision :
description : Float precision (single or double).
2024-11-08 13:42:51 +00:00
required : false
deprecationMessage : Use the scons-arguments (and cache-key) parameters instead. This parameter will continue to work until removed.
2023-12-08 14:44:17 +00:00
build-target-type :
2024-11-08 13:42:51 +00:00
required : false
2023-12-08 14:44:17 +00:00
description : Build type (template_debug or template_release).
2024-11-08 13:42:51 +00:00
deprecationMessage : Use the scons-arguments (and cache-key) parameters instead. This parameter will continue to work until removed.
2023-12-08 14:44:17 +00:00
scons-cache :
2024-10-28 18:00:29 +00:00
default : '.scons-cache/'
description : Scons cache folder name, relative to each scons directory. Must not contain relative path signifiers (. or ..). Must be a transparent path part (empty or 'path/to/directory/', ending in a slash).
2023-12-08 14:44:17 +00:00
em_version :
2024-10-24 20:57:37 +00:00
default : 3.1 .62
2023-12-08 14:44:17 +00:00
description : Emscripten version.
2024-10-28 18:00:29 +00:00
em-cache-directory :
2023-12-08 14:44:17 +00:00
default : emsdk-cache
2024-10-28 18:00:29 +00:00
description : Emscripten cache directory.
gdextension-directory :
default : ''
description : Location of the gdextension project within the repository. Must not contain relative path signifiers (. or ..). Must be a transparent path part (empty or 'path/to/directory/', ending in a slash).
2023-12-08 14:44:17 +00:00
runs :
using : composite
steps :
# Android only
2024-05-28 00:30:43 +00:00
- name : Android - Set up Java 17
uses : actions/setup-java@v4
2023-12-08 14:44:17 +00:00
if : ${{ inputs.platform == 'android' }}
with :
distribution : temurin
2024-05-28 00:30:43 +00:00
java-version : 17
2023-12-08 14:44:17 +00:00
2024-05-28 00:30:43 +00:00
- name : Android - Remove existing Android SDK, and set up ENV vars
2023-12-08 14:44:17 +00:00
if : ${{ inputs.platform == 'android' }}
2024-05-28 00:30:43 +00:00
shell : sh
run : |
sudo rm -r /usr/local/lib/android/sdk/**
export ANDROID_HOME=/usr/local/lib/android/sdk
export ANDROID_SDK_ROOT=$ANDROID_HOME
export ANDROID_NDK_VERSION=23.2.8568313
export ANDROID_NDK_ROOT=${ANDROID_SDK_ROOT}/ndk/${ANDROID_NDK_VERSION}
echo "ANDROID_HOME=$ANDROID_HOME" >> "$GITHUB_ENV"
echo "ANDROID_SDK_ROOT=$ANDROID_SDK_ROOT" >> "$GITHUB_ENV"
echo "ANDROID_NDK_VERSION=$ANDROID_NDK_VERSION" >> "$GITHUB_ENV"
echo "ANDROID_NDK_ROOT=$ANDROID_NDK_ROOT" >> "$GITHUB_ENV"
- name : Android - Set up Android SDK
if : ${{ inputs.platform == 'android' }}
uses : android-actions/setup-android@v3
2023-12-08 14:44:17 +00:00
with :
2024-05-28 00:30:43 +00:00
packages : "ndk;${{ env.ANDROID_NDK_VERSION }} cmdline-tools;latest build-tools;34.0.0 platforms;android-34 cmake;3.22.1"
2023-12-08 14:44:17 +00:00
# Linux only
- name : Linux - dependencies
if : ${{ inputs.platform == 'linux' }}
shell : sh
run : |
sudo apt-get update -qq
sudo apt-get install -qqq build-essential pkg-config
# Web only
- name : Web - Set up Emscripten latest
if : ${{ inputs.platform == 'web' }}
uses : mymindstorm/setup-emsdk@v13
with :
version : ${{ inputs.em_version }}
2024-11-08 13:42:51 +00:00
actions-cache-folder : ${{ inputs.em-cache-directory }}.${{ inputs.float-precision }}.${{ inputs.build-target-type }}${{ inputs.cache-key }}
2023-12-08 14:44:17 +00:00
- name : Web - Verify Emscripten setup
if : ${{ inputs.platform == 'web' }}
shell : sh
run : |
emcc -v
# Windows only
- name : Windows - Setup MinGW for Windows/MinGW build
uses : egor-tensin/setup-mingw@v2
if : ${{ inputs.platform == 'windows' }}
with :
version : 12.2 .0
# Dependencies of godot
# Use python 3.x release (works cross platform)
- name : Set up Python 3.x
2024-05-28 00:30:43 +00:00
uses : actions/setup-python@v5
2023-12-08 14:44:17 +00:00
with :
# Semantic version range syntax or exact version of a Python version
python-version : "3.x"
# Optional - x64 or x86 architecture, defaults to x64
architecture : "x64"
- name : Setup scons
shell : bash
run : |
python -c "import sys; print(sys.version)"
python -m pip install scons==4.4.0
scons --version
# Build
- name : Cache .scons_cache
2024-05-28 00:30:43 +00:00
uses : actions/cache@v4
2023-12-08 14:44:17 +00:00
with :
path : |
2024-10-28 18:00:29 +00:00
${{ github.workspace }}/${{ inputs.gdextension-directory }}${{ inputs.scons-cache }}
2024-11-08 13:42:51 +00:00
key : ${{ inputs.platform }}_${{ inputs.arch }}_${{ inputs.float-precision }}_${{ inputs.build-target-type }}${{ inputs.cache-key }}_cache
2023-12-08 14:44:17 +00:00
# Build gdextension
- name : Build GDExtension Debug Build
shell : sh
env :
2024-10-28 18:00:29 +00:00
SCONS_CACHE : ${{ github.workspace }}/${{ inputs.gdextension-directory }}${{ inputs.scons-cache }}
2023-12-08 14:44:17 +00:00
run : |
2024-11-08 13:42:51 +00:00
scons platform=${{ inputs.platform }} arch=${{ inputs.arch }} ${{ inputs.float-precision && 'precision=' || '' }}${{ inputs.float-precision }} ${{ inputs.build-target-type && 'target=' || '' }}${{ inputs.build-target-type }} ${{ inputs.scons-arguments }}
2024-10-28 18:00:29 +00:00
working-directory : ${{ inputs.gdextension-directory }}