From c1d5dbebc66ed5103267c68e44c63306aed38293 Mon Sep 17 00:00:00 2001 From: Jerry Zhang Jian Date: Fri, 18 Oct 2024 01:46:11 -0700 Subject: [PATCH] github: rework clang-compilation CI Signed-off-by: Jerry Zhang Jian --- .github/workflows/clang-compilation.yml | 150 ++++++++++++++++-------- 1 file changed, 103 insertions(+), 47 deletions(-) diff --git a/.github/workflows/clang-compilation.yml b/.github/workflows/clang-compilation.yml index dae68e44f..d0dc916d3 100644 --- a/.github/workflows/clang-compilation.yml +++ b/.github/workflows/clang-compilation.yml @@ -1,61 +1,117 @@ name: Clang (LLVM) intrinsic test case compilation -on: [push] +on: + push: + branches: + - main + pull_request: + branches: + - main + workflow_dispatch: # Allows manual triggering of the workflow jobs: - build: + build-and-test: runs-on: ubuntu-latest strategy: matrix: - llvm-version: ["main", "latest-rel"] + llvm-version: [latest-rel] + + env: + COMPILER: llvm-project/build/bin/clang + EXTRA_CFLAGS: "-target riscv64" + steps: - - uses: actions/checkout@v4 - - uses: actions/setup-python@v5 + - name: Checkout rvv-intrinsic-doc + uses: actions/checkout@v4 with: - python-version: '3.11' - - name: Prerequisites - run: | - sudo apt-get install autoconf automake autotools-dev curl libmpc-dev libmpfr-dev libgmp-dev gawk build-essential bison flex texinfo gperf libtool patchutils bc zlib1g-dev libexpat-dev ninja-build git cmake libglib2.0-dev dejagnu - - name: Install dependencies - run: | - pip install --user junitparser - - name: Download LLVM + repository: riscv-non-isa/rvv-intrinsic-doc + path: rvv-intrinsic-doc + + - name: Setup Python + uses: actions/setup-python@v5 + with: + python-version: '3.x' + + - name: Install Python dependencies run: | - cd .. - rm -rf llvm-project - git clone https://github.com/llvm/llvm-project -j `nproc` - - name: Checkout LLVM version + pip install junitparser + working-directory: ${{ github.workspace }} + + - name: Set up LLVM (latest release) + if: matrix.llvm-version == 'latest-rel' run: | - cd ../llvm-project - if [ "${{ matrix.llvm-version }}" = "latest-rel" ]; then - latestTag=$(git describe --tags `git rev-list --tags --max-count=1`) - git checkout $latestTag + latest_release=$(curl -sL https://api.github.com/repos/llvm/llvm-project/releases/latest) + download_url=$(echo "$latest_release" | jq -r '.assets[] | select(.name | endswith("Linux-X64.tar.xz")) | .browser_download_url') + if [ -z "$download_url" ]; then + echo "Error: Could not find Linux X64 tarball URL" + exit 1 fi - - name: Build LLVM with Ninja - run: | - cd ../llvm-project - mkdir build && cd build - cmake -G Ninja \ - -DCMAKE_C_COMPILER=gcc \ - -DCMAKE_CXX_COMPILER=g++ \ - -DLLVM_TARGETS_TO_BUILD="RISCV" \ - -DLLVM_PARALLEL_LINK_JOBS=12 \ - -DCMAKE_BUILD_TYPE=Release \ - -DBUILD_SHARED_LIBS=OFF \ - -DLLVM_DEFAULT_TARGET_TRIPLE="riscv64-unknown-linux-gnu" \ - -DLLVM_ENABLE_PROJECTS="clang;lld" \ - ../llvm - ninja -j `nproc` - echo $(pwd) - ls bin - - name: Run compilation test, non-overloaded intrinsics (default (TAMA) policy) - run: | - make -C rvv-intrinsic-generator run-api-testing run-bfloat16-api-testing run-vector-crypto-api-testing COMPILER=$(pwd)/../llvm-project/build/bin/clang EXTRA_CFLAGS="-target riscv64" - - name: Run compilation test, overloaded intrinsics (default (TAMA) policy) + filename=$(basename "$download_url") + echo "Downloading $filename..." + curl -sL -o "$filename" "$download_url" + tar xf "$filename" + extracted_dir=$(tar tf "$filename" | head -1 | cut -f1 -d"/") + # Set the COMPILER environment variable + echo "COMPILER=${{ github.workspace }}/$extracted_dir/bin/clang" >> $GITHUB_ENV + working-directory: ${{ github.workspace }} + + - name: Install prerequisites (main) + if: matrix.llvm-version == 'main' run: | - make -C rvv-intrinsic-generator run-overloaded-api-testing run-bfloat16-overloaded-api-testing run-vector-crypto-overloaded-api-testing COMPILER=$(pwd)/../llvm-project/build/bin/clang EXTRA_CFLAGS="-target riscv64" - - name: Run compilation test, non-overloaded intrinsics (non-default policy) + sudo apt-get update + sudo apt-get install -y ninja-build + working-directory: ${{ github.workspace }} + + - name: Checkout LLVM (main) + if: matrix.llvm-version == 'main' + uses: actions/checkout@v4 + with: + repository: llvm/llvm-project + path: llvm-project + fetch-depth: 1 + + - name: Configure & Build LLVM (main) + if: matrix.llvm-version == 'main' run: | - make -C rvv-intrinsic-generator run-policy-api-testing run-bfloat16-policy-api-testing run-vector-crypto-policy-api-testing COMPILER=$(pwd)/../llvm-project/build/bin/clang EXTRA_CFLAGS="-target riscv64" - - name: Run compilation test, overloaded intrinsics (non-default policy) + mkdir -p build && cd build + cmake -G Ninja ../llvm \ + -DCMAKE_C_COMPILER=`which clang` \ + -DCMAKE_CXX_COMPILER=`which clang++` \ + -DCMAKE_BUILD_TYPE=Release \ + -DLLVM_ENABLE_PROJECTS="clang" \ + -DLLVM_TARGETS_TO_BUILD="RISCV" \ + -DLLVM_DEFAULT_TARGET_TRIPLE="riscv64-unknown-linux-gnu" + ninja + working-directory: llvm-project + + - name: Test run: | - make -C rvv-intrinsic-generator run-policy-overloaded-api-testing run-bfloat16-policy-overloaded-api-testing run-vector-crypto-policy-overloaded-api-testing COMPILER=$(pwd)/../llvm-project/build/bin/clang EXTRA_CFLAGS="-target riscv64" + set +e + make -C rvv-intrinsic-generator run-vector-crypto-api-testing + exitcode="$?" + echo "exitcode=$exitcode" >> $GITHUB_OUTPUT + exit "$exitcode" + working-directory: rvv-intrinsic-doc + + # - name: Run compilation test, non-overloaded intrinsics (default (TAMA) policy) + # run: | + # set -e # Exit on any error + # make -C rvv-intrinsic-generator run-api-testing run-bfloat16-api-testing run-vector-crypto-api-testing + # working-directory: rvv-intrinsic-doc + + # - name: Run compilation test, overloaded intrinsics (default (TAMA) policy) + # run: | + # set -e # Exit on any error + # make -C rvv-intrinsic-generator run-overloaded-api-testing run-bfloat16-overloaded-api-testing run-vector-crypto-overloaded-api-testing + # working-directory: rvv-intrinsic-doc + + # - name: Run compilation test, non-overloaded intrinsics (non-default policy) + # run: | + # set -e # Exit on any error + # make -C rvv-intrinsic-generator run-policy-api-testing run-bfloat16-policy-api-testing run-vector-crypto-policy-api-testing + # working-directory: rvv-intrinsic-doc + + # - name: Run compilation test, overloaded intrinsics (non-default policy) + # run: | + # set -e # Exit on any error + # make -C rvv-intrinsic-generator run-policy-overloaded-api-testing run-bfloat16-policy-overloaded-api-testing run-vector-crypto-policy-overloaded-api-testing + # working-directory: rvv-intrinsic-doc