libyogrt: add lsf scheduler support, create yogrt.conf file (#19960)
Tell the libyogrt installer to create a yogrt.conf file, specifying whatever scheduler was specified in the scheduler=XXX parameter.
This commit is contained in:
parent
86e9d93859
commit
91f65b9772
1 changed files with 35 additions and 4 deletions
|
@ -4,6 +4,7 @@
|
||||||
# SPDX-License-Identifier: (Apache-2.0 OR MIT)
|
# SPDX-License-Identifier: (Apache-2.0 OR MIT)
|
||||||
|
|
||||||
from spack import *
|
from spack import *
|
||||||
|
import os
|
||||||
|
|
||||||
|
|
||||||
class Libyogrt(AutotoolsPackage):
|
class Libyogrt(AutotoolsPackage):
|
||||||
|
@ -33,12 +34,15 @@ class Libyogrt(AutotoolsPackage):
|
||||||
|
|
||||||
variant('scheduler', default='system',
|
variant('scheduler', default='system',
|
||||||
description="Select scheduler integration",
|
description="Select scheduler integration",
|
||||||
values=['system', 'slurm'], multi=False)
|
values=['system', 'slurm', 'lsf'], multi=False)
|
||||||
|
depends_on('slurm', when='scheduler=slurm')
|
||||||
|
depends_on('lsf', when='scheduler=lsf')
|
||||||
|
|
||||||
|
conflicts('scheduler=lsf', when='@:1.22')
|
||||||
|
|
||||||
variant('static', default='False',
|
variant('static', default='False',
|
||||||
description="build static library")
|
description="build static library")
|
||||||
|
|
||||||
depends_on('slurm', when='scheduler=slurm')
|
|
||||||
|
|
||||||
def url_for_version(self, version):
|
def url_for_version(self, version):
|
||||||
if version < Version(1.21):
|
if version < Version(1.21):
|
||||||
return "https://github.com/LLNL/libyogrt/archive/%s.tar.gz" % version
|
return "https://github.com/LLNL/libyogrt/archive/%s.tar.gz" % version
|
||||||
|
@ -49,10 +53,37 @@ def configure_args(self):
|
||||||
args = []
|
args = []
|
||||||
|
|
||||||
sched = self.spec.variants['scheduler'].value
|
sched = self.spec.variants['scheduler'].value
|
||||||
if sched != "system":
|
if sched == "lsf":
|
||||||
|
# The LSF library depends on a couple of other libraries,
|
||||||
|
# and running the build inside of spack does not find
|
||||||
|
# them, and the user has to add them when they want
|
||||||
|
# to use -lyogrt. If we explicitly tell it what libraries
|
||||||
|
# to use, the user does not need to specify them
|
||||||
|
args.append('--with-lsf')
|
||||||
|
args.append('LIBS=-llsf -lrt -lnsl')
|
||||||
|
elif sched != "system":
|
||||||
args.append('--with-%s=%s' % (sched, self.spec[sched].prefix))
|
args.append('--with-%s=%s' % (sched, self.spec[sched].prefix))
|
||||||
|
|
||||||
if '+static' in self.spec:
|
if '+static' in self.spec:
|
||||||
args.append('--enable-static=yes')
|
args.append('--enable-static=yes')
|
||||||
|
|
||||||
return args
|
return args
|
||||||
|
|
||||||
|
@run_after('install')
|
||||||
|
def create_yogrt_conf(self):
|
||||||
|
etcpath = os.path.join(prefix, "etc")
|
||||||
|
|
||||||
|
# create subdirectory to hold yogrt.conf file
|
||||||
|
if not os.path.isdir(etcpath):
|
||||||
|
mode = 0o755
|
||||||
|
os.mkdir(etcpath, mode)
|
||||||
|
|
||||||
|
# if no scheduler is specified, create yogrt conf file
|
||||||
|
# with backend=none
|
||||||
|
sched = self.spec.variants['scheduler'].value
|
||||||
|
if sched == "system":
|
||||||
|
sched = "none"
|
||||||
|
|
||||||
|
# create conf file to inform libyogrt about job scheduler
|
||||||
|
with open(os.path.join(etcpath, "yogrt.conf"), "w+") as f:
|
||||||
|
f.write("backend=%s\n" % sched)
|
||||||
|
|
Loading…
Reference in a new issue