請閱讀 README。 前端為 gcc45,優化和代碼生成使用 LLVM 的元件,這部分利用 [[http://gcc.gnu.org/wiki/plugins|gcc plugin]]。DragonEgg 的簡介請見 [[http://llvm.org/devmtg/2009-10/Sands_LLVMGCCPlugin.pdf|Reimplementing llvm-gcc as a gcc plugin]]。 $ wget http://llvm.org/releases/3.2/dragonegg-3.2.src.tar.gz $ tar xzf dragonegg-3.2.src.tar.gz $ sudo apt-get install gcc-4.7-plugin-dev $ cd dragonegg-3.2.src $ GCC=gcc-4.7 LLVM_CONFIG=directory_where_llvm_installed/bin/llvm-config make $ gcc -fplugin=./dragonegg.so -fplugin-arg-dragonegg-emit-ir -S test1.c ====== 建置 LLVM ====== $ wget http://llvm.org/releases/2.9/llvm-2.9.tgz; tar xvf llvm-2.9.tgz; $ mkdir build; cd build $ ../llvm-2.9/configure --prefix=/path/to/install --enable-targets=host -enable-optimized $ make install ====== 建置 DragonEgg ====== 如果是下載 svn 版本的 dragonegg,則 LLVM 和 GCC 也都要下載 svn 版本。 $ wget http://llvm.org/releases/2.9/dragonegg-2.9.tgz; tar xzf dragonegg-2.9.tgz $ wget http://mirrors.kernel.org/gnu/gcc/gcc-4.5.2/gcc-4.5.2.tar.gz; tar xzf gcc-4.5.2.tar.gz $ patch -d gcc-4.5.2 -p1 < dragonegg-2.9/gcc-patches/i386_static.diff $ mkdir build; cd build $ ../gcc-4.5.2/configure --prefix=$INSTALL --enable-languages=c,c++ --enable-plugin --enable-lto $ make && make install $ cd dragonegg-2.9; # CPPFLAGS="-I/path/to/header/files -I/another/header/path/" make $ GCC=/path/to/just_installed_gcc LLVM_CONFIG=/path/to/llvm-config make 在 FreeBSD 上使用 dragonegg 請見 [[http://lists.cs.uiuc.edu/pipermail/llvmdev/2011-January/037337.html|DragonEgg on FreeBSD]]。目前 dragonegg 無法應用在 gcc 4.6 以後的版本。[(http://lists.cs.uiuc.edu/pipermail/llvmdev/2011-April/039357.html)][(http://www.cs.nctu.edu.tw/~chenwj/log/baldrick-2011-06-17.txt)] ====== Porting to GCC 4.6 ====== $ svn co http://llvm.org/svn/llvm-project/dragonegg/trunk dragonegg $ svn co http://llvm.org/svn/llvm-project/llvm/trunk llvm 已完成。 * TYPE_DEBUG_REPRESENTATION_TYPE [(http://www.cs.nctu.edu.tw/~chenwj/log/baldrick-2011-06-19.txt)] * [[http://llvm.org/viewvc/llvm-project?rev=133431&view=rev]] ++++ Changelog | * [[http://llvm.org/viewvc/llvm-project?rev=133278&view=rev]] * [[http://llvm.org/viewvc/llvm-project?rev=133281&view=rev]] * [[http://llvm.org/viewvc/llvm-project?rev=133282&view=rev]] * [[http://llvm.org/viewvc/llvm-project?rev=133283&view=rev]] * [[http://llvm.org/viewvc/llvm-project?rev=133391&view=rev]] - I am here. * [[http://llvm.org/viewvc/llvm-project?rev=133392&view=rev]] * [[http://llvm.org/viewvc/llvm-project?rev=133393&view=rev]] * [[http://llvm.org/viewvc/llvm-project?rev=133394&view=rev]] * [[http://llvm.org/viewvc/llvm-project?rev=133395&view=rev]] * [[http://llvm.org/viewvc/llvm-project?rev=133395&view=rev]] * [[http://llvm.org/viewvc/llvm-project?rev=133396&view=rev]] * [[http://llvm.org/viewvc/llvm-project?rev=133397&view=rev]] * [[http://llvm.org/viewvc/llvm-project?rev=133399&view=rev]] * [[http://llvm.org/viewvc/llvm-project?rev=133414&view=rev]] * [[http://llvm.org/viewvc/llvm-project?rev=133427&view=rev]] ++++ ====== 外部連結 ====== * [[http://dragonegg.llvm.org/|DragonEgg - Using LLVM as a GCC backend]] * [[http://llvm.org/viewvc/llvm-project/dragonegg/|DragonEgg]] * [[http://lists.cs.uiuc.edu/pipermail/llvmdev/2011-December/045812.html|[LLVMdev] DragonEgg 3.0 for win32]]