謎's キッチン

謎のひとりごと。Amazon欲しい物リストはこちら: https://www.amazon.co.jp/hz/wishlist/ls/CCPOV7C6JTD2

gccの代わりとしてのllvmを使おう(1)

ということでこんなの書いた。既にあるだろうけど、再実装。
https://code.launchpad.net/~lovesyao/+junk/llvm-gcc-compat
使い方は/usr/local/llvm-gcc-compat辺りに移動して

export PATH=/usr/local/llvm-gcc-compat:$PATH
gcc hello.c
./a.out

んで気が向いたら後で./a.out.bcからllcでnativeバイナリが作れる。ね、簡単でしょ?
実装としてはただのラッパ。gccllvm-gcc -emit-llvmを呼び出す。stripは何もしない。ldは色々とオプションを黙って無視する(configure泣かせ)。
試しにffmpegをビルドしてみる。オプションは軽く./configure --enable-gpl --enable-swscaleで。
libavutil/common.hのav_clipのav_constを取る必要があったけど、無事ビルド完了。
cp ffplay_g ffplayのせいで./ffplayが動作しないが、まぁ./ffplay_gで良し。
動かしてみたがabort。

$ ./ffplay_g
lli: X86CodeEmitter.cpp:493: void<unnamed>::Emitter::emitInstruction(const llvm::MachineInstr&, const llvm::TargetInstrDesc*): Assertion `(Value[0] == 0) && "JIT does not support inline asm!\n"' failed.
lli[0x85980ea]
/lib/tls/i686/cmov/libc.so.6(abort+0x188)[0xb7e2f248]
/lib/tls/i686/cmov/libc.so.6(__assert_fail+0xee)[0xb7e2672e]
lli[0x80f9398]
Aborted

まぁそう簡単にはうまくいかんわなぁ。