Skip to content

Add C++20 module build target #6896

Add C++20 module build target

Add C++20 module build target #6896

Workflow file for this run

name: CI
on: [ push, pull_request ]
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true
jobs:
typos:
runs-on: ubuntu-latest
name: typos
steps:
- uses: actions/checkout@v4
- uses: crate-ci/typos@master
build-linux:
runs-on: ubuntu-latest
timeout-minutes: 30
strategy:
fail-fast: false
steps:
- uses: actions/checkout@v4
- name: install bake
run: |
git clone https://github.com/SanderMertens/bake
make -C bake/build-$(uname)
bake/bake setup
- name: build flecs
run: |
bake --strict
build-macos:
runs-on: macOS-latest
timeout-minutes: 30
strategy:
fail-fast: false
steps:
- uses: actions/checkout@v4
- name: install bake
run: |
git clone https://github.com/SanderMertens/bake
make -C bake/build-$(uname)
bake/bake setup
- name: build flecs
run: |
bake --strict
build-windows:
runs-on: windows-latest
timeout-minutes: 30
strategy:
fail-fast: false
steps:
- uses: actions/checkout@v4
- uses: ilammy/msvc-dev-cmd@v1
- name: install bake
run: |
git clone https://github.com/SanderMertens/bake
cd bake\build-Windows
nmake
cd ..
./bake setup --local
- name: build flecs (debug)
run: bake/bake --strict --cfg debug
- name: build flecs (release)
run: bake/bake --strict --cfg release
- name: build examples (debug)
run: bake/bake examples --strict --cfg debug
- name: build examples (release)
run: bake/bake examples --strict --cfg debug
build-msys:
runs-on: windows-latest
timeout-minutes: 30
strategy:
fail-fast: false
matrix:
include:
- { sys: mingw64 }
- { sys: mingw32 }
- { sys: ucrt64 }
- { sys: clang64 }
defaults:
run:
shell: msys2 {0}
steps:
- uses: actions/checkout@v4
- uses: msys2/setup-msys2@v2
with:
msystem: ${{matrix.sys}}
update: true
install: >-
curl
git
pacboy: >-
toolchain:p
cmake:p
- name: create cmake build folders
run: |
mkdir cmake_build
mkdir examples/c/cmake_build
mkdir examples/cpp/cmake_build
- name: build flecs
working-directory: cmake_build
run: |
cmake -G "MinGW Makefiles" -DFLECS_STRICT=ON ..
cmake --build . -j 4
- name: build c examples
working-directory: examples/c/cmake_build
run: |
cmake -G "MinGW Makefiles" -DFLECS_STRICT=ON ..
cmake --build . -j 4
- name: build c++ examples
working-directory: examples/cpp/cmake_build
run: |
cmake -G "MinGW Makefiles" -DFLECS_STRICT=ON ..
cmake --build . -j 4
build:
needs: build-linux
runs-on: ${{ matrix.target.os }}
timeout-minutes: 30
strategy:
fail-fast: false
matrix:
target:
- { os: ubuntu-20.04, cc: gcc-7, cxx: g++-7 }
- { os: ubuntu-20.04, cc: gcc-8, cxx: g++-8 }
- { os: ubuntu-20.04, cc: gcc-9, cxx: g++-9 }
- { os: ubuntu-20.04, cc: gcc-10, cxx: g++-10 }
- { os: ubuntu-latest, cc: gcc-11, cxx: g++-11 }
- { os: ubuntu-latest, cc: gcc-12, cxx: g++-12 }
- { os: ubuntu-24.04, cc: gcc-13, cxx: g++-13 }
- { os: ubuntu-20.04, cc: clang-8, cxx: clang++-8 }
- { os: ubuntu-20.04, cc: clang-9, cxx: clang++-9 }
- { os: ubuntu-20.04, cc: clang-10, cxx: clang++-10 }
- { os: ubuntu-20.04, cc: clang-11, cxx: clang++-11 }
- { os: ubuntu-20.04, cc: clang-12, cxx: clang++-12 }
- { os: ubuntu-latest, cc: clang-13, cxx: clang++-13 }
- { os: ubuntu-latest, cc: clang-14, cxx: clang++-14 }
- { os: ubuntu-latest, cc: clang-15, cxx: clang++-15 }
env:
CC: ${{ matrix.target.cc }}
CXX: ${{ matrix.target.cxx }}
steps:
- uses: actions/checkout@v4
- name: install compiler
run: |
sudo apt-get update
sudo apt-get install -y ${{ matrix.target.cc }}
sudo apt-get install -y ${{ matrix.target.cxx }}
- name: install bake
run: |
git clone https://github.com/SanderMertens/bake
make -C bake/build-$(uname)
bake/bake setup
- name: build flecs (debug)
run: |
bake --strict --cfg debug
- name: build flecs (release)
run: |
bake --strict --cfg release
- name: build examples (debug)
run: |
bake examples/c --strict --cfg debug
bake examples/cpp --strict --cfg debug
bake examples/os_api --strict --cfg debug
- name: build examples (release)
run: |
bake examples/c --strict --cfg release
bake examples/cpp --strict --cfg release
bake examples/os_api --strict --cfg release
build-cmake:
needs: build-linux
runs-on: ${{ matrix.os }}
timeout-minutes: 30
strategy:
fail-fast: false
matrix:
os: [ ubuntu-latest, macOS-latest, macOS-14 ]
steps:
- uses: actions/checkout@v4
- name: create cmake build folders
run: |
mkdir cmake_build
mkdir examples/c/cmake_build
mkdir examples/cpp/cmake_build
- name: build flecs
working-directory: cmake_build
run: |
cmake -DFLECS_STRICT=ON ..
cmake --build . -j 4
- name: build c examples
working-directory: examples/c/cmake_build
run: |
cmake -DFLECS_STRICT=ON ..
cmake --build . -j 4
- name: build c++ examples
working-directory: examples/cpp/cmake_build
run: |
cmake -DFLECS_STRICT=ON ..
cmake --build . -j 4
build-cmake-windows:
needs: build-windows
runs-on: windows-latest
timeout-minutes: 30
strategy:
matrix:
toolset: [default, v142, clang-cl]
include:
- toolset: v142
toolset_option: -T"v142"
- toolset: clang-cl
toolset_option: -T"ClangCl"
steps:
- uses: actions/checkout@v4
- name: create cmake build folders
run: |
mkdir cmake_build
mkdir examples/c/cmake_build
mkdir examples/cpp/cmake_build
- name: build flecs
working-directory: cmake_build
run: |
cmake ${{ matrix.toolset_option }} -DFLECS_STRICT=ON ..
cmake --build . -j 4
- name: build c examples
working-directory: examples/c/cmake_build
run: |
cmake ${{ matrix.toolset_option }} -DFLECS_STRICT=ON ..
cmake --build . -j 4
- name: build c++ examples
working-directory: examples/cpp/cmake_build
run: |
cmake ${{ matrix.toolset_option }} -DFLECS_STRICT=ON ..
cmake --build . -j 4
build-meson:
needs: build-linux
runs-on: ubuntu-latest
timeout-minutes: 30
strategy:
fail-fast: false
steps:
- uses: actions/checkout@v4
- name: install meson
run: |
pip3 install meson
pip3 install ninja==1.10.2.4
- name: create build folder
run: meson meson_build
- name: build flecs
working-directory: meson_build
run: |
meson compile
build-bazel-linux:
needs: build-linux
runs-on: ubuntu-latest
timeout-minutes: 30
steps:
- uses: actions/checkout@v4
- name: build flecs
run: bazel build //:flecs
- name: build examples
run: bazel build //examples/...
- name: run tests
run: bazel test //test/...
build-bazel-windows:
needs: build-windows
runs-on: windows-latest
timeout-minutes: 30
steps:
- uses: actions/checkout@v4
- name: build flecs
run: bazel build //:flecs
- name: build examples
run: bazel build //examples/...
- name: run tests
run: bazel test //test/...
build-custom:
needs: build-linux
runs-on: ubuntu-latest
timeout-minutes: 30
strategy:
fail-fast: false
matrix:
compiler: [ gcc, clang ]
steps:
- uses: actions/checkout@v4
- name: Install bake
run: |
git clone https://github.com/SanderMertens/bake
make -C bake/build-$(uname)
bake/bake setup
- name: FLECS_SOFT_ASSERT flag
run: |
bake rebuild --strict -D FLECS_SOFT_ASSERT
bake rebuild --strict --cfg release -D FLECS_SOFT_ASSERT
- name: FLECS_KEEP_ASSERT flag
run: |
bake rebuild --strict -D FLECS_KEEP_ASSERT
bake rebuild --strict --cfg release -D FLECS_KEEP_ASSERT
- name: no extensions
run: |
bake rebuild --strict -D FLECS_CUSTOM_BUILD
bake rebuild --strict --cfg release -D FLECS_CUSTOM_BUILD
- name: FLECS_SYSTEM
run: |
bake rebuild --strict -D FLECS_CUSTOM_BUILD -D FLECS_SYSTEM
bake rebuild --strict --cfg release -D FLECS_CUSTOM_BUILD -D FLECS_SYSTEM
- name: FLECS_PIPELINE
run: |
bake rebuild --strict -D FLECS_CUSTOM_BUILD -D FLECS_PIPELINE
bake rebuild --strict --cfg release -D FLECS_CUSTOM_BUILD -D FLECS_PIPELINE
- name: FLECS_TIMER
run: |
bake rebuild --strict -D FLECS_CUSTOM_BUILD -D FLECS_TIMER
bake rebuild --strict --cfg release -D FLECS_CUSTOM_BUILD -D FLECS_TIMER
- name: FLECS_MODULE
run: |
bake rebuild --strict -D FLECS_CUSTOM_BUILD -D FLECS_MODULE
bake rebuild --strict --cfg release -D FLECS_CUSTOM_BUILD -D FLECS_MODULE
- name: FLECS_STATS
run: |
bake rebuild --strict -D FLECS_CUSTOM_BUILD -D FLECS_STATS
bake rebuild --strict --cfg release -D FLECS_CUSTOM_BUILD -D FLECS_STATS
- name: FLECS_SCRIPT
run: |
bake rebuild --strict -D FLECS_CUSTOM_BUILD -D FLECS_SCRIPT
bake rebuild --strict --cfg release -D FLECS_CUSTOM_BUILD -D FLECS_SCRIPT
- name: FLECS_META
run: |
bake rebuild --strict -D FLECS_CUSTOM_BUILD -D FLECS_META
bake rebuild --strict --cfg release -D FLECS_CUSTOM_BUILD -D FLECS_META
- name: FLECS_JSON
run: |
bake rebuild --strict -D FLECS_CUSTOM_BUILD -D FLECS_JSON
bake rebuild --strict --cfg release -D FLECS_CUSTOM_BUILD -D FLECS_JSON
- name: FLECS_DOC
run: |
bake rebuild --strict -D FLECS_CUSTOM_BUILD -D FLECS_DOC
bake rebuild --strict --cfg release -D FLECS_CUSTOM_BUILD -D FLECS_DOC
- name: FLECS_LOG
run: |
bake rebuild --strict -D FLECS_CUSTOM_BUILD -D FLECS_LOG
bake rebuild --strict --cfg release -D FLECS_CUSTOM_BUILD -D FLECS_LOG
- name: FLECS_APP
run: |
bake rebuild --strict -D FLECS_CUSTOM_BUILD -D FLECS_APP
bake rebuild --strict --cfg release -D FLECS_CUSTOM_BUILD -D FLECS_APP
- name: FLECS_OS_API_IMPL
run: |
bake rebuild --strict -D FLECS_CUSTOM_BUILD -D FLECS_OS_API_IMPL
bake rebuild --strict --cfg release -D FLECS_CUSTOM_BUILD -D FLECS_OS_API_IMPL
- name: FLECS_HTTP
run: |
bake rebuild --strict -D FLECS_CUSTOM_BUILD -D FLECS_HTTP
bake rebuild --strict --cfg release -D FLECS_CUSTOM_BUILD -D FLECS_HTTP
- name: FLECS_REST
run: |
bake rebuild --strict -D FLECS_CUSTOM_BUILD -D FLECS_REST
bake rebuild --strict --cfg release -D FLECS_CUSTOM_BUILD -D FLECS_REST
- name: FLECS_NO_LOG
run: |
bake rebuild --strict -D FLECS_NO_LOG
bake rebuild --strict --cfg release -D FLECS_NO_LOG
- name: FLECS_DEFAULT
run: |
bake rebuild --strict
bake rebuild --strict --cfg release
- name: custom_build tests
run: |
bake rebuild test/custom_builds --strict
bake runall test/custom_builds
build-amalgamated:
needs: build-linux
runs-on: ubuntu-latest
timeout-minutes: 30
strategy:
fail-fast: false
matrix:
compiler: [ gcc, clang ]
steps:
- uses: actions/checkout@v4
- name: build flecs
run: ${{ matrix.compiler }} distr/flecs.c --shared -fPIC -pedantic -Wall -Wextra -Wno-unused-parameter -Werror -Wshadow -Wconversion -Wno-missing-field-initializers
test-amalgamated:
needs: build-linux
runs-on: ubuntu-latest
timeout-minutes: 30
strategy:
fail-fast: false
steps:
- uses: actions/checkout@v4
- name: install bake
run: |
git clone https://github.com/SanderMertens/bake
make -C bake/build-$(uname)
bake/bake setup
- name: build flecs
run: bake rebuild
- name: git diff check
run: git diff --quiet
build-scan-build:
needs: build-linux
runs-on: ubuntu-latest
timeout-minutes: 30
strategy:
fail-fast: false
steps:
- uses: actions/checkout@v4
- name: install clang-build
run: |
sudo apt-get install -y clang-tools
- name: install bake
run: |
git clone https://github.com/SanderMertens/bake
make -C bake/build-$(uname)
bake/bake setup
- name: run scan-build
run: |
scan-build --status-bugs bake
test-c-unix:
needs: [build-linux, build-macos]
runs-on: ${{ matrix.os }}
timeout-minutes: 30
strategy:
fail-fast: false
matrix:
os: [ ubuntu-latest, macOS-latest, macOS-14 ]
steps:
- uses: actions/checkout@v4
- name: compiler version
run: |
gcc --version
clang --version
- name: install bake
run: |
git clone https://github.com/SanderMertens/bake
make -C bake/build-$(uname)
bake/bake setup
- name: build flecs
run: bake --strict
- name: test core
run: bake run test/core -- -j 8
- name: test query
run: bake run test/query -- -j 8
- name: test addons
run: bake run test/addons -- -j 8
- name: test meta
run: bake run test/meta -- -j 8
- name: test script
run: bake run test/script -- -j 8
- name: test collections
run: bake run test/collections -- -j 8
test-cpp-unix:
needs: [build-linux]
runs-on: ${{ matrix.target.os }}
timeout-minutes: 30
strategy:
fail-fast: false
matrix:
target:
- { os: ubuntu-20.04, cc: gcc-9, cxx: g++-9 }
- { os: ubuntu-20.04, cc: gcc-10, cxx: g++-10 }
- { os: ubuntu-22.04, cc: gcc-11, cxx: g++-11 }
- { os: ubuntu-latest, cc: gcc-12, cxx: g++-12 }
- { os: ubuntu-24.04, cc: gcc-13, cxx: g++-13 }
- { os: ubuntu-20.04, cc: clang-8, cxx: clang++-8 }
- { os: ubuntu-20.04, cc: clang-9, cxx: clang++-9 }
- { os: ubuntu-20.04, cc: clang-10, cxx: clang++-10 }
- { os: ubuntu-20.04, cc: clang-11, cxx: clang++-11 }
- { os: ubuntu-20.04, cc: clang-12, cxx: clang++-12 }
- { os: ubuntu-latest, cc: clang-13, cxx: clang++-13 }
- { os: ubuntu-latest, cc: clang-14, cxx: clang++-14 }
- { os: ubuntu-latest, cc: clang-15, cxx: clang++-15 }
env:
CC: ${{ matrix.target.cc }}
CXX: ${{ matrix.target.cxx }}
steps:
- uses: actions/checkout@v4
- name: install compiler
run: |
sudo apt-get update
sudo apt-get install -y ${{ matrix.target.cc }}
sudo apt-get install -y ${{ matrix.target.cxx }}
- name: compiler version
run: |
${{ matrix.target.cc }} --version
${{ matrix.target.cxx }} --version
- name: install bake
run: |
git clone https://github.com/SanderMertens/bake
make -C bake/build-$(uname)
bake/bake setup
- name: build flecs
run: bake --strict
- name: test c++
run: bake run test/cpp -- -j 8
test-cpp-macos:
needs: [build-macos]
runs-on: ${{ matrix.os.version }}
timeout-minutes: 30
strategy:
fail-fast: false
matrix:
os:
- { version: macOS-12, xcode: '13.1' }
- { version: macOS-12, xcode: '14.0' }
- { version: macOS-13, xcode: '14.3.1' }
- { version: macOS-14, xcode: '15.2' }
env:
CC: clang
CXX: clang++
steps:
- uses: actions/checkout@v4
- uses: maxim-lobanov/setup-xcode@v1
with:
xcode-version: ${{ matrix.os.xcode }}
- name: compiler version
run: |
clang --version
- name: install bake
run: |
git clone https://github.com/SanderMertens/bake
make -C bake/build-$(uname)
bake/bake setup
- name: build flecs
run: bake --strict
- name: test c++
run: bake run test/cpp -- -j 8
test-windows:
needs: build-windows
runs-on: windows-latest
timeout-minutes: 30
strategy:
fail-fast: false
steps:
- uses: actions/checkout@v4
- uses: ilammy/msvc-dev-cmd@v1
- name: install bake
run: |
git clone https://github.com/SanderMertens/bake
cd bake\build-Windows
nmake
cd ..
./bake setup --local
- name: build flecs
run: bake/bake
- name: test core
run: bake/bake run test\core -- -j 8
- name: test addons
run: bake/bake run test\addons -- -j 8
- name: test meta
run: bake/bake run test\meta -- -j 8
- name: test script
run: bake/bake run test\script -- -j 8
- name: test collections
run: bake/bake run test\collections -- -j 8
- name: test c++
run: bake/bake run test\cpp -- -j 8
test-msys:
runs-on: windows-latest
timeout-minutes: 30
strategy:
fail-fast: false
matrix:
include:
- { sys: mingw64, cc: gcc, cxx: g++ }
- { sys: mingw32, cc: gcc, cxx: g++ }
- { sys: ucrt64, cc: gcc, cxx: g++ }
- { sys: clang64, cc: clang, cxx: clang++ }
defaults:
run:
shell: msys2 {0}
env:
CC: ${{ matrix.cc }}
CXX: ${{ matrix.cxx }}
steps:
- uses: actions/checkout@v4
- uses: msys2/setup-msys2@v2
with:
msystem: ${{matrix.sys}}
update: true
install: >-
curl
git
pacboy: >-
toolchain:p
cmake:p
- name: install bake
run: |
cp `which mingw32-make` /usr/bin/make
git clone https://github.com/SanderMertens/bake
make -C bake/build-Mingw
bake/bake setup
- name: build flecs
run: bake/bake --strict --trace
- name: test core
run: bake/bake run test/core -- -j 8
- name: test query
run: bake/bake run test/query -- -j 8
- name: test addons
run: bake/bake run test/addons -- -j 8
- name: test meta
run: bake/bake run test/meta -- -j 8
- name: test script
run: bake/bake run test/script -- -j 8
- name: test collections
run: bake/bake run test/collections -- -j 8
- name: test c++
run: bake/bake run test/cpp -- -j 8
test-sanitized-core:
needs: [ build-linux ]
runs-on: ${{ matrix.os }}
timeout-minutes: 30
strategy:
fail-fast: false
matrix:
os: [ ubuntu-20.04 ]
steps:
- uses: actions/checkout@v4
- name: install bake
run: |
git clone https://github.com/SanderMertens/bake
make -C bake/build-$(uname)
bake/bake setup
- name: build flecs
run: bake --strict
- name: run tests
run: |
bake run test/core --cfg sanitize -- -j 8
test-sanitized-query:
needs: [ build-linux ]
runs-on: ${{ matrix.os }}
timeout-minutes: 30
strategy:
fail-fast: false
matrix:
os: [ ubuntu-20.04 ]
steps:
- uses: actions/checkout@v4
- name: install bake
run: |
git clone https://github.com/SanderMertens/bake
make -C bake/build-$(uname)
bake/bake setup
- name: build flecs
run: bake --strict
- name: run tests
run: |
bake run test/query --cfg sanitize -- -j 8
test-sanitized-addons:
needs: [ build-linux ]
runs-on: ${{ matrix.os }}
timeout-minutes: 30
strategy:
fail-fast: false
matrix:
os: [ ubuntu-20.04 ]
steps:
- uses: actions/checkout@v4
- name: install bake
run: |
git clone https://github.com/SanderMertens/bake
make -C bake/build-$(uname)
bake/bake setup
- name: build flecs
run: bake --strict
- name: run tests
run: |
bake run test/addons --cfg sanitize -- -j 8
test-sanitized-meta:
needs: [ build-linux ]
runs-on: ${{ matrix.os }}
timeout-minutes: 30
strategy:
fail-fast: false
matrix:
os: [ ubuntu-20.04 ]
steps:
- uses: actions/checkout@v4
- name: install bake
run: |
git clone https://github.com/SanderMertens/bake
make -C bake/build-$(uname)
bake/bake setup
- name: build flecs
run: bake --strict
- name: run tests
run: |
bake run test/meta --cfg sanitize -- -j 8
test-sanitized-script:
needs: [ build-linux ]
runs-on: ${{ matrix.os }}
timeout-minutes: 30
strategy:
fail-fast: false
matrix:
os: [ ubuntu-20.04 ]
steps:
- uses: actions/checkout@v4
- name: install bake
run: |
git clone https://github.com/SanderMertens/bake
make -C bake/build-$(uname)
bake/bake setup
- name: build flecs
run: bake --strict
- name: run tests
run: |
bake run test/script --cfg sanitize -- -j 8
test-sanitized-collections:
needs: [ build-linux ]
runs-on: ${{ matrix.os }}
timeout-minutes: 30
strategy:
fail-fast: false
matrix:
os: [ ubuntu-20.04 ]
steps:
- uses: actions/checkout@v4
- name: install bake
run: |
git clone https://github.com/SanderMertens/bake
make -C bake/build-$(uname)
bake/bake setup
- name: build flecs
run: bake --strict
- name: run tests
run: |
bake run test/collections --cfg sanitize -- -j 8
test-sanitized-cpp:
needs: [ build-linux ]
runs-on: ${{ matrix.os }}
timeout-minutes: 30
strategy:
fail-fast: false
matrix:
os: [ ubuntu-20.04 ]
steps:
- uses: actions/checkout@v4
- name: install bake
run: |
git clone https://github.com/SanderMertens/bake
make -C bake/build-$(uname)
bake/bake setup
- name: build flecs
run: bake --strict
- name: run tests
run: |
bake run test/cpp --cfg sanitize -- -j 8
test-cmake:
needs: [ build-linux, build-macos ]
runs-on: ${{ matrix.os }}
timeout-minutes: 30
strategy:
fail-fast: false
matrix:
os: [ ubuntu-latest, macOS-latest, macOS-14 ]
steps:
- uses: actions/checkout@v4
- name: clone bake
run: |
git clone https://github.com/SanderMertens/bake
- name: build flecs & tests
run: |
cmake -DFLECS_TESTS=ON -DBAKE_DIRECTORY=bake
cmake --build . -j 4
- name: run tests
run: |
ctest -C Debug --verbose