我正在调查emscripten的个人项目,我想使用C或C ++以外的语言来实现。
然而,当我正在调查emscripten时,我认为我应该使用一个琐碎的“你好世界”#39;用C编写的例子。
我知道我应该使用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的语言做同样的事情?
答案 0 :(得分:2)
根据this issue,Emscripten支持CLang和Emscripten通用的wasm32-unknown-unknown-elf
目标。
因此,要通过普通的Clang用您的语言将代码编译为与Emscripten兼容的LLVM位代码,您可以使用:
clang -emit-llvm --target=wasm32-unknown-unknown-elf -S test.c
并用于将生成的位码编译为WASM:
emcc -s WASM=1 test.ll
在Emscripten的测试文件linpack.c
上测试了此方法-1157行代码,按预期工作。
答案 1 :(得分:0)
您需要使用emscripten的LLVM和clang(因为它尚未上游),以便您可以使用emscripten-asmjs目标发出代码。
如果你有另一种语言使用llvm,并且你可以使用它的llvm的构建,那么它应该工作。您只需要告诉该语言发出针对emscripten-asmjs目标的LLVM IR。