clang/llvm でカーネルを作ってみる2009年03月12日 11時43分10秒

clang/llvm でカーネルが動くようになったとの報告を受けたので、実験してみる。

Building FreeBSD with clang/llvm に手順が載っている。


# cd /usr/ports/devel/llvm-devel/
# make install
# cd /usr/sys/{amd64,i386}/conf/
# config GENERIC
# cd ../compile/GENERIC/
# make depend
# env CC=ccc make
# make KERNEL=llvm install

が説明されている手順だ。試したところ、旧来のカーネルの作り方でしか出来ない。どうも、llvm では make depend が処理が出来ないようだ。また、buildkernel では、無理なようだ。

buildkernel を試したところ、以下のように失敗した。


$ echo 'include GENERIC' >  sys/amd64/conf/LLVM
$ make buildkernel KERNCONF=LLVM CC=ccc
cd /usr/obj/usr/src/head/sys/LLVM;  MAKESRCPATH=/usr/src/head/sys/dev/aic7xxx/ai
casm  make SSP_CFLAGS= -DNO_CPU_CFLAGS -DNO_CTF  -f /usr/src/head/sys/dev/aic7xx
x/aicasm/Makefile
Warning: Object directory not changed from original /usr/obj/usr/src/head/sys/LL
VM
ccc -O2 -pipe -nostdinc -I/usr/include -I. -I/usr/src/head/sys/dev/aic7xxx/aicas
m   -c /usr/src/head/sys/dev/aic7xxx/aicasm/aicasm.c
ccc: not found
*** Error code 127
1 error
*** Error code 2
1 error
*** Error code 2
1 error

そこで、記載されている手順道理に事を進める。


$ cd sys/amd64/conf
$ config LLVM 
Kernel build directory is ../compile/LLVM
Don't forget to do ``make cleandepend && make depend''
$ cd ../compile/LLVM/
$ make depend

出力は取っていないのだが、実は make depend に失敗した。buildkernel では問題なく、カーネルを作れているので無視して make を続けた。初めての時や、make clean を行うなどして、全てのオブジェクトを作るのなら make depend が無くても支障は無い。

この後にコンパイルが続いたが、カーネルは作れなかった。まだ、いつでも llvm で作れるような状態では無いようだ。折角なので、折りをみて試したいと思う。