<html><head></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space; ">Hello,<div><br></div><div>I have a project for which the main language is C (soon CPP) that calls some functions from Intel MKL. I have the need to use four third-party high performance fortran routines and I need to:</div><div><br></div><div>1) be able to call these Fortran routines from my C code</div><div>2) Automatically generate C headers I can include in my C code (use the&nbsp;FortranCInterface.cmake)</div><div>3) be able to compile the Fortran routines and have them linking with/calling MKL's LAPACK and BLAS implementations and not any other possible GNU variants.</div><div><br></div><div>I followed the example here &lt;<a href="http://public.kitware.com/cgi-bin/viewcvs.cgi/Tests/Fortran/?root=CMake">http://public.kitware.com/cgi-bin/viewcvs.cgi/Tests/Fortran/?root=CMake</a>&gt; and I think I am not too far from the target. However, there are a few unclear points e.g. I didn't exactly understand what this line is doing:</div><div><br></div><div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 15px/normal 'Courier New'; color: rgb(68, 109, 146); "><span style="color: #151590">list</span><span style="color: #000000">(</span><span style="color: #936868">APPEND</span><span style="color: #000000"> </span>FORTRAN_FUNCTIONS<span style="color: #000000"> my_sub mysub)</span></div></div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 15px/normal 'Courier New'; color: rgb(68, 109, 146); "><span style="color: #000000"><br></span></div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 15px/normal 'Courier New'; color: rgb(68, 109, 146); "><span style="color: #000000"><span class="Apple-style-span" style="font-family: Helvetica; font-size: medium; ">my attempt to achieve the same thing is:</span></span></div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 15px/normal 'Courier New'; color: rgb(68, 109, 146); "><span style="color: #000000"><span class="Apple-style-span" style="font-family: Helvetica; font-size: medium; "><br></span></span></div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 15px/normal 'Courier New'; color: rgb(68, 109, 146); "><span style="color: #000000"><span class="Apple-style-span" style="font-family: Helvetica; font-size: medium; "><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 15px/normal 'Courier New'; color: rgb(21, 21, 144); ">add_library<span style="color: #000000">(</span><span style="color: #446d92">qr_updates</span><span style="color: #000000"> </span><span style="color: #936868">STATIC</span></div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 15px/normal 'Courier New'; ">&nbsp; &nbsp; src/addcols.f</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 15px/normal 'Courier New'; ">&nbsp; &nbsp; src/addcolsq.f</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 15px/normal 'Courier New'; ">&nbsp; &nbsp; src/delcols.f</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 15px/normal 'Courier New'; ">&nbsp; &nbsp; src/delcolsq.f</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 15px/normal 'Courier New'; ">)</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 15px/normal 'Courier New'; "><br></div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 15px/normal 'Courier New'; "><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 15px/normal 'Courier New'; "><span style="color: #151590">list</span>(<span style="color: #936868">APPEND</span> FORTRAN_FUNCTIONS ADDCOLS addcols)</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 15px/normal 'Courier New'; "><span style="color: #151590">list</span>(<span style="color: #936868">APPEND</span> FORTRAN_FUNCTIONS ADDCOLSQ addcolsq)</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 15px/normal 'Courier New'; "><span style="color: #151590">list</span>(<span style="color: #936868">APPEND</span> FORTRAN_FUNCTIONS DELCOLS delcols)</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 15px/normal 'Courier New'; "><span style="color: #151590">list</span>(<span style="color: #936868">APPEND</span> FORTRAN_FUNCTIONS DELCOLSQ delcolsq)</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 15px/normal 'Courier New'; ">FortranCInterface_HEADER(qr_updates.h</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 15px/normal 'Courier New'; ">&nbsp; &nbsp; MACRO_NAMESPACE <span style="color: #492cfa">"FC_"</span></div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 15px/normal 'Courier New'; ">&nbsp; &nbsp; SYMBOL_NAMESPACE <span style="color: #492cfa">"F_"</span></div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 15px/normal 'Courier New'; ">&nbsp; &nbsp; SYMBOLS ${FORTRAN_FUNCTIONS}</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 15px/normal 'Courier New'; ">)</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 15px/normal 'Courier New'; color: rgb(73, 44, 250); "><span style="color: #151590">include_directories</span><span style="color: #000000">(</span>"${myproject_BINARY_DIR}"<span style="color: #000000">)</span></div><div><span style="color: #000000"><br></span></div></div></span></span><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 15px/normal 'Courier New'; color: rgb(68, 109, 146); font-family: Helvetica; font-size: medium; "><span style="color: rgb(0, 0, 0); "><span class="Apple-style-span" style="font-family: Helvetica; font-size: medium; ">then I get the following qr_updates.h as output:</span></span></div><div><span style="color: rgb(0, 0, 0); "><span class="Apple-style-span" style="font-family: Helvetica; font-size: medium; "><br></span></span></div><div><span style="color: rgb(0, 0, 0); "><span class="Apple-style-span" style="font-family: Helvetica; font-size: medium; "><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 15px/normal 'Courier New'; "><span style="color: #951067"><b>#ifndef</b></span> FC_HEADER_INCLUDED</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 15px/normal 'Courier New'; "><span style="color: #951067"><b>#define</b></span> FC_HEADER_INCLUDED</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 15px/normal 'Courier New'; min-height: 17px; "><br></div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 15px/normal 'Courier New'; color: rgb(75, 144, 115); ">/* Mangling for Fortran global symbols without underscores. */</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 15px/normal 'Courier New'; "><span style="color: #951067"><b>#define</b></span> FC_GLOBAL(name,NAME) name<span style="color: #951067"><b>##</b></span>_</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 15px/normal 'Courier New'; min-height: 17px; "><br></div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 15px/normal 'Courier New'; color: rgb(75, 144, 115); ">/* Mangling for Fortran global symbols with underscores. */</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 15px/normal 'Courier New'; "><span style="color: #951067"><b>#define</b></span> FC_GLOBAL_(name,NAME) name<span style="color: #951067"><b>##</b></span>_</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 15px/normal 'Courier New'; min-height: 17px; "><br></div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 15px/normal 'Courier New'; color: rgb(75, 144, 115); ">/* Mangling for Fortran module symbols without underscores. */</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 15px/normal 'Courier New'; "><span style="color: #951067"><b>#define</b></span> FC_MODULE(mod_name,name, mod_NAME,NAME) __<span style="color: #951067"><b>##</b></span>mod_name<span style="color: #951067"><b>##</b></span>_MOD_<span style="color: #951067"><b>##</b></span>name</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 15px/normal 'Courier New'; min-height: 17px; "><br></div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 15px/normal 'Courier New'; color: rgb(75, 144, 115); ">/* Mangling for Fortran module symbols with underscores. */</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 15px/normal 'Courier New'; "><span style="color: #951067"><b>#define</b></span> FC_MODULE_(mod_name,name, mod_NAME,NAME) __<span style="color: #951067"><b>##</b></span>mod_name<span style="color: #951067"><b>##</b></span>_MOD_<span style="color: #951067"><b>##</b></span>name</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 15px/normal 'Courier New'; min-height: 17px; "><br></div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 15px/normal 'Courier New'; color: rgb(75, 144, 115); ">/*--------------------------------------------------------------------------*/</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 15px/normal 'Courier New'; color: rgb(75, 144, 115); ">/* Mangle some symbols automatically. &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; */</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 15px/normal 'Courier New'; "><span style="color: #951067"><b>#define</b></span> F_ADDCOLS FC_GLOBAL(addcols, ADDCOLS)</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 15px/normal 'Courier New'; "><span style="color: #951067"><b>#define</b></span> F_addcols FC_GLOBAL(addcols, ADDCOLS)</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 15px/normal 'Courier New'; "><span style="color: #951067"><b>#define</b></span> F_ADDCOLSQ FC_GLOBAL(addcolsq, ADDCOLSQ)</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 15px/normal 'Courier New'; "><span style="color: #951067"><b>#define</b></span> F_addcolsq FC_GLOBAL(addcolsq, ADDCOLSQ)</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 15px/normal 'Courier New'; "><span style="color: #951067"><b>#define</b></span> F_DELCOLS FC_GLOBAL(delcols, DELCOLS)</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 15px/normal 'Courier New'; "><span style="color: #951067"><b>#define</b></span> F_delcols FC_GLOBAL(delcols, DELCOLS)</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 15px/normal 'Courier New'; "><span style="color: #951067"><b>#define</b></span> F_DELCOLSQ FC_GLOBAL(delcolsq, DELCOLSQ)</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 15px/normal 'Courier New'; "><span style="color: #951067"><b>#define</b></span> F_delcolsq FC_GLOBAL(delcolsq, DELCOLSQ)</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 15px/normal 'Courier New'; min-height: 17px; "><br></div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 15px/normal 'Courier New'; color: rgb(149, 16, 103); "><b>#endif</b></div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 15px/normal 'Courier New'; color: rgb(149, 16, 103); "><b><br></b></div></span></span><span class="Apple-style-span" style="color: rgb(0, 0, 0); font-family: Helvetica; font-size: medium; ">but the signatures in this generated header look fishy, am I missing anything? For example the function signature for the ADDCOLSQ Fortran routine looks like this:</span></div><div><span class="Apple-style-span" style="color: rgb(0, 0, 0); font-family: Helvetica; font-size: medium; "><br></span></div><div><span class="Apple-style-span" style="color: rgb(0, 0, 0); font-family: Helvetica; font-size: medium; "><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 15px/normal 'Courier New'; color: rgb(34, 33, 200); "><span style="color: #000000">&nbsp; &nbsp; &nbsp;&nbsp;</span><span style="color: #951067"><b>SUBROUTINE</b></span><span style="color: #000000"> </span>ADDCOLSQ<span style="color: #000000">( </span>M<span style="color: #000000">, </span>N<span style="color: #000000">, </span>A<span style="color: #000000">, </span>LDA<span style="color: #000000">, </span>Q<span style="color: #000000">, </span>LDQ<span style="color: #000000">, </span>K<span style="color: #000000">, </span>P<span style="color: #000000">, </span>TAU<span style="color: #000000">, </span>WORK<span style="color: #000000">, </span>INFO<span style="color: #000000">)</span></div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 15px/normal 'Courier New'; color: rgb(75, 144, 115); ">*</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 15px/normal 'Courier New'; color: rgb(75, 144, 115); ">* &nbsp; &nbsp; Craig Lucas, University of Manchester</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 15px/normal 'Courier New'; color: rgb(75, 144, 115); ">* &nbsp; &nbsp; March, 2004</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 15px/normal 'Courier New'; color: rgb(75, 144, 115); ">*</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 15px/normal 'Courier New'; color: rgb(75, 144, 115); ">* &nbsp; &nbsp; .. Scalar Arguments ..</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 15px/normal 'Courier New'; ">&nbsp; &nbsp; &nbsp; <span style="color: #951067"><b>INTEGER</b></span>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #2221c8">INFO</span>, <span style="color: #2221c8">K</span>, <span style="color: #2221c8">LDA</span>, <span style="color: #2221c8">LDQ</span>, <span style="color: #2221c8">M</span>, <span style="color: #2221c8">N</span>, <span style="color: #2221c8">P</span></div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 15px/normal 'Courier New'; color: rgb(75, 144, 115); ">* &nbsp; &nbsp; ..</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 15px/normal 'Courier New'; color: rgb(75, 144, 115); ">* &nbsp; &nbsp; .. Array Arguments ..</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 15px/normal 'Courier New'; ">&nbsp; &nbsp; &nbsp; <span style="color: #951067"><b>DOUBLE</b></span> <span style="color: #951067"><b>PRECISION</b></span> &nbsp; <span style="color: #2221c8">A</span>( <span style="color: #2221c8">LDA</span>, * ), <span style="color: #2221c8">Q</span>( <span style="color: #2221c8">LDQ</span>, * ), <span style="color: #2221c8">TAU</span>( * ), <span style="color: #2221c8">WORK</span>( * )</div></span></div><div><span class="Apple-style-span" style="color: rgb(0, 0, 0); font-family: Helvetica; font-size: medium; "><br></span></div><div><span class="Apple-style-span" style="color: rgb(0, 0, 0); font-family: Helvetica; font-size: medium; ">I expected the generated header to contain a matching signature or?</span></div><div><span class="Apple-style-span" style="color: rgb(0, 0, 0); font-family: Helvetica; font-size: medium; "><br></span></div><div><span class="Apple-style-span" style="color: rgb(0, 0, 0); font-family: Helvetica; font-size: medium; "></span></div><div><span class="Apple-style-span" style="color: rgb(0, 0, 0); font-family: Helvetica; font-size: medium; ">TIA,</span></div><div><span class="Apple-style-span" style="color: rgb(0, 0, 0); font-family: Helvetica; font-size: medium; ">Best regards,</span></div><div><span class="Apple-style-span" style="color: rgb(0, 0, 0); font-family: Helvetica; font-size: medium; ">Giovanni</span></div></div></body></html>