読者です 読者をやめる 読者になる 読者になる

DELAEMON BLOG

Live as if you were to die tomorrow. Learn as if you were to live forever.

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