From ee927f89694f65814c7b3b45bc9775213d91517c Mon Sep 17 00:00:00 2001 From: yoshikawa <yoshikawa@preferred.jp> Date: Mon, 1 Jun 2020 18:59:26 +0900 Subject: [PATCH 1/3] for cuda separate compilation --- src/lib.rs | 31 ++++++++++++++++++++++++++++++- 1 file changed, 30 insertions(+), 1 deletion(-) diff --git a/src/lib.rs b/src/lib.rs index f46fade8..b0986e08 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -929,6 +929,22 @@ impl Build { objects.push(Object::new(file.to_path_buf(), obj)); } self.compile_objects(&objects)?; + + if self.cuda { + let compiler = self.try_get_compiler()?; + let mut cmd = compiler.to_command(); + cmd.arg("-dlink"); + for obj in objects.clone() { + cmd.arg(obj.dst); + } + cmd.arg("-o"); + let out_dir = self.get_out_dir()?; + let out_dir = out_dir.join("link.o"); + cmd.arg(out_dir); + println!("running {:?}", cmd); + run(&mut cmd, "nvcc")?; + } + self.assemble(lib_name, &dst.join(gnu_lib_name), &objects)?; if self.get_target()?.contains("msvc") { @@ -1165,6 +1181,11 @@ impl Build { .into_owned(), ) }; + + if self.cuda { + cmd.arg("-dc"); + } + let is_arm = target.contains("aarch64") || target.contains("arm"); command_add_output_file(&mut cmd, &obj.dst, self.cuda, msvc, clang, is_asm, is_arm); // armasm and armasm64 don't requrie -c option @@ -1713,7 +1734,15 @@ impl Build { // appends to it, which we don't want. let _ = fs::remove_file(&dst); - let objects: Vec<_> = objs.iter().map(|obj| obj.dst.clone()).collect(); + let mut objects: Vec<_> = objs.iter().map(|obj| obj.dst.clone()).collect(); + + if self.cuda { + let out_dir = self.get_out_dir()?; + let out_dir = out_dir.join("link.o"); + objects.push(out_dir); + } + + let objects = objects; let target = self.get_target()?; if target.contains("msvc") { let (mut cmd, program) = self.get_ar()?; From fdd5761cdc190f5f6f9b65e44396e27880eada46 Mon Sep 17 00:00:00 2001 From: yoshikawa <yoshikawa@preferred.jp> Date: Tue, 2 Jun 2020 09:57:29 +0900 Subject: [PATCH 2/3] move to compile objects --- src/lib.rs | 31 +++++++++++++++---------------- 1 file changed, 15 insertions(+), 16 deletions(-) diff --git a/src/lib.rs b/src/lib.rs index b0986e08..c4869205 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -929,22 +929,6 @@ impl Build { objects.push(Object::new(file.to_path_buf(), obj)); } self.compile_objects(&objects)?; - - if self.cuda { - let compiler = self.try_get_compiler()?; - let mut cmd = compiler.to_command(); - cmd.arg("-dlink"); - for obj in objects.clone() { - cmd.arg(obj.dst); - } - cmd.arg("-o"); - let out_dir = self.get_out_dir()?; - let out_dir = out_dir.join("link.o"); - cmd.arg(out_dir); - println!("running {:?}", cmd); - run(&mut cmd, "nvcc")?; - } - self.assemble(lib_name, &dst.join(gnu_lib_name), &objects)?; if self.get_target()?.contains("msvc") { @@ -1155,6 +1139,21 @@ impl Build { for obj in objs { self.compile_object(obj)?; } + + if self.cuda { + let compiler = self.try_get_compiler()?; + let mut cmd = compiler.to_command(); + cmd.arg("-dlink"); + for obj in objs { + cmd.arg(obj.dst.clone()); + } + cmd.arg("-o"); + let out_dir = self.get_out_dir()?; + let out_dir = out_dir.join("link.o"); + cmd.arg(out_dir); + run(&mut cmd, "nvcc")?; + } + Ok(()) } From 5d51a1d18cbcb8fe5383145786d716362eb12c95 Mon Sep 17 00:00:00 2001 From: yoshikawa <yoshikawa@preferred.jp> Date: Tue, 9 Jun 2020 17:24:05 +0900 Subject: [PATCH 3/3] rename to __cc_internal_link.o --- src/lib.rs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/lib.rs b/src/lib.rs index c4869205..9a1c4886 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -1149,7 +1149,7 @@ impl Build { } cmd.arg("-o"); let out_dir = self.get_out_dir()?; - let out_dir = out_dir.join("link.o"); + let out_dir = out_dir.join("__cc_internal_link.o"); cmd.arg(out_dir); run(&mut cmd, "nvcc")?; } @@ -1737,7 +1737,7 @@ impl Build { if self.cuda { let out_dir = self.get_out_dir()?; - let out_dir = out_dir.join("link.o"); + let out_dir = out_dir.join("__cc_internal_link.o"); objects.push(out_dir); }