name: Examples (toolsets) on: workflow_call: workflow_dispatch: permissions: {} jobs: build: strategy: matrix: example: [simple] toolset: - auto - clang - clang-cl - gcc - mingw - msvc os: - ubuntu-latest - windows-2022 - windows-2025 include: # Prettier run names. - {os: windows-2022, name: Windows 2022} - {os: windows-2025, name: Windows 2025} - {os: ubuntu-latest, name: Ubuntu} # Target platform. - {os: windows-2022, platform: x86} - {os: windows-2025, platform: x64} - {os: ubuntu-latest, platform: x64} # Configuration. - {os: windows-2022, configuration: Release} - {os: windows-2025, configuration: Debug} - {os: ubuntu-latest, configuration: RelWithDebInfo} # Expected symbols. - os: windows-2022 symbols: - target: foo type: exe symbols: [] - target: baz type: dll symbols: [baz] - os: windows-2025 symbols: - target: foo type: exe symbols: [main] - target: baz type: dll symbols: [baz] - os: ubuntu-latest symbols: - target: foo type: exe symbols: [main] - target: baz type: dll symbols: [baz] exclude: # Ubuntu: no MSVC/clang-cl. - {os: ubuntu-latest, toolset: msvc} - {os: ubuntu-latest, toolset: clang-cl} runs-on: ${{ matrix.os }} name: ${{ matrix.toolset }} / ${{ matrix.name }} steps: - name: Checkout uses: actions/checkout@v7 with: persist-credentials: false - name: Clean up PATH uses: egor-tensin/cleanup-path@v5 if: runner.os == 'Windows' - name: Set common variables uses: $/.github/actions/common-variables with: toolset: ${{ matrix.toolset }} - name: Set up Python uses: actions/setup-python@v7 with: python-version: '3.x' - name: Install GCC uses: egor-tensin/setup-gcc@v2 with: platform: ${{ matrix.platform }} if: env.CI_HOST_LINUX && (matrix.toolset == 'auto' || matrix.toolset == 'gcc') - name: Install Clang uses: egor-tensin/setup-clang@v2 with: platform: ${{ matrix.platform }} if: matrix.toolset == 'clang' || matrix.toolset == 'clang-cl' - name: Install MinGW uses: egor-tensin/setup-mingw@v3 with: platform: ${{ matrix.platform }} # toolset == 'clang' needs some kind of make, e.g. mingw32-make: if: env.CI_MINGW || (matrix.toolset == 'clang' && env.CI_HOST_WINDOWS) - name: Set up software environment uses: $/.github/actions/software-environment with: toolset: ${{ matrix.toolset }} platform: ${{ matrix.platform }} - name: Set up Visual Studio uses: egor-tensin/vs-shell@v2 with: arch: ${{ matrix.platform }} if: matrix.toolset == 'clang-cl' && env.CI_HOST_WINDOWS - name: Build example project id: build uses: $/.github/actions/build-example with: src-dir: 'test/examples/${{ matrix.example }}' toolset: ${{ matrix.toolset }} platform: ${{ matrix.platform }} configuration: ${{ matrix.configuration }} - name: Verify runtime library linkage uses: $/.github/actions/check-runtime-library with: path: ${{ steps.build.outputs.install-dir }} - name: Verify architecture uses: $/.github/actions/check-arch with: path: ${{ steps.build.outputs.install-dir }} expected: ${{ matrix.platform }} - name: Run example project uses: $/.github/actions/run-example with: path: ${{ steps.build.outputs.install-dir }} #- name: Check symbols # uses: $/.github/actions/check-symbols # with: # path: ${{ steps.build.outputs.install-dir }} # expected: ${{ toJson(matrix.symbols) }} # if: env.CI_TARGET_ELF