name: Compiler testing on: pull_request: merge_group: push: branches: [ main ] workflow_dispatch: jobs: pre_job: runs-on: ubuntu-latest outputs: should_skip: ${{ steps.set_output.outputs.should_skip }} steps: - id: skip_check if: ${{ github.event_name != 'merge_group' }} uses: mmicko/skip-duplicate-actions@master with: # don't run on documentation changes paths_ignore: '["**/README.md", "docs/**", "guidelines/**"]' # cancel previous builds if a new commit is pushed # but never cancel main cancel_others: ${{ github.ref != 'refs/heads/main' }} - id: set_output run: | if [ "${{ github.event_name }}" = "merge_group" ]; then echo "should_skip=false" >> $GITHUB_OUTPUT elif [ "${{ github.event_name }}" = "push" ]; then should_skip=false else echo "should_skip=${{ steps.skip_check.outputs.should_skip }}" >> $GITHUB_OUTPUT fi test-compile: runs-on: ${{ matrix.os }} needs: pre_job if: (github.event_name == 'push' || github.event_name == 'merge_group' || github.event_name == 'workflow_dispatch') && needs.pre_job.outputs.should_skip != 'true' env: CXXFLAGS: ${{ startsWith(matrix.compiler, 'gcc') && '-Wp,-D_GLIBCXX_ASSERTIONS' || ''}} strategy: matrix: os: - ubuntu-latest compiler: # oldest supported - 'clang-14' - 'gcc-11' # newest, make sure to update maximum standard step to match - 'clang-22' - 'gcc-16' include: # macOS arm - os: macos-latest compiler: 'clang-22' fail-fast: false steps: - name: Checkout Yosys uses: actions/checkout@v7 with: submodules: true persist-credentials: false - name: Setup environment uses: ./.github/actions/setup-build-env with: runs-on: ${{ matrix.os }} get-build-deps: true - name: ccache uses: hendrikmuhs/ccache-action@v1.2.23 with: key: test-compile-${{ matrix.os }}-${{ matrix.compiler }} save: ${{ github.event_name == 'push' && github.ref == 'refs/heads/main' }} restore-keys: | test-compile-${{ matrix.os }}-${{ matrix.compiler }}- - name: Setup Cpp uses: aminya/setup-cpp@v1 with: compiler: ${{ matrix.compiler }} gcc: ${{ (matrix.os == 'ubuntu-latest' && matrix.compiler == 'clang-14') && '12' || '' }} - name: Tool versions shell: bash run: | $CC --version $CXX --version - name: Fix clang-14 toolchain if: matrix.os == 'ubuntu-latest' && matrix.compiler == 'clang-14' run: | echo 'CXXFLAGS=--gcc-toolchain=/usr -isystem /usr/include/c++/12 -isystem /usr/include/x86_64-linux-gnu/c++/12' >> $GITHUB_ENV # minimum standard - name: Build C++20 shell: bash run: | rm -rf build cmake -B build -DCMAKE_CXX_STANDARD=20 -DYOSYS_COMPILER_LAUNCHER=ccache . --fresh cmake --build build --target yosys -j$procs # maximum standard, only on newest compilers - name: Build C++26 if: ${{ matrix.compiler == 'clang-22' || matrix.compiler == 'gcc-16' }} shell: bash run: | rm -rf build cmake -B build -DCMAKE_CXX_STANDARD=26 -DYOSYS_COMPILER_LAUNCHER=ccache . --fresh cmake --build build --target yosys -j$procs test-compile-result: runs-on: ubuntu-latest needs: - test-compile if: always() steps: - name: Check results run: | echo "Needs results: ${{ join(needs.*.result, ',') }}" if [[ "${{ join(needs.*.result, ',') }}" == *failure* ]] || \ [[ "${{ join(needs.*.result, ',') }}" == *cancelled* ]]; then echo "Some jobs failed or were cancelled" exit 1 fi - run: echo "All good"