1 // Copyright 2014 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 #![feature(rustc_private)]
14 extern crate rustc_driver
;
15 extern crate rustc_lint
;
16 extern crate rustc_metadata
;
17 extern crate rustc_errors
;
20 use rustc
::dep_graph
::DepGraph
;
21 use rustc
::session
::{build_session, Session}
;
22 use rustc
::session
::config
::{basic_options
, build_configuration
, Input
,
23 OutputType
, OutputTypes
};
24 use rustc_driver
::driver
::{compile_input, CompileController, anon_src}
;
25 use rustc_metadata
::cstore
::CStore
;
26 use rustc_errors
::registry
::Registry
;
28 use std
::path
::PathBuf
;
36 let args
: Vec
<String
> = std
::env
::args().collect();
39 panic
!("expected rustc path");
42 let tmpdir
= PathBuf
::from(&args
[1]);
44 let mut sysroot
= PathBuf
::from(&args
[3]);
48 compile(src
.to_string(), tmpdir
.join("out"), sysroot
.clone());
50 compile(src
.to_string(), tmpdir
.join("out"), sysroot
.clone());
53 fn basic_sess(sysroot
: PathBuf
) -> (Session
, Rc
<CStore
>) {
54 let mut opts
= basic_options();
55 opts
.output_types
= OutputTypes
::new(&[(OutputType
::Exe
, None
)]);
56 opts
.maybe_sysroot
= Some(sysroot
);
58 let descriptions
= Registry
::new(&rustc
::DIAGNOSTICS
);
59 let dep_graph
= DepGraph
::new(opts
.build_dep_graph());
60 let cstore
= Rc
::new(CStore
::new(&dep_graph
));
61 let sess
= build_session(opts
, &dep_graph
, None
, descriptions
, cstore
.clone());
62 rustc_lint
::register_builtins(&mut sess
.lint_store
.borrow_mut(), Some(&sess
));
66 fn compile(code
: String
, output
: PathBuf
, sysroot
: PathBuf
) {
67 let (sess
, cstore
) = basic_sess(sysroot
);
68 let cfg
= build_configuration(&sess
, vec
![]);
69 let control
= CompileController
::basic();
71 compile_input(&sess
, &cstore
,
73 &Input
::Str { name: anon_src(), input: code }
,