blob: 37a8208720229aec1e94eed15ba1ec2354bc43ac [file] [log] [blame] [view]
Commit Proceedures
==================
For developers with commit rights on GitHub
------------------------------------------
The guiding principle in internal development is to submit your work into the repository without breaking other people's work.
When you commit, make sure that the repository compiles, that the flow runs, and that you did not clobber someone else's work.
In the event that you are responsible for "breaking the build", fix the build at top priority.
We have some guidelines in place to help catch most of these problems:
1. Before you push code to the central repository, your code MUST pass the check-in regression test.
The check-in regression test is a quick way to test if any part of the Verilog-to-routing flow is broken.
To run the check-in regression test run:
```shell
#From the VTR root directory
$ ./run_quick_test.pl
```
You may push if all the tests return `[PASS]`.
It is typically a good idea to run tests regularily as you make changes.
2. The automated [BuildBot](http://builds.verilogtorouting.org:8080/waterfall) will perform more extensive regressions tests and mark which revisions are stable.
3. Everyone who is doing development must write regression tests for major feature they create.
This ensures regression testing will detect if a feature is broken by someone (or yourself).
4. In the event a regression test is broken, the one responsible for having the test pass is in charge of determining:
* If there is a bug in the source code, in which case the source code needs to be updated to fix the bug, or
* If there is a problem with the test (perhaps the quality of the tool did in fact get better or perhaps there is a bug with the test itself), in which case the test needs to be updated to reflect the new changes.
If the golden results need to be updated and you are sure that the new golden results are better, use the command `../scripts/parse_vtr_task.pl -create_golden your_regression_test_name_here`
5. Keep in sync with the GitHub master branch as regularly as you can (i.e. `git pull` or `git pull --rebase`).
The longer code deviates from the trunk, the more painful it is to integrate back into the trunk.
Whatever system that we come up with will not be foolproof so be conscientious about how your changes will effect other developers.
For external developers
-----------------------
VTR welcomes external contributions.
The general proceedure is to file an issue on GitHub proposing your changes, and then create an associated pull request.
Here are some general guidelines:
* Keep your pull requests focused and specific.
Short pull requests are much easier to review (and hence likely to be merged).
Large scale changes which touch a large amount of code are difficult to review, and should be discussed (e.g. in a GitHub issue) before hand.
* If you are adding user-facing features, make sure the documentation has been updated
* If you are adding a new feature, ensure you have added tests for the feature
* Ensure that all tests (new and existing) pass
External Libraries Using Subtrees
=================================
Some libraries used by VTR are developed in other repositories and integrated using git subtrees.
Currently these includes:
* libsdcparse [from git@github.com:kmurray/libsdcparse.git]
* libblifparse [from git@github.com:kmurray/libblifparse.git]
* libtatum [from git@github.com:kmurray/tatum.git]
As an example consider libsdcparse:
1. To begin add the sub-project as a remote:
` git remote add -f github-libsdcparse git@github.com:kmurray/libsdcparse.git `
2. To initially add the library (first time the library is added only):
` git subtree add --prefix libsdcparse github-libsdcparse master --squash `
Note the '--squash' option which prevents the whole up-stream history from being merged into the current repository.
3. To update a library (subsequently):
` git subtree pull --prefix libsdcparse github-libsdcparse master --squash `
Note the '--squash' option which prevents the whole up-stream history from being merged into the current repository.
If you have made local changes to the subtree and pushed them to the parent repository, you may encounter a merge conflict
during the above pull (caused by divergent commit IDs between the main and parent repositories).
You will need to re-split the subtree so that subtree pull finds the correct common ancestor:
` git subtree split --rejoin -P libsdcparse/ `
You can then re-try the subtree pull as described above.
4. [This is unusual, be sure you really mean to do this!] To push local changes to the upstream subtree
` git subtree push --prefix libsdcparse github-libsdcparse master `
For more details see [here](https://blogs.atlassian.com/2013/05/alternatives-to-git-submodule-git-subtree/) for a good overview.
Finding Bugs with Coverity
==========================
[Coverity Scan](https://scan.coverity.com) is a static code analysis service which can be used to detect bugs.
Browsing Defects
----------------
To view defects detected do the following:
1. Get a coverity scan account
Contact a project maintainer for an invitation.
2. Browse the existing defects through the coverity web interface
Submitting a build
------------------
To submit a build to coverity do the following:
1. [Download](https://scan.coverity.com/download) the coverity build tool
2. Configure VTR to perform a *debug* build. This ensures that all assertions are enabled, without assertions coverity may report bugs that are gaurded against by assertions. We also set VTR asserts to the highest level.
```shell
#From the VTR root
mkdir -p build
cd build
CC=gcc CXX=g++ cmake -DCMAKE_BUILD_TYPE=debug -DVTR_ASSERT_LEVEL=3 ..
```
Note that we explicitly asked for gcc and g++, the coverity build tool defaults to these compilers, and may not like the default 'cc' or 'c++' (even if they are linked to gcc/g++).
3. Run the coverity build tool
```shell
#From the build directory where we ran cmake
cov-build --dir cov-int make -j8
```
4. Archive the output directory
```shell
tar -czvf vtr_coverity.tar.gz cov-int
```
5. Submit the archive through the coverity web interface
Once the build has been analyzed you can browse the latest results throught the coverity web interface
No files emitted
----------------
If you get the following warning from cov-build:
[WARNING] No files were emitted.
You may need to configure coverity to 'know' about your compiler. For example:
```shell
cov-configure --compiler `which gcc-7`
```
Debugging with clang static analyser
------------------------------------
First make sure you have clang installed.
define clang as the default compiler:
`export CC=clang`
`export CXX=clang++`
set to `debug` in makefile
On unix-like systems run `scan-build make` from the root VTR directory.
to output the html analysis to a specific folder, run `scan-build make -o /some/folder`
Commit with changes on ODIN
---------------------------
make sure all test passes:
microbechmark, full regression an vtr strong regression test.
ODIN_II/verify_full.sh takes care of running all of them at once.
verify they are all successfull.