<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>