fix(windows-drivers): define IDD_STUB for the iddcx bindgen pass
The iddcx bindgen failed with IddCxFuncEnum.h "IDDCX_VERSION_MAJOR is not defined" + a cascade of "must use struct tag" on IDARG_* types — NOT the feared #515 header conflict (IddCx parsed fine alongside Base+Wdf). IddCx.h needs STUB mode (function-table dispatch) for the version macros to resolve; add -DIDD_STUB to generate_iddcx, matching the wdf-umdf oracle. Deliberately NOT WDF_STUB (wdk-sys parses wdf non-stubbed; desyncing only here would break WDF type-identity). Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -356,6 +356,13 @@ fn generate_iddcx(out_path: &Path, config: &Config) -> Result<(), ConfigError> {
|
||||
|
||||
let bindgen_builder = {
|
||||
bindgen::Builder::wdk_default(config)?
|
||||
// IddCx headers MUST be in STUB mode (function-table dispatch): IddCxFuncEnum.h otherwise
|
||||
// errors "IDDCX_VERSION_MAJOR is not defined", cascading into "must use 'struct' tag" on the
|
||||
// IDARG_* types (their version-gated typedefs get skipped). `#define IDD_STUB` is exactly
|
||||
// what the proven wdf-umdf oracle uses. Do NOT add WDF_STUB — wdk-sys parses wdf.h
|
||||
// non-stubbed, and stubbing it only here would desync the WDF types the iddcx module resolves
|
||||
// against, breaking type-identity.
|
||||
.clang_arg("-DIDD_STUB")
|
||||
.with_codegen_config((CodegenConfig::TYPES | CodegenConfig::VARS).complement())
|
||||
.header_contents("iddcx-input.h", &header_contents)
|
||||
// Allowlist by the "iddcx" path component (separator-agnostic) so ONLY IddCx items are
|
||||
|
||||
Reference in New Issue
Block a user