Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/dotnet/llvm-project.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTom Stellard <tstellar@redhat.com>2021-02-01 16:05:19 +0300
committerTom Stellard <tstellar@redhat.com>2021-02-04 00:47:58 +0300
commite18e509bdb45cd63c949c415df94358acf118e0f (patch)
tree48f3e1a1058a495c87eb87187c11d83c178acf09 /.github
parent3a8282376b6c2bb65a3bb580c10d4da1296d8df1 (diff)
workflows: Add job to check for ABI changes in libclang.so and libclang-cpp.so
Diffstat (limited to '.github')
-rw-r--r--.github/workflows/libclang-abi-tests.yml132
1 files changed, 132 insertions, 0 deletions
diff --git a/.github/workflows/libclang-abi-tests.yml b/.github/workflows/libclang-abi-tests.yml
new file mode 100644
index 000000000000..5681c7c8166e
--- /dev/null
+++ b/.github/workflows/libclang-abi-tests.yml
@@ -0,0 +1,132 @@
+name: libclang ABI Tests
+
+on:
+ push:
+ branches:
+ - 'release/**'
+ paths:
+ - 'clang/**'
+ - '.github/workflows/libclang-abi-tests.yml'
+ pull_request:
+ paths:
+ - 'clang/**'
+ - '.github/workflows/libclang-abi-tests.yml'
+
+jobs:
+ abi-dump-setup:
+ runs-on: ubuntu-latest
+ outputs:
+ BASELINE_REF: ${{ steps.vars.outputs.BASELINE_REF }}
+ ABI_HEADERS: ${{ steps.vars.outputs.ABI_HEADERS }}
+ ABI_LIBS: ${{ steps.vars.outputs.ABI_LIBS }}
+ BASELINE_VERSION_MAJOR: ${{ steps.vars.outputs.BASELINE_VERSION_MAJOR }}
+ LLVM_VERSION_MAJOR: ${{ steps.version.outputs.LLVM_VERSION_MAJOR }}
+ LLVM_VERSION_MINOR: ${{ steps.version.outputs.LLVM_VERSION_MINOR }}
+ LLVM_VERSION_PATCH: ${{ steps.version.outputs.LLVM_VERSION_PATCH }}
+ steps:
+ - name: Checkout source
+ uses: actions/checkout@v1
+ with:
+ fetch-depth: 1
+
+ - name: Get LLVM version
+ id: version
+ uses: llvm/actions/get-llvm-version@main
+
+ - name: Setup Variables
+ id: vars
+ run: |
+ if [ ${{ steps.version.outputs.LLVM_VERSION_MINOR }} -ne 0 -o ${{ steps.version.outputs.LLVM_VERSION_PATCH }} -eq 0 ]; then
+ echo ::set-output name=BASELINE_VERSION_MAJOR::$(( ${{ steps.version.outputs.LLVM_VERSION_MAJOR }} - 1))
+ echo ::set-output name=ABI_HEADERS::clang-c
+ echo ::set-output name=ABI_LIBS::libclang.so
+ else
+ echo ::set-output name=BASELINE_VERSION_MAJOR::${{ steps.version.outputs.LLVM_VERSION_MAJOR }}
+ echo ::set-output name=ABI_HEADERS::.
+ echo ::set-output name=ABI_LIBS::libclang.so libclang-cpp.so
+ fi
+
+ abi-dump:
+ needs: abi-dump-setup
+ runs-on: ubuntu-latest
+ strategy:
+ matrix:
+ name:
+ - build-baseline
+ - build-latest
+ include:
+ - name: build-baseline
+ llvm_version_major: ${{ needs.abi-dump-setup.outputs.BASELINE_VERSION_MAJOR }}
+ ref: llvmorg-${{ needs.abi-dump-setup.outputs.BASELINE_VERSION_MAJOR }}.0.0
+ repo: llvm/llvm-project
+ - name: build-latest
+ llvm_version_major: ${{ needs.abi-dump-setup.outputs.LLVM_VERSION_MAJOR }}
+ ref: ${{ github.sha }}
+ repo: ${{ github.repository }}
+ steps:
+ - name: Install Ninja
+ uses: llvm/actions/install-ninja@main
+ - name: Install abi-compliance-checker
+ run: |
+ sudo apt-get install abi-dumper autoconf pkg-config
+ - name: Install universal-ctags
+ run: |
+ git clone https://github.com/universal-ctags/ctags.git
+ cd ctags
+ ./autogen.sh
+ ./configure
+ sudo make install
+ - name: Download source code
+ uses: llvm/actions/get-llvm-project-src@main
+ with:
+ ref: ${{ matrix.ref }}
+ repo: ${{ matrix.repo }}
+ - name: Configure
+ run: |
+ mkdir install
+ cmake -B build -S llvm -G Ninja -DLLVM_ENABLE_PROJECTS=clang -DCMAKE_BUILD_TYPE=Debug -DLLVM_TARGETS_TO_BUILD="" -DLLVM_BUILD_LLVM_DYLIB=ON -DLLVM_LINK_LLVM_DYLIB=ON -DCMAKE_C_FLAGS_DEBUG="-g -Og" -DCMAKE_CXX_FLAGS_DEBUG="-g -Og" -DCMAKE_INSTALL_PREFIX=`pwd`/install llvm
+ - name: Build
+ run: ninja -C build/ ${{ needs.abi-dump-setup.outputs.ABI_LIBS }} install-clang-headers
+ - name: Dump ABI
+ run: |
+ parallel abi-dumper -lver ${{ matrix.ref }} -skip-cxx -public-headers ./install/include/${{ needs.abi-dump-setup.outputs.ABI_HEADERS }} -o {}-${{ matrix.ref }}.abi ./build/lib/{} ::: ${{ needs.abi-dump-setup.outputs.ABI_LIBS }}
+ for lib in ${{ needs.abi-dump-setup.outputs.ABI_LIBS }}; do
+ # Remove symbol versioning from dumps, so we can compare across major versions.
+ sed -i 's/LLVM_${{ matrix.llvm_version_major }}/LLVM_NOVERSION/' $lib-${{ matrix.ref }}.abi
+ tar -czf $lib-${{ matrix.ref }}.abi.tar.gz $lib-${{ matrix.ref }}.abi
+ done
+ - name: Upload ABI file
+ uses: actions/upload-artifact@v2
+ with:
+ name: ${{ matrix.name }}
+ path: "*${{ matrix.ref }}.abi.tar.gz"
+
+ abi-compare:
+ runs-on: ubuntu-latest
+ needs:
+ - abi-dump-setup
+ - abi-dump
+ steps:
+ - name: Download baseline
+ uses: actions/download-artifact@v1
+ with:
+ name: build-baseline
+ - name: Download latest
+ uses: actions/download-artifact@v1
+ with:
+ name: build-latest
+
+ - name: Install abi-compliance-checker
+ run: sudo apt-get install abi-compliance-checker
+ - name: Compare ABI
+ run: |
+ for lib in ${{ needs.abi-dump-setup.outputs.ABI_LIBS }}; do
+ abi-compliance-checker -lib $lib -old build-baseline/$lib*.abi.tar.gz -new build-latest/$lib*.abi.tar.gz
+ done
+ - name: Upload ABI Comparison
+ if: always()
+ uses: actions/upload-artifact@v2
+ with:
+ name: compat-report-${{ github.sha }}
+ path: compat_reports/
+