On 3/7/2012 6:28 AM, Grahame Bowland wrote:
Hi all

I've been wondering what the plan is in terms of build infrastructure
for rust programmers. I'm working on a project using rust, and am using
a shell script to compile. I've considered using a makefile, but the
name of the output file for a crate isn't constant.

I don't mind working on this if nobody else has looked at it. If it's
already a solved problem but just isn't in the tutorial, I'll summarise
responses and add a chapter to the tutorial :-)

There are a few possibilities.

  - Add a flag to rustc like --print-lib-filename that asks it to
    construct the filename it _would_ produce for a given crate, and
    echo that back. This is not terribly hard; the hash you see in the
    output filename is calculated from the crate linkage metadata,
    not the compiled bits themselves. So it can be calculated quickly
    just be parsing the crate file.

  - Modify your project, as rust's build system currently does, to touch
    a stamp-file with a similar name in the output directory. When we
    currently build we do "rustc ... foo.rc && touch libfoo.so". The
    actual output will be libfoo-<hash>-<vers>.so, but it sits next to
    the empty file libfoo.so we touched, and this seems to work ok in
    practice. We then carefully use globs to pick up the versioned
    files elsewhere.

  - Pass an explicit output filename. Mangling the hash and version
    string into the filename is something rustc does as a convenience
    to avoid name collision in installation directories. Multiple libs
    with the same symbolic name can coexist; the compiler searches them
    all for a metadata match when you 'use' a library. But it works
    (or should work!) just as well if you set the output name explicitly
    using -o to a filename that happens to have the right symbolic name
    prefix: "rustc -o libfoo.so foo.rc" ought to work.

The latter two work today. The first doesn't, but I'd be happy to see a patch that implements it. Might do so myself, it's clearly helpful to making robust makefiles.

Longer term, Brian's right, we have to decide how to balance responsibilities between cargo and rustc. That's a conversation we haven't spent much time on lately, but it will have to happen eventually.

-Graydon
_______________________________________________
Rust-dev mailing list
[email protected]
https://mail.mozilla.org/listinfo/rust-dev

Reply via email to