<html><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8"></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; line-break: after-white-space;" class=""><br class=""><div><br class=""><blockquote type="cite" class=""><div class="">On Apr 7, 2020, at 22:16, Mehdi AMINI via llvm-dev <<a href="mailto:llvm-dev@lists.llvm.org" class="">llvm-dev@lists.llvm.org</a>> wrote:</div><br class="Apple-interchange-newline"><div class=""><div dir="ltr" class=""><div dir="ltr" class=""><br class=""></div><br class=""><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Tue, Apr 7, 2020 at 11:27 AM David Blaikie <<a href="mailto:dblaikie@gmail.com" class="">dblaikie@gmail.com</a>> wrote:<br class=""></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-style:solid;border-left-color:rgb(204,204,204);padding-left:1ex"><div dir="ltr" class="">I think it does make a difference how many things we ask new developers to do to get up and running - because we've asked them to do one thing doesn't mean it's low-cost to ask them to do another thing.</div></blockquote><div class=""><br class=""></div><div class="">In this case I see it rather that if we ask them to do one quite big thing already, we should be OK with what seems like a trivial one.</div></div></div></div></blockquote><div><br class=""></div><div>I strongly agree. I think Mehdi's point can be summarized as (Mehdi, feel free to correct me):</div><div><br class=""></div><div>    It's incredibly trivial to install CMake, so if a user is *already* required to install a non-default toolchain (which is not so trivial), requiring them to install a non-default CMake is not increasing the barrier by much.</div><div><br class=""></div><div>Accepting that argument would mean that we don't have to consider distributions where a non-default toolchain is *already* required as being blocking for a CMake upgrade.</div><div><br class=""></div><div>Louis</div><br class=""><blockquote type="cite" class=""><div class=""><div dir="ltr" class=""><div class="gmail_quote"><div class=""><br class=""></div><div class="">-- </div><div class="">Mehdi</div><div class=""><br class=""></div><div class=""><br class=""></div><div class=""> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-style:solid;border-left-color:rgb(204,204,204);padding-left:1ex"><br class=""><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Tue, Apr 7, 2020 at 11:20 AM Mehdi AMINI via llvm-dev <<a href="mailto:llvm-dev@lists.llvm.org" target="_blank" class="">llvm-dev@lists.llvm.org</a>> wrote:<br class=""></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-style:solid;border-left-color:rgb(204,204,204);padding-left:1ex"><div dir="ltr" class=""><div dir="ltr" class=""><br class=""></div><br class=""><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Tue, Apr 7, 2020 at 9:16 AM Chris Tetreault <<a href="mailto:ctetreau@quicinc.com" target="_blank" class="">ctetreau@quicinc.com</a>> wrote:<br class=""></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-style:solid;border-left-color:rgb(204,204,204);padding-left:1ex">





<div lang="EN-US" class="">
<div class=""><p class="MsoNormal">> You're saying "doesn’t mean that we should" while I've been saying in this situation that "we can", there is quite a difference here I believe.<u class=""></u><u class=""></u></p><p class="MsoNormal"><u class=""></u> <u class=""></u></p><p class="MsoNormal">Technically “we can” do anything we want. We can always require that the project be built with the current release candidate of CMake. That doesn’t mean that we should.</p></div></div></blockquote><div class=""><br class=""></div><div class="">I don't feel you're really addressing the point, so I'll phrased it in the other direction: is there a strong reason we should limit ourself to the supported CMake on a given distribution where we already can't build with the supported toolchain?</div><div class="">I was saying I don't see why we should here: when we look at the list of distribution we can bootstrap with the supported packages, I don't see why make a difference here.</div><div class=""><br class=""></div><div class="">-- </div><div class="">Mehdi</div><div class=""><br class=""></div><div class=""> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-style:solid;border-left-color:rgb(204,204,204);padding-left:1ex"><div lang="EN-US" class=""><div class=""><p class="MsoNormal"><u class=""></u><u class=""></u></p><p class="MsoNormal"><u class=""></u> <u class=""></u></p><p class="MsoNormal"><b class="">From:</b> Mehdi AMINI <<a href="mailto:joker.eph@gmail.com" target="_blank" class="">joker.eph@gmail.com</a>> <br class="">
<b class="">Sent:</b> Tuesday, April 7, 2020 12:01 AM<br class="">
<b class="">To:</b> Chris Tetreault <<a href="mailto:ctetreau@quicinc.com" target="_blank" class="">ctetreau@quicinc.com</a>><br class="">
<b class="">Cc:</b> Neil Nelson <<a href="mailto:nnelson@infowest.com" target="_blank" class="">nnelson@infowest.com</a>>; <a href="mailto:llvm-dev@lists.llvm.org" target="_blank" class="">llvm-dev@lists.llvm.org</a><br class="">
<b class="">Subject:</b> [EXT] Re: [llvm-dev] Upgrading LLVM's minimum required CMake version<u class=""></u><u class=""></u></p><p class="MsoNormal"><u class=""></u> <u class=""></u></p>
<div class="">
<div class="">
<div class=""><p class="MsoNormal"><u class=""></u> <u class=""></u></p>
</div><p class="MsoNormal"><u class=""></u> <u class=""></u></p>
<div class="">
<div class=""><p class="MsoNormal">On Mon, Apr 6, 2020 at 12:48 PM Chris Tetreault <<a href="mailto:ctetreau@quicinc.com" target="_blank" class="">ctetreau@quicinc.com</a>> wrote:<u class=""></u><u class=""></u></p>
</div>
<blockquote style="border-style:none none none solid;border-left-width:1pt;border-left-color:rgb(204,204,204);padding:0in 0in 0in 6pt;margin:5pt 0in 5pt 4.8pt" class="">
<div class="">
<div class=""><p class="MsoNormal">Every additional dependency that we force the user to manually install (either by building from source, or adding some new PPA to their ubuntu system), raises the barrier to entry
 that much higher.<u class=""></u><u class=""></u></p>
</div>
</div>
</blockquote>
<div class=""><p class="MsoNormal"><u class=""></u> <u class=""></u></p>
</div>
<div class=""><p class="MsoNormal">Right: I think it is important to quantify the "that much higher", I believe that the commands I showed earlier (which can be put in a script in the repo) is really as low as one can expect.<u class=""></u><u class=""></u></p>
</div>
<div class=""><p class="MsoNormal"><u class=""></u> <u class=""></u></p>
</div>
<div class=""><p class="MsoNormal"> <u class=""></u><u class=""></u></p>
</div>
<blockquote style="border-style:none none none solid;border-left-width:1pt;border-left-color:rgb(204,204,204);padding:0in 0in 0in 6pt;margin:5pt 0in 5pt 4.8pt" class="">
<div class="">
<div class=""><p class="MsoNormal">Just because we may require the user to manually install some newer compiler on their system doesn’t mean that we should also require them to install some newer CMake than what’s
 on their system.<u class=""></u><u class=""></u></p>
</div>
</div>
</blockquote>
<div class=""><p class="MsoNormal"><u class=""></u> <u class=""></u></p>
</div>
<div class=""><p class="MsoNormal">You're saying "doesn’t mean that we should" while I've been saying in this situation that "we can", there is quite a difference here I believe.<u class=""></u><u class=""></u></p>
</div>
<div class=""><p class="MsoNormal"><u class=""></u> <u class=""></u></p>
</div>
<div class=""><p class="MsoNormal">-- <u class=""></u><u class=""></u></p>
</div>
<div class=""><p class="MsoNormal">Mehdi<u class=""></u><u class=""></u></p>
</div>
<div class=""><p class="MsoNormal"><u class=""></u> <u class=""></u></p>
</div>
<div class=""><p class="MsoNormal"> <u class=""></u><u class=""></u></p>
</div>
<blockquote style="border-style:none none none solid;border-left-width:1pt;border-left-color:rgb(204,204,204);padding:0in 0in 0in 6pt;margin:5pt 0in 5pt 4.8pt" class="">
<div class="">
<div class=""><p class="MsoNormal">(unless it is actually necessary, but we’ve beaten that dead horse long enough)<u class=""></u><u class=""></u></p><p class="MsoNormal"> <u class=""></u><u class=""></u></p><p class="MsoNormal">I agree with Neil’s interpretation that the definition of “supported” being used here is default system packages and not third party repos that claim to work for that system.<u class=""></u><u class=""></u></p><p class="MsoNormal"> <u class=""></u><u class=""></u></p><p class="MsoNormal"><b class="">From:</b> llvm-dev <<a href="mailto:llvm-dev-bounces@lists.llvm.org" target="_blank" class="">llvm-dev-bounces@lists.llvm.org</a>>
<b class="">On Behalf Of </b>Mehdi AMINI via llvm-dev<br class="">
<b class="">Sent:</b> Saturday, April 4, 2020 2:11 PM<br class="">
<b class="">To:</b> Neil Nelson <<a href="mailto:nnelson@infowest.com" target="_blank" class="">nnelson@infowest.com</a>><br class="">
<b class="">Cc:</b> llvm-dev <<a href="mailto:llvm-dev@lists.llvm.org" target="_blank" class="">llvm-dev@lists.llvm.org</a>><br class="">
<b class="">Subject:</b> [EXT] Re: [llvm-dev] Upgrading LLVM's minimum required CMake version<u class=""></u><u class=""></u></p><p class="MsoNormal"> <u class=""></u><u class=""></u></p>
<div class="">
<div class="">
<div class="">
<div class="">
<div class="">
<div class="">
<div class="">
<div class="">
<div class="">
<div class="">
<div class=""><p class="MsoNormal"> <u class=""></u><u class=""></u></p>
</div><p class="MsoNormal"> <u class=""></u><u class=""></u></p>
<div class="">
<div class=""><p class="MsoNormal">On Sat, Apr 4, 2020 at 12:48 PM Neil Nelson via llvm-dev <<a href="mailto:llvm-dev@lists.llvm.org" target="_blank" class="">llvm-dev@lists.llvm.org</a>> wrote:<u class=""></u><u class=""></u></p>
</div>
<blockquote style="border-style:none none none solid;border-left-width:1pt;border-left-color:rgb(204,204,204);padding:0in 0in 0in 6pt;margin:5pt 0in 5pt 4.8pt" class="">
<div class=""><p class=""><span style="font-size:10pt" class="">'Supported' means that it comes from the packages available from the distribution that can be seen via this page.</span><u class=""></u><u class=""></u></p><p class=""><a href="https://packages.ubuntu.com/" target="_blank" class=""><span style="font-size:10pt" class="">https://packages.ubuntu.com/</span></a><u class=""></u><u class=""></u></p><p class=""><span style="font-size:10pt" class="">These packages have been processed by the Ubuntu community to obtain a reliability expectation that would not apply, for example, to a PPA.</span><u class=""></u><u class=""></u></p>
</div>
</blockquote>
<div class=""><p class="MsoNormal"> <u class=""></u><u class=""></u></p>
</div>
<div class=""><p class="MsoNormal">Right, so I'm looking for an answer to my question, I'll try make it more concrete what I mean by "in cases where we already requires a more recent compiler than the default one
 available".<u class=""></u><u class=""></u></p>
</div>
<div class=""><p class="MsoNormal">If I take Xenial for instance, the most recent GCC version is 5.4.0 as far as I can tell:
<a href="https://packages.ubuntu.com/xenial/devel/gcc-5" target="_blank" class="">https://packages.ubuntu.com/xenial/devel/gcc-5</a> ; assuming LLVM would move at some point to require a more recent version than 5.4, it would mean that you couldn't build LLVM with the
 packages available on Xenial. In this situation (which I referred to as "cases where we already requires a more recent compiler than the default one available") we already expect the user to get a toolchain from a non-primary package source on this distribution,
 and if we do this for the toolchain already I would expect that we should be able to do it as well for CMake (again: for a given distribution/version).<u class=""></u><u class=""></u></p>
</div>
<div class=""><p class="MsoNormal"> <u class=""></u><u class=""></u></p>
</div>
<blockquote style="border-style:none none none solid;border-left-width:1pt;border-left-color:rgb(204,204,204);padding:0in 0in 0in 6pt;margin:5pt 0in 5pt 4.8pt" class="">
<div class=""><p class=""><span style="font-size:10pt" class="">The difference between installing or building Clang and LLVM from original sources as against installing versions available from the distribution</span><u class=""></u><u class=""></u></p>
</div>
</blockquote>
<div class=""><p class="MsoNormal">I don't understand this sentence?<u class=""></u><u class=""></u></p>
</div>
<div class=""><p class="MsoNormal"> <u class=""></u><u class=""></u></p>
</div>
<blockquote style="border-style:none none none solid;border-left-width:1pt;border-left-color:rgb(204,204,204);padding:0in 0in 0in 6pt;margin:5pt 0in 5pt 4.8pt" class="">
<div class=""><p class=""><span style="font-size:10pt" class="">when compared to doing the same with cmake, is that the user accepts the inherent risks from Clang and LLVM, but Clang and LLVM can not accept the risks from the cmake group and then expect the user to merely assume that there
 are no additional risks from installing cmake.</span><u class=""></u><u class=""></u></p>
</div>
</blockquote>
<div class=""><p class="MsoNormal">Maybe a nit here, but there is no need to *install* CMake: it could be trivially build in the build directory. We are talking about a trivial step here:<u class=""></u><u class=""></u></p>
</div>
<div class=""><p class="MsoNormal"> <u class=""></u><u class=""></u></p>
</div>
<div class=""><p class="MsoNormal"># Inside llvm-project/<u class=""></u><u class=""></u></p>
</div>
<div class=""><p class="MsoNormal">$ mkdir build/ && cd build/<u class=""></u><u class=""></u></p>
</div>
<div class=""><p class="MsoNormal"># bootstrap CMake<u class=""></u><u class=""></u></p>
</div>
<div class=""><p class="MsoNormal">$ wget
<a href="https://github.com/Kitware/CMake/releases/download/v3.17.0/cmake-3.17.0.tar.gz" target="_blank" class="">
https://github.com/Kitware/CMake/releases/download/v3.17.0/cmake-3.17.0.tar.gz</a><u class=""></u><u class=""></u></p>
</div>
<div class=""><p class="MsoNormal">$ echo "b74c05b55115eacc4fa2b77a814981dbda05cdc95a53e279fe16b7b272f00847  cmake-3.17.0.tar.gz" | sha256sum -c <u class=""></u><u class=""></u></p>
</div>
<div class=""><p class="MsoNormal">$ tar -xf cmake-3.17.0.tar.gz && cd cmake-3.17.0 && ./bootstrap && make<u class=""></u><u class=""></u></p>
</div>
<div class=""><p class="MsoNormal"># Done, cmake is usable, *nothing* is installed on the user system, everything is self-contained *inside* the build directory itself.<u class=""></u><u class=""></u></p>
</div>
<div class=""><p class="MsoNormal">$ ./cmake-3.17.0/bin/cmake ../llvm/ -D.... # build LLVM as usual.<u class=""></u><u class=""></u></p>
</div>
<div class=""><p class="MsoNormal"> <u class=""></u><u class=""></u></p>
</div>
<div class=""><p class="MsoNormal"> <u class=""></u><u class=""></u></p>
</div>
<div class=""><p class="MsoNormal"> <u class=""></u><u class=""></u></p>
</div>
<blockquote style="border-style:none none none solid;border-left-width:1pt;border-left-color:rgb(204,204,204);padding:0in 0in 0in 6pt;margin:5pt 0in 5pt 4.8pt" class="">
<div class=""><p class=""><span style="font-size:10pt" class="">The distributions are not merely just collections of software, they are collections of software that have some guarantee of working well together and without bugs and other issues because they have been used and tested by that
 use in the distribution community.</span><u class=""></u><u class=""></u></p><p class=""><span style="font-size:10pt" class="">The importance of this distinction between the quality of software expected in a distribution as against installing directly from source is apparently lost on those who did not live through the pre-distribution days. During
 that time we had to gather up the dependencies ourselves, trying to get the correct versions, hoping that the software compiled and worked with the other dependencies, and hope we did not install malware and hackware. And quite often it was a futile attempt
 to gather together software dependencies of any size.</span><u class=""></u><u class=""></u></p><p class=""><span style="font-size:10pt" class="">Those who lived through that time remember it as the dark-ages of long ago, never to be seen again.</span> <u class=""></u><u class=""></u></p>
</div>
</blockquote>
<div class=""><p class="MsoNormal">Been there, done that... (actually suffered from that).<u class=""></u><u class=""></u></p>
</div>
<div class=""><p class="MsoNormal"> <u class=""></u><u class=""></u></p>
</div>
<div class=""><p class="MsoNormal">I claim this is just not the same situation here: CMake is a self-contained dependencies and as shown above does not need to escape anywhere outside the build directory.<u class=""></u><u class=""></u></p>
</div>
<div class=""><p class="MsoNormal"> <u class=""></u><u class=""></u></p>
</div>
<div class=""><p class="MsoNormal">-- <u class=""></u><u class=""></u></p>
</div>
<div class=""><p class="MsoNormal">Mehdi<u class=""></u><u class=""></u></p>
</div>
<div class=""><p class="MsoNormal"> <u class=""></u><u class=""></u></p>
</div>
<div class=""><p class="MsoNormal"> <u class=""></u><u class=""></u></p>
</div>
<blockquote style="border-style:none none none solid;border-left-width:1pt;border-left-color:rgb(204,204,204);padding:0in 0in 0in 6pt;margin:5pt 0in 5pt 4.8pt" class="">
<div class="">
<div class=""><p class="MsoNormal"><span style="font-size:10pt" class="">On 4/4/20 11:48 AM, Mehdi AMINI via llvm-dev wrote:</span><u class=""></u><u class=""></u></p>
</div>
<blockquote style="margin-top:5pt;margin-bottom:5pt" class="">
<div class="">
<div class=""><p class="MsoNormal"> <u class=""></u><u class=""></u></p>
</div><p class="MsoNormal"> <u class=""></u><u class=""></u></p>
<div class="">
<div class=""><p class="MsoNormal">On Thu, Apr 2, 2020 at 10:49 AM Shoaib Meenai via llvm-dev <<a href="mailto:llvm-dev@lists.llvm.org" target="_blank" class="">llvm-dev@lists.llvm.org</a>> wrote:<u class=""></u><u class=""></u></p>
</div>
<blockquote style="border-style:none none none solid;border-left-width:1pt;border-left-color:rgb(204,204,204);padding:0in 0in 0in 6pt;margin:5pt 0in 5pt 4.8pt" class="">
<div class="">
<div class=""><p class="MsoNormal">I’m in favor of all this. Thanks for volunteering! I’m happy to help out in whatever way.<u class=""></u><u class=""></u></p><p class="MsoNormal"> <u class=""></u><u class=""></u></p><p class="MsoNormal">Some things it might be worth figuring out for future upgrades:<u class=""></u><u class=""></u></p><p class="MsoNormal">* If we want to limit ourselves to CMake versions supported by LTS releases of distros, which distros should we consider, and how far back should we go (i.e. is it just the latest
 LTS or the last two LTS versions)?<u class=""></u><u class=""></u></p>
</div>
</div>
</blockquote>
<div class=""><p class="MsoNormal"> <u class=""></u><u class=""></u></p>
</div>
<div class=""><p class="MsoNormal">Can you clarify what "supported" means? Does it include PPA on ubuntu for example?<u class=""></u><u class=""></u></p>
</div>
<div class=""><p class="MsoNormal">I wouldn't limit ourselves artificially to the version of CMake "natively" available on an OS in cases where we already requires a more recent compiler than the default one available:
 if we consider OK to require as user to build clang or gcc from source or use a PPA, we should be OK the same way with CMake.<u class=""></u><u class=""></u></p>
</div>
<div class=""><p class="MsoNormal"> <u class=""></u><u class=""></u></p>
</div>
<div class=""><p class="MsoNormal"> <u class=""></u><u class=""></u></p>
</div>
<blockquote style="border-style:none none none solid;border-left-width:1pt;border-left-color:rgb(204,204,204);padding:0in 0in 0in 6pt;margin:5pt 0in 5pt 4.8pt" class="">
<div class="">
<div class=""><p class="MsoNormal">* For platforms like Ubuntu where CMake publishes its own packages (that you can install via the platform’s package manager), do those count, or do we only consider the CMake that
 comes in the OS packages?<u class=""></u><u class=""></u></p><p class="MsoNormal">* Do we have any limitations around how often/when we upgrade? You’re tying the upgrade to after the branch, which is pretty standard, but e.g. if we wanted to upgrade to 3.8.0
 now and then upgrade to 3.13.4 after the branch, would people be okay with that, or should we limit upgrades to just shortly after a branch?<u class=""></u><u class=""></u></p><p class="MsoNormal"> <u class=""></u><u class=""></u></p>
<div style="border-style:solid none none;border-top-width:1pt;border-top-color:rgb(181,196,223);padding:3pt 0in 0in" class=""><p class="MsoNormal" style="margin-left:0.5in">
<b class=""><span style="font-size: 12pt;" class="">From: </span></b><span style="font-size: 12pt;" class=""><</span><a href="mailto:ldionne@apple.com" target="_blank" class=""><span style="font-size:12pt" class="">ldionne@apple.com</span></a><span style="font-size: 12pt;" class="">>
 on behalf of Louis Dionne <</span><a href="mailto:ldionne@apple.com" target="_blank" class=""><span style="font-size:12pt" class="">ldionne@apple.com</span></a><span style="font-size: 12pt;" class="">><br class="">
<b class="">Date: </b>Thursday, April 2, 2020 at 7:20 AM<br class="">
<b class="">To: </b>Shoaib Meenai <</span><a href="mailto:smeenai@fb.com" target="_blank" class=""><span style="font-size:12pt" class="">smeenai@fb.com</span></a><span style="font-size: 12pt;" class="">><br class="">
<b class="">Cc: </b>"</span><a href="mailto:llvm-dev@lists.llvm.org" target="_blank" class=""><span style="font-size:12pt" class="">llvm-dev@lists.llvm.org</span></a><span style="font-size: 12pt;" class="">" <</span><a href="mailto:llvm-dev@lists.llvm.org" target="_blank" class=""><span style="font-size:12pt" class="">llvm-dev@lists.llvm.org</span></a><span style="font-size: 12pt;" class="">>,
 Chris Bieneman <</span><a href="mailto:beanz@apple.com" target="_blank" class=""><span style="font-size:12pt" class="">beanz@apple.com</span></a><span style="font-size: 12pt;" class="">>, Petr Hosek <</span><a href="mailto:phosek@chromium.org" target="_blank" class=""><span style="font-size:12pt" class="">phosek@chromium.org</span></a><span style="font-size: 12pt;" class="">>,
 Saleem Abdulrasool <</span><a href="mailto:compnerd@compnerd.org" target="_blank" class=""><span style="font-size:12pt" class="">compnerd@compnerd.org</span></a><span style="font-size: 12pt;" class="">>, "</span><a href="mailto:tstellar@redhat.com" target="_blank" class=""><span style="font-size:12pt" class="">tstellar@redhat.com</span></a><span style="font-size: 12pt;" class="">"
 <</span><a href="mailto:tstellar@redhat.com" target="_blank" class=""><span style="font-size:12pt" class="">tstellar@redhat.com</span></a><span style="font-size: 12pt;" class="">><br class="">
<b class="">Subject: </b>Re: Upgrading LLVM's minimum required CMake version</span><u class=""></u><u class=""></u></p>
</div>
<div class=""><p class="MsoNormal" style="margin-left:0.5in">
 <u class=""></u><u class=""></u></p>
</div><p class="MsoNormal" style="margin-left:0.5in">
Okay, so we've had some discussion on this thread, and although some people (including me) would like a more aggressive policy, I believe the following will not get any objection (based on the thread). On April 23rd 2020, Ubuntu 20.04 LTS will ship with CMake
 3.16.x. This will make the lower bound for LTS distributions be 3.13.4, and so I suggest we upgrade to that. Here's a proposed process:
<u class=""></u><u class=""></u></p>
<div class=""><p class="MsoNormal" style="margin-left:0.5in">
 <u class=""></u><u class=""></u></p>
</div>
<div class=""><p class="MsoNormal" style="margin-left:0.5in">
1. Immediately add a CMake warning in <span style="font-family:"Times New Roman",serif" class="">
<root>/llvm/CMakeLists.txt</span> saying that CMake 3.13.4 will be the new minimum version starting with LLVM 12.0.0, and mentioning the versions used in various LTSes.<u class=""></u><u class=""></u></p>
</div>
<div class=""><p class="MsoNormal" style="margin-left:0.5in">
2. Immediately send a courtesy heads-up email to all build-bot owners telling them about the upcoming change.<u class=""></u><u class=""></u></p>
</div>
<div class=""><p class="MsoNormal" style="margin-left:0.5in">
3. Right after we branch off the release branch for LLVM 11.0.0 (the next one), make the minimum CMake version required be 3.13.4.<u class=""></u><u class=""></u></p>
</div>
<div class=""><p class="MsoNormal" style="margin-left:0.5in">
4. Iterate on (3) until all bots are migrated.<u class=""></u><u class=""></u></p>
</div>
<div class=""><p class="MsoNormal" style="margin-left:0.5in">
5. Send a message to the list saying the bump is complete. At that time, projects are free to start using features from 3.13.4.<u class=""></u><u class=""></u></p>
</div>
<div class=""><p class="MsoNormal" style="margin-left:0.5in">
 <u class=""></u><u class=""></u></p>
</div>
<div class=""><p class="MsoNormal" style="margin-left:0.5in">
Unless someone else absolutely wants to bite the bullet, I volunteer to do the above steps.<u class=""></u><u class=""></u></p>
</div>
<div class=""><p class="MsoNormal" style="margin-left:0.5in">
 <u class=""></u><u class=""></u></p>
</div>
<div class=""><p class="MsoNormal" style="margin-left:0.5in">
Thoughts?<u class=""></u><u class=""></u></p>
</div>
<div class=""><p class="MsoNormal" style="margin-left:0.5in">
 <u class=""></u><u class=""></u></p>
</div>
<div class=""><p class="MsoNormal" style="margin-left:0.5in">
Louis<u class=""></u><u class=""></u></p>
</div>
<div class=""><p class="MsoNormal" style="margin-left:0.5in">
 <u class=""></u><u class=""></u></p>
</div>
<div class=""><p class="MsoNormal" style="margin-left:0.5in">
 <u class=""></u><u class=""></u></p>
</div>
<div class="">
<div class="">
<div class="">
<blockquote style="margin-top:5pt;margin-bottom:5pt" class="">
<div class=""><p class="MsoNormal" style="margin-left:0.5in">
On Mar 26, 2020, at 16:07, Shoaib Meenai <<a href="mailto:smeenai@fb.com" target="_blank" class="">smeenai@fb.com</a>> wrote:<u class=""></u><u class=""></u></p>
</div><p class="MsoNormal" style="margin-left:0.5in">
 <u class=""></u><u class=""></u></p>
<div class="">
<div class=""><p class="MsoNormal" style="margin-bottom:12pt;margin-left:0.5in">
We had this discussion a few months ago and it petered out, and it’s recently been revived in the context of upgrading the CMake version specifically for libc++ (at which point people suggested upgrading the CMake version used by all of LLVM), so let’s try
 to move this forward.<br class="">
<br class="">
Our current required minimum version is CMake 3.4.3, which was released on January 25th 2016. It’s interesting to note that LLVM started requiring 3.4.3 on May 31st 2016, which was just 4 months after its release.<br class="">
<br class="">
Let’s look at the CMake versions available on various distros and operating systems. I’m unfamiliar with many of these, so I apologize if I get something wrong. (I’m using
<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__pkgs.org&d=DwMFaQ&c=5VD0RTtNlTh3ycd41b3MUw&r=o3kDXzdBUE3ljQXKeTWOMw&m=atRWn0u_rLa9ITqRSW-W8QvRJN244hhQmDWillcW3gE&s=S6Qvuq5DqECZFfItkAJOL5xjTSp1psRWYtq_WOnXt_o&e=" target="_blank" class="">
pkgs.org</a> for most of this information.)<br class="">
* RHEL 6 (released Nov 10th 2010) : 3.6.1 (via EPEL)<br class="">
* RHEL 7 (released June 10th 2014): 3.14.7 (via EPEL)<br class="">
* RHEL 8 (released May 7th 2019): 3.11.4 (maybe <a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__pkgs.org&d=DwMFaQ&c=5VD0RTtNlTh3ycd41b3MUw&r=o3kDXzdBUE3ljQXKeTWOMw&m=atRWn0u_rLa9ITqRSW-W8QvRJN244hhQmDWillcW3gE&s=S6Qvuq5DqECZFfItkAJOL5xjTSp1psRWYtq_WOnXt_o&e=" target="_blank" class="">
pkgs.org</a> is screwy on this one, because it doesn’t make sense that RHEL 7 should have a newer available version than RHEL 8)<br class="">
* Debian 9 (released June 17th 2017): 3.7.2<br class="">
* Debian 10 (released July 6th 2019): 3.13.4<br class="">
* Ubuntu 16.04 LTS (released April 21st 2016): 3.5.1<br class="">
* Ubuntu 18.04 LTS (released April 26th 2018): 3.10.2<br class="">
* FreeBSD 11 (released October 10th 2016): 3.15.5 (presumably upgraded in a point release)<br class="">
* FreeBSD 12 (released December 11th 2018): 3.15.5 (presumably upgraded in a point release)<br class="">
* NetBSD 8.1 (released May 31st 2019): 3.16.1<br class="">
* NetBSD 9.0 (released February 14th 2020): 3.16.1<br class="">
* OpenBSD: couldn’t find the version<br class="">
* macOS: latest version is readily available through Homebrew<br class="">
* Windows: You can install it yourself or use the one bundled with Visual Studio. I don't know what versions are bundled with Visual Studio; some searching suggests Visual Studio 2017 has CMake 3.12 and Visual Studio 2019 has 3.15, though I have no confirmation
 of that.<br class="">
<br class="">
Note that CMake provides prebuilt binaries for Linux, macOS, and Windows, and it’s also straightforward to build from source (it has very conservative compiler requirements). One suggestion that was brought up in the past was for LLVM’s build system to just
 download a newer version of CMake if you attempted to build it using one that was too old, but there was opposition [1]. There was also a suggestion to have a script in LLVM to download and build CMake for you, but there were mixed opinions on this too [2],
 particularly since many developers might prefer downloading a binary release to building from source themselves (though of course the script could also download binary releases if applicable). I personally think downloading or building CMake yourself isn’t
 a high barrier for anyone wanting to build LLVM (and in particular it’s *much* more straightforward than building LLVM itself), but I can understand why people would prefer to stick to versions available in distros.<br class="">
<br class="">
Another suggestion that came up last time was to set a policy for upgrading CMake versions on some regular basis. The opposition to this was that we should upgrade CMake versions only when a newer version has a compelling enough feature to justify upgrading,
 rather than always upgrading. I can see arguments for both approaches, but we should definitely at least think about the benefits we can get from upgrading versions. I've gone through the CMake release notes and highlighted features which seemed potentially
 valuable for LLVM. Note that I'm only highlighting features for which our minimum CMake version would have to be bumped up in order for our build system to take advantage of. There are other useful features in newer CMake versions, but you can take advantage
 of them just by using a newer CMake yourself. For example, 3.9 loosens the dependencies of object compilation, which should result in faster Ninja builds.
<br class="">
<br class="">
CMake 3.5 (released March 8th 2016):<br class="">
* install(DIRECTORY) supports generator expressions<br class="">
<br class="">
CMake 3.6 (released July 7th 2016):<br class="">
* install() supports EXCLUDE_FROM_ALL<br class="">
* list() supports FILTER to filter by regular expression<br class="">
* Subninja support, which could theoretically be used for much faster runtimes builds, although in practice we probably want to make ExternalProject support this directly instead of trying to layer our own meta-build system on top<br class="">
* CMAKE_TRY_COMPILE_TARGET_TYPE to tell try_compile to build a static library instead of an executable, which will greatly simplify the compiler-rt build<br class="">
<br class="">
CMake 3.7 (released November 11th 2016):<br class="">
* New if() comparison operators LESS_EQUAL, GREATER_EQUAL, STRLESS_EQUAL, STRGREATER_EQUAL, VERSION_LESS_EQUAL, and VERSION_GREATER_EQUAL<br class="">
<br class="">
CMake 3.8 (released April 10th 2017):<br class="">
* Compile features for C++17, which is required to build libc++ correctly<br class="">
* Support for compile features for specific C++ features instead of only being able to specify standard versions<br class="">
* rpath support via BUILD_RPATH target property and CMAKE_BUILD_RPATH variable<br class="">
* Apple framework support for static libraries<br class="">
* New swig_add_library command in the UseSWIG module<br class="">
* New generator expression $<IF:cond,true-value,false-value><br class="">
<br class="">
CMake 3.9 (released July 18th 2017):<br class="">
* install(TARGETS) and install(EXPORTS) support for object libraries, which will simplify the compiler-rt build<br class="">
* TARGET_OBJECTS generator expression support in add_custom_command and file(GENERATE)<br class="">
* $<TARGET_BUNDLE_DIR:tgt> and $<TARGET_BUNDLE_CONTENT_DIR:tgt> generator expressions for Apple bundles<br class="">
<br class="">
CMake 3.10 (released November 20th 2017):<br class="">
* include_guard() command for proper guarding against double includes of CMake scripts<br class="">
* An interesting aside is that this is the first verion of CMake to require C++11 to build, which should give a good sense of how conservative they are about compiler requirements<br class="">
<br class="">
CMake 3.11 (released March 28th 2018):<br class="">
* add_library() and add_executable() can be called without sources as long as target_sources() is used later<br class="">
* target_compile_{definitions,features,options}, target_include_directories(), target_sources(), and target_link_libraries() can set the corresponding INTERFACE_* properties on imported targets<br class="">
* COMPILE_DEFINITIONS supports generator expressions<br class="">
* COMPILE_OPTIONS source file property added<br class="">
* INCLUDE_DIRECTORIES source file property added<br class="">
* Interface libraries support custom properites<br class="">
<br class="">
CMake 3.12 (released July 17th 2018):<br class="">
* add_compile_definitions() added to add compile definitions for targets (to avoid the global pollution caused by add_definitions())<br class="">
* cmake_minimum_required() supports a version range to indicate tested CMake versions and set policies accordingly<br class="">
* file(TOUCH) and file(TOUCH_NOCREATE) added<br class="">
* list(JOIN), list(SUBLIST) and list(TRANSFORM) added<br class="">
* string(JOIN) added<br class="">
* SHELL: prefix support in target_compile_options to avoid errant deduplication<br class="">
* target_link_libraries() supports object libraries and propagates usage requirements<br class="">
* EXPORT_PROPERTIES target property to control the target properties exported by export() and install(EXPORT)<br class="">
* FindLibXml2 provides imported targets<br class="">
* New FindPython, FindPython2, and FindPython3 modules to ease location Python and selecting a specific version<br class="">
* Modernization of UseSWIG module<br class="">
* New generator expressions $<GENEX_EVAL:...>, $<TARGET_GENEX_EVAL:target,...>, $<IN_LIST:...>, $<TARGET_EXISTS:...> and $<TARGET_NAME_IF_EXISTS:...><br class="">
* Compile features support for C++20<br class="">
<br class="">
CMake 3.13 (released November 20th 2018):<br class="">
* cmake -E create_symlink supported on Windows<br class="">
* target_link_directories() and target_link_options() commands to set link options instead of awkwardly having to use target_link_libraries() for this purpose<br class="">
* UseSWIG can manage INCLUDE_DIRECTORIES for SWIG compilation<br class="">
<br class="">
CMake 3.14 (released March 14th 2019):<br class="">
* file(CREATE_LINK) to create hard or symbolic links<br class="">
* if(DEFINED CACHE{VAR}) for checking if a cache variable is defined<br class="">
* $<IN_LIST:...> generator expression correctly handles empty argument<br class="">
* Fixes for object library linking propagation<br class="">
* Link options to manage position independent executables added automatically<br class="">
<br class="">
CMake 3.15 (released July 17th 2019):<br class="">
* list(PREPEND), list(POP_FRONT) and list(POP_BACK) added<br class="">
* New message() types NOTICE, VERBOSE, DEBUG and TRACE<br class="">
* string(REPEAT) added<br class="">
* MSVC_RUNTIME_LIBRARY target property and CMAKE_MSVC_RUNTIME_LIBRARY variable to select the runtime library type for MSVC<br class="">
* $<C_COMPILER_ID:...>, $<CXX_COMPILER_ID:...>, $<COMPILE_LANGUAGE:...>, and $<PLATFORM_ID:...> generator expressions support matching one value from a list<br class="">
* $<COMPILE_LANG_AND_ID:...> generator expression added<br class="">
* $<FILTER:list,INCLUDE|EXCLUDE,regex> generator expression added<br class="">
* $<REMOVE_DUPLICATES:list> generator expression added<br class="">
* New $<TARGET_FILE*> generator expressions added: $<TARGET_FILE_PREFIX:...>, $<TARGET_FILE_BASE_NAME:...>, $<TARGET_FILE_SUFFIX:...>, $<TARGET_LINKER_FILE_PREFIX:...>, $<TARGET_LINKER_FILE_BASE_NAME:...>, $<TARGET_LINKER_FILE_SUFFIX:...>, $<TARGET_PDB_FILE_BASE_NAME:...><br class="">
* $<TARGET_OBJECTS:...> generator expression supports executables and static, shared, and module libraries<br class="">
<br class="">
CMake 3.16 (released November 26th 2019):<br class="">
* Support for generator expressions in BUILD_RPATH and INSTALL_RPATH<br class="">
<br class="">
CMake 3.17 (released March 20th 2020):<br class="">
* Ninja Multi-Config generator, which among other things would greatly simplify LLVM_OPTIMIZED_TABLEGEN<br class="">
* foreach(ZIP_LISTS) added to iterate multiple lists simultaneously<br class="">
* New message() keywords CHECK_START, CHECK_PASS, and CHECK_FAIL<br class="">
* INSTALL_NAME_DIR supports generator expressions<br class="">
<br class="">
Our build system is incredibly complex, and many of these features can be used to clean it up and make it much more maintainable. I would personally like us to at least bump up to CMake 3.12. I also do think it's worth establishing a policy and process around
 upgrading CMake versions, since newer versions keep on adding useful features (particularly better generator expression support), and we want to be able to keep taking advantage of them.<br class="">
<br class="">
[1] <a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__lists.llvm.org_pipermail_llvm-2Ddev_2019-2DNovember_136485.html&d=DwMFaQ&c=5VD0RTtNlTh3ycd41b3MUw&r=o3kDXzdBUE3ljQXKeTWOMw&m=atRWn0u_rLa9ITqRSW-W8QvRJN244hhQmDWillcW3gE&s=HtGj57-MndDqyK71vXRwheQXms3WKx9rT-8WAVyTB3c&e=" target="_blank" class="">
http://lists.llvm.org/pipermail/llvm-dev/2019-November/136485.html</a> <br class="">
[2] <a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__lists.llvm.org_pipermail_llvm-2Ddev_2019-2DNovember_136488.html&d=DwMFaQ&c=5VD0RTtNlTh3ycd41b3MUw&r=o3kDXzdBUE3ljQXKeTWOMw&m=atRWn0u_rLa9ITqRSW-W8QvRJN244hhQmDWillcW3gE&s=hHrZYrGk0WStJ3TjjIsXg2NMvVUP-f4woTFtaFlYkG8&e=" target="_blank" class="">
http://lists.llvm.org/pipermail/llvm-dev/2019-November/136488.html</a> <u class=""></u><u class=""></u></p>
</div>
</div>
</blockquote>
</div><p class="MsoNormal" style="margin-left:0.5in">
 <u class=""></u><u class=""></u></p>
</div>
</div>
</div>
</div><p class="MsoNormal">_______________________________________________<br class="">
LLVM Developers mailing list<br class="">
<a href="mailto:llvm-dev@lists.llvm.org" target="_blank" class="">llvm-dev@lists.llvm.org</a><br class="">
<a href="https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev" target="_blank" class="">https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev</a><u class=""></u><u class=""></u></p>
</blockquote>
</div>
</div><p class="MsoNormal"> <u class=""></u><u class=""></u></p>
<pre class="">_______________________________________________<u class=""></u><u class=""></u></pre>
<pre class="">LLVM Developers mailing list<u class=""></u><u class=""></u></pre>
<pre class=""><a href="mailto:llvm-dev@lists.llvm.org" target="_blank" class="">llvm-dev@lists.llvm.org</a><u class=""></u><u class=""></u></pre>
<pre class=""><a href="https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev" target="_blank" class="">https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev</a><u class=""></u><u class=""></u></pre>
</blockquote>
</div><p class="MsoNormal">_______________________________________________<br class="">
LLVM Developers mailing list<br class="">
<a href="mailto:llvm-dev@lists.llvm.org" target="_blank" class="">llvm-dev@lists.llvm.org</a><br class="">
<a href="https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev" target="_blank" class="">https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev</a><u class=""></u><u class=""></u></p>
</blockquote>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</blockquote>
</div>
</div>
</div>
</div>
</div>

</blockquote></div></div>
_______________________________________________<br class="">
LLVM Developers mailing list<br class="">
<a href="mailto:llvm-dev@lists.llvm.org" target="_blank" class="">llvm-dev@lists.llvm.org</a><br class="">
<a href="https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev" rel="noreferrer" target="_blank" class="">https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev</a><br class="">
</blockquote></div>
</blockquote></div></div>
_______________________________________________<br class="">LLVM Developers mailing list<br class=""><a href="mailto:llvm-dev@lists.llvm.org" class="">llvm-dev@lists.llvm.org</a><br class="">https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev<br class=""></div></blockquote></div><br class=""></body></html>