Skip to content

Now building MacOS

Now building MacOS #74

name: 🛠️ GDExtension Build
on:
push:
paths:
[
src/**,
.github/**,
"!.github/**/util_*",
"patches/**",
lib_utils.py,
SConstruct,
]
pull_request:
paths:
[
src/**,
.github/**,
"!.github/**/util_*",
"patches/**",
lib_utils.py,
SConstruct,
]
workflow_dispatch:
inputs:
production_build:
description: Production build
default: true
type: boolean
use_cache:
description: Use Cache
default: true
type: boolean
# Stop the same workflow actions
concurrency:
group: ${{github.workflow}}-${{github.event.pull_request.number || github.ref}}
cancel-in-progress: true
permissions:
actions: write
env:
SCONS_CACHE: ${{github.workspace}}/.scons-cache/
USE_CACHE: ${{!format('{0}', inputs.use_cache) && 'true' || format('{0}', inputs.use_cache)}} # Default true
PRODUCTION_BUILD: ${{!format('{0}', inputs.production_build) && 'false' || format('{0}', inputs.production_build)}} # Default false
OUTPUT_LIBS_PATH: bin
FORCE_DISABLE_UNITY: yes
GH_TOKEN: ${{ github.token }}
jobs:
windows-gdextension:
name: 🏁 Windows
runs-on: windows-latest
strategy:
fail-fast: false
matrix:
arch: [x86_64]
target: [template_release]
steps:
- name: Checkout
uses: actions/checkout@v4
with:
submodules: recursive
- name: Compile GDExtension
uses: ./.github/actions/compile_gdextension
with:
platform: windows
target: ${{matrix.target}}
arch: ${{matrix.arch}}
artifact: windows.${{matrix.target}}.${{matrix.arch}}
additional: lto=yes
output_libs_path: ${{env.OUTPUT_LIBS_PATH}}
use_cache: ${{env.USE_CACHE}}
token: ${{secrets.TELEMETRY_TOKEN}}
# ============================================
linux-gdextension:
name: 🐧 Linux
runs-on: ubuntu-20.04
strategy:
fail-fast: false
matrix:
arch: [x86_64]
target: [template_debug, template_release]
steps:
- name: Checkout
uses: actions/checkout@v4
with:
submodules: recursive
- name: Compile GDExtension
uses: ./.github/actions/compile_gdextension
with:
platform: linux
target: ${{matrix.target}}
arch: ${{matrix.arch}}
artifact: linux.${{matrix.target}}.${{matrix.arch}}
additional: lto=yes
output_libs_path: ${{env.OUTPUT_LIBS_PATH}}
use_cache: ${{env.USE_CACHE}}
token: ${{secrets.TELEMETRY_TOKEN}}
# ============================================
macos-gdextension:
name: 🍏 MacOS
runs-on: macos-latest
strategy:
fail-fast: false
matrix:
arch: [universal]
target: [template_debug, template_release]
steps:
- name: Checkout
uses: actions/checkout@v4
with:
submodules: recursive
- name: Compile GDExtension
uses: ./.github/actions/compile_gdextension
with:
platform: macos
target: ${{matrix.target}}
arch: ${{matrix.arch}}
artifact: macos.${{matrix.target}}.${{matrix.arch}}
additional: lto=yes macos_deployment_target=10.14
output_libs_path: ${{env.OUTPUT_LIBS_PATH}}
use_cache: ${{env.USE_CACHE}}
token: ${{secrets.TELEMETRY_TOKEN}}
# ============================================
ios-gdextension:
name: 🍏 Ios
runs-on: macos-latest
strategy:
fail-fast: false
matrix:
arch: [universal]
target: [template_debug, template_release]
steps:
- name: Checkout
uses: actions/checkout@v4
with:
submodules: recursive
- name: Compile GDExtension
uses: ./.github/actions/compile_gdextension
with:
platform: ios
target: ${{matrix.target}}
arch: ${{matrix.arch}}
artifact: ios.${{matrix.target}}.${{matrix.arch}}
additional: lto=yes
output_libs_path: ${{env.OUTPUT_LIBS_PATH}}
use_cache: ${{env.USE_CACHE}}
token: ${{secrets.TELEMETRY_TOKEN}}
# ============================================
android-gdextension:
name: 🤖 Android
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
arch: [arm32, arm64, x86_32, x86_64]
target: [template_debug, template_release]
steps:
- name: Checkout
uses: actions/checkout@v4
with:
submodules: recursive
- name: Install Android NDK r23c
uses: nttld/setup-ndk@v1.4.1
id: setup-ndk
with:
ndk-version: r23c
link-to-sdk: true
local-cache: true
# TODO revisit after some updates of nttld/setup-ndk
- name: Restore Android Symlinks
run: |
directory="${{ steps.setup-ndk.outputs.ndk-path }}/toolchains/llvm/prebuilt/linux-x86_64/bin"
find "$directory" -type l | while read link; do
current_target=$(readlink "$link")
new_target="$directory/$(basename "$current_target")"
ln -sf "$new_target" "$link"
echo "Changed $(basename "$link") from $current_target to $new_target"
done
- name: Compile GDExtension
uses: ./.github/actions/compile_gdextension
with:
platform: android
target: ${{matrix.target}}
arch: ${{matrix.arch}}
artifact: android.${{matrix.target}}.${{matrix.arch}}
additional: lto=yes
additional_enabled_dd3d: false
output_libs_path: ${{env.OUTPUT_LIBS_PATH}}
use_cache: ${{env.USE_CACHE}}
# ============================================
# web-gdextension:
# name: 🕸 Web
# runs-on: ubuntu-latest
#
# strategy:
# fail-fast: false
# matrix:
# arch: [wasm32]
# target: [template_debug, template_release]
#
# env:
# EM_VERSION: 3.1.39
#
# steps:
# - name: Checkout
# uses: actions/checkout@v4
# with:
# submodules: recursive
#
# - name: Download Emscripten
# uses: mymindstorm/setup-emsdk@v14
# # Continue if failed to cache
# # https://github.com/mymindstorm/setup-emsdk/issues/20
# continue-on-error: true
# with:
# version: ${{env.EM_VERSION}}
# actions-cache-folder: obj/emsdk_cache
#
# - name: Compile GDExtension
# uses: ./.github/actions/compile_gdextension
# with:
# platform: web
# target: ${{matrix.target}}
# arch: ${{matrix.arch}}
# artifact: web.${{matrix.target}}.${{matrix.arch}}
# additional: lto=yes
# output_libs_path: ${{env.OUTPUT_LIBS_PATH}}
# use_cache: ${{env.USE_CACHE}}
# ============================================
collect-gdextension:
needs:
[
windows-gdextension,
linux-gdextension,
macos-gdextension,
android-gdextension,
# web-gdextension,
ios-gdextension,
]
name: 📦 Collect GDExtension binaries
runs-on: ubuntu-latest
outputs:
artifact_name: ${{steps.output_info.outputs.artifact_name}}
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Download Binaries
uses: actions/download-artifact@v4
with:
path: extracted_files
- name: Store all libraries in one directory
run: |
arch_dirs=$(find extracted_files/ -mindepth 1 -maxdepth 1 -type d)
echo "Original structure:"
find extracted_files -mindepth 1
mv -f extracted_files/**/* extracted_files
rm -rf $arch_dirs
echo "Final structure:"
find extracted_files -mindepth 1
touch extracted_files/.gdignore
- name: Output file information
id: output_info
run: |
cd extracted_files
echo "Total size: $(du -ch -b | grep total | cut -f1 | awk '{printf "%.2f", $1/1048576}') MB, Total number of files: $(find . -type f | wc -l)" >> $GITHUB_STEP_SUMMARY
echo "artifact_name=${{env.PRODUCTION_BUILD == 'true' && '.gdextension_libs_production' || '.gdextension_libs'}}" >> $GITHUB_OUTPUT
- name: Upload GDExtension
uses: actions/upload-artifact@v4
with:
name: ${{steps.output_info.outputs.artifact_name}}
retention-days: 7
path: extracted_files/*