-
Notifications
You must be signed in to change notification settings - Fork 61
Bender Book #295
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Open
fischeti
wants to merge
47
commits into
master
Choose a base branch
from
book
base: master
Could not load branches
Branch not found: {{ refName }}
Loading
Could not load tags
Nothing to show
Loading
Are you sure you want to change the base?
Some commits from the old base branch may be removed from the timeline,
and old review comments may become outdated.
Open
Bender Book #295
Changes from all commits
Commits
Show all changes
47 commits
Select commit
Hold shift + click to select a range
e0eeb3e
Copy README contents to initial book
micprog 0dcf3ef
Update book
micprog c8de02a
Update book
micprog f11d651
book: Target documentation
fischeti 8aeaf6c
book: Targets after dependencies and sources
fischeti c9564ca
book: Manifest documentation
micprog 45e9599
book: Update targets
fischeti d3efe80
book: Write dependencies
fischeti 418a883
book: Write sources
fischeti 398973b
book: Some workflow items
micprog ef2cefd
book: Update Lockfile
fischeti 97d822d
book: Write local
fischeti 8be5eb4
book: Add comparison between three files
fischeti e830eb4
book: Add CI workflow
fischeti b4f5701
book: Update dependency workflow
fischeti 0bcdf1b
book: Add Source workflow
fischeti 078eb79
book: Add Scripts workflow
fischeti f68681f
book: Add package development section
fischeti aed5bbd
book: Add vendor workflow
fischeti c65d49e
book: Update init section
fischeti d5031ff
book: Update manifest section
fischeti 02b7b39
book: Update principles
fischeti 3309c66
book: Update concepts and workflows
fischeti 601736b
book: Update installation
fischeti 85a52e8
book: Update index
fischeti 726f035
book: Add getting started guide
fischeti 59df218
book: Remove unused files
fischeti c4c39aa
docs: Update README
fischeti 544a6f5
book: Remove unused files
fischeti cff38e7
book: Add configuration
fischeti 04dfd3e
ci: Deploy to Github pages, together with `init` script
fischeti 0c1fb7b
book: Remove `sources` worfklow
fischeti add85ba
book: Clean up SUMMARY.md
fischeti f51de7a
docs: only deploy on releases
fischeti 53bebe1
docs: Add PULP logo to README
fischeti ce6f949
book: implement PR feeback
fischeti 821f24a
gitinore: add missing newline
fischeti 07cc307
book: add CI worfklow to overview
fischeti 18001a8
book: link bender files to its section
fischeti 2052cfe
book: add env variable information to configuration section
fischeti 732987f
book: Extend to address review comments
micprog 53e41d0
ci(docs): fix mdbook installation
fischeti 2a79183
book: document Homebrew, Nix, and AUR install paths
micprog 7715e36
book: address further PR review comments
micprog e4ece9e
book: backfill content carried over from the old README
micprog ad96cac
book: rewrite principles page to track the original README
micprog 88bf786
book: comprehensive review pass
micprog File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,52 @@ | ||
| name: Deploy Documentation | ||
|
|
||
| on: | ||
| push: | ||
| branches: [master] | ||
| tags: | ||
| - 'v*.*.*' | ||
| workflow_dispatch: | ||
|
|
||
| permissions: | ||
| contents: read | ||
| pages: write | ||
| id-token: write | ||
|
|
||
| concurrency: | ||
| group: pages | ||
| cancel-in-progress: false | ||
|
|
||
| jobs: | ||
| build: | ||
| runs-on: ubuntu-latest | ||
| steps: | ||
| - uses: actions/checkout@v4 | ||
|
|
||
| - name: Setup mdBook | ||
| uses: peaceiris/actions-mdbook@v2 | ||
|
|
||
| - name: Build book | ||
| run: mdbook build book/ | ||
|
|
||
| - name: Copy init script | ||
| run: cp website/init book/book/init | ||
|
|
||
| - name: Setup Pages | ||
| uses: actions/configure-pages@v5 | ||
|
|
||
| - name: Upload artifact | ||
| uses: actions/upload-pages-artifact@v3 | ||
| with: | ||
| path: book/book/ | ||
|
|
||
| deploy: | ||
| environment: | ||
| name: github-pages | ||
| url: ${{ steps.deployment.outputs.page_url }} | ||
| runs-on: ubuntu-latest | ||
| needs: build | ||
| if: startsWith(github.ref, 'refs/tags/v') | ||
| steps: | ||
| - name: Deploy to GitHub Pages | ||
| id: deployment | ||
| uses: actions/deploy-pages@v4 | ||
Large diffs are not rendered by default.
Oops, something went wrong.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1 @@ | ||
| book |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,4 @@ | ||
| [book] | ||
| title = "bender" | ||
| authors = ["Michael Rogenmoser", "Tim Fischer", "Fabian Schuiki", "Andreas Kurth"] | ||
| language = "en" |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,24 @@ | ||
| # Summary | ||
|
|
||
| - [Overview](./index.md) | ||
| - [Installation](./installation.md) | ||
| - [Getting Started](./getting_started.md) | ||
| - [Concepts](./concepts.md) | ||
| - [Principles](./principles.md) | ||
| - [Manifest](./manifest.md) | ||
| - [Lockfile](./lockfile.md) | ||
| - [Local](./local.md) | ||
| - [Manifest vs. Lock vs. Local](./bender_files.md) | ||
| - [Dependencies](./dependencies.md) | ||
| - [Sources](./sources.md) | ||
| - [Targets](./targets.md) | ||
| - [Configuration](./configuration.md) | ||
| - [Workflows](./workflows.md) | ||
| - [Initialization](./workflow/init.md) | ||
| - [Dependencies](./workflow/dependencies.md) | ||
| - [Scripts](./workflow/scripts.md) | ||
| - [Package Development](./workflow/package_dev.md) | ||
| - [Vendor](./workflow/vendor.md) | ||
| - [Continuous Integration](./workflow/ci.md) | ||
|
|
||
| - [Commands](./commands.md) |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,31 @@ | ||
| # Bender Files | ||
|
|
||
| Bender relies on three core files to manage your hardware project. While they all use the YAML format, they serve very different roles in the development lifecycle. | ||
|
|
||
| ## Comparison Overview | ||
|
|
||
| | Feature | [`Bender.yml`](./manifest.md) | [`Bender.lock`](./lockfile.md) | [`Bender.local`](./local.md) | | ||
| | :--- | :--- | :--- | :--- | | ||
| | **Role** | Manifest (Intent) | Lockfile (Reality) | Local Overrides | | ||
| | **Main Content** | Dependencies & Version Ranges | Exact Git Revisions | Local Paths & Tool Config | | ||
| | **Managed By** | User (Manual) | `bender update` (Auto) | User or `bender clone` | | ||
| | **Version Control** | **Commit** | **Commit** | **Ignore** (`.gitignore`) | | ||
| | **Shared?** | Yes, with everyone | Yes, for reproducibility | No, unique to your machine | | ||
|
|
||
| ## Summary of Roles | ||
|
|
||
| ### [`Bender.yml`](./manifest.md) (The Manifest) | ||
| This is your **Intent**. It defines the requirements of your package. You use it to specify which other packages you need (e.g., "I need `axi` version `0.21.x`"). It is the only file required to define a Bender package. | ||
|
|
||
| ### [`Bender.lock`](./lockfile.md) (The Lockfile) | ||
| This is the **Reality**. It is a machine-generated file that captures the exact state of your dependency tree. It records the specific Git commit hash for every dependency. By committing this file, you ensure that every developer and CI machine works with the exact same source code. | ||
|
|
||
| ### [`Bender.local`](./local.md) (Local Overrides) | ||
| This is your **Workspace**. It allows you to override the shared configuration for your local environment. Its most common use is to point a dependency to a local directory (via `bender clone`) so you can modify its code and see the effects immediately in your top-level project. | ||
|
|
||
| ## Interaction Flow | ||
|
|
||
| 1. **Define** your requirements in [`Bender.yml`](./manifest.md). | ||
| 2. Run `bender update` to resolve those requirements into a fixed [`Bender.lock`](./lockfile.md). | ||
| 3. Run `bender checkout` to download the exact source code specified in the lockfile. | ||
| 4. (Optional) Use [`Bender.local`](./local.md) to temporarily swap a dependency for a local version during development. |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,231 @@ | ||
| # Commands | ||
|
|
||
| `bender` is the entry point to the dependency management system. Bender always operates within a package; starting at the current working directory, search upwards the file hierarchy until a [`Bender.yml`](./manifest.md) is found, which marks the package. | ||
|
|
||
|
|
||
| ## `path` --- Get the path of a checked-out package | ||
|
|
||
| The `bender path <PKG>` prints the path of the checked-out version of package `PKG`. One or more package names may be passed. | ||
|
|
||
| Useful in scripts: | ||
|
|
||
| #!/bin/bash | ||
| cat `bender path mydep`/src/hello.txt | ||
|
|
||
| If a package has not been checked out yet, `bender path` checks it out before printing. Pass `--checkout` to force a re-checkout even when the directory already exists. | ||
|
|
||
|
|
||
| ## `packages` --- Display the dependency graph | ||
|
|
||
| - `bender packages`: List the package [dependencies](./dependencies.md). The list is sorted and grouped according to a topological sorting of the dependencies. That is, leaf dependencies are compiled first, then dependent ones. | ||
| - `bender packages -f/--flat`: Produces the same list, but flattened. | ||
| - `bender packages -g/--graph`: Produces a graph description of the dependencies of the form `<pkg>TAB<dependencies...>`. | ||
| - `bender packages --version` (alias `--versions`): Print the resolved version of each package. Implies `--flat`. | ||
| - `bender packages --targets` (alias `--target`): Print the available [targets](./targets.md) for each package. | ||
|
|
||
|
|
||
| ## `sources` --- List source files | ||
| [Code](https://github.com/pulp-platform/bender/blob/master/src/cmd/sources.rs) | ||
|
|
||
| Produces a *sources manifest*, a JSON description of all files needed to build the project. See [Sources](./sources.md) for the manifest format and [Dependencies](./dependencies.md) for how dependencies contribute their sources. | ||
|
|
||
| The manifest is recursive by default; meaning that dependencies and groups are nested. Use the `-f`/`--flatten` switch to produce a simple flat listing. | ||
|
|
||
| To enable specific targets, use the `-t`/`--target` option. Adding a package and colon `<PKG>:<TARGET>` before a target will apply the target only to that specific package. Prefixing a target with `-` will remove that specific target, even for predefined targets (e.g., `-t-<TARGET>` or `-t <PKG>:-<TARGET>`). | ||
|
|
||
| To get the sources for a subset of packages, exclude specific packages and their dependencies, or exclude all dependencies, the following flags exist: | ||
|
|
||
| - `-p`/`--package`: Specify package to show sources for. | ||
| - `-e`/`--exclude`: Specify package to exclude from sources. | ||
| - `-n`/`--no-deps`: Exclude all dependencies, i.e. only top level or specified package(s). | ||
|
|
||
| For multiple packages (or excludes), multiple `-p` (or `-e`) arguments can be added to the command. | ||
|
|
||
| Additional flags: | ||
| - `--raw`: Output the raw internal source tree as JSON, useful for debugging Bender itself. | ||
| - `--ignore-passed-targets`: Ignore any targets that would otherwise be inherited via `pass_targets` from a parent package. | ||
|
|
||
|
|
||
| ## `config` --- Emit the current configuration | ||
|
|
||
| The `bender config` command prints the currently active configuration as JSON to standard output. | ||
|
|
||
|
|
||
| ## `script` --- Generate tool-specific scripts | ||
|
|
||
| The `bender script <format>` command can generate scripts to feed the source code of a package and its dependencies into a vendor tool. These scripts are rendered using internally stored templates with the [tera](https://keats.github.io/tera/docs/) crate, but custom templates can also be used. | ||
|
|
||
| Supported formats: | ||
|
|
||
| - `flist`: A flat whitespace-separated file list. | ||
| - `flist-plus`: A flat file list amenable to be directly inlined into the invocation command of a tool, e.g. `verilate $(bender script flist)`. | ||
| - `vsim`: A Tcl compilation script for Mentor ModelSim/QuestaSim. | ||
| - `vcs`: A Tcl compilation script for VCS. | ||
| - `verilator`: Command line arguments for Verilator. | ||
| - `synopsys`: A Tcl compilation script for Synopsys DC and DE. | ||
| - `formality`: A Tcl compilation script for Formality (as reference design). | ||
| - `riviera`: A Tcl compilation script for Aldec Riviera-PRO. | ||
| - `genus`: A Tcl compilation script for Cadence Genus. | ||
| - `vivado`: A Tcl file addition script for Xilinx Vivado. | ||
| - `vivado-sim`: Same as `vivado`, but specifically for simulation targets. | ||
| - `precision`: A Tcl compilation script for Mentor Precision. | ||
| - `template`: A custom [tera](https://keats.github.io/tera/docs/) template, provided using the `--template` flag. | ||
| - `template_json`: The json struct used to render the [tera](https://keats.github.io/tera/docs/) template. | ||
|
|
||
| Furthermore, similar flags to the `sources` command exist. | ||
|
|
||
|
|
||
| ## `pickle` --- Parse and rewrite SystemVerilog sources with Slang | ||
|
|
||
| The `bender pickle` command parses SystemVerilog sources with [Slang](https://github.com/MikePopoloski/slang) and prints the resulting source again. It supports optional renaming and trimming of unreachable files for specified top modules. | ||
|
|
||
| This command is only available when Bender is built with the `slang` feature, which is part of the default feature set. If you previously installed Bender with `--no-default-features`, rebuild with `--features slang` (or the default feature set) to enable `pickle`. | ||
|
|
||
| Useful options: | ||
| - `--top <MODULE>`: Trim output to files reachable from one or more top modules. | ||
| - `--prefix <PFX>` / `--suffix <SFX>`: Add a prefix and/or suffix to renamed symbols. Both require `--expand-macros`. | ||
| - `--exclude-rename <NAME>`: Exclude specific symbols from renaming. | ||
| - `--ast-json`: Emit AST JSON instead of source code. | ||
| - `--expand-macros`, `--strip-comments`, `--squash-newlines`: Control output formatting. | ||
| - `-I <DIR>`, `-D <DEFINE>`: Add extra include directories and preprocessor defines beyond those declared in the manifest. | ||
| - `-o/--output <FILE>`: Write to a file instead of standard output. | ||
|
|
||
| The `-t/--target`, `-p/--package`, `--exclude`, and `--no-deps` flags work like for [`sources`](#sources-list-source-files). | ||
|
|
||
| Examples: | ||
|
|
||
| ```sh | ||
| # Keep only files reachable from top module `my_top`. | ||
| bender pickle --top my_top | ||
|
|
||
| # Rename symbols, but keep selected names unchanged. | ||
| bender pickle --top my_top --expand-macros --prefix p_ --suffix _s --exclude-rename my_top | ||
| ``` | ||
|
|
||
|
|
||
| ## `update` --- Re-resolve dependencies | ||
|
|
||
| Whenever you update the list of dependencies, you likely have to run `bender update` to re-resolve the dependency versions, and recreate the [`Bender.lock`](./lockfile.md) file. | ||
|
|
||
| Calling update with the `--fetch/-f` flag will force all git dependencies to be re-fetched from their corresponding urls. | ||
|
|
||
| > **Note:** `bender update` should ideally be run automatically when dependencies are added; for now this has to be done manually. | ||
|
|
||
|
|
||
| ## `clone` --- Clone dependency to make modifications | ||
|
|
||
| The `bender clone <PKG>` command checks out the package `PKG` into a directory (default `working_dir`, can be overridden with `-p / --path <DIR>`). | ||
| To ensure the package is correctly linked in bender, the [`Bender.local`](./local.md) file is modified to include a `path` dependency override, linking to the corresponding package. | ||
|
|
||
| This can be used for development of dependent packages within the parent repository, allowing to test uncommitted and committed changes, without the worry that bender would update the dependency. | ||
|
|
||
| To clean up once the changes are added, ensure the correct version is referenced by the calling packages and remove the path dependency in [`Bender.local`](./local.md), or have a look at `bender snapshot`. | ||
|
|
||
| > Note: The location of the override may be updated in the future to prevent modifying the human-editable [`Bender.local`](./local.md) file by adding a persistent section to [`Bender.lock`](./lockfile.md). | ||
|
|
||
| > Note: The newly created directory will be a git repo with a remote origin pointing to the `git` tag of the resolved dependency (usually evaluated from the manifest ([`Bender.yml`](./manifest.md))). You may need to adjust the git remote URL to properly work with your remote repository. | ||
|
|
||
| ## `snapshot` --- Relinks current checkout of cloned dependencies | ||
|
|
||
| After working on a dependency cloned with `bender clone <PKG>`, modifications are generally committed to the parent git repository. Once committed, this new hash can be quickly used by bender by calling `bender snapshot`. | ||
|
|
||
| With `bender snapshot`, all dependencies previously cloned to a working directory are linked to the git repositories and commit hashes currently checked out. The [`Bender.local`](./local.md) is modified correspondingly to ensure reproducibility. Once satisfied with the changes, it is encouraged to properly tag the dependency with a version, remove the override in the [`Bender.local`](./local.md), and update the required version in the [`Bender.yml`](./manifest.md). | ||
|
|
||
| ## `parents` --- Lists packages calling the specified package | ||
|
|
||
| The `bender parents <PKG>` command lists all packages calling the `PKG` package, along with the version requirement each parent imposes. | ||
|
|
||
| Pass `--targets` to additionally print the [targets](./targets.md) each parent passes down to `PKG` via `pass_targets`. | ||
|
|
||
| ## `checkout` --- Checkout all dependencies referenced in the Lock file | ||
|
|
||
| This command will ensure all dependencies are downloaded from remote repositories. This is usually automatically executed by other commands, such as `sources` and `script`. | ||
|
|
||
| ## `fusesoc` --- Create FuseSoC `.core` files | ||
|
|
||
| This command will generate FuseSoC `.core` files from the bender representation for open-source compatibility to the FuseSoC tool. It is intended to provide a basic manifest file in a compatible format, such that any project wanting to include a bender package can do so without much overhead. | ||
|
|
||
| If the `--single` argument is provided, only to top-level [`Bender.yml`](./manifest.md) file will be parsed and a `.core` file generated. | ||
|
|
||
| If the `--single` argument is *not* provided, bender will walk through all the dependencies and generate a FuseSoC `.core` file where none is present. If a `.core` file is already present in the same directory as the [`Bender.yml`](./manifest.md) for the corresponding dependency, this will be used to link dependencies (if multiple are available, the user will be prompted to select one). Previously generated `.core` files will be overwritten, based on the included `Created by bender from the available manifest file.` comment in the `.core` file. | ||
|
|
||
| The `--license` argument will allow you to add multiple comment lines at the top of the generated `.core` files, e.g. a License header string. | ||
|
|
||
| The `--fuse-vendor` argument will assign a vendor string to all generated `.core` dependencies for the VLNV name. | ||
|
|
||
| The `--fuse-version` argument will assign a version to the top package being handled for the VLNV name. | ||
|
|
||
| ## `vendor` --- Copy files from dependencies that do not support bender | ||
|
|
||
| Collection of commands to manage monorepos. Requires a subcommand. | ||
|
|
||
| Please make sure you manage the includes and sources required for these files separately, as this command only fetches the files and patches them. | ||
| This is in part based on [lowRISC's `vendor.py` script](https://github.com/lowRISC/opentitan/blob/master/util/vendor.py). | ||
|
|
||
| ### `vendor init` --- (Re-)initialize the vendorized dependencies | ||
|
|
||
| This command will (re-)initialize the dependencies listed in the `vendor_package` section of the [`Bender.yml`](./manifest.md) file, fetching the files from the remote repositories, applying the necessary patch files, and writing them to the respective `target_dir`. | ||
|
|
||
| If the `-n/--no-patch` argument is passed, the dependency is initialized without applying any patches. | ||
|
|
||
| ### `vendor diff` --- Print a diff of local, unpatched changes | ||
|
|
||
| This command will print a diff to the remote repository with the patches in `patch_dir` applied. | ||
|
|
||
| ### `vendor patch` --- Generate a patch file from local changes | ||
|
|
||
| If there are local, *staged* changes in a vendored dependency, this command prompts for a commit message and generates a patch for that dependency. The patch is written into `patch_dir`. | ||
|
|
||
| If the `--plain` argument is passed, this command will *not* prompt for a commit message and generate a patch of *all* (staged and unstaged) local changes of the vendored dependency. | ||
|
|
||
| ### Example workflow | ||
|
|
||
| Let's assume we would like to vendor a dependency `my_ip` into a project `monorepo`. | ||
| A simple configuration in a [`Bender.yml`](./manifest.md) could look as follows (see the [`Bender.yml`](./manifest.md) description above for more information on this): | ||
|
|
||
| ```yaml | ||
| vendor_package: | ||
| - name: my_ip | ||
| target_dir: deps/my_ip | ||
| upstream: { git: "<url>", rev: "<commit-hash>" } | ||
| patch_dir: "deps/patches/my_ip" | ||
| ``` | ||
|
|
||
| Executing `bender vendor init` will now clone this dependency from `upstream` and place it in `target_dir`. | ||
|
|
||
| Next, let's assume that we edit two files within the dependency, `deps/my_ip/a` and `deps/my_ip/b`. | ||
| We can print these changes with the command `bender vendor diff`. | ||
|
|
||
| Now, we would like to generate a patch with the changes in `deps/my_ip/a` (but not those in `deps/my_ip/b`). | ||
| We stage the desired changes using `git add deps/my_ip/a` (of course, you can also just stage parts of a file using `git add --patch`). | ||
| The command `bender vendor patch` will now ask for a commit message that will be associated with this patch. | ||
| Then, it will place a patch that contains our changes in `deps/my_ip/a` into `deps/patches/my_ip/0001-commit-message.patch` (the number will increment if a numbered patch is already present). | ||
|
|
||
| We can easily create a corresponding commit in the monorepo. | ||
| `deps/my_ip/a` is still staged from the previous step. | ||
| We only have to `git add deps/patches/my_ip/0001-commit-message.patch` and `git commit` for an atomic commit in the monorepo that contains both our changes to `deps/my_ip/a` and the corresponding patch. | ||
|
|
||
| Upstreaming patches to the dependency is easy as well. | ||
| We clone the dependencies' repository, check out `<commit-hash>` and create a new branch. | ||
| Now, `git am /path/to/monorepo/deps/patches/my_ip/0001-commit-message.patch` will create a commit out of this patch -- including all metadata such as commit message, author(s), and timestamp. | ||
| This branch can then be rebased and a pull request can be opened from it as usual. | ||
|
|
||
| Note: when using mappings in your `vendor_package`, the patches will be relative to the mapped directory. | ||
| Hence, for upstreaming, you might need to use `git am --directory=<mapping.from>` instead of plain `git am`. | ||
|
|
||
| ## `completion` --- Generate shell completion script | ||
|
|
||
| The `bender completion <SHELL>` command prints a completion script for the given shell. | ||
|
|
||
| Installation and usage of these scripts is shell-dependent. Please refer to your shell's documentation | ||
| for information on how to install and use the generated script | ||
| ([bash](https://www.gnu.org/software/bash/manual/html_node/Programmable-Completion.html), | ||
| [zsh](https://zsh.sourceforge.io/Doc/Release/Completion-System.html), | ||
| [fish](https://fishshell.com/docs/current/completions.html)). | ||
|
|
||
| Supported shells: | ||
| - `bash` | ||
| - `elvish` | ||
| - `fish` | ||
| - `powershell` | ||
| - `zsh` |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,12 @@ | ||
| # Concepts | ||
|
|
||
| This section explains the core ideas and files that make Bender work. Understanding these concepts will help you manage complex hardware projects more effectively. | ||
|
|
||
| - **[Principles](./principles.md):** The high-level goals and design philosophy behind Bender. | ||
| - **[Manifest](./manifest.md):** How to define your package's metadata, dependencies, and sources. | ||
| - **[Lockfile](./lockfile.md):** How Bender ensures reproducible builds across different environments. | ||
| - **[Local Configuration](./local.md):** Overriding settings for your local development workspace via `Bender.local`. | ||
| - **[Comparing the Files](./bender_files.md):** A quick comparison of the three core files (`.yml`, `.lock`, `.local`). | ||
| - **[Dependencies](./dependencies.md):** How Bender handles hierarchical and transitive dependencies. | ||
| - **[Sources](./sources.md):** Managing HDL source files, include directories, and defines. | ||
| - **[Targets](./targets.md):** Using boolean expressions to conditionally include or exclude files and dependencies. |
Oops, something went wrong.
Oops, something went wrong.
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Uh oh!
There was an error while loading. Please reload this page.