mirror of
https://github.com/vosen/ZLUDA.git
synced 2025-04-28 13:37:57 +03:00
Add integration tests for injector
This commit is contained in:
parent
0104814ac3
commit
3558a0a65c
4 changed files with 90 additions and 0 deletions
68
zluda_inject/build.rs
Normal file
68
zluda_inject/build.rs
Normal file
|
@ -0,0 +1,68 @@
|
||||||
|
use std::{
|
||||||
|
env::{self, VarError},
|
||||||
|
fs::{self, DirEntry},
|
||||||
|
io,
|
||||||
|
path::{self, PathBuf},
|
||||||
|
process::Command,
|
||||||
|
};
|
||||||
|
|
||||||
|
fn main() -> Result<(), VarError> {
|
||||||
|
println!("cargo:rerun-if-changed=build.rs");
|
||||||
|
if env::var("PROFILE")? != "debug" {
|
||||||
|
return Ok(());
|
||||||
|
}
|
||||||
|
let rustc_exe = env::var("RUSTC")?;
|
||||||
|
let out_dir = env::var("OUT_DIR")?;
|
||||||
|
let target = env::var("TARGET")?;
|
||||||
|
let is_msvc = env::var("CARGO_CFG_TARGET_ENV")? == "msvc";
|
||||||
|
let opt_level = env::var("OPT_LEVEL")?;
|
||||||
|
let debug = str::parse::<bool>(env::var("DEBUG")?.as_str()).unwrap();
|
||||||
|
let mut helpers_dir = PathBuf::from(env::var("CARGO_MANIFEST_DIR")?);
|
||||||
|
helpers_dir.push("tests");
|
||||||
|
helpers_dir.push("helpers");
|
||||||
|
let helpers_dir_as_string = helpers_dir.to_string_lossy();
|
||||||
|
for rust_file in fs::read_dir(&helpers_dir).unwrap().filter_map(rust_file) {
|
||||||
|
let full_file_path = format!(
|
||||||
|
"{}{}{}",
|
||||||
|
helpers_dir_as_string,
|
||||||
|
path::MAIN_SEPARATOR,
|
||||||
|
rust_file
|
||||||
|
);
|
||||||
|
println!("cargo:rerun-if-changed={}", full_file_path);
|
||||||
|
let mut rustc_cmd = Command::new(&*rustc_exe);
|
||||||
|
if debug {
|
||||||
|
rustc_cmd.arg("-g");
|
||||||
|
}
|
||||||
|
rustc_cmd.arg(format!("-Lnative={}", helpers_dir_as_string));
|
||||||
|
if !is_msvc {
|
||||||
|
// HACK ALERT
|
||||||
|
// I have no idea why the extra library below have to be linked
|
||||||
|
rustc_cmd.arg(r"-lucrt");
|
||||||
|
}
|
||||||
|
rustc_cmd
|
||||||
|
.arg("-ldylib=nvcuda")
|
||||||
|
.arg("-C")
|
||||||
|
.arg(format!("opt-level={}", opt_level))
|
||||||
|
.arg("--out-dir")
|
||||||
|
.arg(format!("{}", out_dir))
|
||||||
|
.arg("--target")
|
||||||
|
.arg(format!("{}", target))
|
||||||
|
.arg(full_file_path);
|
||||||
|
assert!(rustc_cmd.status().unwrap().success());
|
||||||
|
}
|
||||||
|
println!("cargo:rustc-env=HELPERS_OUT_DIR={}", &out_dir);
|
||||||
|
Ok(())
|
||||||
|
}
|
||||||
|
|
||||||
|
fn rust_file(entry: io::Result<DirEntry>) -> Option<String> {
|
||||||
|
entry.ok().and_then(|e| {
|
||||||
|
let os_file_name = e.file_name();
|
||||||
|
let file_name = os_file_name.to_string_lossy();
|
||||||
|
let is_file = e.file_type().ok().map(|t| t.is_file()).unwrap_or(false);
|
||||||
|
if is_file && file_name.ends_with(".rs") {
|
||||||
|
Some(file_name.to_string())
|
||||||
|
} else {
|
||||||
|
None
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
9
zluda_inject/tests/helpers/direct_cuinit.rs
Normal file
9
zluda_inject/tests/helpers/direct_cuinit.rs
Normal file
|
@ -0,0 +1,9 @@
|
||||||
|
#![crate_type = "bin"]
|
||||||
|
|
||||||
|
extern "system" {
|
||||||
|
fn cuInit(flags: u32) -> u32;
|
||||||
|
}
|
||||||
|
|
||||||
|
fn main() {
|
||||||
|
unsafe { cuInit(0) };
|
||||||
|
}
|
BIN
zluda_inject/tests/helpers/nvcuda.lib
Normal file
BIN
zluda_inject/tests/helpers/nvcuda.lib
Normal file
Binary file not shown.
13
zluda_inject/tests/inject.rs
Normal file
13
zluda_inject/tests/inject.rs
Normal file
|
@ -0,0 +1,13 @@
|
||||||
|
use std::{env, io, process::Command};
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn direct_cuinit() -> io::Result<()> {
|
||||||
|
let helpers_dir = env!("HELPERS_OUT_DIR");
|
||||||
|
let mut main_exe = Command::new(format!(
|
||||||
|
"{}{}direct_cuinit.exe",
|
||||||
|
helpers_dir,
|
||||||
|
std::path::MAIN_SEPARATOR
|
||||||
|
));
|
||||||
|
assert!(main_exe.status()?.success());
|
||||||
|
Ok(())
|
||||||
|
}
|
Loading…
Add table
Add a link
Reference in a new issue