<div dir="ltr">Hi Ahmad,<div><br></div><div style>Yes, merging works good. </div><div style><br></div><div style>However, my problem is like this - I have a C library which consists of 1000's of functions spread through various files. The functions do not have dependency amoung each other. I want to link only relavant files( files which have functions called from my application). Since ar has a global symbol table, I believe it should be faster to look for a symol in the table and pull out and link the file to .bc of my application.</div>
<div style><br></div><div style>Is my understand regarding llvm-ar correct? Or is there a better way to achieve it? </div><div style><br></div><div style>One not-so-great solution I can think of is compile the library into separate .bc files and write llvm pass which has a predefined hash mapping of the names of functions these bc files. So while compiling, I look for only relavant files and link them using code form llvm-link. </div>
<div style><br></div><div style>OR. rather than linking the files, only extract the function from the library .bc file and insert it into module of application .bc. </div><div style><br></div><div style>Does any of the idea make sense ? Which one will be doable+preferable? </div>
<div style><br></div><div style><br></div><div style>Thanks a lot,</div><div style>Ankur </div><div style><br></div><div style><br></div><div style><br></div><div style>   </div></div><div class="gmail_extra"><br><br><div class="gmail_quote">
On Thu, Feb 21, 2013 at 11:51 PM, Hassan, Ahmad <span dir="ltr"><<a href="mailto:ahmad.hassan@sap.com" target="_blank">ahmad.hassan@sap.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">






<div lang="EN-IE" link="blue" vlink="purple">
<div>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1f497d">Hi Ankur,<u></u><u></u></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1f497d"><u></u> <u></u></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1f497d"><u></u> <u></u></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1f497d">Why do you need archive in this case? The other way of doing this is to merge all bitcode files into single file:<u></u><u></u></span></p>

<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1f497d"><u></u> <u></u></span></p>
<p class="MsoNormal"> $ clang -c -emit-llvm abc.c –o abc.bc<u></u><u></u></p>
<p class="MsoNormal"> $  clang -c -emit-llvm bcd.c –o bcd.bc<u></u><u></u></p>
<p class="MsoNormal">llvm-link bcd.bc abc.bc –o merged.bc<u></u><u></u></p>
<p class="MsoNormal"><u></u> <u></u></p>
<p class="MsoNormal">Cheers,<u></u><u></u></p>
<p class="MsoNormal">Ahmad<u></u><u></u></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1f497d"><u></u> <u></u></span></p>
<p class="MsoNormal"><b><span lang="EN-US" style="font-size:10.0pt;font-family:"Tahoma","sans-serif"">From:</span></b><span lang="EN-US" style="font-size:10.0pt;font-family:"Tahoma","sans-serif""> <a href="mailto:llvmdev-bounces@cs.uiuc.edu" target="_blank">llvmdev-bounces@cs.uiuc.edu</a> [mailto:<a href="mailto:llvmdev-bounces@cs.uiuc.edu" target="_blank">llvmdev-bounces@cs.uiuc.edu</a>]
<b>On Behalf Of </b>ankur deshwal<br>
<b>Sent:</b> 21 February 2013 17:54<br>
<b>To:</b> <a href="mailto:llvmdev@cs.uiuc.edu" target="_blank">llvmdev@cs.uiuc.edu</a>; ankur deshwal<br>
<b>Subject:</b> [LLVMdev] llvm-ar llvm-link<u></u><u></u></span></p><div><div class="h5">
<p class="MsoNormal"><u></u> <u></u></p>
<div>
<p class="MsoNormal">Hi,<u></u><u></u></p>
<div>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
<div>
<p class="MsoNormal">I tried to build an llvm archive and link it against an llvm bc file. However, it fails. Following is the procedure I followed ( abc.c is file which calls a function whose definition is present in bcd.c)<u></u><u></u></p>

</div>
<div>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
<div>
<div>
<p class="MsoNormal"> $ clang -c -emit-llvm abc.c <u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"> $  clang -c -emit-llvm bcd.c <u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"> $  llvm-ar cr <a href="http://bsd.ar" target="_blank">bsd.ar</a> bcd.o <u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"> $  llvm-link abc.o <a href="http://bsd.ar" target="_blank">bsd.ar</a><u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
<div>
<div>
<p class="MsoNormal">llvm-link: bsd.ar:1:2: error: expected integer<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">!<arch><u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"> ^<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">llvm-link: error loading file '<a href="http://bsd.ar" target="_blank">bsd.ar</a>'<u></u><u></u></p>
</div>
</div>
<div>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
<div>
<p class="MsoNormal">What am I missing here ? <u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
<div>
<p class="MsoNormal">Regards,<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">Ankur<u></u><u></u></p>
</div>
</div>
</div>
</div></div></div>
</div>

</blockquote></div><br></div>