1 // Copyright 2012-2015 The Rust Project Developers. See the COPYRIGHT
2 // file at the top-level directory of this distribution and at
3 // http://rust-lang.org/COPYRIGHT.
5 // Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
6 // http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
7 // <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
8 // option. This file may not be copied, modified, or distributed
9 // except according to those terms.
11 //! This module contains files for saving intermediate work-products.
14 use rustc
::dep_graph
::{WorkProduct, WorkProductId}
;
15 use rustc
::session
::Session
;
16 use rustc
::session
::config
::OutputType
;
17 use rustc
::util
::fs
::link_or_copy
;
18 use std
::path
::PathBuf
;
21 pub fn save_trans_partition(sess
: &Session
,
24 files
: &[(OutputType
, PathBuf
)]) {
25 debug
!("save_trans_partition({:?},{},{:?})",
29 if sess
.opts
.incremental
.is_none() {
32 let work_product_id
= Arc
::new(WorkProductId(cgu_name
.to_string()));
34 let saved_files
: Option
<Vec
<_
>> =
36 .map(|&(kind
, ref path
)| {
37 let file_name
= format
!("cgu-{}.{}", cgu_name
, kind
.extension());
38 let path_in_incr_dir
= in_incr_comp_dir(sess
, &file_name
).unwrap();
39 match link_or_copy(path
, &path_in_incr_dir
) {
40 Ok(_
) => Some((kind
, file_name
)),
42 sess
.warn(&format
!("error copying object file `{}` \
43 to incremental directory as `{}`: {}",
45 path_in_incr_dir
.display(),
52 let saved_files
= match saved_files
{
57 let work_product
= WorkProduct
{
58 input_hash
: partition_hash
,
59 saved_files
: saved_files
,
62 sess
.dep_graph
.insert_work_product(&work_product_id
, work_product
);