Chris Lattner | de9a4f5 | 2007-12-13 05:42:27 +0000 | [diff] [blame] | 1 | <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
|
| 2 | "http://www.w3.org/TR/html4/strict.dtd">
|
Kevin | aef89fc | 2007-10-06 01:28:23 +0000 | [diff] [blame] | 3 | <html>
|
Kevin | bc8e50f | 2007-10-05 21:18:52 +0000 | [diff] [blame] | 4 | <head>
|
Chris Lattner | de9a4f5 | 2007-12-13 05:42:27 +0000 | [diff] [blame] | 5 | <META http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
|
| 6 | <title>Clang - Get Involved</title>
|
| 7 | <link type="text/css" rel="stylesheet" href="menu.css" />
|
| 8 | <link type="text/css" rel="stylesheet" href="content.css" />
|
Kevin | bc8e50f | 2007-10-05 21:18:52 +0000 | [diff] [blame] | 9 | </head>
|
| 10 | <body>
|
Chris Lattner | de9a4f5 | 2007-12-13 05:42:27 +0000 | [diff] [blame] | 11 |
|
Kevin | bc8e50f | 2007-10-05 21:18:52 +0000 | [diff] [blame] | 12 | <!--#include virtual="menu.html.incl"-->
|
Chris Lattner | de9a4f5 | 2007-12-13 05:42:27 +0000 | [diff] [blame] | 13 |
|
Kevin | bc8e50f | 2007-10-05 21:18:52 +0000 | [diff] [blame] | 14 | <div id="content">
|
Chris Lattner | de9a4f5 | 2007-12-13 05:42:27 +0000 | [diff] [blame] | 15 |
|
Chris Lattner | 623ec62 | 2007-12-13 06:20:15 +0000 | [diff] [blame] | 16 | <h1>Getting Involved with the Clang Project</h1>
|
Chris Lattner | de9a4f5 | 2007-12-13 05:42:27 +0000 | [diff] [blame] | 17 |
|
Chris Lattner | 623ec62 | 2007-12-13 06:20:15 +0000 | [diff] [blame] | 18 | <p>Once you have <a href="get_started.html">checked out and built</a> clang and
|
| 19 | played around with it, you might be wondering what you can do to make it better
|
| 20 | and contribute to its development. Alternatively, maybe you just want to follow
|
| 21 | the development of the project to see it progress.
|
| 22 | </p>
|
Chris Lattner | de9a4f5 | 2007-12-13 05:42:27 +0000 | [diff] [blame] | 23 |
|
Chris Lattner | 623ec62 | 2007-12-13 06:20:15 +0000 | [diff] [blame] | 24 | <h2>Follow what's going on</h2>
|
Chris Lattner | a08ee28 | 2007-10-06 05:42:47 +0000 | [diff] [blame] | 25 |
|
Chris Lattner | de9a4f5 | 2007-12-13 05:42:27 +0000 | [diff] [blame] | 26 | <p>Clang is a subproject of the <a href="http://llvm.org">LLVM Project</a>, but
|
| 27 | has its own mailing lists because the communities have people with different
|
Chris Lattner | 623ec62 | 2007-12-13 06:20:15 +0000 | [diff] [blame] | 28 | interests. The two clang lists are:</p>
|
Chris Lattner | de9a4f5 | 2007-12-13 05:42:27 +0000 | [diff] [blame] | 29 |
|
Kevin | bc8e50f | 2007-10-05 21:18:52 +0000 | [diff] [blame] | 30 | <ul>
|
Chris Lattner | de9a4f5 | 2007-12-13 05:42:27 +0000 | [diff] [blame] | 31 | <li><a href="http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits">cfe-commits
|
| 32 | </a> - This list is for patch submission/discussion.</li>
|
| 33 |
|
| 34 | <li><a href="http://lists.cs.uiuc.edu/mailman/listinfo/cfe-dev">cfe-dev</a> -
|
Chris Lattner | 623ec62 | 2007-12-13 06:20:15 +0000 | [diff] [blame] | 35 | This list is for everything else clang related (questions and answers, bug
|
| 36 | reports, etc).</li>
|
| 37 |
|
Kevin | bc8e50f | 2007-10-05 21:18:52 +0000 | [diff] [blame] | 38 | </ul>
|
Chris Lattner | de9a4f5 | 2007-12-13 05:42:27 +0000 | [diff] [blame] | 39 |
|
Chris Lattner | 623ec62 | 2007-12-13 06:20:15 +0000 | [diff] [blame] | 40 | <p>If you are interested in clang only, these two lists should be all
|
| 41 | you need. If you are interested in the LLVM optimizer and code generator,
|
| 42 | please consider signing up for <a
|
| 43 | href="http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev">llvmdev</a> and <a
|
| 44 | href="http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits">llvm-commits</a>
|
| 45 | as well.</p>
|
Kevin | bc8e50f | 2007-10-05 21:18:52 +0000 | [diff] [blame] | 46 |
|
| 47 |
|
Chris Lattner | 623ec62 | 2007-12-13 06:20:15 +0000 | [diff] [blame] | 48 | <p>The best way to talk with other developers on the project is through the <a
|
| 49 | href="http://lists.cs.uiuc.edu/mailman/listinfo/cfe-dev">cfe-dev mailing
|
| 50 | list</a>. The clang mailing list is a very friendly place and we welcome
|
| 51 | newcomers. In addition to the cfe-dev list, a significant amount of design
|
| 52 | discussion takes place on the <a
|
| 53 | href="http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits">cfe-commits mailing
|
| 54 | list</a>. All of these lists have archives, so you can browse through previous
|
| 55 | discussions or follow the list development on the web if you prefer.</p>
|
Kevin | bc8e50f | 2007-10-05 21:18:52 +0000 | [diff] [blame] | 56 |
|
| 57 |
|
Chris Lattner | 623ec62 | 2007-12-13 06:20:15 +0000 | [diff] [blame] | 58 | <h2>Open Projects</h2>
|
Kevin | bc8e50f | 2007-10-05 21:18:52 +0000 | [diff] [blame] | 59 |
|
Chris Lattner | 36952d9 | 2007-12-13 06:41:15 +0000 | [diff] [blame] | 60 | <p>Here are a few tasks that are available for newcomers to work on, depending
|
| 61 | on what your interests are. This list is provided to generate ideas, it is not
|
| 62 | intended to be comprehensive. Please ask on cfe-dev for more specifics or to
|
| 63 | verify that one of these isn't already completed. :)</p>
|
Kevin | bc8e50f | 2007-10-05 21:18:52 +0000 | [diff] [blame] | 64 |
|
Chris Lattner | a08ee28 | 2007-10-06 05:42:47 +0000 | [diff] [blame] | 65 | <ul>
|
Chris Lattner | 623ec62 | 2007-12-13 06:20:15 +0000 | [diff] [blame] | 66 | <li><b>Compile your favorite C/ObjC project with "clang -fsyntax-only"</b>:
|
| 67 | the clang type checker and verifier is quite close to complete (but not bug
|
| 68 | free!) for C and Objective C. We appreciate all reports of code that is
|
| 69 | rejected by the front-end, and if you notice invalid code that is not rejected
|
Chris Lattner | 80a7591 | 2007-12-19 22:17:19 +0000 | [diff] [blame] | 70 | by clang, that is also very important to us. For make-based projects,
|
Nico Weber | 647d3fe | 2008-08-26 21:36:37 +0000 | [diff] [blame] | 71 | the <a href="get_started.html#ccc"><code>ccc</code></a> script in clang's
|
| 72 | <tt>utils</tt> folder might help to get you started.</li>
|
Chris Lattner | 623ec62 | 2007-12-13 06:20:15 +0000 | [diff] [blame] | 73 |
|
Chris Lattner | 36952d9 | 2007-12-13 06:41:15 +0000 | [diff] [blame] | 74 | <li><b>Compile your favorite C project with "clang -emit-llvm"</b>:
|
| 75 | The clang to LLVM converter is getting more mature, so you may be able to
|
Chris Lattner | 80a7591 | 2007-12-19 22:17:19 +0000 | [diff] [blame] | 76 | compile it. If not, please let us know. Again,
|
Nico Weber | 647d3fe | 2008-08-26 21:36:37 +0000 | [diff] [blame] | 77 | <a href="get_started.html#ccc"><code>ccc</code></a> might help you. Once it
|
| 78 | compiles it should run. If not, that's a bug :)</li>
|
Chris Lattner | 623ec62 | 2007-12-13 06:20:15 +0000 | [diff] [blame] | 79 |
|
Chris Lattner | d5ab36e | 2009-02-03 21:51:37 +0000 | [diff] [blame] | 80 | <li><b>Debug Info Generation</b>: -emit-llvm doesn't fully support emission
|
Chris Lattner | 2fbb049 | 2007-12-13 17:25:36 +0000 | [diff] [blame] | 81 | of <a href="http://llvm.org/docs/SourceLevelDebugging.html">LLVM debug info</a>
|
Chris Lattner | d5ab36e | 2009-02-03 21:51:37 +0000 | [diff] [blame] | 82 | (which the code generator turns into DWARF). The missing pieces are pretty
|
| 83 | minor at this point.</li>
|
| 84 |
|
Chris Lattner | 0a5166c | 2009-02-08 20:41:34 +0000 | [diff] [blame] | 85 | <li><b>Overflow detection</b>: an interesting project would be to add a -ftrapv
|
Chris Lattner | d5ab36e | 2009-02-03 21:51:37 +0000 | [diff] [blame] | 86 | compilation mode that causes -emit-llvm to generate overflow tests for all
|
| 87 | signed integer arithmetic operators, and call abort if they overflow. Overflow
|
| 88 | is undefined in C and hard for people to reason about. LLVM IR also has
|
| 89 | intrinsics for generating arithmetic with overflow checks directly.</li>
|
Chris Lattner | 2fbb049 | 2007-12-13 17:25:36 +0000 | [diff] [blame] | 90 |
|
Chris Lattner | 0a5166c | 2009-02-08 20:41:34 +0000 | [diff] [blame] | 91 | <li><b>Undefined behavior checking</b>: similar to adding -ftrapv, codegen could
|
| 92 | insert runtime checks for all sorts of different undefined behaviors, from
|
| 93 | reading uninitialized variables, buffer overflows, and many other things. This
|
| 94 | checking would be expensive, but the optimizers could eliminate many of the
|
| 95 | checks in some cases, and it would be very interesting to test code in this mode
|
| 96 | for certain crowds of people. Because the inserted code is coming from clang,
|
| 97 | the "abort" message could be very detailed about exactly what went wrong.</li>
|
| 98 |
|
Chris Lattner | 36952d9 | 2007-12-13 06:41:15 +0000 | [diff] [blame] | 99 | <li><b>Continue work on C++ support</b>: Implementing all of C++ is a very big
|
Argyrios Kyrtzidis | 1e1cbbd | 2008-07-03 08:21:51 +0000 | [diff] [blame] | 100 | job, but there are lots of little pieces that can be picked off and implemented.
|
| 101 | See the <a href="cxx_status.html">C++ status report page</a> to find out what is
|
| 102 | missing and what is already at least partially supported.</li>
|
Chris Lattner | 36952d9 | 2007-12-13 06:41:15 +0000 | [diff] [blame] | 103 |
|
| 104 | <li><b>Improve target support</b>: The current target interfaces are heavily
|
| 105 | stubbed out and need to be implemented fully. See the FIXME's in TargetInfo.
|
| 106 | Additionally, the actual target implementations (instances of TargetInfoImpl)
|
| 107 | also need to be completed. This includes defining builtin macros for linux
|
| 108 | targets and other stuff like that.</li>
|
| 109 |
|
| 110 | <li><b>Implement 'builtin' headers</b>: GCC provides a bunch of builtin headers,
|
| 111 | such as stdbool.h, iso646.h, float.h, limits.h, etc. It also provides a bunch
|
| 112 | of target-specific headers like altivec.h and xmmintrin.h. clang will
|
| 113 | eventually need to provide its own copies of these (and there is a <a href=
|
| 114 | "http://lists.cs.uiuc.edu/pipermail/cfe-dev/2007-December/000560.html">lot of
|
| 115 | improvement</a> that can be made to the GCC ones!) that are clean-room
|
| 116 | implemented to avoid GPL taint.</li>
|
| 117 |
|
| 118 | <li><b>Implement a clang 'libgcc'</b>: As with the headers, clang (or a another
|
| 119 | related subproject of llvm) will need to implement the features that libgcc
|
| 120 | provides. libgcc provides a bunch of routines the code generator uses for
|
| 121 | "fallback" when the chip doesn't support some operation (e.g. 64-bit divide on
|
| 122 | a 32-bit chip). It also provides software floating point support and many other
|
| 123 | things. I don't think that there is a specific licensing reason to reimplement
|
| 124 | libgcc, but there is a lot of room for improvement in it in many
|
| 125 | dimensions.</li>
|
| 126 |
|
Ted Kremenek | ffc8a61 | 2008-07-25 23:34:29 +0000 | [diff] [blame] | 127 | <li><b>Implement an tool to generate code documentation</b>: Clang's
|
| 128 | library-based design allows it to be used by a variety of tools that reason
|
| 129 | about source code. One great application of Clang would be to build an
|
| 130 | auto-documentation system like doxygen that generates code documentation from
|
| 131 | source code. The advantage of using Clang for such a tool is that the tool would
|
| 132 | use the same preprocessor/parser/ASTs as the compiler itself, giving it a very
|
Chris Lattner | 26bc833 | 2008-07-27 06:13:09 +0000 | [diff] [blame] | 133 | rich understanding of the code.</li>
|
Chris Lattner | 623ec62 | 2007-12-13 06:20:15 +0000 | [diff] [blame] | 134 |
|
Chris Lattner | 59f0a32 | 2008-07-27 06:10:19 +0000 | [diff] [blame] | 135 | <li><b>Use clang libraries to implement better versions of existing tools</b>:
|
| 136 | Clang is built as a set of libraries, which means that it is possible to
|
| 137 | implement capabilities similar to other source language tools, improving them
|
| 138 | in various ways. Two examples are <a href="http://distcc.samba.org/">distcc</a>
|
| 139 | and the <a href="http://delta.tigris.org/">delta testcase reduction tool</a>.
|
| 140 | The former can be improved to scale better and be more efficient. The later
|
| 141 | could also be faster and more efficient at reducing C-family programs if built
|
| 142 | on the clang preprocessor.</li>
|
| 143 |
|
Chris Lattner | 6bd2d27 | 2008-07-29 03:46:33 +0000 | [diff] [blame] | 144 | <li><b>Use clang libraries to extend Ragel with a JIT</b>: <a
|
| 145 | href="http://research.cs.queensu.ca/~thurston/ragel/">Ragel</a> is a state
|
| 146 | machine compiler that lets you embed C code into state machines and generate
|
| 147 | C code. It would be relatively easy to turn this into a JIT compiler using
|
| 148 | LLVM.</li>
|
| 149 |
|
Daniel Dunbar | 0df8c08 | 2008-08-22 20:18:22 +0000 | [diff] [blame] | 150 | <li><b>Self-testing using clang</b>: There are several neat ways to
|
| 151 | improve the quality of clang by self-testing. Some examples:
|
| 152 | <ul>
|
| 153 | <li>Improve the reliability of AST printing and serialization by
|
| 154 | ensuring that the AST produced by clang on an input doesn't change
|
| 155 | when it is reparsed or unserialized.
|
| 156 |
|
| 157 | <li>Improve parser reliability and error generation by automatically
|
| 158 | or randomly changing the input checking that clang doesn't crash and
|
| 159 | that it doesn't generate excessive errors for small input
|
| 160 | changes. Manipulating the input at both the text and token levels is
|
| 161 | likely to produce interesting test cases.
|
| 162 | </ul>
|
| 163 | </li>
|
| 164 |
|
Chris Lattner | 26bc833 | 2008-07-27 06:13:09 +0000 | [diff] [blame] | 165 | </ul>
|
| 166 |
|
Chris Lattner | 36952d9 | 2007-12-13 06:41:15 +0000 | [diff] [blame] | 167 | <p>If you hit a bug with clang, it is very useful for us if you reduce the code
|
| 168 | that demonstrates the problem down to something small. There are many ways to
|
Ted Kremenek | 3cbe428 | 2007-12-13 16:41:01 +0000 | [diff] [blame] | 169 | do this; ask on cfe-dev for advice.</p>
|
Chris Lattner | 36952d9 | 2007-12-13 06:41:15 +0000 | [diff] [blame] | 170 |
|
Kevin | bc8e50f | 2007-10-05 21:18:52 +0000 | [diff] [blame] | 171 | </div>
|
| 172 | </body>
|
Chris Lattner | ae3758d | 2007-10-11 00:38:03 +0000 | [diff] [blame] | 173 | </html>
|