LLVM build on Fedora23(VirtualBox)
VirtualBox上のFedora23でLLVMをビルドした。
インストール手順
1. 必要パッケージをインストール
$ sudo dnf install make gcc-c++ texinfo m4 autoconf automake libtool graphviz python-xdot
2. ソースコードをダウンロード・解凍・配置
$ mkdir llvm $ cd llvm/ $ wget http://llvm.org/releases/3.8.0/llvm-3.8.0.src.tar.xz $ wget http://llvm.org/releases/3.8.0/cfe-3.8.0.src.tar.xz $ wget http://llvm.org/releases/3.8.0/compiler-rt-3.8.0.src.tar.xz xz -dv llvm-3.8.0.src.tar.xz tar -xvf llvm-3.8.0.src.tar xz -dv cfe-3.8.0.src.tar.xz tar xvf cfe-3.8.0.src.tar mv cfe-3.8.0.src llvm-3.8.0.src/tools/clang xz -dv compiler-rt-3.8.0.src.tar.xz tar xvf compiler-rt-3.8.0.src.tar mv compiler-rt-3.8.0.src llvm-3.8.0.src/projects/compiler-rt
3. ディレクトリを作成して、ビルド
$ mkdir llvm-build $ cd llvm-build/ $ source ~/.bashrc ../llvm-3.8.0.src/configure --prefix=/usr/local/llvm --enable-optimized $ make -j2 $ make check $ sudo make install
かなり時間かかった。度々落ちるけど、メモリ不足だったので、make を繰り返せば終わる
基本操作
$ llvm ll llvm-as llvm-diff llvm-extract llvm-nm llvm-readobj llvm-symbolizer llc llvm-bcanalyzer llvm-dis llvm-link llvm-objdump llvm-rtdyld llvm-tblgen lli llvm-config llvm-dsymutil llvm-lto llvm-pdbdump llvm-size lli-child-target llvm-cov llvm-dwarfdump llvm-mc llvm-profdata llvm-split llvm-ar llvm-cxxdump llvm-dwp llvm-mcmarkup llvm-ranlib llvm-stress $ clang -o hoge.o hoge.c $ ./hoge.o hoge $ clang -emit-llvm -c -o hoge.bc hoge.c #LLVM ビットコードを出力 $ lli -force-interpreter hoge.bc #インタプリタで実行する $ clang -emit-llvm -S -o hoge.ll hoge.c #LLVM アセンブリを出力 $ llvm-as -o hoge.bc hoge.ll #LLVM アセンブリをLLVM ビットコードへ変換 $ lli hoge.bc #実行 $ llc -o hoge.s hoge.bc #LLVM アセンブリを経由してアセンブリ出力 $ llc -filetype=obj -o hoge.o hoge.ll #オブジェクト出力 $ opt -O3 -o hoge.bc hoge.ll #最適化 $ lli hoge.bc #実行 $ llvm-objdump -d hoge.o #ディスアセンブル hoge.o: file format ELF64-x86-64 Disassembly of section .text: main: 0: 55 pushq %rbp 1: 48 89 e5 movq %rsp, %rbp 4: bf 00 00 00 00 movl $0, %edi 9: 31 c0 xorl %eax, %eax b: e8 00 00 00 00 callq 0 <main+10> 10: 31 c0 xorl %eax, %eax 12: 5d popq %rbp