Skip to content

Commit

Permalink
Oh this is SO pissing me off (#783)
Browse files Browse the repository at this point in the history
  • Loading branch information
MewPurPur committed Jun 5, 2024
1 parent 7ebb6d2 commit 30b1461
Show file tree
Hide file tree
Showing 3 changed files with 125 additions and 102 deletions.
8 changes: 8 additions & 0 deletions .github/workflows/dev-desktop.yml
Original file line number Diff line number Diff line change
Expand Up @@ -22,8 +22,10 @@ jobs:
steps:
- name: Checkout repo
uses: actions/checkout@v4

- name: Set up Godot
uses: ./.github/actions/set-up-godot

- name: Set up WINE and rcedit for Windows export
run: |
# Download rcedit and install wine.
Expand All @@ -40,8 +42,10 @@ jobs:
# Add wine and rcedit paths to Godot config.
echo 'export/windows/wine = "/usr/bin/wine64"' >> ~/.config/godot/editor_settings-4.tres
echo 'export/windows/rcedit = "/home/runner/.local/share/rcedit/rcedit-x64.exe"' >> ~/.config/godot/editor_settings-4.tres
- name: Export project
uses: ./.github/actions/godot-export

- name: Upload Artifact
uses: actions/upload-artifact@v4
with:
Expand All @@ -60,16 +64,20 @@ jobs:
steps:
- name: Checkout repo
uses: actions/checkout@v4

- name: Set up Godot
uses: ./.github/actions/set-up-godot

- name: Export project
uses: ./.github/actions/godot-export

- name: Make Linux export runnable
run: |
# Set run permission.
chmod +x ~/build/${BUILD_NAME}/${PROJECT_NAME}.x86_64
cd ~/build
tar zcvf ${BUILD_NAME}.tar.gz ${BUILD_NAME}
- name: Upload Artifact
uses: actions/upload-artifact@v4
with:
Expand Down
138 changes: 49 additions & 89 deletions .github/workflows/export-optimized.yml
Original file line number Diff line number Diff line change
Expand Up @@ -4,15 +4,20 @@ on:
workflow_dispatch:

env:
GODOT_VERSION: 4.2.2
PROJECT_NAME: GodSVG
GODOT_REPO: https://github.com/godotengine/godot.git
GODOT_DIR: godot
BUILD_DIR: build
GODOT_COMMIT_HASH: 15073af
BUILD_OPTIONS: "target=template_release lto=full production=yes deprecated=no minizip=no brotli=no vulkan=no openxr=no use_volk=no disable_3d=yes modules_enabled_by_default=no module_freetype_enabled=yes module_gdscript_enabled=yes module_svg_enabled=yes module_jpg_enabled=yes module_text_server_adv_enabled=yes graphite=no module_webp_enabled=yes"
BUILD_OPTIONS: target=template_release lto=full production=yes deprecated=no minizip=no brotli=no vulkan=no openxr=no use_volk=no disable_3d=yes modules_enabled_by_default=no module_freetype_enabled=yes module_gdscript_enabled=yes module_svg_enabled=yes module_jpg_enabled=yes module_text_server_adv_enabled=yes graphite=no module_webp_enabled=yes

jobs:
build-linux:
name: Export GodSVG for Linux
runs-on: ubuntu-latest
env:
PLATFORM: "Linux/X11"
EXTENSION: "exe"
BUILD_NAME: "linux-64bit"
steps:
- name: Checkout repository
uses: actions/checkout@v3
Expand All @@ -21,105 +26,64 @@ jobs:
run: sudo apt install -y scons python3

- name: Clone Godot repository
run: git clone $GODOT_REPO $GODOT_DIR
run: git clone $GODOT_REPO godot

- name: Checkout specific commit
run: |
cd $GODOT_DIR
cd godot
git fetch
git checkout $GODOT_COMMIT_HASH
- name: Build Godot template for Linux
run: |
cd $GODOT_DIR
scons p=linuxbsd arch=x86_64 optimize=speed $BUILD_OPTIONS
mkdir -p ../$BUILD_DIR
cp bin/godot.linuxbsd.*.x86_64 ../$BUILD_DIR/godot_template_linux
cd godot
scons p=linuxbsd arch=x86_64 optimize=speed ${BUILD_OPTIONS}
- name: Lmofa
run: ls $BUILD_DIR

- name: Upload Linux template
uses: actions/upload-artifact@v3
- name: Upload artifact
uses: actions/upload-artifact@v4
with:
name: godot_template_linux
path: $BUILD_DIR/godot_template_linux
name: godot_template_linux.x86_64
path: godot/bin/godot.linuxbsd.template_release.x86_64
if-no-files-found: error
retention-days: 1

build-windows:
runs-on: windows-latest
steps:
- name: Checkout repository
uses: actions/checkout@v3

- name: Install dependencies
run: choco install scons

- name: Clone Godot repository
run: git clone $GODOT_REPO $GODOT_DIR

- name: Checkout specific commit
run: |
cd $GODOT_DIR
git fetch
git checkout $GODOT_COMMIT_HASH
- name: Build Godot template for Windows
run: |
cd $GODOT_DIR
scons p=windows arch=x86_64 optimize=speed $BUILD_OPTIONS
cp bin/godot.windows.*.64 ../$BUILD_DIR/godot_template_windows
- name: Upload Windows template
uses: actions/upload-artifact@v3
with:
name: godot_template_windows
path: $BUILD_DIR/godot_template_windows
retention-days: 1

build-web:
name: Export GodSVG for Windows
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@v3

- name: Install dependencies
run: sudo apt-get install -y scons python3

- name: Install Emscripten
run: |
git clone https://github.com/emscripten-core/emsdk.git
cd emsdk
./emsdk install latest
./emsdk activate latest
source ./emsdk_env.sh
shell: bash
sudo apt install -y scons python3
sudo apt install -y g++-mingw-w64-x86-64-posix
- name: Clone Godot repository
run: git clone $GODOT_REPO $GODOT_DIR
run: git clone $GODOT_REPO godot

- name: Checkout specific commit
run: |
cd $GODOT_DIR
cd godot
git fetch
git checkout $GODOT_COMMIT_HASH
- name: Build Godot template for Web
- name: Build Godot template for Windows
run: |
cd $GODOT_DIR
source ../emsdk/emsdk_env.sh
scons p=web arch=wasm32 javascript_eval=no optimize=size $BUILD_OPTIONS
mkdir -p ../$BUILD_DIR/godot_template_web
cp bin/godot.javascript.opt.* ../$BUILD_DIR/godot_template_web
apt search mingw
cd godot
scons p=windows target=release_debug tools=no ${BUILD_OPTIONS}
- name: Upload Web template
uses: actions/upload-artifact@v3
- name: Upload artifact
uses: actions/upload-artifact@v4
with:
name: godot_template_web
path: $BUILD_DIR/godot_template_web
name: godot_template_windows.exe
path: godot/bin/godot.windows.template_release.x86_64.exe
if-no-files-found: error
retention-days: 1

build-macos:
name: Export GodSVG for MacOS
runs-on: macos-latest
steps:
- name: Checkout repository
Expand All @@ -129,48 +93,44 @@ jobs:
run: brew install scons

- name: Clone Godot repository
run: git clone $GODOT_REPO $GODOT_DIR
run: git clone $GODOT_REPO godot

- name: Checkout specific commit
run: |
cd $GODOT_DIR
cd godot
git fetch
git checkout $GODOT_COMMIT_HASH
- name: Build Godot template for macOS (arm64 release)
run: |
cd $GODOT_DIR
scons p=macos arch=arm64 optimize=speed $BUILD_OPTIONS
mkdir -p ../$BUILD_DIR
cp bin/godot.macos.template_release.arm64 ../$BUILD_DIR/godot_template_macos_release_arm64
cd godot
scons p=macos arch=arm64 optimize=speed ${BUILD_OPTIONS}
- name: Build Godot template for macOS (x86_64 release)
run: |
cd $GODOT_DIR
scons p=macos arch=x86_64 optimize=speed $BUILD_OPTIONS
cp bin/godot.macos.template_release.x86_64 ../$BUILD_DIR/godot_template_macos_release_x86_64
cd godot
scons p=macos arch=x86_64 optimize=speed ${BUILD_OPTIONS}
- name: Combine binaries with lipo
run: |
cd $BUILD_DIR
lipo -create godot.macos.template_release.arm64 godot.macos.template_release.x86_64 -output godot_template_macos_release_universal
chmod +x godot_template_macos_*
cd godot/bin
lipo -create godot.macos.template_release.x86_64 godot.macos.template_release.arm64 -output godot.macos.template_release.universal
chmod +x *
- name: Prepare .app bundle
run: |
cp -R ~/workspace/misc/dist/macos_template.app .
cd godot/bin
cp -R ../misc/dist/macos_template.app .
mkdir -p macos_template.app/Contents/MacOS
cp godot_template_macos_debug_universal macos_template.app/Contents/MacOS/godot_macos_debug.universal
cp godot_template_macos_release_universal macos_template.app/Contents/MacOS/godot_macos_release.universal
chmod +x macos_template.app/Contents/MacOS/godot_macos*
- name: Zip the .app bundle
run: zip -q -9 -r macos.zip macos_template.app
cp godot.macos.template_release.universal macos_template.app/Contents/MacOS/godot_macos_release.universal;
chmod +x macos_template.app/Contents/MacOS/godot_macos*;
zip -q -9 -r godot_template_macos.zip macos_template.app;
- name: Upload macOS template
uses: actions/upload-artifact@v3
with:
name: godot_template_macos
path: macos.zip
name: godot_template_macos.zip
path: godot/bin/godot_template_macos.zip
if-no-files-found: error
retention-days: 1

81 changes: 68 additions & 13 deletions EXPORT_WORKFLOW.md
Original file line number Diff line number Diff line change
@@ -1,12 +1,76 @@
This is a tutorial on exporting with a custom template, which makes the executable smaller by removing unused features. It might be a bad way of doing things. I can only hope the open-sourcedness of the project will help polish up the workflow eventually.
This is a tutorial on exporting with a custom template, which makes the executable smaller by removing unused features.

## Initial setup
## Getting the export templates

This will be needed the first time.
- Go to the "Actions" tab on Github, find the "export-optimized" workflow, and run it.
- Get all of the export templates that are generated.
- Wait for it to finish.
- Open the workflow file and find the artifact.

## Getting the export templates for Web

I couldn't get Github actions to generate the web template, unfortunately. So the optimized export template has to be compiled manually.

<details>

<summary>Here's how far I got:</summary>

```yaml
build-web:
name: Export GodSVG for Web
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@v3

- name: Install dependencies
run: sudo apt-get install -y scons python3

- name: Install Emscripten
run: |
git clone https://github.com/emscripten-core/emsdk.git
cd emsdk
./emsdk install latest
./emsdk activate latest
source ./emsdk_env.sh
shell: bash

- name: Clone Godot repository
run: git clone $GODOT_REPO godot

- name: Checkout specific commit
run: |
cd godot
git fetch
git checkout $GODOT_COMMIT_HASH
- name: Build Godot template for Web
run: |
cd godot
source ../emsdk/emsdk_env.sh
scons p=web arch=wasm32 optimize=size lto=auto ${BUILD_OPTIONS}
- name: Upload artifact
uses: actions/upload-artifact@v4
with:
name: godot_template_web.zip
path: godot/bin/godot.web.template_release.wasm32.zip
if-no-files-found: error
retention-days: 1
```

</details>

- Clone or fork the Godot repository: https://github.com/godotengine/godot
- While in a CLI, go in the root folder of the Godot source code.
- Set up scons.
- For each platform you want to export for, read the documentation on how to set up scons for it. For example, https://docs.godotengine.org/en/latest/contributing/development/compiling/compiling_for_windows.html#cross-compiling-for-windows-from-other-operating-systems explains how to setup the windows platform from Linux. Use `scons p=list` to check if the platform is set up.
- Sync the local repo. For a minor version, fetching its branch might be necessary, i.e. `git fetch upstream 4.2`
- Find the commit hash of the Godot version GodSVG is using: https://github.com/godotengine/godot/releases
- `git checkout <commit hash>`
- Read the documentation on how to set up scons for web: https://docs.godotengine.org/en/latest/contributing/development/compiling/compiling_for_web.html
- Use `scons p=list` to check if the web platform is set up.
- `scons p=web arch=wasm32 target=template_release lto=full production=yes dev_build=no optimize=size deprecated=no minizip=no brotli=no vulkan=no openxr=no use_volk=no disable_3d=yes modules_enabled_by_default=no module_freetype_enabled=yes module_gdscript_enabled=yes module_svg_enabled=yes module_jpg_enabled=yes module_text_server_adv_enabled=yes graphite=no module_webp_enabled=yes`
- Wait for it to finish. The template will be in the bin directory, but avoid moving it inside the GodSVG project.

## Exporting

Expand All @@ -15,20 +79,11 @@ This will be needed the first time.
- Find the commit hash of the Godot version GodSVG is using: https://github.com/godotengine/godot/releases
- `git checkout <commit hash>`
- Run the scons command; see below.
- Wait for the compilation to finish. The template will be in the bin directory, but avoid moving it inside the GodSVG project.

For most platforms, to export, you'd need to find the relevant template in your file system to fill in the Custom Template field, then use "Export Project".

For official web exports, after this is done, you'll get a lot of files. Normally, only `GodSVG.pck` and `GodSVG.wasm` need to be changed between builds.

## Commands

- `scons p=linuxbsd arch=x86_64 target=template_release optimize=speed lto=full deprecated=no minizip=no brotli=no vulkan=no openxr=no use_volk=no disable_3d=yes modules_enabled_by_default=no module_freetype_enabled=yes module_gdscript_enabled=yes module_svg_enabled=yes module_jpg_enabled=yes module_text_server_adv_enabled=yes graphite=no module_webp_enabled=yes`

- `scons p=windows arch=x86_64 target=template_release optimize=speed lto=full deprecated=no minizip=no brotli=no vulkan=no openxr=no use_volk=no disable_3d=yes modules_enabled_by_default=no module_freetype_enabled=yes module_gdscript_enabled=yes module_svg_enabled=yes module_jpg_enabled=yes module_text_server_adv_enabled=yes graphite=no module_webp_enabled=yes`

- `scons p=web arch=wasm32 javascript_eval=no target=template_release lto=full production=yes dev_build=no optimize=size deprecated=no minizip=no brotli=no vulkan=no openxr=no use_volk=no disable_3d=yes modules_enabled_by_default=no module_freetype_enabled=yes module_gdscript_enabled=yes module_svg_enabled=yes module_jpg_enabled=yes module_text_server_adv_enabled=yes graphite=no module_webp_enabled=yes`

## Misc:

`scons --help` on the godot source lists its modules.
Expand Down

0 comments on commit 30b1461

Please sign in to comment.