Просмотр исходного кода

Cray: Fix OpenMP linking issue

Add the `CrayClang` compiler ID to the list of OpenMP flag candidates and
ensure the flags are propagated to the link step to trigger the Cray OpenMP
offload linker (`cce_omp_offload_linker`) wrapper.

Fixes: #24402, #24962
John Rodgers 11 месяцев назад
Родитель
Сommit
3b18fa9e8b
2 измененных файлов с 17 добавлено и 2 удалено
  1. 3 1
      Modules/FindOpenMP.cmake
  2. 14 1
      Tests/FindOpenMP/Test/CMakeLists.txt

+ 3 - 1
Modules/FindOpenMP.cmake

@@ -152,6 +152,7 @@ function(_OPENMP_FLAG_CANDIDATES LANG)
     set(OMP_FLAG_XL "-qsmp=omp")
     # Cray compiler activate OpenMP with -h omp, which is enabled by default.
     set(OMP_FLAG_Cray " " "-h omp")
+    set(OMP_FLAG_CrayClang "-fopenmp")
     set(OMP_FLAG_Fujitsu "-Kopenmp" "-KOMP")
     set(OMP_FLAG_FujitsuClang "-fopenmp" "-Kopenmp")
 
@@ -677,7 +678,8 @@ foreach(LANG IN LISTS OpenMP_FINDLIST)
         set_property(TARGET OpenMP::OpenMP_${LANG} PROPERTY
           INTERFACE_COMPILE_OPTIONS "$<$<COMPILE_LANGUAGE:${LANG}>:SHELL:${OpenMP_${LANG}_FLAGS}>")
         if(CMAKE_${LANG}_COMPILER_ID STREQUAL "Fujitsu"
-          OR ${CMAKE_${LANG}_COMPILER_ID} STREQUAL "IntelLLVM")
+          OR ${CMAKE_${LANG}_COMPILER_ID} STREQUAL "IntelLLVM"
+          OR CMAKE_${LANG}_COMPILER_ID MATCHES "^(Cray|CrayClang)$")
           set_property(TARGET OpenMP::OpenMP_${LANG} PROPERTY
             INTERFACE_LINK_OPTIONS "SHELL:${OpenMP_${LANG}_FLAGS}")
         endif()

+ 14 - 1
Tests/FindOpenMP/Test/CMakeLists.txt

@@ -1,4 +1,4 @@
-cmake_minimum_required(VERSION 3.30)
+cmake_minimum_required(VERSION 4.0)
 project(TestFindOpenMP NONE)
 include(CTest)
 
@@ -44,6 +44,19 @@ if(test_msvc_runtime)
   endif()
 endif()
 
+# FIXME(#26701) Needed to check target offload conditions
+foreach(c C CXX Fortran)
+  if(NOT "${OpenMP_TEST_${c}}")
+    continue()
+  endif()
+  if(CMAKE_${c}_COMPILER_ID MATCHES "^(Cray|CrayClang)$")
+    get_target_property(link_options OpenMP::OpenMP_${c} INTERFACE_LINK_OPTIONS)
+    if(NOT link_options)
+      message(FATAL_ERROR "OpenMP_${c} Interface Link Options not set for Cray Compiler")
+    endif()
+  endif()
+endforeach()
+
 foreach(c C CXX CUDA Fortran)
   if(NOT "${OpenMP_TEST_${c}}")
     continue()