Skip to content
This repository was archived by the owner on Jul 22, 2026. It is now read-only.

Commit 5f82816

Browse files
committed
Extract SYCL CI scripts
1 parent 429a36b commit 5f82816

5 files changed

Lines changed: 272 additions & 271 deletions

File tree

.github/workflows/sycl-ci.yml

Lines changed: 6 additions & 271 deletions
Original file line numberDiff line numberDiff line change
@@ -59,247 +59,16 @@ jobs:
5959
uses: ilammy/msvc-dev-cmd@v1
6060

6161
- name: Prepare platform settings
62-
run: |
63-
case "${{ matrix.platform }}" in
64-
linux-x86_64)
65-
echo "TOOLCHAIN_ASSET=sycl_linux.tar.gz" >> "$GITHUB_ENV"
66-
echo "TBB_ASSET=oneapi-tbb-2022.3.0-lin.tgz" >> "$GITHUB_ENV"
67-
echo "SYCL_TARGETS=spir64" >> "$GITHUB_ENV"
68-
echo "DEVICE_SELECTOR=opencl:cpu" >> "$GITHUB_ENV"
69-
echo "ITLABAI_ENABLE_OPENCV_APPS=ON" >> "$GITHUB_ENV"
70-
echo "ITLABAI_OPENCV_DIR=/usr/lib/x86_64-linux-gnu/cmake/opencv4" >> "$GITHUB_ENV"
71-
;;
72-
windows-x86_64)
73-
echo "TOOLCHAIN_ASSET=sycl_windows.tar.gz" >> "$GITHUB_ENV"
74-
echo "TBB_ASSET=oneapi-tbb-2022.3.0-win.zip" >> "$GITHUB_ENV"
75-
echo "OPENCV_ASSET=opencv-4.13.0-windows.exe" >> "$GITHUB_ENV"
76-
echo "SYCL_TARGETS=spir64" >> "$GITHUB_ENV"
77-
echo "DEVICE_SELECTOR=opencl:cpu" >> "$GITHUB_ENV"
78-
echo "ITLABAI_ENABLE_OPENCV_APPS=ON" >> "$GITHUB_ENV"
79-
;;
80-
*)
81-
echo "Unsupported platform: ${{ matrix.platform }}" >&2
82-
exit 1
83-
;;
84-
esac
85-
86-
- name: Install Linux prerequisites
87-
if: runner.os == 'Linux'
88-
run: |
89-
sudo apt-get update
90-
sudo apt-get install -y \
91-
build-essential \
92-
cmake \
93-
git \
94-
libopencv-dev \
95-
libomp-dev \
96-
ocl-icd-opencl-dev \
97-
opencl-headers \
98-
python3 \
99-
zstd
100-
101-
wget -O- https://apt.repos.intel.com/intel-gpg-keys/GPG-PUB-KEY-INTEL-SW-PRODUCTS.PUB \
102-
| gpg --dearmor \
103-
| sudo tee /usr/share/keyrings/oneapi-archive-keyring.gpg > /dev/null
104-
echo "deb [signed-by=/usr/share/keyrings/oneapi-archive-keyring.gpg] https://apt.repos.intel.com/oneapi all main" \
105-
| sudo tee /etc/apt/sources.list.d/oneAPI.list
106-
sudo apt-get update
107-
sudo apt-get install -y intel-oneapi-runtime-opencl
108-
109-
- name: Select Intel OpenCL ICD
110-
if: runner.os == 'Linux'
111-
run: |
112-
intel_icd_dir="$RUNNER_TEMP/intel-opencl-icd"
113-
intel_icd_file="$(grep -il 'intel' /etc/OpenCL/vendors/*.icd | head -n 1 || true)"
114-
if [[ -z "$intel_icd_file" ]]; then
115-
echo "Unable to locate Intel OpenCL ICD file under /etc/OpenCL/vendors" >&2
116-
ls -la /etc/OpenCL/vendors >&2
117-
exit 1
118-
fi
119-
120-
mkdir -p "$intel_icd_dir"
121-
cp "$intel_icd_file" "$intel_icd_dir/"
122-
echo "OCL_ICD_VENDORS=$intel_icd_dir" >> "$GITHUB_ENV"
123-
124-
- name: Download Intel SYCL toolchain binaries
125-
run: |
126-
if [[ "$RUNNER_OS" == "Windows" ]]; then
127-
runner_temp_dir="$(cygpath -u "$RUNNER_TEMP")"
128-
else
129-
runner_temp_dir="$RUNNER_TEMP"
130-
fi
131-
132-
mkdir -p "$runner_temp_dir/intel-sycl"
133-
curl -fsSL \
134-
"https://github.com/intel/llvm/releases/download/${INTEL_LLVM_TAG}/${TOOLCHAIN_ASSET}" \
135-
-o "$runner_temp_dir/${TOOLCHAIN_ASSET}"
136-
tar -xzf "$runner_temp_dir/${TOOLCHAIN_ASSET}" \
137-
-C "$runner_temp_dir/intel-sycl"
138-
139-
sycl_root="$runner_temp_dir/intel-sycl"
140-
141-
if [[ -d "$sycl_root/sycl_windows/bin" ]]; then
142-
sycl_root="$sycl_root/sycl_windows"
143-
elif [[ -d "$sycl_root/sycl_linux/bin" ]]; then
144-
sycl_root="$sycl_root/sycl_linux"
145-
fi
146-
147-
echo "SYCL_ROOT=$sycl_root" >> "$GITHUB_ENV"
148-
149-
- name: Download OpenCV release binaries
150-
if: runner.os == 'Windows'
151-
run: |
152-
runner_temp_dir="$(cygpath -u "$RUNNER_TEMP")"
153-
opencv_archive="$runner_temp_dir/${OPENCV_ASSET}"
154-
opencv_extract_dir="$runner_temp_dir/opencv"
155-
156-
curl -fsSL \
157-
"https://github.com/opencv/opencv/releases/download/${OPENCV_TAG}/${OPENCV_ASSET}" \
158-
-o "$opencv_archive"
159-
7z x -y "-o$opencv_extract_dir" "$opencv_archive"
160-
161-
echo "ITLABAI_OPENCV_DIR=$(cygpath -m "$opencv_extract_dir/opencv/build/x64/vc16/lib")" >> "$GITHUB_ENV"
162-
echo "$(cygpath -m "$opencv_extract_dir/opencv/build/x64/vc16/bin")" >> "$GITHUB_PATH"
163-
164-
- name: Install Intel OpenCL CPU runtime
165-
if: runner.os == 'Windows'
166-
run: |
167-
runner_temp_dir="$(cygpath -u "$RUNNER_TEMP")"
168-
runtime_archive="$runner_temp_dir/intel-opencl-runtime.exe"
169-
runtime_extract_dir="$runner_temp_dir/intel-opencl-runtime"
170-
runtime_msi="$runtime_extract_dir/w_opencl_runtime_p_2025.3.1.762.msi"
171-
172-
curl -fsSL "${INTEL_OPENCL_CPU_RUNTIME_URL}" -o "$runtime_archive"
173-
7z x -y "-o$runtime_extract_dir" "$runtime_archive"
174-
175-
powershell -NoProfile -Command \
176-
"Start-Process msiexec.exe -Wait -ArgumentList '/i', '$(cygpath -w "$runtime_msi")', '/qn', '/norestart'"
177-
178-
- name: Download oneTBB release binaries
179-
run: |
180-
if [[ "$RUNNER_OS" == "Windows" ]]; then
181-
runner_temp_dir="$(cygpath -u "$RUNNER_TEMP")"
182-
tbb_archive="$runner_temp_dir/${TBB_ASSET}"
183-
tbb_extract_dir="$runner_temp_dir/oneapi-tbb"
184-
185-
curl -fsSL \
186-
"https://github.com/uxlfoundation/oneTBB/releases/download/${TBB_TAG}/${TBB_ASSET}" \
187-
-o "$tbb_archive"
188-
7z x -y "-o$tbb_extract_dir" "$tbb_archive"
189-
190-
echo "ITLABAI_TBB_DIR=$(cygpath -m "$tbb_extract_dir/oneapi-tbb-2022.3.0")" >> "$GITHUB_ENV"
191-
echo "$(cygpath -m "$tbb_extract_dir/oneapi-tbb-2022.3.0/redist/intel64/vc14")" >> "$GITHUB_PATH"
192-
else
193-
tbb_archive="$RUNNER_TEMP/${TBB_ASSET}"
194-
tbb_extract_dir="$RUNNER_TEMP/oneapi-tbb"
195-
196-
curl -fsSL \
197-
"https://github.com/uxlfoundation/oneTBB/releases/download/${TBB_TAG}/${TBB_ASSET}" \
198-
-o "$tbb_archive"
199-
mkdir -p "$tbb_extract_dir"
200-
tar -xzf "$tbb_archive" -C "$tbb_extract_dir"
201-
202-
echo "ITLABAI_TBB_DIR=$tbb_extract_dir/oneapi-tbb-2022.3.0" >> "$GITHUB_ENV"
203-
echo "LD_LIBRARY_PATH=$tbb_extract_dir/oneapi-tbb-2022.3.0/lib/intel64/gcc4.8:$LD_LIBRARY_PATH" >> "$GITHUB_ENV"
204-
fi
205-
206-
- name: Locate SYCL compiler
207-
run: |
208-
if [[ "$RUNNER_OS" == "Windows" ]]; then
209-
if [[ -x "$SYCL_ROOT/bin/icx.exe" ]]; then
210-
cc_path="$SYCL_ROOT/bin/icx.exe"
211-
elif [[ -x "$SYCL_ROOT/bin/icx-cl.exe" ]]; then
212-
cc_path="$SYCL_ROOT/bin/icx-cl.exe"
213-
elif [[ -x "$SYCL_ROOT/bin/clang.exe" ]]; then
214-
cc_path="$SYCL_ROOT/bin/clang.exe"
215-
elif [[ -x "$SYCL_ROOT/bin/clang-cl.exe" ]]; then
216-
cc_path="$SYCL_ROOT/bin/clang-cl.exe"
217-
else
218-
echo "Unable to locate a C compiler in $SYCL_ROOT/bin" >&2
219-
exit 1
220-
fi
221-
222-
if [[ -x "$SYCL_ROOT/bin/icpx.exe" ]]; then
223-
cxx_path="$SYCL_ROOT/bin/icpx.exe"
224-
elif [[ -x "$SYCL_ROOT/bin/icx-cl.exe" ]]; then
225-
cxx_path="$SYCL_ROOT/bin/icx-cl.exe"
226-
elif [[ -x "$SYCL_ROOT/bin/clang++.exe" ]]; then
227-
cxx_path="$SYCL_ROOT/bin/clang++.exe"
228-
elif [[ -x "$SYCL_ROOT/bin/clang-cl.exe" ]]; then
229-
cxx_path="$SYCL_ROOT/bin/clang-cl.exe"
230-
else
231-
echo "Unable to locate a C++ compiler in $SYCL_ROOT/bin" >&2
232-
exit 1
233-
fi
234-
235-
echo "ITLABAI_CC=$(cygpath -m "$cc_path")" >> "$GITHUB_ENV"
236-
echo "ITLABAI_CXX=$(cygpath -m "$cxx_path")" >> "$GITHUB_ENV"
237-
echo "ITLABAI_CMAKE_PREFIX_PATH=$(cygpath -m "$SYCL_ROOT")" >> "$GITHUB_ENV"
238-
echo "$(cygpath -m "$SYCL_ROOT/bin")" >> "$GITHUB_PATH"
239-
else
240-
if [[ -x "$SYCL_ROOT/bin/icx" ]]; then
241-
echo "ITLABAI_CC=$SYCL_ROOT/bin/icx" >> "$GITHUB_ENV"
242-
elif [[ -x "$SYCL_ROOT/bin/clang" ]]; then
243-
echo "ITLABAI_CC=$SYCL_ROOT/bin/clang" >> "$GITHUB_ENV"
244-
else
245-
echo "Unable to locate a C compiler in $SYCL_ROOT/bin" >&2
246-
exit 1
247-
fi
248-
249-
if [[ -x "$SYCL_ROOT/bin/icpx" ]]; then
250-
echo "ITLABAI_CXX=$SYCL_ROOT/bin/icpx" >> "$GITHUB_ENV"
251-
elif [[ -x "$SYCL_ROOT/bin/clang++" ]]; then
252-
echo "ITLABAI_CXX=$SYCL_ROOT/bin/clang++" >> "$GITHUB_ENV"
253-
else
254-
echo "Unable to locate a C++ compiler in $SYCL_ROOT/bin" >&2
255-
exit 1
256-
fi
257-
258-
echo "ITLABAI_CMAKE_PREFIX_PATH=$SYCL_ROOT" >> "$GITHUB_ENV"
259-
echo "$SYCL_ROOT/bin" >> "$GITHUB_PATH"
260-
261-
if [[ -d "$SYCL_ROOT/lib" ]]; then
262-
echo "LD_LIBRARY_PATH=$SYCL_ROOT/lib:$LD_LIBRARY_PATH" >> "$GITHUB_ENV"
263-
echo "DYLD_LIBRARY_PATH=$SYCL_ROOT/lib:$DYLD_LIBRARY_PATH" >> "$GITHUB_ENV"
264-
fi
265-
266-
if [[ -d "$SYCL_ROOT/lib64" ]]; then
267-
echo "LD_LIBRARY_PATH=$SYCL_ROOT/lib64:$LD_LIBRARY_PATH" >> "$GITHUB_ENV"
268-
echo "DYLD_LIBRARY_PATH=$SYCL_ROOT/lib64:$DYLD_LIBRARY_PATH" >> "$GITHUB_ENV"
269-
fi
270-
fi
62+
run: ./scripts/ci/sycl-x86-setup.sh "${{ matrix.platform }}"
27163

27264
- name: Configure
273-
run: |
274-
launcher_args=()
275-
if [[ "$RUNNER_OS" != "Windows" ]]; then
276-
launcher_args+=(
277-
-DCMAKE_C_COMPILER_LAUNCHER=ccache
278-
-DCMAKE_CXX_COMPILER_LAUNCHER=ccache
279-
)
280-
fi
281-
282-
cmake -S . -B build -G Ninja \
283-
"${launcher_args[@]}" \
284-
-DCMAKE_C_COMPILER="${ITLABAI_CC}" \
285-
-DCMAKE_CXX_COMPILER="${ITLABAI_CXX}" \
286-
-DCMAKE_BUILD_TYPE="${{ matrix.build_type }}" \
287-
-DCMAKE_PREFIX_PATH="${ITLABAI_CMAKE_PREFIX_PATH}" \
288-
-DITLABAI_ENABLE_OPENMP=OFF \
289-
-DITLABAI_ENABLE_OPENCV_APPS="${ITLABAI_ENABLE_OPENCV_APPS}" \
290-
-DITLABAI_BUILD_TESTS=ON \
291-
-DITLABAI_OPENCV_DIR="${ITLABAI_OPENCV_DIR}" \
292-
-DITLABAI_TBB_DIR="${ITLABAI_TBB_DIR}" \
293-
-DITLABAI_ENABLE_SYCL=ON \
294-
-DITLABAI_SYCL_TARGETS="${SYCL_TARGETS}"
65+
run: ./scripts/ci/sycl-configure.sh "${{ matrix.build_type }}" "${SYCL_TARGETS}" "${ITLABAI_ENABLE_OPENCV_APPS}"
29566

29667
- name: Build
29768
run: cmake --build build --parallel
29869

29970
- name: Test
300-
run: |
301-
ONEAPI_DEVICE_SELECTOR="${DEVICE_SELECTOR}" \
302-
ctest --test-dir build --output-on-failure --parallel
71+
run: ./scripts/ci/sycl-test.sh "${DEVICE_SELECTOR}"
30372

30473
build-sycl-macos-arm64:
30574
name: macos-arm64 / ${{ matrix.build_type }}
@@ -331,47 +100,13 @@ jobs:
331100
max-size: 2G
332101

333102
- name: Install macOS prerequisites
334-
run: |
335-
brew install adaptivecpp opencv tbb
336-
337-
- name: Locate AdaptiveCpp compiler
338-
run: |
339-
adaptivecpp_prefix="$(brew --prefix adaptivecpp)"
340-
opencv_prefix="$(brew --prefix opencv)"
341-
tbb_prefix="$(brew --prefix tbb)"
342-
echo "ITLABAI_CC=$(xcrun --find clang)" >> "$GITHUB_ENV"
343-
echo "ITLABAI_CXX=$(command -v acpp)" >> "$GITHUB_ENV"
344-
echo "ITLABAI_CMAKE_PREFIX_PATH=$adaptivecpp_prefix" >> "$GITHUB_ENV"
345-
echo "ITLABAI_OPENCV_DIR=$opencv_prefix/lib/cmake/opencv4" >> "$GITHUB_ENV"
346-
echo "ITLABAI_TBB_DIR=$tbb_prefix" >> "$GITHUB_ENV"
347-
echo "$adaptivecpp_prefix/bin" >> "$GITHUB_PATH"
103+
run: ./scripts/ci/sycl-macos-setup.sh
348104

349105
- name: Configure
350-
run: |
351-
launcher_args=()
352-
if [[ "$RUNNER_OS" != "Windows" ]]; then
353-
launcher_args+=(
354-
-DCMAKE_C_COMPILER_LAUNCHER=ccache
355-
-DCMAKE_CXX_COMPILER_LAUNCHER=ccache
356-
)
357-
fi
358-
359-
cmake -S . -B build -G Ninja \
360-
"${launcher_args[@]}" \
361-
-DCMAKE_C_COMPILER="${ITLABAI_CC}" \
362-
-DCMAKE_CXX_COMPILER="${ITLABAI_CXX}" \
363-
-DCMAKE_BUILD_TYPE="${{ matrix.build_type }}" \
364-
-DCMAKE_PREFIX_PATH="${ITLABAI_CMAKE_PREFIX_PATH}" \
365-
-DITLABAI_ENABLE_OPENMP=OFF \
366-
-DITLABAI_ENABLE_OPENCV_APPS=ON \
367-
-DITLABAI_BUILD_TESTS=ON \
368-
-DITLABAI_OPENCV_DIR="${ITLABAI_OPENCV_DIR}" \
369-
-DITLABAI_TBB_DIR="${ITLABAI_TBB_DIR}" \
370-
-DITLABAI_ENABLE_SYCL=ON \
371-
-DITLABAI_SYCL_TARGETS=omp
106+
run: ./scripts/ci/sycl-configure.sh "${{ matrix.build_type }}" "${SYCL_TARGETS}" "${ITLABAI_ENABLE_OPENCV_APPS}"
372107

373108
- name: Build
374109
run: cmake --build build --parallel
375110

376111
- name: Test
377-
run: ctest --test-dir build --output-on-failure --parallel
112+
run: ./scripts/ci/sycl-test.sh

scripts/ci/sycl-configure.sh

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
#!/usr/bin/env bash
2+
set -euo pipefail
3+
4+
build_type="${1:?build type is required}"
5+
sycl_targets="${2:?sycl targets are required}"
6+
opencv_apps="${3:?opencv apps toggle is required}"
7+
8+
launcher_args=()
9+
if [[ "${RUNNER_OS}" != "Windows" ]]; then
10+
launcher_args+=(
11+
-DCMAKE_C_COMPILER_LAUNCHER=ccache
12+
-DCMAKE_CXX_COMPILER_LAUNCHER=ccache
13+
)
14+
fi
15+
16+
cmake -S . -B build -G Ninja \
17+
"${launcher_args[@]}" \
18+
-DCMAKE_C_COMPILER="${ITLABAI_CC}" \
19+
-DCMAKE_CXX_COMPILER="${ITLABAI_CXX}" \
20+
-DCMAKE_BUILD_TYPE="${build_type}" \
21+
-DCMAKE_PREFIX_PATH="${ITLABAI_CMAKE_PREFIX_PATH}" \
22+
-DITLABAI_ENABLE_OPENMP=OFF \
23+
-DITLABAI_ENABLE_OPENCV_APPS="${opencv_apps}" \
24+
-DITLABAI_BUILD_TESTS=ON \
25+
-DITLABAI_OPENCV_DIR="${ITLABAI_OPENCV_DIR:-}" \
26+
-DITLABAI_TBB_DIR="${ITLABAI_TBB_DIR:-}" \
27+
-DITLABAI_ENABLE_SYCL=ON \
28+
-DITLABAI_SYCL_TARGETS="${sycl_targets}"

scripts/ci/sycl-macos-setup.sh

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
#!/usr/bin/env bash
2+
set -euo pipefail
3+
4+
write_env() {
5+
local key="$1"
6+
local value="$2"
7+
echo "${key}=${value}" >> "${GITHUB_ENV}"
8+
export "${key}=${value}"
9+
}
10+
11+
append_path() {
12+
echo "$1" >> "${GITHUB_PATH}"
13+
}
14+
15+
brew install adaptivecpp opencv tbb
16+
17+
adaptivecpp_prefix="$(brew --prefix adaptivecpp)"
18+
opencv_prefix="$(brew --prefix opencv)"
19+
tbb_prefix="$(brew --prefix tbb)"
20+
21+
write_env ITLABAI_CC "$(xcrun --find clang)"
22+
write_env ITLABAI_CXX "$(command -v acpp)"
23+
write_env ITLABAI_CMAKE_PREFIX_PATH "${adaptivecpp_prefix}"
24+
write_env ITLABAI_OPENCV_DIR "${opencv_prefix}/lib/cmake/opencv4"
25+
write_env ITLABAI_TBB_DIR "${tbb_prefix}"
26+
write_env ITLABAI_ENABLE_OPENCV_APPS ON
27+
write_env SYCL_TARGETS omp
28+
29+
append_path "${adaptivecpp_prefix}/bin"

scripts/ci/sycl-test.sh

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
#!/usr/bin/env bash
2+
set -euo pipefail
3+
4+
device_selector="${1:-}"
5+
6+
if [[ -n "${device_selector}" ]]; then
7+
ONEAPI_DEVICE_SELECTOR="${device_selector}" \
8+
ctest --test-dir build --output-on-failure --parallel
9+
else
10+
ctest --test-dir build --output-on-failure --parallel
11+
fi

0 commit comments

Comments
 (0)