]>
Commit | Line | Data |
---|---|---|
ba9703b0 | 1 | use rustc_session::Session; |
dfeec247 | 2 | use rustc_span::symbol::Symbol; |
a1dfa0c6 | 3 | |
48663c56 XL |
4 | use std::io; |
5 | use std::path::{Path, PathBuf}; | |
a1dfa0c6 | 6 | |
dfeec247 | 7 | pub fn find_library(name: Symbol, search_paths: &[PathBuf], sess: &Session) -> PathBuf { |
a1dfa0c6 XL |
8 | // On Windows, static libraries sometimes show up as libfoo.a and other |
9 | // times show up as foo.lib | |
dfeec247 XL |
10 | let oslibname = format!( |
11 | "{}{}{}", | |
12 | sess.target.target.options.staticlib_prefix, | |
13 | name, | |
14 | sess.target.target.options.staticlib_suffix | |
15 | ); | |
a1dfa0c6 XL |
16 | let unixlibname = format!("lib{}.a", name); |
17 | ||
18 | for path in search_paths { | |
19 | debug!("looking for {} inside {:?}", name, path); | |
20 | let test = path.join(&oslibname); | |
dfeec247 XL |
21 | if test.exists() { |
22 | return test; | |
23 | } | |
a1dfa0c6 XL |
24 | if oslibname != unixlibname { |
25 | let test = path.join(&unixlibname); | |
dfeec247 XL |
26 | if test.exists() { |
27 | return test; | |
28 | } | |
a1dfa0c6 XL |
29 | } |
30 | } | |
dfeec247 XL |
31 | sess.fatal(&format!( |
32 | "could not find native static library `{}`, \ | |
33 | perhaps an -L flag is missing?", | |
34 | name | |
35 | )); | |
a1dfa0c6 | 36 | } |
48663c56 XL |
37 | |
38 | pub trait ArchiveBuilder<'a> { | |
39 | fn new(sess: &'a Session, output: &Path, input: Option<&Path>) -> Self; | |
40 | ||
41 | fn add_file(&mut self, path: &Path); | |
42 | fn remove_file(&mut self, name: &str); | |
43 | fn src_files(&mut self) -> Vec<String>; | |
44 | ||
45 | fn add_rlib( | |
46 | &mut self, | |
47 | path: &Path, | |
48 | name: &str, | |
49 | lto: bool, | |
50 | skip_objects: bool, | |
51 | ) -> io::Result<()>; | |
e1599b0c | 52 | fn add_native_library(&mut self, name: Symbol); |
48663c56 XL |
53 | fn update_symbols(&mut self); |
54 | ||
55 | fn build(self); | |
56 | } |