From fe96a438945188d05da9a38c9804c8fc95c10399 Mon Sep 17 00:00:00 2001 From: AntoinePrv Date: Wed, 13 May 2026 18:06:15 +0200 Subject: [PATCH 1/2] Add CMakePresets.txt --- .github/workflows/linux.yml | 162 +++++++++++---------------- CMakeLists.txt | 15 +++ CMakePresets.json | 214 ++++++++++++++++++++++++++++++++++++ cmake/Hardening.cmake | 37 +++++++ 4 files changed, 328 insertions(+), 100 deletions(-) create mode 100644 CMakePresets.json create mode 100644 cmake/Hardening.cmake diff --git a/.github/workflows/linux.yml b/.github/workflows/linux.yml index 6fe7779a7..afae73268 100644 --- a/.github/workflows/linux.yml +++ b/.github/workflows/linux.yml @@ -10,46 +10,50 @@ defaults: jobs: build: runs-on: ubuntu-latest - name: '${{ matrix.sys.compiler }} ${{ matrix.sys.version }} - ${{ matrix.sys.flags }}' + name: '${{ matrix.sys.compiler }} ${{ matrix.sys.version }} - ${{ matrix.sys.preset }} - ${{ matrix.sys.flags }}' strategy: matrix: sys: - - { compiler: 'gcc', version: '12', flags: 'force_no_instr_set' } - - { compiler: 'gcc', version: '13', flags: 'enable_xtl_complex' } - - { compiler: 'gcc', version: '14', flags: 'avx' } - - { compiler: 'gcc', version: '14', flags: 'avx2' } - - { compiler: 'gcc', version: '13', flags: 'avx512' } - - { compiler: 'gcc', version: '10', flags: 'avx512' } - - { compiler: 'gcc', version: '12', flags: 'i386' } - - { compiler: 'gcc', version: '13', flags: 'avx512pf' } - - { compiler: 'gcc', version: '13', flags: 'avx512vbmi' } - - { compiler: 'gcc', version: '14', flags: 'avx512vbmi2' } - - { compiler: 'gcc', version: '13', flags: 'avx512vnni' } - - { compiler: 'clang', version: '16', flags: 'force_no_instr_set' } - - { compiler: 'clang', version: '16', flags: 'enable_xtl_complex' } - - { compiler: 'clang', version: '17', flags: 'avx' } - - { compiler: 'clang', version: '17', flags: 'sse3' } - - { compiler: 'clang', version: '18', flags: 'avx512' } - - { compiler: 'clang', version: '18', flags: 'avx_128' } - - { compiler: 'clang', version: '18', flags: 'avx2_128' } - - { compiler: 'clang', version: '18', flags: 'avx512vl_128' } - - { compiler: 'clang', version: '18', flags: 'avx512vl_256' } + - { compiler: 'gcc', version: '12', flags: 'force_no_instr_set', preset: 'native' } + - { compiler: 'gcc', version: '13', flags: 'enable_xtl_complex', preset: 'native' } + - { compiler: 'gcc', version: '14', flags: '', preset: 'avx' } + - { compiler: 'gcc', version: '14', flags: '', preset: 'avx2' } + - { compiler: 'gcc', version: '13', flags: '', preset: 'avx512f' } + - { compiler: 'gcc', version: '10', flags: '', preset: 'avx512f' } + - { compiler: 'gcc', version: '12', flags: 'i386', preset: 'native' } + - { compiler: 'gcc', version: '13', flags: '', preset: 'avx512pf' } + - { compiler: 'gcc', version: '13', flags: '', preset: 'avx512vbmi' } + - { compiler: 'gcc', version: '14', flags: '', preset: 'avx512vbmi2' } + - { compiler: 'gcc', version: '13', flags: '', preset: 'avx512vnni_avx512bw' } + - { compiler: 'clang', version: '16', flags: 'force_no_instr_set', preset: 'native' } + - { compiler: 'clang', version: '16', flags: 'enable_xtl_complex', preset: 'native' } + - { compiler: 'clang', version: '17', flags: '', preset: 'avx' } + - { compiler: 'clang', version: '17', flags: '', preset: 'sse3' } + - { compiler: 'clang', version: '18', flags: '', preset: 'avx512f' } + - { compiler: 'clang', version: '18', flags: '', preset: 'avx_128' } + - { compiler: 'clang', version: '18', flags: '', preset: 'avx2_128' } + - { compiler: 'clang', version: '18', flags: '', preset: 'avx512vl_128' } + - { compiler: 'clang', version: '18', flags: '', preset: 'avx512vl_256' } steps: - - name: Setup compiler + - name: Setup GCC compiler if: ${{ matrix.sys.compiler == 'gcc' }} run: | GCC_VERSION=${{ matrix.sys.version }} sudo apt-get update sudo apt-get --no-install-suggests --no-install-recommends install g++-$GCC_VERSION - sudo dpkg --add-architecture i386 - sudo add-apt-repository ppa:ubuntu-toolchain-r/test - sudo apt-get update - sudo apt-get --no-install-suggests --no-install-recommends install gcc-$GCC_VERSION-multilib g++-$GCC_VERSION-multilib linux-libc-dev:i386 - CC=gcc-$GCC_VERSION - echo "CC=$CC" >> $GITHUB_ENV - CXX=g++-$GCC_VERSION - echo "CXX=$CXX" >> $GITHUB_ENV - - name: Setup compiler + # Setup i386 as needed + if [[ '${{ matrix.sys.flags }}' == 'i386' ]]; then + sudo dpkg --add-architecture i386 + sudo add-apt-repository ppa:ubuntu-toolchain-r/test + sudo apt-get update + sudo apt-get --no-install-suggests --no-install-recommends install \ + gcc-$GCC_VERSION-multilib g++-$GCC_VERSION-multilib linux-libc-dev:i386 + fi + # Export compiler as environment var + echo "CC=gcc-$GCC_VERSION" >> $GITHUB_ENV + echo "CXX=g++-$GCC_VERSION" >> $GITHUB_ENV + + - name: Setup Clang compiler if: ${{ matrix.sys.compiler == 'clang' }} run: | LLVM_VERSION=${{ matrix.sys.version }} @@ -57,91 +61,49 @@ jobs: sudo apt-get --no-install-suggests --no-install-recommends install clang-$LLVM_VERSION || exit 1 sudo apt-get --no-install-suggests --no-install-recommends install g++ g++-multilib || exit 1 sudo ln -s /usr/include/asm-generic /usr/include/asm - CC=clang-$LLVM_VERSION - echo "CC=$CC" >> $GITHUB_ENV - CXX=clang++-$LLVM_VERSION - echo "CXX=$CXX" >> $GITHUB_ENV + # Export compiler as environment var + echo "CC=clang-$LLVM_VERSION" >> $GITHUB_ENV + echo "CXX=clang++-$LLVM_VERSION" >> $GITHUB_ENV + - name: Checkout xsimd uses: actions/checkout@v6 + - name: Install mamba - uses: mamba-org/setup-micromamba@v2 + uses: mamba-org/setup-micromamba@v3 with: environment-file: environment.yml + - name: Setup SDE - if: startswith(matrix.sys.flags, 'avx512') + if: startswith(matrix.sys.preset, 'avx512') run: sh install_sde.sh + - name: Configure build - env: - CC: ${{ env.CC }} - CXX: ${{ env.CXX }} run: | if [[ '${{ matrix.sys.flags }}' == 'enable_xtl_complex' ]]; then CMAKE_EXTRA_ARGS="$CMAKE_EXTRA_ARGS -DENABLE_XTL_COMPLEX=ON" fi - if [[ '${{ matrix.sys.flags }}' == 'avx' ]]; then - CMAKE_EXTRA_ARGS="$CMAKE_EXTRA_ARGS -DTARGET_ARCH=sandybridge" - fi - if [[ '${{ matrix.sys.flags }}' == 'avx_128' ]]; then - CMAKE_EXTRA_ARGS="$CMAKE_EXTRA_ARGS -DTARGET_ARCH=sandybridge" - CXXFLAGS="$CXXFLAGS -DXSIMD_DEFAULT_ARCH=avx_128" - fi - if [[ '${{ matrix.sys.flags }}' == 'avx2' ]]; then - CMAKE_EXTRA_ARGS="$CMAKE_EXTRA_ARGS -DTARGET_ARCH=haswell" - fi - if [[ '${{ matrix.sys.flags }}' == 'avx2_128' ]]; then - CMAKE_EXTRA_ARGS="$CMAKE_EXTRA_ARGS -DTARGET_ARCH=haswell" - CXXFLAGS="$CXXFLAGS -DXSIMD_DEFAULT_ARCH=avx2_128" - fi - if [[ '${{ matrix.sys.flags }}' == 'sse3' ]]; then - CMAKE_EXTRA_ARGS="$CMAKE_EXTRA_ARGS -DTARGET_ARCH=nocona" - fi - if [[ '${{ matrix.sys.flags }}' == 'avx512' ]]; then - CMAKE_EXTRA_ARGS="$CMAKE_EXTRA_ARGS -DTARGET_ARCH=skylake-avx512" - fi - if [[ '${{ matrix.sys.flags }}' == 'avx512vl_128' ]]; then - CMAKE_EXTRA_ARGS="$CMAKE_EXTRA_ARGS -DTARGET_ARCH=skylake-avx512" - CXXFLAGS="$CXXFLAGS -DXSIMD_DEFAULT_ARCH=avx512vl_128" - fi - if [[ '${{ matrix.sys.flags }}' == 'avx512vl_256' ]]; then - CMAKE_EXTRA_ARGS="$CMAKE_EXTRA_ARGS -DTARGET_ARCH=skylake-avx512" - CXXFLAGS="$CXXFLAGS -DXSIMD_DEFAULT_ARCH=avx512vl_256" - fi - if [[ '${{ matrix.sys.flags }}' == 'avx512pf' ]]; then - CMAKE_EXTRA_ARGS="$CMAKE_EXTRA_ARGS -DTARGET_ARCH=knl" - fi - if [[ '${{ matrix.sys.flags }}' == 'avx512vbmi' ]]; then - CMAKE_EXTRA_ARGS="$CMAKE_EXTRA_ARGS -DTARGET_ARCH=cannonlake" - fi - if [[ '${{ matrix.sys.flags }}' == 'avx512vbmi2' ]]; then - CMAKE_EXTRA_ARGS="$CMAKE_EXTRA_ARGS -DTARGET_ARCH=icelake-server" - fi - if [[ '${{ matrix.sys.flags }}' == 'avx512vnni' ]]; then - CMAKE_EXTRA_ARGS="$CMAKE_EXTRA_ARGS -DTARGET_ARCH=knm" - fi if [[ '${{ matrix.sys.flags }}' == 'i386' ]]; then - CXX_FLAGS="$CXX_FLAGS -m32" + export CXXFLAGS="$CXXFLAGS -m32" fi - if [[ '${{ matrix.sys.flags }}' == 'force_no_instr_set' ]]; then - : - else + if [[ '${{ matrix.sys.flags }}' != 'force_no_instr_set' ]]; then CMAKE_EXTRA_ARGS="$CMAKE_EXTRA_ARGS -DXSIMD_ENABLE_WERROR=ON" fi - # Cheap way of spotting uninitialized read - CXX_FLAGS="$CXX_FLAGS -ftrivial-auto-var-init=pattern" - cmake -B _build \ - -DBUILD_TESTS=ON \ - -DBUILD_BENCHMARK=ON \ - -DBUILD_EXAMPLES=ON \ - -DCMAKE_BUILD_TYPE=Release \ - -DCMAKE_C_COMPILER=$CC \ - -DCMAKE_CXX_COMPILER=$CXX \ - $CMAKE_EXTRA_ARGS \ - -DCMAKE_CXX_FLAGS='$CXX_FLAGS' \ + --preset ${{ matrix.sys.preset }} \ + -D BUILD_TESTS=ON \ + -D BUILD_BENCHMARK=ON \ + -D BUILD_EXAMPLES=ON \ + -D CMAKE_BUILD_TYPE=Release \ + -D CMAKE_C_COMPILER="${CC}" \ + -D CMAKE_CXX_COMPILER="${CXX}" \ + -D TARGET_ARCH="x86-64" \ + -D XSIMD_HARDEN_TRIVIAL_AUTO_VAR_INIT=ON \ + "${CMAKE_EXTRA_ARGS}" \ -G Ninja + - name: Build - run: cmake --build _build + run: cmake --build _build --parallel - name: Test run: | # Set CPU feature test expectations, 0 is explicit absence of the feature @@ -149,15 +111,15 @@ jobs: export XSIMD_TEST_CPU_ASSUME_RVV="0" export XSIMD_TEST_CPU_ASSUME_VSX="0" export XSIMD_TEST_CPU_ASSUME_VXE="0" - cd _build/test - if echo '${{ matrix.sys.flags }}' | grep -q 'avx512' ; then + + if echo '${{ matrix.sys.preset }}' | grep -q 'avx512' ; then # Running with emulation, must have AVX512, lower tier are checked by implications in tests export XSIMD_TEST_CPU_ASSUME_AVX512F="1" - ../../sde-external-9.48.0-2024-11-25-lin/sde64 -tgl -- ./test_xsimd + ./sde-external-9.48.0-2024-11-25-lin/sde64 -spr -- ./_build/test/test_xsimd else export XSIMD_TEST_CPU_ASSUME_SSE4_2=$(grep -q 'sse4_2' /proc/cpuinfo && echo "1" || echo "0") export XSIMD_TEST_CPU_ASSUME_AVX=$(grep -q 'avx' /proc/cpuinfo && echo "1" || echo "0") export XSIMD_TEST_CPU_ASSUME_AVX512F=$(grep -q 'avx512f' /proc/cpuinfo && echo "1" || echo "0") export XSIMD_TEST_CPU_ASSUME_MANUFACTURER="intel,amd" - ./test_xsimd + ./_build/test/test_xsimd fi diff --git a/CMakeLists.txt b/CMakeLists.txt index 0b120539b..8e0bb6fd4 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -54,6 +54,21 @@ if(ENABLE_XTL_COMPLEX OR XSIMD_ENABLE_XTL_COMPLEX) ) endif() +# Dev options +# =========== + +include (cmake/Hardening.cmake) + +option( + XSIMD_HARDEN_TRIVIAL_AUTO_VAR_INIT + "Enable -ftrivial-auto-var-init hardening flag if supported" + OFF +) + +if(XSIMD_HARDEN_TRIVIAL_AUTO_VAR_INIT) + xsimd_harden_trivial_auto_var_init(xsimd INTERFACE) +endif() + if(BUILD_TESTS) enable_testing() add_subdirectory(test) diff --git a/CMakePresets.json b/CMakePresets.json new file mode 100644 index 000000000..ed5314dda --- /dev/null +++ b/CMakePresets.json @@ -0,0 +1,214 @@ +{ + "version": 5, + "cmakeMinimumRequired": { + "major": 3, + "minor": 23, + "patch": 0 + }, + "configurePresets": [ + { + "name": "native", + "cacheVariables": { + "CMAKE_CXX_FLAGS": "$env{CXXFLAGS} -march=native" + } + }, + { + "name": "sse2", + "cacheVariables": { + "CMAKE_CXX_FLAGS": "$env{CXXFLAGS} -march=x86-64 -mno-sse4a -msse2 -mno-sse3" + } + }, + { + "name": "sse3", + "cacheVariables": { + "CMAKE_CXX_FLAGS": "$env{CXXFLAGS} -march=x86-64 -mno-sse4a -msse3 -mno-ssse3" + } + }, + { + "name": "ssse3", + "cacheVariables": { + "CMAKE_CXX_FLAGS": "$env{CXXFLAGS} -march=x86-64 -mno-sse4a -mssse3 -mno-sse4.1" + } + }, + { + "name": "sse4.1", + "cacheVariables": { + "CMAKE_CXX_FLAGS": "$env{CXXFLAGS} -march=x86-64 -mno-sse4a -msse4.1 -mno-sse4.2" + } + }, + { + "name": "sse4.2", + "cacheVariables": { + "CMAKE_CXX_FLAGS": "$env{CXXFLAGS} -march=x86-64 -mno-sse4a -msse4.2 -mno-avx" + } + }, + { + "name": "avx", + "cacheVariables": { + "CMAKE_CXX_FLAGS": "$env{CXXFLAGS} -march=x86-64-v2 -mno-sse4a -mavx -mno-avx2" + } + }, + { + "name": "avx_128", + "cacheVariables": { + "CMAKE_CXX_FLAGS": "$env{CXXFLAGS} -march=x86-64-v2 -mno-sse4a -mavx -mno-avx2 -DXSIMD_DEFAULT_ARCH=avx_128" + } + }, + { + "name": "avx2", + "cacheVariables": { + "CMAKE_CXX_FLAGS": "$env{CXXFLAGS} -march=x86-64-v2 -mno-sse4a -mavx2 -mno-avx512f" + } + }, + { + "name": "avx2_128", + "cacheVariables": { + "CMAKE_CXX_FLAGS": "$env{CXXFLAGS} -march=x86-64-v2 -mno-sse4a -mavx2 -mno-avx512f -DXSIMD_DEFAULT_ARCH=avx2_128" + } + }, + { + "name": "avx512f", + "cacheVariables": { + "CMAKE_CXX_FLAGS": "$env{CXXFLAGS} -march=x86-64-v2 -mno-sse4a -mavx -mavx2 -mavx512f -mno-avx512cd -mno-avx512dq -mno-avx512bw -mno-avx512er -mno-avx512pf -mno-avx512ifma -mno-avx512vbmi -mno-avx512vbmi2 -mno-avx512vnni" + } + }, + { + "name": "avx512cd", + "cacheVariables": { + "CMAKE_CXX_FLAGS": "$env{CXXFLAGS} -march=x86-64-v2 -mno-sse4a -mavx -mavx2 -mavx512f -mavx512cd -mno-avx512dq -mno-avx512bw -mno-avx512er -mno-avx512pf -mno-avx512ifma -mno-avx512vbmi -mno-avx512vbmi2 -mno-avx512vnni" + } + }, + { + "name": "avx512dq", + "cacheVariables": { + "CMAKE_CXX_FLAGS": "$env{CXXFLAGS} -march=x86-64-v2 -mno-sse4a -mavx -mavx2 -mavx512f -mavx512cd -mavx512dq -mno-avx512bw -mno-avx512er -mno-avx512pf -mno-avx512ifma -mno-avx512vbmi -mno-avx512vbmi2 -mno-avx512vnni" + } + }, + { + "name": "avx512bw", + "cacheVariables": { + "CMAKE_CXX_FLAGS": "$env{CXXFLAGS} -march=x86-64-v2 -mno-sse4a -mavx -mavx2 -mavx512f -mavx512cd -mavx512dq -mavx512bw -mno-avx512er -mno-avx512pf -mno-avx512ifma -mno-avx512vbmi -mno-avx512vbmi2 -mno-avx512vnni" + } + }, + { + "name": "avx512er", + "cacheVariables": { + "CMAKE_CXX_FLAGS": "$env{CXXFLAGS} -march=x86-64-v2 -mno-sse4a -mavx -mavx2 -mavx512f -mavx512cd -mavx512dq -mno-avx512bw -mavx512er -mno-avx512pf -mno-avx512ifma -mno-avx512vbmi -mno-avx512vbmi2 -mno-avx512vnni" + } + }, + { + "name": "avx512pf", + "cacheVariables": { + "CMAKE_CXX_FLAGS": "$env{CXXFLAGS} -march=x86-64-v2 -mno-sse4a -mavx -mavx2 -mavx512f -mavx512cd -mavx512dq -mno-avx512bw -mavx512er -mavx512pf -mno-avx512ifma -mno-avx512vbmi -mno-avx512vbmi2 -mno-avx512vnni" + } + }, + { + "name": "avx512ifma", + "cacheVariables": { + "CMAKE_CXX_FLAGS": "$env{CXXFLAGS} -march=x86-64-v2 -mno-sse4a -mavx -mavx2 -mavx512f -mavx512cd -mavx512dq -mavx512bw -mno-avx512er -mno-avx512pf -mavx512ifma -mno-avx512vbmi -mno-avx512vbmi2 -mno-avx512vnni" + } + }, + { + "name": "avx512vbmi", + "cacheVariables": { + "CMAKE_CXX_FLAGS": "$env{CXXFLAGS} -march=x86-64-v2 -mno-sse4a -mavx -mavx2 -mavx512f -mavx512cd -mavx512dq -mavx512bw -mno-avx512er -mno-avx512pf -mavx512ifma -mavx512vbmi -mno-avx512vbmi2 -mno-avx512vnni" + } + }, + { + "name": "avx512vbmi2", + "cacheVariables": { + "CMAKE_CXX_FLAGS": "$env{CXXFLAGS} -march=x86-64-v2 -mno-sse4a -mavx -mavx2 -mavx512f -mavx512cd -mavx512dq -mavx512bw -mno-avx512er -mno-avx512pf -mavx512ifma -mavx512vbmi -mavx512vbmi2 -mno-avx512vnni" + } + }, + { + "name": "avx512vnni_avx512bw", + "cacheVariables": { + "CMAKE_CXX_FLAGS": "$env{CXXFLAGS} -march=x86-64-v2 -mno-sse4a -mavx -mavx2 -mavx512f -mavx512cd -mavx512dq -mavx512bw -mno-avx512er -mno-avx512pf -mno-avx512ifma -mno-avx512vbmi -mno-avx512vbmi2 -mavx512vnni" + } + }, + { + "name": "avx512vnni_avx512vbmi2", + "cacheVariables": { + "CMAKE_CXX_FLAGS": "$env{CXXFLAGS} -march=x86-64-v2 -mno-sse4a -mavx -mavx2 -mavx512f -mavx512cd -mavx512dq -mavx512bw -mno-avx512er -mno-avx512pf -mavx512ifma -mavx512vbmi -mavx512vbmi2 -mavx512vnni" + } + }, + { + "name": "avx512vl_128", + "cacheVariables": { + "CMAKE_CXX_FLAGS": "$env{CXXFLAGS} -march=x86-64-v2 -mno-sse4a -mavx -mavx2 -mavx512f -mavx512cd -mavx512vl -mno-avx512dq -mno-avx512bw -mno-avx512er -mno-avx512pf -mno-avx512ifma -mno-avx512vbmi -mno-avx512vbmi2 -mno-avx512vnni -DXSIMD_DEFAULT_ARCH=avx512vl_128" + } + }, + { + "name": "avx512vl_256", + "cacheVariables": { + "CMAKE_CXX_FLAGS": "$env{CXXFLAGS} -march=x86-64-v2 -mno-sse4a -mavx -mavx2 -mavx512f -mavx512cd -mavx512vl -mno-avx512dq -mno-avx512bw -mno-avx512er -mno-avx512pf -mno-avx512ifma -mno-avx512vbmi -mno-avx512vbmi2 -mno-avx512vnni -DXSIMD_DEFAULT_ARCH=avx512vl_256" + } + }, + { + "name": "neon", + "cacheVariables": { + "CMAKE_CXX_FLAGS": "$env{CXXFLAGS} -march=armv7-a -mfpu=neon -mfloat-abi=softfp" + } + }, + { + "name": "neon64", + "cacheVariables": { + "CMAKE_CXX_FLAGS": "$env{CXXFLAGS} -march=armv8-a" + } + }, + { + "name": "sve128", + "cacheVariables": { + "CMAKE_CXX_FLAGS": "$env{CXXFLAGS} -march=armv8.2-a+sve -msve-vector-bits=128" + } + }, + { + "name": "sve256", + "cacheVariables": { + "CMAKE_CXX_FLAGS": "$env{CXXFLAGS} -march=armv8.2-a+sve -msve-vector-bits=256" + } + }, + { + "name": "sve512", + "cacheVariables": { + "CMAKE_CXX_FLAGS": "$env{CXXFLAGS} -march=armv8.2-a+sve -msve-vector-bits=512" + } + }, + { + "name": "rvv128", + "cacheVariables": { + "CMAKE_CXX_FLAGS": "$env{CXXFLAGS} -march=rv64gcv_zvl128b_zba_zbb_zbs -mrvv-vector-bits=zvl" + } + }, + { + "name": "rvv256", + "cacheVariables": { + "CMAKE_CXX_FLAGS": "$env{CXXFLAGS} -march=rv64gcv_zvl256b_zba_zbb_zbs -mrvv-vector-bits=zvl" + } + }, + { + "name": "rvv512", + "cacheVariables": { + "CMAKE_CXX_FLAGS": "$env{CXXFLAGS} -march=rv64gcv_zvl512b_zba_zbb_zbs -mrvv-vector-bits=zvl" + } + }, + { + "name": "vsx2", + "cacheVariables": { + "CMAKE_CXX_FLAGS": "$env{CXXFLAGS} -mcpu=power8 -maltivec -mvsx" + } + }, + { + "name": "vsx3", + "cacheVariables": { + "CMAKE_CXX_FLAGS": "$env{CXXFLAGS} -mcpu=power9 -maltivec -mvsx" + } + }, + { + "name": "vsx4", + "cacheVariables": { + "CMAKE_CXX_FLAGS": "$env{CXXFLAGS} -mcpu=power10 -maltivec -mvsx" + } + } + ] +} diff --git a/cmake/Hardening.cmake b/cmake/Hardening.cmake new file mode 100644 index 000000000..cc49bb378 --- /dev/null +++ b/cmake/Hardening.cmake @@ -0,0 +1,37 @@ +include(CheckCXXCompilerFlag) + + +function(xsimd_harden_trivial_auto_var_init target scope) + # Names of option parameters (without arguments) + set(options) + # Names of named parameters with a single argument + set(one_value_args PATTERN) + # Names of named parameters with a multiple arguments + set(multi_values_args) + cmake_parse_arguments(ARG "${options}" "${one_value_args}" "${multi_values_args}" ${ARGN}) + if(ARG_UNPARSED_ARGUMENTS) + message( + AUTHOR_WARNING + "Unrecoginzed options passed to ${CMAKE_CURRENT_FUNCTION}: " + "${ARG_UNPARSED_ARGUMENTS}" + ) + endif() + + if(NOT scope STREQUAL "PUBLIC" AND NOT scope STREQUAL "PRIVATE" AND NOT scope STREQUAL "INTERFACE") + message(FATAL_ERROR "scope must be PUBLIC, PRIVATE, or INTERFACE, got: ${scope}") + endif() + + if(NOT XSIMD_HARDEN_TRIVIAL_AUTO_VAR_INIT) + return() + endif() + + if(NOT ARG_PATTERN) + set(ARG_PATTERN "pattern") + endif() + + set(flag "-ftrivial-auto-var-init=${ARG_PATTERN}") + check_cxx_compiler_flag("${flag}" XSIMD_HAS_FTRIVIAL_AUTO_VAR_INIT_${ARG_PATTERN}) + if(XSIMD_HAS_FTRIVIAL_AUTO_VAR_INIT_${ARG_PATTERN}) + target_compile_options(${target} ${scope} "${flag}") + endif() +endfunction() From 1cf39243b0644bba18084ffdea08b93070ad89ea Mon Sep 17 00:00:00 2001 From: AntoinePrv Date: Mon, 29 Jun 2026 11:01:05 +0200 Subject: [PATCH 2/2] Add avx512 dq bw --- CMakePresets.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/CMakePresets.json b/CMakePresets.json index ed5314dda..dda49704c 100644 --- a/CMakePresets.json +++ b/CMakePresets.json @@ -135,13 +135,13 @@ { "name": "avx512vl_128", "cacheVariables": { - "CMAKE_CXX_FLAGS": "$env{CXXFLAGS} -march=x86-64-v2 -mno-sse4a -mavx -mavx2 -mavx512f -mavx512cd -mavx512vl -mno-avx512dq -mno-avx512bw -mno-avx512er -mno-avx512pf -mno-avx512ifma -mno-avx512vbmi -mno-avx512vbmi2 -mno-avx512vnni -DXSIMD_DEFAULT_ARCH=avx512vl_128" + "CMAKE_CXX_FLAGS": "$env{CXXFLAGS} -march=x86-64-v2 -mno-sse4a -mavx -mavx2 -mavx512f -mavx512cd -mavx512vl -mavx512dq -mavx512bw -mno-avx512er -mno-avx512pf -mno-avx512ifma -mno-avx512vbmi -mno-avx512vbmi2 -mno-avx512vnni -DXSIMD_DEFAULT_ARCH=avx512vl_128" } }, { "name": "avx512vl_256", "cacheVariables": { - "CMAKE_CXX_FLAGS": "$env{CXXFLAGS} -march=x86-64-v2 -mno-sse4a -mavx -mavx2 -mavx512f -mavx512cd -mavx512vl -mno-avx512dq -mno-avx512bw -mno-avx512er -mno-avx512pf -mno-avx512ifma -mno-avx512vbmi -mno-avx512vbmi2 -mno-avx512vnni -DXSIMD_DEFAULT_ARCH=avx512vl_256" + "CMAKE_CXX_FLAGS": "$env{CXXFLAGS} -march=x86-64-v2 -mno-sse4a -mavx -mavx2 -mavx512f -mavx512cd -mavx512vl -mavx512dq -mavx512bw -mno-avx512er -mno-avx512pf -mno-avx512ifma -mno-avx512vbmi -mno-avx512vbmi2 -mno-avx512vnni -DXSIMD_DEFAULT_ARCH=avx512vl_256" } }, {