File: build_linux_gh.yml

package info (click to toggle)
pocl 7.1-1
  • links: PTS, VCS
  • area: main
  • in suites: experimental
  • size: 29,768 kB
  • sloc: lisp: 151,669; ansic: 135,425; cpp: 65,801; python: 1,846; sh: 1,084; ruby: 255; pascal: 231; tcl: 180; makefile: 174; asm: 81; java: 72; xml: 49
file content (200 lines) | stat: -rw-r--r-- 9,430 bytes parent folder | download
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