<html><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space; "><br><div><div>On May 13, 2008, at 12:49 AM, kr512 wrote:</div><blockquote type="cite">Owen Anderson wrote:<br><blockquote type="cite">The OP was implying that LLVM is incomplete because it <br></blockquote><blockquote type="cite">depends on GCC in the backend, which is incorrect.  It <br></blockquote><blockquote type="cite">depends on binutils,<br></blockquote><br>Alright, so I used the wrong name.  I said GCC but I should <br>have said binutils.  My original point remains valid -- LLVM <br>is an incomplete backend because by itself it is unable to <br>generate a ready-to-execute .EXE or .DLL file.<br><br></blockquote><div><br></div><div>By your definition, GCC is incomplete as well.  Of course, the solution that is typically employed for GCC installations is to bundle the necessary parts of binutils with it, for instance in Apple's developer tools package.  There's nothing particularly stopping you from having your installation package include copies of gas and ld, and would result in an LLVM that is just as "complete" as GCC.</div><div><br></div><blockquote type="cite">And binutils is not necessarily available on the customer's <br>computer.  Do all Linux and BSD distributions include it <br>preinstalled?  </blockquote><div><br></div>No, they don't.  I know, for example, that Ubuntu doesn't.  But in its packaging mechanism (apt), it pulls them in as a dependency when you install GCC.  The appropriate thing to do would be to make them a dependency of LLVM as well.</div><div><br></div><div><blockquote type="cite">Owen Anderson wrote:<br><blockquote type="cite">I think the point is that implementing our own linker is <br></blockquote><blockquote type="cite">definitely beyond the purview of LLVM, and implementing <br></blockquote><blockquote type="cite">our own object file writer/assembler is honestly pretty <br></blockquote><blockquote type="cite">low on the priority queue.<br></blockquote><br>That attitude is very much hurting LLVM's popularity and <br>adoption in real-world situations.<br><br></blockquote><div><br></div><div>You're welcome to think that, and I'm welcome to think that your demands are unrealistic.</div><div><br></div><div>When I write a text editor, do I first need to write an OS kernel to run it on?  How about disk device drivers?  Display drivers?  Of course not.  I build on tools that already exist.  Similarly, compilers build on other tools like linkers and assemblers.  Of course, they typically hide this dependency by including the linker/assembler inside their installation package.  Which is exactly what you should be doing.</div><div><br></div><div><blockquote type="cite"><blockquote type="cite">The fundamental problem is that both executable formats <br></blockquote><blockquote type="cite">and linking problems are EXTREMELY platform specific, so <br></blockquote><blockquote type="cite">it's typically best to leave it up to the system tools.<br></blockquote><br>But these system tools do not exist (or are not installed) <br>on all relevant/significant customer computers.<br><br></blockquote><div><br></div><div>Incorrect.  They exist for <i>all</i> of the relevant platforms, or else development on that platform would be impossible/extremely difficult.  You just need to distribute them as part of your installation package (or via a dependency mechanism on systems like Ubuntu that use them).</div><div><br></div></div><div><br></div><blockquote type="cite">LLVM needs to sever its backend ties with <br>MinGW/Cygwin/GCC/binutils.  Because if we are going to use <br>the hacked bastard child of LLVM combined with <br>MinGW/Cygwin/GCC/binutils, then we may as well just use the <br>normal version of MinGW/Cygwin with GCC and not bother with <br>the added complication of LLVM.<br><br></blockquote><div><br></div><div>See, this is the part where you throw people.  You keep stating that you really want to use LLVM, but this kind of statement makes it sound like you don't really care.</div><div><br></div><div>I'm going to let you in on a reality of open source development: if you really particularly want some feature, you might have to end up writing it yourself.  This is true whether you're talking about LLVM, GCC, the Linux kernel, or emacs.  Showing up and demanding that they be done for you isn't going to get you anywhere, particularly since plenty of users seem to get along fine w/o what you're demanding.</div><div><br></div><div>In all sincerity, I hope you get something that will work for you, whether it's LLVM or something else.  But I do think your expectation that we're all going to drop what we're doing in order to embark on multi-year projects to replace underlying system tools when plenty of other users have figured out how to work with the existing ones is unrealistic.</div><div><br></div><div>Good luck,</div><div><br></div><div>--Owen</div></div></body></html>