【发布时间】:2014-06-23 21:29:06
【问题描述】:
我正在为一个个人项目调查 emscripten,我想使用 C 或 C++ 以外的其他语言来做。
然而,在我研究 emscripten 时,我认为我应该使用一个用 C 编写的简单的“hello world”示例。
我知道我应该使用 emcc 编译它:
$ python `which emcc` tmp.c
这将为我生成一个有效的 a.out.js 文件。到目前为止还不错。
但是,我想使用不同的语言,这意味着我不能使用 emcc 或 emcc++,所以我想直接生成 llvm 位码。
我曾尝试使用 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的语言做同样的事情?
【问题讨论】:
-
所以,我不完全确定,但我认为如果您使用 Clang 定位 i386,它可能会起作用:github.com/kripken/emscripten/blob/… 只是一种直觉 - 我还没有尝试过。跨度>
-
这个问题已经过去了大约 2 年,所以我想知道您是否找到了解决方案,因为我将研究相同的用例。 Emscripten 网站似乎建议任何编译为 LLVM IR 的语言都可以工作。正如其他答案和 cmets 所暗示的,我知道这可能不是 100% 正确的。
-
@MatthewSanders:我最终放弃了,因为事实证明这是一个难题。基本上 emscripten 对你想要什么样的 llvm 有一个非常具体的想法,我最终希望让 haskell 的 llvm 输出与 emscripten 的 llvm 输入一起工作。然而,就目前而言,今天,ghcjs(和 purescript)对于我的目的来说要好得多。
-
感谢您的跟进。是的... emscripten 的一个大问题是它在某一时刻与 llvm 不同,这使得跟上上游变化变得更加困难。听起来 LLVM 上游开始获得对 webassembly 的支持,从长远来看,无论如何,恕我直言。
标签: llvm llvm-clang emscripten llvm-ir