|
@@ -22,9 +22,6 @@ fn extract(input: PathBuf, output_directory: PathBuf)
|
|
|
{
|
|
|
println!("Extracting {:?} into {:?}", input, output_directory);
|
|
|
|
|
|
- let input = fs::canonicalize(input)
|
|
|
- .expect("Input path is invalid");
|
|
|
-
|
|
|
let output = Command::new("ar")
|
|
|
.arg("x")
|
|
|
.arg(input)
|
|
@@ -32,7 +29,17 @@ fn extract(input: PathBuf, output_directory: PathBuf)
|
|
|
.spawn()
|
|
|
.map_err(|_| ())?;
|
|
|
|
|
|
- //println!("ar: {}", output.stdout);
|
|
|
+ Ok(())
|
|
|
+}
|
|
|
+
|
|
|
+fn link_partial(inputs: Vec<PathBuf>, output: PathBuf)
|
|
|
+ -> Result<(), ()>
|
|
|
+{
|
|
|
+ let result = Command::new("ld")
|
|
|
+ // Enable partial linking
|
|
|
+ .arg("-r")
|
|
|
+ .arg("-o")
|
|
|
+ .arg(output);
|
|
|
|
|
|
Ok(())
|
|
|
}
|
|
@@ -40,13 +47,27 @@ fn extract(input: PathBuf, output_directory: PathBuf)
|
|
|
fn link(args: LocalizeArgs)
|
|
|
{
|
|
|
let output_dir = "./output_dir/";
|
|
|
+
|
|
|
+ // TODO: the output directory might already exist
|
|
|
fs::create_dir(output_dir)
|
|
|
.expect("Cannot create output directory");
|
|
|
|
|
|
- extract(args.input_files[0].clone(), PathBuf::from(&output_dir))
|
|
|
+ let input = fs::canonicalize(args.input_files[0].clone())
|
|
|
+ .expect("Input path is invalid");
|
|
|
+
|
|
|
+ extract(input, PathBuf::from(&output_dir))
|
|
|
.expect("Cannot extract library archive");
|
|
|
|
|
|
println!("Archive objects successfully extracted");
|
|
|
+
|
|
|
+ // TODO list files
|
|
|
+ let files = vec![
|
|
|
+ fs::canonicalize("./output_dir/lib1.o").unwrap(),
|
|
|
+ fs::canonicalize("./output_dir/lib2.o").unwrap() ];
|
|
|
+
|
|
|
+ let output = fs::canonicalize(args.output_file).unwrap();
|
|
|
+
|
|
|
+ link_partial(files, output);
|
|
|
}
|
|
|
|
|
|
fn main() {
|