Соберите LLVM из Rust для машины типа wasm32

Я пытаюсь создать хобби-проект, в котором я создаю файл Rust для WebAssembly. Я хочу передать в emscripten больше параметров, тогда как Rustc и Cargo, похоже, позволяют мне (например, MINIMAL_RUNTIME, ENVIRONMENT и INVOKE_RUN).

У меня была «блестящая» идея скомпилировать Rust в llvm, а затем передать этот файл llvm в emscripten, чтобы я мог использовать параметры компилятора. Однако когда я пытаюсь собрать WebAssembly, я получаю сообщение об ошибке «Тип машины должен быть wasm32».

Это файл, который я пытаюсь создать:

fn main() {
    println!("Hello World!");
}

И вот как я пытаюсь это построить:

rustc --emit=llvm-ir test.rs
emcc test.ll -O0 -s WASM=1

Есть идеи, что я делаю не так? (Или другим способом я могу достичь своей цели?)


person Sora2455    schedule 13.02.2020    source источник


Ответы (1)


Да, мне нужно было добавить целевой параметр:

rustc --emit=llvm-ir --target wasm32-unknown-unknown test.rs
emcc test.ll -O0 -s WASM=1 -s ERROR_ON_UNDEFINED_SYMBOLS=0

Конечно, теперь у меня остаются ошибки "Неизвестный символ" ... -вздыхает-

РЕДАКТИРОВАТЬ: На самом деле я должен использовать флаг -C в rustc для прямой передачи параметров в emcc, что я и хотел сделать в первую очередь:

rustc --target wasm32-unknown-unknown -C link-arg="-s MINIMAL_RUNTIME=1" -C link-arg="-s INVOKE_RUN=0" test.rs
person Sora2455    schedule 13.02.2020
comment
rustc --crate-type = lib --emit = llvm-bc --target wasm32-unknown-emscripten test.rs -o testw.bc emcc testw.bc -O0 -s WASM = 1 -s ERROR_ON_UNDEFINED_SYMBOLS = 0 -o test .wasm - person Sora2455; 13.02.2020
comment
... как избежать предупреждения / ошибки неизвестного символа - person Sora2455; 13.02.2020