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