# $Id: build_rules.mk,v 1.33 2011/03/16 18:36:48 theurich Exp $ # # Linux.lahey.default # ############################################################ # Default compiler setting. # ESMF_F90DEFAULT = lf95 ESMF_F90LINKERDEFAULT = g++ 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_F90LINKERDEFAULT = mpiCC ESMF_CXXDEFAULT = mpiCC ESMF_MPIRUNDEFAULT = mpirun $(ESMF_MPILAUNCHOPTIONS) else ifeq ($(ESMF_COMM),mpich2) # Mpich2 --------------------------------------------------- ESMF_F90DEFAULT = mpif90 ESMF_F90LINKERDEFAULT = mpicxx ESMF_CXXDEFAULT = mpicxx ESMF_MPIRUNDEFAULT = mpirun $(ESMF_MPILAUNCHOPTIONS) ESMF_MPIMPMDRUNDEFAULT = mpiexec $(ESMF_MPILAUNCHOPTIONS) else ifeq ($(ESMF_COMM),mvapich2) # Mvapich2 --------------------------------------------------- ESMF_F90DEFAULT = mpif90 ESMF_F90LINKERDEFAULT = mpicxx ESMF_CXXDEFAULT = mpicxx ESMF_MPIRUNDEFAULT = mpirun $(ESMF_MPILAUNCHOPTIONS) ESMF_MPIMPMDRUNDEFAULT = mpiexec $(ESMF_MPILAUNCHOPTIONS) else ifeq ($(ESMF_COMM),lam) # LAM (assumed to be built with lf95) ---------------------- ESMF_CXXCOMPILECPPFLAGS+= -DESMF_NO_SIGUSR2 ESMF_F90DEFAULT = mpif77 ESMF_F90LINKERDEFAULT = mpic++ 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_F90LINKERDEFAULT = mpicxx 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} --version ESMF_CXXCOMPILER_VERSION = ${ESMF_CXXCOMPILER} --version ############################################################ # Conditionally add pthread compiler and linker flags # ifeq ($(ESMF_PTHREADS),ON) ESMF_CXXCOMPILEOPTS += -pthread ESMF_CXXLINKOPTS += -pthread ESMF_F90LINKOPTS += -pthread endif ############################################################ # OpenMP compiler and linker flags # ESMF_OPENMP_F90COMPILEOPTS += --openmp ESMF_OPENMP_CXXCOMPILEOPTS += -fopenmp ESMF_OPENMP_F90LINKOPTS += -fopenmp ESMF_OPENMP_CXXLINKOPTS += -fopenmp ############################################################ # Need this until the file convention is fixed (then remove these two lines) # ESMF_F90COMPILEFREENOCPP = --nfix ESMF_F90COMPILEFIXCPP = --fix -Cpp ############################################################ # Set rpath syntax # ESMF_F90RPATHPREFIX = -Wl,-rpath, ESMF_CXXRPATHPREFIX = -Wl,-rpath, ############################################################ # Determine where lf95's libraries are located # ESMF_CXXLINKPATHS += $(addprefix -L,$(shell $(ESMF_DIR)/scripts/libpath.lf95 "$(ESMF_F90COMPILER) $(ESMF_F90COMPILEOPTS)")) ESMF_RPATHPREFIXFIXED := $(ESMF_CXXRPATHPREFIX) ESMF_CXXLINKRPATHS += $(addprefix $(ESMF_RPATHPREFIXFIXED), $(shell $(ESMF_DIR)/scripts/libpath.lf95 "$(ESMF_F90COMPILER) $(ESMF_F90COMPILEOPTS)")) ############################################################ # Determine where lf95's libraries are located as to find it during runtime # ESMF_F90LINKPATHS += $(addprefix -L,$(shell $(ESMF_DIR)/scripts/libpath.lf95 "$(ESMF_F90COMPILER) $(ESMF_F90COMPILEOPTS)")) ESMF_RPATHPREFIXFIXED := $(ESMF_F90RPATHPREFIX) ESMF_F90LINKRPATHS += $(addprefix $(ESMF_RPATHPREFIXFIXED), $(shell $(ESMF_DIR)/scripts/libpath.lf95 "$(ESMF_F90COMPILER) $(ESMF_F90COMPILEOPTS)")) ############################################################ # Link against libesmf.a using the C++ linker front-end # ESMF_CXXLINKLIBS += -lrt $(shell $(ESMF_DIR)/scripts/libs.lf95 "$(ESMF_F90COMPILER) $(ESMF_F90COMPILEOPTS)") -ldl $(ESMF_DIR)/scripts/MAIN__.C ############################################################ # Link against libesmf.a using the F90 linker front-end # ESMF_F90LINKLIBS += -lrt $(shell $(ESMF_DIR)/scripts/libs.lf95 "$(ESMF_F90COMPILER) $(ESMF_F90COMPILEOPTS)") $(shell $(ESMF_DIR)/scripts/f90rtobjects.lf95 "$(ESMF_F90COMPILER) $(ESMF_F90COMPILEOPTS)") -ldl ############################################################ # Shared library options # ESMF_SL_LIBOPTS += -shared ############################################################ # Shared object options # ESMF_SO_F90COMPILEOPTS = ESMF_SO_F90LINKOPTS = -shared ESMF_SO_F90LINKOPTSEXE = -Wl,-export-dynamic ESMF_SO_CXXCOMPILEOPTS = -fPIC ESMF_SO_CXXLINKOPTS = -shared ESMF_SO_CXXLINKOPTSEXE = -Wl,-export-dynamic