FindD3D12.cmake 3.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. # Find the Win10 SDK path.
  2. if ("$ENV{WIN10_SDK_PATH}$ENV{WIN10_SDK_VERSION}" STREQUAL "" )
  3. get_filename_component(WIN10_SDK_PATH "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows Kits\\Installed Roots;KitsRoot10]" ABSOLUTE CACHE)
  4. set (WIN10_SDK_VERSION ${CMAKE_VS_WINDOWS_TARGET_PLATFORM_VERSION})
  5. elseif(TRUE)
  6. set (WIN10_SDK_PATH $ENV{WIN10_SDK_PATH})
  7. set (WIN10_SDK_VERSION $ENV{WIN10_SDK_VERSION})
  8. endif ("$ENV{WIN10_SDK_PATH}$ENV{WIN10_SDK_VERSION}" STREQUAL "" )
  9. # WIN10_SDK_PATH will be something like C:\Program Files (x86)\Windows Kits\10
  10. # WIN10_SDK_VERSION will be something like 10.0.14393 or 10.0.14393.0; we need the
  11. # one that matches the directory name.
  12. if (IS_DIRECTORY "${WIN10_SDK_PATH}/Include/${WIN10_SDK_VERSION}.0")
  13. set(WIN10_SDK_VERSION "${WIN10_SDK_VERSION}.0")
  14. endif (IS_DIRECTORY "${WIN10_SDK_PATH}/Include/${WIN10_SDK_VERSION}.0")
  15. # Find the d3d12 and dxgi include path, it will typically look something like this.
  16. # C:\Program Files (x86)\Windows Kits\10\Include\10.0.10586.0\um\d3d12.h
  17. # C:\Program Files (x86)\Windows Kits\10\Include\10.0.10586.0\shared\dxgi1_4.h
  18. find_path(D3D12_INCLUDE_DIR # Set variable D3D12_INCLUDE_DIR
  19. d3d12.h # Find a path with d3d12.h
  20. HINTS "${WIN10_SDK_PATH}/Include/${WIN10_SDK_VERSION}/um"
  21. DOC "path to WIN10 SDK header files"
  22. HINTS
  23. )
  24. find_path(DXGI_INCLUDE_DIR # Set variable DXGI_INCLUDE_DIR
  25. dxgi1_4.h # Find a path with dxgi1_4.h
  26. HINTS "${WIN10_SDK_PATH}/Include/${WIN10_SDK_VERSION}/shared"
  27. DOC "path to WIN10 SDK header files"
  28. HINTS
  29. )
  30. set(D3D12_INCLUDE_DIRS ${D3D12_INCLUDE_DIR} ${DXGI_INCLUDE_DIR})
  31. # Find D3D libraries
  32. set(D3D12_LIB_NAMES d3d12.lib dxgi.lib d3dcompiler.lib)
  33. if ("${DXC_BUILD_ARCH}" STREQUAL "x64" )
  34. set(D3D12_HINTS_PATH ${WIN10_SDK_PATH}/Lib/${WIN10_SDK_VERSION}/um/x64)
  35. elseif (CMAKE_GENERATOR MATCHES "Visual Studio.*ARM" OR "${DXC_BUILD_ARCH}" STREQUAL "ARM")
  36. set(D3D12_HINTS_PATH ${WIN10_SDK_PATH}/Lib/${WIN10_SDK_VERSION}/um/arm)
  37. elseif (CMAKE_GENERATOR MATCHES "Visual Studio.*ARM64" OR "${DXC_BUILD_ARCH}" MATCHES "ARM64.*")
  38. set(D3D12_HINTS_PATH ${WIN10_SDK_PATH}/Lib/${WIN10_SDK_VERSION}/um/arm64)
  39. elseif ("${DXC_BUILD_ARCH}" STREQUAL "Win32" )
  40. set(D3D12_HINTS_PATH ${WIN10_SDK_PATH}/Lib/${WIN10_SDK_VERSION}/um/x86)
  41. else ("${DXC_BUILD_ARCH}" STREQUAL "x64")
  42. message(FATAL_ERROR "Cannot match platform.")
  43. endif ("${DXC_BUILD_ARCH}" STREQUAL "x64")
  44. set(D3D12_LIBRARIES)
  45. foreach (D3D12_LIB_NAME ${D3D12_LIB_NAMES})
  46. find_library(${D3D12_LIB_NAME}_LOC NAMES ${D3D12_LIB_NAME} HINTS ${D3D12_HINTS_PATH})
  47. set(D3D12_LIBRARIES ${D3D12_LIBRARIES} ${${D3D12_LIB_NAME}_LOC})
  48. endforeach(D3D12_LIB_NAME)
  49. include(FindPackageHandleStandardArgs)
  50. # handle the QUIETLY and REQUIRED arguments and set D3D12_FOUND to TRUE
  51. # if all listed variables are TRUE
  52. find_package_handle_standard_args(D3D12 DEFAULT_MSG
  53. D3D12_INCLUDE_DIRS D3D12_LIBRARIES)
  54. mark_as_advanced(D3D12_INCLUDE_DIRS D3D12_LIBRARIES)