<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
<HTML>
<HEAD>
<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-1">
<META NAME="Generator" CONTENT="MS Exchange Server version 6.5.7654.12">
<TITLE>RE: [LLVMdev] ld with gold-plugin can do this?</TITLE>
</HEAD>
<BODY>
<!-- Converted from text/plain format -->

<P><FONT SIZE=2>A common followup question is "but how do I link native libraries into<BR>
my .bc file". You don't. A .bc file is llvm ir, you can't put a native<BR>
binary library into a .bc (barring sticking it in as a string, etc).<BR>
<BR>
The build then looks like:<BR>
<BR>
a) 'llvm-gcc -c -flo -O2' to generate the .bc files.<BR>
b) 'llvm-ld' to combine them into a single .bc. No, not a .so nor a .a.<BR>
c) 'llc' to turn your combined .bc into a .s<BR>
d) 'as' to turn your .s into a .o<BR>
e) 'ld' to turn your .o into a .so or final executable. This is the step<BR>
where you get to specify all the native libraries to link with.<BR>
<BR>
You can use 'gcc' to merge steps d and e (it just runs as and ld for<BR>
you). Or you can use the gold plugin to merge steps b through e, but<BR>
with the added benefit that it will optimize slightly better. See the<BR>
llvm LTO documentation on why.<BR>
<BR>
[Sanjiv] - This is what PIC16 does. llvm-ld has an option called '-b' that you can<BR>
use to specify the output bitcode file name. Unfortunately, llvm-ld always tries to<BR>
generate a native executable (or a shell script) as well and currently there is no way to disable that.<BR>
Maybe an option like '-no-native' will be come handy.<BR>
<BR>
<BR>
- Sanjiv<BR>
<BR>
</FONT>
</P>

</BODY>
</HTML>