Skip to content

Commit 906a234

Browse files
committed
Added nightly LLVM/libc++ build (with hardening)
1 parent 36bb9ce commit 906a234

File tree

1 file changed

+235
-0
lines changed

1 file changed

+235
-0
lines changed
+235
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,235 @@
1+
name: OCV Nightly U24 LLVM
2+
3+
on:
4+
pull_request:
5+
branches:
6+
- main
7+
paths:
8+
- '.github/workflows/OCV-Nightly-U24-LLVM.yaml'
9+
workflow_dispatch:
10+
schedule:
11+
- cron: '0 4 * * *'
12+
13+
14+
concurrency:
15+
group: OCV-Nightly-U24-DBG-${{ github.ref }}
16+
cancel-in-progress: true
17+
18+
env:
19+
SRC_OPENCV: '/home/ubuntu/opencv'
20+
SRC_OPENCV_CONTRIB: '/home/ubuntu/opencv_contrib'
21+
SRC_OPENCV_EXTRA: '/home/ubuntu/opencv_extra'
22+
BUILD_DIR: '/home/ubuntu/build'
23+
CCACHE_DIR: '/home/ubuntu/.ccache'
24+
GIT_CACHE_DOCKER: '/home/ubuntu/git_cache'
25+
OPENCV_DOWNLOAD_PATH: '/home/ubuntu/binaries_cache'
26+
OPENCV_TEST_DATA_PATH: '/home/ubuntu/opencv_extra/testdata'
27+
EXTRA_CMAKE_OPTIONS: '-DCMAKE_BUILD_TYPE=Debug -DCMAKE_C_COMPILER=clang -DCMAKE_CXX_COMPILER=clang++'
28+
# enable hardening in libc++: https://libcxx.llvm.org/Hardening.html
29+
CXXFLAGS: '-nostdinc++ -nostdlib++ -isystem /usr/local/include/c++/v1 -isystem /usr/local/include/x86_64-unknown-linux-gnu/c++/v1 -L /usr/local/lib/x86_64-unknown-linux-gnu -Wl,-rpath,/usr/local/lib/x86_64-unknown-linux-gnu -lc++ -D_LIBCPP_HARDENING_MODE=_LIBCPP_HARDENING_MODE_DEBUG'
30+
PARALLEL_JOBS: 4
31+
EXTRA_TEST_OPT: '--skip_unstable=1 --test_threads=4'
32+
EXTRA_PERF_OPT: '--perf_impl=plain --perf_min_samples=1 --perf_force_samples=1 --perf_verify_sanity --skip_unstable=1 --perf_threads=4'
33+
OPENCV_BUFFER_AREA_ALWAYS_SAFE: '1'
34+
35+
jobs:
36+
BuildAndTest:
37+
env:
38+
TEST_RUNNER: 'xvfb-run -a'
39+
BRANCH: '${{ matrix.branch }}'
40+
MOD_CALIB: "${{ matrix.branch == '4.x' && 'calib3d' || 'calib' }}"
41+
MOD_FEATURES: "${{ matrix.branch == '4.x' && 'features2d' || 'features' }}"
42+
strategy:
43+
max-parallel: 1
44+
matrix:
45+
branch: ['4.x', '5.x']
46+
runs-on: opencv-cn-lin-x86-64
47+
defaults:
48+
run:
49+
shell: bash
50+
working-directory: '/home/ubuntu/build'
51+
container:
52+
image: quay.io/opencv-ci/opencv-ubuntu-24.04-llvm-19:20241125
53+
volumes:
54+
- /home/opencv-cn/git_cache:/home/ubuntu/git_cache
55+
- /home/opencv-cn/ci_cache/opencv:/home/ubuntu/.ccache
56+
- /home/opencv-cn/binaries_cache:/home/ubuntu/binaries_cache
57+
steps:
58+
- name: Define proper HOME path
59+
timeout-minutes: 60
60+
run: echo "HOME=/home/ubuntu" >> $GITHUB_ENV
61+
- name: Fetch opencv
62+
timeout-minutes: 60
63+
run: |
64+
rm -rf ${{ env.SRC_OPENCV }}
65+
git clone \
66+
--single-branch \
67+
--branch ${{ env.BRANCH }} \
68+
--reference-if-able ${{ env.GIT_CACHE_DOCKER }}/opencv.git \
69+
https://github.com/opencv/opencv.git \
70+
${{ env.SRC_OPENCV }}
71+
- name: Fetch opencv_contrib
72+
timeout-minutes: 60
73+
run: |
74+
rm -rf ${{ env.SRC_OPENCV_CONTRIB }}
75+
git clone \
76+
--single-branch \
77+
--branch ${{ env.BRANCH }} \
78+
--reference-if-able ${{ env.GIT_CACHE_DOCKER }}/opencv_contrib.git \
79+
https://github.com/opencv/opencv_contrib.git \
80+
${{ env.SRC_OPENCV_CONTRIB }}
81+
- name: Fetch opencv_extra
82+
timeout-minutes: 60
83+
run: |
84+
rm -rf ${{ env.SRC_OPENCV_EXTRA }}
85+
git clone \
86+
--single-branch \
87+
--branch ${{ env.BRANCH }} \
88+
--reference-if-able ${{ env.GIT_CACHE_DOCKER }}/opencv_extra.git \
89+
https://github.com/opencv/opencv_extra.git \
90+
${{ env.SRC_OPENCV_EXTRA }}
91+
92+
- name: Configure OpenCV
93+
timeout-minutes: 60
94+
run: |
95+
cmake -G Ninja \
96+
-S ${{ env.SRC_OPENCV }} \
97+
-B ${{ env.BUILD_DIR }} \
98+
${{ env.EXTRA_CMAKE_OPTIONS }} \
99+
-DOPENCV_EXTRA_MODULES_PATH=${{ env.SRC_OPENCV_CONTRIB }}/modules \
100+
-DCMAKE_INSTALL_PREFIX=${{ env.BUILD_DIR }}/install
101+
- name: Build OpenCV
102+
timeout-minutes: 60
103+
id: build
104+
run: |
105+
ninja -C ${{ env.BUILD_DIR }} install | tee ${{ env.BUILD_DIR }}/build-log.txt
106+
- name: Warnings check
107+
timeout-minutes: 60
108+
run: python3 ${HOME}/scripts/warnings-handling.py
109+
- name: Accuracy:3d
110+
timeout-minutes: 60
111+
if: ${{ always() && matrix.branch == '5.x' && steps.build.outcome == 'success' }}
112+
run: ${{ env.TEST_RUNNER }} bin/opencv_test_3d ${{ env.EXTRA_TEST_OPT }}
113+
- name: Accuracy:calib
114+
timeout-minutes: 60
115+
if: ${{ always() && steps.build.outcome == 'success' }}
116+
run: ${{ env.TEST_RUNNER }} bin/opencv_test_${MOD_CALIB} ${{ env.EXTRA_TEST_OPT }} --gtest_filter=*:-usac_testUsacParams.accuracy:Calib3d/usac_Essential.accuracy/*
117+
- name: Accuracy:core
118+
timeout-minutes: 60
119+
if: ${{ always() && steps.build.outcome == 'success' }}
120+
run: ${{ env.TEST_RUNNER }} bin/opencv_test_core ${{ env.EXTRA_TEST_OPT }} --gtest_filter=*:-Core_reduceArgMinMax/ElemWiseTest.accuracy/0
121+
- name: Accuracy:DNN_AUTO
122+
timeout-minutes: 60
123+
if: ${{ always() && steps.build.outcome == 'success' }}
124+
run: ${{ env.TEST_RUNNER }} bin/opencv_test_dnn ${{ env.EXTRA_TEST_OPT }}
125+
- name: Accuracy:DNN_Classic
126+
timeout-minutes: 60
127+
if: ${{ always() && steps.build.outcome == 'success' }}
128+
env:
129+
OPENCV_FORCE_DNN_ENGINE: '1'
130+
run: ${{ env.TEST_RUNNER }} bin/opencv_test_dnn ${{ env.EXTRA_TEST_OPT }}
131+
- name: Accuracy:features
132+
timeout-minutes: 60
133+
if: ${{ always() && steps.build.outcome == 'success' }}
134+
run: ${{ env.TEST_RUNNER }} bin/opencv_test_${MOD_FEATURES} ${{ env.EXTRA_TEST_OPT }}
135+
- name: Accuracy:flann
136+
timeout-minutes: 60
137+
if: ${{ always() && steps.build.outcome == 'success' }}
138+
run: ${{ env.TEST_RUNNER }} bin/opencv_test_flann ${{ env.EXTRA_TEST_OPT }}
139+
# - name: Accuracy:gapi
140+
# timeout-minutes: 60
141+
# if: ${{ always() && matrix.branch == '4.x' && steps.build.outcome == 'success' }}
142+
# run: ${{ env.TEST_RUNNER }} bin/opencv_test_gapi ${{ env.EXTRA_TEST_OPT }}
143+
- name: Accuracy:highgui
144+
timeout-minutes: 60
145+
if: ${{ always() && steps.build.outcome == 'success' }}
146+
run: ${{ env.TEST_RUNNER }} bin/opencv_test_highgui ${{ env.EXTRA_TEST_OPT }}
147+
- name: Accuracy:imgcodecs
148+
timeout-minutes: 60
149+
if: ${{ always() && steps.build.outcome == 'success' }}
150+
run: ${{ env.TEST_RUNNER }} bin/opencv_test_imgcodecs ${{ env.EXTRA_TEST_OPT }}
151+
- name: Accuracy:imgproc
152+
timeout-minutes: 60
153+
if: ${{ always() && steps.build.outcome == 'success' }}
154+
run: ${{ env.TEST_RUNNER }} bin/opencv_test_imgproc ${{ env.EXTRA_TEST_OPT }}
155+
- name: Accuracy:objdetect
156+
timeout-minutes: 60
157+
if: ${{ always() && steps.build.outcome == 'success' }}
158+
run: ${{ env.TEST_RUNNER }} bin/opencv_test_objdetect ${{ env.EXTRA_TEST_OPT }} --gtest_filter=*:-Objdetect_QRCode_Encode_Decode.regression
159+
- name: Accuracy:photo
160+
timeout-minutes: 60
161+
if: ${{ always() && steps.build.outcome == 'success' }}
162+
run: ${{ env.TEST_RUNNER }} bin/opencv_test_photo ${{ env.EXTRA_TEST_OPT }}
163+
- name: Accuracy:stereo
164+
timeout-minutes: 60
165+
if: ${{ always() && steps.build.outcome == 'success' }}
166+
run: ${{ env.TEST_RUNNER }} bin/opencv_test_stereo ${{ env.EXTRA_TEST_OPT }}
167+
- name: Accuracy:stitching
168+
timeout-minutes: 60
169+
if: ${{ always() && steps.build.outcome == 'success' }}
170+
run: ${{ env.TEST_RUNNER }} bin/opencv_test_stitching ${{ env.EXTRA_TEST_OPT }}
171+
- name: Accuracy:video
172+
timeout-minutes: 60
173+
if: ${{ always() && steps.build.outcome == 'success' }}
174+
run: ${{ env.TEST_RUNNER }} bin/opencv_test_video ${{ env.EXTRA_TEST_OPT }}
175+
- name: Accuracy:videoio
176+
timeout-minutes: 60
177+
if: ${{ always() && steps.build.outcome == 'success' }}
178+
run: ${{ env.TEST_RUNNER }} bin/opencv_test_videoio ${{ env.EXTRA_TEST_OPT }}
179+
- name: Performance:3d
180+
timeout-minutes: 60
181+
if: ${{ always() && matrix.branch == '5.x' && steps.build.outcome == 'success' }}
182+
run: ${{ env.TEST_RUNNER }} bin/opencv_perf_3d ${{ env.EXTRA_PERF_OPT }}
183+
- name: Performance:calib
184+
timeout-minutes: 60
185+
if: ${{ always() && steps.build.outcome == 'success' }}
186+
run: ${{ env.TEST_RUNNER }} bin/opencv_perf_${MOD_CALIB} ${{ env.EXTRA_PERF_OPT }}
187+
- name: Performance:core
188+
timeout-minutes: 60
189+
if: ${{ always() && steps.build.outcome == 'success' }}
190+
run: ${{ env.TEST_RUNNER }} bin/opencv_perf_core ${{ env.EXTRA_PERF_OPT }}
191+
- name: Performance:dnn
192+
timeout-minutes: 60
193+
if: ${{ always() && steps.build.outcome == 'success' }}
194+
run: ${{ env.TEST_RUNNER }} bin/opencv_perf_dnn ${{ env.EXTRA_PERF_OPT }}
195+
- name: Performance:features
196+
timeout-minutes: 60
197+
if: ${{ always() && steps.build.outcome == 'success' }}
198+
run: ${{ env.TEST_RUNNER }} bin/opencv_perf_${MOD_FEATURES} ${{ env.EXTRA_PERF_OPT }}
199+
# - name: Performance:gapi
200+
# timeout-minutes: 60
201+
# if: ${{ always() && matrix.branch == '4.x' && steps.build.outcome == 'success' }}
202+
# run: ${{ env.TEST_RUNNER }} bin/opencv_perf_gapi ${{ env.EXTRA_PERF_OPT }} --gtest_filter=*:-SubPerfTestFluid/*
203+
- name: Performance:imgcodecs
204+
timeout-minutes: 60
205+
if: ${{ always() && steps.build.outcome == 'success' }}
206+
run: ${{ env.TEST_RUNNER }} bin/opencv_perf_imgcodecs ${{ env.EXTRA_PERF_OPT }}
207+
- name: Performance:imgproc
208+
timeout-minutes: 60
209+
if: ${{ always() && steps.build.outcome == 'success' }}
210+
run: ${{ env.TEST_RUNNER }} bin/opencv_perf_imgproc ${{ env.EXTRA_PERF_OPT }}
211+
- name: Performance:objdetect
212+
timeout-minutes: 60
213+
if: ${{ always() && steps.build.outcome == 'success' }}
214+
run: ${{ env.TEST_RUNNER }} bin/opencv_perf_objdetect ${{ env.EXTRA_PERF_OPT }}
215+
- name: Performance:photo
216+
timeout-minutes: 60
217+
if: ${{ always() && steps.build.outcome == 'success' }}
218+
run: ${{ env.TEST_RUNNER }} bin/opencv_perf_photo ${{ env.EXTRA_PERF_OPT }}
219+
- name: Performance:stereo
220+
timeout-minutes: 60
221+
if: ${{ always() && steps.build.outcome == 'success' }}
222+
run: ${{ env.TEST_RUNNER }} bin/opencv_perf_stereo ${{ env.EXTRA_PERF_OPT }}
223+
- name: Performance:stitching
224+
timeout-minutes: 60
225+
if: ${{ always() && steps.build.outcome == 'success' }}
226+
run: ${{ env.TEST_RUNNER }} bin/opencv_perf_stitching ${{ env.EXTRA_PERF_OPT }}
227+
- name: Performance:video
228+
timeout-minutes: 60
229+
if: ${{ always() && steps.build.outcome == 'success' }}
230+
run: ${{ env.TEST_RUNNER }} bin/opencv_perf_video ${{ env.EXTRA_PERF_OPT }}
231+
- name: Performance:videoio
232+
timeout-minutes: 60
233+
if: ${{ always() && steps.build.outcome == 'success' }}
234+
run: ${{ env.TEST_RUNNER }} bin/opencv_perf_videoio ${{ env.EXTRA_PERF_OPT }}
235+

0 commit comments

Comments
 (0)