blob: 2ec2350bb3f94a4a34dc6b25c04fcfae605aa6b6 [file] [log] [blame] [view]
{{% lowrisc-doc-hdr: vendor_hw: vendor-in hardware components }}
Not all hardware code contained in this repository is actually developed within this repository.
Code which we include from external sources is placed in the `hw/vendor` directory and copied into this directory from its upstream source.
The process of copying the upstream sources is called vendoring, and it is automated by the `vendor_hw` tool.
The `vendor_hw` tool can go beyond simply copying in source files: it can patch them, it can export patches from commits in a Git repository, and it can commit the resulting changes with a meaningful commit message.
## Tool usage overview
```text
usage: vendor_hw [-h] [--refresh-patches] [--commit] [--verbose] file
vendor_hw, copy hardware source code from upstream into this repository
positional arguments:
file vendoring description file (*.vendor.hjson)
optional arguments:
-h, --help show this help message and exit
--refresh-patches Refresh the patches from the patch repository
--commit, -c Commit the changes
--verbose, -v Verbose
```
## The vendor description file
For each vendored-in component a description file must be created, which serves as input to the `vendor_hw` tool.
The vendor description file is stored in `hw/vendor/<vendor>_<name>.vendor.hjson`.
By convention all imported code is named `<vendor>_<name>`, with `<vendor>` typically being the GitHub user or organization name, and `<name>` the project name.
It is recommended to use only lower-case characters.
A full commented example of a vendor description file is given below.
All relative paths are relative to the description file.
Optional parts can be removed if they are not used.
```
// Copyright lowRISC contributors.
// Licensed under the Apache License, Version 2.0, see LICENSE for details.
// SPDX-License-Identifier: Apache-2.0
{
// Name of the vendored-in project
name: "pulp_riscv_dbg",
// Target directory: typically equal to the name
// All imported code is copied into this directory
target_dir: "pulp_riscv_dbg",
// Git upstream source code repository
upstream: {
// Upstream Git repository URL. HTTPS URLs are preferred.
url: "https://github.com/pulp-platform/riscv-dbg",
// Upstream revision or branch. Can be a commit hash or a branch name.
rev: "pulpissimo_integration",
},
// Optional: Apply patches from the following directory to the upstream
// sources
patch_dir: "patches/pulp_riscv_dbg",
// Optional: Update patches in |patch_dir| from a Git repository
// If vendor_hw is run with --refresh-patches, all commits in the repository
// at |url| between |rev_base| and |rev_patched| are exported into the
// |patch_dir|, replacing all existing patches.
patch_repo: {
url: "git@github.com:lowRISC/riscv-dbg.git",
rev_base: "pulpissimo_integration",
rev_patched: "ot",
},
// Optional: Exclude files or directories from the upstream sources
// The standard glob wildcards (*, ?, etc.) are supported
exclude_from_upstream: [
"src/dm_top.sv",
"src_files.yml",
]
}
```
## Examples
### Update code and commit the new code
```command
$ cd $REPO_TOP
$ ./util/vendor_hw.py hw/vendor/google_riscv-dv.vendor.hjson -v --commit
```