Development Resources

This document will help getting started contributing to Verible. Collecting development aids and design concepts.

Searching and Navigating Verible's Source Code

https://cs.opensource.google/verible/verible is a search-indexed mirror of Verible's source code. Expect to spend some time here as you familiarize yourself with the codebase.

https://developers.google.com/code-search/reference provides a reference for search syntax and more.

To learn more about how to use Kythe to index the source code yourself, read here.

To allow your editor to navigate the code base, make sure it uses the clangd language server. With

.github/bin/make-compilation-db.sh

You can create the compilation database it needs.

Automated tools that allow to keep things clean

If you have a compilation database, you can run the clang-tidy checker:

.github/bin/run-clang-tidy-cached.cc

Note, this will take a while the first time, but it caches the result.

To run all litmus diagnostics before submitting, there is this convenient script, run it before creating a pull request to see if you haven't missed anything (the Continuous Integration on github will catch it, but nice to run this locally):

.github/bin/before-submit.sh

This will also run clang-tidy, and so will take a while the first time you run it.

Tips

  • Read the test code. Most .h and .cc files come with a _test.cc set of unit tests. The tests are never outdated because they are kept passing.
  • Find examples. Dig through history. Follow blame and annotation layers to see when particular lines of code were touched. Look for related closed issues and see the commits that addressed them.

Code Organization

Each directory in the source tree contains a short README.md describing the contents.

  • common/ contains all language-agnostic libraries and tools
  • verilog/ contains Verilog-specific libraries and tools
  • external_libs/ contains some library dependencies

Verilog Front-End

Analyzers

Transformers

Formatting

  • Formatter: How the formatter works, and how to debug it.