Skip to content

Commit 578d93f

Browse files
authored
Merge branch E3SM-Project/ndk/machinefiles/intelgpu-for-pm-gpu (PR #8463)
Add Intel (`intelgpu`) compiler support to NERSC GPU machines
2 parents 5d4a591 + 8d0011d commit 578d93f

13 files changed

Lines changed: 533 additions & 3 deletions
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
# https://github.com/E3SM-Project/E3SM/issues/8140
2+
if (DEBUG)
3+
if (CMAKE_Fortran_COMPILER_ID STREQUAL "IntelLLVM" AND
4+
CMAKE_Fortran_COMPILER_VERSION VERSION_GREATER_EQUAL "2025.0")
5+
e3sm_add_flags("eam/src/physics/cosp2/external/src/simulator/MISR_simulator/MISR_simulator.F90" "-init=zero")
6+
endif()
7+
endif()
8+
9+
# https://github.com/E3SM-Project/E3SM/issues/8036
10+
# Turn off vectorization in one source file to avoid issue with Intel compiler
11+
if (NOT DEBUG)
12+
if (CMAKE_Fortran_COMPILER_ID STREQUAL "IntelLLVM" AND
13+
CMAKE_Fortran_COMPILER_VERSION VERSION_GREATER_EQUAL "2025.0")
14+
e3sm_add_flags("eam/src/physics/cosp2/optics/quickbeam_optics.F90" "-no-vec")
15+
endif()
16+
endif()
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
# https://github.com/E3SM-Project/E3SM/issues/8140
2+
if (DEBUG)
3+
if (CMAKE_Fortran_COMPILER_ID STREQUAL "IntelLLVM" AND
4+
CMAKE_Fortran_COMPILER_VERSION VERSION_GREATER_EQUAL "2025.0")
5+
e3sm_add_flags("eam/src/physics/cosp2/external/src/simulator/MISR_simulator/MISR_simulator.F90" "-init=zero")
6+
endif()
7+
endif()
8+
9+
# https://github.com/E3SM-Project/E3SM/issues/8036
10+
# Turn off vectorization in one source file to avoid issue with Intel compiler
11+
if (NOT DEBUG)
12+
if (CMAKE_Fortran_COMPILER_ID STREQUAL "IntelLLVM" AND
13+
CMAKE_Fortran_COMPILER_VERSION VERSION_GREATER_EQUAL "2025.0")
14+
e3sm_add_flags("eam/src/physics/cosp2/optics/quickbeam_optics.F90" "-no-vec")
15+
endif()
16+
endif()
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
# https://github.com/E3SM-Project/E3SM/issues/8140
2+
if (DEBUG)
3+
if (CMAKE_Fortran_COMPILER_ID STREQUAL "IntelLLVM" AND
4+
CMAKE_Fortran_COMPILER_VERSION VERSION_GREATER_EQUAL "2025.0")
5+
e3sm_add_flags("eam/src/physics/cosp2/external/src/simulator/MISR_simulator/MISR_simulator.F90" "-init=zero")
6+
endif()
7+
endif()
8+
9+
# https://github.com/E3SM-Project/E3SM/issues/8036
10+
# Turn off vectorization in one source file to avoid issue with Intel compiler
11+
if (NOT DEBUG)
12+
if (CMAKE_Fortran_COMPILER_ID STREQUAL "IntelLLVM" AND
13+
CMAKE_Fortran_COMPILER_VERSION VERSION_GREATER_EQUAL "2025.0")
14+
e3sm_add_flags("eam/src/physics/cosp2/optics/quickbeam_optics.F90" "-no-vec")
15+
endif()
16+
endif()
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
string(APPEND CONFIG_ARGS " --host=cray")
2+
string(APPEND CMAKE_EXE_LINKER_FLAGS " -lmkl_intel_lp64 -lmkl_sequential -lmkl_core")
3+
if (COMP_NAME STREQUAL gptl)
4+
string(APPEND CPPDEFS " -DHAVE_NANOTIME -DBIT64 -DHAVE_SLASHPROC -DHAVE_GETTIMEOFDAY")
5+
endif()
6+
7+
set(MPICC "cc")
8+
set(MPICXX "CC")
9+
set(MPIFC "ftn")
10+
set(SCC "icx")
11+
set(SCXX "icpx")
12+
set(SFC "ifx")
13+
14+
# CPU-only Intel oneAPI build on GPU nodes (no CUDA/Kokkos GPU settings).
15+
# Same approach as alvarez-cpu_intel.cmake: reset CXX flags to drop -fp-model=source
16+
# (unsupported by icpx), then re-apply the correct flags.
17+
set(CMAKE_CXX_FLAGS " ")
18+
if (compile_threaded)
19+
string(APPEND CMAKE_CXX_FLAGS " -qopenmp")
20+
endif()
21+
string(APPEND CMAKE_CXX_FLAGS_DEBUG " -O0 -g")
22+
23+
# Check for Intel LLVM (ifx) version 2025 or newer
24+
if (CMAKE_Fortran_COMPILER_ID STREQUAL "IntelLLVM")
25+
if (CMAKE_Fortran_COMPILER_VERSION VERSION_GREATER_EQUAL "2025.0")
26+
string(APPEND CMAKE_Fortran_FLAGS_DEBUG " -check nouninit") # Applying Intel 2025.3 sanitization workaround
27+
endif()
28+
endif()
29+
30+
string(APPEND CMAKE_CXX_FLAGS_RELEASE " -O2")
31+
string(APPEND CMAKE_CXX_FLAGS " -fp-model=precise")
32+
string(APPEND CMAKE_CXX_FLAGS " -fp-model=consistent")
33+
string(APPEND CMAKE_Fortran_FLAGS " -fp-model=consistent -fimf-use-svml")
34+
string(APPEND CMAKE_Fortran_FLAGS " -DHAVE_ERF_INTRINSICS")
35+
string(APPEND CMAKE_Fortran_FLAGS_RELEASE " -g -traceback")
Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
string(APPEND CONFIG_ARGS " --host=cray")
2+
set(USE_CUDA "TRUE")
3+
string(APPEND CPPDEFS " -DGPU")
4+
if (COMP_NAME STREQUAL gptl)
5+
string(APPEND CPPDEFS " -DHAVE_NANOTIME -DBIT64 -DHAVE_SLASHPROC -DHAVE_GETTIMEOFDAY")
6+
endif()
7+
string(APPEND CPPDEFS " -DTHRUST_IGNORE_CUB_VERSION_CHECK")
8+
string(APPEND KOKKOS_OPTIONS " -DKokkos_ARCH_AMPERE80=On -DKokkos_ENABLE_CUDA=On -DKokkos_ENABLE_CUDA_LAMBDA=On -DKokkos_ENABLE_SERIAL=ON -DKokkos_ENABLE_OPENMP=Off -DKokkos_ENABLE_IMPL_CUDA_MALLOC_ASYNC=OFF")
9+
# Workaround for Intel oneAPI 2025.3+ (clang/21) + NVCC 12.9 incompatibility:
10+
# Intel clang/21 headers use builtins (e.g., __builtin_elementwise_popcount) that NVCC's
11+
# internal Clang (~LLVM 14) does not support. This sets CMAKE_CUDA_HOST_COMPILER=g++ for
12+
# direct cmake-managed .cu file compilation.
13+
#
14+
# NOTE: This does NOT fix the EKAT kokkoscore build failure, which occurs when
15+
# kokkos_launch_compiler routes C++ files through nvcc_wrapper with icpx as ccbin.
16+
# That failure is fixed by pre-setting NVCC_WRAPPER_DEFAULT_COMPILER in share/build/buildlib.ekat.
17+
find_program(GCC_CXX_COMPILER "g++")
18+
if (GCC_CXX_COMPILER)
19+
string(APPEND CMAKE_CUDA_FLAGS " -ccbin ${GCC_CXX_COMPILER}")
20+
string(APPEND KOKKOS_OPTIONS " -DCMAKE_CUDA_HOST_COMPILER=${GCC_CXX_COMPILER}")
21+
else()
22+
message(WARNING "g++ not found; Intel oneAPI 2025.3+ CUDA host compiler incompatibility may occur")
23+
endif()
24+
string(APPEND CMAKE_CUDA_FLAGS " -O2 -arch sm_80 --use_fast_math --allow-unsupported-compiler")
25+
set(CMAKE_CUDA_ARCHITECTURES "80")
26+
set(MPICC "cc")
27+
set(MPICXX "CC")
28+
set(MPIFC "ftn")
29+
set(SCC "icx")
30+
set(SCXX "icpx")
31+
set(SFC "ifx")
32+
33+
# The Intel LLVM icpx on this system does not support -fp-model=source (set by intelgpu.cmake).
34+
# Reset CXX flags and replicate the correct set, same approach as alvarez-cpu_intel.cmake.
35+
set(CMAKE_CXX_FLAGS " ")
36+
if (compile_threaded)
37+
string(APPEND CMAKE_CXX_FLAGS " -qopenmp")
38+
endif()
39+
string(APPEND CMAKE_CXX_FLAGS_DEBUG " -O0 -g")
40+
string(APPEND CMAKE_CXX_FLAGS_RELEASE " -O2")
41+
string(APPEND CMAKE_CXX_FLAGS " -fp-model=precise")
42+
string(APPEND CMAKE_CXX_FLAGS " -fp-model=consistent")
43+
44+
# Check for Intel LLVM (ifx) version 2025 or newer
45+
if (CMAKE_Fortran_COMPILER_ID STREQUAL "IntelLLVM")
46+
if (CMAKE_Fortran_COMPILER_VERSION VERSION_GREATER_EQUAL "2025.0")
47+
string(APPEND CMAKE_Fortran_FLAGS_DEBUG " -check nouninit") # Applying Intel 2025.3 sanitization workaround
48+
endif()
49+
endif()
50+
51+
string(APPEND CMAKE_Fortran_FLAGS " -fp-model=consistent -fimf-use-svml")
52+
string(APPEND CMAKE_Fortran_FLAGS " -DHAVE_ERF_INTRINSICS")
53+
string(APPEND CMAKE_Fortran_FLAGS_RELEASE " -g -traceback")
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
string(APPEND CMAKE_EXE_LINKER_FLAGS " -lmkl_intel_lp64 -lmkl_sequential -lmkl_core")
2+
string(APPEND CMAKE_C_FLAGS " -fp-model precise -std=gnu99")
3+
if (compile_threaded)
4+
string(APPEND CMAKE_C_FLAGS " -qopenmp")
5+
string(APPEND CMAKE_CXX_FLAGS " -qopenmp")
6+
string(APPEND CMAKE_Fortran_FLAGS " -qopenmp")
7+
string(APPEND CMAKE_EXE_LINKER_FLAGS " -qopenmp")
8+
endif()
9+
string(APPEND CMAKE_C_FLAGS_RELEASE " -O2 -debug minimal")
10+
string(APPEND CMAKE_CXX_FLAGS_RELEASE " -O2")
11+
string(APPEND CMAKE_Fortran_FLAGS_RELEASE " -O2 -debug minimal")
12+
string(APPEND CMAKE_C_FLAGS_DEBUG " -O0 -g")
13+
string(APPEND CMAKE_CXX_FLAGS_DEBUG " -O0 -g")
14+
string(APPEND CMAKE_Fortran_FLAGS_DEBUG " -O0 -g -check uninit -check bounds -check pointers -fpe0 -check noarg_temp_created -init=snan,arrays")
15+
string(APPEND CMAKE_CXX_FLAGS " -fp-model source")
16+
if (COMP_NAME STREQUAL cice)
17+
string(APPEND CMAKE_Fortran_FLAGS_DEBUG " -init=nosnan,arrays")
18+
endif()
19+
string(APPEND CPPDEFS " -DFORTRANUNDERSCORE -DNO_R16 -DCPRINTEL")
20+
string(APPEND CMAKE_Fortran_FLAGS " -convert big_endian -assume byterecl -ftz -traceback -assume realloc_lhs -fp-model source")
21+
string(APPEND CMAKE_Fortran_FORMAT_FIXED_FLAG " -fixed -132")
22+
string(APPEND CMAKE_Fortran_FORMAT_FREE_FLAG " -free")
23+
set(HAS_F2008_CONTIGUOUS "TRUE")
24+
set(MPICC "mpicc")
25+
set(MPICXX "mpicxx")
26+
set(MPIFC "mpif90")
27+
set(SCC "icc")
28+
set(SCXX "icpc")
29+
set(SFC "ifort")
30+
31+
# Intel has to link fortran mains with fortran
32+
set(E3SM_LINK_WITH_FORTRAN "TRUE")
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
string(APPEND CONFIG_ARGS " --host=cray")
2+
string(APPEND CMAKE_EXE_LINKER_FLAGS " -lmkl_intel_lp64 -lmkl_sequential -lmkl_core")
3+
if (COMP_NAME STREQUAL gptl)
4+
string(APPEND CPPDEFS " -DHAVE_NANOTIME -DBIT64 -DHAVE_SLASHPROC -DHAVE_GETTIMEOFDAY")
5+
endif()
6+
7+
set(MPICC "cc")
8+
set(MPICXX "CC")
9+
set(MPIFC "ftn")
10+
set(SCC "icx")
11+
set(SCXX "icpx")
12+
set(SFC "ifx")
13+
14+
# CPU-only Intel oneAPI build on GPU nodes (no CUDA/Kokkos GPU settings).
15+
# Same approach as muller-cpu_intel.cmake: reset CXX flags to drop -fp-model=source
16+
# (unsupported by icpx), then re-apply the correct flags.
17+
set(CMAKE_CXX_FLAGS " ")
18+
if (compile_threaded)
19+
string(APPEND CMAKE_CXX_FLAGS " -qopenmp")
20+
endif()
21+
string(APPEND CMAKE_CXX_FLAGS_DEBUG " -O0 -g")
22+
23+
# Check for Intel LLVM (ifx) version 2025 or newer
24+
if (CMAKE_Fortran_COMPILER_ID STREQUAL "IntelLLVM")
25+
if (CMAKE_Fortran_COMPILER_VERSION VERSION_GREATER_EQUAL "2025.0")
26+
string(APPEND CMAKE_Fortran_FLAGS_DEBUG " -check nouninit") # Applying Intel 2025.3 sanitization workaround
27+
endif()
28+
endif()
29+
30+
string(APPEND CMAKE_CXX_FLAGS_RELEASE " -O2")
31+
string(APPEND CMAKE_CXX_FLAGS " -fp-model=precise")
32+
string(APPEND CMAKE_CXX_FLAGS " -fp-model=consistent")
33+
string(APPEND CMAKE_Fortran_FLAGS " -fp-model=consistent -fimf-use-svml")
34+
string(APPEND CMAKE_Fortran_FLAGS " -DHAVE_ERF_INTRINSICS")
35+
string(APPEND CMAKE_Fortran_FLAGS_RELEASE " -g -traceback")
Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
string(APPEND CONFIG_ARGS " --host=cray")
2+
set(USE_CUDA "TRUE")
3+
string(APPEND CPPDEFS " -DGPU")
4+
if (COMP_NAME STREQUAL gptl)
5+
string(APPEND CPPDEFS " -DHAVE_NANOTIME -DBIT64 -DHAVE_SLASHPROC -DHAVE_GETTIMEOFDAY")
6+
endif()
7+
string(APPEND CPPDEFS " -DTHRUST_IGNORE_CUB_VERSION_CHECK")
8+
string(APPEND KOKKOS_OPTIONS " -DKokkos_ARCH_AMPERE80=On -DKokkos_ENABLE_CUDA=On -DKokkos_ENABLE_CUDA_LAMBDA=On -DKokkos_ENABLE_SERIAL=ON -DKokkos_ENABLE_OPENMP=Off -DKokkos_ENABLE_IMPL_CUDA_MALLOC_ASYNC=OFF")
9+
# Workaround for Intel oneAPI 2025.3+ (clang/21) + CUDA host compiler incompatibility:
10+
# Intel clang/21 headers use builtins (e.g., __builtin_elementwise_popcount) that are
11+
# unavailable when Intel CC is used as nvcc's CUDA host compiler (-ccbin). Use GCC instead.
12+
find_program(GCC_CXX_COMPILER "g++")
13+
if (GCC_CXX_COMPILER)
14+
string(APPEND CMAKE_CUDA_FLAGS " -ccbin ${GCC_CXX_COMPILER}")
15+
string(APPEND KOKKOS_OPTIONS " -DCMAKE_CUDA_HOST_COMPILER=${GCC_CXX_COMPILER}")
16+
else()
17+
message(WARNING "g++ not found; Intel oneAPI 2025.3+ CUDA host compiler incompatibility may occur in EKAT build")
18+
endif()
19+
string(APPEND CMAKE_CUDA_FLAGS " -O2 -arch sm_80 --use_fast_math --allow-unsupported-compiler")
20+
set(CMAKE_CUDA_ARCHITECTURES "80")
21+
set(MPICC "cc")
22+
set(MPICXX "CC")
23+
set(MPIFC "ftn")
24+
set(SCC "icx")
25+
set(SCXX "icpx")
26+
set(SFC "ifx")
27+
28+
# The Intel LLVM icpx on this system does not support -fp-model=source (set by intelgpu.cmake).
29+
# Reset CXX flags and replicate the correct set, same approach as muller-cpu_intel.cmake.
30+
set(CMAKE_CXX_FLAGS " ")
31+
if (compile_threaded)
32+
string(APPEND CMAKE_CXX_FLAGS " -qopenmp")
33+
endif()
34+
string(APPEND CMAKE_CXX_FLAGS_DEBUG " -O0 -g")
35+
string(APPEND CMAKE_CXX_FLAGS_RELEASE " -O2")
36+
string(APPEND CMAKE_CXX_FLAGS " -fp-model=precise")
37+
string(APPEND CMAKE_CXX_FLAGS " -fp-model=consistent")
38+
39+
# Check for Intel LLVM (ifx) version 2025 or newer
40+
if (CMAKE_Fortran_COMPILER_ID STREQUAL "IntelLLVM")
41+
if (CMAKE_Fortran_COMPILER_VERSION VERSION_GREATER_EQUAL "2025.0")
42+
string(APPEND CMAKE_Fortran_FLAGS_DEBUG " -check nouninit") # Applying Intel 2025.3 sanitization workaround
43+
endif()
44+
endif()
45+
46+
string(APPEND CMAKE_Fortran_FLAGS " -fp-model=consistent -fimf-use-svml")
47+
string(APPEND CMAKE_Fortran_FLAGS " -DHAVE_ERF_INTRINSICS")
48+
string(APPEND CMAKE_Fortran_FLAGS_RELEASE " -g -traceback")
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
string(APPEND CONFIG_ARGS " --host=cray")
2+
string(APPEND CMAKE_EXE_LINKER_FLAGS " -lmkl_intel_lp64 -lmkl_sequential -lmkl_core")
3+
if (COMP_NAME STREQUAL gptl)
4+
string(APPEND CPPDEFS " -DHAVE_NANOTIME -DBIT64 -DHAVE_SLASHPROC -DHAVE_GETTIMEOFDAY")
5+
endif()
6+
7+
set(MPICC "cc")
8+
set(MPICXX "CC")
9+
set(MPIFC "ftn")
10+
set(SCC "icx")
11+
set(SCXX "icpx")
12+
set(SFC "ifx")
13+
14+
# CPU-only Intel oneAPI build on GPU nodes (no CUDA/Kokkos GPU settings).
15+
# Same approach as pm-cpu_intel.cmake: reset CXX flags to drop -fp-model=source
16+
# (unsupported by icpx), then re-apply the correct flags.
17+
set(CMAKE_CXX_FLAGS " ")
18+
if (compile_threaded)
19+
string(APPEND CMAKE_CXX_FLAGS " -qopenmp")
20+
endif()
21+
string(APPEND CMAKE_CXX_FLAGS_DEBUG " -O0 -g")
22+
23+
# Check for Intel LLVM (ifx) version 2025 or newer
24+
if (CMAKE_Fortran_COMPILER_ID STREQUAL "IntelLLVM")
25+
if (CMAKE_Fortran_COMPILER_VERSION VERSION_GREATER_EQUAL "2025.0")
26+
string(APPEND CMAKE_Fortran_FLAGS_DEBUG " -check nouninit") # Applying Intel 2025.3 sanitization workaround
27+
endif()
28+
endif()
29+
30+
string(APPEND CMAKE_CXX_FLAGS_RELEASE " -O2")
31+
string(APPEND CMAKE_CXX_FLAGS " -fp-model=precise")
32+
string(APPEND CMAKE_CXX_FLAGS " -fp-model=consistent")
33+
string(APPEND CMAKE_Fortran_FLAGS " -fp-model=consistent -fimf-use-svml")
34+
string(APPEND CMAKE_Fortran_FLAGS " -DHAVE_ERF_INTRINSICS")
35+
string(APPEND CMAKE_Fortran_FLAGS_RELEASE " -g -traceback")
Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
string(APPEND CONFIG_ARGS " --host=cray")
2+
set(USE_CUDA "TRUE")
3+
string(APPEND CPPDEFS " -DGPU")
4+
if (COMP_NAME STREQUAL gptl)
5+
string(APPEND CPPDEFS " -DHAVE_NANOTIME -DBIT64 -DHAVE_SLASHPROC -DHAVE_GETTIMEOFDAY")
6+
endif()
7+
string(APPEND CPPDEFS " -DTHRUST_IGNORE_CUB_VERSION_CHECK")
8+
string(APPEND KOKKOS_OPTIONS " -DKokkos_ARCH_AMPERE80=On -DKokkos_ENABLE_CUDA=On -DKokkos_ENABLE_CUDA_LAMBDA=On -DKokkos_ENABLE_SERIAL=ON -DKokkos_ENABLE_OPENMP=Off -DKokkos_ENABLE_IMPL_CUDA_MALLOC_ASYNC=Off")
9+
# Workaround for Intel oneAPI 2025.3+ (clang/21) + NVCC 12.9 incompatibility:
10+
# Intel clang/21 headers use builtins (e.g., __builtin_elementwise_popcount) that NVCC's
11+
# internal Clang (~LLVM 14) does not support. This sets CMAKE_CUDA_HOST_COMPILER=g++ for
12+
# direct cmake-managed .cu file compilation.
13+
#
14+
# NOTE: This does NOT fix the EKAT kokkoscore build failure, which occurs when
15+
# kokkos_launch_compiler routes C++ files through nvcc_wrapper with icpx as ccbin.
16+
# That failure is fixed by pre-setting NVCC_WRAPPER_DEFAULT_COMPILER in share/build/buildlib.ekat.
17+
find_program(GCC_CXX_COMPILER "g++")
18+
if (GCC_CXX_COMPILER)
19+
string(APPEND CMAKE_CUDA_FLAGS " -ccbin ${GCC_CXX_COMPILER}")
20+
string(APPEND KOKKOS_OPTIONS " -DCMAKE_CUDA_HOST_COMPILER=${GCC_CXX_COMPILER}")
21+
else()
22+
message(WARNING "g++ not found; Intel oneAPI 2025.3+ CUDA host compiler incompatibility may occur")
23+
endif()
24+
string(APPEND CMAKE_CUDA_FLAGS " -O2 -arch sm_80 --use_fast_math --allow-unsupported-compiler")
25+
set(CMAKE_CUDA_ARCHITECTURES "80")
26+
set(MPICC "cc")
27+
set(MPICXX "CC")
28+
set(MPIFC "ftn")
29+
set(SCC "icx")
30+
set(SCXX "icpx")
31+
set(SFC "ifx")
32+
33+
# The Intel LLVM icpx on this system does not support -fp-model=source (set by intelgpu.cmake).
34+
# Reset CXX flags and replicate the correct set, same approach as pm-cpu_intel.cmake.
35+
set(CMAKE_CXX_FLAGS " ")
36+
if (compile_threaded)
37+
string(APPEND CMAKE_CXX_FLAGS " -qopenmp")
38+
endif()
39+
string(APPEND CMAKE_CXX_FLAGS_DEBUG " -O0 -g")
40+
string(APPEND CMAKE_CXX_FLAGS_RELEASE " -O2")
41+
string(APPEND CMAKE_CXX_FLAGS " -fp-model=precise")
42+
string(APPEND CMAKE_CXX_FLAGS " -fp-model=consistent")
43+
44+
# Check for Intel LLVM (ifx) version 2025 or newer
45+
if (CMAKE_Fortran_COMPILER_ID STREQUAL "IntelLLVM")
46+
if (CMAKE_Fortran_COMPILER_VERSION VERSION_GREATER_EQUAL "2025.0")
47+
string(APPEND CMAKE_Fortran_FLAGS_DEBUG " -check nouninit") # Applying Intel 2025.3 sanitization workaround
48+
endif()
49+
endif()
50+
51+
string(APPEND CMAKE_Fortran_FLAGS " -fp-model=consistent -fimf-use-svml")
52+
string(APPEND CMAKE_Fortran_FLAGS " -DHAVE_ERF_INTRINSICS")
53+
string(APPEND CMAKE_Fortran_FLAGS_RELEASE " -g -traceback")

0 commit comments

Comments
 (0)