@@ -10,154 +10,116 @@ defaults:
1010jobs :
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
0 commit comments