Browse Source

Link C/C++ operators using `LINK.EXE` on Windows

tags/v0.0.0-test.4
Philipp Oppermann 3 years ago
parent
commit
202170951d
Failed to extract signature
2 changed files with 45 additions and 17 deletions
  1. +25
    -9
      examples/c++-dataflow/run.rs
  2. +20
    -8
      examples/c-dataflow/run.rs

+ 25
- 9
examples/c++-dataflow/run.rs View File

@@ -137,16 +137,32 @@ async fn build_cxx_operator(path: &Path, out_name: &str) -> eyre::Result<()> {
bail!("failed to compile cxx operator");
};

let mut link = tokio::process::Command::new("clang++");
link.arg("-shared").arg(&object_file_path);
link.arg("-o")
.arg(Path::new("../build").join(library_filename(out_name)));
if let Some(parent) = path.parent() {
link.current_dir(parent);
let out_path = Path::new("../build").join(library_filename(out_name));
#[cfg(unix)]
{
let mut link = tokio::process::Command::new("clang++");
link.arg("-shared").arg(&object_file_path);
link.arg("-o").arg(out_path);
if let Some(parent) = path.parent() {
link.current_dir(parent);
}
if !link.status().await?.success() {
bail!("failed to create shared library from cxx operator (c api)");
};
}
#[cfg(windows)]
{
let mut link = tokio::process::Command::new("LINK.EXE");
link.arg("/DLL");
link.arg(format!("/OUT:{}", out_path.display()));
link.arg(&object_file_path);
if let Some(parent) = path.parent() {
link.current_dir(parent);
}
if !link.status().await?.success() {
bail!("failed to link c++ operator (c api)");
};
}
if !link.status().await?.success() {
bail!("failed to create shared library from cxx operator (c api)");
};

Ok(())
}


+ 20
- 8
examples/c-dataflow/run.rs View File

@@ -129,14 +129,26 @@ async fn build_c_operator(root: &Path) -> eyre::Result<()> {
bail!("failed to compile c operator");
};

let mut link = tokio::process::Command::new("clang");
link.arg("-shared").arg("build/operator.o");
link.arg("-o")
.arg(Path::new("build").join(library_filename("operator")));
if !link.status().await?.success() {
bail!("failed to link c operator");
};

let out_path = Path::new("build").join(library_filename("operator"));
#[cfg(unix)]
{
let mut link = tokio::process::Command::new("clang");
link.arg("-shared").arg("build/operator.o");
link.arg("-o").arg(out_path);
if !link.status().await?.success() {
bail!("failed to link c operator");
};
}
#[cfg(windows)]
{
let mut link = tokio::process::Command::new("LINK.EXE");
link.arg("/DLL");
link.arg(format!("/OUT:{}", out_path.display()));
link.arg("build/operator.o");
if !link.status().await?.success() {
bail!("failed to link c operator");
};
}
Ok(())
}



Loading…
Cancel
Save