Skip to content

Commit 7049c32

Browse files
committed
Add CMakePresets.txt
1 parent 24053b5 commit 7049c32

4 files changed

Lines changed: 328 additions & 100 deletions

File tree

.github/workflows/linux.yml

Lines changed: 62 additions & 100 deletions
Original file line numberDiff line numberDiff line change
@@ -10,154 +10,116 @@ defaults:
1010
jobs:
1111
build:
1212
runs-on: ubuntu-latest
13-
name: '${{ matrix.sys.compiler }} ${{ matrix.sys.version }} - ${{ matrix.sys.flags }}'
13+
name: '${{ matrix.sys.compiler }} ${{ matrix.sys.version }} - ${{ matrix.sys.preset }} - ${{ matrix.sys.flags }}'
1414
strategy:
1515
matrix:
1616
sys:
17-
- { compiler: 'gcc', version: '12', flags: 'force_no_instr_set' }
18-
- { compiler: 'gcc', version: '13', flags: 'enable_xtl_complex' }
19-
- { compiler: 'gcc', version: '14', flags: 'avx' }
20-
- { compiler: 'gcc', version: '14', flags: 'avx2' }
21-
- { compiler: 'gcc', version: '13', flags: 'avx512' }
22-
- { compiler: 'gcc', version: '10', flags: 'avx512' }
23-
- { compiler: 'gcc', version: '12', flags: 'i386' }
24-
- { compiler: 'gcc', version: '13', flags: 'avx512pf' }
25-
- { compiler: 'gcc', version: '13', flags: 'avx512vbmi' }
26-
- { compiler: 'gcc', version: '14', flags: 'avx512vbmi2' }
27-
- { compiler: 'gcc', version: '13', flags: 'avx512vnni' }
28-
- { compiler: 'clang', version: '16', flags: 'force_no_instr_set' }
29-
- { compiler: 'clang', version: '16', flags: 'enable_xtl_complex' }
30-
- { compiler: 'clang', version: '17', flags: 'avx' }
31-
- { compiler: 'clang', version: '17', flags: 'sse3' }
32-
- { compiler: 'clang', version: '18', flags: 'avx512' }
33-
- { compiler: 'clang', version: '18', flags: 'avx_128' }
34-
- { compiler: 'clang', version: '18', flags: 'avx2_128' }
35-
- { compiler: 'clang', version: '18', flags: 'avx512vl_128' }
36-
- { compiler: 'clang', version: '18', flags: 'avx512vl_256' }
17+
- { compiler: 'gcc', version: '12', flags: 'force_no_instr_set', preset: 'native' }
18+
- { compiler: 'gcc', version: '13', flags: 'enable_xtl_complex', preset: 'native' }
19+
- { compiler: 'gcc', version: '14', flags: '', preset: 'avx' }
20+
- { compiler: 'gcc', version: '14', flags: '', preset: 'avx2' }
21+
- { compiler: 'gcc', version: '13', flags: '', preset: 'avx512f' }
22+
- { compiler: 'gcc', version: '10', flags: '', preset: 'avx512f' }
23+
- { compiler: 'gcc', version: '12', flags: 'i386', preset: 'native' }
24+
- { compiler: 'gcc', version: '13', flags: '', preset: 'avx512pf' }
25+
- { compiler: 'gcc', version: '13', flags: '', preset: 'avx512vbmi' }
26+
- { compiler: 'gcc', version: '14', flags: '', preset: 'avx512vbmi2' }
27+
- { compiler: 'gcc', version: '13', flags: '', preset: 'avx512vnni_avx512bw' }
28+
- { compiler: 'clang', version: '16', flags: 'force_no_instr_set', preset: 'native' }
29+
- { compiler: 'clang', version: '16', flags: 'enable_xtl_complex', preset: 'native' }
30+
- { compiler: 'clang', version: '17', flags: '', preset: 'avx' }
31+
- { compiler: 'clang', version: '17', flags: '', preset: 'sse3' }
32+
- { compiler: 'clang', version: '18', flags: '', preset: 'avx512f' }
33+
- { compiler: 'clang', version: '18', flags: '', preset: 'avx_128' }
34+
- { compiler: 'clang', version: '18', flags: '', preset: 'avx2_128' }
35+
- { compiler: 'clang', version: '18', flags: '', preset: 'avx512vl_128' }
36+
- { compiler: 'clang', version: '18', flags: '', preset: 'avx512vl_256' }
3737
steps:
38-
- name: Setup compiler
38+
- name: Setup GCC compiler
3939
if: ${{ matrix.sys.compiler == 'gcc' }}
4040
run: |
4141
GCC_VERSION=${{ matrix.sys.version }}
4242
sudo apt-get update
4343
sudo apt-get --no-install-suggests --no-install-recommends install g++-$GCC_VERSION
44-
sudo dpkg --add-architecture i386
45-
sudo add-apt-repository ppa:ubuntu-toolchain-r/test
46-
sudo apt-get update
47-
sudo apt-get --no-install-suggests --no-install-recommends install gcc-$GCC_VERSION-multilib g++-$GCC_VERSION-multilib linux-libc-dev:i386
48-
CC=gcc-$GCC_VERSION
49-
echo "CC=$CC" >> $GITHUB_ENV
50-
CXX=g++-$GCC_VERSION
51-
echo "CXX=$CXX" >> $GITHUB_ENV
52-
- name: Setup compiler
44+
# Setup i386 as needed
45+
if [[ '${{ matrix.sys.flags }}' == 'i386' ]]; then
46+
sudo dpkg --add-architecture i386
47+
sudo add-apt-repository ppa:ubuntu-toolchain-r/test
48+
sudo apt-get update
49+
sudo apt-get --no-install-suggests --no-install-recommends install \
50+
gcc-$GCC_VERSION-multilib g++-$GCC_VERSION-multilib linux-libc-dev:i386
51+
fi
52+
# Export compiler as environment var
53+
echo "CC=gcc-$GCC_VERSION" >> $GITHUB_ENV
54+
echo "CXX=g++-$GCC_VERSION" >> $GITHUB_ENV
55+
56+
- name: Setup Clang compiler
5357
if: ${{ matrix.sys.compiler == 'clang' }}
5458
run: |
5559
LLVM_VERSION=${{ matrix.sys.version }}
5660
sudo apt-get update || exit 1
5761
sudo apt-get --no-install-suggests --no-install-recommends install clang-$LLVM_VERSION || exit 1
5862
sudo apt-get --no-install-suggests --no-install-recommends install g++ g++-multilib || exit 1
5963
sudo ln -s /usr/include/asm-generic /usr/include/asm
60-
CC=clang-$LLVM_VERSION
61-
echo "CC=$CC" >> $GITHUB_ENV
62-
CXX=clang++-$LLVM_VERSION
63-
echo "CXX=$CXX" >> $GITHUB_ENV
64+
# Export compiler as environment var
65+
echo "CC=clang-$LLVM_VERSION" >> $GITHUB_ENV
66+
echo "CXX=clang++-$LLVM_VERSION" >> $GITHUB_ENV
67+
6468
- name: Checkout xsimd
6569
uses: actions/checkout@v6
70+
6671
- name: Install mamba
67-
uses: mamba-org/setup-micromamba@v2
72+
uses: mamba-org/setup-micromamba@v3
6873
with:
6974
environment-file: environment.yml
75+
7076
- name: Setup SDE
71-
if: startswith(matrix.sys.flags, 'avx512')
77+
if: startswith(matrix.sys.preset, 'avx512')
7278
run: sh install_sde.sh
79+
7380
- name: Configure build
74-
env:
75-
CC: ${{ env.CC }}
76-
CXX: ${{ env.CXX }}
7781
run: |
7882
if [[ '${{ matrix.sys.flags }}' == 'enable_xtl_complex' ]]; then
7983
CMAKE_EXTRA_ARGS="$CMAKE_EXTRA_ARGS -DENABLE_XTL_COMPLEX=ON"
8084
fi
81-
if [[ '${{ matrix.sys.flags }}' == 'avx' ]]; then
82-
CMAKE_EXTRA_ARGS="$CMAKE_EXTRA_ARGS -DTARGET_ARCH=sandybridge"
83-
fi
84-
if [[ '${{ matrix.sys.flags }}' == 'avx_128' ]]; then
85-
CMAKE_EXTRA_ARGS="$CMAKE_EXTRA_ARGS -DTARGET_ARCH=sandybridge"
86-
CXXFLAGS="$CXX_FLAGS -DXSIMD_DEFAULT_ARCH=avx_128"
87-
fi
88-
if [[ '${{ matrix.sys.flags }}' == 'avx2' ]]; then
89-
CMAKE_EXTRA_ARGS="$CMAKE_EXTRA_ARGS -DTARGET_ARCH=haswell"
90-
fi
91-
if [[ '${{ matrix.sys.flags }}' == 'avx2_128' ]]; then
92-
CMAKE_EXTRA_ARGS="$CMAKE_EXTRA_ARGS -DTARGET_ARCH=haswell"
93-
CXXFLAGS="$CXX_FLAGS -DXSIMD_DEFAULT_ARCH=avx2_128"
94-
fi
95-
if [[ '${{ matrix.sys.flags }}' == 'sse3' ]]; then
96-
CMAKE_EXTRA_ARGS="$CMAKE_EXTRA_ARGS -DTARGET_ARCH=nocona"
97-
fi
98-
if [[ '${{ matrix.sys.flags }}' == 'avx512' ]]; then
99-
CMAKE_EXTRA_ARGS="$CMAKE_EXTRA_ARGS -DTARGET_ARCH=skylake-avx512"
100-
fi
101-
if [[ '${{ matrix.sys.flags }}' == 'avx512vl_128' ]]; then
102-
CMAKE_EXTRA_ARGS="$CMAKE_EXTRA_ARGS -DTARGET_ARCH=skylake-avx512"
103-
CXXFLAGS="$CXXFLAGS -DXSIMD_DEFAULT_ARCH=avx512vl_128"
104-
fi
105-
if [[ '${{ matrix.sys.flags }}' == 'avx512vl_256' ]]; then
106-
CMAKE_EXTRA_ARGS="$CMAKE_EXTRA_ARGS -DTARGET_ARCH=skylake-avx512"
107-
CXXFLAGS="$CXX_FLAGS -DXSIMD_DEFAULT_ARCH=avx512vl_256"
108-
fi
109-
if [[ '${{ matrix.sys.flags }}' == 'avx512pf' ]]; then
110-
CMAKE_EXTRA_ARGS="$CMAKE_EXTRA_ARGS -DTARGET_ARCH=knl"
111-
fi
112-
if [[ '${{ matrix.sys.flags }}' == 'avx512vbmi' ]]; then
113-
CMAKE_EXTRA_ARGS="$CMAKE_EXTRA_ARGS -DTARGET_ARCH=cannonlake"
114-
fi
115-
if [[ '${{ matrix.sys.flags }}' == 'avx512vbmi2' ]]; then
116-
CMAKE_EXTRA_ARGS="$CMAKE_EXTRA_ARGS -DTARGET_ARCH=icelake-server"
117-
fi
118-
if [[ '${{ matrix.sys.flags }}' == 'avx512vnni' ]]; then
119-
CMAKE_EXTRA_ARGS="$CMAKE_EXTRA_ARGS -DTARGET_ARCH=knm"
120-
fi
12185
if [[ '${{ matrix.sys.flags }}' == 'i386' ]]; then
122-
CXX_FLAGS="$CXX_FLAGS -m32"
86+
export CXXFLAGS="$CXXFLAGS -m32"
12387
fi
124-
if [[ '${{ matrix.sys.flags }}' == 'force_no_instr_set' ]]; then
125-
:
126-
else
88+
if [[ '${{ matrix.sys.flags }}' != 'force_no_instr_set' ]]; then
12789
CMAKE_EXTRA_ARGS="$CMAKE_EXTRA_ARGS -DXSIMD_ENABLE_WERROR=ON"
12890
fi
12991
130-
# Cheap way of spotting uninitialized read
131-
CXX_FLAGS="$CXX_FLAGS -ftrivial-auto-var-init=pattern"
132-
13392
cmake -B _build \
134-
-DBUILD_TESTS=ON \
135-
-DBUILD_BENCHMARK=ON \
136-
-DBUILD_EXAMPLES=ON \
137-
-DCMAKE_BUILD_TYPE=Release \
138-
-DCMAKE_C_COMPILER=$CC \
139-
-DCMAKE_CXX_COMPILER=$CXX \
140-
$CMAKE_EXTRA_ARGS \
141-
-DCMAKE_CXX_FLAGS='$CXX_FLAGS' \
93+
--preset ${{ matrix.sys.preset }} \
94+
-D BUILD_TESTS=ON \
95+
-D BUILD_BENCHMARK=ON \
96+
-D BUILD_EXAMPLES=ON \
97+
-D CMAKE_BUILD_TYPE=Release \
98+
-D CMAKE_C_COMPILER="${CC}" \
99+
-D CMAKE_CXX_COMPILER="${CXX}" \
100+
-D TARGET_ARCH="x86-64" \
101+
-D XSIMD_HARDEN_TRIVIAL_AUTO_VAR_INIT=ON \
102+
"${CMAKE_EXTRA_ARGS}" \
142103
-G Ninja
104+
143105
- name: Build
144-
run: cmake --build _build
106+
run: cmake --build _build --parallel
145107
- name: Test
146108
run: |
147109
# Set CPU feature test expectations, 0 is explicit absence of the feature
148110
export XSIMD_TEST_CPU_ASSUME_NEON64="0"
149111
export XSIMD_TEST_CPU_ASSUME_RVV="0"
150112
export XSIMD_TEST_CPU_ASSUME_VSX="0"
151113
export XSIMD_TEST_CPU_ASSUME_VXE="0"
152-
cd _build/test
153-
if echo '${{ matrix.sys.flags }}' | grep -q 'avx512' ; then
114+
115+
if echo '${{ matrix.sys.preset }}' | grep -q 'avx512' ; then
154116
# Running with emulation, must have AVX512, lower tier are checked by implications in tests
155117
export XSIMD_TEST_CPU_ASSUME_AVX512F="1"
156-
../../sde-external-9.48.0-2024-11-25-lin/sde64 -tgl -- ./test_xsimd
118+
./sde-external-9.48.0-2024-11-25-lin/sde64 -spr -- ./_build/test/test_xsimd
157119
else
158120
export XSIMD_TEST_CPU_ASSUME_SSE4_2=$(grep -q 'sse4_2' /proc/cpuinfo && echo "1" || echo "0")
159121
export XSIMD_TEST_CPU_ASSUME_AVX=$(grep -q 'avx' /proc/cpuinfo && echo "1" || echo "0")
160122
export XSIMD_TEST_CPU_ASSUME_AVX512F=$(grep -q 'avx512f' /proc/cpuinfo && echo "1" || echo "0")
161123
export XSIMD_TEST_CPU_ASSUME_MANUFACTURER="intel,amd"
162-
./test_xsimd
124+
./_build/test/test_xsimd
163125
fi

CMakeLists.txt

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,21 @@ if(ENABLE_XTL_COMPLEX)
5454
)
5555
endif()
5656

57+
# Dev options
58+
# ===========
59+
60+
include (cmake/Hardening.cmake)
61+
62+
option(
63+
XSIMD_HARDEN_TRIVIAL_AUTO_VAR_INIT
64+
"Enable -ftrivial-auto-var-init hardening flag if supported"
65+
OFF
66+
)
67+
68+
if(XSIMD_HARDEN_TRIVIAL_AUTO_VAR_INIT)
69+
xsimd_harden_trivial_auto_var_init(xsimd INTERFACE)
70+
endif()
71+
5772
if(BUILD_TESTS)
5873
enable_testing()
5974
add_subdirectory(test)

0 commit comments

Comments
 (0)