119 lines
5.0 KiB
Python
Executable File
119 lines
5.0 KiB
Python
Executable File
#!/usr/bin/env python
|
|
|
|
"""
|
|
build clm library
|
|
"""
|
|
import sys, os, shutil, imp
|
|
|
|
_CIMEROOT = os.environ.get("CIMEROOT")
|
|
if _CIMEROOT is None:
|
|
raise SystemExit("ERROR: must set CIMEROOT environment variable")
|
|
|
|
_LIBDIR = os.path.join(_CIMEROOT, "scripts", "Tools")
|
|
sys.path.append(_LIBDIR)
|
|
|
|
from standard_script_setup import *
|
|
from CIME.buildlib import parse_input
|
|
from CIME.case import Case
|
|
from CIME.utils import run_cmd, expect
|
|
|
|
logger = logging.getLogger(__name__)
|
|
|
|
###############################################################################
|
|
def _main_func():
|
|
###############################################################################
|
|
|
|
caseroot, libroot, bldroot = parse_input(sys.argv)
|
|
|
|
with Case(caseroot) as case:
|
|
|
|
casetools = case.get_value("CASETOOLS")
|
|
lnd_root = case.get_value("COMP_ROOT_DIR_LND")
|
|
gmake_j = case.get_value("GMAKE_J")
|
|
gmake = case.get_value("GMAKE")
|
|
mach = case.get_value("MACH")
|
|
|
|
clm_config_opts = case.get_value("CLM_CONFIG_OPTS")
|
|
if "clm4_5" in clm_config_opts:
|
|
clm_phys = "clm4_5"
|
|
elif "clm5_0" in clm_config_opts:
|
|
clm_phys = "clm5_0"
|
|
elif "clm4_0" in clm_config_opts:
|
|
clm_phys = "clm4_0"
|
|
else:
|
|
expect(False, "CLM_CONFIG_OPTS must support either clm4_5, clm5_0, or clm4_0 physics")
|
|
|
|
if clm_phys == "clm4_0":
|
|
#-------------------------------------------------------
|
|
# create Filepath file and clm_cppdefs for clm4_0
|
|
#-------------------------------------------------------
|
|
# the call to configure here creates BOTH the Filepath file and the clm_cppdefs
|
|
cmd = os.path.join(os.path.join(lnd_root,"cime_config","buildcpp"))
|
|
logger.info(" ...calling clm buildcpp to set build time options")
|
|
try:
|
|
mod = imp.load_source("buildcpp", cmd)
|
|
clm_cppdefs = mod.buildcpp(case)
|
|
except:
|
|
raise
|
|
|
|
# the above call to buildcpp generates the Filepath file
|
|
if not os.path.isfile(os.path.join(bldroot, "Filepath")):
|
|
filesrc = os.path.join(caseroot, "Buildconf", "clmconf", "Filepath")
|
|
filedst = os.path.join(bldroot, "Filepath")
|
|
shutil.copy(filesrc,filedst)
|
|
|
|
else:
|
|
#-------------------------------------------------------
|
|
# create Filepath file for clm4_5 or clm5_0
|
|
#-------------------------------------------------------
|
|
filepath_file = os.path.join(bldroot,"Filepath")
|
|
if not os.path.isfile(filepath_file):
|
|
caseroot = case.get_value("CASEROOT")
|
|
paths = [os.path.join(caseroot,"SourceMods","src.clm"),
|
|
os.path.join(lnd_root,"src","main"),
|
|
os.path.join(lnd_root,"src","biogeophys"),
|
|
os.path.join(lnd_root,"src","biogeochem"),
|
|
os.path.join(lnd_root,"src","soilbiogeochem"),
|
|
os.path.join(lnd_root,"src","dyn_subgrid"),
|
|
os.path.join(lnd_root,"src","init_interp"),
|
|
os.path.join(lnd_root,"src","fates"),
|
|
os.path.join(lnd_root,"src","fates","main"),
|
|
os.path.join(lnd_root,"src","fates","biogeophys"),
|
|
os.path.join(lnd_root,"src","fates","biogeochem"),
|
|
os.path.join(lnd_root,"src","fates","fire"),
|
|
os.path.join(lnd_root,"src","fates","parteh"),
|
|
os.path.join(lnd_root,"src","utils"),
|
|
os.path.join(lnd_root,"src","cpl")]
|
|
with open(filepath_file, "w") as filepath:
|
|
filepath.write("\n".join(paths))
|
|
filepath.write("\n")
|
|
|
|
#-------------------------------------------------------
|
|
# create the library in libroot
|
|
#-------------------------------------------------------
|
|
|
|
clm_config_opts = case.get_value("CLM_CONFIG_OPTS")
|
|
if clm_phys == "clm4_0":
|
|
complib = os.path.join(libroot,"liblnd.a")
|
|
else:
|
|
complib = os.path.join(libroot,"libclm.a")
|
|
makefile = os.path.join(casetools, "Makefile")
|
|
macfile = os.path.join(caseroot, "Macros.%s" % mach)
|
|
|
|
if clm_phys == "clm4_0":
|
|
cmd = "%s complib -j %d MODEL=clm COMPLIB=%s -f %s MACFILE=%s USER_CPPDEFS='%s'" \
|
|
% (gmake, gmake_j, complib, makefile, macfile, clm_cppdefs )
|
|
else:
|
|
cmd = "%s complib -j %d MODEL=clm COMPLIB=%s -f %s MACFILE=%s " \
|
|
% (gmake, gmake_j, complib, makefile, macfile )
|
|
|
|
rc, out, err = run_cmd(cmd)
|
|
logger.info("%s: \n\n output:\n %s \n\n err:\n\n%s\n"%(cmd,out,err))
|
|
expect(rc == 0, "Command %s failed with rc=%s" % (cmd, rc))
|
|
|
|
###############################################################################
|
|
|
|
if __name__ == "__main__":
|
|
_main_func()
|
|
|