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

Lou Wynn via cfe-dev cfe-dev at lists.llvm.org
Wed Sep 19 14:38:33 PDT 2018


When I use clang to compile (gcc is fine), I got cmake error:

-- Performing Test HAVE_CXX_ATOMICS_WITHOUT_LIB
-- Performing Test HAVE_CXX_ATOMICS_WITHOUT_LIB - Failed
-- Looking for __atomic_fetch_add_4 in atomic
-- Looking for __atomic_fetch_add_4 in atomic - found
-- Performing Test HAVE_CXX_ATOMICS_WITH_LIB
-- Performing Test HAVE_CXX_ATOMICS_WITH_LIB - Failed
CMake Error at cmake/modules/CheckAtomic.cmake:50 (message):
  Host compiler must support std::atomic!
Call Stack (most recent call first):
  cmake/config-ix.cmake:323 (include)
  CMakeLists.txt:577 (include)


How can I fix it? I checkout source code from the git mirror. I'm
running ubuntu 16.04.1 LTS.


Thanks,
Lou
 

On 09/19/2018 12:02 AM, Kristóf Umann wrote:
> 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
> <mailto: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 <mailto: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 <mailto:cfe-dev at lists.llvm.org>
>>         http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-dev
>>         <http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-dev>
>>
>
>
>     _______________________________________________
>     cfe-dev mailing list
>     cfe-dev at lists.llvm.org <mailto:cfe-dev at lists.llvm.org>
>     http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-dev
>     <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/aa7f733a/attachment.html>


More information about the cfe-dev mailing list