Компиляция `core` из определенного источника с использованием Xargo

Исходя из этого комментария, должна быть возможность использовать Xargo для управления установкой core ящик для конкретной цели. Я попробовал следующее, чтобы заставить его работать с ящиком, который не имеет никакой другой зависимости, кроме core:

Cargo.toml: не указаны зависимости

[package]
name = "chip8-engine"
version = "0.1.0"
authors = ["Dr. ERDI Gergo <gergo@erdi.hu>"]

[dependencies]

Xargo.toml: мой конкретный источник указан для core

[target.avr-atmel-none.dependencies]
core = { git = "https://github.com/gergoerdi/rust-avr-libcore-mini", rev = "adda44aa91ac517aab6915447592ee4cad26564c" }

Тем не менее, строительство через xargo build терпит неудачу, как будто я просто использовал cargo:

$ ~/.cargo/bin/xargo build --release -v --target avr-atmel-none
+ "rustc" "--print" "sysroot"
+ "cargo" "build" "--release" "-v" "--target" "avr-atmel-none"
   Compiling chip8-engine v0.1.0 (file:///home/cactus/prog/rust/avr/chip8-engine-avr)
     Running `stage1/bin/rustc --crate-name chip8_engine src/lib.rs --crate-type lib -C opt-level=3 -C metadata=231962fc6e1bee04 -C extra-filename=-231962fc6e1bee04 --out-dir /home/cactus/prog/rust/avr/chip8-engine-avr/target/avr-atmel-none/release/deps --emit=dep-info,link --target avr-atmel-none -L dependency=/home/cactus/prog/rust/avr/chip8-engine-avr/target/avr-atmel-none/release/deps -L dependency=/home/cactus/prog/rust/avr/chip8-engine-avr/target/release/deps`
error[E0463]: can't find crate for `core`
  |
  = note: the `avr-atmel-none` target may not be installed

error: aborting due to previous error

error: Could not compile `chip8-engine`.

Caused by:
  process didn't exit successfully: `stage1/bin/rustc --crate-name chip8_engine src/lib.rs --crate-type lib -C opt-level=3 -C metadata=231962fc6e1bee04 -C extra-filename=-231962fc6e1bee04 --out-dir /home/cactus/prog/rust/avr/chip8-engine-avr/target/avr-atmel-none/release/deps --emit=dep-info,link --target avr-atmel-none -L dependency=/home/cactus/prog/rust/avr/chip8-engine-avr/target/avr-atmel-none/release/deps -L dependency=/home/cactus/prog/rust/avr/chip8-engine-avr/target/release/deps` (exit code: 101)

Обратите внимание, что ничто не указывает даже на попытку Git-трафика.

Напротив, вот выход ванили cargo если я положу core = { git = ...} линия в Cargo.toml вместо Xargo.toml, который работает как положено:

$ cargo build -v --target=avr-atmel-none --release
   Compiling core v0.1.0 (https://github.com/gergoerdi/rust-avr-libcore-mini?rev=adda44aa91ac517aab6915447592ee4cad26564c#adda44aa)
     Running `stage1/bin/rustc --crate-name core /home/cactus/.cargo/git/checkouts/rust-avr-libcore-mini-37e279d93a70b45a/adda44a/src/lib.rs --crate-type lib -C opt-level=3 -C metadata=47f38a1987c5b284 -C extra-filename=-47f38a1987c5b284 --out-dir /home/cactus/prog/rust/avr/chip8-engine-avr/target/avr-atmel-none/release/deps --emit=dep-info,link --target avr-atmel-none -L dependency=/home/cactus/prog/rust/avr/chip8-engine-avr/target/avr-atmel-none/release/deps -L dependency=/home/cactus/prog/rust/avr/chip8-engine-avr/target/release/deps --cap-lints allow`
   Compiling chip8-engine v0.1.0 (file:///home/cactus/prog/rust/avr/chip8-engine-avr)
     Running `stage1/bin/rustc --crate-name chip8_engine src/lib.rs --crate-type lib -C opt-level=3 -C metadata=231962fc6e1bee04 -C extra-filename=-231962fc6e1bee04 --out-dir /home/cactus/prog/rust/avr/chip8-engine-avr/target/avr-atmel-none/release/deps --emit=dep-info,link --target avr-atmel-none -L dependency=/home/cactus/prog/rust/avr/chip8-engine-avr/target/avr-atmel-none/release/deps -L dependency=/home/cactus/prog/rust/avr/chip8-engine-avr/target/release/deps --extern core=/home/cactus/prog/rust/avr/chip8-engine-avr/target/avr-atmel-none/release/deps/libcore-47f38a1987c5b284.rlib`
    Finished release [optimized] target(s) in 15.21 secs

2 ответа

Решение

Вам может понадобиться установить ночной инструментарий Rust, чтобы позволить xargo собрать некоторый код поддержки для вашей цели. Мне пришлось сделать что-то подобное, чтобы заставить встроенную установку ARM работать с xargo. Сделайте это в каталоге вашей встроенной цели:

$ rustup install nightly
$ rustup component add rust-src  # needed for xargo buildup of the target
$ rustup override set nightly    # sets the rustc version to run for this dir
$ xargo build

Получается подобрать rustc путь от .cargo/config в настоящее время не поддерживается Xargo, так что rustc Я хочу использовать нужно установить как rustup link, Чтобы процитировать вышеуказанный билет:

В предназначении вы могли бы использовать rustup создать собственный набор инструментов, который указывает на ваш stage1 rustc, Это, как известно, работает.

$ cd /home/cactus/prog/rust/rust-avr/build/build/x86_64-unknown-linux-gnu/stage1
$ rustup toolchain link avr-toolchain .
$ rustup default avr-toolchain
$ rustc -V
# should say dev channel
Другие вопросы по тегам