如何生成供emscripten使用的LLVM bitcode?

我正在调查emscripten的个人项目,我想使用C或C以外的语言来这样做.

然而,当我正在调查emscripten时,我想我应该使用一个用C编写的一个简单的“hello world”示例.

我知道我应该使用emcc编译它:

$python `which emcc` tmp.c

这将为我生成一个工作的a.out.js文件.到目前为止,这很好.

但是,我想使用不同的语言,这意味着我不能使用emcc或emcc,所以我想直接生成llvm bitcode.

我尝试使用clang 3.3,这是我的mac os x 10.9.2系统上的当前版本,但是以下不起作用:

$clang -S -emit-llvm tmp.c -o tmp.ll
$python `which emcc` tmp.ll      
warning: incorrect target triple 'x86_64-apple-macosx10.9.0' (did you use emcc/em++ on all source files and not clang directly?)

警告是正确的;我确实直接使用了clang,我怎么能这样做,以便我可以尝试用另一种也使用llvm的语言做同样的事情?

最佳答案 根据
this issue,Emscripten支持wasm32-unknown-unknown-elf目标,对于CLang和amp; Emscripten.

因此,为了通过普通的Clang将您的语言代码编译为兼容Emscripten的LLVM-bitcode,您可以使用:

clang -emit-llvm --target=wasm32-unknown-unknown-elf -S test.c

并将结果bitcode编译为WASM:

emcc -s WASM=1 test.ll

在Emscripten的测试文件linpack.c上测试了这种方法 – 1157行代码,按预期工作.

点赞