Hi Benson,
You’re welcome to the LLVM community!
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).
With that said, the rest is my opinion which is partially formed from my experience as a GSoC student.
But to be up front about this, I have not done any full scale C++ project
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++.
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
in order to parse it, type-check it and generate LLVM IR. In most other parts of LLVM, you’re only using the language.
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++.
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.
- Do I need to submit a resume/screening/patches?
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
where you basically tell your story in programming and how you fit into the project (in our case, LLVM).
I’m not sure what you mean by screening.
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”).
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. 
And they don’t only show your technical skills. But also communication skills, independence etc.
- 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.
This is kind of a generic sentence.
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.
You don’t need to get very far, that’s totally ok. You can then do a post (either here or on Discourse: https://llvm.discourse.group/c/community/gsoc/32)
for this specific project (you can do posts for multiple projects).
Hopefully, by discussing with people (and mentors) and understanding what the project is asking better,
you can find if you want to do it or not. Certainly, the mentors of the project can guide you through.
- The GCC GSoC website suggested checking out their source code, compiling and running their test suite. Can I do something similar for LLVM?
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
)
So, the LLVM project has moved to a common repository: https://github.com/llvm/llvm-project
You can clone the project and then use CMake to build it. The cmake configuration for LLVM has a bunch of flags: https://llvm.org/docs/CMake.html
and you may get lost. So, I’ll say start simple:
Go to the llvm-project dir (the one you cloned) and do:
cmake ./llvm -DLLVM_ENABLE_PROJECTS=“clang” -DCMAKE_BUILD_TYPE=Release -DLLVM_ENABLE_ASSERTIONS=ON -DLLVM_TARGETS_TO_BUILD=“X86”
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
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,
you probably don’t need it. We enable assertions mostly because you can use the -debug option say in opt and see debug prints.
Finally, we only build for x86 arch because that’s probably what you have and you don’t need any other for now.
Hit enter and once the configuration is complete you can do:
make
or
make -j ← this is faster but limit it depending on your systemS
When that’s finished, the llvm-project/bin/ dir will have executables like clang, clang++, opt, llc etc.
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
most compilers like gcc to compile .c / .cpp files).
To run the test suite, you can go to llvm-project/llvm/test and do:
/bin/llvm-lit .
That will run only llvm's test suite but you'll get an idea.
Also, you can watch these videos:
https://www.youtube.com/watch?v=J5xExRGaIIY
https://www.youtube.com/watch?v=5kkMpJpIGYU
Hope this helped!
Kind regards,
Stefanos Baziotis
Στις Σάβ, 14 Μαρ 2020 στις 2:04 π.μ., ο/η Benson Bin Bin Li via llvm-dev <llvm-dev@lists.llvm.org> έγραψε: