<html>#2553: Cactus' link command uses CPPFLAGS and CXXFLAGS
<table style='border-spacing: 1ex 0pt; '>
<tr><td style='text-align:right'> Reporter:</td><td>Roland Haas</td></tr>
<tr><td style='text-align:right'>   Status:</td><td>open</td></tr>
<tr><td style='text-align:right'>Milestone:</td><td></td></tr>
<tr><td style='text-align:right'>  Version:</td><td>development version</td></tr>
<tr><td style='text-align:right'>     Type:</td><td>bug</td></tr>
<tr><td style='text-align:right'> Priority:</td><td>minor</td></tr>
<tr><td style='text-align:right'>Component:</td><td>Cactus</td></tr>
</table>

<p>Comment (by Roland Haas):</p>
<p>Well making LD be nvcc gives me extra trouble when compiling ExternalLibraries (same sort of issues that come from having Cactus LIBS mean something different then autoconf’s LIBS).</p>
<p>Instead I peeked at Formaline and wrote a short ExternallLibraries/CUDA thorn that adapts Cactus' link step based on the documentation by NVIDIA. The thorn is here:  <a data-is-external-link="true" href="https://github.com/rhaas80/ExternalLibraries-CUDA.git" rel="nofollow">https://github.com/rhaas80/ExternalLibraries-CUDA.git</a> and the trick is to collect all CUDA code in a new library using nvcc (just as NVIDIA shows):</p>
<div class="codehilite"><pre><span></span><span class="nv">CACTUSLIBLINKLINE</span> <span class="o">+=</span> -l<span class="k">$(</span>CCTK_LIBNAME_PREFIX<span class="k">)</span>CUDA-gpucode

<span class="nv">CUDA-LIB</span> <span class="o">=</span> <span class="k">$(</span>CCTK_LIBDIR<span class="k">)</span>/<span class="k">$(</span>LIBNAME_PREFIX<span class="k">)$(</span>CCTK_LIBNAME_PREFIX<span class="k">)</span>CUDA-gpucode<span class="k">$(</span>LIBNAME_SUFFIX<span class="k">)</span>

<span class="nf">$(EXEDIR)$(DIRSEP)$(EXE)</span><span class="o">:</span> <span class="k">$(</span><span class="nv">CUDA-LIB</span><span class="k">)</span>

<span class="c"># TODO: make this depend on only the thorns that REQUIRE CUDA</span>
<span class="c"># TODO: check if depending on LINKLIST would be enough</span>
<span class="nf">$(CUDA-LIB)</span><span class="o">:</span> <span class="k">$(</span><span class="nv">CONFIG</span><span class="k">)</span>/<span class="n">make</span>.<span class="n">thornlist</span> <span class="k">$(</span><span class="nv">CONFIG</span><span class="k">)</span>/<span class="n">cctki_version</span>.<span class="n">h</span> <span class="k">$(</span><span class="nv">patsubst</span> %,<span class="k">$(</span><span class="nv">CCTK_LIBDIR</span><span class="k">)</span>/<span class="k">$(</span><span class="nv">LIBNAME_PREFIX</span><span class="k">)$(</span><span class="nv">CCTK_LIBNAME_PR
<p>--<br/>
Ticket URL: <a href='https://bitbucket.org/einsteintoolkit/tickets/issues/2553/cactus-link-command-uses-cppflags-and'>https://bitbucket.org/einsteintoolkit/tickets/issues/2553/cactus-link-command-uses-cppflags-and</a></p>
</html>