blob: ff37e431f204c6b4c676de2a67f79d0aae29958e [file] [edit]
# SPDX-FileCopyrightText: The Eigen Authors
# SPDX-License-Identifier: MPL-2.0
cmake_minimum_required(VERSION 3.18)
include("${CMAKE_CURRENT_LIST_DIR}/../../cmake/EigenTesting.cmake")
set(CMAKE_SYSTEM Linux-test)
set(CMAKE_CXX_COMPILER_ID GNU)
set(CMAKE_CXX_COMPILER_VERSION 13.3.0)
set(CMAKE_CXX_COMPILER_FRONTEND_VARIANT GNU)
function(assert_equal actual expected)
if(NOT actual STREQUAL expected)
message(FATAL_ERROR "Expected ${expected}, got ${actual}")
endif()
endfunction()
function(check_flags expected)
foreach(feature IN LISTS ARGN)
set(EIGEN_TEST_${feature} ON)
endforeach()
ei_get_cxxflags(actual)
assert_equal("${actual}" "${expected}")
endfunction()
# A 64-bit target does not imply SSE2. Host metadata must not affect the label.
set(CMAKE_SIZEOF_VOID_P 8)
set(CMAKE_HOST_SYSTEM_PROCESSOR AMD64)
set(CMAKE_SYSTEM_PROCESSOR aarch64)
check_flags(default)
set(CMAKE_SYSTEM_PROCESSOR mips64)
check_flags(MSA MSA)
set(CMAKE_SIZEOF_VOID_P 4)
check_flags(default)
foreach(feature IN ITEMS NEON NEON64 ZVECTOR Z14 VSX ALTIVEC MSA LSX SME
SSE2 SSE3 SSSE3 SSE4_1 SSE4_2 AVX AVX2 AVX512 AVX512DQ AVX512FP16 FMA F16C)
check_flags("${feature}" "${feature}")
endforeach()
check_flags(AVX-AVX2-AVX512-FMA AVX AVX2 AVX512 FMA)
check_flags(AVX512DQ-AVX512FP16-F16C AVX512FP16 AVX512DQ F16C)
check_flags(NOVEC NO_EXPLICIT_VECTORIZATION)
check_flags(AVX-NOVEC AVX NO_EXPLICIT_VECTORIZATION)
check_flags(AVX2-NOVEC AVX2 NO_EXPLICIT_VECTORIZATION)
check_flags(F16C-NOVEC F16C NO_EXPLICIT_VECTORIZATION)
check_flags(AVX-FMA-F16C-NOVEC AVX FMA F16C NO_EXPLICIT_VECTORIZATION)
check_flags(default-OMP OPENMP)
set(EIGEN_TEST_SVE_VL 512)
check_flags(SVE512 SVE)
set(EIGEN_DEFAULT_TO_ROW_MAJOR ON)
check_flags(default-ROWMAJ)
check_flags(AVX2-OMP-ROWMAJ AVX2 OPENMP)
unset(EIGEN_DEFAULT_TO_ROW_MAJOR)
function(check_arch processor compiler_arch generator_platform expected)
set(CMAKE_SYSTEM_PROCESSOR "${processor}")
set(CMAKE_CXX_COMPILER_ARCHITECTURE_ID "${compiler_arch}")
set(CMAKE_GENERATOR_PLATFORM "${generator_platform}")
ei_get_target_architecture(actual)
assert_equal("${actual}" "${expected}")
endfunction()
check_arch(aarch64 "" "" aarch64)
check_arch(AMD64 "" "" x86_64)
check_arch(i686 "" "" x86)
check_arch(ppc64le "" "" ppc64le)
check_arch(s390x "" "" s390x)
check_arch(riscv64 "" "" riscv64)
check_arch(loongarch64 "" "" loongarch64)
check_arch(AMD64 ARM64 "" aarch64)
check_arch(AMD64 "" "ARM64,version=10.0" aarch64)
check_arch(AMD64 "" ",version=10.0" x86_64)
check_arch(AMD64 "" Win32 x86)
check_arch(AMD64 ARM64EC ARM64 arm64ec)
check_arch("" "" "" unknown)
function(check_build expected)
ei_set_build_string()
assert_equal("${BUILDNAME}" "linux-test-${expected}")
endfunction()
function(check_target target)
set(CMAKE_CXX_COMPILER_TARGET "${target}")
check_arch(x86_64 "" "" "${target}")
set(CMAKE_SYSTEM_PROCESSOR x86_64)
set(CMAKE_SIZEOF_VOID_P 8)
set(CMAKE_CXX_COMPILER_ID Clang)
set(CMAKE_CXX_COMPILER_VERSION 18.1.3)
check_build("${target}-clang-18.1.3-default-64bit")
endfunction()
foreach(target IN ITEMS aarch64-linux-gnu arm-linux-gnueabihf riscv64-linux-gnu
gcc_ntoaarch64le "8.3.0,gcc_ntoaarch64le")
check_target("${target}")
endforeach()
function(check_apple_arch processor osx_arch expected)
set(APPLE TRUE)
set(CMAKE_OSX_ARCHITECTURES "${osx_arch}")
check_arch("${processor}" x86_64 "" "${expected}")
endfunction()
check_apple_arch(x86_64 arm64 aarch64)
check_apple_arch(arm64 x86_64 x86_64)
check_apple_arch(x86_64 "x86_64;arm64" aarch64+x86_64)
check_apple_arch(arm64 "arm64;x86_64" aarch64+x86_64)
check_apple_arch(x86_64 "arm64;arm64" aarch64)
check_apple_arch(x86_64 arm64e arm64e)
check_apple_arch(x86_64 "" x86_64)
function(check_width bytes expected)
set(CMAKE_SIZEOF_VOID_P "${bytes}")
set(CMAKE_SYSTEM_PROCESSOR aarch64)
set(EIGEN_TEST_EXTERNAL_BLAS ON)
set(EIGEN_BUILD_STRING_SUFFIX probe)
check_build("aarch64-gnu-13.3.0-default-external_blas-${expected}-probe")
endfunction()
check_width(4 32bit)
check_width(8 64bit)
check_width("" unknown-bits)
function(check_32bit gnu expected_arch expected_bits)
set(CMAKE_COMPILER_IS_GNUCXX "${gnu}")
set(EIGEN_TEST_32BIT ON)
set(CMAKE_SYSTEM_PROCESSOR x86_64)
set(CMAKE_SIZEOF_VOID_P 8)
ei_get_target_architecture(actual)
assert_equal("${actual}" "${expected_arch}")
check_build("${expected_arch}-gnu-13.3.0-default-${expected_bits}bit")
endfunction()
check_32bit(TRUE x86 32)
check_32bit(FALSE x86_64 64)