Use default export templates for HTML5

Changes Emscripten SDK version to match that used to compile the default export
templates used by Godot 3.4 (in this case 2.0.25 as can be seen here:
https://github.com/godotengine/build-containers/blob/3.4/Dockerfile.javascript).

This means we no longer need to compile custom export templates when
exporting HTML5 for Godot 3.4. Exports from other Godot versions may
requiring compiling the GDNative library with a different version of the
Emscripten SDK.
This commit is contained in:
Leroy Hopson 2022-08-01 19:56:43 +12:00
parent 03583c0a1b
commit 5f7dc2c247
No known key found for this signature in database
GPG key ID: D2747312A6DB51AA
15 changed files with 52 additions and 119 deletions

21
.github/import_assets.tscn vendored Normal file
View file

@ -0,0 +1,21 @@
[gd_scene load_steps=2 format=2]
[sub_resource type="GDScript" id=1]
script/source = "tool
extends Timer
func _enter_tree():
start()
func _on_timeout():
get_tree().quit(0)
"
[node name="Timer" type="Timer"]
process_mode = 0
wait_time = 10.0
one_shot = true
autostart = true
script = SubResource( 1 )
[connection signal="timeout" from="." to="." method="_on_timeout"]

View file

@ -41,7 +41,10 @@ jobs:
- name: Build godot-cpp bindings - name: Build godot-cpp bindings
if: steps.cache-submodules.outputs.cache-hit != 'true' if: steps.cache-submodules.outputs.cache-hit != 'true'
working-directory: addons/godot_xterm/native working-directory: addons/godot_xterm/native
run: UID_GID="$(id -u):$(id -g)" docker-compose run -e TARGET=${{ matrix.target }} -e BITS=${{ matrix.bits }} godot-cpp-linux run: |
docker-compose build godot-cpp-linux
UID_GID="$(id -u):$(id -g)" docker-compose run -e TARGET=${{ matrix.target }} -e BITS=${{ matrix.bits }} godot-cpp-linux
- name: Build libuv - name: Build libuv
if: steps.cache-submodules.outputs.cache-hit != 'true' if: steps.cache-submodules.outputs.cache-hit != 'true'
working-directory: addons/godot_xterm/native working-directory: addons/godot_xterm/native
@ -100,7 +103,7 @@ jobs:
if: ${{ matrix.platform == 'javascript' }} if: ${{ matrix.platform == 'javascript' }}
uses: mymindstorm/setup-emsdk@v11 uses: mymindstorm/setup-emsdk@v11
with: with:
version: 3.1.5 version: 2.0.25
actions-cache-folder: emsdk-cache-${{ matrix.target }} actions-cache-folder: emsdk-cache-${{ matrix.target }}
- name: Install additional javascript build dependencies - name: Install additional javascript build dependencies
if: ${{ matrix.platform == 'javascript' }} if: ${{ matrix.platform == 'javascript' }}
@ -166,43 +169,9 @@ jobs:
addons/godot_xterm/native/bin/*.dylib addons/godot_xterm/native/bin/*.dylib
addons/godot_xterm/native/bin/*.dll addons/godot_xterm/native/bin/*.dll
# GDNative HTML5 export templates aren't provided so we must build them
export_template:
name: 'Export Template'
runs-on: ubuntu-latest
strategy:
matrix:
target: [ release, debug ]
steps:
- uses: actions/checkout@v2
with:
submodules: recursive
- name: Get godot submodule commit hash
shell: bash
env:
ACTIONS_ALLOW_UNSECURE_COMMANDS: true
run: |
echo ::set-env name=GODOT_COMMIT_HASH::$(git ls-tree HEAD misc/export_templates/godot -l | cut -d\ -f3)
- name: Cache export template
uses: actions/cache@v2
id: cache-export-template
env:
cache-name: cache-export-template
with:
path: misc/export_templates/godot/bin
key: godot-${{ env.GODOT_COMMIT_HASH }}-${{ matrix.target }}-v${{ env.EXPORT_TEMPLATE_CACHE_VERSION }}
- name: Build template in docker container
if: steps.cache-export-template.outputs.cache-hit != 'true'
run: cd misc/export_templates && ./build.sh -t ${{ matrix.target }}
- name: Upload export template
uses: actions/upload-artifact@v2
with:
name: html5-gdnative-export-templates
path: misc/export_templates/godot/bin/webassembly_gdnative_${{matrix.target}}.zip
html5_export: html5_export:
name: 'HTML5 Export' name: 'HTML5 Export'
needs: [ build_docker, build_native, export_template ] needs: [ build_docker, build_native ]
runs-on: ubuntu-latest runs-on: ubuntu-latest
steps: steps:
- uses: actions/checkout@v2 - uses: actions/checkout@v2
@ -210,28 +179,27 @@ jobs:
submodules: recursive submodules: recursive
- name: Setup Godot - name: Setup Godot
uses: lihop/setup-godot@v1.0.1 uses: lihop/setup-godot@v1.0.1
with:
export-templates: true
- name: Install binary build artifacts - name: Install binary build artifacts
uses: actions/download-artifact@v2 uses: actions/download-artifact@v2
with: with:
name: libgodot-xterm-release name: libgodot-xterm-release
path: addons/godot_xterm/native/bin path: addons/godot_xterm/native/bin
- name: Install html5 export templates - name: Import assets
uses: actions/download-artifact@v2 shell: bash
with: # The GodotXterm plugin will be disabled the first time we run the editor as resources that it depends
name: html5-gdnative-export-templates # (e.g. icons) will not have been imported yet so the plugin will fail to load. Without the plugin
path: misc/export_templates/godot/bin # enabled resources imported by GodotXterm import plugins (e.g. .cast) will not be imported. Therefore,
- name: Create export directory # we need to re-enable the plugin by checking out project.godot and running the editor again.
run: mkdir -p docs/demo run: godot --editor .github/import_assets.tscn && git checkout project.godot && godot --editor .github/import_assets.tscn
- name: Export html5 - name: Export html5
run: godot --export HTML5 run: godot --no-window --export HTML5
# FIXME: HTML5 Exports not properly exporting .cast files. - name: Upload export
# So skip upload for now. uses: actions/upload-artifact@v2
#- name: Upload export with:
# uses: actions/upload-artifact@v2 name: html5-demo
# with: path: docs/demo
# name: html5-demo
# path: docs/demo
test: test:
name: 'Test' name: 'Test'

3
.gitmodules vendored
View file

@ -10,6 +10,3 @@
[submodule "addons/godot_xterm/native/thirdparty/libtsm"] [submodule "addons/godot_xterm/native/thirdparty/libtsm"]
path = addons/godot_xterm/native/thirdparty/libtsm path = addons/godot_xterm/native/thirdparty/libtsm
url = https://github.com/lihop/libtsm url = https://github.com/lihop/libtsm
[submodule "misc/export_templates/godot"]
path = misc/export_templates/godot
url = https://github.com/godotengine/godot

View file

@ -82,5 +82,5 @@ scons target=$target macos_arch=$(uname -m) disable_pty=$disable_pty -j$nproc
# Use Docker to build libgodot-xterm javascript. # Use Docker to build libgodot-xterm javascript.
if [ -x "$(command -v docker-compose)" ]; then if [ -x "$(command -v docker-compose)" ]; then
UID_GID="0:0" TARGET=$target docker-compose build javascript UID_GID="0:0" TARGET=$target docker-compose build javascript
UID_GID="$(id -u):$(id -g)" TARGET=$target docker-compose run javascript UID_GID="$(id -u):$(id -g)" TARGET=$target docker-compose run --rm javascript
fi fi

View file

@ -1,6 +1,8 @@
services: services:
javascript: javascript:
build: ../../../misc/docker build:
context: .
dockerfile: javascript.Dockerfile
user: ${UID_GID} user: ${UID_GID}
volumes: volumes:
- .:/src - .:/src

View file

@ -1,4 +1,4 @@
# For convenient building of the library and gdnative export templates targeted at the javacript platform. # For convenient building of the library and gdnative export templates targeted at the javacript platform.
FROM emscripten/emsdk:3.1.5 FROM emscripten/emsdk:2.0.25
RUN apt-get update && apt-get install pkg-config python3 -y RUN apt-get update && apt-get install pkg-config python3 -y
RUN pip3 install scons RUN pip3 install scons

View file

@ -3,5 +3,5 @@
FROM kroggen/ubuntu-16.04-gcc FROM kroggen/ubuntu-16.04-gcc
RUN apt-get update -y RUN apt-get update -y
RUN apt-get install -y python3 python3-pip gcc-multilib g++-multilib RUN apt-get install -y python3 python3-pip gcc-multilib g++-multilib
RUN pip3 install scons RUN pip3 install scons==4.3.0
CMD scons platform=linux generate_bindings=yes target=${TARGET:-release} bits=${BITS:-64} -j$(nproc) CMD scons platform=linux generate_bindings=yes target=${TARGET:-release} bits=${BITS:-64} -j$(nproc)

View file

@ -31,7 +31,7 @@ void Terminal::_populate_key_list() {
#define GLOBAL_CONSTANT(VAR) GlobalConstants::VAR #define GLOBAL_CONSTANT(VAR) GlobalConstants::VAR
#else #else
#define GLOBAL_CONSTANT(VAR) get_constant(#VAR) #define GLOBAL_CONSTANT(VAR) get_constant(#VAR)
const godot_dictionary _constants = godot_get_global_constants(); const godot_dictionary _constants = godot::api->godot_get_global_constants();
const Dictionary *constants = (Dictionary *)&_constants; const Dictionary *constants = (Dictionary *)&_constants;
auto get_constant = [constants](std::string name) -> int64_t { auto get_constant = [constants](std::string name) -> int64_t {

@ -1 +1 @@
Subproject commit f9f6767722e17a1d690f7ce975e1e7f8065b61e2 Subproject commit f4f6fac4c784da8c973ade0dbc64a9d8400ee247

0
docs/demo/.gitkeep Normal file
View file

View file

@ -13,8 +13,8 @@ script_encryption_key=""
[preset.0.options] [preset.0.options]
custom_template/debug="./misc/export_templates/godot/bin/webassembly_gdnative_debug.zip" custom_template/debug=""
custom_template/release="./misc/export_templates/godot/bin/webassembly_gdnative_release.zip" custom_template/release=""
variant/export_type=2 variant/export_type=2
vram_texture_compression/for_desktop=true vram_texture_compression/for_desktop=true
vram_texture_compression/for_mobile=false vram_texture_compression/for_mobile=false

View file

@ -1,41 +0,0 @@
set -e
# Parse args.
args=$@
while [[ $# -gt 0 ]]; do
key="$1"
case $key in
-t|--target)
target="$2"
shift
shift
;;
*)
echo "Usage: ./build.sh [-t|--target <release|debug>]";
exit 128
shift
;;
esac
done
# Set defaults.
target=${target:-debug}
# Get the absolute path to the directory this script is in.
EXPORT_TEMPLATES_DIR="$( cd "$(dirname "$0")" >/dev/null 2>&1 ; pwd -P )"
# Update git submodules.
GODOT_DIR=${EXPORT_TEMPLATES_DIR}/godot
if [ -z "$(ls -A -- "$GODOT_DIR")" ]; then
cd ${EXPORT_TEMPLATES_DIR}
git submodule update --init --recursive -- $GODOT_DIR
fi
# Use Docker to build HTML5 GDNative export templates.
UID_GID="0:0" docker-compose build javascript
UID_GID="$(id -u):$(id -g)" docker-compose run -e TARGET=$target javascript
if [ "$target" == "debug" ]; then
mv godot/bin/godot.javascript.debug.gdnative.zip godot/bin/webassembly_gdnative_debug.zip
else
mv godot/bin/godot.javascript.opt.gdnative.zip godot/bin/webassembly_gdnative_release.zip
fi

View file

@ -1,12 +0,0 @@
services:
javascript:
build: ../docker
user: ${UID_GID}
volumes:
- ./godot:/src
command:
- /bin/bash
- -c
- |
cd src
scons platform=javascript tools=no gdnative_enabled=yes target=$${TARGET} -j$$(nproc)

@ -1 +0,0 @@
Subproject commit 419e713a29f20bd3351a54d1e6c4c5af7ef4b253

View file

@ -1 +0,0 @@
HTML5 GDNative export templates are not provided, this is just a convient script/docker-compose file for building them locally.