| 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. |