<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
</head>
<body>
<p>I'll comment that not all new developers of LLVM have experience
w/cmake. A while back, we did a hack-a-thon for folks interested
in learning about LLVM. We had many, many, many new contributors
who lost most of the day to build times and build sizes because of
the defaults. (The size issue was almost the bigger problem; many
didn't have enough free space to complete a unoptimized/debug
build.)</p>
<p>Personally, I think we should either a) change the defaults or b)
put a prominent warning in the docs. <br>
</p>
<p>Philip<br>
</p>
<div class="moz-cite-prefix">On 11/18/2020 9:44 AM, Chris Tetreault
via llvm-dev wrote:<br>
</div>
<blockquote type="cite"
cite="mid:BYAPR02MB45515520DED086C3AFD7D8B2DAE10@BYAPR02MB4551.namprd02.prod.outlook.com">
<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:"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;}
/* 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;}
span.EmailStyle18
{mso-style-type:personal-reply;
font-family:"Calibri",sans-serif;
color:windowtext;}
.MsoChpDefault
{mso-style-type:export-only;
font-family:"Calibri",sans-serif;}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]-->
<div class="WordSection1">
<p class="MsoNormal">I have no strong opinion on this topic
personally (I always set the build type to something if I’m
not generating a Visual Studio project), but this
“non-optimized, non-asserting, non-debug-info-containing”
build that you get when not specifying the build type to CMake
is a quirk that I feel most CMake users expect at this point.
I don’t think there’s any real value in providing a useful
default if nobody accepts the default anyways due to having
been burned in the past.<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">Thanks,<o:p></o:p></p>
<p class="MsoNormal"> Christopher Tetreault<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal"><b>From:</b> llvm-dev
<a class="moz-txt-link-rfc2396E" href="mailto:llvm-dev-bounces@lists.llvm.org"><llvm-dev-bounces@lists.llvm.org></a> <b>On Behalf Of
</b>Mehdi AMINI via llvm-dev<br>
<b>Sent:</b> Tuesday, November 17, 2020 7:16 PM<br>
<b>To:</b> Luke Drummond <a class="moz-txt-link-rfc2396E" href="mailto:luke.drummond@codeplay.com"><luke.drummond@codeplay.com></a><br>
<b>Cc:</b> llvm-dev <a class="moz-txt-link-rfc2396E" href="mailto:llvm-dev@lists.llvm.org"><llvm-dev@lists.llvm.org></a><br>
<b>Subject:</b> [EXT] Re: [llvm-dev] wasteful cmake defaults<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<div>
<div>
<div>
<p class="MsoNormal">Hi,<o:p></o:p></p>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal">The CMake default is an empty build
type, which yield a non-optimized build without debug
information and without assertions, it isn't clear
that it is really good for most (developers likely
want debug info and assertions in non-optimized
builds, non developers may want a release build).<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">See also the revision that
introduced the current behavior: <a
href="http://reviews.llvm.org/D7360"
moz-do-not-send="true">
http://reviews.llvm.org/D7360</a><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal">We could make Release the default I
guess, the main drawback I see right now is that it
could affect bots that are relying on the default and
wouldn't get assertions anymore?<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">That said our upstream buildbots
infra seems to have explicit defaults: <a
href="https://github.com/llvm/llvm-zorg/blob/master/zorg/buildbot/builders/UnifiedTreeBuilder.py#L125-L127"
moz-do-not-send="true">https://github.com/llvm/llvm-zorg/blob/master/zorg/buildbot/builders/UnifiedTreeBuilder.py#L125-L127</a><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal">For LLD, I don't think we have
auto-detection, but I'd be on-board with
auto-detecting it and have -DLLVM_ENABLE_LLD default
to the auto-detection when empty. But that's another
topic...<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">-- <o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">Mehdi<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
</div>
</div>
</div>
<p class="MsoNormal"><o:p> </o:p></p>
<div>
<div>
<p class="MsoNormal">On Tue, Nov 17, 2020 at 5:50 PM David
Blaikie via llvm-dev <<a
href="mailto:llvm-dev@lists.llvm.org"
moz-do-not-send="true">llvm-dev@lists.llvm.org</a>>
wrote:<o:p></o:p></p>
</div>
<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">Yeah, that's one I'd be in favor of
fixing, if it's still the case.<br>
<br>
On Tue, Nov 17, 2020 at 5:38 PM Sean Silva via llvm-dev<br>
<<a href="mailto:llvm-dev@lists.llvm.org"
target="_blank" moz-do-not-send="true">llvm-dev@lists.llvm.org</a>>
wrote:<br>
><br>
> I'm curious how much of this is due to not using LLD?
Last I checked, using ld.bfd instead of LLD (or gold) was
one of my major build time issues, and somehow our default
configuration would use ld.bfd.<br>
><br>
> -- Sean Silva<br>
><br>
> On Tue, Nov 17, 2020 at 10:25 AM Luke Drummond via
llvm-dev <<a href="mailto:llvm-dev@lists.llvm.org"
target="_blank" moz-do-not-send="true">llvm-dev@lists.llvm.org</a>>
wrote:<br>
>><br>
>> Hi all<br>
>><br>
>> I wanted to do a quick build of a clean branch
yesterday and noticed<br>
>> something surprising in the configure log:<br>
>><br>
>> > -- No build type selected, default to Debug<br>
>><br>
>> It appears that llvm's configuration forces Debug
builds if the user<br>
>> does not specify the build type.<br>
>><br>
>> <a
href="https://github.com/llvm/llvm-project/blob/9218ff50f93085d0a16a974db28ca8f14bc66f64/llvm/CMakeLists.txt#L57-L60"
target="_blank" moz-do-not-send="true">https://github.com/llvm/llvm-project/blob/9218ff50f93085d0a16a974db28ca8f14bc66f64/llvm/CMakeLists.txt#L57-L60</a><br>
>><br>
>> I've just done a build of llvm and clang 10 in
debug mode for X86 and<br>
>> ARM targets and it weighs in at a whopping 75GiB.
I feel that forcing<br>
>> Debug builds in the absence of an option to be a
wasteful default. It is<br>
>> a valid and useful thing to call cmake without
specifying a build type;<br>
>> absence of a command line switch does not always
imply absence of a<br>
>> choice.<br>
>><br>
>> I took some measurements. The machine under test
is an otherwise<br>
>> unloaded Ryzen 2 server with 6 cores / 12 threads
and fast NVME SSDs<br>
>> running Debian sid with gcc-10.2 as the host
toolchain.<br>
>><br>
>> $ cmake ../llvm -DCMAKE_BUILD_TYPE=Debug
-GNinja \<br>
>> -DLLVM_TARGETS_TO_BUILD=X86
-DCMAKE_EXPORT_COMPILE_COMMANDS=ON<br>
>> ...<br>
>> $ time ninja llc<br>
>> ...<br>
>> [1199/1199] Linking CXX executable bin/llc<br>
>> ninja llc 6858.95s user 218.53s system 1095%
cpu 10:45.78 total<br>
>><br>
>> and then:<br>
>><br>
>> $ git apply <<'EOF'<br>
>> diff --git a/llvm/CMakeLists.txt
b/llvm/CMakeLists.txt<br>
>> index 21563e15118..3f5821351a1 100644<br>
>> --- a/llvm/CMakeLists.txt<br>
>> +++ b/llvm/CMakeLists.txt<br>
>> @@ -55,8 +55,8 @@
set(CMAKE_CXX_STANDARD_REQUIRED YES)<br>
>> set(CMAKE_CXX_EXTENSIONS NO)<br>
>><br>
>> if (NOT CMAKE_BUILD_TYPE AND NOT
CMAKE_CONFIGURATION_TYPES)<br>
>> - message(STATUS "No build type selected,
default to Debug")<br>
>> - set(CMAKE_BUILD_TYPE "Debug" CACHE
STRING "Build type (default Debug)" FORCE)<br>
>> + # message(STATUS "No build type
selected, default to Debug")<br>
>> + # set(CMAKE_BUILD_TYPE "Debug" CACHE
STRING "Build type (default Debug)" FORCE)<br>
>> endif()<br>
>><br>
>> # Side-by-side subprojects layout:
automatically set the<br>
>> EOF<br>
>><br>
>> $ cmake ../llvm -DCMAKE_BUILD_TYPE= -GNinja
-DLLVM_TARGETS_TO_BUILD=X86 \<br>
>> -DCMAKE_EXPORT_COMPILE_COMMANDS=ON<br>
>> ...<br>
>> $ time ninja llc<br>
>> [1199/1199] Linking CXX executable bin/llc<br>
>> ninja llc 5714.52s user 159.31s system 1125%
cpu 8:41.99 total<br>
>><br>
>> There's two minutes difference just for an X86
capable `llc` target on<br>
>> this machine. I imagine there are plenty of
configurations in which the<br>
>> ratio is *much* larger e.g. machines with slow
disks and lots of cores.<br>
>><br>
>> I think this speedup will be especially useful in
CI systems where<br>
>> getting a compiler build quickly is more
important than getting a quick<br>
>> compiler. I don't imagine we ever use the
debuginfo generated by the<br>
>> host toolchain in the buildbots, either.<br>
>><br>
>> Is there anything I'm missing, or can this
override be safely deleted?<br>
>> Would a patch to Zorg be needed / appropriate for
the fast buildbots?<br>
>><br>
>> All the Best<br>
>><br>
>> Luke<br>
>><br>
>> --<br>
>> Codeplay Software Ltd.<br>
>> Company registered in England and Wales, number:
04567874<br>
>> Registered office: Regent House, 316 Beulah Hill,
London, SE19 3HF<br>
>> _______________________________________________<br>
>> LLVM Developers mailing list<br>
>> <a href="mailto:llvm-dev@lists.llvm.org"
target="_blank" moz-do-not-send="true">llvm-dev@lists.llvm.org</a><br>
>> <a
href="https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev"
target="_blank" moz-do-not-send="true">
https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev</a><br>
><br>
> _______________________________________________<br>
> LLVM Developers mailing list<br>
> <a href="mailto:llvm-dev@lists.llvm.org"
target="_blank" moz-do-not-send="true">llvm-dev@lists.llvm.org</a><br>
> <a
href="https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev"
target="_blank" moz-do-not-send="true">
https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev</a><br>
_______________________________________________<br>
LLVM Developers mailing list<br>
<a href="mailto:llvm-dev@lists.llvm.org" target="_blank"
moz-do-not-send="true">llvm-dev@lists.llvm.org</a><br>
<a
href="https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev"
target="_blank" moz-do-not-send="true">https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev</a><o:p></o:p></p>
</blockquote>
</div>
</div>
<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>