<div dir="ltr"><br><div class="gmail_extra"><br><div class="gmail_quote">On Mon, Feb 2, 2015 at 2:01 PM, Russell Wallace <span dir="ltr"><<a href="mailto:russell.wallace@gmail.com" target="_blank">russell.wallace@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr">As I understand it, clang currently has the -flto flag which activates some degree of whole program optimization. However, this requires clang to be presented with all the source files at the same time. This is easy enough to arrange in a greenfield project, but may be trickier with an existing program.<div><br></div><div>On Unix, C and C++ programs are usually compiled with makefiles (whether handwritten or auto generated), and these typically call the compiler on one source file at a time and then call the system linker only after compilation has proceeded to machine code object files. Thus, even with clang as a drop-in replacement for GCC, there is the challenge of obtaining exact compilation instructions from the makefile and then modifying these to allow clang to see all the files at once, no later than bitcode stage.</div></div></blockquote><div><br>This is generally already addressed by just making 'object' files that are actually LLVM bitcode. I forget which flags are needed, exactly, but you'll also need a linker that's aware of this trick (there's an LLVM plugin for the gold linker, for example).<br><br>I forget which flags you have to pass to clang to make it do this (maybe it is just -flto) but once you pass that flag and have an LLVM-aware linker, it should 'just work' at least as far as the build system issues are concerned.<br><br>- David<br> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr"><div><br></div><div>On Windows, it's common to have a Visual Studio project file that msbuild can use. This sometimes does call the compiler on multiple files at the same time; then there's the question of how to get clang-cl invoked with suitable options.</div><div><br></div><div>At least that's my thinking on this aspect of the problem so far; there are doubtless things I'm missing. What's currently being done in this area?</div></div>
<br>_______________________________________________<br>
LLVM Developers mailing list<br>
<a href="mailto:LLVMdev@cs.uiuc.edu">LLVMdev@cs.uiuc.edu</a>         <a href="http://llvm.cs.uiuc.edu" target="_blank">http://llvm.cs.uiuc.edu</a><br>
<a href="http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev" target="_blank">http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev</a><br>
<br></blockquote></div><br></div></div>