| # 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 | |
| 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 | |
| # 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) |