From 4cd48d4d3206d76191b898803e80486b5347e414 Mon Sep 17 00:00:00 2001 From: James Edwards Date: Wed, 6 Dec 2023 07:34:19 -0700 Subject: [PATCH 1/2] allow an external install of the mpi-serial library --- CIME/Tools/Makefile | 14 ++++++++++---- CIME/XML/machines.py | 11 +++++++++-- CIME/build_scripts/buildlib.mpi-serial | 5 +++++ CIME/non_py/src/timing/Makefile | 6 +++++- 4 files changed, 29 insertions(+), 7 deletions(-) diff --git a/CIME/Tools/Makefile b/CIME/Tools/Makefile index c663b1edf26..5c5fbc1de9c 100644 --- a/CIME/Tools/Makefile +++ b/CIME/Tools/Makefile @@ -373,7 +373,13 @@ ifeq ($(strip $(MPILIB)), mpi-serial) MPIFC := $(SFC) MPICC := $(SCC) MPICXX := $(SCXX) - CONFIG_ARGS += MCT_PATH=$(SHAREDLIBROOT)/$(SHAREDPATH)/mct/mpi-serial + ifndef MPI_SERIAL_PATH + CONFIG_ARGS += MCT_PATH=$(SHAREDLIBROOT)/$(SHAREDPATH)/mct/mpi-serial + else + CONFIG_ARGS += MCT_PATH=$(MPI_SERIAL_PATH) + INC_MPI := $(MPI_SERIAL_PATH)/include + LIB_MPI := $(MPI_SERIAL_PATH)/lib + endif else CC := $(MPICC) FC := $(MPIFC) @@ -567,9 +573,9 @@ ifdef MPAS_LIBDIR # used to build the MPAS dycore if needed. libmpas: cam_abortutils.o physconst.o $(MAKE) -C $(MPAS_LIBDIR) CC="$(CC)" FC="$(FC)" PIODEF="$(PIODEF)" \ - FFLAGS='$(FREEFLAGS) $(FFLAGS)' GPUFLAGS='$(GPUFLAGS)' \ - CASEROOT='$(CASEROOT)' COMPILER='$(COMPILER)' MACH='$(MACH)' \ - FCINCLUDES='$(INCLDIR) $(INCS) -I$(ABS_INSTALL_SHAREDPATH)/include -I$(ABS_ESMF_PATH)/include' + FFLAGS='$(FREEFLAGS) $(FFLAGS)' GPUFLAGS='$(GPUFLAGS)' \ + CASEROOT='$(CASEROOT)' COMPILER='$(COMPILER)' MACH='$(MACH)' \ + FCINCLUDES='$(INCLDIR) $(INCS) -I$(ABS_INSTALL_SHAREDPATH)/include -I$(ABS_ESMF_PATH)/include' dyn_comp.o: libmpas dyn_grid.o: libmpas diff --git a/CIME/XML/machines.py b/CIME/XML/machines.py index 1b45cf5b580..1ef33bd5d35 100644 --- a/CIME/XML/machines.py +++ b/CIME/XML/machines.py @@ -12,7 +12,14 @@ class Machines(GenericXML): - def __init__(self, infile=None, files=None, machine=None, extra_machines_dir=None): + def __init__( + self, + infile=None, + files=None, + machine=None, + extra_machines_dir=None, + read_only=True, + ): """ initialize an object if a filename is provided it will be used, @@ -46,7 +53,7 @@ def __init__(self, infile=None, files=None, machine=None, extra_machines_dir=Non else: expect(False, f"file not found {infile}") - GenericXML.__init__(self, infile, schema) + GenericXML.__init__(self, infile, schema, read_only=read_only) # Append the contents of $HOME/.cime/config_machines.xml if it exists. # diff --git a/CIME/build_scripts/buildlib.mpi-serial b/CIME/build_scripts/buildlib.mpi-serial index 83ad88367fd..7aaad973d80 100755 --- a/CIME/build_scripts/buildlib.mpi-serial +++ b/CIME/build_scripts/buildlib.mpi-serial @@ -50,6 +50,11 @@ def buildlib(bldroot, installpath, case): ############################################################################### caseroot = case.get_value("CASEROOT") srcroot = case.get_value("SRCROOT") + # check to see if MPI_SERIAL is installed + with open(os.path.join(caseroot, "Macros.make"), "r") as f: + for line in f: + if "MPI_SERIAL_PATH" in line: + return customize_path = os.path.join(srcroot, "cime_config", "customize") diff --git a/CIME/non_py/src/timing/Makefile b/CIME/non_py/src/timing/Makefile index 89f3b4a7bed..7b0505fbffa 100644 --- a/CIME/non_py/src/timing/Makefile +++ b/CIME/non_py/src/timing/Makefile @@ -52,7 +52,11 @@ ifeq ($(strip $(MPILIB)), mpi-serial) FC := $(SFC) MPIFC := $(SFC) MPICC := $(SCC) - INCLDIR += -I$(GPTL_LIBDIR)/../mct/mpi-serial + ifdef MPI_SERIAL_PATH + INCLDIR += -I$(MPI_SERIAL_PATH)/include + else + INCLDIR += -I$(GPTL_LIBDIR)/../mct/mpi-serial + endif else CC := $(MPICC) FC := $(MPIFC) From de9a478cfd64dc352bcfa4a0b43be04fd0e43573 Mon Sep 17 00:00:00 2001 From: James Edwards Date: Thu, 7 Dec 2023 08:49:42 -0700 Subject: [PATCH 2/2] more changes for mpi-serial --- CIME/Tools/Makefile | 25 ++++++++++++++++++------- 1 file changed, 18 insertions(+), 7 deletions(-) diff --git a/CIME/Tools/Makefile b/CIME/Tools/Makefile index 5c5fbc1de9c..b11e0135589 100644 --- a/CIME/Tools/Makefile +++ b/CIME/Tools/Makefile @@ -601,10 +601,12 @@ ifdef LAPACK_LIBDIR SLIBS += -L$(LAPACK_LIBDIR) -llapack -lblas endif ifdef LIB_MPI - ifndef MPI_LIB_NAME - SLIBS += -L$(LIB_MPI) -lmpi - else - SLIBS += -L$(LIB_MPI) -l$(MPI_LIB_NAME) + ifndef MPI_SERIAL_PATH + ifndef MPI_LIB_NAME + SLIBS += -L$(LIB_MPI) -lmpi + else + SLIBS += -L$(LIB_MPI) -l$(MPI_LIB_NAME) + endif endif endif @@ -925,12 +927,21 @@ GENF90 ?= $(CIMEROOT)/CIME/non_py/externals/genf90/genf90.pl .SUFFIXES: .F90 .F .f90 .f .c .cpp .o .in ifeq ($(MPILIB),mpi-serial) - MPISERIAL = $(INSTALL_SHAREDPATH)/lib/libmpi-serial.a - MLIBS += -L$(INSTALL_SHAREDPATH)/lib -lmpi-serial - CMAKE_OPTS += -DMPI_C_INCLUDE_PATH=$(INSTALL_SHAREDPATH)/include \ + ifdef MPI_SERIAL_PATH + MPISERIAL = $(MPI_SERIAL_PATH)/lib/libmpi-serial.a + MLIBS += -L$(MPI_SERIAL_PATH)/lib -lmpi-serial + CMAKE_OPTS += -DMPI_C_INCLUDE_PATH=$(MPI_SERIAL_PATH)/include \ + -DMPI_Fortran_INCLUDE_PATH=$(MPI_SERIAL_PATH)/include \ + -DMPI_C_LIBRARIES=$(MPI_SERIAL_PATH)/lib/libmpi-serial.a \ + -DMPI_Fortran_LIBRARIES=$(MPI_SERIAL_PATH)/lib/libmpi-serial.a + else + MPISERIAL = $(INSTALL_SHAREDPATH)/lib/libmpi-serial.a + MLIBS += -L$(INSTALL_SHAREDPATH)/lib -lmpi-serial + CMAKE_OPTS += -DMPI_C_INCLUDE_PATH=$(INSTALL_SHAREDPATH)/include \ -DMPI_Fortran_INCLUDE_PATH=$(INSTALL_SHAREDPATH)/include \ -DMPI_C_LIBRARIES=$(INSTALL_SHAREDPATH)/lib/libmpi-serial.a \ -DMPI_Fortran_LIBRARIES=$(INSTALL_SHAREDPATH)/lib/libmpi-serial.a + endif endif $(MCTLIBS) : $(MPISERIAL)