From 3b18fa9e8b446ae53a611e03a2e86421cbb5ff04 Mon Sep 17 00:00:00 2001 From: John Rodgers Date: Fri, 14 Feb 2025 12:54:49 -0600 Subject: 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 --- Modules/FindOpenMP.cmake | 4 +++- Tests/FindOpenMP/Test/CMakeLists.txt | 15 ++++++++++++++- 2 files changed, 17 insertions(+), 2 deletions(-) diff --git a/Modules/FindOpenMP.cmake b/Modules/FindOpenMP.cmake index 7093727..9df2c6c 100644 --- a/Modules/FindOpenMP.cmake +++ b/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 "$<$: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() diff --git a/Tests/FindOpenMP/Test/CMakeLists.txt b/Tests/FindOpenMP/Test/CMakeLists.txt index 7b05372..bf87e62 100644 --- a/Tests/FindOpenMP/Test/CMakeLists.txt +++ b/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() -- cgit v0.12