# $Id: build_rules.mk,v 1.12 2011/03/16 18:36:34 theurich Exp $ # # Darwin.intelgcc.default # ############################################################ # Default compiler setting. # ESMF_F90DEFAULT = ifort 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_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),intelmpi) # IntelMPI ------------------------------------------------- ESMF_F90DEFAULT = mpiifort ESMF_CXXDEFAULT = mpicxx ESMF_MPIRUNDEFAULT = mpirun $(ESMF_MPILAUNCHOPTIONS) ESMF_MPIMPMDRUNDEFAULT = mpiexec $(ESMF_MPILAUNCHOPTIONS) else ifeq ($(ESMF_COMM),lam) # LAM (assumed to be built with ifort) --------------------- 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 endif ############################################################ # Print compiler version string # ESMF_F90COMPILER_VERSION = ${ESMF_F90COMPILER} -V -v ESMF_CXXCOMPILER_VERSION = ${ESMF_CXXCOMPILER} -v --version ############################################################ # Intel runtime library on Darwin does not currently seem thread-safe # ESMF_PTHREADS := OFF ############################################################ # Construct the ABISTRING # ifeq ($(ESMF_MACHINE),ia64) ifeq ($(ESMF_ABI),64) ESMF_ABISTRING := $(ESMF_MACHINE)_64 else $(error Invalid ESMF_MACHINE / ESMF_ABI combination: $(ESMF_MACHINE) / $(ESMF_ABI)) endif endif ifeq ($(ESMF_MACHINE),x86_64) ifeq ($(ESMF_ABI),32) ESMF_ABISTRING := $(ESMF_MACHINE)_32 endif ifeq ($(ESMF_ABI),64) ESMF_ABISTRING := x86_64_small endif endif ############################################################ # Set memory model compiler flags according to ABISTRING # ifeq ($(ESMF_ABISTRING),x86_64_32) ESMF_CXXCOMPILEOPTS += -m32 ESMF_CXXLINKOPTS += -m32 ESMF_F90COMPILEOPTS += -m32 ESMF_F90LINKOPTS += -m32 endif ifeq ($(ESMF_ABISTRING),x86_64_small) ESMF_CXXCOMPILEOPTS += -m64 -mcmodel=small ESMF_CXXLINKOPTS += -m64 -mcmodel=small ESMF_F90COMPILEOPTS += -m64 -mcmodel=small ESMF_F90LINKOPTS += -m64 -mcmodel=small endif ifeq ($(ESMF_ABISTRING),x86_64_medium) ESMF_CXXCOMPILEOPTS += -m64 -mcmodel=medium ESMF_CXXLINKOPTS += -m64 -mcmodel=medium ESMF_F90COMPILEOPTS += -m64 -mcmodel=medium ESMF_F90LINKOPTS += -m64 -mcmodel=medium endif ifeq ($(ESMF_ABISTRING),ia64_64) ESMF_CXXCOMPILEOPTS += -size_lp64 ESMF_CXXLINKOPTS += -size_lp64 ESMF_F90COMPILEOPTS += -size_lp64 ESMF_F90LINKOPTS += -size_lp64 endif ############################################################ # Conditionally add pthread compiler and linker flags # ifeq ($(ESMF_PTHREADS),ON) ESMF_F90COMPILEOPTS += -threads ESMF_CXXCOMPILEOPTS += -pthread ESMF_F90LINKOPTS += -threads ESMF_CXXLINKOPTS += -pthread endif ############################################################ # OpenMP compiler and linker flags # ESMF_OPENMP_F90COMPILEOPTS += -openmp ESMF_OPENMP_CXXCOMPILEOPTS += -fopenmp ESMF_OPENMP_F90LINKOPTS += -openmp ESMF_OPENMP_CXXLINKOPTS += -fopenmp ############################################################ # Need this until the file convention is fixed (then remove these two lines) # ESMF_F90COMPILEFREENOCPP = -fpp0 -FR ESMF_F90COMPILEFIXCPP = -fpp ############################################################ # Determine where ifort's libraries are located # ESMF_CXXLINKPATHS += -L$(dir $(shell $(ESMF_DIR)/scripts/libpath.ifort $(ESMF_F90COMPILER))) ############################################################ # Link against GCC's stdc++ library (because g++ is used) # ESMF_LIBSTDCXX := $(shell $(ESMF_CXXCOMPILER) -print-file-name=libstdc++.dylib) ifeq ($(ESMF_LIBSTDCXX),libstdc++.dylib) ESMF_LIBSTDCXX := $(shell $(ESMF_CXXCOMPILER) -print-file-name=libstdc++.a) endif ESMF_F90LINKPATHS += -L$(dir $(ESMF_LIBSTDCXX)) ESMF_F90LINKLIBS += -lstdc++ -lgcc_eh ############################################################ # Blank out variables to prevent rpath encoding # ESMF_F90LINKRPATHS = ESMF_CXXLINKRPATHS = ############################################################ # Link against libesmf.a using the F90 linker front-end # ESMF_F90LINKLIBS += -lm ############################################################ # Link against libesmf.a using the C++ linker front-end # ESMF_CXXLINKLIBS += $(shell $(ESMF_DIR)/scripts/libs.ifort "$(ESMF_F90COMPILER) $(ESMF_F90COMPILEOPTS)" | sed 's/\-lcrt1\.o //g') ############################################################ # Blank out shared library options # ESMF_SL_LIBS_TO_MAKE =