Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

github: rework clang-compilation CI #377

Draft
wants to merge 5 commits into
base: main
Choose a base branch
from
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
166 changes: 122 additions & 44 deletions .github/workflows/clang-compilation.yml
Original file line number Diff line number Diff line change
@@ -1,61 +1,139 @@
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
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: |
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 \
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: |
mkdir -p build && cd build
cmake -G Ninja ../llvm \
-DCMAKE_C_COMPILER=`which clang` \
-DCMAKE_CXX_COMPILER=`which clang++` \
-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)
-DLLVM_ENABLE_PROJECTS="clang" \
-DLLVM_TARGETS_TO_BUILD="RISCV" \
-DLLVM_DEFAULT_TARGET_TRIPLE="riscv64-unknown-linux-gnu"
ninja
working-directory: llvm-project

- name: Test1
shell: 'script --return --quiet --log-out /dev/null --command "bash -e {0}"'
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)
make -C rvv-intrinsic-generator run-vector-crypto-api-testing SHELL="bash -x"
continue-on-error: true
working-directory: rvv-intrinsic-doc

- name: Test2
shell: 'script -q -e -c "bash --noprofile --norc -eo pipefail {0}"'
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)
make -C rvv-intrinsic-generator run-vector-crypto-api-testing SHELL="bash -x"
continue-on-error: true
working-directory: rvv-intrinsic-doc

- name: Test3
shell: script -q -e -c "$(printf "'%s' " "$@")"
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)
make -C rvv-intrinsic-generator run-vector-crypto-api-testing SHELL="bash -x"
continue-on-error: true
working-directory: rvv-intrinsic-doc

- name: show log
# shell: 'script --return --quiet --log-out /dev/null --command "bash -e {0}"'
shell: bash
if: always()
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"
ls -al auto-generated/vector-crypto/api-testing/
cat auto-generated/vector-crypto/api-testing/*.log
continue-on-error: true
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
5 changes: 4 additions & 1 deletion rvv-intrinsic-generator/Makefile.api
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@
# See the License for the specific language governing permissions and
# limitations under the License.
###############################################################################
SHELL := /bin/bash

CFLAGS?=-O -Werror=implicit-function-declaration -menable-experimental-extensions
ARCH_FLAG?=-march=rv64gcv_zfh_zvbb_zvbc_zvfbfmin_zvfbfwma_zvfh_zvkng_zvksg_zvl512b
Expand All @@ -39,4 +40,6 @@ clean:
rm -f test_report.xml

%.log: $(BASE_DIR)/%.c
-$(CC) $< -S -o /dev/null $(ARCH_FLAG) $(CFLAGS) $(EXTRA_CFLAGS) &> $@
@echo "Testing $<..."
-bash -c "$(CC) $< -S -o /dev/null $(ARCH_FLAG) $(CFLAGS) $(EXTRA_CFLAGS)" 2>&1 | tee $@
@echo "Completed testing $< (log size: $$(wc -c < $@))"
Loading