blob: 98d86602fb4de5aa609a6a84876b6ccab66ea46b [file] [log] [blame]
Douglas Gregor20121732009-03-13 15:06:27 +00001<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
2 "http://www.w3.org/TR/html4/strict.dtd">
3<html>
4<head>
Benjamin Kramereaa262b2012-01-15 15:26:07 +00005 <META http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
Douglas Gregor20121732009-03-13 15:06:27 +00006 <title>Clang - Get Involved</title>
Benjamin Kramereaa262b2012-01-15 15:26:07 +00007 <link type="text/css" rel="stylesheet" href="menu.css">
8 <link type="text/css" rel="stylesheet" href="content.css">
Douglas Gregor20121732009-03-13 15:06:27 +00009</head>
10<body>
11
12<!--#include virtual="menu.html.incl"-->
13
14<div id="content">
15
16<h1>Open Clang Projects</h1>
17
18<p>Here are a few tasks that are available for newcomers to work on, depending
19on what your interests are. This list is provided to generate ideas, it is not
20intended to be comprehensive. Please ask on cfe-dev for more specifics or to
21verify that one of these isn't already completed. :)</p>
22
23<ul>
Douglas Gregor3afbdbd2009-06-11 14:53:37 +000024<li><b>Undefined behavior checking</b>: CodeGen could
Douglas Gregor20121732009-03-13 15:06:27 +000025insert runtime checks for all sorts of different undefined behaviors, from
26reading uninitialized variables, buffer overflows, and many other things. This
27checking would be expensive, but the optimizers could eliminate many of the
28checks in some cases, and it would be very interesting to test code in this mode
29for certain crowds of people. Because the inserted code is coming from clang,
30the "abort" message could be very detailed about exactly what went wrong.</li>
31
Douglas Gregor20121732009-03-13 15:06:27 +000032<li><b>Improve target support</b>: The current target interfaces are heavily
33stubbed out and need to be implemented fully. See the FIXME's in TargetInfo.
34Additionally, the actual target implementations (instances of TargetInfoImpl)
35also need to be completed.</li>
36
37<li><b>Implement an tool to generate code documentation</b>: Clang's
38library-based design allows it to be used by a variety of tools that reason
39about source code. One great application of Clang would be to build an
40auto-documentation system like doxygen that generates code documentation from
41source code. The advantage of using Clang for such a tool is that the tool would
42use the same preprocessor/parser/ASTs as the compiler itself, giving it a very
43rich understanding of the code.</li>
44
45<li><b>Use clang libraries to implement better versions of existing tools</b>:
46Clang is built as a set of libraries, which means that it is possible to
47implement capabilities similar to other source language tools, improving them
Chris Lattnerbff5d862010-12-06 19:46:27 +000048in various ways. Three examples are <a
49href="http://distcc.samba.org/">distcc</a>, the <a
50href="http://delta.tigris.org/">delta testcase reduction tool</a>, and the
51"indent" source reformatting tool.
52distcc can be improved to scale better and be more efficient. Delta could be
53faster and more efficient at reducing C-family programs if built on the clang
54preprocessor, indent could do proper formatting for complex C++ features, and it
55would be straight-forward to extend a clang-based implementation to handle
56simple structural rules like those in <a
57href="http://llvm.org/docs/CodingStandards.html#hl_earlyexit">the LLVM coding
58standards</a>.</li>
Douglas Gregor20121732009-03-13 15:06:27 +000059
60<li><b>Use clang libraries to extend Ragel with a JIT</b>: <a
61href="http://research.cs.queensu.ca/~thurston/ragel/">Ragel</a> is a state
62machine compiler that lets you embed C code into state machines and generate
63C code. It would be relatively easy to turn this into a JIT compiler using
64LLVM.</li>
65
66<li><b>Self-testing using clang</b>: There are several neat ways to
67improve the quality of clang by self-testing. Some examples:
68<ul>
69 <li>Improve the reliability of AST printing and serialization by
70 ensuring that the AST produced by clang on an input doesn't change
71 when it is reparsed or unserialized.
72
73 <li>Improve parser reliability and error generation by automatically
74 or randomly changing the input checking that clang doesn't crash and
75 that it doesn't generate excessive errors for small input
76 changes. Manipulating the input at both the text and token levels is
77 likely to produce interesting test cases.
78</ul>
79</li>
80
David Blaikiee35b3aa2011-10-14 07:58:10 +000081<li><b>Continue work on C++'11 support</b>:
82 C++'98 is feature complete, but there is still a lot of C++'11 features to
Chris Lattnerbff5d862010-12-06 19:46:27 +000083 implement. Please see the <a href="cxx_status.html">C++ status report
84 page</a> to find out what is missing.</li>
Douglas Gregor20121732009-03-13 15:06:27 +000085
Daniel Dunbarbf4ca9092009-10-17 20:43:50 +000086<li><b>StringRef'ize APIs</b>: A thankless but incredibly useful project is
87StringRef'izing (converting to use <tt>llvm::StringRef</tt> instead of <tt>const
88char *</tt> or <tt>std::string</tt>) various clang interfaces. This generally
89simplifies the code and makes it more efficient.</li>
90
Daniel Dunbard512efa2009-10-17 21:50:11 +000091<li><b>Universal Driver</b>: Clang is inherently a cross compiler. We would like
92to define a new model for cross compilation which provides a great user
93experience -- it should be easy to cross compile applications, install support
94for new architectures, access different compilers and tools, and be consistent
95across different platforms. See the <a href="UniversalDriver.html">Universal
96Driver</a> web page for more information.</li>
Douglas Gregor20cbd052011-03-09 16:27:48 +000097
98<li><b>XML Representation of ASTs</b>: Clang maintains a rich Abstract Syntax Tree that describes the program. Clang could emit an XML document that describes the program, which others tools could consume rather than being tied directly to the Clang binary.The XML representation needs to meet several requirements:
99 <ul>
100 <li><i>General</i>, so that it's able to represent C/C++/Objective-C abstractly, and isn't tied to the specific internal ASTs that Clang uses.</li>
101 <li><i>Documented</i>, with appropriate Schema against which the output of Clang's XML formatter can be verified.</li>
102 <li><i>Stable</i> across Clang versions.</li>
103 </ul></li>
Renato Golin48905822013-02-27 21:28:29 +0000104
105<li><b>Configuration Manager</b>: Clang/LLVM works on a large number of
106architectures and operating systems and can cross-compile to a similarly large
107number of configurations, but the pitfalls of chosing the command-line
108options, making sure the right sub-architecture is chosen and that the correct
109optional elements of your particular system can be a pain.
110
111<p>A tool that would investigate hosts and targets, and store the configuration
112in files that can later be used by Clang itself to avoid command-line options,
113especially the ones regarding which target options to use, would greatle alleviate
114this problem. A simple tool, with little or no dependency on LLVM itself, that
115will investigate a target architecture by probing hardware, software, libraries
116and compiling and executing code to identify all properties that would be relevant
117to command-line options (VFP, SSE, NEON, ARM vs. Thumb etc), triple settings etc.</p>
118
119<p>The first stage is to build a CFLAGS for Clang that would produce code on the
120current Host to the identified Target.</p>
121
122<p>The second stage would be to produce a configuration file (that can be used
123independently of the Host) so that Clang can read it and not need a gazillion
124of command-line options. Such file should be simple JSON / INI or anything that
Renato Golin05bbce72013-02-27 23:21:44 +0000125a text editor could change.</p>
Gabor Greif6a46da22010-10-16 09:40:21 +0000126</ul>
Daniel Dunbard512efa2009-10-17 21:50:11 +0000127
Renato Golin48905822013-02-27 21:28:29 +0000128<p>If you hit a bug with clang, it is very useful for us if you reduce the code
129that demonstrates the problem down to something small. There are many ways to
130do this; ask on cfe-dev for advice.</p>
131
Douglas Gregor20121732009-03-13 15:06:27 +0000132</div>
133</body>
134</html>