updated cmake setup action #104
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: Continuous integration | |
on: [push, pull_request] | |
env: | |
# Only used for the cache key. Increment version to force clean build. | |
GODOT_BASE_BRANCH: master | |
concurrency: | |
group: ci-${{github.actor}}-${{github.head_ref || github.run_number}}-${{github.ref}} | |
cancel-in-progress: true | |
jobs: | |
build: | |
name: "${{ matrix.platforms.name }} (${{ matrix.builder.name }}, ${{matrix.platforms.description}})" | |
runs-on: ${{ matrix.platforms.os }} | |
strategy: | |
fail-fast: false | |
matrix: | |
# TODO: remove after CMake IOS config is ready | |
exclude: | |
- builder: | |
name: CMake | |
platforms: | |
name: π iOS | |
builder: | |
- name: SCons | |
generate_sources: | | |
scons {0} build_library=no verbose=yes | |
scons -c | |
build_godot_cpp_debug: | | |
scons {0} target=template_debug verbose=yes | |
build_debug: | | |
cd test | |
scons {0} target=template_debug build_library=no verbose=yes | |
build_release: | | |
cd test | |
scons {0} target=template_release verbose=yes | |
- name: CMake | |
generate_sources: | | |
cmake {0} -DCMAKE_C_COMPILER_LAUNCHER=ccache -D CMAKE_CXX_COMPILER_LAUNCHER=ccache -B build test | |
build_godot_cpp_debug: | | |
cmake --build build --config Debug --target godot-cpp -v | |
build_debug: | | |
cmake --build build --config Debug -v | |
build_release: | | |
cmake {0} -DCMAKE_C_COMPILER_LAUNCHER=ccache -DCMAKE_CXX_COMPILER_LAUNCHER=ccache -DTARGET=TEMPLATE_RELEASE -B build_release test | |
cmake --build build_release --config Release -v | |
platforms: | |
- name: π§ Linux | |
description: 'GCC' | |
os: ubuntu-20.04 | |
platform: linux | |
artifact-name: godot-cpp-linux-glibc2.27-x86_64-release | |
artifact-path: | |
SCons: bin/libgodot-cpp.linux.template_release.x86_64.a | |
CMake: build_release/godot-cpp/bin/Release/libgodot-cpp.linux.template_release.x86_64.a | |
flags: | |
SCons: platform=linux | |
CMake: -G "Ninja Multi-Config" | |
run-tests: true | |
cache-name: linux-x86_64 | |
- name: π§ Linux | |
description: 'GCC, Double Precision' | |
os: ubuntu-20.04 | |
platform: linux | |
artifact-name: godot-cpp-linux-glibc2.27-x86_64-double-release | |
artifact-path: | |
SCons: bin/libgodot-cpp.linux.template_release.double.x86_64.a | |
CMake: build_release/godot-cpp/bin/Release/libgodot-cpp.linux.template_release.double.x86_64.a | |
flags: | |
SCons: platform=linux precision=double | |
CMake: -G "Ninja Multi-Config" -DFLOAT_PRECISION=DOUBLE | |
run-tests: false | |
cache-name: linux-x86_64-f64 | |
- name: π Windows | |
description: 'x86_64, MSVC' | |
os: windows-2019 | |
platform: windows | |
artifact-name: godot-cpp-windows-msvc2019-x86_64-release | |
artifact-path: | |
SCons: bin/libgodot-cpp.windows.template_release.x86_64.lib | |
CMake: build_release/Release/gdexample.windows.template_release.x86_64.lib | |
flags: | |
Scons: platform=windows | |
CMake: '-G "Visual Studio 16 2019" -A x64' | |
run-tests: false | |
cache-name: windows-x86_64-msvc | |
- name: π Windows | |
description: 'x86_64, MinGW' | |
os: windows-2019 | |
platform: windows | |
artifact-name: godot-cpp-linux-mingw-x86_64-release | |
artifact-path: | |
SCons: bin/libgodot-cpp.windows.template_release.x86_64.a | |
CMake: build_release/godot-cpp/bin/Release/libgodot-cpp.windows.template_release.x86_64.a | |
flags: | |
SCons: platform=windows use_mingw=yes | |
CMake: -G "Ninja Multi-Config" | |
use-mingw: true | |
run-tests: false | |
cache-name: windows-x86_64-mingw | |
- name: π macOS | |
description: 'universal' | |
os: macos-latest | |
platform: macos | |
artifact-name: godot-cpp-macos-universal-release | |
artifact-path: | |
SCons: bin/libgodot-cpp.macos.template_release.universal.a | |
CMake: build_release/godot-cpp/bin/Release/libgodot-cpp.macos.template_release.a | |
flags: | |
SCons: platform=macos arch=universal | |
CMake: -G Xcode -DCMAKE_XCODE_ATTRIBUTE_CODE_SIGNING_ALLOWED=NO | |
run-tests: false | |
cache-name: macos-universal | |
- name: π€ Android | |
description: 'arm64' | |
os: ubuntu-20.04 | |
platform: android | |
artifact-name: godot-cpp-android-arm64-release | |
artifact-path: | |
SCons: bin/libgodot-cpp.android.template_release.arm64.a | |
CMake: build_release/godot-cpp/bin/Release/libgodot-cpp.android.template_release.arm64.a | |
flags: | |
SCons: platform=android arch=arm64 | |
CMake: --toolchain ${ANDROID_HOME}/ndk/23.2.8568313/build/cmake/android.toolchain.cmake -G "Ninja Multi-Config" -DANDROID_PLATFORM=21 | |
run-tests: false | |
cache-name: android-arm64 | |
- name: π iOS | |
description: 'arm64' | |
os: macos-latest | |
platform: ios | |
artifact-name: godot-cpp-ios-arm64-release | |
artifact-path: | |
SCons: bin/libgodot-cpp.ios.template_release.arm64.a | |
CMake: build_release/godot-cpp/bin/Release/Release/libgodot-cpp.ios.template_release.a | |
flags: | |
SCons: platform=ios arch=arm64 | |
CMake: -G Xcode -DCMAKE_XCODE_ATTRIBUTE_CODE_SIGNING_ALLOWED=NO | |
run-tests: false | |
cache-name: ios-arm64 | |
- name: π Web | |
description: 'wasm32' | |
os: ubuntu-20.04 | |
platform: web | |
artifact-name: godot-cpp-web-wasm32-release | |
artifact-path: | |
SCons: bin/libgodot-cpp.web.template_release.wasm32.a | |
CMake: build_release/godot-cpp/bin/Release/libgodot-cpp.web.template_release.wasm32.a | |
flags: | |
SCons: platform=web | |
CMake: --toolchain ${EMSDK}/upstream/emscripten/cmake/Modules/Platform/Emscripten.cmake -G "Ninja Multi-Config" | |
run-tests: false | |
cache-name: web-wasm32 | |
env: | |
SCONS_CACHE: ${{ github.workspace }}/.scons-cache/ | |
EM_VERSION: 3.1.39 | |
EM_CACHE_FOLDER: "emsdk-cache" | |
steps: | |
- name: Checkout | |
uses: actions/checkout@v4 | |
with: | |
submodules: recursive | |
- name: Setup Godot build cache | |
if: ${{ matrix.builder.name == 'SCons' }} | |
uses: ./.github/actions/godot-cache | |
with: | |
cache-name: ${{ matrix.platforms.cache-name }} | |
continue-on-error: true | |
- name: Set up Python (for SCons) | |
if: ${{ matrix.builder.name == 'SCons' }} | |
uses: actions/setup-python@v5 | |
with: | |
python-version: '3.x' | |
- name: Android dependencies | |
if: ${{ matrix.platforms.platform == 'android' }} | |
uses: nttld/setup-ndk@v1 | |
with: | |
ndk-version: r23c | |
link-to-sdk: true | |
- name: Web dependencies | |
if: ${{ matrix.platforms.platform == 'web' }} | |
uses: mymindstorm/setup-emsdk@v14 | |
with: | |
version: ${{env.EM_VERSION}} | |
actions-cache-folder: ${{env.EM_CACHE_FOLDER}} | |
- name: Install scons | |
if: ${{ matrix.builder.name == 'SCons' }} | |
run: | | |
python -m pip install scons==4.0.0 | |
- name: Install CMake | |
if: ${{ matrix.builder.name == 'CMake' }} | |
uses: jwlawson/actions-setup-cmake@v2 | |
- name: Install ccache | |
if: ${{ matrix.builder.name == 'CMake' }} | |
uses: hendrikmuhs/[email protected] | |
with: | |
key: ${{ matrix.platforms.cache-name }} | |
- name: Install Ninja | |
if: ${{ matrix.builder.name == 'CMake' }} | |
uses: ashutoshvarma/setup-ninja@master | |
- name: Generate godot-cpp sources only | |
run: ${{ format(matrix.builder.generate_sources, matrix.platforms.flags[matrix.builder.name]) }} | |
- name: Build godot-cpp (debug) | |
run: ${{ format(matrix.builder.build_godot_cpp_debug, matrix.platforms.flags[matrix.builder.name]) }} | |
- name: Build test without rebuilding godot-cpp (debug) | |
run: ${{ format(matrix.builder.build_debug, matrix.platforms.flags[matrix.builder.name]) }} | |
- name: Build test and godot-cpp (release) | |
run: ${{ format(matrix.builder.build_release, matrix.platforms.flags[matrix.builder.name]) }} | |
- name: Download latest Godot artifacts | |
uses: dsnopek/action-download-artifact@1322f74e2dac9feed2ee76a32d9ae1ca3b4cf4e9 | |
if: ${{ matrix.platforms.run-tests }} | |
with: | |
repo: godotengine/godot | |
branch: master | |
event: push | |
workflow: linux_builds.yml | |
workflow_conclusion: success | |
name: linux-editor-mono | |
search_artifacts: true | |
check_artifacts: true | |
ensure_latest: true | |
path: godot-artifacts | |
- name: Run tests | |
if: ${{ matrix.platforms.run-tests }} | |
run: | | |
chmod +x ./godot-artifacts/godot.linuxbsd.editor.x86_64.mono | |
./godot-artifacts/godot.linuxbsd.editor.x86_64.mono --headless --version | |
cd test | |
GODOT=../godot-artifacts/godot.linuxbsd.editor.x86_64.mono ./run-tests.sh | |
- name: Upload artifact | |
uses: actions/upload-artifact@v3 | |
with: | |
name: ${{ matrix.platforms.artifact-name }}-${{ matrix.builder.name }} | |
path: ${{ matrix.platforms.artifact-path[matrix.builder.name] }} | |
if-no-files-found: error | |