| include(Platform/Windows) |
| macro(__windows_kernel_mode lang) |
| if(CMAKE_CROSSCOMPILING) |
| set(_KMDF_ERROR_EPILOGUE |
| "Please set a valid CMAKE_WINDOWS_KMDF_VERSION in the toolchain file. " |
| "For more information, see\n" |
| " https://learn.microsoft.com/en-us/windows-hardware/drivers/wdf/kmdf-version-history" |
| ) |
| if(NOT DEFINED CMAKE_WINDOWS_KMDF_VERSION) |
| message(FATAL_ERROR |
| "The Kernel-Mode Driver Framework (KMDF) version has not been set. " |
| ${_KMDF_ERROR_EPILOGUE} |
| ) |
| endif() |
| if(NOT CMAKE_WINDOWS_KMDF_VERSION MATCHES "^[0-9]\.[0-9]+$") |
| message(FATAL_ERROR |
| "The Kernel-Mode Driver Framework (KMDF) version is set to an invalid value. " |
| "The expected format is [0-9].[0-9]+. For example, 1.15 or 1.9. " |
| ${_KMDF_ERROR_EPILOGUE} |
| ) |
| endif() |
| |
| set(_KMDF_ENV_VARS |
| Platform |
| WindowsSdkDir |
| VCToolsInstallDir |
| ) |
| if(DEFINED ENV{EnterpriseWDK}) |
| set(_WINDOWS_SDK_VERSION "$ENV{Version_Number}") |
| list(APPEND _KMDF_ENV_VARS Version_Number) |
| else() |
| set(_WINDOWS_SDK_VERSION "$ENV{WindowsSDKLibVersion}") |
| list(APPEND _KMDF_ENV_VARS WindowsSDKLibVersion) |
| endif() |
| foreach(var IN LISTS _KMDF_ENV_VARS) |
| if(NOT DEFINED ENV{${var}}) |
| message(FATAL_ERROR "Required environment variable '${var}' is not defined.") |
| endif() |
| endforeach() |
| unset(_KMDF_ENV_VARS) |
| |
| set(_KMDF_PLATFORM "$ENV{Platform}") |
| |
| list(APPEND CMAKE_${lang}_STANDARD_INCLUDE_DIRECTORIES |
| $ENV{WindowsSdkDir}/Include/${_WINDOWS_SDK_VERSION}/km |
| $ENV{WindowsSdkDir}/Include/${_WINDOWS_SDK_VERSION}/km/crt |
| $ENV{WindowsSdkDir}/Include/${_WINDOWS_SDK_VERSION}/shared |
| $ENV{WindowsSdkDir}/Include/wdf/kmdf/${CMAKE_WINDOWS_KMDF_VERSION} |
| $ENV{VCToolsInstallDir}/include |
| ) |
| |
| list(APPEND CMAKE_RC_STANDARD_INCLUDE_DIRECTORIES |
| ${CMAKE_${lang}_STANDARD_INCLUDE_DIRECTORIES} |
| ) |
| list(REMOVE_DUPLICATES CMAKE_RC_STANDARD_INCLUDE_DIRECTORIES) |
| |
| list(APPEND CMAKE_${lang}_STANDARD_LINK_DIRECTORIES |
| $ENV{WindowsSdkDir}/Lib/${_WINDOWS_SDK_VERSION}/km/${_KMDF_PLATFORM} |
| ) |
| |
| unset(_KMDF_ERROR_EPILOGUE) |
| unset(_KMDF_PLATFORM) |
| unset(_WINDOWS_SDK_VERSION) |
| endif() |
| endmacro() |