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