blob: 94268e82e6e97206b1806515131f506908065895 [file] [log] [blame]
Chris Lattnerde9a4f52007-12-13 05:42:27 +00001<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
2 "http://www.w3.org/TR/html4/strict.dtd">
Kevinaef89fc2007-10-06 01:28:23 +00003<html>
Kevinbc8e50f2007-10-05 21:18:52 +00004<head>
Chris Lattnerde9a4f52007-12-13 05:42:27 +00005 <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" />
Kevinbc8e50f2007-10-05 21:18:52 +00009</head>
10<body>
Chris Lattnerde9a4f52007-12-13 05:42:27 +000011
Kevinbc8e50f2007-10-05 21:18:52 +000012<!--#include virtual="menu.html.incl"-->
Chris Lattnerde9a4f52007-12-13 05:42:27 +000013
Kevinbc8e50f2007-10-05 21:18:52 +000014<div id="content">
Chris Lattnerde9a4f52007-12-13 05:42:27 +000015
Chris Lattner623ec622007-12-13 06:20:15 +000016<h1>Getting Involved with the Clang Project</h1>
Chris Lattnerde9a4f52007-12-13 05:42:27 +000017
Chris Lattner623ec622007-12-13 06:20:15 +000018<p>Once you have <a href="get_started.html">checked out and built</a> clang and
19played around with it, you might be wondering what you can do to make it better
20and contribute to its development. Alternatively, maybe you just want to follow
21the development of the project to see it progress.
22</p>
Chris Lattnerde9a4f52007-12-13 05:42:27 +000023
Chris Lattner623ec622007-12-13 06:20:15 +000024<h2>Follow what's going on</h2>
Chris Lattnera08ee282007-10-06 05:42:47 +000025
Chris Lattnerde9a4f52007-12-13 05:42:27 +000026<p>Clang is a subproject of the <a href="http://llvm.org">LLVM Project</a>, but
27has its own mailing lists because the communities have people with different
Chris Lattner623ec622007-12-13 06:20:15 +000028interests. The two clang lists are:</p>
Chris Lattnerde9a4f52007-12-13 05:42:27 +000029
Kevinbc8e50f2007-10-05 21:18:52 +000030<ul>
Chris Lattnerde9a4f52007-12-13 05:42:27 +000031<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 Lattner623ec622007-12-13 06:20:15 +000035This list is for everything else clang related (questions and answers, bug
36reports, etc).</li>
37
Kevinbc8e50f2007-10-05 21:18:52 +000038</ul>
Chris Lattnerde9a4f52007-12-13 05:42:27 +000039
Chris Lattner623ec622007-12-13 06:20:15 +000040<p>If you are interested in clang only, these two lists should be all
41you need. If you are interested in the LLVM optimizer and code generator,
42please consider signing up for <a
43href="http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev">llvmdev</a> and <a
44href="http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits">llvm-commits</a>
45as well.</p>
Kevinbc8e50f2007-10-05 21:18:52 +000046
47
Chris Lattner623ec622007-12-13 06:20:15 +000048<p>The best way to talk with other developers on the project is through the <a
49href="http://lists.cs.uiuc.edu/mailman/listinfo/cfe-dev">cfe-dev mailing
50list</a>. The clang mailing list is a very friendly place and we welcome
51newcomers. In addition to the cfe-dev list, a significant amount of design
52discussion takes place on the <a
53href="http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits">cfe-commits mailing
54list</a>. All of these lists have archives, so you can browse through previous
55discussions or follow the list development on the web if you prefer.</p>
Kevinbc8e50f2007-10-05 21:18:52 +000056
57
Chris Lattner623ec622007-12-13 06:20:15 +000058<h2>Open Projects</h2>
Kevinbc8e50f2007-10-05 21:18:52 +000059
Chris Lattner36952d92007-12-13 06:41:15 +000060<p>Here are a few tasks that are available for newcomers to work on, depending
61on what your interests are. This list is provided to generate ideas, it is not
62intended to be comprehensive. Please ask on cfe-dev for more specifics or to
63verify that one of these isn't already completed. :)</p>
Kevinbc8e50f2007-10-05 21:18:52 +000064
Chris Lattnera08ee282007-10-06 05:42:47 +000065<ul>
Chris Lattner623ec622007-12-13 06:20:15 +000066<li><b>Compile your favorite C/ObjC project with "clang -fsyntax-only"</b>:
67the clang type checker and verifier is quite close to complete (but not bug
68free!) for C and Objective C. We appreciate all reports of code that is
69rejected by the front-end, and if you notice invalid code that is not rejected
Chris Lattner80a75912007-12-19 22:17:19 +000070by clang, that is also very important to us. For make-based projects,
Nico Weber647d3fe2008-08-26 21:36:37 +000071the <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 Lattner623ec622007-12-13 06:20:15 +000073
Chris Lattner36952d92007-12-13 06:41:15 +000074<li><b>Compile your favorite C project with "clang -emit-llvm"</b>:
75The clang to LLVM converter is getting more mature, so you may be able to
Chris Lattner80a75912007-12-19 22:17:19 +000076compile it. If not, please let us know. Again,
Nico Weber647d3fe2008-08-26 21:36:37 +000077<a href="get_started.html#ccc"><code>ccc</code></a> might help you. Once it
78compiles it should run. If not, that's a bug :)</li>
Chris Lattner623ec622007-12-13 06:20:15 +000079
Chris Lattnerd5ab36e2009-02-03 21:51:37 +000080<li><b>Debug Info Generation</b>: -emit-llvm doesn't fully support emission
Chris Lattner2fbb0492007-12-13 17:25:36 +000081of <a href="http://llvm.org/docs/SourceLevelDebugging.html">LLVM debug info</a>
Chris Lattnerd5ab36e2009-02-03 21:51:37 +000082(which the code generator turns into DWARF). The missing pieces are pretty
83minor at this point.</li>
84
Chris Lattner0a5166c2009-02-08 20:41:34 +000085<li><b>Overflow detection</b>: an interesting project would be to add a -ftrapv
Chris Lattnerd5ab36e2009-02-03 21:51:37 +000086compilation mode that causes -emit-llvm to generate overflow tests for all
87signed integer arithmetic operators, and call abort if they overflow. Overflow
88is undefined in C and hard for people to reason about. LLVM IR also has
89intrinsics for generating arithmetic with overflow checks directly.</li>
Chris Lattner2fbb0492007-12-13 17:25:36 +000090
Chris Lattner0a5166c2009-02-08 20:41:34 +000091<li><b>Undefined behavior checking</b>: similar to adding -ftrapv, codegen could
92insert runtime checks for all sorts of different undefined behaviors, from
93reading uninitialized variables, buffer overflows, and many other things. This
94checking would be expensive, but the optimizers could eliminate many of the
95checks in some cases, and it would be very interesting to test code in this mode
96for certain crowds of people. Because the inserted code is coming from clang,
97the "abort" message could be very detailed about exactly what went wrong.</li>
98
Chris Lattner36952d92007-12-13 06:41:15 +000099<li><b>Continue work on C++ support</b>: Implementing all of C++ is a very big
Argyrios Kyrtzidis1e1cbbd2008-07-03 08:21:51 +0000100job, but there are lots of little pieces that can be picked off and implemented.
101See the <a href="cxx_status.html">C++ status report page</a> to find out what is
102missing and what is already at least partially supported.</li>
Chris Lattner36952d92007-12-13 06:41:15 +0000103
104<li><b>Improve target support</b>: The current target interfaces are heavily
105stubbed out and need to be implemented fully. See the FIXME's in TargetInfo.
106Additionally, the actual target implementations (instances of TargetInfoImpl)
107also need to be completed. This includes defining builtin macros for linux
108targets and other stuff like that.</li>
109
110<li><b>Implement 'builtin' headers</b>: GCC provides a bunch of builtin headers,
111such as stdbool.h, iso646.h, float.h, limits.h, etc. It also provides a bunch
112of target-specific headers like altivec.h and xmmintrin.h. clang will
113eventually 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
115improvement</a> that can be made to the GCC ones!) that are clean-room
116implemented to avoid GPL taint.</li>
117
118<li><b>Implement a clang 'libgcc'</b>: As with the headers, clang (or a another
119related subproject of llvm) will need to implement the features that libgcc
120provides. 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
122a 32-bit chip). It also provides software floating point support and many other
123things. I don't think that there is a specific licensing reason to reimplement
124libgcc, but there is a lot of room for improvement in it in many
125dimensions.</li>
126
Ted Kremenekffc8a612008-07-25 23:34:29 +0000127<li><b>Implement an tool to generate code documentation</b>: Clang's
128library-based design allows it to be used by a variety of tools that reason
129about source code. One great application of Clang would be to build an
130auto-documentation system like doxygen that generates code documentation from
131source code. The advantage of using Clang for such a tool is that the tool would
132use the same preprocessor/parser/ASTs as the compiler itself, giving it a very
Chris Lattner26bc8332008-07-27 06:13:09 +0000133rich understanding of the code.</li>
Chris Lattner623ec622007-12-13 06:20:15 +0000134
Chris Lattner59f0a322008-07-27 06:10:19 +0000135<li><b>Use clang libraries to implement better versions of existing tools</b>:
136Clang is built as a set of libraries, which means that it is possible to
137implement capabilities similar to other source language tools, improving them
138in various ways. Two examples are <a href="http://distcc.samba.org/">distcc</a>
139and the <a href="http://delta.tigris.org/">delta testcase reduction tool</a>.
140The former can be improved to scale better and be more efficient. The later
141could also be faster and more efficient at reducing C-family programs if built
142on the clang preprocessor.</li>
143
Chris Lattner6bd2d272008-07-29 03:46:33 +0000144<li><b>Use clang libraries to extend Ragel with a JIT</b>: <a
145href="http://research.cs.queensu.ca/~thurston/ragel/">Ragel</a> is a state
146machine compiler that lets you embed C code into state machines and generate
147C code. It would be relatively easy to turn this into a JIT compiler using
148LLVM.</li>
149
Daniel Dunbar0df8c082008-08-22 20:18:22 +0000150<li><b>Self-testing using clang</b>: There are several neat ways to
151improve 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 Lattner26bc8332008-07-27 06:13:09 +0000165</ul>
166
Chris Lattner36952d92007-12-13 06:41:15 +0000167<p>If you hit a bug with clang, it is very useful for us if you reduce the code
168that demonstrates the problem down to something small. There are many ways to
Ted Kremenek3cbe4282007-12-13 16:41:01 +0000169do this; ask on cfe-dev for advice.</p>
Chris Lattner36952d92007-12-13 06:41:15 +0000170
Kevinbc8e50f2007-10-05 21:18:52 +0000171</div>
172</body>
Chris Lattnerae3758d2007-10-11 00:38:03 +0000173</html>