#rust #cross-compiling #rust-cargo
#Ржавчина #кросс-компиляция #rust-cargo
Вопрос:
Я хочу скомпилировать два двоичных файла для разных целевых архитектур (например. Скайлейк и Сэнди Бридж). Обычно это две длинные команды cargo:
RUSTFLAGS=»-C target-cpu=skylake» сборка груза -target x86_64-неизвестно-linux-gnu -релиз
Как я могу настроить cargo для сборки обоих двоичных файлов (с разными именами) из одного и того же main.rs автоматически? В идеале либо в config.toml
, либо в Cargo.toml
, чтобы я мог добавить его в репозиторий.
Комментарии:
1. Почему бы просто не создать
build.sh
, который запускает обе команды?2. Я мог бы это сделать, но это не похоже на хорошую практику. Тем более, что цели сборки обычно указываются в файле Cargo.toml
3. Не совсем то, что вы просили, но в модуле arch есть docu для динамического обнаружения функций процессора , чтобы избежать создания нескольких двоичных файлов.
4. @maxy интересно. Но пока я доверяю компилятору оптимизировать на основе целевой арки.
Ответ №1:
Вы можете добавить следующий текст в свой config.toml
:
[build]
target = x86_64-unknown-linux-gnu
rustflags = ["-C","target-cpu=skylake"]
[profile.dev] #do not need to add `--release` now
opt-level = 3
debug = false
debug-assertions = false
overflow-checks = false
lto = false
panic = 'unwind'
incremental = false
codegen-units = 16
rpath = false
Но похоже, что он не может скомпилироваться для двух разных целевых архитектур с помощью одной config.toml
, поэтому вам, возможно, придется создать две config.toml
и использовать cargo --manifest-path PATH/TO/CONFIG
для компиляции двух двоичных файлов отдельно.