<div dir="ltr">Hi Benson,<br><br>You're welcome to the LLVM community!<br><br>I'll try to help but note that I'm no formal position to talk about how LLVM decides about GSoC (I'm a LLVM newcomer anyway).<br>With that said, the rest is _my_ opinion which is partially formed from my experience as a GSoC student.<br><br>> <span style="color:rgb(0,0,0);font-family:Arial;font-size:14.6667px;white-space:pre-wrap">But to be up front about this, I have not done any full scale C++ project
</span><br>Depending on how you define "full-scale", a lot of amazing LLVM contributors have not done a full-scale C++. So, I think no problem there, it's just good to have a relatively good knowledge of C++.<br>Talking about C++ skills, I think they're more important if you want to contribute to Clang than say LLVM middle or back-end. Because for Clang, you have to know a lot of details of the language<br>in order to parse it, type-check it and generate LLVM IR. In most other parts of LLVM, you're only using the language.<br>As a matter of fact, if you have a good knowledge of C++, I believe it's more important to be able to understand and adapt to "nearby" code, than to be an expert in C++.<br>The latter can even be problematic if you start applying C++ craziness while the first is pretty much always needed when working in a team project.<br><br>> <span style="color:rgb(0,0,0);font-family:Arial;font-size:14.6667px;white-space:pre-wrap">1. Do I need to submit a resume/screening/patches? 
</span><br>As far as the resume, in the way that you may usually apply to jobs, no. But I think every good GSoC proposal includes a biography-like section<br>where you basically tell your story in programming and how you fit into the project (in our case, LLVM).<br><br>I'm not sure what you mean by screening.<br><br>As for patches, I don't think they're required but they're super useful. Not because they're some part of unrelated logistics (like "you have to have X patches to be considered").<br>But because submitting good patches is one of the best indicators (if not the best) that you are able to do useful work in this project. :)<br>And they don't only show your technical skills. But also communication skills, independence etc.<br><br>> 2. <span style="color:rgb(0,0,0);font-family:Arial;font-size:14.6667px;white-space:pre-wrap">Although I do have interests in certain projects posted on you website(Implement missing tab completion, createLoopPass, and PostDominatorTree), I am uncertain if I have enough expertise to decide what would be an appropriate project to contribute to given my current knowledge and experience.
</span><br>This is kind of a generic sentence.<br>I'd say, start with finding a project that you're truly interested in. Then, try to study it, understand the context and the problem.<br>You don't need to get very far, that's totally ok. You can then do a post (either here or on Discourse: <a href="https://llvm.discourse.group/c/community/gsoc/32">https://llvm.discourse.group/c/community/gsoc/32</a>)<br>for this specific project (you can do posts for multiple projects).<br>Hopefully, by discussing with people (and mentors) and understanding what the project is asking better,<br>you can find if you want to do it or not. Certainly, the mentors of the project can guide you through.<br><br><span style="color:rgb(0,0,0);font-family:Arial;font-size:14.6667px;white-space:pre-wrap">3. The GCC GSoC website suggested checking out their source code, compiling and running their test suite. Can I do something similar for LLVM?
</span><br>Yes, totally. I'm not familiar with GCC internals but running the LLVM suite is super easy (so easy that you don't really learn anything by doing it :P )<br>So, the LLVM project has moved to a common repository: <a href="https://github.com/llvm/llvm-project">https://github.com/llvm/llvm-project</a><br>You can clone the project and then use CMake to build it. The cmake configuration for LLVM has a bunch of flags: <a href="https://llvm.org/docs/CMake.html">https://llvm.org/docs/CMake.html</a><br>and you may get lost. So, I'll say start simple:<br>Go to the llvm-project dir (the one you cloned) and do:<br>cmake ./llvm -DLLVM_ENABLE_PROJECTS="clang" -DCMAKE_BUILD_TYPE=Release -DLLVM_ENABLE_ASSERTIONS=ON -DLLVM_TARGETS_TO_BUILD="X86"<br><br>In the link above you can read what the flags do. llvm middle / back-end (i.e. opt / llc, ask if you don't know what these mean) is always built. But to build clang<br>we have to enable it explicitly. We set build type to release because doing a debug build will take a lot of time and a lot of space. Also, when starting out,<br>you probably don't need it. We enable assertions mostly because you can use the -debug option say in opt and see debug prints.<br>Finally, we only build for x86 arch because that's probably what you have and you don't need any other for now.<br><br>Hit enter and once the configuration is complete you can do:<br>make<br>or<br>make -j<number of threads>    <-- this is faster but limit it depending on your systemS<br><br>When that's finished, the llvm-project/bin/ dir will have executables like clang, clang++, opt, llc etc.<br>Which you can run (also ask if you don't know what to do with them. With clang you probably will know, it's like invoking<br>most compilers like gcc to compile .c / .cpp files).<br><br>To run the test suite, you can go to llvm-project/llvm/test and do:<br><dir of llvm-project>/bin/llvm-lit .<br>That will run only llvm's test suite but you'll get an idea.<br><br>Also, you can watch these videos:<br><a href="https://www.youtube.com/watch?v=J5xExRGaIIY">https://www.youtube.com/watch?v=J5xExRGaIIY</a><br><a href="https://www.youtube.com/watch?v=5kkMpJpIGYU">https://www.youtube.com/watch?v=5kkMpJpIGYU</a><br><br>Hope this helped!<br><br>Kind regards,<br>Stefanos Baziotis</div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">Στις Σάβ, 14 Μαρ 2020 στις 2:04 π.μ., ο/η Benson Bin Bin Li via llvm-dev <<a href="mailto:llvm-dev@lists.llvm.org">llvm-dev@lists.llvm.org</a>> έγραψε:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="ltr"><p dir="ltr" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt" id="gmail-m_-8466928840379538763gmail-docs-internal-guid-2a0d31dc-7fff-9297-e699-ad2df8792b10"><span style="font-size:11pt;font-family:Arial;color:rgb(0,0,0);background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre-wrap">Dear LLVM Team,</span></p><br><p dir="ltr" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt"><span style="font-size:11pt;font-family:Arial;color:rgb(0,0,0);background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre-wrap">I would like to contribute to/participate in LLVM’s GSOC, because I would very much like to combine my knowledge of graph theory/algorithms and my interest in C++ together. Contributing to the LLVM code seems like a fantastic challenge and learning experience for these two interests of mine, as well as computer science in general (For example, the use of a new syntactic category to disambiguate a grammar demonstrates 1) indirection 2) the power of naming things).</span></p><br><p dir="ltr" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt"><span style="font-size:11pt;font-family:Arial;color:rgb(0,0,0);background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre-wrap">But to be up front about this, I have not done any full scale C++ project(Although we had to modify the Linux kernel in my OS class, that was in C). However, I do believe my C++ skills are at an intermediate level, as C++, like Python, is a language in which I will spend my free time learning more about. Like vim, there is always more to learn in C++, and to that end I will watch CppCon Videos or peruse blogs such as Fluent C++(which is a treasure trove of material to nerd out on) in my free time. I also have a layman’s knowledge of CMake, from using it to configure ccls to lint C++ code with specific flags, and am aware of Google’s Test framework. Finally, I am currently taking Professor Stroustrap’s C++ class, and the compilers course here at Columbia.</span></p><br><p dir="ltr" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt"><span style="font-size:11pt;font-family:Arial;color:rgb(0,0,0);background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre-wrap">Regarding the logistics:</span></p><p dir="ltr" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt"><span style="font-size:11pt;font-family:Arial;color:rgb(0,0,0);background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre-wrap">1. Do I need to submit a resume/screening/patches? </span></p><p dir="ltr" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt"><span style="font-size:11pt;font-family:Arial;color:rgb(0,0,0);background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre-wrap">2. Although I do have interests in certain projects posted on you website(Implement missing tab completion, createLoopPass, and PostDominatorTree), I am uncertain if I have enough expertise to decide what would be an appropriate project to contribute to given my current knowledge and experience. </span></p><p dir="ltr" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt"><span style="font-size:11pt;font-family:Arial;color:rgb(0,0,0);background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre-wrap">3. The GCC GSoC website suggested checking out their source code, compiling and running their test suite. Can I do something similar for LLVM?</span></p><br><p dir="ltr" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt"><span style="font-size:11pt;font-family:Arial;color:rgb(0,0,0);background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre-wrap">Anyways, thank you for taking the time to read this email, and I hope to hear back!</span></p><br><p dir="ltr" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt"><span style="font-size:11pt;font-family:Arial;color:rgb(0,0,0);background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre-wrap">Best regards,</span></p><p dir="ltr" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt"><span style="font-size:11pt;font-family:Arial;color:rgb(0,0,0);background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre-wrap">Benson Li</span></p></div>
_______________________________________________<br>
LLVM Developers mailing list<br>
<a href="mailto:llvm-dev@lists.llvm.org" target="_blank">llvm-dev@lists.llvm.org</a><br>
<a href="https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev" rel="noreferrer" target="_blank">https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev</a><br>
</blockquote></div>