Source code for tbot.builtin.toolchain

"""
Testcase to setup a toolchain environment
-----------------------------------------
"""
import typing
import tbot
from tbot import tc


[docs]@tbot.testcase def toolchain_get( tb: tbot.TBot, *, name: typing.Optional[str] = None, buildhost: typing.Optional[str] = None, ) -> tc.Toolchain: """ Get a toolchain and ensure it exists :param str name: Name of the toolchain, defaults to ``tb.config["board.toolchain"]`` :returns: The toolchain meta object to be passed to testcases that need a toolchain :rtype: Toolchain """ name = name or tb.config["board.toolchain"] buildhost = buildhost or tb.config["build.default"] if tb.config[f"build.{buildhost}.toolchains.{name}", None] is None: raise tc.UnknownToolchainException(repr(name)) tbot.log.debug(f"Toolchain '{name}' exists") return tc.Toolchain(name, buildhost, tb.config)
[docs]@tbot.testcase def toolchain_env( tb: tbot.TBot, *, toolchain: tc.Toolchain, and_then: typing.Union[str, typing.Callable], params: typing.Optional[typing.Dict[str, typing.Any]] = None, ) -> None: """ Setup a toolchain environment and call a testcase inside :param Toolchain toolchain: Which toolchain to use :param and_then: What testcase to call inside the env :type and_then: str or typing.Callable :param dict params: Parameters for the testcase """ if params is None: params = dict() # We don't need to check if the toolchain exists because it has to # (You can't create a Toolchain() object without it existing) tbot.log.debug(f"Setting up '{toolchain.name}' toolchain") tbot.log.doc( f"""Setup the `{toolchain.name}` toolchain by calling its env script: """ ) # Create an env shell with tb.machine(tbot.machine.MachineBuild(name=toolchain.host)) as tb: tb.shell.exec0(f"unset LD_LIBRARY_PATH") tb.shell.exec0(f"source {toolchain.env_setup_script}") tb.call(and_then, **params)