<html>
  <head>
    <meta http-equiv="Content-Type" content="text/html;
      charset=windows-1252">
  </head>
  <body bgcolor="#FFFFFF" text="#000000">
    <p><font size="-1">Glad we are getting some reasonable
        justifications for CMake 3.15.0. There are two points we may be
        missing.</font></p>
    <p><font size="-1">Is our plan to just keep updating to the most
        recent CMake version or will our objectives be reached with this
        version? If we gain what we need with this version then after a
        while we will have the Ubuntu LTS aligned.</font></p>
    <p><font size="-1">For my current purposes, LLVM can get wild
        without much worry here. I just clone a VM and run what is
        useful and then delete it. A bit like use once and throw away.
        This is not for production purposes but for getting a better
        view of software structure that LLVM can provide.</font></p>
    <p><font size="-1">When I was managing IT and the servers for a
        small company that needed to be live 24/7 we used the latest
        Ubuntu LTS version because we needed rock-solid performance as
        best we could get. The software in the LTS version is tested and
        used by a large user base with necessary updates and so we
        expected to have high reliability.<br>
      </font></p>
    <p><font size="-1">Those saying how easy it was to obtain the latest
        CMake have apparently not been faced with the absolute need for
        solid up-time. Installing hack-me-now, buggy, bleeding-edge
        software was </font><font size="-1"><span>severely</span>
        discouraged. But in the LLVM environment, I can see where that
        is not a strong necessity.</font></p>
    <p><font size="-1">But at the same time, does LLVM strive to be the
        backbone of 24/7 software? Or is it more of a cool thing with
        some interesting code analysis properties? I suspect its nature
        is a bit wild, bleeding edge. And that's OK.<br>
      </font></p>
    <p><font size="-1">Neil Nelson<br>
      </font></p>
    <div class="moz-cite-prefix"><font size="-1">On 11/3/19 11:02 AM,
        Chris Bieneman via llvm-dev wrote:<br>
      </font></div>
    <blockquote type="cite"
      cite="mid:A6D62ECD-4C1D-4F62-96A7-E4B3BC3FB663@me.com">
      <meta http-equiv="Content-Type" content="text/html;
        charset=windows-1252">
      <font size="-1"><br class="">
      </font>
      <div><font size="-1"><br class="">
        </font>
        <blockquote type="cite" class="">
          <div class=""><font size="-1">On Oct 30, 2019, at 12:02 PM,
              Andrew Kelley via llvm-dev <<a
                href="mailto:llvm-dev@lists.llvm.org" class=""
                moz-do-not-send="true">llvm-dev@lists.llvm.org</a>>
              wrote:</font></div>
          <div class="">
            <div class=""><font size="-1">Here's an argument for why to
                *lower* the minimum supported CMake version:<br class="">
              </font></div>
          </div>
        </blockquote>
        <div><font size="-1"><br class="">
          </font></div>
        <div><font size="-1">No offense, but that isn't going to happen.</font></div>
        <font size="-1"><br class="">
        </font>
        <blockquote type="cite" class="">
          <div class="">
            <div class=""><font size="-1"><br class="">
                LLVM is a compiler backend.<br class="">
              </font></div>
          </div>
        </blockquote>
        <div><font size="-1"><br class="">
          </font></div>
        <div><font size="-1">LLVM is *much* more than a compiler
            backend. Using LLVM as a compiler backend is one use of
            LLVM. It is also a JIT infrastructure, an object file
            toolchain, the underlying bits of a linker and a debugger.
            It is widely used in a lot of situations.</font></div>
        <font size="-1"><br class="">
        </font>
        <blockquote type="cite" class="">
          <div class="">
            <div class=""><font size="-1"><br class="">
                LLVM is already the most difficult dependency to provide
                for most<br class="">
                projects that use it as a compiler backend. This is
                certainly true for<br class="">
                Zig, for example. This makes the requirements of
                building LLVM a<br class="">
                bottleneck in the bootstrapping process.<br class="">
                <br class="">
                Any bump in minimum required CMake version increases the
                requirements of<br class="">
                the system to bootstrap a project which depends on LLVM.<br
                  class="">
              </font></div>
          </div>
        </blockquote>
        <div><font size="-1"><br class="">
          </font></div>
        <div><font size="-1">Except that modern CMake's build
            requirements are a subset of LLVMs. Meaning if you have
            everything you need to build LLVM except CMake, you have
            everything you need to build a modern CMake.</font></div>
        <font size="-1"><br class="">
        </font>
        <blockquote type="cite" class="">
          <div class="">
            <div class=""><font size="-1"><br class="">
                For programming languages, a more minimal bootstrapping
                process is a<br class="">
                feature.<br class="">
                <br class="">
                Therefore, bumping the minimum required CMake version of
                LLVM *removes a<br class="">
                feature* from any languages that depend on LLVM. This is
                O(N) cost where<br class="">
                N is the number of projects that depend on LLVM.<br
                  class="">
                <br class="">
                Zig has cmake_minimum_required(VERSION 2.8.5). LLVM's
                higher CMake<br class="">
                requirement is already the most demanding CMake version
                of all Zig's<br class="">
                dependencies. Making it any higher than it already is is
                strictly worse.<br class="">
                <br class="">
                Why is newer CMake needed? What is LLVM's build process
                doing that is so<br class="">
                complicated that it needs bleeding edge CMake?<br
                  class="">
              </font></div>
          </div>
        </blockquote>
        <div><font size="-1"><br class="">
          </font></div>
        <div><font size="-1">CMake wasn't really designed to accurately
            represent all of the things that LLVM does in its build
            process. Here is a list of a few things LLVM projects do in
            CMake that we've had to implement hacks to work around in
            the past:</font></div>
        <div><font size="-1"><br class="">
          </font></div>
        <div><font size="-1">(1) LLVM builds a DSL compiler then uses
            that compiler to generate source files. CMake historically
            couldn't represent those dependencies correctly, and still
            can't in the Xcode generator</font></div>
        <div><font size="-1">(2) The compiler-rt builtins libraries need
            to be configured and built with a not fully functioning C
            toolchain, as Petr Hosek pointed out CMake 3.14 resolves
            that by adding <span style="caret-color: rgb(0, 0, 0);
              color: rgb(0, 0, 0);" class="">CMAKE_TRY_COMPILE_TARGET_TYPE</span></font></div>
        <div><font class="" size="-1" color="#000000"><span
              style="caret-color: rgb(0, 0, 0);" class="">(3) MSVC
              support has been constantly evolving since 2.8, and
              various releases have made huge strides in making it work</span></font></div>
        <div><font class="" size="-1" color="#000000"><span
              style="caret-color: rgb(0, 0, 0);" class="">(4) LLDB
              generates an macOS framework target which was almost
              completely broken before CMake 3.8</span></font></div>
        <div><font class="" size="-1" color="#000000"><span
              style="caret-color: rgb(0, 0, 0);" class=""><br class="">
            </span></font></div>
        <div><font class="" size="-1" color="#000000">We've had lots of
            reasons in the past to update, and virtually none to stay on
            old versions. If building CMake from source was a
            prohibitively difficult problem, or CMake itself had wild
            requirements to bootstrap I'd probably argue differently
            about this. That just isn't the case. Holding ourselves to
            an old version of CMake is a <span style="caret-color:
              rgb(0, 0, 0);" class="">maintenance</span> burden on our
            community and IMO provides little benefit to our users.</font></div>
        <div><font size="-1"><br class="">
          </font></div>
        <div><font class="" size="-1" color="#000000">-Chris</font></div>
        <font size="-1"><br class="">
        </font>
        <blockquote type="cite" class="">
          <div class="">
            <div class=""><font size="-1"><br class="">
                Regards,<br class="">
                Andrew<br class="">
                <br class="">
                <br class="">
                <br class="">
                _______________________________________________<br
                  class="">
                LLVM Developers mailing list<br class="">
                <a href="mailto:llvm-dev@lists.llvm.org" class=""
                  moz-do-not-send="true">llvm-dev@lists.llvm.org</a><br
                  class="">
                <a class="moz-txt-link-freetext" href="https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev">https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev</a><br
                  class="">
              </font></div>
          </div>
        </blockquote>
      </div>
      <br class="">
      <br>
      <fieldset class="mimeAttachmentHeader"></fieldset>
      <pre class="moz-quote-pre" wrap="">_______________________________________________
LLVM Developers mailing list
<a class="moz-txt-link-abbreviated" href="mailto:llvm-dev@lists.llvm.org">llvm-dev@lists.llvm.org</a>
<a class="moz-txt-link-freetext" href="https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev">https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev</a>
</pre>
    </blockquote>
  </body>
</html>