如何生成供 emscripten 使用的 LLVM 位码?

Ara*_*ion 5 llvm llvm-clang emscripten llvm-ir

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

但是,当我在研究 emscripten 时,我想我应该使用一个用 C 编写的简单的“hello world”示例。

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

$ python `which emcc` tmp.c
Run Code Online (Sandbox Code Playgroud)

这将为我生成一个有效的 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?)
Run Code Online (Sandbox Code Playgroud)

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

小智 0

您需要使用 emscripten 的 LLVM 和 clang(因为它还不是上游),以便您可以使用 emscripten-asmjs 目标发出代码。

如果您有另一种语言使用 llvm,并且您可以使用该 llvm 的构建版本,那么它应该可以工作。您只需告诉该语言发出针对 emscripten-asmjs 目标的 LLVM IR。