我正在调查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行代码,按预期工作.