# $Id: build_rules.mk,v 1.16 2011/03/16 18:36:25 theurich Exp $ # # Cygwin.g95.default # ############################################################ # Default compiler setting. # ESMF_F90DEFAULT = g95 ESMF_CXXDEFAULT = g++ ############################################################ # Default MPI setting. # ifeq ($(ESMF_COMM),default) export ESMF_COMM := mpiuni endif ############################################################ # MPI dependent settings. # ifeq ($(ESMF_COMM),mpiuni) # MPI stub library ----------------------------------------- ESMF_F90COMPILECPPFLAGS+= -DESMF_MPIUNI ESMF_CXXCOMPILECPPFLAGS+= -DESMF_MPIUNI ESMF_CXXCOMPILEPATHS += -I$(ESMF_DIR)/src/Infrastructure/stubs/mpiuni ESMF_MPIRUNDEFAULT = $(ESMF_DIR)/src/Infrastructure/stubs/mpiuni/mpirun else ifeq ($(ESMF_COMM),mpich) # Mpich ---------------------------------------------------- ESMF_F90COMPILECPPFLAGS+= -DESMF_MPICH ESMF_CXXCOMPILECPPFLAGS+= -DESMF_MPICH ESMF_F90DEFAULT = mpif90 ESMF_F90LINKLIBS += -lpmpich -lmpich ESMF_CXXDEFAULT = mpiCC ESMF_MPIRUNDEFAULT = mpirun $(ESMF_MPILAUNCHOPTIONS) else ifeq ($(ESMF_COMM),mpich2) # Mpich2 --------------------------------------------------- ESMF_F90DEFAULT = mpif90 ESMF_CXXDEFAULT = mpicxx ESMF_MPIRUNDEFAULT = mpirun $(ESMF_MPILAUNCHOPTIONS) ESMF_MPIMPMDRUNDEFAULT = mpiexec $(ESMF_MPILAUNCHOPTIONS) else ifeq ($(ESMF_COMM),lam) # LAM (assumed to be built with g95) ----------------------- ESMF_CXXCOMPILECPPFLAGS+= -DESMF_NO_SIGUSR2 ESMF_F90DEFAULT = mpif77 ESMF_CXXDEFAULT = mpic++ ESMF_MPIRUNDEFAULT = mpirun $(ESMF_MPILAUNCHOPTIONS) ESMF_MPIMPMDRUNDEFAULT = mpiexec $(ESMF_MPILAUNCHOPTIONS) else ifeq ($(ESMF_COMM),openmpi) # OpenMPI -------------------------------------------------- ESMF_CXXCOMPILECPPFLAGS+= -DESMF_NO_SIGUSR2 ESMF_F90DEFAULT = mpif90 ESMF_F90LINKLIBS += -lmpi_cxx ESMF_CXXDEFAULT = mpicxx ESMF_CXXLINKLIBS += -lmpi_f77 ESMF_MPIRUNDEFAULT = mpirun $(ESMF_MPILAUNCHOPTIONS) ESMF_MPIMPMDRUNDEFAULT = mpiexec $(ESMF_MPILAUNCHOPTIONS) else ifeq ($(ESMF_COMM),user) # User specified flags ------------------------------------- else $(error Invalid ESMF_COMM setting: $(ESMF_COMM)) endif endif endif endif endif endif ############################################################ # Print compiler version string # ESMF_F90COMPILER_VERSION = ${ESMF_F90COMPILER} -v --version ESMF_CXXCOMPILER_VERSION = ${ESMF_CXXCOMPILER} -v --version ############################################################ # g95 runtime library is not currently thread-safe # ESMF_PTHREADS := OFF ############################################################ # g95 currently does not support OpenMP # ESMF_OPENMP := OFF ############################################################ # Cygwin 1.5.24 does not yet support POSIX IPC (memory mapped files) # ESMF_CXXCOMPILECPPFLAGS += -DESMF_NO_POSIXIPC ############################################################ # Fortran symbol convention # ifeq ($(ESMF_FORTRANSYMBOLS),default) ESMF_F90COMPILEOPTS += ESMF_F90LINKOPTS += ESMF_CXXCOMPILEOPTS += -DESMF_LOWERCASE_DOUBLEUNDERSCORE else ifeq ($(ESMF_FORTRANSYMBOLS),lowercase_singleunderscore) ESMF_F90COMPILEOPTS += -fno-second-underscore ESMF_F90LINKOPTS += -fno-second-underscore ESMF_CXXCOMPILEOPTS += -DESMF_LOWERCASE_SINGLEUNDERSCORE else ifeq ($(ESMF_FORTRANSYMBOLS),lowercase_doubleunderscore) ESMF_F90COMPILEOPTS += ESMF_F90LINKOPTS += ESMF_CXXCOMPILEOPTS += -DESMF_LOWERCASE_DOUBLEUNDERSCORE else $(error "ESMF_FORTRANSYMBOLS = $(ESMF_FORTRANSYMBOLS)" not supported by ESMF and/or this platform) endif endif endif ############################################################ # On IA64 set long and pointer types to 64-bit # ifeq ($(ESMF_ABI),64) ESMF_CXXCOMPILEOPTS += -march=k8 -m64 -mcmodel=medium ESMF_CXXLINKOPTS += -march=k8 -m64 -mcmodel=medium ESMF_F90COMPILEOPTS += -march=k8 -m64 -mcmodel=medium ESMF_F90LINKOPTS += -march=k8 -m64 -mcmodel=medium endif ############################################################ # Need this until the file convention is fixed (then remove these two lines) # ESMF_F90COMPILEFREENOCPP = -ffree-form ESMF_F90COMPILEFIXCPP = -cpp -ffixed-form ############################################################ # Set huge line length limit for free format files # ESMF_F90COMPILEOPTS += -ffree-line-length-huge ############################################################ # Set rpath syntax # ESMF_F90RPATHPREFIX = -Wl,-rpath, ESMF_CXXRPATHPREFIX = -Wl,-rpath, ############################################################ # Determine where gcc's libraries are located # ESMF_CXXLIBFULLPATH = \ $(shell dirname `$(ESMF_CXXCOMPILER) -print-file-name=libstdc++.a`) ESMF_F90LINKPATHS += -L$(ESMF_CXXLIBFULLPATH) ESMF_F90LINKRPATHS += $(ESMF_F90RPATHPREFIX)$(ESMF_F90LINKPATHS) ############################################################ # Determine where g95's libraries are located # ESMF_F90LIBFULLPATH = \ $(shell dirname `$(ESMF_F90COMPILER) -print-file-name=libf95.a`) ESMF_CXXLINKPATHS += -L$(ESMF_F90LIBFULLPATH) ESMF_CXXLINKRPATHS += $(ESMF_CXXRPATHPREFIX)$(ESMF_CXXLINKPATHS) ############################################################ # Link against libesmf.a using the F90 linker front-end # ESMF_F90LINKLIBS += -lstdc++ -lgcc_s ESMF_F90LINKOPTS += -Wl,--enable-auto-import ############################################################ # Link against libesmf.a using the C++ linker front-end # ESMF_CXXLINKLIBS += -lf95 ESMF_CXXLINKOPTS += -Wl,--enable-auto-import ############################################################ # Shared library options # ESMF_SL_SUFFIX = dll.a ESMF_SL_LIBOPTS += -shared ESMF_SL_LIBLIBS += -L$(ESMF_F90LIBFULLPATH) -lf95