請閱讀 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]]