|
| 1 | +# VTR Contribution Guidelines |
| 2 | + |
| 3 | +Thanks for considering contributing to VTR! |
| 4 | +Here are some helpful guidelines to follow. |
| 5 | + |
| 6 | +## Common Scenarios |
| 7 | + |
| 8 | +### I have a question |
| 9 | +If you have questions about VTR take a look at our [Support Resources](SUPPORT.md). |
| 10 | + |
| 11 | +If the answer to your question wasn't in the documentation (and you think it should have been), consider [enhancing the documentation](#enhancing-docs). |
| 12 | +That way someone (perhaps your future self!) will be able to quickly find the answer in the future. |
| 13 | + |
| 14 | + |
| 15 | +### I found a bug! |
| 16 | +While we strive to make VTR reliable and robust, bugs are inevitable in large-scale software projects. |
| 17 | + |
| 18 | +Please file a [detailed bug report](#filling-bugs). |
| 19 | +This ensures we know about the problem and can work towards fixing it. |
| 20 | + |
| 21 | + |
| 22 | +### It would be great if VTR supported ... |
| 23 | +VTR has many features and is highly flexible. |
| 24 | +Make sure you've checkout out all our [Support Resources](SUPPORT.md) to see if VTR already supports what you want. |
| 25 | + |
| 26 | +If VTR does not support your use case, consider [filling an enhancement](#filling-enhacements). |
| 27 | + |
| 28 | +### I have a bug-fix/feature I'd like to include in VTR |
| 29 | +Great! Submitting bug-fixes and features is a great way to improve VTR. |
| 30 | +See the guidlines for [submitting code](#submitting-code). |
| 31 | + |
| 32 | +## The Details |
| 33 | + |
| 34 | +### [Enhancing Documentation](#enhancing-docs) |
| 35 | +Enhancing documentation is a great way to start contributing to VTR. |
| 36 | + |
| 37 | +You can edit the [documentation](https://docs.verilogtorouting.org) directly by clicking the `Edit on GitHub` link of the relevant page, or by editing the re-structured text (`.rst`) files under the `doc/src` folder. |
| 38 | + |
| 39 | +Generally it is best to make small incremental changes. |
| 40 | +If you are considering larger changes its best to discuss them first (e.g. file a [bug](#filling-bugs) or [enhancement](#filling-enhancements)). |
| 41 | + |
| 42 | +Once you've made your enhancements [open a pull request](#pull-requests) to get your changes considered for inclusion in the documentation. |
| 43 | + |
| 44 | + |
| 45 | +### [Filling Bug Reports](#filling-bugs) |
| 46 | +First, search for [existing issues](https://github.com/verilog-to-routing/vtr-verilog-to-routing/issues) to see if the bug has already been reported. |
| 47 | + |
| 48 | +If no bug exists you will need to collect key pieces of information. |
| 49 | +This information helps us to quickly reproduce (and hopefully fix) the issue: |
| 50 | + |
| 51 | +* What behaviour you expect |
| 52 | + |
| 53 | + How you think VTR should be working. |
| 54 | + |
| 55 | +* What behaviour you are seeing |
| 56 | + |
| 57 | + What VTR actually does on your system. |
| 58 | + |
| 59 | +* Detailed steps to re-produce the bug |
| 60 | + |
| 61 | + *This is key to getting your bug fixed.* |
| 62 | + |
| 63 | + Provided *detailed steps* to reproduce the bug, including the exact commands to reproduce the bug. |
| 64 | + Attach all relevant files (e.g. FPGA architecture files, benchmark circuits, log files). |
| 65 | + |
| 66 | + If we can't re-produce the issue it is very difficult to fix. |
| 67 | + |
| 68 | +* Context about what you are trying to achieve |
| 69 | + |
| 70 | + Sometimes VTR does things in a different way than you expect. |
| 71 | + Telling us what you are trying to accomplish helps us to come up with better real-world solutions. |
| 72 | + |
| 73 | +* Details about your environment |
| 74 | + |
| 75 | + Tell us what version of VTR you are using (e.g. the output of `vpr --version`), which Operating System and compiler you are using, or any other relevant information about where or how you are building/running VTR. |
| 76 | + |
| 77 | +Once you've gathered all the information [open an Issue](https://github.com/verilog-to-routing/vtr-verilog-to-routing/issues/new) on our issue tracker. |
| 78 | + |
| 79 | +If you know how to fix the issue, or already have it coded-up, please also consider [submitting the fix](#submitting-code). |
| 80 | +This is likely the fastest way to get bugs fixed! |
| 81 | + |
| 82 | +### [Filling Enhancement Requests](#filling-enhancements) |
| 83 | +First, search [existing issues](https://github.com/verilog-to-routing/vtr-verilog-to-routing/issues) to see if your enhancement request overlaps with an existing Issue. |
| 84 | + |
| 85 | +If not feature request exists you will need to describe your enhancement: |
| 86 | + |
| 87 | +* New behaviour |
| 88 | + |
| 89 | + How your proposed enhancement will work (from a user's perspective). |
| 90 | + |
| 91 | +* Contrast with current behaviour |
| 92 | + |
| 93 | + How will your enhancement differ from the current behaviour (from a user's perspective). |
| 94 | + |
| 95 | +* Potential Implementation |
| 96 | + |
| 97 | + Describe (if you have some idea) how the proposed enhancement would be implemented. |
| 98 | + |
| 99 | +* Context |
| 100 | + |
| 101 | + What is the broader goal you are trying to accomplish? How does this enhancement help? |
| 102 | + This allows us to understand why this enhancement is beneficial, and come up with the best real-world solution. |
| 103 | + |
| 104 | +**VTR developers have limited time and resources, and will not be able to address all feature requests.** |
| 105 | +Typically, simple enhancements, and those which are broadly useful to a wide group of users get higher priority. |
| 106 | + |
| 107 | +Features which are not generally useful, or useful to only a small group of users will tend to get lower priority. |
| 108 | +(Of course [coding the enhancement yourself](submitting-code) is an easy way to bypass this challenge). |
| 109 | + |
| 110 | +Once you've gathered all the information [open an Issue](https://github.com/verilog-to-routing/vtr-verilog-to-routing/issues/new) on our issue tracker. |
| 111 | + |
| 112 | +### [Submitting Code to VTR](#submitting-code) |
| 113 | +VTR welcomes external contributions. |
| 114 | + |
| 115 | +In general changes that are narrowly focused (e.g. small bug fixes) are easier to review and include in the code base. |
| 116 | + |
| 117 | +Large changes, such as substantial new features or significant code-refactoring are more challenging to review. |
| 118 | +It is probably best to file an [enhancement](#filling-enhancements) first to discuss your approach. |
| 119 | + |
| 120 | +Additionally, new features which are generally useful are much easier to justify adding to the code base, whereas features useful in only a few specialized cases are more difficult to justify. |
| 121 | + |
| 122 | +### [Making Pull Requests](#pull-requests) |
| 123 | +It is assumed that by opening a pull request to VTR you have permission to do so, and the changes are under the relevant [License](LICENSE.md). |
| 124 | + |
| 125 | +Each pull request should describe it's motivation and context (linking to a relevant Issue for non-trivial changes). |
| 126 | + |
| 127 | +It should also describe: |
| 128 | + |
| 129 | +* The type of change (e.g. bug-fix, feature) |
| 130 | + |
| 131 | +* How it has been tested |
| 132 | + |
| 133 | +* What tests have been added |
| 134 | + |
| 135 | + All new features must have tests added which exercise the new features. |
| 136 | + This ensures any future changes which break your feature will be detected. |
| 137 | + It is also best to add tests when fixing bugs, for the same reason |
| 138 | + |
| 139 | + If you aren't sure what tests are needed, or how they should be added ask a developer. |
| 140 | + |
| 141 | +* How the feature has been documented |
| 142 | + |
| 143 | + Any new user-facing features should be documented in the public documentation, which is in `.rst` format under `doc/src`, and served at https://docs.verilogtorouting.org |
| 144 | + |
| 145 | + |
| 146 | +**Tips for Pull Requests** |
| 147 | +The following are general tips for making your pull requests easy to review (and hence more likely to be merged): |
| 148 | + |
| 149 | +* Keep changes small |
| 150 | + |
| 151 | + Large change sets are difficult and time-consuming to review. |
| 152 | + If a change set is becoming too large, consider splitting it into smaller pieces; you'll probably want to file an issue to discuss things first. |
| 153 | + |
| 154 | +* Do one thing only |
| 155 | + |
| 156 | + All the changes and commits in your pull request should be relevant to the bug/feature it addresses. |
| 157 | + There should be no unrelated changes (e.g. adding IDE files, re-formatting unchanged code). |
| 158 | + |
| 159 | + Unrelated changes make it difficult to accept a pull request, since it does more than what the pull request described. |
| 160 | + |
| 161 | +* Match existing code style |
| 162 | + When modifying existing code, try match the existing coding style. |
| 163 | + This helps to keep the code consistent and reduces noise in the pull request by avoiding re-formatting changes. |
0 commit comments