Hi,<br>here is my proposal:<br><br>Synopsys<br> The main purpose of this project is implement a clang/llvm based distcc implementation.<br> Distcc means distributed compiler. It can be used as a replacement of gcc.<br>
Clang distcc will support ditributed (over network) compilation to any architecture <br> supported by llvm. The llvm/clang distcc main advantage over original gcc based distcc is<br> performace (less memory, less compile time) and customization.<br>
All these benefit comes from llvm and clang.<br> The new discc will be a compiler driver (or frontend) build from clang and llvm libraries.<br> The driver will have two usage mode: gcc option mode and clang option mode.<br>
So it can be used as a drop in replacement of gcc, and it will handle all distribution and cache task.<br> There will be also an admin daemon, what will support configuration and distributes incoming<br> requests to nodes. In each node will run a distcc deamon, and will handle incoming tasks.<br>
This will do the compilation work.<br> The clang distcc will support languages via clang. So currently C and Objective C will be supported.<br><br>Functionality details<br> Usage:<br> + setup network:<br>
- start the admin deamon, in a node<br> - start distcc deamons in each node<br> - register nodes in admin deamon<br> <br> + setup local:<br> - configure distcc, (setup admin node address)<br>
This will generate a config file.<br> <br> + use: ex: make CC=distcc<br> <br>Implemenation details<br> The development will be done incrementally, from the simplest solution to more complex.<br>
The simplest solution is when all source parsing task is done locally and the built AST<br> is distributed to Node for optimization and code generation and it sends the result back when its done.<br> An advanced solution is when a file sharing protocol is used to share local source files (for including)<br>
and then parsing is done in Node side and file including is done via the file sharing protocol.<br> A more advanced solution is when we caching built ASTs in a central database to prevent<br> parsing and building each time. This is useful in header files case.<br>
So there will be these standalone programs:<br> + distcc, supports gcc options<br> + distcc, supports clang options<br> + distcc daemon for Nodes (network is composed from Nodes, what will do the compilation work)<br>
+ distcc admin daemon (stores information from the distcc Node network)<br><br> All necessary software components are available in llvm/clang sources, but network handling.<br> So there will be a thin network layer implemented for unix and windows platforms.<br>
The new distcc driver will be placed in clang/Driver directory.<br> <br> In caching the cached AST identification can be done with a MD3 sum of the source file including the included<br> files MD3 sum and the options used in parsing (defines).<br>
<br>Development methodology<br> The work will be done via svn. I'll need a clang branch for my work. But it is not required a standalone svn<br> repository will work too.<br> I use ubuntu linux (gutsy gibbon). I'll send a weekly report of project.<br>
I'll write user and developer documentation (html or pdf).<br><br>Project Schedule<br> Before the mid time gsoc evaluation the simplest method will be implemented. The file sharing protocol and<br> caching will be done in second part of soc. But it can be figured out in depth during the first part, when <br>
the simples solution will ready.<br><br>Bio<br> I'm a 23 years old student, studying at the Budapest University of Technology and Economics. I've started programming 7 years<br> ago, and I've been using the C language for 6 years, and the C++ language for 5 years. I've been using opensource software for 7 years.<br>
Compiler programs are one of my passions. I like efficient and clean solutions. I like nice and clean and well documeted API's,<br> like Qt, Ogre3D, llvm, clang. I have stable knowledge of OOP and software engineering.<br>
I like much reusable and clean, easy to understand code.<br> I'm familiar with the following programming languages:<br> - C (6 years)<br> - C++ (5 years)<br> - python (3 years)<br> - java (4 years)<br>
- SML (1 year)<br> - Prolog (1 year)<br> - lua, squirrel<br> - haskell (actual passion)<br> I'm tracking llvm and clang development since last gsoc, beacuse I've recognised llvm in gsoc projects list.<br>
I have an svn copy of llvm and clang since 2007 october. I always compile it. I've readen all docs avalable from llvm and clang.<br> I also know the source code structure and its functionality.<br><br>