2020-08-22 23:04:57 +02:00
|
|
|
name: 🏁 Windows Builds
|
2023-04-04 15:56:53 +02:00
|
|
|
on:
|
|
|
|
workflow_call:
|
2020-07-21 00:36:22 +02:00
|
|
|
|
2020-10-09 22:18:51 +02:00
|
|
|
# Global Settings
|
2020-07-21 00:36:22 +02:00
|
|
|
# SCONS_CACHE for windows must be set in the build environment
|
|
|
|
env:
|
2023-05-18 16:22:25 +02:00
|
|
|
# Used for the cache key. Add version suffix to force clean build.
|
2022-08-25 13:44:22 +02:00
|
|
|
GODOT_BASE_BRANCH: master
|
2024-08-29 17:33:29 +02:00
|
|
|
SCONSFLAGS: verbose=yes warnings=extra werror=yes module_text_server_fb_enabled=yes d3d12=yes strict_checks=yes "angle_libs=${{github.workspace}}/"
|
2020-07-21 00:36:22 +02:00
|
|
|
SCONS_CACHE_MSVC_CONFIG: true
|
|
|
|
|
2021-08-24 20:49:06 +02:00
|
|
|
concurrency:
|
2021-08-25 15:04:05 +02:00
|
|
|
group: ci-${{github.actor}}-${{github.head_ref || github.run_number}}-${{github.ref}}-windows
|
2021-08-24 20:49:06 +02:00
|
|
|
cancel-in-progress: true
|
|
|
|
|
2020-07-21 00:36:22 +02:00
|
|
|
jobs:
|
2021-09-01 17:26:01 +02:00
|
|
|
build-windows:
|
2020-07-21 00:36:22 +02:00
|
|
|
# Windows 10 with latest image
|
|
|
|
runs-on: "windows-latest"
|
2021-09-01 17:26:01 +02:00
|
|
|
name: ${{ matrix.name }}
|
|
|
|
strategy:
|
|
|
|
fail-fast: false
|
|
|
|
matrix:
|
|
|
|
include:
|
SCons: Unify tools/target build type configuration
Implements https://github.com/godotengine/godot-proposals/issues/3371.
New `target` presets
====================
The `tools` option is removed and `target` changes to use three new presets,
which match the builds users are familiar with. These targets control the
default optimization level and enable editor-specific and debugging code:
- `editor`: Replaces `tools=yes target=release_debug`.
* Defines: `TOOLS_ENABLED`, `DEBUG_ENABLED`, `-O2`/`/O2`
- `template_debug`: Replaces `tools=no target=release_debug`.
* Defines: `DEBUG_ENABLED`, `-O2`/`/O2`
- `template_release`: Replaces `tools=no target=release`.
* Defines: `-O3`/`/O2`
New `dev_build` option
======================
The previous `target=debug` is now replaced by a separate `dev_build=yes`
option, which can be used in combination with either of the three targets,
and changes the following:
- `dev_build`: Defines `DEV_ENABLED`, disables optimization (`-O0`/`/0d`),
enables generating debug symbols, does not define `NDEBUG` so `assert()`
works in thirdparty libraries, adds a `.dev` suffix to the binary name.
Note: Unlike previously, `dev_build` defaults to off so that users who
compile Godot from source get an optimized and small build by default.
Engine contributors should now set `dev_build=yes` in their build scripts or
IDE configuration manually.
Changed binary names
====================
The name of generated binaries and object files are changed too, to follow
this format:
`godot.<platform>.<target>[.dev][.double].<arch>[.<extra_suffix>][.<ext>]`
For example:
- `godot.linuxbsd.editor.dev.arm64`
- `godot.windows.template_release.double.x86_64.mono.exe`
Be sure to update your links/scripts/IDE config accordingly.
More flexible `optimize` and `debug_symbols` options
====================================================
The optimization level and whether to generate debug symbols can be further
specified with the `optimize` and `debug_symbols` options. So the default
values listed above for the various `target` and `dev_build` combinations
are indicative and can be replaced when compiling, e.g.:
`scons p=linuxbsd target=template_debug dev_build=yes optimize=debug`
will make a "debug" export template with dev-only code enabled, `-Og`
optimization level for GCC/Clang, and debug symbols. Perfect for debugging
complex crashes at runtime in an exported project.
2022-09-22 08:28:55 +02:00
|
|
|
- name: Editor (target=editor, tests=yes)
|
2021-09-01 17:26:01 +02:00
|
|
|
cache-name: windows-editor
|
SCons: Unify tools/target build type configuration
Implements https://github.com/godotengine/godot-proposals/issues/3371.
New `target` presets
====================
The `tools` option is removed and `target` changes to use three new presets,
which match the builds users are familiar with. These targets control the
default optimization level and enable editor-specific and debugging code:
- `editor`: Replaces `tools=yes target=release_debug`.
* Defines: `TOOLS_ENABLED`, `DEBUG_ENABLED`, `-O2`/`/O2`
- `template_debug`: Replaces `tools=no target=release_debug`.
* Defines: `DEBUG_ENABLED`, `-O2`/`/O2`
- `template_release`: Replaces `tools=no target=release`.
* Defines: `-O3`/`/O2`
New `dev_build` option
======================
The previous `target=debug` is now replaced by a separate `dev_build=yes`
option, which can be used in combination with either of the three targets,
and changes the following:
- `dev_build`: Defines `DEV_ENABLED`, disables optimization (`-O0`/`/0d`),
enables generating debug symbols, does not define `NDEBUG` so `assert()`
works in thirdparty libraries, adds a `.dev` suffix to the binary name.
Note: Unlike previously, `dev_build` defaults to off so that users who
compile Godot from source get an optimized and small build by default.
Engine contributors should now set `dev_build=yes` in their build scripts or
IDE configuration manually.
Changed binary names
====================
The name of generated binaries and object files are changed too, to follow
this format:
`godot.<platform>.<target>[.dev][.double].<arch>[.<extra_suffix>][.<ext>]`
For example:
- `godot.linuxbsd.editor.dev.arm64`
- `godot.windows.template_release.double.x86_64.mono.exe`
Be sure to update your links/scripts/IDE config accordingly.
More flexible `optimize` and `debug_symbols` options
====================================================
The optimization level and whether to generate debug symbols can be further
specified with the `optimize` and `debug_symbols` options. So the default
values listed above for the various `target` and `dev_build` combinations
are indicative and can be replaced when compiling, e.g.:
`scons p=linuxbsd target=template_debug dev_build=yes optimize=debug`
will make a "debug" export template with dev-only code enabled, `-Og`
optimization level for GCC/Clang, and debug symbols. Perfect for debugging
complex crashes at runtime in an exported project.
2022-09-22 08:28:55 +02:00
|
|
|
target: editor
|
2021-09-01 17:26:01 +02:00
|
|
|
tests: true
|
2022-03-30 10:16:03 +02:00
|
|
|
# Skip debug symbols, they're way too big with MSVC.
|
Add new VS proj generation logic that supports any platform that wants to opt in
Custom Visual Studio project generation logic that supports any platform that has a msvs.py
script, so Visual Studio can be used to run scons for any platform, with the right defines per target.
Invoked with `scons vsproj=yes`
To generate build configuration files for all platforms+targets+arch combinations, users should call
```
scons vsproj=yes platform=XXX target=YYY [other build flags]
```
for each combination of platform+target[+arch]. This will generate the relevant vs project files but
skip the build process, so that project files can be quickly generated without waiting for a command line
build. This lets project files be quickly generated even if there are build errors.
All possible combinations of platform+target are created in the solution file by default, but they
won't do anything until each one is set up with a scons vsproj=yes command for the respective platform
in the appropriate command line. This lets users only generate the combinations they need, and VS
won't have to parse settings for other combos.
Only platforms that opt in to vs proj generation by having a msvs.py file in the platform folder are included.
Platforms with a msvs.py file will be added to the solution, but only the current active platform+target+arch
will have a build configuration generated, because we only know what the right defines/includes/flags/etc are
on the active build target currently being processed by scons.
Platforms that don't support an editor target will have a dummy editor target that won't do anything on build,
but will have the files and configuration for the windows editor target.
To generate AND build from the command line, run
```
scons vsproj=yes vsproj_gen_only=no
```
2023-11-14 13:39:44 +01:00
|
|
|
sconsflags: debug_symbols=no vsproj=yes vsproj_gen_only=no windows_subsystem=console
|
SCons: Unify tools/target build type configuration
Implements https://github.com/godotengine/godot-proposals/issues/3371.
New `target` presets
====================
The `tools` option is removed and `target` changes to use three new presets,
which match the builds users are familiar with. These targets control the
default optimization level and enable editor-specific and debugging code:
- `editor`: Replaces `tools=yes target=release_debug`.
* Defines: `TOOLS_ENABLED`, `DEBUG_ENABLED`, `-O2`/`/O2`
- `template_debug`: Replaces `tools=no target=release_debug`.
* Defines: `DEBUG_ENABLED`, `-O2`/`/O2`
- `template_release`: Replaces `tools=no target=release`.
* Defines: `-O3`/`/O2`
New `dev_build` option
======================
The previous `target=debug` is now replaced by a separate `dev_build=yes`
option, which can be used in combination with either of the three targets,
and changes the following:
- `dev_build`: Defines `DEV_ENABLED`, disables optimization (`-O0`/`/0d`),
enables generating debug symbols, does not define `NDEBUG` so `assert()`
works in thirdparty libraries, adds a `.dev` suffix to the binary name.
Note: Unlike previously, `dev_build` defaults to off so that users who
compile Godot from source get an optimized and small build by default.
Engine contributors should now set `dev_build=yes` in their build scripts or
IDE configuration manually.
Changed binary names
====================
The name of generated binaries and object files are changed too, to follow
this format:
`godot.<platform>.<target>[.dev][.double].<arch>[.<extra_suffix>][.<ext>]`
For example:
- `godot.linuxbsd.editor.dev.arm64`
- `godot.windows.template_release.double.x86_64.mono.exe`
Be sure to update your links/scripts/IDE config accordingly.
More flexible `optimize` and `debug_symbols` options
====================================================
The optimization level and whether to generate debug symbols can be further
specified with the `optimize` and `debug_symbols` options. So the default
values listed above for the various `target` and `dev_build` combinations
are indicative and can be replaced when compiling, e.g.:
`scons p=linuxbsd target=template_debug dev_build=yes optimize=debug`
will make a "debug" export template with dev-only code enabled, `-Og`
optimization level for GCC/Clang, and debug symbols. Perfect for debugging
complex crashes at runtime in an exported project.
2022-09-22 08:28:55 +02:00
|
|
|
bin: "./bin/godot.windows.editor.x86_64.exe"
|
2024-05-24 15:07:22 +02:00
|
|
|
artifact: true
|
|
|
|
|
|
|
|
- name: Editor w/ clang-cl (target=editor, tests=yes, use_llvm=yes)
|
|
|
|
cache-name: windows-editor-clang
|
|
|
|
target: editor
|
|
|
|
tests: true
|
|
|
|
sconsflags: debug_symbols=no windows_subsystem=console use_llvm=yes
|
|
|
|
bin: ./bin/godot.windows.editor.x86_64.llvm.exe
|
2021-09-01 17:26:01 +02:00
|
|
|
|
2023-04-05 14:10:27 +02:00
|
|
|
- name: Template (target=template_release)
|
2021-09-01 17:26:01 +02:00
|
|
|
cache-name: windows-template
|
SCons: Unify tools/target build type configuration
Implements https://github.com/godotengine/godot-proposals/issues/3371.
New `target` presets
====================
The `tools` option is removed and `target` changes to use three new presets,
which match the builds users are familiar with. These targets control the
default optimization level and enable editor-specific and debugging code:
- `editor`: Replaces `tools=yes target=release_debug`.
* Defines: `TOOLS_ENABLED`, `DEBUG_ENABLED`, `-O2`/`/O2`
- `template_debug`: Replaces `tools=no target=release_debug`.
* Defines: `DEBUG_ENABLED`, `-O2`/`/O2`
- `template_release`: Replaces `tools=no target=release`.
* Defines: `-O3`/`/O2`
New `dev_build` option
======================
The previous `target=debug` is now replaced by a separate `dev_build=yes`
option, which can be used in combination with either of the three targets,
and changes the following:
- `dev_build`: Defines `DEV_ENABLED`, disables optimization (`-O0`/`/0d`),
enables generating debug symbols, does not define `NDEBUG` so `assert()`
works in thirdparty libraries, adds a `.dev` suffix to the binary name.
Note: Unlike previously, `dev_build` defaults to off so that users who
compile Godot from source get an optimized and small build by default.
Engine contributors should now set `dev_build=yes` in their build scripts or
IDE configuration manually.
Changed binary names
====================
The name of generated binaries and object files are changed too, to follow
this format:
`godot.<platform>.<target>[.dev][.double].<arch>[.<extra_suffix>][.<ext>]`
For example:
- `godot.linuxbsd.editor.dev.arm64`
- `godot.windows.template_release.double.x86_64.mono.exe`
Be sure to update your links/scripts/IDE config accordingly.
More flexible `optimize` and `debug_symbols` options
====================================================
The optimization level and whether to generate debug symbols can be further
specified with the `optimize` and `debug_symbols` options. So the default
values listed above for the various `target` and `dev_build` combinations
are indicative and can be replaced when compiling, e.g.:
`scons p=linuxbsd target=template_debug dev_build=yes optimize=debug`
will make a "debug" export template with dev-only code enabled, `-Og`
optimization level for GCC/Clang, and debug symbols. Perfect for debugging
complex crashes at runtime in an exported project.
2022-09-22 08:28:55 +02:00
|
|
|
target: template_release
|
2024-07-17 12:15:13 +02:00
|
|
|
tests: true
|
|
|
|
sconsflags: debug_symbols=no tests=yes
|
|
|
|
bin: "./bin/godot.windows.template_release.x86_64.console.exe"
|
2024-05-24 15:07:22 +02:00
|
|
|
artifact: true
|
2020-07-21 00:36:22 +02:00
|
|
|
|
|
|
|
steps:
|
2023-09-04 16:05:38 +02:00
|
|
|
- uses: actions/checkout@v4
|
2024-03-16 03:52:47 +01:00
|
|
|
with:
|
|
|
|
submodules: recursive
|
2021-09-01 17:26:01 +02:00
|
|
|
|
2024-07-13 15:50:30 +02:00
|
|
|
- name: Restore Godot build cache
|
|
|
|
uses: ./.github/actions/godot-cache-restore
|
2021-09-01 17:26:01 +02:00
|
|
|
with:
|
|
|
|
cache-name: ${{ matrix.cache-name }}
|
|
|
|
continue-on-error: true
|
|
|
|
|
2024-05-17 09:28:56 +02:00
|
|
|
- name: Setup Python and SCons
|
2021-09-01 17:26:01 +02:00
|
|
|
uses: ./.github/actions/godot-deps
|
|
|
|
|
2023-12-13 17:58:38 +01:00
|
|
|
- name: Download Direct3D 12 SDK components
|
|
|
|
run: python ./misc/scripts/install_d3d12_sdk_windows.py
|
2023-01-09 16:56:16 +01:00
|
|
|
|
2023-10-30 07:56:23 +01:00
|
|
|
- name: Download pre-built ANGLE static libraries
|
|
|
|
uses: dsaltares/fetch-gh-release-asset@1.1.2
|
|
|
|
with:
|
|
|
|
repo: godotengine/godot-angle-static
|
|
|
|
version: tags/chromium/6029
|
|
|
|
file: Windows.6029-1.MSVC_17.x86_64.x86_32.zip
|
|
|
|
target: angle/angle.zip
|
|
|
|
|
|
|
|
- name: Extract pre-built ANGLE static libraries
|
|
|
|
run: Expand-Archive -Force angle/angle.zip ${{github.workspace}}/
|
|
|
|
|
2022-11-11 22:23:59 +01:00
|
|
|
- name: Setup MSVC problem matcher
|
|
|
|
uses: ammaraskar/msvc-problem-matcher@master
|
|
|
|
|
2021-09-01 17:26:01 +02:00
|
|
|
- name: Compilation
|
|
|
|
uses: ./.github/actions/godot-build
|
|
|
|
with:
|
2021-09-21 21:54:55 +02:00
|
|
|
sconsflags: ${{ env.SCONSFLAGS }} ${{ matrix.sconsflags }}
|
2021-09-01 17:26:01 +02:00
|
|
|
platform: windows
|
|
|
|
target: ${{ matrix.target }}
|
|
|
|
tests: ${{ matrix.tests }}
|
|
|
|
|
2024-07-13 15:50:30 +02:00
|
|
|
- name: Save Godot build cache
|
|
|
|
uses: ./.github/actions/godot-cache-save
|
|
|
|
with:
|
|
|
|
cache-name: ${{ matrix.cache-name }}
|
|
|
|
continue-on-error: true
|
|
|
|
|
2021-09-21 21:54:55 +02:00
|
|
|
- name: Prepare artifact
|
2024-05-24 15:07:22 +02:00
|
|
|
if: ${{ matrix.artifact }}
|
2021-09-21 21:54:55 +02:00
|
|
|
run: |
|
|
|
|
Remove-Item bin/* -Include *.exp,*.lib,*.pdb -Force
|
|
|
|
|
2021-09-01 17:26:01 +02:00
|
|
|
- name: Upload artifact
|
2024-05-24 15:07:22 +02:00
|
|
|
if: ${{ matrix.artifact }}
|
2021-09-01 17:26:01 +02:00
|
|
|
uses: ./.github/actions/upload-artifact
|
|
|
|
with:
|
|
|
|
name: ${{ matrix.cache-name }}
|
2023-08-01 20:38:07 +02:00
|
|
|
|
|
|
|
- name: Unit tests
|
|
|
|
if: ${{ matrix.tests }}
|
|
|
|
run: |
|
|
|
|
${{ matrix.bin }} --version
|
|
|
|
${{ matrix.bin }} --help
|
2023-10-28 09:22:27 +02:00
|
|
|
${{ matrix.bin }} --test --force-colors
|