Emscripten Clang产生ELF 64位executabel和wasm二进制交叉编译器目标

问题描述 投票:0回答:1

我准备了一个最小的Cmake项目,其中包含一个代表主文件的cpp文件和一个代表共享库的cpp文件,该文件基本上可以打个招呼世界。https://github.com/courteous/wasmELF.git

目标是仅使用emscripten / clang编译此miniaml代码并生成

1)一个​​WebAssembly(wasm)二进制模块版本0x1(MVP)

2)一个ELF 64位LSB

无需清除cmake构建目录并再次重建它。

目前,我可以通过运行命令成功生产出购买的产品

emconfigure cmake ../ -DCMAKE_BUILD_TYPE=WASM
make

cmake ../ -DCMAKE_BUILD_TYPE=Linux
make 

但是问题是,要做到这一点,我需要使用Clang编译第一个,以删除构建,然后使用GCC进行第二个编译。我希望Emscripten / Clang生产代替购买的产品。我不想删除生成目录,因为编译时间太长了。 (不是在这个项目中,而是想想这个项目是否更大)

我看到的是emscripten / clang总是选择目标“ wasm32-unknown-emscripten”

clang++ -target wasm32-unknown-emscripten 

并且如果我理解目标应该改变的话

我确实看到该项目正在生成LLVM IR位代码,因为我已经发送了标志“ flto”

file TestSharedClass.cpp.o
TestSharedClass.cpp.o: LLVM IR bitcode

以及在CMakeLists.txt中

set(CMAKE_CXX_FLAGS "-flto")

x86_64-unknown-linux-gnu是emscripten / Clang支持的目标

~/Projects/emscripten/emsdk/upstream/bin$ ./llc --version
LLVM (http://llvm.org/):
  LLVM version 11.0.0git
  Optimized build with assertions.
  Default target: x86_64-unknown-linux-gnu
  Host CPU: haswell

  Registered Targets:
    wasm32 - WebAssembly 32-bit
    wasm64 - WebAssembly 64-bit
    x86    - 32-bit X86: Pentium-Pro and above
    x86-64 - 64-bit X86: EM64T and AMD64

我确实有cmake

SET(TARGET x86_64-unknown-linux-gnu)

但是我什么时候跑

emconfigure cmake ../ -DCMAKE_BUILD_TYPE=Linux
make

我得到mainTestFile.js和mainTestFile.wasm,而不是ELF 64位代码。

我在这里做错了什么。如何在相同的代码下运行一次ELF和一次wasm,而不用清除构建目录,就将clang告知产品。这应该是可能的,因为clang正在生成LLVM IR位代码。还是我理解错了?

https://github.com/emscripten-core/emscripten/issues/10361

clang++ webassembly emscripten
1个回答
0
投票

好,这似乎是不可能的,即github上dev的回复指出emcc或emmake不能与wasm32-unknown-emscripten之外的其他目标一起使用。

© www.soinside.com 2019 - 2024. All rights reserved.