<div class="markdown_content"><hr />
<p><strong> <a class="alink" href="http://sourceforge.net/p/pure-data/bugs/1100/">[bugs:#1100]</a> CFLAGS=-O6 breaks CC=clang</strong></p>
<p><strong>Status:</strong> open<br />
<strong>Labels:</strong> buildsystem performance <br />
<strong>Created:</strong> Wed Aug 07, 2013 09:58 AM UTC by Claude Heiland-Allen<br />
<strong>Last Updated:</strong> Wed Aug 07, 2013 09:58 AM UTC<br />
<strong>Owner:</strong> nobody</p>
<h2 id="versions">Versions</h2>
<div class="codehilite"><pre><span class="n">Pd</span><span class="o">-</span><span class="mf">0.45.0</span> <span class="p">(</span><span class="s">&quot;test&quot;</span><span class="p">)</span> <span class="n">compiled</span> <span class="mi">10</span><span class="o">:</span><span class="mi">29</span><span class="o">:</span><span class="mi">40</span> <span class="n">Aug</span>  <span class="mi">7</span> <span class="mi">2013</span>   <span class="p">(</span><span class="n">git</span> <span class="n">from</span> <span class="n">today</span><span class="p">)</span>
<span class="n">gcc</span> <span class="p">(</span><span class="n">Debian</span> <span class="mf">4.7.2</span><span class="o">-</span><span class="mi">5</span><span class="p">)</span> <span class="mf">4.7.2</span>
<span class="n">Debian</span> <span class="n">clang</span> <span class="n">version</span> <span class="mf">3.0</span><span class="o">-</span><span class="mf">6.2</span> <span class="p">(</span><span class="n">tags</span><span class="o">/</span><span class="n">RELEASE_30</span><span class="o">/</span><span class="n">final</span><span class="p">)</span> <span class="p">(</span><span class="n">based</span> <span class="n">on</span> <span class="n">LLVM</span> <span class="mf">3.0</span><span class="p">)</span>
<span class="n">Linux</span> <span class="n">cappuccino</span> <span class="mf">3.2.0</span><span class="o">-</span><span class="mi">4</span><span class="o">-</span><span class="n">amd64</span> <span class="err">#</span><span class="mi">1</span> <span class="n">SMP</span> <span class="n">Debian</span> <span class="mf">3.2.46</span><span class="o">-</span><span class="mi">1</span> <span class="n">x86_64</span> <span class="n">GNU</span><span class="o">/</span><span class="n">Linux</span>
</pre></div>
<h2 id="reproduction">Reproduction</h2>
<div class="codehilite"><pre><span class="p">.</span><span class="o">/</span><span class="n">autogen</span><span class="p">.</span><span class="n">sh</span>
<span class="n">CC</span><span class="o">=</span><span class="n">clang</span> <span class="p">.</span><span class="o">/</span><span class="n">configure</span> <span class="p">...</span>
</pre></div>
<h2 id="what-happens">What Happens</h2>
<div class="codehilite"><pre><span class="n">configure</span><span class="o">:</span> <span class="n">error</span><span class="o">:</span> <span class="n">C</span> <span class="n">compiler</span> <span class="n">cannot</span> <span class="n">create</span> <span class="n">executables</span>
<span class="n">See</span> <span class="err">`</span><span class="n">config</span><span class="o">.</span><span class="na">log</span><span class="err">'</span> <span class="k">for</span> <span class="n">more</span> <span class="n">details</span>
</pre></div>
<p>The log contains:</p>
<div class="codehilite"><pre><span class="n">configure</span><span class="o">:</span><span class="mi">3810</span><span class="o">:</span> <span class="n">checking</span> <span class="n">whether</span> <span class="n">the</span> <span class="n">C</span> <span class="n">compiler</span> <span class="n">works</span>
<span class="n">configure</span><span class="o">:</span><span class="mi">3832</span><span class="o">:</span> <span class="n">clang</span>  <span class="o">-</span><span class="n">O6</span> <span class="o">-</span><span class="n">funroll</span><span class="o">-</span><span class="n">loops</span> <span class="o">-</span><span class="n">fomit</span><span class="o">-</span><span class="n">frame</span><span class="o">-</span><span class="n">pointer</span>   <span class="n">conftest</span><span class="o">.</span><span class="na">c</span>  <span class="o">&gt;&amp;</span><span class="mi">5</span>
<span class="n">error</span><span class="o">:</span> <span class="n">invalid</span> <span class="n">value</span> <span class="s1">'6'</span> <span class="k">in</span> <span class="s1">'-O6'</span>
</pre></div>
<h2 id="what-i-expected">What I Expected</h2>
<p>Pd's build system to autodetect which -O# levels are supported by the chosen compiler, or at least use a more reasonable default.</p>
<h2 id="what-happened-after-i-fixed-it">What Happened After I Fixed It</h2>
<p>Pd's load meter reported that one patch of mine used 10% CPU when Pd was compiled with clang's -O3.  In comparison, Pd compiled with gcc's -O6 used 25% CPU.  I did disable CPU frequency scaling on all cores for this test.</p>
<h2 id="simple-bugfix-patch">Simple Bugfix Patch</h2>
<div class="codehilite"><pre><span class="gh">diff --git a/configure.ac b/configure.ac</span>
<span class="gh">index 5bd21cc..255ad42 100644</span>
<span class="gd">--- a/configure.ac</span>
<span class="gi">+++ b/configure.ac</span>
<span class="gu">@@ -45,7 +45,7 @@ case $host in</span>
        if test &quot;x${ANDROID}&quot; = &quot;xno&quot;; then
         LINUX=yes
         portaudio=yes
<span class="gd">-        CFLAGS=&quot;$CFLAGS -O6 -funroll-loops -fomit-frame-pointer&quot;</span>
<span class="gi">+        CFLAGS=&quot;$CFLAGS -O3 -funroll-loops -fomit-frame-pointer&quot;</span>
        fi
        EXTERNAL_CFLAGS=&quot;-fPIC&quot;
        EXTERNAL_LDFLAGS=&quot;-Wl,--export-dynamic -shared -fPIC&quot;
</pre></div>
<p>A better patch would set CFLAGS after detecting which compiler is being used.</p>
<hr />
<p>Sent from sourceforge.net because pd-dev@lists.iem.at is subscribed to <a href="https://sourceforge.net/p/pure-data/bugs/">https://sourceforge.net/p/pure-data/bugs/</a></p>
<p>To unsubscribe from further messages, a project admin can change settings at <a href="https://sourceforge.net/p/pure-data/admin/bugs/options.">https://sourceforge.net/p/pure-data/admin/bugs/options.</a>  Or, if this is a mailing list, you can unsubscribe from the mailing list.</p></div>