name: CI on: push: branches: [master] paths-ignore: - 'docs/**' - 'LICENCE' - 'CONTRIBUTION.md' - 'README.md' pull_request: branches: [master] paths-ignore: - 'docs/**' - 'LICENCE' - 'CONTRIBUTION.md' - 'README.md' concurrency: group: ${{ github.workflow }}-${{ github.ref }} cancel-in-progress: true jobs: build: strategy: matrix: os: [linux, macos, windows] config: [debug, release] compiler: [gcc, clang, cl] platform: [x86_64, aarch64] exclude: # Default to x64, but aarch64 on osx - { os: linux, platform: aarch64 } - { os: windows, platform: aarch64 } - { os: macos, platform: x86_64 } # Unused compiler configs - { os: linux, compiler: clang } - { os: linux, compiler: cl } - { os: windows, compiler: gcc } - { os: windows, compiler: clang } - { os: macos, compiler: gcc } - { os: macos, compiler: cl } include: - { os: linux, runs-on: ubuntu-20.04 } - { os: macos, runs-on: macos-latest } - { os: windows, runs-on: windows-latest } # Warnings are treated as errors by default. # But we may want to disable it temporarily. - { os: linux, warnings-as-errors: true } - { os: macos, warnings-as-errors: true } - { os: windows, warnings-as-errors: true } # Set a test category depending on the config, smoke by default, # quick or full conditionally otherwise - test-category: smoke - { os: windows, test-category: quick } - { config: release, test-category: full } # default not full gpu tests - full-gpu-tests: false # Self-hosted aarch64 build - os: linux config: release compiler: gcc platform: aarch64 test-category: smoke full-gpu-tests: false runs-on: [self-hosted, Linux, ARM64] # Self-hosted full gpu build - os: windows config: release compiler: cl platform: x86_64 test-category: full full-gpu-tests: true runs-on: [Windows, self-hosted] fail-fast: false runs-on: ${{ matrix.runs-on }} defaults: run: shell: bash steps: - uses: actions/checkout@v3 with: submodules: 'true' fetch-depth: '0' - name: Setup uses: ./.github/actions/common-setup with: os: ${{matrix.os}} compiler: ${{matrix.compiler}} platform: ${{matrix.platform}} config: ${{matrix.config}} build-llvm: true - name: Build Slang run: | if [[ "${{ matrix.os }}" =~ "windows" && "${{ matrix.config }}" != "release" ]]; then # Doing a debug build will try to link against a release built llvm, this # is a problem on Windows, so make slang-llvm in release build and use # that as though it's a fetched binary via these presets. cmake --workflow --preset slang-llvm # Configure, pointing to our just-generated slang-llvm archive cmake --preset default --fresh \ -DSLANG_SLANG_LLVM_FLAVOR=FETCH_BINARY \ "-DSLANG_SLANG_LLVM_BINARY_URL=$(pwd)/build/dist-release/slang-llvm.zip" \ "-DCMAKE_COMPILE_WARNING_AS_ERROR=${{matrix.warnings-as-errors}}" cmake --workflow --preset "${{matrix.config}}" else # Otherwise, use the system llvm we have just build or got from the # cache in the setup phase cmake --preset default --fresh \ -DSLANG_SLANG_LLVM_FLAVOR=USE_SYSTEM_LLVM \ -DCMAKE_COMPILE_WARNING_AS_ERROR=${{matrix.warnings-as-errors}} cmake --workflow --preset "${{matrix.config}}" fi - name: Test Slang run: | export SLANG_RUN_SPIRV_VALIDATION=1 export SLANG_USE_SPV_SOURCE_LANGUAGE_UNKNOWN=1 if [[ "${{matrix.full-gpu-tests}}" == "true" ]]; then "$bin_dir/slang-test" \ -use-test-server \ -server-count 8 \ -category ${{ matrix.test-category }} \ -api all-cpu else "$bin_dir/slang-test" \ -use-test-server \ -category ${{ matrix.test-category }} \ -api all-dx12 \ -expected-failure-list tests/expected-failure-github.txt fi - name: Test Slang via glsl if: ${{matrix.full-gpu-tests}} run: | export SLANG_RUN_SPIRV_VALIDATION=1 export SLANG_USE_SPV_SOURCE_LANGUAGE_UNKNOWN=1 "$bin_dir/slang-test" \ -use-test-server \ -server-count 8 \ -category ${{ matrix.test-category }} \ -emit-spirv-via-glsl \ -api vk \ -expected-failure-list tests/expected-failure.txt - uses: actions/upload-artifact@v3 if: ${{ ! matrix.full-gpu-tests }} with: name: slang-build-${{matrix.os}}-${{matrix.platform}}-${{matrix.compiler}}-${{matrix.config}} # The install directory used in the packaging step path: build/dist-${{matrix.config}}/**/ZIP/slang/*