Find a file
Yehuda Katz 21322f07b4 Wrote more integration tests for cargo compile
At the moment, the rustc exec for the root project inherits the stdout
and stderr FDs (so that warnings and errors flow through), but
output from dependencies is only emitted if the compilation fails to
avoid warning noise from dependencies.
2014-05-12 17:33:13 -07:00
.vagrant/machines/default/virtualbox WIP 2014-04-11 17:39:18 -07:00
DESIGN WIP 2014-04-11 17:39:18 -07:00
libs Up to master 2014-05-09 15:01:05 -07:00
src Wrote more integration tests for cargo compile 2014-05-12 17:33:13 -07:00
tests Wrote more integration tests for cargo compile 2014-05-12 17:33:13 -07:00
.gitignore Clean up cargo-compile 2014-05-07 15:49:01 -07:00
.gitmodules Up to date with master 2014-04-01 22:31:11 -07:00
.vimrc Add vimrc settings 2014-04-29 11:43:18 -07:00
Makefile Initial pass at VersionReq 2014-05-10 14:16:12 -07:00
MANIFEST.md Add missing files 2014-03-12 13:03:36 -07:00
README.md Update README.md 2014-04-11 20:23:20 -04:00
Vagrantfile WIP 2014-04-11 17:39:18 -07:00

Compiling cargo

You'll want to clone cargo using --recursive on git, to clone in it's submodule dependencies.

$ git clone --recursive https://github.com/carlhuda/cargo

or

$ git submodule init
$ git submodule upgrade

Then it's as simple as make and you're ready to go.

Porcelain

cargo-compile

$ cargo compile

This command assumes the following directory structure:

|Cargo.toml
|~src
| | {main,lib}.rs
|~target
| |~x86_64-apple-darwin
| | |~lib
| | | |~[symlinked dependencies]
| | | | [build artifacts]
| |~...

When running cargo compile, Cargo runs the following steps:

  • cargo verify --manifest=[location of Cargo.toml]
  • ... TODO: dependency resolution and downloading ...
  • cargo prepare
  • cargo rustc --out-dir=[from Cargo.toml]/[platform] -L [from Cargo.toml]/[platform]/lib ...

Plumbing

cargo-verify

$ cargo verify --manifest=MANIFEST

Verifies that the manifest is in the location specified, in a valid format, and contains all of the required sections.

Success

{ "success": true }

Errors

{
  "invalid": < "not-found" | "invalid-format" >,
  "missing-field": [ required-field... ],
  "missing-source": bool,
  "unwritable-target": bool
}

cargo-rustc

$ cargo rustc --out-dir=LOCATION -L LIBDIR -- ...ARGS

cargo-prepare

Prepare the directories (including symlinking dependency libraries) to be ready for the flags Cargo plans to pass into rustc.

NOTES and OPEN QUESTIONS

  • We need to support per-platform calls to make (et al) to build native (mostly C) code. Should this be part of prepare or a different step between prepare and cargo-rustc.