1Getting Involved
2================
3
4Thank you for taking the time to read this document and to contribute,
5the OpenROAD project will not reach all of its objectives without help!
6
7Possible ways to contribute
8
9-  Open Source PDK information
10-  Open Source Designs
11-  Useful scripts
12-  Tool improvements
13-  New tools
14-  Improving documentation including this document
15-  Star our project and repos so we can see the number of people
16   interested
17
18Licensing Contributions
19-----------------------
20
21As much as possible, all contributions should be licensed using the BSD3
22license. You can propose another license if you must but contributions
23made with BSD3 fit in the spirit of OpenROAD’s permissively open source
24philosophy. We do have exceptions in the project but over time we hope
25that all contributions will be BSD3, or some other permissive license.
26
27Contributing Open Source PDK information and Designs
28----------------------------------------------------
29
30If you have new design or PDK information to contribute, please add this to
31the repo `OpenROAD-flow-scripts`_. In the `flow directory`_ you will see a directory
32for `designs`_ with Makefiles to run them, and one for PDK `platforms`_
33used by the designs. If you add a new PDK platform be sure to add at least
34one design that uses it.
35
36Contributing Scripts and Code
37-----------------------------
38
39We follow the `Google C++ style guide`_. If you find code that is not
40following this guide, within each file that you edit, follow the style in
41that file. Please pay careful attention to the :ref:`tool-checklist` for
42all code. If you want to add or improve functionality in OpenROAD please
43start with the top level `app`_ repo. You can see in the src directory that
44submodules exist pointing to tested versions of the other relevant repos
45in the project. Please look at the tool workflow in the developer guide
46:doc:`document <DeveloperGuide>` to work with the app and its submodule
47repos in an efficient way.
48
49Please pay attention to the `test directory`_ and be sure to add tests
50for any code changes that you make with open sourceable PDK and design
51information. We provide the nandgate45 PDK in the OpenROAD-flow-scripts repo to
52help with this. Pull requests with code changes are unlikely to be accepted
53without accompanying test cases.  There are many `examples`_ tests. Each
54repo has a test directory as well with tests you should run and add to if
55you modify something in one of the submodules.
56
57.. If you want to add a new tool please look in the
58.. `src/tool <https://github.com/The-OpenROAD-Project/OpenROAD/tree/add_tool/src/tool>`__
59.. directory of the add_tool branch for an example of how to add one.
60
61For changes that claim to improve QoR or PPA, please run many tests and
62ensure that the improvement is not design specific. There are designs
63in the `OpenROAD-flow-scripts`_ repo which can be used unless the improvement is
64technology specific.
65
66Do not add runtime or build dependencies without serious thought. For a
67project like OpenROAD with many application sub components, the software
68architecture can quickly get out of control. Changes with lots of new
69dependencies which are not necessary are less likely to be integrated.
70
71If you want to add TCL code to define a new tool command look at pdngen
72as an example of how to do so. Take a look at the `cmake file`_ which
73automatically sources the tcl code and the `tcl code`_ itself.
74
75Questions
76---------
77
78You can file git issues to ask questions, file issues or you can contact
79us via email openroad at eng.ucsd.edu
80
81.. _`OpenROAD-flow-scripts`: https://github.com/The-OpenROAD-Project/OpenROAD-flow-scripts/
82.. _`flow directory`: https://github.com/The-OpenROAD-Project/OpenROAD-flow-scripts/tree/master/flow
83.. _`designs`: https://github.com/The-OpenROAD-Project/OpenROAD-flow-scripts/tree/master/flow/designs
84.. _`platforms`: https://github.com/The-OpenROAD-Project/OpenROAD-flow-scripts/tree/master/flow/platforms
85.. _`Google C++ style guide`: https://google.github.io/styleguide/cppguide.html
86.. _`app`: https://github.com/The-OpenROAD-Project/OpenROAD/
87.. _`test directory`: https://github.com/The-OpenROAD-Project/OpenROAD/tree/master/test
88.. _`examples`: https://github.com/The-OpenROAD-Project/OpenROAD/blob/master/test/gcd_nangate45.tcl
89.. _`cmake file`: https://github.com/The-OpenROAD-Project/OpenROAD/blob/master/src/CMakeLists.txt
90.. _`tcl code`: https://github.com/The-OpenROAD-Project/OpenROAD/blob/master/src/pdngen/src/PdnGen.tcl
91