This module provides a way to integrate an external command into an f4pga flow. Its inputs and outputs are fully defined by the author of flow definition.


Parameters are everything when it comes to this module:

  • stage_name (string, optional): Name describing the stage

  • script (string, mandatory): Path to the script to be executed

  • interpreter (string, optional): Interpreter for the script

  • cwd (string, optional): Current Working Directory for the script

  • outputs (dict[string -> dict[string -> string]], mandatory): A dict with output descriptions (dicts). Keys name output dependencies.

    • mode (string, mandatory): “file” or “stdout”. Describes how the output is grabbed from the script.

    • file (string, required if mode is “file”): Name of the file generated by the script.

    • target (string, required): Default name of the file of the generated dependency. You can use all values available during map_io stage. Each input dependency also gets two extra values associated with it: :dependency_name[noext], which contains the path to the dependency the extension with anything after last “.” removed and :dependency_name[dir] which contains directory paths of the dependency. This is useful for deriving an output name from the input.

    • meta (string, optional): Description of the output dependency.

  • inputs (dict[string -> string | bool], mandatory): A dict with input descriptions. Key is can be a name of a named argument, a position of unnamed argument, when prefaced with “#” (eg. “#1”), or a name of an environmental variable, when prefaced with “$”. Positions are indexed from 1, as it’s a convention that 0th argument is the path of the executed program. Values are strings that can contain references to variables to be resolved after the project flow configuration is loaded (that means they can reference values and dependencies which are to be set by the user). All of modules inputs will be determined by the references used. Thus dependency and value definitions are implicit. If the value of the resolved string is empty and is associated with a named argument, the argument in question will be skipped entirely. This allows using optional dependencies. To use a named argument as a flag instead, set it to true.