| name: "Check LLVM ABI annotations" |
| |
| on: |
| pull_request: |
| |
| permissions: |
| contents: read |
| |
| concurrency: |
| group: ${{ github.workflow }}-${{ github.event.pull_request.number }} |
| cancel-in-progress: true |
| |
| jobs: |
| build: |
| if: github.repository_owner == 'llvm' |
| name: Check LLVM_ABI annotations with ids |
| runs-on: ubuntu-24.04 |
| container: |
| image: 'ghcr.io/llvm/ci-ubuntu-24.04-ids-checks:latest@sha256:c80bc0f562592a850f4460bcec6cba339fe21b29bb80763cc621fb01ed0e3883' |
| timeout-minutes: 20 |
| |
| steps: |
| - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3 |
| with: |
| persist-credentials: false |
| path: ${{ github.workspace }}/llvm-project |
| fetch-depth: 2 |
| |
| - name: Get changed files |
| id: changed-files |
| uses: tj-actions/changed-files@9426d40962ed5378910ee2e21d5f8c6fcbf2dd96 # v47.0.6 |
| with: |
| path: "./llvm-project" |
| separator: "," |
| skip_initial_fetch: true |
| base_sha: 'HEAD~1' |
| sha: 'HEAD' |
| |
| - name: Configure and build minimal LLVM for use by ids |
| run: | |
| cmake -B ./llvm-project/build/ \ |
| -S ./llvm-project/llvm/ \ |
| -D CMAKE_BUILD_TYPE=Release \ |
| -D CMAKE_C_COMPILER=clang \ |
| -D CMAKE_CXX_COMPILER=clang++ \ |
| -D LLVM_ENABLE_PROJECTS=clang \ |
| -D LLVM_TARGETS_TO_BUILD="host" \ |
| -D LLVM_INCLUDE_TESTS=OFF \ |
| -D LLVM_INCLUDE_BENCHMARKS=OFF \ |
| -D CMAKE_EXPORT_COMPILE_COMMANDS=ON \ |
| -D CMAKE_DISABLE_PRECOMPILE_HEADERS=ON \ |
| -G Ninja |
| |
| # Build the generated-header prerequisites that idt needs to parse |
| # LLVM source. |
| BUILD_DIR=./llvm-project/build |
| ninja -C "$BUILD_DIR" \ |
| llvm_vcsrevision_h \ |
| intrinsics_gen omp_gen acc_gen analysis_gen target_parser_gen vt_gen \ |
| DllOptionsTableGen LibOptionsTableGen \ |
| clang-tablegen-targets \ |
| lib/ExecutionEngine/JITLink/COFFOptions.inc |
| |
| # Build per-target tablegen output for every enabled target. |
| # Each enabled target exposes a top-level `<Target>CommonTableGen` |
| # phony rule (e.g. `X86CommonTableGen`); discover them from the |
| # ninja graph. |
| TABLEGEN_TARGETS=$(ninja -C "$BUILD_DIR" -t targets all \ |
| | awk -F: ' |
| $2 ~ /phony/ && # phony rules only |
| $1 !~ /\// && # top-level (skip nested paths) |
| $1 ~ /CommonTableGen$/ { # per-target tablegen aggregator |
| print $1 |
| }') |
| ninja -C "$BUILD_DIR" $TABLEGEN_TARGETS |
| |
| - name: Run ids check |
| env: |
| GITHUB_PR_NUMBER: ${{ github.event.pull_request.number }} |
| CHANGED_FILES: ${{ steps.changed-files.outputs.all_changed_files }} |
| run: | |
| echo "[]" > comments && |
| python ./llvm-project/llvm/utils/git/ids-check-helper.py \ |
| --token ${{ secrets.GITHUB_TOKEN }} \ |
| --issue-number $GITHUB_PR_NUMBER \ |
| --idt-path $(which idt) \ |
| --compile-commands ./llvm-project/build/compile_commands.json \ |
| --start-rev HEAD~1 \ |
| --end-rev HEAD \ |
| --changed-files "$CHANGED_FILES" \ |
| --verbose |
| |
| - name: Upload results |
| uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1 |
| if: always() |
| with: |
| name: workflow-args |
| path: | |
| llvm-project/comments |