WindowsKernelModeDriver.cmake 2.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. include(Platform/Windows)
  2. macro(__windows_kernel_mode lang)
  3. if(CMAKE_CROSSCOMPILING)
  4. set(_KMDF_ERROR_EPILOGUE
  5. "Please set a valid CMAKE_WINDOWS_KMDF_VERSION in the toolchain file. "
  6. "For more information, see\n"
  7. " https://learn.microsoft.com/en-us/windows-hardware/drivers/wdf/kmdf-version-history"
  8. )
  9. if(NOT DEFINED CMAKE_WINDOWS_KMDF_VERSION)
  10. message(FATAL_ERROR
  11. "The Kernel-Mode Driver Framework (KMDF) version has not been set. "
  12. ${_KMDF_ERROR_EPILOGUE}
  13. )
  14. endif()
  15. if(NOT CMAKE_WINDOWS_KMDF_VERSION MATCHES "^[0-9]\.[0-9]+$")
  16. message(FATAL_ERROR
  17. "The Kernel-Mode Driver Framework (KMDF) version is set to an invalid value. "
  18. "The expected format is [0-9].[0-9]+. For example, 1.15 or 1.9. "
  19. ${_KMDF_ERROR_EPILOGUE}
  20. )
  21. endif()
  22. set(_KMDF_ENV_VARS
  23. Platform
  24. WindowsSdkDir
  25. VCToolsInstallDir
  26. )
  27. if(DEFINED ENV{EnterpriseWDK})
  28. set(_WINDOWS_SDK_VERSION "$ENV{Version_Number}")
  29. list(APPEND _KMDF_ENV_VARS Version_Number)
  30. else()
  31. set(_WINDOWS_SDK_VERSION "$ENV{WindowsSDKLibVersion}")
  32. list(APPEND _KMDF_ENV_VARS WindowsSDKLibVersion)
  33. endif()
  34. foreach(var IN LISTS _KMDF_ENV_VARS)
  35. if(NOT DEFINED ENV{${var}})
  36. message(FATAL_ERROR "Required environment variable '${var}' is not defined.")
  37. endif()
  38. endforeach()
  39. unset(_KMDF_ENV_VARS)
  40. set(_KMDF_PLATFORM "$ENV{Platform}")
  41. list(APPEND CMAKE_${lang}_STANDARD_INCLUDE_DIRECTORIES
  42. $ENV{WindowsSdkDir}/Include/${_WINDOWS_SDK_VERSION}/km
  43. $ENV{WindowsSdkDir}/Include/${_WINDOWS_SDK_VERSION}/km/crt
  44. $ENV{WindowsSdkDir}/Include/${_WINDOWS_SDK_VERSION}/shared
  45. $ENV{WindowsSdkDir}/Include/wdf/kmdf/${CMAKE_WINDOWS_KMDF_VERSION}
  46. $ENV{VCToolsInstallDir}/include
  47. )
  48. list(APPEND CMAKE_RC_STANDARD_INCLUDE_DIRECTORIES
  49. ${CMAKE_${lang}_STANDARD_INCLUDE_DIRECTORIES}
  50. )
  51. list(REMOVE_DUPLICATES CMAKE_RC_STANDARD_INCLUDE_DIRECTORIES)
  52. list(APPEND CMAKE_${lang}_STANDARD_LINK_DIRECTORIES
  53. $ENV{WindowsSdkDir}/Lib/${_WINDOWS_SDK_VERSION}/km/${_KMDF_PLATFORM}
  54. )
  55. unset(_KMDF_ERROR_EPILOGUE)
  56. unset(_KMDF_PLATFORM)
  57. unset(_WINDOWS_SDK_VERSION)
  58. endif()
  59. endmacro()