[cfe-dev] speed up clang build after modifying checker code of static analyzer

Kristóf Umann via cfe-dev cfe-dev at lists.llvm.org
Wed Sep 19 00:02:48 PDT 2018


Hi!

A couple tips I can give:
  * Compile with clang. Make sure you use a release build for this purpose,
optimized with LTO. I usually just download a prebuild binary and go with
that. Clang tends to be about 2-3 times faster than gcc.
  * For linking, use LLD, a linker part of the LLVM family. Especially with
-j8, it will make a significant difference. Your next best option is gnu
gold.

Great to hear about a new checker! I'd encourage you to upload your work in
progress early on to phabricator, even if it only contains an empty
callback, because an entire working solution (if lengthy enough) can
drastically increase the time it takes to review it.

I know because I made that mistake :).

Cheers,
Kristóf Umann


On 19 Sep 2018 04:06, "Lou Wynn via cfe-dev" <cfe-dev at lists.llvm.org> wrote:

I do need debug information because tracing code is a great way for me to
get familiarized with clang and the static analyzer.

I've managed to run "make -j8 clang" at the top of the build directory.
However, the final linking process takes too long now. Is there a way to
build a thin version that only runs the static analyzer? I think that I can
at least cut the code gen part out of the build process but have no idea
how. The only command I run is "clang -cc1 -analyze -analyzer-checker=xxx"
It'd be great if I could reduce the final object file to few hundred
megabytes.

[ 96%] Built target clangStaticAnalyzerCore

Scanning dependencies of target clangStaticAnalyzerCheckers
[ 96%] Building CXX object tools/clang/lib/StaticAnalyzer/Checkers/
CMakeFiles/clangStaticAnalyzerCheckers.dir/IntegerOverflowChecker.cpp.o
[ 96%] Linking CXX static library ../../../../../lib/
libclangStaticAnalyzerCheckers.a
[100%] Built target clangStaticAnalyzerCheckers
[100%] Linking CXX executable ../../../../bin/clang  <-- this take most
time now
[100%] Built target clang

real    2m22.707s
user    2m10.812s
sys     0m14.936s

Thanks,
Lou

On 09/18/2018 06:25 PM, Reid Kleckner wrote:

If the clang binary is 2GB, I would recommend building in Release mode with
assertions enabled. Linking binaries without debug information is
dramatically faster. This means passing -DCMAKE_BUILD_TYPE=Release
-DLLVM_ENABLE_ASSERTIONS=ON to cmake.

If you use debug information, I recommend explicitly building one target,
the target you are testing (usually clang), until you feel the need to run
the complete clang test suite.

On Tue, Sep 18, 2018 at 5:42 PM Lou Wynn via cfe-dev <cfe-dev at lists.llvm.org>
wrote:

> Hi,
>
> I'm writing my first clang static analyzer checker. I wrote the scaffold
> code to add the checker into clang. But every time when I change the
> checker implementation code, the build process after generating the
> checker object file is very slow. It's over 4 minutes in my laptop,
> which has the i7-6820HQ four core CPU and 32G memory. The generated
> clang binary is over 2G. The affected artifacts are as follows:
>
> ---------------------
>
> Scanning dependencies of target clangStaticAnalyzerCheckers
> [ 95%] Building CXX object
> tools/clang/lib/StaticAnalyzer/Checkers/CMakeFiles/
> clangStaticAnalyzerCheckers.dir/IntegerOverflowChecker.cpp.o
> [ 95%] Linking CXX static library
> ../../../../../lib/libclangStaticAnalyzerCheckers.a
> [ 98%] Built target clangStaticAnalyzerCheckers
> [ 98%] Linking CXX executable ../../../../bin/arcmt-test
> [ 98%] Linking CXX executable ../../../../bin/clang-check
> [ 98%] Linking CXX executable ../../../../bin/clang
> [ 98%] Linking CXX shared library ../../../../lib/libclang.so
> [ 98%] Built target arcmt-test   <--- this seems to take the most time
> [ 98%] Built target libclang
> [ 98%] Linking CXX executable ../../../../bin/c-arcmt-test
> [ 98%] Linking CXX executable ../../../../bin/c-index-test
> [ 98%] Built target c-arcmt-test
> [ 98%] Built target clang-check
> [ 98%] Built target clang
> [100%] Built target c-index-test
>
> real    4m23.014s
> user    8m4.032s
> sys     0m51.992s
>
> ---------------------
>
> How can I speed up the build process so that I don't have to wait for
> almost 4.5 minute for a single change in the implementation code? I only
> work on the checker of the static analyzer.
>
> --
> Thanks,
> Lou
>
> _______________________________________________
> cfe-dev mailing list
> cfe-dev at lists.llvm.org
> http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-dev
>


_______________________________________________
cfe-dev mailing list
cfe-dev at lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-dev
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-dev/attachments/20180919/ec804ad3/attachment.html>


More information about the cfe-dev mailing list