]> git.proxmox.com Git - rustc.git/blame - src/librustc_codegen_ssa/back/archive.rs
New upstream version 1.47.0+dfsg1
[rustc.git] / src / librustc_codegen_ssa / back / archive.rs
CommitLineData
ba9703b0 1use rustc_session::Session;
dfeec247 2use rustc_span::symbol::Symbol;
a1dfa0c6 3
48663c56
XL
4use std::io;
5use std::path::{Path, PathBuf};
a1dfa0c6 6
dfeec247 7pub 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
38pub 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}