CMake: Set HIP architectures before compiler detection
diff --git a/cmake/EigenGpuTesting.cmake b/cmake/EigenGpuTesting.cmake index 8b189b2..7ce51bf 100644 --- a/cmake/EigenGpuTesting.cmake +++ b/cmake/EigenGpuTesting.cmake
@@ -113,6 +113,12 @@ set(CMAKE_HIP_COMPILER "${ROCM_PATH}/llvm/bin/clang++") endif() endif() + # Compiler ABI detection needs architectures even on build-only hosts without an AMD GPU. + if(NOT DEFINED EIGEN_HIP_ARCHITECTURES) + set(EIGEN_HIP_ARCHITECTURES + gfx900;gfx906;gfx908;gfx90a;gfx940;gfx941;gfx942;gfx1030;gfx1100;gfx1101;gfx1102;gfx1150;gfx1151 + CACHE STRING "HIP GPU architectures to build Eigen's HIP tests for.") + endif() if(NOT CMAKE_HIP_ARCHITECTURES) set(CMAKE_HIP_ARCHITECTURES "${EIGEN_HIP_ARCHITECTURES}") endif()
diff --git a/cmake/EigenTesting.cmake b/cmake/EigenTesting.cmake index f60aa14..8321fb0 100644 --- a/cmake/EigenTesting.cmake +++ b/cmake/EigenTesting.cmake
@@ -10,12 +10,6 @@ endif() endmacro() -if(EIGEN_TEST_HIP AND NOT DEFINED EIGEN_HIP_ARCHITECTURES) - set(EIGEN_HIP_ARCHITECTURES - gfx900;gfx906;gfx908;gfx90a;gfx940;gfx941;gfx942;gfx1030;gfx1100;gfx1101;gfx1102;gfx1150;gfx1151 - CACHE STRING "HIP GPU architectures to build Eigen's HIP tests for.") -endif() - #internal. See documentation of ei_add_test for details. macro(ei_add_test_internal testname testname_with_suffix) set(targetname ${testname_with_suffix})
diff --git a/test/buildsystem/scenarios/gpu_architectures.cmake b/test/buildsystem/scenarios/gpu_architectures.cmake index b3fbe17..b3921b4 100644 --- a/test/buildsystem/scenarios/gpu_architectures.cmake +++ b/test/buildsystem/scenarios/gpu_architectures.cmake
@@ -22,3 +22,27 @@ check_architectures(13.3 "" "" "89" 89) check_architectures(13.3 "" "89" "75" 89) check_architectures(13.3 "86" "89" "75" 86) + +# Observe the architecture setting at language enablement, before compiler ABI detection. +macro(enable_language language) + bs_assert_streq("${language}" "HIP" "enabled GPU language") + bs_assert_streq("${CMAKE_HIP_ARCHITECTURES}" "${expected}" "HIP architectures before compiler detection") +endmacro() + +function(check_hip_architectures eigen_arch cmake_arch expected) + set(EIGEN_TEST_CUDA OFF) + set(EIGEN_TEST_HIP ON) + unset(EIGEN_HIP_ARCHITECTURES CACHE) + if(NOT "${eigen_arch}" STREQUAL "") + set(EIGEN_HIP_ARCHITECTURES "${eigen_arch}") + endif() + set(CMAKE_HIP_ARCHITECTURES "${cmake_arch}") + ei_gpu_testing_enable() +endfunction() + +if(CMAKE_VERSION VERSION_GREATER_EQUAL 3.21) + check_hip_architectures("" "" + "gfx900;gfx906;gfx908;gfx90a;gfx940;gfx941;gfx942;gfx1030;gfx1100;gfx1101;gfx1102;gfx1150;gfx1151") + check_hip_architectures("gfx906;gfx1100" "" "gfx906;gfx1100") + check_hip_architectures("gfx906" "gfx942" "gfx942") +endif()