<div dir="auto">Hi!<div dir="auto"><br></div><div dir="auto">A couple tips I can give:</div><div dir="auto">  * 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.</div><div dir="auto">  * 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.</div><div dir="auto"><br></div><div dir="auto">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.</div><div dir="auto"><br></div><div dir="auto">I know because I made that mistake :).</div><div dir="auto"><br></div><div dir="auto">Cheers,</div><div dir="auto">Kristóf Umann</div><br><div class="gmail_extra" dir="auto"><br><div class="gmail_quote">On 19 Sep 2018 04:06, "Lou Wynn via cfe-dev" <<a href="mailto:cfe-dev@lists.llvm.org">cfe-dev@lists.llvm.org</a>> wrote:<br type="attribution"><blockquote class="quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
  
    
  
  <div text="#000000" bgcolor="#FFFFFF">
    <p>I do need debug information because tracing code is a great way
      for me to get familiarized with clang and the static analyzer.</p>
    <p>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.<br>
    </p>
    <p><tt>[ 96%] Built target clangStaticAnalyzerCore</tt></p><div class="quoted-text"><tt><br>
      </tt><tt>Scanning dependencies of target
        clangStaticAnalyzerCheckers</tt><tt><br>
      </tt></div><tt>[ 96%] Building CXX object
tools/clang/lib/<wbr>StaticAnalyzer/Checkers/<wbr>CMakeFiles/<wbr>clangStaticAnalyzerCheckers.<wbr>dir/IntegerOverflowChecker.<wbr>cpp.o</tt><tt><br>
      </tt><tt>[ 96%] Linking CXX static library
        ../../../../../lib/<wbr>libclangStaticAnalyzerCheckers<wbr>.a</tt><tt><br>
      </tt><tt>[100%] Built target clangStaticAnalyzerCheckers</tt><tt><br>
      </tt><tt>[100%] Linking CXX executable ../../../../bin/clang 
        <-- this take most time now</tt><tt><br>
      </tt><tt>[100%] Built target clang</tt><tt><br>
      </tt><tt><br>
      </tt><tt>real    2m22.707s</tt><tt><br>
      </tt><tt>user    2m10.812s</tt><tt><br>
      </tt><tt>sys     0m14.936s</tt><tt><br>
      </tt><br>
    <p></p>
    <pre class="m_-5433425466101596033moz-signature" cols="72">Thanks,
Lou
</pre><div class="elided-text">
    <div class="m_-5433425466101596033moz-cite-prefix">On 09/18/2018 06:25 PM, Reid Kleckner
      wrote:<br>
    </div>
    <blockquote type="cite">
      <div dir="ltr">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.
        <div><br>
          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.</div>
      </div>
      <br>
      <div class="gmail_quote">
        <div dir="ltr">On Tue, Sep 18, 2018 at 5:42 PM Lou Wynn via
          cfe-dev <<a href="mailto:cfe-dev@lists.llvm.org" target="_blank">cfe-dev@lists.llvm.org</a>> wrote:<br>
        </div>
        <blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Hi,<br>
          <br>
          I'm writing my first clang static analyzer checker. I wrote
          the scaffold<br>
          code to add the checker into clang. But every time when I
          change the<br>
          checker implementation code, the build process after
          generating the<br>
          checker object file is very slow. It's over 4 minutes in my
          laptop,<br>
          which has the i7-6820HQ four core CPU and 32G memory. The
          generated<br>
          clang binary is over 2G. The affected artifacts are as
          follows:<br>
          <br>
          ---------------------<br>
          <br>
          Scanning dependencies of target clangStaticAnalyzerCheckers<br>
          [ 95%] Building CXX object<br>
tools/clang/lib/<wbr>StaticAnalyzer/Checkers/<wbr>CMakeFiles/<wbr>clangStaticAnalyzerCheckers.<wbr>dir/IntegerOverflowChecker.<wbr>cpp.o<br>
          [ 95%] Linking CXX static library<br>
          ../../../../../lib/<wbr>libclangStaticAnalyzerCheckers<wbr>.a<br>
          [ 98%] Built target clangStaticAnalyzerCheckers<br>
          [ 98%] Linking CXX executable ../../../../bin/arcmt-test<br>
          [ 98%] Linking CXX executable ../../../../bin/clang-check<br>
          [ 98%] Linking CXX executable ../../../../bin/clang<br>
          [ 98%] Linking CXX shared library ../../../../lib/libclang.so<br>
          [ 98%] Built target arcmt-test   <--- this seems to take
          the most time<br>
          [ 98%] Built target libclang<br>
          [ 98%] Linking CXX executable ../../../../bin/c-arcmt-test<br>
          [ 98%] Linking CXX executable ../../../../bin/c-index-test<br>
          [ 98%] Built target c-arcmt-test<br>
          [ 98%] Built target clang-check<br>
          [ 98%] Built target clang<br>
          [100%] Built target c-index-test<br>
          <br>
          real    4m23.014s<br>
          user    8m4.032s<br>
          sys     0m51.992s<br>
          <br>
          ---------------------<br>
          <br>
          How can I speed up the build process so that I don't have to
          wait for<br>
          almost 4.5 minute for a single change in the implementation
          code? I only<br>
          work on the checker of the static analyzer.<br>
          <br>
          -- <br>
          Thanks,<br>
          Lou<br>
          <br>
          ______________________________<wbr>_________________<br>
          cfe-dev mailing list<br>
          <a href="mailto:cfe-dev@lists.llvm.org" target="_blank">cfe-dev@lists.llvm.org</a><br>
          <a href="http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-dev" rel="noreferrer" target="_blank">http://lists.llvm.org/cgi-bin/<wbr>mailman/listinfo/cfe-dev</a><br>
        </blockquote>
      </div>
    </blockquote>
    <br>
  </div></div>

<br>______________________________<wbr>_________________<br>
cfe-dev mailing list<br>
<a href="mailto:cfe-dev@lists.llvm.org">cfe-dev@lists.llvm.org</a><br>
<a href="http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-dev" rel="noreferrer" target="_blank">http://lists.llvm.org/cgi-bin/<wbr>mailman/listinfo/cfe-dev</a><br>
<br></blockquote></div><br></div></div>