Manifest
The Orbit.toml
file for each ip is called its manifest. It is written in the TOML format. It is maintained by the user and contains metadata that is needed to build the ip. The manifest is read by Orbit to help automatically generate the ip's lock file, Orbit.lock
.
Note: The manifest's file name is "Orbit.toml", with respect to case-sensitivity.
Every manifest file consists of the following sections:
- [ip] - Defines an ip.
- name - The name of the ip.
- uuid - The universally unique identifier of the ip.
- description - A short description of the ip.
- version - The version of the ip.
- authors - The authors of the ip.
- library - The HDL library for the design units within the ip.
- keywords - A list of simple words categorizing the ip.
- source - The URL for remotely retrieving the ip.
- channels - The channels to update when publishing the ip.
- public - Files to be visible to other ip.
- include - Files to include during file discovery.
- exclude - Files to exclude during file discovery.
- readme - The path to the README file.
- [metadata] - An unchecked section for custom fields.
- [dependencies] - Ip dependencies.
- [dev-dependencies] - Ip dependencies only used for ongoing development.
The [ip]
section
The first section in a Orbit.toml
file is [ip]
.
[ip]
name = "my-ip" # the name of the package
uuid = "ecj831jmc018hhhgl1d4rzgw8" # the universally unique identifier
version = "0.1.0" # the current version
The only fields required by Orbit are name, uuid, and version.
The name
field
[ip]
name = "my-ip"
# ...
The uuid
field
A random string consisting of 25 characters in base36 encoding (a-z0-9).
[ip]
# ...
uuid = "ecj831jmc018hhhgl1d4rzgw8"
The version
field
[ip]
# ...
version = "0.1.0"
The authors
field
[ip]
# ...
authors = ["Duncan Idaho", "Gurney Halleck"]
The library
field
[ip]
# ...
library = "work"
The description
field
[ip]
# ...
description = "A short description of the ip"
The keywords
field
[ip]
# ...
keywords = ["cpu", "risc"]
The source
field
[ip]
# ...
source = "https://github.com/chaseruskin/orbit/archive/refs/tags/1.0.0.zip"
[ip]
# ...
source = { url = "https://github.com/chaseruskin/orbit.git", protocol = "git", tag = "1.0.0" }
The channels
field
[ip]
# ...
channels = ["hyperspace-labs"]
The public
field
[ip]
# ...
public = ["/rtl"]
The public
field can be used to explicitly specify which files are visible to other ip when being when being referenced as a dependency. The list contains glob-style patterns that conform to .gitignore file semantics, and are always compared relative that ip's root directory.
If no public
field is present, then all files are implicitly specified as visible (public) to other ip when being referenced as a dependency.
The include
field
The include
field can be used to explicitly specify which files to include during source code analysis.
[ip]
# ...
include = ["/rtl"]
Using include
and exclude
is mutually exclusive; setting include
will override any value of exclude
. If include
and exclude
are omitted, then all files from the root of the ip will be included.
The exclude
field
The exclude
field can be used to explicitly specify which files to exclude during source code analysis.
[ip]
# ...
exclude = ["/deprec"]
Using include
and exclude
is mutually exclusive; setting include
will override any value of exclude
. If include
and exclude
are omitted, then all files from the root of the ip will be included.
Files that are always excluded are those found in directories that contain a "CACHEDIR.TAG" file. For example, every target output directory Orbit creates is excluded because they contain this file.
The readme
field
[ip]
# ...
readme = "README.md"
The [metadata]
section
Any type of TOML entry is allowed in this section, as Orbit ignores this section.
[ip.metadata]
custom-field-1 = true
custom-field-2 = "hello world"
# ...
The [dependencies]
section
The [dependencies]
section is a table of direct dependencies required for the current ip.
[dependencies]
gates = "1.0.0"
uart = "2.3.1"
If the ip has no dependencies, the section can be omitted from the manifest. The ips listed in this section will always be included in the build graph.
The [dev-dependencies]
section
The [dev-dependencies]
section is a table of direct dependencies required for the current ip.
[dev-dependencies]
testkit = "1.3.7"
logic-analyzer = "4.8.0"
If the ip has no development dependencies, the section can be omitted from the manifest. The ips listed in this section will not be included in the build graph for when this ip is used as a dependency itself.