Skip to content

xargo build fails after using stale dependencies built against different version of 'core' #189

@robert-w-gries

Description

@robert-w-gries

I have been seeing this error message in various kernel projects that use xargo:

   Compiling core v0.0.0 (file:///home/rob/.rustup/toolchains/nightly-2017-12-23-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/src/libcore)
   Compiling std_unicode v0.0.0 (file:///home/rob/.rustup/toolchains/nightly-2017-12-23-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/src/libstd_unicode)
   Compiling alloc v0.0.0 (file:///home/rob/.rustup/toolchains/nightly-2017-12-23-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/src/liballoc)
    Finished release [optimized] target(s) in 24.22 secs
   Compiling compiler_builtins v0.1.0 (file:///home/rob/.rustup/toolchains/nightly-2017-12-23-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/src/libcompiler_builtins)
    Finished release [optimized] target(s) in 2.45 secs
    Updating git repository `https://github.com/japaric/utest`
    Updating registry `https://github.com/rust-lang/crates.io-index`            
   Compiling rxinu v0.1.0 (file:///home/rob/rxinu)
error[E0460]: found possibly newer version of crate `core` which `bitflags` depends on
  --> src/lib.rs:18:1
   |
18 | extern crate bitflags;
   | ^^^^^^^^^^^^^^^^^^^^^^
   |
   = note: perhaps that crate needs to be recompiled?
   = note: the following crate versions were found:
           crate `core`: /home/rob/.xargo/lib/rustlib/x86_64-rxinu/lib/libcore-0671f1c158fe3776.rlib
           crate `bitflags`: /home/rob/rxinu/target/x86_64-rxinu/debug/deps/libbitflags-bed2609b99acd464.rlib

Example A
Example B

Reproducing the problem

I did some triage over in phil-opp/blog_os#378. Here's what I found.

This looks like an issue where xargo or cargo attempts to re-use stale dependencies built against a different version of core.

The issue is intermittent in Travis, which makes debugging difficult. However, I recently discovered how to trigger the issue locally by setting my Xargo.toml as follows

[dependencies.alloc]
stage = 0

[dependencies.compiler_builtins]
stage = 1

I then run the following commands in my rxinu project directory:

git checkout feature/i686-scheduling
make clean
make
git checkout feature/test-framework
make  # `xargo build` fails until we run `make clean`

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions