mirror of
https://github.com/godotengine/godot-cpp.git
synced 2025-12-31 01:48:45 +03:00
CMake: Update CI
- Duplicated the ci.yml into ci-scons.yml and ci-cmake.yml - Replaced some manual shell commands to detect changes with tj-actions/changed-files@v45 - Conditionally run the CI depending on what files change. - Add ios toolchain from leetal/ios-cmake - Added a cmake-minimum of 3.10 to silence errors from ios toolchain
This commit is contained in:
8
.github/actions/setup-godot-cpp/action.yml
vendored
8
.github/actions/setup-godot-cpp/action.yml
vendored
@@ -22,10 +22,13 @@ inputs:
|
||||
ndk-version:
|
||||
default: r23c
|
||||
description: Android NDK version.
|
||||
buildtool:
|
||||
description: scons or cmake
|
||||
scons-version:
|
||||
default: 4.4.0
|
||||
description: SCons version.
|
||||
|
||||
|
||||
runs:
|
||||
using: composite
|
||||
steps:
|
||||
@@ -55,8 +58,13 @@ runs:
|
||||
version: ${{ inputs.mingw-version }}
|
||||
|
||||
- name: Setup SCons
|
||||
if: ${{ inputs.buildtool == 'scons' }}
|
||||
shell: bash
|
||||
run: |
|
||||
python -c "import sys; print(sys.version)"
|
||||
python -m pip install scons==${{ inputs.scons-version }}
|
||||
scons --version
|
||||
|
||||
- name: Install Ninja
|
||||
if: ${{ inputs.buildtool == 'cmake' }}
|
||||
uses: ashutoshvarma/setup-ninja@master
|
||||
|
||||
195
.github/workflows/ci-cmake.yml
vendored
Normal file
195
.github/workflows/ci-cmake.yml
vendored
Normal file
@@ -0,0 +1,195 @@
|
||||
name: Continuous integration
|
||||
on:
|
||||
workflow_call:
|
||||
|
||||
env:
|
||||
# Only used for the cache key. Increment version to force clean build.
|
||||
GODOT_BASE_BRANCH: master
|
||||
# Used to select the version of Godot to run the tests with.
|
||||
GODOT_TEST_VERSION: master
|
||||
# Use UTF-8 on Linux.
|
||||
LANG: en_US.UTF-8
|
||||
LC_ALL: en_US.UTF-8
|
||||
|
||||
concurrency:
|
||||
group: ci-cmake-${{ github.actor }}-${{ github.head_ref || github.run_number }}-${{ github.ref }}
|
||||
cancel-in-progress: true
|
||||
|
||||
jobs:
|
||||
build-cmake:
|
||||
name: ${{ matrix.name }}
|
||||
runs-on: ${{ matrix.os }}
|
||||
env:
|
||||
EM_VERSION: 3.1.39
|
||||
config-flags:
|
||||
-DCMAKE_C_COMPILER_LAUNCHER=sccache
|
||||
-DCMAKE_CXX_COMPILER_LAUNCHER=sccache
|
||||
-DGODOTCPP_ENABLE_TESTING=ON
|
||||
-DGODOTCPP_BUILD_PROFILE="test/build_profile.json"
|
||||
SCCACHE_GHA_ENABLED: "true"
|
||||
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
include:
|
||||
- name: 🐧 Linux (GCC, Makefiles)
|
||||
os: ubuntu-22.04
|
||||
platform: linux
|
||||
config-flags: -DCMAKE_BUILD_TYPE=Release
|
||||
artifact-name: godot-cpp-linux-glibc2.27-x86_64-release.cmake
|
||||
artifact-path: cmake-build/bin/libgodot-cpp.linux.template_release.x86_64.a
|
||||
run-tests: true
|
||||
|
||||
- name: 🐧 Linux (GCC, Makefiles, Double Precision)
|
||||
os: ubuntu-22.04
|
||||
platform: linux
|
||||
config-flags: -DCMAKE_BUILD_TYPE=Release -DGODOTCPP_PRECISION=double
|
||||
artifact-name: godot-cpp-linux-glibc2.27-x86_64-double-release.cmake
|
||||
artifact-path: cmake-build/bin/libgodot-cpp.linux.template_release.double.x86_64.a
|
||||
flags: precision=double
|
||||
run-tests: false
|
||||
|
||||
- name: 🏁 Windows (x86_64, MSVC)
|
||||
os: windows-2019
|
||||
platform: windows
|
||||
compiler: msvc
|
||||
build-flags: --config Release
|
||||
artifact-name: godot-cpp-windows-msvc2019-x86_64-release.cmake
|
||||
artifact-path: cmake-build/bin/libgodot-cpp.windows.template_release.x86_64.lib
|
||||
run-tests: false
|
||||
|
||||
- name: 🏁 Windows (x86_64, MinGW, Ninja)
|
||||
os: windows-2019
|
||||
platform: windows
|
||||
compiler: mingw
|
||||
config-flags:
|
||||
-GNinja -DCMAKE_BUILD_TYPE=Release
|
||||
-DCMAKE_CXX_COMPILER=cc -DCMAKE_CXX_COMPILER=c++
|
||||
artifact-name: godot-cpp-linux-mingw-x86_64-release.cmake
|
||||
artifact-path: cmake-build/bin/libgodot-cpp.windows.template_release.x86_64.a
|
||||
run-tests: false
|
||||
|
||||
- name: 🍎 macOS (universal, Makefiles)
|
||||
os: macos-latest
|
||||
platform: macos
|
||||
config-flags: -DCMAKE_OSX_ARCHITECTURES="arm64;x86_64"
|
||||
artifact-name: godot-cpp-macos-universal-release.cmake
|
||||
artifact-path: cmake-build/bin/libgodot-cpp.macos.template_release.universal.a
|
||||
run-tests: false
|
||||
|
||||
- name: 🤖 Android (arm64, Ninja)
|
||||
os: ubuntu-22.04
|
||||
platform: android
|
||||
config-flags:
|
||||
-G Ninja -DCMAKE_BUILD_TYPE=Release
|
||||
--toolchain ${ANDROID_HOME}/ndk/23.2.8568313/build/cmake/android.toolchain.cmake
|
||||
-DANDROID_PLATFORM=21 -DANDROID_ABI=arm64-v8a
|
||||
artifact-name: godot-cpp-android-arm64-release.cmake
|
||||
artifact-path: cmake-build/bin/libgodot-cpp.android.template_release.arm64.a
|
||||
flags: arch=arm64
|
||||
run-tests: false
|
||||
|
||||
- name: 🍏 iOS (arm64, XCode)
|
||||
os: macos-latest
|
||||
platform: ios
|
||||
config-flags:
|
||||
-G Xcode
|
||||
--toolchain cmake/ios.toolchain.cmake
|
||||
-DPLATFORM=OS64
|
||||
build-flags: --config Release
|
||||
artifact-name: godot-cpp-ios-arm64-release.cmake
|
||||
artifact-path: cmake-build/bin/libgodot-cpp.ios.template_release.arm64.a
|
||||
flags: arch=arm64
|
||||
run-tests: false
|
||||
|
||||
- name: 🌐 Web (wasm32, Ninja)
|
||||
os: ubuntu-22.04
|
||||
platform: web
|
||||
config-flags:
|
||||
-G Ninja -DCMAKE_BUILD_TYPE=Release
|
||||
--toolchain ${EMSDK}/upstream/emscripten/cmake/Modules/Platform/Emscripten.cmake
|
||||
artifact-name: godot-cpp-web-wasm32-release.cmake
|
||||
artifact-path: cmake-build/bin/libgodot-cpp.web.template_release.wasm32.a
|
||||
run-tests: false
|
||||
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
submodules: recursive
|
||||
|
||||
- name: Run sccache-cache
|
||||
uses: mozilla-actions/sccache-action@v0.0.7
|
||||
|
||||
- name: Setup godot-cpp
|
||||
uses: ./.github/actions/setup-godot-cpp
|
||||
with:
|
||||
platform: ${{ matrix.platform }}
|
||||
windows-compiler: ${{ matrix.compiler }}
|
||||
buildtool: cmake
|
||||
|
||||
- name: Configure godot-cpp-test with template_debug
|
||||
run: >
|
||||
cmake --log-level=VERBOSE -S . -B cmake-build ${{ env.config-flags }} ${{ matrix.config-flags }}
|
||||
|
||||
- name: Build godot-cpp-test (template_debug)
|
||||
run: >
|
||||
cmake --build cmake-build --verbose --target godot-cpp-test ${{ matrix.build-flags }}
|
||||
|
||||
- name: Configure godot-cpp-test with template_release
|
||||
run: >
|
||||
cmake --fresh --log-level=VERBOSE -S . -B cmake-build
|
||||
-DGODOTCPP_TARGET=template_release ${{ env.config-flags }} ${{ matrix.config-flags }}
|
||||
|
||||
- name: Build godot-cpp-test (template_release)
|
||||
run: >
|
||||
cmake --build cmake-build --verbose --target godot-cpp-test ${{ matrix.build-flags }}
|
||||
|
||||
- name: Run sccache stat for check
|
||||
shell: bash
|
||||
run: ${SCCACHE_PATH} --show-stats
|
||||
|
||||
- name: Download latest Godot artifacts
|
||||
uses: dsnopek/action-download-artifact@1322f74e2dac9feed2ee76a32d9ae1ca3b4cf4e9
|
||||
if: matrix.run-tests && env.GODOT_TEST_VERSION == 'master'
|
||||
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: Prepare Godot artifacts for testing
|
||||
if: matrix.run-tests && env.GODOT_TEST_VERSION == 'master'
|
||||
run: |
|
||||
chmod +x ./godot-artifacts/godot.linuxbsd.editor.x86_64.mono
|
||||
echo "GODOT=$(pwd)/godot-artifacts/godot.linuxbsd.editor.x86_64.mono" >> $GITHUB_ENV
|
||||
|
||||
- name: Download requested Godot version for testing
|
||||
if: matrix.run-tests && env.GODOT_TEST_VERSION != 'master'
|
||||
run: |
|
||||
wget "https://github.com/godotengine/godot-builds/releases/download/${GODOT_TEST_VERSION}/Godot_v${GODOT_TEST_VERSION}_linux.x86_64.zip" -O Godot.zip
|
||||
unzip -a Godot.zip
|
||||
chmod +x "Godot_v${GODOT_TEST_VERSION}_linux.x86_64"
|
||||
echo "GODOT=$(pwd)/Godot_v${GODOT_TEST_VERSION}_linux.x86_64" >> $GITHUB_ENV
|
||||
|
||||
- name: Run tests
|
||||
if: matrix.run-tests
|
||||
run: |
|
||||
$GODOT --headless --version
|
||||
cd test
|
||||
# Need to run the editor so .godot is generated... but it crashes! Ignore that :-)
|
||||
(cd project && (timeout 30 $GODOT --import --headless >/dev/null 2>&1 || true))
|
||||
./run-tests.sh
|
||||
|
||||
- name: Upload artifact
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
name: ${{ matrix.artifact-name }}
|
||||
path: ${{ matrix.artifact-path }}
|
||||
if-no-files-found: error
|
||||
@@ -12,11 +12,11 @@ env:
|
||||
LC_ALL: en_US.UTF-8
|
||||
|
||||
concurrency:
|
||||
group: ci-${{ github.actor }}-${{ github.head_ref || github.run_number }}-${{ github.ref }}
|
||||
group: ci-scons-${{ github.actor }}-${{ github.head_ref || github.run_number }}-${{ github.ref }}
|
||||
cancel-in-progress: true
|
||||
|
||||
jobs:
|
||||
build:
|
||||
build-scons:
|
||||
name: ${{ matrix.name }}
|
||||
runs-on: ${{ matrix.os }}
|
||||
strategy:
|
||||
@@ -113,6 +113,7 @@ jobs:
|
||||
with:
|
||||
platform: ${{ matrix.platform }}
|
||||
windows-compiler: ${{ contains(matrix.flags, 'use_mingw=yes') && 'mingw' || 'msvc' }}
|
||||
buildtool: scons
|
||||
|
||||
- name: Generate godot-cpp sources only
|
||||
run: |
|
||||
@@ -183,40 +184,3 @@ jobs:
|
||||
name: ${{ matrix.artifact-name }}
|
||||
path: ${{ matrix.artifact-path }}
|
||||
if-no-files-found: error
|
||||
|
||||
linux-cmake-ninja:
|
||||
name: 🐧 Build (Linux, GCC, CMake Ninja)
|
||||
runs-on: ubuntu-22.04
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
submodules: recursive
|
||||
|
||||
- name: Install dependencies
|
||||
run: |
|
||||
sudo apt-get update -qq
|
||||
sudo apt-get install -qqq build-essential pkg-config cmake ninja-build
|
||||
|
||||
- name: Build test GDExtension library
|
||||
run: |
|
||||
mkdir cmake-build
|
||||
cd cmake-build
|
||||
cmake ../ -DGODOTCPP_ENABLE_TESTING=YES -DGODOTCPP_TARGET=template_release
|
||||
cmake --build . --verbose -j $(nproc) --target godot-cpp-test --config Release
|
||||
|
||||
windows-msvc-cmake:
|
||||
name: 🏁 Build (Windows, MSVC, CMake)
|
||||
runs-on: windows-2019
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
submodules: recursive
|
||||
|
||||
- name: Build test GDExtension library
|
||||
run: |
|
||||
mkdir cmake-build
|
||||
cd cmake-build
|
||||
cmake ../ -DGODOTCPP_ENABLE_TESTING=YES -DGODOTCPP_TARGET=template_release
|
||||
cmake --build . --verbose --target godot-cpp-test --config Release
|
||||
56
.github/workflows/runner.yml
vendored
56
.github/workflows/runner.yml
vendored
@@ -9,13 +9,57 @@ jobs:
|
||||
# First stage: Only static checks, fast and prevent expensive builds from running.
|
||||
|
||||
static-checks:
|
||||
if: '!vars.DISABLE_GODOT_CI'
|
||||
name: 📊 Static Checks
|
||||
if: '!vars.DISABLE_GODOT_CI'
|
||||
uses: ./.github/workflows/static_checks.yml
|
||||
|
||||
# Second stage: Run all the builds and some of the tests.
|
||||
|
||||
ci:
|
||||
name: 🛠️ Continuous Integration
|
||||
# Second stage: Review code changes
|
||||
changes:
|
||||
name: Analyze Changes
|
||||
needs: static-checks
|
||||
uses: ./.github/workflows/ci.yml
|
||||
runs-on: ubuntu-latest
|
||||
outputs:
|
||||
sources: ${{ steps.filter.outputs.sources_any_changed }}
|
||||
scons: ${{ steps.filter.outputs.scons_any_changed }}
|
||||
cmake: ${{ steps.filter.outputs.cmake_any_changed }}
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
with:
|
||||
submodules: recursive
|
||||
- uses: tj-actions/changed-files@v45
|
||||
id: filter
|
||||
with:
|
||||
files_yaml: |
|
||||
sources:
|
||||
- '.github/workflows/*.yml'
|
||||
- '**/*.py'
|
||||
- '**/*.cpp'
|
||||
- '**/*.h'
|
||||
- 'test/build_profile.json'
|
||||
- 'gdextension/extension_api.json'
|
||||
scons:
|
||||
- '**/SConstruct'
|
||||
- '**/SCsub'
|
||||
- '**/*.py'
|
||||
cmake:
|
||||
- '**/CMakeLists.txt'
|
||||
- '**/*.cmake'
|
||||
- name: echo sources changed
|
||||
run: |
|
||||
echo sources ${{ steps.filter.outputs.sources_any_modified }}
|
||||
echo scons ${{ steps.filter.outputs.scons_any_modified }}
|
||||
echo cmake ${{ steps.filter.outputs.cmake_any_modified }}
|
||||
|
||||
# Third stage: Run all the builds and some of the tests.
|
||||
|
||||
ci-scons:
|
||||
name: 🛠️ SCons CI
|
||||
needs: changes
|
||||
if: ${{ needs.changes.outputs.scons == 'true' || needs.changes.outputs.sources == 'true' }}
|
||||
uses: ./.github/workflows/ci-scons.yml
|
||||
|
||||
ci-cmake:
|
||||
name: 🛠️ CMake CI
|
||||
needs: changes
|
||||
if: ${{ needs.changes.outputs.cmake == 'true' || needs.changes.outputs.sources == 'true' }}
|
||||
uses: ./.github/workflows/ci-cmake.yml
|
||||
|
||||
14
.github/workflows/static_checks.yml
vendored
14
.github/workflows/static_checks.yml
vendored
@@ -17,21 +17,13 @@ jobs:
|
||||
fetch-depth: 2
|
||||
|
||||
- name: Get changed files
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
run: |
|
||||
if [ "${{ github.event_name }}" == "pull_request" ]; then
|
||||
files=$(git diff-tree --no-commit-id --name-only -r HEAD^1..HEAD 2> /dev/null || true)
|
||||
elif [ "${{ github.event_name }}" == "push" -a "${{ github.event.forced }}" == "false" -a "${{ github.event.created }}" == "false" ]; then
|
||||
files=$(git diff-tree --no-commit-id --name-only -r ${{ github.event.before }}..${{ github.event.after }} 2> /dev/null || true)
|
||||
fi
|
||||
files=$(echo "$files" | grep -v 'thirdparty' | xargs -I {} sh -c 'echo "\"./{}\""' | tr '\n' ' ')
|
||||
echo "CHANGED_FILES=$files" >> $GITHUB_ENV
|
||||
id: changed-files
|
||||
uses: tj-actions/changed-files@v45
|
||||
|
||||
- name: Style checks via pre-commit
|
||||
uses: pre-commit/action@v3.0.1
|
||||
with:
|
||||
extra_args: --verbose --hook-stage manual --files ${{ env.CHANGED_FILES }}
|
||||
extra_args: --verbose --hook-stage manual --files ${{ steps.changed-files.outputs.all_changed_files }}
|
||||
|
||||
- name: Check generated files consistency
|
||||
run:
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
cmake_minimum_required(VERSION 3.17)
|
||||
cmake_minimum_required(VERSION 3.10...3.17)
|
||||
|
||||
#[=======================================================================[.rst:
|
||||
|
||||
|
||||
@@ -276,7 +276,7 @@ function(godotcpp_generate)
|
||||
string(
|
||||
CONCAT
|
||||
SYSTEM_NAME
|
||||
"$<$<PLATFORM_ID:Android>:android.${ANDROID_ABI}>"
|
||||
"$<$<PLATFORM_ID:Android>:android>"
|
||||
"$<$<PLATFORM_ID:iOS>:ios>"
|
||||
"$<$<PLATFORM_ID:Linux>:linux>"
|
||||
"$<$<PLATFORM_ID:Darwin>:macos>"
|
||||
|
||||
1147
cmake/ios.toolchain.cmake
Normal file
1147
cmake/ios.toolchain.cmake
Normal file
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user