@@ -96,10 +96,22 @@ exit 0
9696 find_package (MPI COMPONENTS Fortran REQUIRED )
9797
9898 target_compile_definitions (${a_target} PRIVATE MFC_MPI )
99- if (CMAKE_Fortran_COMPILER_ID STREQUAL "LLVMFlang" AND
100- DEFINED ENV{CRAY_MPICH_INC} AND NOT "$ENV{CRAY_MPICH_INC} " STREQUAL "" )
101- target_compile_options (${a_target} PRIVATE "$ENV{CRAY_MPICH_INC} " )
102- target_link_libraries (${a_target} PRIVATE $ENV{CRAY_MPICH_LIB} )
99+ # amdflang (LLVMFlang) needs MPI include/link paths passed explicitly, as
100+ # its mpi.mod must match the compiler ABI. Prefer the compiler-neutral
101+ # MFC_FLANG_MPI_* vars; fall back to the legacy CRAY_MPICH_* names (Frontier).
102+ set (_flang_mpi_inc "$ENV{MFC_FLANG_MPI_INC} " )
103+ set (_flang_mpi_lib "$ENV{MFC_FLANG_MPI_LIB} " )
104+ if ("${_flang_mpi_inc} " STREQUAL "" )
105+ set (_flang_mpi_inc "$ENV{CRAY_MPICH_INC} " )
106+ set (_flang_mpi_lib "$ENV{CRAY_MPICH_LIB} " )
107+ endif ()
108+ if (CMAKE_Fortran_COMPILER_ID STREQUAL "LLVMFlang" AND NOT "${_flang_mpi_inc} " STREQUAL "" )
109+ if ("${_flang_mpi_lib} " STREQUAL "" )
110+ message (FATAL_ERROR "amdflang MPI include path is set but its link libraries are not. "
111+ "Set both MFC_FLANG_MPI_INC and MFC_FLANG_MPI_LIB (or both CRAY_MPICH_INC and CRAY_MPICH_LIB)." )
112+ endif ()
113+ target_compile_options (${a_target} PRIVATE "${_flang_mpi_inc} " )
114+ target_link_libraries (${a_target} PRIVATE ${_flang_mpi_lib} )
103115 else ()
104116 target_link_libraries (${a_target} PRIVATE MPI::MPI_Fortran )
105117 endif ()
@@ -121,8 +133,13 @@ exit 0
121133 find_package (CUDAToolkit REQUIRED )
122134 target_link_libraries (${a_target} PRIVATE CUDA::cudart CUDA::cufft )
123135 elseif (CMAKE_Fortran_COMPILER_ID STREQUAL "LLVMFlang" )
124- if (DEFINED ENV{CRAY_HIPFORT_LIB} AND NOT "$ENV{CRAY_HIPFORT_LIB} " STREQUAL "" )
125- target_link_libraries (${a_target} PRIVATE $ENV{CRAY_HIPFORT_LIB} )
136+ # Prefer the neutral MFC_FLANG_HIPFORT_LIB; fall back to CRAY_HIPFORT_LIB (Frontier).
137+ set (_flang_hipfort_lib "$ENV{MFC_FLANG_HIPFORT_LIB} " )
138+ if ("${_flang_hipfort_lib} " STREQUAL "" )
139+ set (_flang_hipfort_lib "$ENV{CRAY_HIPFORT_LIB} " )
140+ endif ()
141+ if (NOT "${_flang_hipfort_lib} " STREQUAL "" )
142+ target_link_libraries (${a_target} PRIVATE ${_flang_hipfort_lib} )
126143 else ()
127144 find_library (HIPFFT_LIB hipfft
128145 HINTS "$ENV{OLCF_AFAR_ROOT} /lib" REQUIRED )
@@ -244,11 +261,14 @@ exit 0
244261 endif ()
245262
246263 find_library (HIP_LIB amdhip64
247- HINTS "$ENV{OLCF_AFAR_ROOT} /lib" REQUIRED )
264+ HINTS "$ENV{OLCF_AFAR_ROOT} /lib" " $ENV{OLCF_AFAR_ROOT} /lib/llvm/lib" REQUIRED )
248265 find_library (HIPFORT_AMDGCN_LIB hipfort-amdgcn
249- HINTS "$ENV{OLCF_AFAR_ROOT} /lib" REQUIRED )
266+ HINTS "$ENV{OLCF_AFAR_ROOT} /lib" "$ENV{OLCF_AFAR_ROOT} /lib/llvm/lib" REQUIRED )
267+ # The hipfort module dir moved to lib/llvm/include in newer AFAR
268+ # (therock) drops; keep the classic path for Frontier's layout.
250269 target_include_directories (${a_target} PRIVATE
251- "$ENV{OLCF_AFAR_ROOT} /include/hipfort/amdgcn" )
270+ "$ENV{OLCF_AFAR_ROOT} /include/hipfort/amdgcn"
271+ "$ENV{OLCF_AFAR_ROOT} /lib/llvm/include/hipfort/amdgcn" )
252272 target_link_libraries (${a_target} PRIVATE
253273 ${HIP_LIB} ${HIPFORT_AMDGCN_LIB} )
254274
0 commit comments