Skip to content

Commit

Permalink
Merge branch 'main' into dependabot/cargo/syn-2.0.65
Browse files Browse the repository at this point in the history
  • Loading branch information
wmmc88 authored May 31, 2024
2 parents 3eac95c + b5fb26f commit 732450c
Show file tree
Hide file tree
Showing 4 changed files with 44 additions and 17 deletions.
8 changes: 4 additions & 4 deletions Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -39,10 +39,10 @@ unsafe_op_in_unsafe_fn = "forbid"

[workspace.lints.clippy]
# Lint Groups
all = "deny"
pedantic = "warn"
nursery = "warn"
cargo = "warn"
all = { level = "deny", priority = -1 }
pedantic = { level = "warn", priority = -1 }
nursery = { level = "warn", priority = -1 }
cargo = { level = "warn", priority = -1 }
# Individual Lints
multiple_unsafe_ops_per_block = "forbid"
undocumented_unsafe_blocks = "forbid"
Expand Down
5 changes: 3 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -22,8 +22,9 @@ This project was built with support of WDM, KMDF, and UMDF drivers in mind, as w
### Build Requirements

* Binding generation via `bindgen` requires `libclang`. The easiest way to acquire this is via `winget`
* `winget install -i LLVM.LLVM`
* Ensure you select the GUI option to add LLVM to the PATH
* `winget install -i LLVM.LLVM --version 17.0.6 --force`
* Ensure you select the GUI option to add LLVM to the PATH
* LLVM 18 has a bug that causes bindings to fail to generate for ARM64. Continue using LLVM 17 until LLVM 19 comes out with [the fix](https://github.com/llvm/llvm-project/pull/93235). See [this](https://github.com/rust-lang/rust-bindgen/issues/2842) for more details.
* To execute post-build tasks (ie. `inf2cat`, `infverif`, etc.), `cargo make` is used
* `cargo install --locked cargo-make --no-default-features --features tls-native`

Expand Down
4 changes: 2 additions & 2 deletions crates/wdk-build/src/bindgen.rs
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ pub trait BuilderExt {
///
/// Implementation may return `wdk_build::ConfigError` if it fails to create
/// a builder
fn wdk_default(c_header_files: Vec<&str>, config: Config) -> Result<Builder, ConfigError>;
fn wdk_default(c_header_files: Vec<&str>, config: &Config) -> Result<Builder, ConfigError>;
}

impl BuilderExt for Builder {
Expand All @@ -26,7 +26,7 @@ impl BuilderExt for Builder {
///
/// Will return `wdk_build::ConfigError` if any of the resolved include or
/// library paths do not exist
fn wdk_default(c_header_files: Vec<&str>, config: Config) -> Result<Self, ConfigError> {
fn wdk_default(c_header_files: Vec<&str>, config: &Config) -> Result<Self, ConfigError> {
let mut builder = Self::default();

for c_header in c_header_files {
Expand Down
44 changes: 35 additions & 9 deletions crates/wdk-sys/build.rs
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,8 @@
use std::{
env,
path::{Path, PathBuf},
sync::Arc,
thread::{self, JoinHandle},
};

use bindgen::CodegenConfig;
Expand All @@ -21,7 +23,7 @@ use wdk_build::{BuilderExt, Config, ConfigError, DriverConfig, KMDFConfig};
// "2.0", "2.15", "2.17", "2.19", "2.21", "2.23", "2.25", "2.27", "2.31",
// "2.33", ];

fn generate_constants(out_path: &Path, config: Config) -> Result<(), ConfigError> {
fn generate_constants(out_path: &Path, config: &Config) -> Result<(), ConfigError> {
Ok(
bindgen::Builder::wdk_default(vec!["src/ntddk-input.h", "src/wdf-input.h"], config)?
.with_codegen_config(CodegenConfig::VARS)
Expand All @@ -31,7 +33,7 @@ fn generate_constants(out_path: &Path, config: Config) -> Result<(), ConfigError
)
}

fn generate_types(out_path: &Path, config: Config) -> Result<(), ConfigError> {
fn generate_types(out_path: &Path, config: &Config) -> Result<(), ConfigError> {
Ok(
bindgen::Builder::wdk_default(vec!["src/ntddk-input.h", "src/wdf-input.h"], config)?
.with_codegen_config(CodegenConfig::TYPES)
Expand All @@ -41,7 +43,7 @@ fn generate_types(out_path: &Path, config: Config) -> Result<(), ConfigError> {
)
}

fn generate_ntddk(out_path: &Path, config: Config) -> Result<(), ConfigError> {
fn generate_ntddk(out_path: &Path, config: &Config) -> Result<(), ConfigError> {
Ok(
bindgen::Builder::wdk_default(vec!["src/ntddk-input.h"], config)?
.with_codegen_config((CodegenConfig::TYPES | CodegenConfig::VARS).complement())
Expand All @@ -51,7 +53,7 @@ fn generate_ntddk(out_path: &Path, config: Config) -> Result<(), ConfigError> {
)
}

fn generate_wdf(out_path: &Path, config: Config) -> Result<(), ConfigError> {
fn generate_wdf(out_path: &Path, config: &Config) -> Result<(), ConfigError> {
// As of NI WDK, this may generate an empty file due to no non-type and non-var
// items in the wdf headers(i.e. functions are all inlined). This step is
// intentionally left here in case older WDKs have non-inlined functions or new
Expand All @@ -67,6 +69,15 @@ fn generate_wdf(out_path: &Path, config: Config) -> Result<(), ConfigError> {
)
}

type GenerateFn = fn(&Path, &Config) -> Result<(), ConfigError>;

const GENERATE_FUNCTIONS: [GenerateFn; 4] = [
generate_constants,
generate_types,
generate_ntddk,
generate_wdf,
];

fn main() -> anyhow::Result<()> {
let tracing_filter = EnvFilter::default()
// Show errors and warnings by default
Expand Down Expand Up @@ -135,12 +146,27 @@ fn main() -> anyhow::Result<()> {
),
];

let mut handles = Vec::<JoinHandle<Result<(), ConfigError>>>::new();
let config_arc = Arc::new(config);

for out_path in out_paths {
generate_constants(&out_path, config.clone())?;
generate_types(&out_path, config.clone())?;
generate_ntddk(&out_path, config.clone())?;
generate_wdf(&out_path, config.clone())?;
let path_arc = Arc::new(out_path);
for generate_function in GENERATE_FUNCTIONS {
let temp_path = path_arc.clone();
let temp_config = config_arc.clone();
let handle: JoinHandle<Result<(), ConfigError>> = thread::spawn(move || {
generate_function(&temp_path, &temp_config)?;
Ok(())
});
handles.push(handle);
}
}

for handle in handles {
if let Err(e) = handle.join().unwrap() {
return Err(e.into());
}
}

Ok(config.export_config()?)
Ok(config_arc.export_config()?)
}

0 comments on commit 732450c

Please sign in to comment.