#--------------------------------------------------------------------- # Platform specific macros for csm_share unit tests #------------------------------------------------------------------------ # Set up special characters null := .SUFFIXES: .F90 .c .o # Cancel rule to make *.o from *.mod %.o : %.mod # Defines to use everywhere cpre = $(null)-WF,-D$(null) CPPDEF := -DESMF_3 -D_NETCDF ifeq ($(ESMF_3),TRUE) CPPDEF += -DESMF_3 endif ifneq ($(SPMD),TRUE) CPPDEF += -D_MPISERIAL endif LD := $(FC) CPPDEF += -DSEQ_ESMF -DNOPERF # For linking with external ESMF # If ESMF_BLD is defined then set ESMF_MOD and ESMF_LIB based on it ifneq ($(ESMF_BLD),$(null)) ESMF_BOPT := g ESMF_MOD = $(ESMF_BLD)/mod/mod$(ESMF_BOPT)/$(ESMF_ARCH) ESMF_LIB = $(ESMF_BLD)/lib/lib$(ESMF_BOPT)/$(ESMF_ARCH) else ESMF_MOD := . ESMF_LIB := . endif # Determine platform UNAMES := $(shell uname -s) .F90.o: $(FC) -c $(FFLAGS) $< .c.o: $(CC) -c $(CFLAGS) $< #------------------------------------------------------------------------ # SGI #------------------------------------------------------------------------ ifeq ($(UNAMES),IRIX64) # ESMF arch ifeq ($(SPMD),TRUE) ESMF_ARCH := IRIX64.default.64.mpi.default else ESMF_ARCH := IRIX64.default.64.mpiuni.default endif CPPDEF += -DFORTRAN_UNDERSCORE_ FC := f90 INC_MPI := /opt/mpt/mpt/usr/lib LIB_MPI := /opt/mpt/mpt/usr/include FFLAGS := -64 -cpp -extend_source $(CPPDEF) -DIRIX64 \ -g -DEBUG:trap_uninitialized=ON -C \ $(cpp_path) -I$(INC_NETCDF) -I$(LIB_NETCDF) CFLAGS := $(cpp_path) -64 -O2 $(CPPDEF) LDFLAGS := -64 -L$(LIB_NETCDF) -lnetcdf LD := $(FC) RANLIB := echo ifeq ($(SMP),TRUE) # Only enable OpenMP, not SGI specific parallelism # Note that -lmp should precede -lmpi when running hybrid MPI/OpenMP FFLAGS += -mp -MP:dsm=OFF -MP:old_mp=OFF LDFLAGS += -mp -lmp endif # When using MPI ifeq ($(SPMD),TRUE) FFLAGS += -I$(INC_MPI) LDFLAGS += -L$(LIB_MPI) -lmpi # ESMF arch ESMF_ARCH := IRIX64.default.64.mpi.default else # ESMF arch ESMF_ARCH := IRIX64.default.64.mpiuni.default endif endif #------------------------------------------------------------------------ # SUN #------------------------------------------------------------------------ ifeq ($(UNAMES),SunOS) FC := f95 ifeq ($(SPMD),TRUE) ESMF_ARCH := SunOS.pgi.mpi.default else ESMF_ARCH := SunOS.pgi.mpiuni.default endif CPPDEF += -DFORTRAN_SAME FFLAGS := -xs -stackvar -Qoption f90comp \ -g -C $(CPPDEF) CFLAGS := $(cpp_path) -DSUNOS $(CPPDEF) LDFLAGS := LD := $(FC) ARFLAGS := ru RANLIB := echo endif #------------------------------------------------------------------------ # Linux #------------------------------------------------------------------------ ifeq ($(UNAMES),Linux) ifeq ($(FC),f77) FC := pgf90 endif CFLAGS := LDFLAGS := ifeq ($(FC),pgf90) CPPDEF += -DLINUX -DFORTRAN_UNDERSCORE_ ifeq ($(INC_MPI),$(null)) INC_MPI := /usr/local/mpich-1.2.7p1-pgi-pgcc-pghf-6.1-3/include endif ifeq ($(LIB_MPI),$(null)) LIB_MPI := /usr/local/mpich-1.2.7p1-pgi-pgcc-pghf-6.1-3/lib endif ifeq ($(INC_NETCDF),$(null)) INC_NETCDF := /usr/local/netcdf-3.6.1-pgi-hpf-cc-6.1-6/include endif ifeq ($(LIB_NETCDF),$(null)) LIB_NETCDF := /usr/local/netcdf-3.6.1-pgi-hpf-cc-6.1-6/lib endif CC := pgcc ifeq ($(SPMD),TRUE) ESMF_ARCH := Linux.pgi.32.mpich.default else ESMF_ARCH := Linux.pgi.32.mpiuni.default endif F90FLAGS := -Mfree FFLAGS := $(CPPFLAGS) $(CPPDEF) $(F90FLAGS) -Mrecursive -Mdalign \ -Mextend $(cpp_path) -I$(INC_NETCDF) \ -g -Mbounds -I$(INC_MPI) ifeq ($(FLTTRAP),FALSE) FFLAGS += -Ktrap=fp endif LDFLAGS += -Bstatic endif ifeq ($(FC),lf95) CPPDEF += -DLINUX -DFORTRAN_UNDERSCORE_ CC := cc INC_MPI := /usr/local/mpich-1.2.7p1-gcc-g++-4.0.2-8-lf9562/include LIB_MPI := /usr/local/mpich-1.2.7p1-gcc-g++-4.0.2-8-lf9562/lib INC_NETCDF := /usr/local/netcdf-3.6.1beta3-gcc-4.0.2-g77-lf9562/include LIB_NETCDF := /usr/local/netcdf-3.6.1beta3-gcc-4.0.2-g77-lf9562/lib ifeq ($(SPMD),TRUE) ESMF_ARCH := Linux.lahey.32.mpich.default else ESMF_ARCH := Linux.lahey.32.mpiuni.default endif FFLAGS := $(CPPFLAGS) $(CPPDEF) $(F90FLAGS) \ $(cpp_path) -I$(INC_NETCDF) \ -g --chk a,e,s -I$(INC_MPI) ifneq ($(FLTTRAP),FALSE) FFLAGS += --trap --chk u --trace LDFLAGS += --trap --trace else FFLAGS += --ntrap --ntrace LDFLAGS += --ntrap --ntrace endif LDFLAGS += -static endif ifeq ($(FC),pathf90) CPPDEF += -DLINUX -DFORTRAN_UNDERSCORE_ CC := pathcc ifeq ($(SPMD),TRUE) ESMF_ARCH := Linux..pathscale.32.mpich.default else ESMF_ARCH := Linux.pathscale.32.mpiuni.default endif FFLAGS := $(CPPFLAGS) $(CPPDEF) $(F90FLAGS) \ $(cpp_path) -I$(INC_NETCDF) \ -g -extend_source -ftpp -fno-second-underscore endif ifeq ($(FC),ftn) CPPDEF += -DLINUX -DFORTRAN_UNDERSCORE_ CC := pathcc ifeq ($(SPMD),TRUE) ESMF_ARCH := Linux..pathscale.32.mpich.default else ESMF_ARCH := Linux.pathscale.32.mpiuni.default endif FFLAGS := $(CPPFLAGS) $(CPPDEF) $(F90FLAGS) \ $(cpp_path) -I$(INC_NETCDF) \ -g -extend_source -ftpp -fno-second-underscore endif ifeq ($(FC),ifort) CPPDEF += -DLINUX -DFORTRAN_UNDERSCORE_ CC := icc ifeq ($(INC_MPI),$(null)) INC_MPI := /usr/local/mpich-intel/include endif ifeq ($(LIB_MPI),$(null)) LIB_MPI := /usr/local/mpich-intel/lib endif ifeq ($(INC_NETCDF),$(null)) INC_NETCDF := /usr/local/netcdf-intel/include endif ifeq ($(LIB_NETCDF),$(null)) LIB_NETCDF := /usr/local/netcdf-intel/lib endif ifeq ($(SPMD),TRUE) ESMF_ARCH := Linux.ifort.32.mpich.default else ESMF_ARCH := Linux.ifort.32.mpiuni.default endif FFLAGS := $(CPPFLAGS) $(CPPDEF) $(F90FLAGS) \ $(cpp_path) -I$(INC_NETCDF) \ -m64 -ftz -g -fp-model precise -convert big_endian -assume byterecl -traceback -CB CFLAGS += -m64 -ftz -v LDFLAGS += -m64 endif ifeq ($(FC),gfortran) CPPDEF += -DLINUX -DFORTRAN_SAME CC := cc FFLAGS := -fno-underscoring $(CPPDEF) $(cpp_path) -I$(INC_NETCDF) \ $(FPPFLAGS) -g -fbounds-check -fno-range-check -m64 CFLAGS += -m64 LDFLAGS += -static -m64 -ffpe-trap=invalid,zero,overflow -fno-range-check ifneq ($(FLTTRAP),FALSE) LDFLAGS += -ffpe-trap=invalid,zero,overflow FFLAGS += -ffpe-trap=invalid,zero,overflow endif endif ifeq ($(FC),g95) CPPDEF += -DFORTRAN_SAME CC := gcc FFLAGS := -fno-underscoring $(CPPDEF) $(cpp_path) -I$(INC_NETCDF) \ $(FPPFLAGS) -g -fbounds-check -m64 -ffree-line-length-huge CFLAGS += -m64 LDFLAGS += -fstatic -m64 ifneq ($(FLTTRAP),FALSE) LDFLAGS += -ffpe-trap=invalid,zero,overflow FFLAGS += -ffpe-trap=invalid,zero,overflow endif endif ifeq ($(FC),xlf90) CPPDEF += -DBGP -DAIX ESMF_ARCH := AIX.default.64.mpiuni.default NETCDF_PATH := $(NETCDF) INC_NETCDF := $(NETCDF_PATH)/include LIB_NETCDF := $(NETCDF_PATH)/lib MOD_NETCDF := $(NETCDF_PATH)/include CPPDEF += -DFORTRAN_SAME AIX_CPPDEF := $(patsubst -D%,$(cpre)%,$(CPPDEF)) FPPFLAGS := -WF,-P,$(AIX_CPPDEF) FREEFLAGS := -qsuffix=f=f90:cpp=F90 FFLAGS := $(FREEFLAGS) $(cpp_path) -I$(INC_NETCDF) -I$(LIB_NETCDF) $(FPPFLAGS) \ -qarch=auto -qspillsize=2500 \ -g -qfullpath -q64 -C -d CC := cc_r CFLAGS += -O2 -q64 LDFLAGS += -q64 -L/bgsys/drivers/ppcfloor/comm/lib -Wl,--relax -Wl,--allow-multiple-definition -qfullpath ifneq ($(FLTTRAP),FALSE) FFLAGS += -qinitauto=FF911299 -qflttrap=ov:zero:inv:en -qhalt=w endif ifeq ($(FC),mpxlf90_r) LDFLAGS += -lmpi_r endif ifeq ($(SMP),TRUE) FFLAGS += -qsmp=omp:noopt LDFLAGS += -qsmp=omp:noopt endif endif LDFLAGS += -L$(LIB_NETCDF) -lnetcdf ifeq ($(SPMD),TRUE) LDFLAGS += -L$(LIB_MPI) -lmpich endif CFLAGS += $(cpp_path) $(CPPDEF) LD := $(FC) ARFLAGS := ru RANLIB := echo # For linking with external ESMF ifneq ($(ESMF_BLD),$(null)) FFLAGS += -M$(ESMF_BLD)/mod/mod$(ESMF_BOPT)/$(ESMF_ARCH) -M. endif #.F90.o: # $(FC) $(CPPFLAGS) $< # $(FC) $(F90FLAGS) $*.f endif #------------------------------------------------------------------------ # AIX #------------------------------------------------------------------------ ifeq ($(UNAMES),AIX) ifeq ($(SPMD),TRUE) FC := mpxlf90_r ESMF_ARCH := AIX.default.64.mpi.default else FC := xlf90_r ESMF_ARCH := AIX.default.64.mpiuni.default endif CPPDEF += -DFORTRAN_SAME AIX_CPPDEF := $(patsubst -D%,$(cpre)%,$(CPPDEF)) FPPFLAGS := -WF,-P,-DAIX $(AIX_CPPDEF) FREEFLAGS := -qsuffix=f=f90:cpp=F90 FFLAGS := $(FREEFLAGS) $(cpp_path) -I$(INC_NETCDF) -I$(LIB_NETCDF) $(FPPFLAGS) \ -qarch=auto -qspillsize=2500 \ -g -qfullpath -q64 -C -d CC := mpcc_r CFLAGS := $(cpp_path) -O2 $(CPPDEF) -q64 LDFLAGS := -L$(LIB_NETCDF) -lnetcdf -q64 -lmassv LD := $(FC) ifneq ($(FLTTRAP),FALSE) FFLAGS += -qinitauto=FF911299 -qflttrap=ov:zero:inv:en -qhalt=w endif ifeq ($(FC),mpxlf90_r) LDFLAGS += -lmpi_r endif ifeq ($(SMP),TRUE) FFLAGS += -qsmp=omp:noopt LDFLAGS += -qsmp=omp:noopt endif ARFLAGS := -X 64 ru RANLIB := ranlib endif #------------------------------------------------------------------------ # Darwin #------------------------------------------------------------------------ ifeq ($(UNAMES),Darwin) CC := gcc LDFLAGS := -g -L$(LIB_NETCDF) -lnetcdf -lSystemStubs ifeq ($(FC),ifort) CPPDEF += -DLINUX -DFORTRAN_UNDERSCORE_ -DFORTRANUNDERSCORE CC := icc ifeq ($(INC_MPI),$(null)) INC_MPI := /usr/local/mpich-intel/include endif ifeq ($(LIB_MPI),$(null)) LIB_MPI := /usr/local/mpich-intel/lib endif ifeq ($(INC_NETCDF),$(null)) INC_NETCDF := /usr/local/netcdf-intel/include endif ifeq ($(LIB_NETCDF),$(null)) LIB_NETCDF := /usr/local/netcdf-intel/lib endif ifeq ($(SPMD),TRUE) ESMF_ARCH := Linux.ifort.32.mpich.default else ESMF_ARCH := Linux.ifort.32.mpiuni.default endif FFLAGS := $(CPPFLAGS) $(CPPDEF) $(F90FLAGS) \ $(cpp_path) -I$(INC_NETCDF) \ -m64 -ftz -g -fp-model precise -convert big_endian -assume byterecl -traceback -CB CFLAGS += -m64 -ftz -v LDFLAGS += -m64 gptl.o: gptl.c $(CC) -c -I/usr/include/machine $(CFLAGS) $< endif ifeq ($(FC),g95) ifeq ($(SPMD),TRUE) ESMF_ARCH := Darwin.g95.32.mpich.default else ESMF_ARCH := Darwin.g95.32.mpiuni.default endif FFLAGS := -fno-underscoring $(CPPDEF) $(cpp_path) -I$(INC_NETCDF) \ $(FPPFLAGS) -g -fbounds-check -fstatic -ffree-line-length-huge -ffree-form \ -ftrace=full endif ifeq ($(FC),gfortran) ifeq ($(SPMD),TRUE) ESMF_ARCH := Darwin.gfortran.32.mpich.default else ESMF_ARCH := Darwin.gfortran.32.mpiuni.default endif FFLAGS := -fno-underscoring $(CPPDEF) $(cpp_path) -I$(INC_NETCDF) \ $(FPPFLAGS) -g -fbounds-check -fno-range-check ifneq ($(FLTTRAP),FALSE) LDFLAGS += -ffpe-trap=invalid,zero,overflow FFLAGS += -ffpe-trap=invalid,zero,overflow endif LDFLAGS += -static endif CFLAGS := $(cpp_path) -O2 $(CPPDEF) \ -I/Developer/SDKs/MacOSX10.4.0.sdk/usr/include/malloc -I/usr/include -I/usr/include/malloc ARFLAGS := ru RANLIB := ranlib LD := $(FC) # For linking with MPICH ifeq ($(SPMD),TRUE) LDFLAGS += -lmpich LD := mpif90 endif LDFLAGS += -lSystemStubs_profile # For linking with external ESMF ifneq ($(ESMF_BLD),$(null)) LDFLAGS += -lgcc_s.1.0 -lSystemStubs_debug endif endif #------------------------------------------------------------------------ # OSF1 #------------------------------------------------------------------------ ifeq ($(UNAMES),OSF1) ifeq ($(SPMD),TRUE) ESMF_ARCH := OSF1.default.64.mpi.default else ESMF_ARCH := OSF1.default.64.mpiuni.default endif CPPDEF += -DFORTRAN_SAME FC := f90 FFLAGS_DOTF90 := -DOSF1 $(CPPDEF) -free -fpe3 FFLAGS := -omp -automatic -fpe3 -g3 -C $(FFLAGS_DOTF90) CFLAGS := $(cpp_path) -DOSF1 -O2 -omp $(CPPDEF) LDFLAGS := -omp LD := $(FC) ARFLAGS := ru RANLIB := echo endif #------------------------------------------------------------------------ # End of platform specific #------------------------------------------------------------------------ # For linking with external ESMF ifneq ($(ESMF_BLD),$(null)) include $(ESMF_BLD)/lib/esmf.mk LDFLAGS += $(ESMF_F90LINKRPATHS) $(ESMF_F90LINKPATHS) $(ESMF_F90ESMFLINKLIBS) $(ESMF_CXXLINKLIBS) FFLAGS += $(ESMF_F90COMPILEPATHS) LD := $(ESMF_F90LINKER) endif RM := rm