<html xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns:m="http://schemas.microsoft.com/office/2004/12/omml" xmlns="http://www.w3.org/TR/REC-html40">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta name="Generator" content="Microsoft Word 15 (filtered medium)">
<style><!--
/* Font Definitions */
@font-face
        {font-family:Helvetica;
        panose-1:2 11 6 4 2 2 2 2 2 4;}
@font-face
        {font-family:"Cambria Math";
        panose-1:2 4 5 3 5 4 6 3 2 4;}
@font-face
        {font-family:Calibri;
        panose-1:2 15 5 2 2 2 4 3 2 4;}
@font-face
        {font-family:Monaco;
        panose-1:0 0 0 0 0 0 0 0 0 0;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
        {margin:0in;
        margin-bottom:.0001pt;
        font-size:11.0pt;
        font-family:"Calibri",sans-serif;}
a:link, span.MsoHyperlink
        {mso-style-priority:99;
        color:blue;
        text-decoration:underline;}
a:visited, span.MsoHyperlinkFollowed
        {mso-style-priority:99;
        color:purple;
        text-decoration:underline;}
p.msonormal0, li.msonormal0, div.msonormal0
        {mso-style-name:msonormal;
        mso-margin-top-alt:auto;
        margin-right:0in;
        mso-margin-bottom-alt:auto;
        margin-left:0in;
        font-size:11.0pt;
        font-family:"Calibri",sans-serif;}
span.apple-converted-space
        {mso-style-name:apple-converted-space;}
span.EmailStyle19
        {mso-style-type:personal;
        font-family:"Calibri",sans-serif;
        color:windowtext;}
span.EmailStyle20
        {mso-style-type:personal-compose;
        font-family:"Calibri",sans-serif;
        color:windowtext;}
.MsoChpDefault
        {mso-style-type:export-only;
        font-size:10.0pt;}
@page WordSection1
        {size:8.5in 11.0in;
        margin:1.0in 1.0in 1.0in 1.0in;}
div.WordSection1
        {page:WordSection1;}
--></style><!--[if gte mso 9]><xml>
<o:shapedefaults v:ext="edit" spidmax="1026" />
</xml><![endif]--><!--[if gte mso 9]><xml>
<o:shapelayout v:ext="edit">
<o:idmap v:ext="edit" data="1" />
</o:shapelayout></xml><![endif]-->
</head>
<body lang="EN-US" link="blue" vlink="purple">
<div class="WordSection1">
<p class="MsoNormal">Wanting to use new features is a good reason to upgrade. You say you need 3.8 in order to compile C++17 code, which is needed by your subproject. This is a good reason to upgrade the version. The proposed policy of bumping the CMake minimum
 version periodically to within some distance of bleeding edge “just because” is what I object to. We should decide what cmake features we want to use, justify them to ourselves, and then upgrade the version to the lowest version that supports the required
 new features. We shouldn’t institute a policy of “we upgrade the CMake version to (latest release – N) every T time interval”.<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">As for the difficulty of upgrading CMake on a target machine; no amount of “it’s really easy to do a thing” can make up for “my organization will not allow me to do a thing.”<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<div>
<div style="border:none;border-top:solid #E1E1E1 1.0pt;padding:3.0pt 0in 0in 0in">
<p class="MsoNormal"><b>From:</b> ldionne@apple.com <ldionne@apple.com> <br>
<b>Sent:</b> Thursday, March 26, 2020 7:33 AM<br>
<b>To:</b> Chris Tetreault <ctetreau@quicinc.com><br>
<b>Cc:</b> Nikita Popov <nikita.ppv@gmail.com>; Libc++ Dev <libcxx-dev@lists.llvm.org>; llvm-dev@lists.llvm.org<br>
<b>Subject:</b> [EXT] Re: [llvm-dev] Bumping the CMake requirement for libc++ and libc++abi<o:p></o:p></p>
</div>
</div>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<div>
<blockquote style="margin-top:5.0pt;margin-bottom:5.0pt">
<div>
<p class="MsoNormal">On Mar 25, 2020, at 19:42, Chris Tetreault <<a href="mailto:ctetreau@quicinc.com">ctetreau@quicinc.com</a>> wrote:<o:p></o:p></p>
</div>
<p class="MsoNormal"><o:p> </o:p></p>
<div>
<div>
<p class="MsoNormal" style="text-indent:.5in">I would like to just chime in and say that I’m fairly strongly opposed to any blanket version increases without justification. Having a low version requirement is a feature. It means that more people can build the
 codebase. We should increase the minimum CMake version requirement only if we need to do so in order to use a new feature. We should be disciplined in deciding when to use new features if they result in the minimum CMake version being increased too much. What
 recent Linux LTS distros ship can help inform these decisions, but we shouldn’t just upgrade the minimum CMake version to version X just because Linux distro Y ships that version.<o:p></o:p></p>
</div>
</div>
</blockquote>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal">The reason for wanting to upgrade is evidently the use of new features that would simplify and clean up the build system quite a bit. I can't speak for other projects, but libc++ and libc++abi are suffering a lot from the lack of e.g. compile_features
 in recent CMakes.<o:p></o:p></p>
</div>
<p class="MsoNormal"><br>
<br>
<o:p></o:p></p>
<blockquote style="margin-top:5.0pt;margin-bottom:5.0pt">
<div>
<div>
<p class="MsoNormal" style="text-indent:.5in"> <o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="text-indent:.5in">Anybody who has ever needed to build something on some ancient version of CentOS because work refuses to upgrade will thank you.<o:p></o:p></p>
</div>
</div>
</blockquote>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal">Honestly, CMake is so easy to install that I have a hard time relating:<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-family:"Monaco",serif">  curl -L <a href="https://github.com/Kitware/CMake/releases/download/v3.17.0/cmake-3.17.0-Linux-x86_64.sh">
https://github.com/Kitware/CMake/releases/download/v3.17.0/cmake-3.17.0-Linux-x86_64.sh</a> | bash /dev/stdin --skip-license --prefix=<YOUR-INSTALLATION-PREFIX></span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal">This takes about 10 seconds to run and you've got yourself the latest CMake. I understand how upgrading some tools is difficult, but CMake just isn't.<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal">Louis<o:p></o:p></p>
</div>
<p class="MsoNormal"><br>
<br>
<o:p></o:p></p>
<blockquote style="margin-top:5.0pt;margin-bottom:5.0pt">
<div>
<div>
<p class="MsoNormal"> <o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"> <o:p></o:p></p>
</div>
<div>
<div style="border:none;border-top:solid #E1E1E1 1.0pt;padding:3.0pt 0in 0in 0in">
<div>
<p class="MsoNormal"><b>From:</b><span class="apple-converted-space"> </span>llvm-dev <<a href="mailto:llvm-dev-bounces@lists.llvm.org">llvm-dev-bounces@lists.llvm.org</a>><span class="apple-converted-space"> </span><b>On Behalf Of<span class="apple-converted-space"> </span></b>Louis
 Dionne via llvm-dev<br>
<b>Sent:</b><span class="apple-converted-space"> </span>Wednesday, March 25, 2020 10:14 AM<br>
<b>To:</b><span class="apple-converted-space"> </span>Nikita Popov <<a href="mailto:nikita.ppv@gmail.com">nikita.ppv@gmail.com</a>><br>
<b>Cc:</b><span class="apple-converted-space"> </span>llvm-dev <<a href="mailto:llvm-dev@lists.llvm.org">llvm-dev@lists.llvm.org</a>>; Libc++ Dev <<a href="mailto:libcxx-dev@lists.llvm.org">libcxx-dev@lists.llvm.org</a>><br>
<b>Subject:</b><span class="apple-converted-space"> </span>[EXT] Re: [llvm-dev] Bumping the CMake requirement for libc++ and libc++abi<o:p></o:p></p>
</div>
</div>
</div>
<div>
<p class="MsoNormal"> <o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"> <o:p></o:p></p>
</div>
<div>
<div>
<p class="MsoNormal"><br>
<br>
<br>
<o:p></o:p></p>
</div>
<blockquote style="margin-top:5.0pt;margin-bottom:5.0pt">
<div>
<div>
<p class="MsoNormal">On Mar 25, 2020, at 13:07, Nikita Popov <<a href="mailto:nikita.ppv@gmail.com"><span style="color:purple">nikita.ppv@gmail.com</span></a>> wrote:<o:p></o:p></p>
</div>
</div>
<div>
<p class="MsoNormal"> <o:p></o:p></p>
</div>
<div>
<div>
<div>
<div>
<div>
<p class="MsoNormal"><span style="font-size:9.0pt;font-family:"Helvetica",sans-serif">On Wed, Mar 25, 2020 at 5:01 PM Tom Stellard via llvm-dev <<a href="mailto:llvm-dev@lists.llvm.org"><span style="color:purple">llvm-dev@lists.llvm.org</span></a>> wrote:</span><o:p></o:p></p>
</div>
</div>
<blockquote style="border:none;border-left:solid #CCCCCC 1.0pt;padding:0in 0in 0in 6.0pt;margin-left:4.8pt;margin-top:5.0pt;margin-right:0in;margin-bottom:5.0pt">
<div>
<p class="MsoNormal"><span style="font-size:9.0pt;font-family:"Helvetica",sans-serif">On 03/25/2020 06:20 AM, Louis Dionne wrote:<br>
><span class="apple-converted-space"> </span><br>
><span class="apple-converted-space"> </span><br>
>> On Mar 25, 2020, at 00:47, Tom Stellard <<a href="mailto:tstellar@redhat.com" target="_blank"><span style="color:purple">tstellar@redhat.com</span></a>> wrote:<br>
>><br>
>> On 03/24/2020 09:00 PM, Petr Hosek via llvm-dev wrote:<br>
>>> In October, there was a discussion about updating CMake to 3.15:<span class="apple-converted-space"> </span><a href="http://lists.llvm.org/pipermail/llvm-dev/2019-October/136295.html" target="_blank"><span style="color:purple">http://lists.llvm.org/pipermail/llvm-dev/2019-October/136295.html</span></a>.
 No decision was made, but maybe we should revisit that proposal? If we're going to require a newer version of CMake for some subprojects, I'd prefer to bump the minimum CMake version for all of LLVM.<br>
><span class="apple-converted-space"> </span><br>
> My personal opinion is that there's a tendency to view all subprojects under the LLVM umbrella as a single, monolithic project. That leads to the desire to make decisions for the whole project, which is often difficult, as opposed to making the right decision
 for each subproject, which is often easier. This results on subprojects being blocked from doing the right thing for them, like we've seen happen for pre-commit CI. But that's a much larger (non-technical) discussion than the scope of a simple CMake version
 bump.<br>
><span class="apple-converted-space"> </span><br>
> Let's try to bump CMake for all of LLVM and see how that goes.<br>
><span class="apple-converted-space"> </span><br>
>> Yes, I agree we should bump the version for all of LLVM, but I don't<br>
>> think we should bump the version without a long-term cmake usage plan.<br>
>> e.g. something like: After every release branch, we bump the cmake version<br>
>> to whatever version of cmake is X months old.<br>
>><br>
>> I think the concern that this was our one chance to bump the CMake version<br>
>> led to the choice of 3.15 as the next version, which would be too new for some Linux distros.<br>
>> I think if we had a planned upgrade path, it would be easier for those of us that<br>
>> want something really new to settle on a release that is a little bit older.<br>
><span class="apple-converted-space"> </span><br>
> Ok, how about the following policy:<br>
><span class="apple-converted-space"> </span><br>
>   After every release branch, we bump the CMake version to whatever version of CMake is 12 months old.<br>
><span class="apple-converted-space"> </span><br>
> This is simple, straightforward, and it gives a full year of old CMakes being supported. If we did this right now, this would take us to CMake 3.14.0, released around March 14th, 2019 (<a href="https://github.com/Kitware/CMake/releases/tag/v3.14.0" target="_blank"><span style="color:purple">https://github.com/Kitware/CMake/releases/tag/v3.14.0</span></a>).
 I believe the expectation should be that recent CMakes are upgraded using some package manager or download from the site -- we can't really expect the CMake version to be the one provided by the system, because that is either non-existent or very old on most
 Linux distributions AFAICT. Fortunately, installing a new CMake is incredibly easy.<br>
><span class="apple-converted-space"> </span><br>
> Is everybody OK with the above policy? What would be the preferred place to document it?<br>
><span class="apple-converted-space"> </span><br>
<br>
12 months is fine with me.<br>
<br>
I'm not sure the best place to document the policy.  Some suggestions are here:<br>
<a href="https://llvm.org/docs/CMake.html" target="_blank"><span style="color:purple">https://llvm.org/docs/CMake.html</span></a><span class="apple-converted-space"> </span>or in the Programmer's manual.</span><o:p></o:p></p>
</div>
</blockquote>
<div>
<div>
<p class="MsoNormal"><span style="font-size:9.0pt;font-family:"Helvetica",sans-serif"> </span><o:p></o:p></p>
</div>
</div>
<div>
<div>
<p class="MsoNormal"><span style="font-size:9.0pt;font-family:"Helvetica",sans-serif">I think the relevant metric here needs to be "which version is available on current LTS distros", and not "how old is the release". The current cmake version I have on Ubuntu
 18.04 is cmake 3.10.2, so I personally would be happy with a bump to that version, but not something newer. People using other distributions probably have other considerations. If someone wants to perform a cmake version bump, I believe the first step would
 be to gather what the cmake version availability across distros looks like right now, so an informed decision can be made.</span><o:p></o:p></p>
</div>
</div>
</div>
</div>
</div>
</blockquote>
<div>
<div>
<p class="MsoNormal"> <o:p></o:p></p>
</div>
</div>
<div>
<div>
<p class="MsoNormal">I'll actually suggest that we might want to do something else entirely. If we depend on the version available in distros, then we are at the mercy of those distros not updating. It also means that we need to look at several distributions
 and try to satisfy everybody. That's a lot harder than requiring that people download a recent CMake from<span class="apple-converted-space"> </span><a href="http://cmake.org/"><span style="color:purple">cmake.org</span></a>.<o:p></o:p></p>
</div>
</div>
<div>
<div>
<p class="MsoNormal"> <o:p></o:p></p>
</div>
</div>
<div>
<div>
<p class="MsoNormal">CMake has the benefit of being incredibly easy to install, either from source or with the binaries provided on their website. Do you think it's an unreasonable requirement to ask folks to download CMake instead of using the one provided
 with their OS?<o:p></o:p></p>
</div>
</div>
</div>
<div>
<p class="MsoNormal"> <o:p></o:p></p>
</div>
<div>
<div>
<p class="MsoNormal">Louis<o:p></o:p></p>
</div>
</div>
</div>
</blockquote>
</div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
</body>
</html>