From 30cb55e97c385298acf5dd93fb077fe0714932af Mon Sep 17 00:00:00 2001 From: Andrey Parfenov Date: Mon, 3 Jul 2023 13:34:06 +0200 Subject: add support for oneapi compiler to wrf 4.4 (#38607) Signed-off-by: Andrey Parfenov --- var/spack/repos/builtin/packages/wrf/package.py | 9 +++- .../builtin/packages/wrf/patches/4.4/ifx.patch | 57 ++++++++++++++++++++++ 2 files changed, 65 insertions(+), 1 deletion(-) create mode 100644 var/spack/repos/builtin/packages/wrf/patches/4.4/ifx.patch diff --git a/var/spack/repos/builtin/packages/wrf/package.py b/var/spack/repos/builtin/packages/wrf/package.py index 103e3342f9..857b2bbe52 100644 --- a/var/spack/repos/builtin/packages/wrf/package.py +++ b/var/spack/repos/builtin/packages/wrf/package.py @@ -164,6 +164,7 @@ class Wrf(Package): patch("patches/4.4/arch.postamble.patch", when="@4.4:") patch("patches/4.4/configure.patch", when="@4.4:4.4.2") + patch("patches/4.4/ifx.patch", when="@4.4: %oneapi") patch("patches/4.5/configure.patch", when="@4.5:") # Fix WRF to remove deprecated ADIOS2 functions @@ -328,11 +329,17 @@ class Wrf(Package): config.filter("^DM_FC.*mpif90", "DM_FC = {0}".format(self.spec["mpi"].mpifc)) config.filter("^DM_CC.*mpicc", "DM_CC = {0}".format(self.spec["mpi"].mpicc)) + @run_before("configure") + def fortran_check(self): + if not self.compiler.fc: + msg = "cannot build WRF without a Fortran compiler" + raise RuntimeError(msg) + def configure(self, spec, prefix): # Remove broken default options... self.do_configure_fixup() - if self.spec.compiler.name not in ["intel", "gcc", "aocc", "fj"]: + if self.spec.compiler.name not in ["intel", "gcc", "aocc", "fj", "oneapi"]: raise InstallError( "Compiler %s not currently supported for WRF build." % self.spec.compiler.name ) diff --git a/var/spack/repos/builtin/packages/wrf/patches/4.4/ifx.patch b/var/spack/repos/builtin/packages/wrf/patches/4.4/ifx.patch new file mode 100644 index 0000000000..06ab5cff2b --- /dev/null +++ b/var/spack/repos/builtin/packages/wrf/patches/4.4/ifx.patch @@ -0,0 +1,57 @@ +diff --git a/arch/configure.defaults b/arch/configure.defaults +index 6aa210d7..a3224d34 100644 +--- a/arch/configure.defaults ++++ b/arch/configure.defaults +@@ -1962,6 +1962,51 @@ RLFLAGS = + CC_TOOLS = $(SCC) + NETCDFPAR_BUILD = CONFIGURE_NETCDFPAR_BUILD + ++########################################################### ++#ARCH Linux KNL x86_64 ppc64le i486 i586 i686, ifx compiler with icx #serial smpar dmpar dm+sm ++# ++DESCRIPTION = INTEL ($SFC/$SCC): SKX/ICX ++DMPARALLEL = 1 ++OMPCPP = -D_OPENMP ++OMP = -fiopenmp ++OMPCC = -fiopenmp ++SFC = ifx ++SCC = icx ++CCOMP = icx ++DM_FC = $(MPIF90) ++DM_CC = $(MPICC) ++FC = time $(DM_FC) ++CC = $(DM_CC) -DFSEEKO64_OK ++LD = $(FC) ++RWORDSIZE = $(NATIVE_RWORDSIZE) ++PROMOTION = -real-size `expr 8 \* $(RWORDSIZE)` -i4 ++ARCH_LOCAL = -DNONSTANDARD_SYSTEM_FUNC -DRPC_TYPES=2 -DXEON_SIMD ++CFLAGS_LOCAL = -w -flto -O3 -Wno-implicit-function-declaration -Wno-implicit-int ++LDFLAGS_LOCAL = -flto -fuse-ld=lld ++CPLUSPLUSLIB = ++ESMF_LDFLAG = $(CPLUSPLUSLIB) ++FCOPTIM = -O3 ++FCREDUCEDOPT = $(FCOPTIM) ++FCNOOPT = -O3 ++FCDEBUG = # -g $(FCNOOPT) -traceback # -fpe0 -check noarg_temp_created,bounds,format,output_conversion,pointers,uninit -ftrapuv -unroll0 -u ++FORMAT_FIXED = -FI ++FORMAT_FREE = -FR ++FCSUFFIX = ++BYTESWAPIO = -convert big_endian ++RECORDLENGTH = -assume byterecl ++FCBASEOPTS_NO_G = -O3 -flto -w -ftz -align array64byte -fno-alias $(FORMAT_FREE) $(BYTESWAPIO) -fp-model fast=2 -fimf-use-svml=true -vec-threshold0 -xCORE-AVX512 ++FCBASEOPTS = $(FCBASEOPTS_NO_G) $(FCDEBUG) ++MODULE_SRCH_FLAG = ++TRADFLAG = -traditional-cpp ++CPP = /lib/cpp -P -nostdinc ++AR = ar ++ARFLAGS = ru ++M4 = m4 ++RANLIB = ranlib ++RLFLAGS = ++CC_TOOLS = $(SCC) -Wno-implicit-function-declaration -Wno-implicit-int ++NETCDFPAR_BUILD = echo SKIPPING ++ + ########################################################### + #ARCH CYGWIN_NT i686 x86_64 Cygwin, gfortran compiler with gcc #serial smpar dmpar dm+sm + # + -- cgit v1.2.3-70-g09d2