Skip to content

Commit 103d07d

Browse files
committed
Update github workflow
1 parent 4446133 commit 103d07d

File tree

4 files changed

+135
-37
lines changed

4 files changed

+135
-37
lines changed

.github/scripts/conan-ci-setup.sh

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ pip3 install conan
88

99
conan profile detect -f
1010

11-
std=20
11+
std=23
1212
profile="$(conan profile path default)"
1313

1414
mv "$profile" "${profile}.bak"

.github/workflows/ci.yml

Lines changed: 119 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -36,56 +36,72 @@ jobs:
3636
if: always()
3737
run: cmake -P cmake/spell.cmake
3838

39-
sanitize:
39+
test-avx512:
4040
needs: [lint]
4141

42-
runs-on: ubuntu-22.04
42+
strategy:
43+
matrix:
44+
os: [ubuntu-22.04]
45+
46+
runs-on: ${{ matrix.os }}
4347

44-
env: { CXX: clang++-18 }
48+
env:
49+
CC: clang-18
50+
CXX: clang++-18
51+
CLANG_DIR: '/usr/lib/llvm-18/lib/cmake/clang'
52+
LLVM_DIR: '/usr/lib/llvm-18/lib/cmake/llvm'
4553

4654
steps:
4755
- uses: actions/checkout@v4
4856

49-
- name: Install Python
50-
uses: actions/setup-python@v5
51-
with: { python-version: "3.12" }
52-
5357
- name: Install LLVM 18
5458
run: |
5559
wget -qO- https://apt.llvm.org/llvm-snapshot.gpg.key | sudo tee /etc/apt/trusted.gpg.d/apt.llvm.org.asc
5660
sudo apt-add-repository "deb http://apt.llvm.org/jammy/ llvm-toolchain-jammy-18 main"
5761
sudo apt update
5862
sudo apt install llvm-18 llvm-18-dev llvm-18-tools clang-18 clang-tidy-18 clang-format-18 clang-tools-18 libclang-18-dev -y
5963
64+
- name: Install static analyzers
65+
if: matrix.os == 'ubuntu-22.04'
66+
run: >-
67+
sudo apt-get install clang-tidy-18 cppcheck -y -q
68+
69+
sudo update-alternatives --install
70+
/usr/bin/clang-tidy clang-tidy
71+
/usr/bin/clang-tidy-18 140
72+
6073
- name: Conan cache
6174
uses: actions/cache@v4
6275
with:
63-
path: conan_cache_save.tgz
64-
key: conan-sanitize-${{ hashFiles('conan*.[pl][yo]*') }}
76+
path: conan_cache_save-${{ matrix.os}}.tgz
77+
key: conan-${{ matrix.os }}-${{ hashFiles('conan*.[pl][yo]*') }}
6578

6679
- name: Install dependencies
80+
shell: bash
6781
run: bash < .github/scripts/conan-ci-setup.sh
6882

6983
- name: Configure
70-
run: cmake --preset=ci-sanitize
84+
shell: pwsh
85+
run: |
86+
$output = cmake -DENABLE_SIMD=ON "--preset=ci-$("${{ matrix.os }}".split("-")[0])"
87+
Write-Output $output
88+
if ($output -match "AVX-512 is supported") {
89+
Write-Output "AVX512 is enabled"
90+
} else {
91+
throw "AVX512 is not available"
92+
}
7193
7294
- name: Build
73-
run: cmake --build build/sanitize -j 2
95+
run: cmake --build build --config Release -j 4
96+
97+
- name: Install
98+
run: cmake --install build --config Release --prefix prefix
7499

75100
- name: Test
76-
working-directory: build/sanitize
77-
env:
78-
ASAN_OPTIONS: "strict_string_checks=1:\
79-
detect_stack_use_after_return=1:\
80-
check_initialization_order=1:\
81-
strict_init_order=1:\
82-
detect_leaks=1:\
83-
halt_on_error=1"
84-
UBSAN_OPTIONS: "print_stacktrace=1:\
85-
halt_on_error=1"
86-
run: ctest --output-on-failure --no-tests=error -j 2
87-
88-
test:
101+
working-directory: build
102+
run: ctest --output-on-failure --no-tests=error -C Release -j 2
103+
104+
test-nosimd:
89105
needs: [lint]
90106

91107
strategy:
@@ -94,6 +110,12 @@ jobs:
94110

95111
runs-on: ${{ matrix.os }}
96112

113+
env:
114+
CC: clang-18
115+
CXX: clang++-18
116+
CLANG_DIR: '/usr/lib/llvm-18/lib/cmake/clang'
117+
LLVM_DIR: '/usr/lib/llvm-18/lib/cmake/llvm'
118+
97119
steps:
98120
- uses: actions/checkout@v4
99121

@@ -113,14 +135,77 @@ jobs:
113135
/usr/bin/clang-tidy clang-tidy
114136
/usr/bin/clang-tidy-18 140
115137
138+
- name: Conan cache
139+
uses: actions/cache@v4
140+
with:
141+
path: conan_cache_save-${{ matrix.os}}.tgz
142+
key: conan-${{ matrix.os }}-${{ hashFiles('conan*.[pl][yo]*') }}
143+
144+
- name: Install dependencies
145+
shell: bash
146+
run: bash < .github/scripts/conan-ci-setup.sh
147+
148+
- name: Configure
149+
shell: pwsh
150+
run: |
151+
$output = cmake -DENABLE_SIMD=OFF "--preset=ci-$("${{ matrix.os }}".split("-")[0])"
152+
Write-Output $output
153+
if ($output -match "SIMD is not supported by the compiler") {
154+
Write-Output "SIMD is disabled"
155+
} else {
156+
throw "SIMD is enabled when it should not be"
157+
}
158+
159+
- name: Build
160+
run: cmake --build build --config Release -j 4
161+
162+
- name: Install
163+
run: cmake --install build --config Release --prefix prefix
164+
165+
- name: Test
166+
working-directory: build
167+
run: ctest --output-on-failure --no-tests=error -C Release -j 2
168+
169+
test-neon:
170+
needs: [lint]
171+
172+
strategy:
173+
matrix:
174+
os: [macos-14]
175+
176+
runs-on: ${{ matrix.os }}
177+
178+
env:
179+
CC: /opt/homebrew/opt/llvm@18/bin/clang
180+
CXX: /opt/homebrew/opt/llvm@18/bin/clang++
181+
CLANG_DIR: '/opt/homebrew/opt/llvm@18/bin/clang'
182+
LLVM_DIR: '/opt/homebrew/opt/llvm@18'
183+
184+
steps:
185+
- uses: actions/checkout@v4
186+
187+
- name: Install LLVM 18
188+
run: |
189+
brew install llvm@18
190+
191+
- name: Verify Installation
192+
run: |
193+
${{ env.CC }} --version
194+
${{ env.CXX }} --version
195+
196+
- name: Install static analyzers
197+
if: matrix.os == 'macos-14'
198+
run: >-
199+
brew install cppcheck
200+
116201
- name: Install Python
117202
uses: actions/setup-python@v5
118203
with: { python-version: "3.12" }
119204

120205
- name: Conan cache
121206
uses: actions/cache@v4
122207
with:
123-
path: conan_cache_save.tgz
208+
path: conan_cache_save-${{ matrix.os}}.tgz
124209
key: conan-${{ matrix.os }}-${{ hashFiles('conan*.[pl][yo]*') }}
125210

126211
- name: Install dependencies
@@ -129,15 +214,21 @@ jobs:
129214

130215
- name: Configure
131216
shell: pwsh
132-
run: cmake "--preset=ci-$("${{ matrix.os }}".split("-")[0])"
217+
run: |
218+
$output = cmake -DENABLE_SIMD=OFF "--preset=ci-$("${{ matrix.os }}".split("-")[0])"
219+
Write-Output $output
220+
if ($output -match "ARM NEON is supported by the compiler") {
221+
Write-Output "ARM NEON is enabled"
222+
} else {
223+
throw "ARM NEON is not available"
224+
}
133225
134226
- name: Build
135-
run: cmake --build build --config Release -j 2
227+
run: cmake --build build --config Release -j 4
136228

137229
- name: Install
138230
run: cmake --install build --config Release --prefix prefix
139231

140232
- name: Test
141233
working-directory: build
142234
run: ctest --output-on-failure --no-tests=error -C Release -j 2
143-

CMakeLists.txt

Lines changed: 13 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -13,9 +13,9 @@ project(
1313
include(cmake/project-is-top-level.cmake)
1414
include(cmake/variables.cmake)
1515

16-
set(CMAKE_INTERPROCEDURAL_OPTIMIZATION ON)
16+
# set(CMAKE_INTERPROCEDURAL_OPTIMIZATION ON)
1717
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -march=native")
18-
# add_compile_options(-fno-inline -fno-omit-frame-pointer)
18+
add_compile_options(-fno-inline -fno-omit-frame-pointer)
1919

2020

2121
# ---- Declare library ----
@@ -30,24 +30,31 @@ add_library(
3030
source/units/coordinates.cpp
3131
)
3232

33+
option(ENABLE_SIMD "Enable SIMD instructions if available" ON)
34+
3335
include(CheckCXXCompilerFlag)
34-
check_cxx_compiler_flag("-mavx512f -mavx512dq -mavx512vl -mavx512bf16" HAS_AVX512)
36+
check_cxx_source_compiles("
37+
#include <immintrin.h>
38+
int main() {
39+
__m512i t = _mm512_set1_epi64(0);
40+
return 0;
41+
}" HAS_AVX512)
3542
check_cxx_source_compiles("
3643
#include <arm_neon.h>
3744
int main() {
3845
float32x4_t vec = vdupq_n_f32(0.0f);
3946
return 0;
4047
}" HAS_NEON)
4148

42-
if (HAS_ALL_AVX512)
49+
if (HAS_AVX512 AND ENABLE_SIMD)
4350
message(STATUS "AVX-512 is supported by the compiler.")
4451
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -mavx512f -mavx512dq -mavx512vl -mavx512bf16")
4552
target_sources(fractal-generator_lib PRIVATE source/mandelbrot/equations_simd.cpp)
46-
elseif(HAS_NEON)
53+
elseif(HAS_NEON AND ENABLE_SIMD)
4754
message(STATUS "ARM NEON is supported by the compiler.")
4855
target_sources(fractal-generator_lib PRIVATE source/mandelbrot/equations_neon.cpp)
4956
else()
50-
message(STATUS "SIMD is not fully supported by the compiler. SIMD will not be enabled.")
57+
message(STATUS "SIMD is not supported by the compiler. SIMD will not be enabled.")
5158
target_sources(fractal-generator_lib PRIVATE source/mandelbrot/equations_compat.cpp)
5259
endif()
5360

source/config.hpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,8 @@ constexpr std::size_t WINDOW_HEIGHT = 600UZ * 2;
1212
constexpr std::size_t FRAME_RATE = 60UZ;
1313

1414
constexpr complex_domain START_COMPLEX_DOMAIN{
15-
complex_coordinate{-2, -1},
16-
complex_coordinate{1, 1.25 }
15+
complex_coordinate{-2, -1 },
16+
complex_coordinate{1, 1.25}
1717
};
1818

1919
const complex_underlying MANDELBROT_DIVERGENCE_NORM = 4;

0 commit comments

Comments
 (0)