1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200
|
---
name: Linux / CPU x86-64 on GH tests
permissions:
contents: read
on:
push:
branches:
- 'main'
- 'release*'
workflow_dispatch:
pull_request:
paths-ignore:
- 'doc/**'
- 'CHANGES'
- 'COPYING'
- 'CREDITS'
- 'LICENSE'
- 'README.*'
- 'tools/docker/**'
concurrency:
group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref || github.run_id }}
cancel-in-progress: true
env:
CCACHE_BASEDIR: "${{ github.workspace }}"
CCACHE_DIR: "${{ github.workspace }}/../../../../ccache_storage"
EXAMPLES_DIR: "${{ github.workspace }}/../../../../examples"
jobs:
# jobs run on Github-hosted runners.
# TODO: move more self-hosted to Github-hosted
# unfortunately sanitizers don't work on Github-hosted runners,
# probably some limitation of Virtual address space
# (sanitizer-built binaries require >=20 terabytes of Virt AS)
github_test_matrix:
name: LLVM ${{ matrix.llvm }} - ${{ matrix.config }}
# 24.04 brings in LLVM up to 18 + ocl-icd 2.3.x (OpenCL 3.0 compatible)
runs-on: ubuntu-24.04
strategy:
fail-fast: false
matrix:
# basic = simplest pthread build with ENABLE_CONFORMANCE
# devel = with devel options without ENABLE_CONFORMANCE
# install = install PoCL system-wide and run tests
# static = statically linked LLVM component libraries
# TBB, OpenMP = CPU drivers with TBB/OpenMP support
# DBK = ONNX / libjpeg-turbo DBKs enabled
llvm: [20]
config: [basic, devel]
include:
- llvm: 17
config: TBB
- llvm: 18
config: OpenMP
- llvm: 19
config: install
- llvm: 18
config: DBKs
- llvm: 19
config: TBB
- llvm: 20
config: OpenMP
- llvm: 21
config: install
steps:
- name: Checkout
uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8
- name: Load Env vars
id: load-env
run: |
cat ${{ github.workspace }}/.github/variables.txt >> $GITHUB_ENV
- name: Install prerequisites and ocl-icd
run: >
sudo apt update -y &&
sudo apt install -y wget gpg python3-dev libpython3-dev build-essential ocl-icd-libopencl1 cmake make git pkg-config ocl-icd-libopencl1 ocl-icd-dev ocl-icd-opencl-dev libhwloc-dev zlib1g-dev libtbb-dev
- name: Install LLVM 17 (+ llvm-spirv)
if: ${{ matrix.llvm == 17 }}
run: >
export LLVM_VERSION=${{ matrix.llvm }} &&
sudo apt install -y libclang-cpp${LLVM_VERSION}-dev llvm-${LLVM_VERSION}-dev libclang-${LLVM_VERSION}-dev clang-${LLVM_VERSION} llvm-${LLVM_VERSION} llvm-spirv-${LLVM_VERSION} libpolly-${LLVM_VERSION}-dev spirv-tools
- name: Install LLVM 18 (+ llvm-spirv + libllvmspirv)
if: ${{ matrix.llvm == 18 }}
run: >
export LLVM_VERSION=${{ matrix.llvm }} &&
sudo apt install -y libclang-cpp${LLVM_VERSION}-dev llvm-${LLVM_VERSION}-dev libclang-${LLVM_VERSION}-dev clang-${LLVM_VERSION} llvm-${LLVM_VERSION} libllvmspirvlib-${LLVM_VERSION}-dev llvm-spirv-${LLVM_VERSION} libpolly-${LLVM_VERSION}-dev spirv-tools
- name: Install LLVM 19 (+ libllvmspirv)
if: ${{ matrix.llvm == 19 }}
run: >
export LLVM_VERSION=${{ matrix.llvm }} &&
sudo apt install -y libclang-cpp${LLVM_VERSION}-dev llvm-${LLVM_VERSION}-dev libclang-${LLVM_VERSION}-dev clang-${LLVM_VERSION} llvm-${LLVM_VERSION} libllvmspirvlib-${LLVM_VERSION}-dev libpolly-${LLVM_VERSION}-dev spirv-tools
- name: Install LLVM >= 20 (from apt.llvm.org)
if: ${{ matrix.llvm >= 20 }}
run: >
export LLVM_VERSION=${{ matrix.llvm }} &&
wget -qO- https://apt.llvm.org/llvm-snapshot.gpg.key | sudo gpg --dearmor -o /usr/share/keyrings/llvm-snapshot.gpg &&
echo "deb [signed-by=/usr/share/keyrings/llvm-snapshot.gpg] http://apt.llvm.org/noble/ llvm-toolchain-noble-${LLVM_VERSION} main" >/tmp/llvm.list &&
sudo mv /tmp/llvm.list /etc/apt/sources.list.d/ &&
sudo apt update -y &&
sudo apt install -y libclang-cpp${LLVM_VERSION}-dev llvm-${LLVM_VERSION}-dev libclang-${LLVM_VERSION}-dev clang-${LLVM_VERSION} llvm-${LLVM_VERSION} mlir-${LLVM_VERSION}-tools libllvmlibc-${LLVM_VERSION}-dev libpolly-${LLVM_VERSION}-dev spirv-tools
- name: Install XSMM & ONNX & libjpeg-turbo
if: ${{ matrix.config == 'DBKs' }}
run: >
sudo apt install -y libopenblas-dev &&
sudo wget -q -O libjpeg-turbo.deb https://github.com/libjpeg-turbo/libjpeg-turbo/releases/download/3.0.4/libjpeg-turbo-official_3.0.4_amd64.deb &&
sudo dpkg -i libjpeg-turbo.deb &&
sudo wget -q -O /tmp/onnx-runtime.tgz https://github.com/microsoft/onnxruntime/releases/download/v1.19.2/onnxruntime-linux-x64-1.19.2.tgz &&
sudo mkdir /opt/onnx && sudo tar -xf /tmp/onnx-runtime.tgz -C /opt/onnx --strip-components=1 &&
sudo ln -s /opt/libjpeg-turbo/lib64 /opt/libjpeg-turbo/lib &&
sudo ln -s /opt/onnx/lib /opt/onnx/lib64 &&
sudo mv /opt/onnx/include /opt/onnxruntime && sudo mkdir /opt/onnx/include && sudo mv /opt/onnxruntime /opt/onnx/include/ &&
sudo bash -c 'mkdir /opt/source && cd /opt/source && git clone https://github.com/libxsmm/libxsmm.git && cd libxsmm && git checkout 50c67024876111d81e685e94939ccbf04ab464b9 && echo "unstable-1.17.1" > version.txt && make -j3 STATIC=0 FORTRAN=0 AVX=2 install DESTDIR=/opt/xsmm'
- name: CMake
id: cmake
run: |
if [ "${{ matrix.config }}" == "DBKs" ]; then
export "CMAKE_PREFIX_PATH=/opt/libjpeg-turbo/lib/cmake:/opt/onnx/lib/cmake"
export "PKG_CONFIG_PATH=/opt/xsmm/lib"
fi
runCMake() {
BUILD_FLAGS="-O1 -march=native -Wall -Wextra -Wno-unused-parameter -Wno-unused-variable"
cmake -DCMAKE_BUILD_TYPE=RelWithDebInfo \
"-DCMAKE_C_FLAGS_RELWITHDEBINFO=$BUILD_FLAGS" \
"-DCMAKE_CXX_FLAGS_RELWITHDEBINFO=$BUILD_FLAGS" \
-DWITH_LLVM_CONFIG=/usr/bin/llvm-config-${{ matrix.llvm }} \
"$@" -B ${{ github.workspace }}/build ${{ github.workspace }}
}
rm -rf ${{ github.workspace }}/build
mkdir ${{ github.workspace }}/build
if [ "${{ matrix.config }}" == "OpenMP" ]; then
runCMake -DENABLE_ICD=1 -DENABLE_HOST_CPU_DEVICES_OPENMP=1
elif [ "${{ matrix.config }}" == "TBB" ]; then
runCMake -DENABLE_ICD=1 -DENABLE_TBB_DEVICE=1
elif [ "${{ matrix.config }}" == "basic" ]; then
runCMake -DENABLE_ICD=1 -DENABLE_LLVM_FILECHECKS=1 -DENABLE_CONFORMANCE=ON
elif [ "${{ matrix.config }}" == "static" ]; then
runCMake -DENABLE_ICD=1 -DSTATIC_LLVM=1 -DDEVELOPER_MODE=ON
elif [ "${{ matrix.config }}" == "devel" ]; then
runCMake -DENABLE_RELOCATION=0 -DDEVELOPER_MODE=1 -DENABLE_VALGRIND=1 -DENABLE_EXTRA_VALIDITY_CHECKS=1
elif [ "${{ matrix.config }}" == "install" ]; then
runCMake -DCMAKE_INSTALL_PREFIX=/usr -DENABLE_ICD=1 -DKERNELLIB_HOST_CPU_VARIANTS=distro -DPOCL_ICD_ABSOLUTE_PATH=OFF -DENABLE_POCL_BUILDING=OFF
elif [ "${{ matrix.config }}" == "DBKs" ]; then
runCMake -DENABLE_ICD=1 -DENABLE_HOST_CPU_DEVICES=1
else
echo "Unknown configuration" && exit 1
fi
- name: Check XSMM, ONNX & libjpeg-turbo were found & enabled
if: ${{ matrix.config == 'DBKs' }}
run: >
cd ${{ github.workspace }}/build && grep 'define HAVE_ONNXRT' config.h && grep 'define HAVE_LIBJPEG_TURBO' config.h && grep 'define HAVE_LIBXSMM' config.h
- name: Build PoCL
id: build_pocl
timeout-minutes: 20
run: |
cd ${{ github.workspace }}/build && make -j$(nproc)
- name: Install PoCL
id: install_pocl
if: ${{ matrix.config == 'install' }}
timeout-minutes: 5
run: |
# remove CTestCustom.cmake - it contains POCL_BUILDING and OCL_ICD_VENDORS incompatible with install config
cd ${{ github.workspace }}/build && sudo make install && rm CTestCustom.cmake
# remove the built libpocl.so library
cd ${{ github.workspace }}/build/lib/CL && make clean
- name: Run Tests
env:
POCL_CACHE_DIR: "${{ runner.temp }}/GH_POCL_CACHE"
CL_PLATFORM_NAME: "Portable"
CL_DEVICE_TYPE: "cpu"
id: ctest
timeout-minutes: 120
run: |
rm -rf ${{ env.POCL_CACHE_DIR }}
mkdir ${{ env.POCL_CACHE_DIR }}
if [ "${{ matrix.config }}" == "install" ]; then
# Do not use the run_cpu_tests script as we want to test the installation, not
# the build dir.
# the pocl_test_dlopen tests try to dlopen libraries from the build dir;
# however, we removed it at the install step to ensure we test the installed
# so
cd ${{ github.workspace }}/build && ctest -j$(nproc) -E pocl_test_dlopen_ -LE cpu_fail $CTEST_FLAGS "$@"
else
cd ${{ github.workspace }}/build && ${{ github.workspace }}/tools/scripts/run_cpu_tests -j$(nproc) $CTEST_FLAGS "$@"
fi
|