From 3558a0a65cc5e6ae4df8ae4c1d95c6003d50af05 Mon Sep 17 00:00:00 2001 From: Andrzej Janik Date: Sun, 28 Nov 2021 23:51:41 +0100 Subject: [PATCH] Add integration tests for injector --- zluda_inject/build.rs | 68 ++++++++++++++++++++ zluda_inject/tests/helpers/direct_cuinit.rs | 9 +++ zluda_inject/tests/helpers/nvcuda.lib | Bin 0 -> 71050 bytes zluda_inject/tests/inject.rs | 13 ++++ 4 files changed, 90 insertions(+) create mode 100644 zluda_inject/build.rs create mode 100644 zluda_inject/tests/helpers/direct_cuinit.rs create mode 100644 zluda_inject/tests/helpers/nvcuda.lib create mode 100644 zluda_inject/tests/inject.rs diff --git a/zluda_inject/build.rs b/zluda_inject/build.rs new file mode 100644 index 0000000..c9146e0 --- /dev/null +++ b/zluda_inject/build.rs @@ -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::(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) -> Option { + 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 + } + }) +} diff --git a/zluda_inject/tests/helpers/direct_cuinit.rs b/zluda_inject/tests/helpers/direct_cuinit.rs new file mode 100644 index 0000000..8341a60 --- /dev/null +++ b/zluda_inject/tests/helpers/direct_cuinit.rs @@ -0,0 +1,9 @@ +#![crate_type = "bin"] + +extern "system" { + fn cuInit(flags: u32) -> u32; +} + +fn main() { + unsafe { cuInit(0) }; +} diff --git a/zluda_inject/tests/helpers/nvcuda.lib b/zluda_inject/tests/helpers/nvcuda.lib new file mode 100644 index 0000000000000000000000000000000000000000..b793c56e227f0c0374d75e2d6f88c58f5e86a9fd GIT binary patch literal 71050 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 literal 0 HcmV?d00001 diff --git a/zluda_inject/tests/inject.rs b/zluda_inject/tests/inject.rs new file mode 100644 index 0000000..f63186a --- /dev/null +++ b/zluda_inject/tests/inject.rs @@ -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(()) +}