128 lines
		
	
	
		
			5.7 KiB
		
	
	
	
		
			ReStructuredText
		
	
	
	
			
		
		
	
	
			128 lines
		
	
	
		
			5.7 KiB
		
	
	
	
		
			ReStructuredText
		
	
	
	
| ==================================
 | |
| Contributing to LLVM
 | |
| ==================================
 | |
| 
 | |
| 
 | |
| Thank you for your interest in contributing to LLVM! There are multiple ways to
 | |
| contribute, and we appreciate all contributions. In case you
 | |
| have questions, you can either use the `Developer's List (llvm-dev)`_
 | |
| or the #llvm channel on `irc.oftc.net`_.
 | |
| 
 | |
| If you want to contribute code, please familiarize yourself with the :doc:`DeveloperPolicy`.
 | |
| 
 | |
| .. contents::
 | |
|   :local:
 | |
| 
 | |
| 
 | |
| Ways to Contribute
 | |
| ==================
 | |
| 
 | |
| Bug Reports
 | |
| -----------
 | |
| If you are working with LLVM and run into a bug, we definitely want to know
 | |
| about it. Please let us know and follow the instructions in
 | |
| :doc:`HowToSubmitABug`  to create a bug report.
 | |
| 
 | |
| Bug Fixes
 | |
| ---------
 | |
| If you are interested in contributing code to LLVM, bugs labeled with the
 | |
| `beginner keyword`_ in the `bug tracker`_ are a good way to get familiar with
 | |
| the code base. If you are interested in fixing a bug, please create an account
 | |
| for the bug tracker and assign it to yourself, to let people know you are working on
 | |
| it.
 | |
| 
 | |
| Then try to reproduce and fix the bug with upstream LLVM. Start by building
 | |
| LLVM from source as described in :doc:`GettingStarted` and
 | |
| and use the built binaries to reproduce the failure described in the bug. Use
 | |
| a debug build (`-DCMAKE_BUILD_TYPE=Debug`) or a build with assertions
 | |
| (`-DLLVM_ENABLE_ASSERTIONS=On`, enabled for Debug builds).
 | |
| 
 | |
| Bigger Pieces of Work
 | |
| ---------------------
 | |
| In case you are interested in taking on a bigger piece of work, a list of
 | |
| interesting projects is maintained at the `LLVM's Open Projects page`_. In case
 | |
| you are interested in working on any of these projects, please send a mail to
 | |
| the `LLVM Developer's mailing list`_, so that we know the project is being
 | |
| worked on.
 | |
| 
 | |
| 
 | |
| How to Submit a Patch
 | |
| =====================
 | |
| Once you have a patch ready, it is time to submit it. The patch should:
 | |
| 
 | |
| * include a small unit test
 | |
| * conform to the :doc:`CodingStandards`. You can use the `clang-format-diff.py`_ or `git-clang-format`_ tools to automatically format your patch properly.
 | |
| * not contain any unrelated changes
 | |
| * be an isolated change. Independent changes should be submitted as separate patches as this makes reviewing easier.
 | |
| 
 | |
| To get a patch accepted, it has to be reviewed by the LLVM community. This can
 | |
| be done using `LLVM's Phabricator`_ or the llvm-commits mailing list.
 | |
| Please  follow :ref:`Phabricator#requesting-a-review-via-the-web-interface <phabricator-request-review-web>`
 | |
| to request a review using Phabricator.
 | |
| 
 | |
| To make sure the right people see your patch, please select suitable reviewers
 | |
| and add them to your patch when requesting a review. Suitable reviewers are the
 | |
| code owner (see CODE_OWNERS.txt) and other people doing work in the area your
 | |
| patch touches. If you are using Phabricator, add them to the `Reviewers` field
 | |
| when creating a review and if you are using `llvm-commits`, add them to the CC of
 | |
| your email.
 | |
| 
 | |
| A reviewer may request changes or ask questions during the review. If you are
 | |
| uncertain on how to provide test cases, documentation, etc., feel free to ask
 | |
| for guidance during the review. Please address the feedback and re-post an
 | |
| updated version of your patch. This cycle continues until all requests and comments
 | |
| have been addressed and a reviewer accepts the patch with a `Looks good to me` or `LGTM`.
 | |
| Once that is done the change can be committed. If you do not have commit
 | |
| access, please let people know during the review and someone should commit it
 | |
| on your behalf.
 | |
| 
 | |
| If you have received no comments on your patch for a week, you can request a
 | |
| review by 'ping'ing a patch by responding to the email thread containing the
 | |
| patch, or the Phabricator review with "Ping." The common courtesy 'ping' rate
 | |
| is once a week. Please remember that you are asking for valuable time from other
 | |
| professional developers.
 | |
| 
 | |
| 
 | |
| Helpful Information About LLVM
 | |
| ==============================
 | |
| :doc:`LLVM's documentation <index>` provides a wealth of information about LLVM's internals as
 | |
| well as various user guides. The pages listed below should provide a good overview
 | |
| of LLVM's high-level design, as well as its internals:
 | |
| 
 | |
| :doc:`GettingStarted`
 | |
|    Discusses how to get up and running quickly with the LLVM infrastructure.
 | |
|    Everything from unpacking and compilation of the distribution to execution
 | |
|    of some tools.
 | |
| 
 | |
| :doc:`LangRef`
 | |
|   Defines the LLVM intermediate representation.
 | |
| 
 | |
| :doc:`ProgrammersManual`
 | |
|   Introduction to the general layout of the LLVM sourcebase, important classes
 | |
|   and APIs, and some tips & tricks.
 | |
| 
 | |
| :ref:`index-subsystem-docs`
 | |
|   A collection of pages documenting various subsystems of LLVM.
 | |
| 
 | |
| `LLVM for Grad Students`__
 | |
|   This is an introduction to the LLVM infrastructure by Adrian Sampson. While it
 | |
|   has been written for grad students, it provides  a good, compact overview of
 | |
|   LLVM's architecture, LLVM's IR and how to write a new pass.
 | |
| 
 | |
|   .. __: http://www.cs.cornell.edu/~asampson/blog/llvm.html
 | |
| 
 | |
| `Intro to LLVM`__
 | |
|   Book chapter providing a compiler hacker's introduction to LLVM.
 | |
| 
 | |
|   .. __: http://www.aosabook.org/en/llvm.html
 | |
| 
 | |
| .. _Developer's List (llvm-dev): http://lists.llvm.org/mailman/listinfo/llvm-dev
 | |
| .. _irc.oftc.net: irc://irc.oftc.net/llvm
 | |
| .. _beginner keyword: https://bugs.llvm.org/buglist.cgi?bug_status=NEW&bug_status=REOPENED&keywords=beginner%2C%20&keywords_type=allwords&list_id=130748&query_format=advanced&resolution=---
 | |
| .. _bug tracker: https://bugs.llvm.org
 | |
| .. _clang-format-diff.py: https://reviews.llvm.org/source/clang/browse/cfe/trunk/tools/clang-format/clang-format-diff.py
 | |
| .. _git-clang-format: https://reviews.llvm.org/source/clang/browse/cfe/trunk/tools/clang-format/git-clang-format
 | |
| .. _LLVM's Phabricator: https://reviews.llvm.org/
 | |
| .. _LLVM's Open Projects page: https://llvm.org/OpenProjects.html#what
 | |
| .. _LLVM Developer's mailing list: http://lists.llvm.org/mailman/listinfo/llvm-dev
 |