Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ember.js/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何生成供emscripten使用的LLVM位代码? 我正在研究EnScript用于个人项目,我想使用C语言或C++语言以外的语言来做。_Llvm_Llvm Clang_Emscripten_Llvm Ir - Fatal编程技术网

如何生成供emscripten使用的LLVM位代码? 我正在研究EnScript用于个人项目,我想使用C语言或C++语言以外的语言来做。

如何生成供emscripten使用的LLVM位代码? 我正在研究EnScript用于个人项目,我想使用C语言或C++语言以外的语言来做。,llvm,llvm-clang,emscripten,llvm-ir,Llvm,Llvm Clang,Emscripten,Llvm Ir,然而,当我调查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 -e

然而,当我调查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的语言做同样的事情了?

您需要使用emscripten的llvm和clang(因为它还不是上游),这样您就可以使用emscripten asmjs目标发出代码

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

根据,emscripten支持
wasm32未知elf
目标,这对CLang和emscripten都是通用的

因此,要通过简单的Clang将您的语言中的代码编译为兼容EMSCRIPT的LLVM位代码,您可以使用:

clang -emit-llvm --target=wasm32-unknown-unknown-elf -S test.c
以及将生成的位代码编译为WASM:

emcc -s WASM=1 test.ll

在Emscripten的测试文件
linpack.c
-1157行代码上测试了这种方法,工作正常

使用-emit llvm选项的clang不是在这样做吗?我不知道这是事实,但我觉得答案是“不”。LLVM位码有一个“目标三元组”,这对于完全设备无关的IR来说没有意义。。。所以我想LLVM比特码不是100%设备无关的。。。这只会带来更多的问题而不是答案。>_所以,我不完全确定,但我认为如果你用叮当声瞄准i386,它可能会起作用:只是一种直觉——我还没有尝试过。这个问题已经过去了大约2年,所以我想知道你是否找到了解决方案,因为我将研究相同的用例。Emscripten网站似乎建议编译成LLVM IR的任何语言都可以工作。正如其他答案和评论所暗示的,我知道这可能不是100%正确的。@MatthewSanders:我最终放弃了,因为这是一个难题。基本上,emscripten对于您想要什么样的llvm有一个非常具体的想法,我最终希望haskell的llvm输出能够与emscripten的llvm输入一起工作。然而,就目前的情况来看,就我的目的而言,GHCJ(和purescript)要好得多。感谢您的跟进。哎。。。emscripten的一个大问题是它在某一点上与llvm不同,这使得它更难跟上上游的变化。听起来LLVM upstream开始获得对webassembly的支持,这从长远来看会更好。