LLVMLinuxをビルドしてみた

LLVMLinuxLinux kernelをClang/LLVMでビルドできるようにしようというプロジェクトです。先日のELCでも紹介されていました。興味があったので、まずはビルドしてみました。

基本的には以下のページの手順に従ってやっただけ。
Useful links | ClangBuiltLinux

最初はUbuntu 12.04でやりましたが、以下のエラーがでました。

CMake Error at cmake/modules/HandleLLVMOptions.cmake:13 (message):
  Host GCC version must be at least 4.7!

gccは4.7以上が必要ということで、gccだけ追加しても他にも引っかかりそうに思ったのでUbuntu 14.04でやり直しました。

ソースの入手と準備

$ git clone http://git.linuxfoundation.org/llvmlinux.git
$ cd llvmlinux/
$ sudo apt-get install build-essential cmake git git-svn \
 kpartx libglib2.0-dev patch quilt \
 rsync subversion zlib1g-dev flex libfdt1 libfdt-dev \
 libpixman-1-0 libpixman-1-dev 
$ sudo apt-get install libc6:i386 libncurses5:i386
$ sudo apt-get install linaro-image-tools

ビルド

$ cd targets/vexpress
$ nohup make &
$ tail -f nohup.out 

これで、llvm, clang, kernel, qemuなど全てソースコードリポジトリからとってきて必要なパッチをあててビルドするところまで全自動でやってくれました。ログの最後に"# # # SUCCESS # # #"と出ているのでうまくいったのでしょう。

$ tail nohup.out 
input: ImExPS/2 Generic Explorer Mouse as /devices/mb:kmi1/serio1/input/input2

This root FS contains most basic linux utilities (implemented with busybox)
and the Lynx web browser.

Kernel config is available through /proc/config.gz

Log in as root with no password.
qemu login: Killed
# # # SUCCESS # # #
$

ビルドしたディレクトリを/home/koba/llvmlinux とすると、以下のコマンドでClang/LLVMでビルドしたkernelをqemuで起動できます。

$ QEMU_AUDIO_DRV=none  /home/koba/llvmlinux/test/qemu/install/bin/qemu-system-arm -M vexpress-a9 \
 -kernel /home/koba/llvmlinux/targets/vexpress/tmp/kernel_dtb.img -m 256 \
 -append "mem=256M root=/dev/ram0 console=ttyAMA0 rw" \
 -initrd /home/koba/llvmlinux/targets/vexpress/tmp/initramfs.img -net none  -nographic -no-reboot

rootでログインして uname -a してみた結果。

 ~ # uname -a
Linux qemu 3.15.0-rc7-llvmlinux-Lr209792-Cr209794+ #1 SMP Thu May 29 22:14:44 JST 2014 armv7l GNU/Linux
 ~ # 

とりあえずはここまで。