link-arg не передает параметры компилятора rustc - PullRequest
2 голосов
/ 16 марта 2020

Я генерирую asm. js из файла Rust примерно так:

rustc demo.rs --target asmjs-unknown-emscripten -C opt-level=0 -C link-arg="-s MINIMAL_RUNTIME=1" -C link-arg="-s ENVIRONMENT=web" -C link-arg="-s LEGACY_VM_SUPPORT=1" -o ../../build/bytecode/demo.asm.js

Однако, когда я просматриваю сгенерированный файл asm. js, я ясно вижу, что эти компиляторы параметры не были пропущены - код все еще предполагает, что он может быть запущен в любой среде, и устаревшие полизаполнения виртуальных машин отсутствуют.

Чего мне не хватает?

Это файл ржавчины, в дело, которое имеет значение:

#[allow(dead_code)]
pub fn my_add(num1: f64, num2: f64) -> f64 {
    return num1 + num2;
}

pub fn main() {
    println!("Rust loaded");
}

1 Ответ

0 голосов
/ 16 марта 2020

У меня есть два предложения.

Если мы посмотрим на документацию , есть опция link-arg для передачи одного аргумента и link-args для передачи нескольких аргументов. Поскольку link-args существует, а do c указывает, что аргументы должны быть разделены пробелами, возможно, вам следует использовать ... link-args="-s MINIMAL_RUNTIME=1", или даже ... -C link-arg="-s" -C link-arg="MINIMAL_RUNTIME=1" ... Хотя это не пробовали.

Во-вторых, там похоже, это старый способ передачи аргументов компоновщику указанного c компилятора в соответствии с этим post . Вы можете создать оболочку вокруг компилятора emcc, создав в папке проекта файл с именем emcc_sdl, который содержит:

emcc "-s" "MINIMAL_RUNTIME=1" "-s" "ENVIRONMENT=web" "-s" "LEGACY_VM_SUPPORT=1" $@

Сделать его исполняемым:

> chmod +x emcc_sdl

Создать или отредактируйте файл .cargo/config и добавьте:

[target.wasm32-unknown-emscripten]
linker = "/project_dir/project_name/emcc_sdl"

[target.asmjs-unknown-emscripten]
linker = "/project_dir/project_name/emcc_sdl"

Вы должны быть в состоянии построить, используя:

rustc demo.rs --target asmjs-unknown-emscripten -C opt-level=0 -o ../../build/bytecode/demo.asm.js

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...