Alexandre Janniaux 5 years ago
parent
commit
7b73a66248
1 changed files with 26 additions and 5 deletions
  1. 26 5
      src/main.rs

+ 26 - 5
src/main.rs

@@ -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() {