<html>
  <head>
    <meta content="text/html; charset=ISO-8859-1"
      http-equiv="Content-Type">
  </head>
  <body text="#000000" bgcolor="#FFFFFF">
    <div class="moz-cite-prefix">Is that true now? The last time I tried
      ninja on windows (months ago) to full rebuild LLDB/llvm/clang it
      was not significantly faster and had lots of problems with the
      tablegen steps.<br>
      <br>
      On 29/12/2014 22:22, Zachary Turner wrote:<br>
    </div>
    <blockquote
cite="mid:CAAErz9iGfAByUzXxGVgX3-2xPdD3kkuJ7juMqGCxj9Q9ppDQJQ@mail.gmail.com"
      type="cite">Just curious - why not ninja on Windows?  As long as
      you run vcvars beforehand (which you have to use anyway even for
      an MSBuild build) the output is going to be identical to that
      which is produced by MSBuild, but it will be faster.<br>
      <br>
      <div class="gmail_quote">On Mon Dec 29 2014 at 2:19:21 PM Ted
        Woodward <<a moz-do-not-send="true"
          href="mailto:ted.woodward@codeaurora.org">ted.woodward@codeaurora.org</a>>
        wrote:<br>
        <blockquote class="gmail_quote" style="margin:0 0 0
          .8ex;border-left:1px #ccc solid;padding-left:1ex">
          <div link="blue" vlink="purple" lang="EN-US">
            <div>
              <p class="MsoNormal"><span
style="font-size:11.0pt;font-family:"Calibri",sans-serif;color:#1f497d">We
                  use the “normal” LLVM layout mentioned below. We use
                  cmake on 64 bit Linux and Windows to set up our build
                  environment, the build with make on Linux and msbuild
                  on Windows (although, on my Windows box I open the
                  solution in VS).</span></p>
              <p class="MsoNormal"><span
style="font-size:11.0pt;font-family:"Calibri",sans-serif;color:#1f497d"> </span></p>
              <p class="MsoNormal"><span
style="font-size:11.0pt;font-family:"Calibri",sans-serif;color:#1f497d">We
                  package a full toolset (clang, llvm tools, lldb)
                  together, so our lldb builds compile everything from
                  source.</span></p>
              <p class="MsoNormal"><span
style="font-size:11.0pt;font-family:"Calibri",sans-serif;color:#1f497d"> </span></p>
              <p class="MsoNormal"><span
style="font-size:11.0pt;font-family:"Calibri",sans-serif;color:#1f497d">--</span></p>
              <p class="MsoNormal"><span
style="font-size:11.0pt;font-family:"Calibri",sans-serif;color:#1f497d">Qualcomm
                  Innovation Center, Inc.</span></p>
              <p class="MsoNormal"><span
style="font-size:11.0pt;font-family:"Calibri",sans-serif;color:#1f497d">The
                  Qualcomm Innovation Center, Inc. is a member of Code
                  Aurora Forum, a Linux Foundation Collaborative Project</span></p>
              <p class="MsoNormal"><span
style="font-size:11.0pt;font-family:"Calibri",sans-serif;color:#1f497d"> </span></p>
              <p class="MsoNormal"><b><span
                    style="font-size:11.0pt;font-family:"Calibri",sans-serif">From:</span></b><span
style="font-size:11.0pt;font-family:"Calibri",sans-serif"> <a
                    moz-do-not-send="true"
                    href="mailto:lldb-dev-bounces@cs.uiuc.edu"
                    target="_blank">lldb-dev-bounces@cs.uiuc.edu</a>
                  [mailto:<a moz-do-not-send="true"
                    href="mailto:lldb-dev-bounces@cs.uiuc.edu"
                    target="_blank">lldb-dev-bounces@cs.uiuc.edu</a>] <b>On
                    Behalf Of </b>Mario Zechner<br>
                  <b>Sent:</b> Monday, December 29, 2014 4:06 PM<br>
                  <b>To:</b> Zachary Turner<br>
                  <b>Cc:</b> LLDB Development Mailing List; Chandler
                  Carruth<br>
                  <b>Subject:</b> Re: [lldb-dev] Is anyone using the
                  LLDB CMake standalone build?</span></p>
            </div>
          </div>
          <div link="blue" vlink="purple" lang="EN-US">
            <div>
              <p class="MsoNormal"> </p>
              <p>FWIW, we use exactly the setup you outlined, for the
                reasons you mention: CMake build to build LLDB and
                dependencies, XCode for debugging and code editing. We
                are mostly concerned with Mac OS X/iOS but are also
                building for Linux that way.</p>
              <p>From an API user perspective it's very nice to have a
                cross-platform build that also integrates well with CI
                servers.</p>
              <div>
                <p class="MsoNormal">On Dec 29, 2014 10:13 PM, "Zachary
                  Turner" <<a moz-do-not-send="true"
                    href="mailto:zturner@google.com" target="_blank">zturner@google.com</a>>
                  wrote:</p>
                <blockquote style="border:none;border-left:solid #cccccc
                  1.0pt;padding:0in 0in 0in
                  6.0pt;margin-left:4.8pt;margin-right:0in">
                  <p class="MsoNormal">Someone jump in and correct me if
                    I'm wrong, but I believe there are many reasons that
                    Apple sticks with a hand-maintained Xcode project. 
                    I will try to summarize some of the reasons here:<br>
                    <br>
                    1) People are more comfortable editing a native
                    solution file than editing CMake.  I certainly
                    sympathize with this, as I also strongly prefer
                    editing a Visual Studio solution over a CMake file. 
                    Before working on LLDB, I had actually never even
                    written a line of CMake before.</p>
                  <div>
                    <p class="MsoNormal"> </p>
                  </div>
                  <div>
                    <p class="MsoNormal">2) The Xcode projects generated
                      by CMake are slow, almost to the point of being
                      unusable.  This is a widespread problem with IDEs,
                      and indeed the MSVC generator suffers from the
                      same problem.  The issue here is related to the
                      size of the project / solutions.  Every CMake
                      target (which ultimately translates to a static
                      library or shared library) ends up as a project in
                      your solution (MSVC) or target in your project
                      (Xcode).  This is the layer at which dependency
                      analysis is performed and build parallelization is
                      implemented, so having more projects causes
                      tremendous slowdown in loading projects/solutions
                      and generating information for intellisense/code
                      completion.  Visual Studio has gotten much better
                      in this regard with recent versions, but it's
                      still an issue.  And I think Xcode has <b>not</b> gotten
                      much better in this regard.  In short, an Xcode
                      generated solution, while it will technically
                      work, is almost unusable for performance reasons.</p>
                  </div>
                  <div>
                    <p class="MsoNormal"> </p>
                  </div>
                  <div>
                    <p class="MsoNormal">3) The Xcode projects generated
                      by CMake aren't as pretty as hand-generated Xcode
                      projects.  It's actually possible to make prettier
                      generated projects by adding some stuff to the
                      CMake, but right now they just don't look as nice.</p>
                  </div>
                  <div>
                    <p class="MsoNormal"> </p>
                  </div>
                  <div>
                    <p class="MsoNormal">4) Legacy reasons (aka old
                      habits die hard).  The LLDB group at Apple has
                      historically treated LLVM and clang as libraries,
                      and in the past the only supported way to build
                      LLDB was against a known revision of clang and
                      LLVM, and only recently (well, not recent anymore,
                      but legacy decisions can have long lasting
                      implications) was it changed so that LLDB is
                      expected to always build against tip of trunk LLVM
                      / clang.  One of the things that came out of this
                      early separation was that an Xcode build of LLDB
                      does not even use the canonical on-disk directory
                      hierarchy that all other LLVM subprojects use.  A
                      normal LLVM directory layout looks like this:</p>
                  </div>
                  <div>
                    <p class="MsoNormal"> </p>
                  </div>
                  <div>
                    <p class="MsoNormal">llvm</p>
                  </div>
                  <div>
                    <p class="MsoNormal">-- tools</p>
                  </div>
                  <div>
                    <p class="MsoNormal">---- lldb</p>
                  </div>
                  <div>
                    <p class="MsoNormal">---- clang</p>
                  </div>
                  <div>
                    <p class="MsoNormal">---- lld</p>
                  </div>
                  <div>
                    <p class="MsoNormal"> </p>
                  </div>
                  <div>
                    <p class="MsoNormal">Since LLDB considers itself
                      "not an LLVM subproject, but rather a standalone
                      project which uses LLVM", it organizes itself like
                      this:</p>
                  </div>
                  <div>
                    <p class="MsoNormal"> </p>
                  </div>
                  <div>
                    <p class="MsoNormal">lldb</p>
                  </div>
                  <div>
                    <p class="MsoNormal">-- llvm</p>
                  </div>
                  <div>
                    <p class="MsoNormal">---- tools</p>
                  </div>
                  <div>
                    <p class="MsoNormal">------ clang</p>
                  </div>
                  <div>
                    <p class="MsoNormal">------ lld</p>
                  </div>
                  <div>
                    <p class="MsoNormal"> </p>
                  </div>
                  <div>
                    <p class="MsoNormal">Of course, this is just an
                      implementation detail, as we've shown that lldb
                      can be built as a normal subproject on all other
                      platforms using the first layout, but this
                      basically boils down to "old habits die hard". 
                      It's what people are used to.</p>
                  </div>
                  <div>
                    <p class="MsoNormal"> </p>
                  </div>
                  <div>
                    <p class="MsoNormal">It's certainly easy to
                      sympathize with numbers 1, 3, and 4 but ultimately
                      I think (or at least hope) that people would be
                      willing to sacrifice these for the greater good of
                      having a unified build system.  Number 2 however,
                      is probably a showstopper though.</p>
                  </div>
                  <div>
                    <p class="MsoNormal"> </p>
                  </div>
                  <div>
                    <p class="MsoNormal">I'm not sure just how bad the
                      Xcode solution is in terms of performance, but
                      it's the primary reason why the the standalone
                      build exists.  The standalone build generates a
                      much smaller project/solution, with only those
                      projects and targets that are part of LLDB itself,
                      and not projects from LLVM, clang, etc.  It
                      attempts to use an installed LLVM / clang instead
                      of building one.</p>
                  </div>
                  <div>
                    <p class="MsoNormal"> </p>
                  </div>
                  <div>
                    <p class="MsoNormal">One thing that has worked very
                      well for me on Windows is using my IDE for editing
                      and debugging, but not for building. 
                      There's quite a lot to like about this approach. 
                      For starters, the performance of building from
                      inside the IDE is irrelevant now, because you're
                      not building from the IDE anymore.  For Visual
                      Studio this makes a huge difference, but I'm not
                      sure if it makes a difference for Xcode.  Another
                      advantage of this approach is that honestly, ninja
                      is just faster than everything else.  It really
                      is.  And not a little bit, but a lot.  I'm a big
                      fan of my IDE and you will only pry it out of my
                      cold dead hands, but after I tried ninja once or
                      twice, it was obvious that it was a huge win over
                      building from the IDE.  All it takes me is typing
                      "ninja" from a command shell.  Even I can manage
                      that.  Everything else - debugging, code
                      completion, editing experience, file browsing -
                      still works.  I just don't hit build from inside
                      the IDE.</p>
                  </div>
                  <div>
                    <p class="MsoNormal"> </p>
                  </div>
                  <div>
                    <p class="MsoNormal">It would be worth seeing if an
                      approach like this would work well with people
                      from Apple.  Or alternatively, maybe seeing if the
                      Xcode IDE team within apple would be willing to
                      prioritize IDE performance in the case of these
                      larger projects.  Visual Studio seems to have come
                      a long way here, so it doesn't seem impossible for
                      Xcode to improve here, it just has some work to
                      do.</p>
                  </div>
                  <p class="MsoNormal"> </p>
                  <div>
                    <p class="MsoNormal">On Mon Dec 29 2014 at 12:25:20
                      PM Vince Harron <<a moz-do-not-send="true"
                        href="mailto:vharron@google.com" target="_blank">vharron@google.com</a>>
                      wrote:</p>
                    <blockquote style="border:none;border-left:solid
                      #cccccc 1.0pt;padding:0in 0in 0in
                      6.0pt;margin-left:4.8pt;margin-right:0in">
                      <div>
                        <p class="MsoNormal">> <span
                            style="font-size:10.0pt">The main motivation
                            for having a standalone build is that it's a
                            necessary (but not necessarily sufficient)
                            precursor to having a usable xcode solution,
                            which is itself a necessary (but again
                            perhaps not sufficient) precondition to
                            moving towards a single build system.</span></p>
                        <div>
                          <p class="MsoNormal"> </p>
                        </div>
                      </div>
                      <div>
                        <div>
                          <p class="MsoNormal"><span
                              style="font-size:10.0pt">I've always
                              assumed that the reason the apple guys
                              don't generate their xcode projects from
                              cmake is that there is some magic in the
                              xcode projects that isn't supported by
                              cmake-xcode project generator.  Is there
                              any truth to that?</span></p>
                        </div>
                        <div>
                          <p class="MsoNormal"> </p>
                        </div>
                        <div>
                          <p class="MsoNormal">What is the intended
                            purpose of the LLDB CMake standalone build? 
                            If it is to build against an installed
                            clang/llvm, it doesn't seem like it's worth
                            the extra complexity...</p>
                        </div>
                        <div>
                          <p class="MsoNormal"> </p>
                        </div>
                        <div>
                          <p class="MsoNormal"><span
                              style="font-size:10.0pt">Vince</span></p>
                        </div>
                        <div>
                          <p class="MsoNormal"> </p>
                        </div>
                      </div>
                      <div>
                        <p class="MsoNormal"> </p>
                        <div>
                          <p class="MsoNormal">On Sun, Dec 28, 2014 at
                            9:15 AM, Zachary Turner <<a
                              moz-do-not-send="true"
                              href="mailto:zturner@google.com"
                              target="_blank">zturner@google.com</a>>
                            wrote:</p>
                          <blockquote
                            style="border:none;border-left:solid #cccccc
                            1.0pt;padding:0in 0in 0in
                            6.0pt;margin-left:4.8pt;margin-right:0in">
                            <p class="MsoNormal">I'm not using the
                              standalone build on Windows, i just suffer
                              through opening a mega solution. Reid did
                              some work recently to make it better, but
                              it still doesn't totally support anyone's
                              needs. <br>
                              <br>
                              The main motivation for having a
                              standalone build is that it's a necessary
                              (but not necessarily sufficient) precursor
                              to having a usable xcode solution, which
                              is itself a necessary (but again perhaps
                              not sufficient) precondition to moving
                              towards a single build system.<br>
                              <br>
                              I'm not versed enough in the LLVM core
                              shared CMake infrastructure, but I
                              envision a world where supporting a
                              standalone build requires almost 0 project
                              specific CMake code. Sadly, achieving that
                              seems quite difficult </p>
                            <div>
                              <div>
                                <div>
                                  <p class="MsoNormal">On Sun, Dec 28,
                                    2014 at 7:22 AM Chandler Carruth
                                    <<a moz-do-not-send="true"
                                      href="mailto:chandlerc@gmail.com"
                                      target="_blank">chandlerc@gmail.com</a>>
                                    wrote:</p>
                                </div>
                              </div>
                              <blockquote
                                style="border:none;border-left:solid
                                #cccccc 1.0pt;padding:0in 0in 0in
                                6.0pt;margin-left:4.8pt;margin-right:0in">
                                <div>
                                  <div>
                                    <div>
                                      <p class="MsoNormal">I thought
                                        that Zach was on Windows, but I
                                        would be surprised as I can't
                                        get it to work with an installed
                                        Clang. It errors in the cmake
                                        step, unable to find some cmake
                                        module.</p>
                                      <div>
                                        <p class="MsoNormal"> </p>
                                      </div>
                                      <div>
                                        <p class="MsoNormal">Is anyone
                                          genuinely trying to support
                                          this CMake configuration? It
                                          adds quite a bit of
                                          complexity. If so, could they
                                          fix this error or suggest how
                                          to fix it on the Clang side?
                                          (I help maintain the Clang
                                          cmake build, so I'm happy to
                                          enact any reasonable changes
                                          needed...)</p>
                                      </div>
                                      <div>
                                        <p class="MsoNormal"> </p>
                                      </div>
                                      <div>
                                        <p class="MsoNormal">This came
                                          up because I have a change to
                                          the LLDB CMake build but am
                                          currently unable to test it in
                                          a fully standalone build (IE,
                                          w/o a source tree).</p>
                                      </div>
                                      <div>
                                        <p class="MsoNormal"> </p>
                                      </div>
                                      <div>
                                        <p class="MsoNormal">-Chandler</p>
                                      </div>
                                    </div>
                                  </div>
                                </div>
                                <p class="MsoNormal">_______________________________________________<br>
                                  lldb-dev mailing list<br>
                                  <a moz-do-not-send="true"
                                    href="mailto:lldb-dev@cs.uiuc.edu"
                                    target="_blank">lldb-dev@cs.uiuc.edu</a><br>
                                  <a moz-do-not-send="true"
                                    href="http://lists.cs.uiuc.edu/mailman/listinfo/lldb-dev"
                                    target="_blank">http://lists.cs.uiuc.edu/mailman/listinfo/lldb-dev</a></p>
                              </blockquote>
                            </div>
                            <p class="MsoNormal"
                              style="margin-bottom:12.0pt"><br>
_______________________________________________<br>
                              lldb-dev mailing list<br>
                              <a moz-do-not-send="true"
                                href="mailto:lldb-dev@cs.uiuc.edu"
                                target="_blank">lldb-dev@cs.uiuc.edu</a><br>
                              <a moz-do-not-send="true"
                                href="http://lists.cs.uiuc.edu/mailman/listinfo/lldb-dev"
                                target="_blank">http://lists.cs.uiuc.edu/mailman/listinfo/lldb-dev</a></p>
                          </blockquote>
                        </div>
                        <p class="MsoNormal"><br>
                          <br clear="all">
                        </p>
                        <div>
                          <p class="MsoNormal"> </p>
                        </div>
                      </div>
                      <div>
                        <p class="MsoNormal">-- </p>
                        <div>
                          <div>
                            <p class="MsoNormal"> </p>
                            <table border="0" cellpadding="0"
                              cellspacing="0">
                              <tbody>
                                <tr>
                                  <td
                                    style="border:none;border-top:solid
                                    #d50f25 1.5pt;padding:0in 0in 0in
                                    0in" nowrap="nowrap">
                                    <p class="MsoNormal"><span
                                        style="font-family:"Arial",sans-serif;color:#555555">Vince
                                        Harron |</span></p>
                                  </td>
                                  <td
                                    style="border:none;border-top:solid
                                    #3369e8 1.5pt;padding:0in 0in 0in
                                    0in" nowrap="nowrap">
                                    <p class="MsoNormal"><span
                                        style="font-family:"Arial",sans-serif;color:#555555"> Technical
                                        Lead Manager |</span></p>
                                  </td>
                                  <td
                                    style="border:none;border-top:solid
                                    #009939 1.5pt;padding:0in 0in 0in
                                    0in" nowrap="nowrap">
                                    <p class="MsoNormal"><span
                                        style="font-family:"Arial",sans-serif;color:#555555"> <a
                                          moz-do-not-send="true"
                                          href="mailto:vharron@google.com"
                                          target="_blank">vharron@google.com</a> |</span></p>
                                  </td>
                                  <td
                                    style="border:none;border-top:solid
                                    #eeb211 1.5pt;padding:0in 0in 0in
                                    0in" nowrap="nowrap">
                                    <p class="MsoNormal"><span
                                        style="font-family:"Arial",sans-serif;color:#555555"> <a
                                          moz-do-not-send="true"
                                          href="tel:858-442-0868"
                                          target="_blank">858-442-0868</a></span></p>
                                  </td>
                                </tr>
                              </tbody>
                            </table>
                            <p class="MsoNormal"> </p>
                          </div>
                        </div>
                      </div>
                    </blockquote>
                  </div>
                  <p class="MsoNormal" style="margin-bottom:12.0pt"><br>
                    _______________________________________________<br>
                    lldb-dev mailing list<br>
                    <a moz-do-not-send="true"
                      href="mailto:lldb-dev@cs.uiuc.edu" target="_blank">lldb-dev@cs.uiuc.edu</a><br>
                    <a moz-do-not-send="true"
                      href="http://lists.cs.uiuc.edu/mailman/listinfo/lldb-dev"
                      target="_blank">http://lists.cs.uiuc.edu/mailman/listinfo/lldb-dev</a></p>
                </blockquote>
              </div>
            </div>
          </div>
        </blockquote>
      </div>
      <br>
      <fieldset class="mimeAttachmentHeader"></fieldset>
      <br>
      <pre wrap="">_______________________________________________
lldb-dev mailing list
<a class="moz-txt-link-abbreviated" href="mailto:lldb-dev@cs.uiuc.edu">lldb-dev@cs.uiuc.edu</a>
<a class="moz-txt-link-freetext" href="http://lists.cs.uiuc.edu/mailman/listinfo/lldb-dev">http://lists.cs.uiuc.edu/mailman/listinfo/lldb-dev</a>
</pre>
    </blockquote>
    <br>
  </body>
</html>