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()