diff --git a/src/makefile_jet.gfortran b/src/makefile_jet.gfortran index de508c16187f5bc28ae4e57abf331247ef51922a..504290ca132d00f4ce75eb25162199533c53baf4 100644 --- a/src/makefile_jet.gfortran +++ b/src/makefile_jet.gfortran @@ -49,36 +49,27 @@ FLEXPART-MPI-DBG = DBG_FLEXPART_MPI # Serial processing executable FLEXPART-SERIAL = FLEXPART +ROOT_DIR = . #MD -ifeq ($(gcc), 4.9) -# Compiled libraries under user ~flexpart, gfortran v4.9 - ROOT_DIR = /homevip/flexpart/ - - F90 = ${ROOT_DIR}/gcc-4.9.1/bin/gfortran - MPIF90 = ${ROOT_DIR}/bin/mpifort - - INCPATH1 = ${ROOT_DIR}/gcc-4.9.1/include - INCPATH2 = ${ROOT_DIR}/include - LIBPATH1 = ${ROOT_DIR}/lib -else -# Compiled libraries under user ~flexpart, gfortran v5.4 - #ROOT_DIR = /homevip/flexpart/ - ROOT_DIR = . #MD - - F90 = /usr/bin/gfortran - #MPIF90 = /usr/bin/mpifort - MPIF90 = /usr/lib64/openmpi/bin/mpifort - - #INCPATH1 = ${ROOT_DIR}/gcc-5.4.0/include - #INCPATH2 = /usr/include - #LIBPATH1 = ${ROOT_DIR}/gcc-5.4.0/lib - - #MD for jet - INCPATH1 = /jetfs/spack/opt/spack/linux-rhel8-skylake_avx512/gcc-8.3.1/eccodes-2.18.0-s7clum3voiwexqv6favl72gqkpvjxgx3/include - INCPATH2 = /jetfs/spack/opt/spack/linux-rhel8-skylake_avx512/gcc-8.3.1/netcdf-fortran-4.5.3-kfd2vkj7m6cremij4nunxwqfcrqjovcf/include - LIBPATH1 = /jetfs/spack/opt/spack/linux-rhel8-skylake_avx512/gcc-8.3.1/eccodes-2.18.0-s7clum3voiwexqv6favl72gqkpvjxgx3/lib - LIBPATH2 = /jetfs/spack/opt/spack/linux-rhel8-skylake_avx512/gcc-8.3.1/netcdf-fortran-4.5.3-kfd2vkj7m6cremij4nunxwqfcrqjovcf/lib +# +# JET (INCLUDE/CPATH and LIBRARY_PATH) +# VSC (CPATH and LIBRARY_PATH) +# +ifndef CPATH +$(error CPATH is not set) endif +ifndef LIBRARY_PATH +$(error LIBRARY_PATH is not set) +endif +# use the environmental variable $INCLUDE +# split the paths separated by : +INC = $(subst :, ,$(CPATH)) +# add a -I/path/to/include +INC := $(INC:%=-I%) +# use the environmental variable $LIBRARY_PATH +LIBPATH := $(subst :, ,$(LIBRARY_PATH)) +LIBRPATH := $(LIBPATH:%=-Wl,-rpath=%) +LIBPATH := $(LIBPATH:%=-L%) ### Enable netCDF output? ifeq ($(ncf), yes) @@ -96,18 +87,30 @@ VPATH = gributils/ ## OPTIMIZATION LEVEL O_LEV = 0 # [0,1,2,3,g,s,fast] O_LEV_DBG = g # [0,g] +# Different CPU microarchitectures +# check https://gcc.gnu.org/onlinedocs/gcc/x86-Options.html +# using generic (AVX2) +# using skylake (AVX512) +# using native is the default, which will use whatever it can +# (defined by the machine where you are compiling it) +# +ifeq ($(arch), generic) + FUSER = -g -march=core-avx2 +else ifeq ($(arch), skylake) + FUSER = -g -march=skylake-avx512 +else + FUSER = -g -march=native -mtune=native +endif ## LIBRARIES #LIBS = -lgrib_api_f90 -lgrib_api -lm -ljasper -lnetcdff #LIBS = -lgrib_api_f90 -lgrib_api -lm -ljasper $(NCOPT) LIBS = -leccodes -leccodes_f90 -lm -ljasper $(NCOPT) #MD +FFLAGS = $(INC) -O$(O_LEV) -m64 -cpp -mcmodel=large -fconvert=little-endian -frecord-marker=4 -fmessage-length=0 -flto=jobserver $(NCOPT) $(ETAOPT) $(FUSER) #-convert little_endian -fpp -WB -check all +DBGFLAGS = $(INC) -O$(O_LEV_DBG) -g3 -ggdb3 -cpp -m64 -mcmodel=large -fconvert=little-endian -frecord-marker=4 -fmessage-length=0 -flto=jobserver -O$(O_LEV_DBG) $(NCOPT) -fbacktrace -Wall -fdump-core $(FUSER) # -ffpe-trap=invalid,overflow,denormal,underflow,zero -Warray-bounds -fcheck=all -FFLAGS = -I$(INCPATH1) -I$(INCPATH2) -O$(O_LEV) -g -cpp -m64 -mcmodel=large -fconvert=little-endian -frecord-marker=4 -fmessage-length=0 -flto=jobserver -O$(O_LEV) $(NCOPT) $(FUSER) #-Warray-bounds -fcheck=all # -march=native - -DBGFLAGS = -I$(INCPATH1) -I$(INCPATH2) -O$(O_LEV_DBG) -g3 -ggdb3 -cpp -m64 -mcmodel=large -fconvert=little-endian -frecord-marker=4 -fmessage-length=0 -flto=jobserver -O$(O_LEV_DBG) $(NCOPT) -fbacktrace -Wall -fdump-core $(FUSER) # -ffpe-trap=invalid,overflow,denormal,underflow,zero -Warray-bounds -fcheck=all - -LDFLAGS = $(FFLAGS) -L$(LIBPATH1) -Wl,-rpath,$(LIBPATH1) $(LIBS) -L$(LIBPATH2) -Wl,-rpath,$(LIBPATH2) #MD add LIBPATH2 as rpath (for dynamic libraries) -LDDEBUG = $(DBGFLAGS) -L$(LIBPATH1) $(LIBS) -L$(LIBPATH2) +LDFLAGS = $(FFLAGS) $(LIBPATH) $(LIBRPATH) $(LIBS) +LDDEBUG = $(DBGFLAGS) $(LIBPATH) $(LIBRPATH) $(LIBS) MODOBJS = \ par_mod.o com_mod.o \