Skip to content

Latest commit

 

History

History
194 lines (143 loc) · 7.75 KB

Contributing.rst

File metadata and controls

194 lines (143 loc) · 7.75 KB

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 Forum or, for a more interactive chat, go to our Discord server.

If you want to contribute code, please familiarize yourself with the :doc:`DeveloperPolicy`.

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.

If you are interested in contributing code to LLVM, bugs labeled with the good first issue 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 comment on it 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 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).

There is a separate process to submit security-related bugs, see :ref:`report-security-issue`.

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 post on the Forum, so that we know the project is being worked on.

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.
  • have a single commit, up-to-date with the upstream origin/main branch, and don't have merges.

Before sending a patch for review, please also try to ensure it is formatted properly. We use clang-format for this, which has git integration through the git-clang-format script. On some systems, it may already be installed (or be installable via your package manager). If so, you can simply run it -- the following command will format only the code changed in the most recent commit:

% git clang-format HEAD~1

Note that this modifies the files, but doesn't commit them -- you'll likely want to run

% git commit --amend -a

in order to update the last commit with all pending changes.

Note

If you don't already have clang-format or git clang-format installed on your system, the clang-format binary will be built alongside clang, and the git integration can be run from clang/tools/clang-format/git-clang-format.

The LLVM project has migrated to GitHub Pull Requests as its review process. For more information about the workflow of using GitHub Pull Requests see our :ref:`GitHub <github-reviews>` documentation. We still have an read-only LLVM's Phabricator instance.

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 maintainers (see Maintainers.rst) and other people doing work in the area your patch touches. Github will normally suggest some reviewers based on rules or people that have worked on the code before. If you are a new contributor, you will not be able to select reviewers in such a way, in which case you can still get the attention of potential reviewers by CC'ing them in a comment -- just @name them.

If you have received no comments on your patch for a week, you can request a review by 'ping'ing the GitHub PR with "Ping". The common courtesy 'ping' rate is once a week. Please remember that you are asking for valuable time from other professional developers. Finally, if you do not have commit access, please let people know during the review and someone should commit it on your behalf once it has been accepted.

For more information on LLVM's code-review process, please see :doc:`CodeReview`.

Once a patch is reviewed, you can select the "Squash and merge" button in the GitHub web interface.

When pushing directly from the command-line to the main branch, you will need to rebase your change. LLVM has a linear-history policy, which means that merge commits are not allowed and the main branch is configured to reject pushes that include merges.

GitHub will display a message that looks like this:

remote: Bypassed rule violations for refs/heads/main:
remote:
remote: - Required status check “buildkite/github-pull-requests” is expected.

This can seem scary, but this is just an artifact of the GitHub setup: it is intended as a warning for people merging pull-requests with failing CI. We can't disable it for people pushing on the command-line.

Please ask for help if you're having trouble with your particular git workflow.

We include an optional pre-push hook that run some sanity checks on the revisions you are about to push and ask confirmation if you push multiple commits at once. You can set it up (on Unix systems) by running from the repository root:

% ln -sf ../../llvm/utils/git/pre-push.py .git/hooks/pre-push

: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.
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.
Intro to LLVM
Book chapter providing a compiler hacker's introduction to LLVM.