blob: 3829187c8b844344aebf0d3387e57e83b5b1862d [file] [log] [blame]
# Copyright lowRISC contributors.
# Licensed under the Apache License, Version 2.0, see LICENSE for details.
# SPDX-License-Identifier: Apache-2.0
import logging as log
import os
from Launcher import Launcher
from LocalLauncher import LocalLauncher
from LsfLauncher import LsfLauncher
from SgeLauncher import SgeLauncher
try:
from edacloudlauncher.EdaCloudLauncher import EdaCloudLauncher
EDACLOUD_LAUNCHER_EXISTS = True
except ImportError:
EDACLOUD_LAUNCHER_EXISTS = False
# The chosen launcher class.
_LAUNCHER_CLS = None
def set_launcher_type(is_local=False):
'''Sets the launcher type that will be used to launch the jobs.
The env variable `DVSIM_LAUNCHER` is used to identify what launcher system
to use. This variable is specific to the user's work site. It is meant to
be set externally before invoking DVSim. Valid values are [local, lsf,
edacloud]. If --local arg is supplied then the local launcher takes
precedence.
'''
launcher = os.environ.get("DVSIM_LAUNCHER", "local")
if is_local:
launcher = "local"
Launcher.variant = launcher
global _LAUNCHER_CLS
if launcher == "local":
_LAUNCHER_CLS = LocalLauncher
elif launcher == "lsf":
_LAUNCHER_CLS = LsfLauncher
elif launcher == "sge":
_LAUNCHER_CLS = SgeLauncher
# These custom launchers are site specific. They may not be committed to
# the open source repo.
elif launcher == "edacloud" and EDACLOUD_LAUNCHER_EXISTS:
_LAUNCHER_CLS = EdaCloudLauncher
else:
log.error("Launcher {} set using DVSIM_LAUNCHER env var does not "
"exist. Using local launcher instead.".format(launcher))
_LAUNCHER_CLS = LocalLauncher
def get_launcher_cls():
'''Returns the chosen launcher class.'''
assert _LAUNCHER_CLS is not None
return _LAUNCHER_CLS
def get_launcher(deploy):
'''Returns an instance of a launcher.
'deploy' is an instance of the deploy class to with the launcher is paired.
'''
assert _LAUNCHER_CLS is not None
return _LAUNCHER_CLS(deploy)