FindDirectX.cmake 7.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193
  1. #-------------------------------------------------------------------
  2. # This file is part of the CMake build system for OGRE
  3. # (Object-oriented Graphics Rendering Engine)
  4. # For the latest info, see http://www.ogre3d.org/
  5. #
  6. # The contents of this file are placed in the public domain. Feel
  7. # free to make use of it in any way you like.
  8. #-------------------------------------------------------------------
  9. # -----------------------------------------------------------------------------
  10. # Find DirectX SDK
  11. # Define:
  12. # DirectX_FOUND
  13. # DirectX_INCLUDE_DIR
  14. # DirectX_LIBRARY
  15. # DirectX_ROOT_DIR
  16. if (DirectX_D3D10_INCLUDE_DIR AND DirectX_D3D10_LIBRARY)
  17. set(DirectX_D3D10_FOUND TRUE)
  18. endif()
  19. if (DirectX_D3D11_INCLUDE_DIR AND DirectX_D3D11_LIBRARY)
  20. set(DirectX_D3D11_FOUND TRUE)
  21. endif()
  22. if(DirectX_INCLUDE_DIR AND DirectX_LIBRARY)
  23. set(DirectX_FOUND TRUE)
  24. return()
  25. endif()
  26. macro(findpkg_begin PREFIX)
  27. if (NOT ${PREFIX}_FIND_QUIETLY)
  28. message(STATUS "Looking for ${PREFIX}...")
  29. endif ()
  30. endmacro(findpkg_begin)
  31. macro(getenv_path VAR)
  32. set(ENV_${VAR} $ENV{${VAR}})
  33. # replace won't work if var is blank
  34. if (ENV_${VAR})
  35. string( REGEX REPLACE "\\\\" "/" ENV_${VAR} ${ENV_${VAR}} )
  36. endif ()
  37. endmacro(getenv_path)
  38. macro(create_search_paths PREFIX)
  39. foreach(dir ${${PREFIX}_PREFIX_PATH})
  40. set(${PREFIX}_INC_SEARCH_PATH ${${PREFIX}_INC_SEARCH_PATH}
  41. ${dir}/include ${dir}/include/${PREFIX} ${dir}/Headers ${dir}/Include/um)
  42. set(${PREFIX}_LIB_SEARCH_PATH ${${PREFIX}_LIB_SEARCH_PATH}
  43. ${dir}/lib ${dir}/lib/${PREFIX} ${dir}/Libs ${dir}/Lib/winv6.3/um ${dir}/Lib/win8/um)
  44. endforeach(dir)
  45. set(${PREFIX}_FRAMEWORK_SEARCH_PATH ${${PREFIX}_PREFIX_PATH})
  46. endmacro(create_search_paths)
  47. macro(clear_if_changed TESTVAR)
  48. # test against internal check variable
  49. if (NOT "${${TESTVAR}}" STREQUAL "${${TESTVAR}_INT_CHECK}")
  50. message(STATUS "${TESTVAR} changed.")
  51. foreach(var ${ARGN})
  52. set(${var} "NOTFOUND" CACHE STRING "x" FORCE)
  53. endforeach(var)
  54. endif ()
  55. set(${TESTVAR}_INT_CHECK ${${TESTVAR}} CACHE INTERNAL "x" FORCE)
  56. endmacro(clear_if_changed)
  57. macro(findpkg_finish PREFIX)
  58. # skip if already processed during this run
  59. if (NOT ${PREFIX}_FOUND)
  60. if (${PREFIX}_INCLUDE_DIR AND ${PREFIX}_LIBRARY)
  61. set(${PREFIX}_FOUND TRUE)
  62. set(${PREFIX}_INCLUDE_DIRS ${${PREFIX}_INCLUDE_DIR})
  63. set(${PREFIX}_LIBRARIES ${${PREFIX}_LIBRARY})
  64. if (NOT ${PREFIX}_FIND_QUIETLY)
  65. message(STATUS "Found ${PREFIX}: ${${PREFIX}_LIBRARIES}")
  66. endif ()
  67. else ()
  68. if (NOT ${PREFIX}_FIND_QUIETLY)
  69. message(STATUS "Could not locate ${PREFIX}")
  70. endif ()
  71. if (${PREFIX}_FIND_REQUIRED)
  72. message(FATAL_ERROR "Required library ${PREFIX} not found! Install the library (including dev packages) and try again. If the library is already installed, set the missing variables manually in cmake.")
  73. endif ()
  74. endif ()
  75. mark_as_advanced(${PREFIX}_INCLUDE_DIR ${PREFIX}_LIBRARY ${PREFIX}_LIBRARY_REL ${PREFIX}_LIBRARY_DBG ${PREFIX}_LIBRARY_FWK)
  76. endif ()
  77. endmacro(findpkg_finish)
  78. if(WIN32) # The only platform it makes sense to check for DirectX SDK
  79. findpkg_begin(DirectX)
  80. # Get path, convert backslashes as ${ENV_DXSDK_DIR}
  81. getenv_path(DXSDK_DIR)
  82. getenv_path(DIRECTX_HOME)
  83. getenv_path(DIRECTX_ROOT)
  84. getenv_path(DIRECTX_BASE)
  85. getenv_path(WindowsSDK80Path)
  86. getenv_path(WindowsSDK81Path)
  87. # construct search paths
  88. set(DirectX_PREFIX_PATH
  89. "${WindowsSDK81Path}" "${ENV_WindowsSDK81Path}"
  90. "${WindowsSDK80Path}" "${ENV_WindowsSDK80Path}"
  91. "C:/Program Files/Windows Kits/8.1"
  92. "C:/Program Files (x86)/Windows Kits/8.1"
  93. "C:/Program Files/Windows Kits/8.0"
  94. "C:/Program Files (x86)/Windows Kits/8.0"
  95. "${DXSDK_DIR}" "${ENV_DXSDK_DIR}"
  96. "${DIRECTX_HOME}" "${ENV_DIRECTX_HOME}"
  97. "${DIRECTX_ROOT}" "${ENV_DIRECTX_ROOT}"
  98. "${DIRECTX_BASE}" "${ENV_DIRECTX_BASE}"
  99. "C:/apps_x86/Microsoft DirectX SDK*"
  100. "C:/Program Files (x86)/Microsoft DirectX SDK*"
  101. "C:/apps/Microsoft DirectX SDK*"
  102. "C:/Program Files/Microsoft DirectX SDK*"
  103. "$ENV{ProgramFiles}/Microsoft DirectX SDK*"
  104. )
  105. create_search_paths(DirectX)
  106. # redo search if prefix path changed
  107. clear_if_changed(DirectX_PREFIX_PATH
  108. DirectX_LIBRARY
  109. DirectX_INCLUDE_DIR
  110. DirectX_ROOT_DIR
  111. )
  112. find_path(DirectX_INCLUDE_DIR NAMES d3d9.h HINTS ${DirectX_INC_SEARCH_PATH})
  113. # dlls are in DirectX_ROOT_DIR/Developer Runtime/x64|x86
  114. # lib files are in DirectX_ROOT_DIR/Lib/x64|x86
  115. if(CMAKE_SIZEOF_VOID_P EQUAL 8)
  116. set(DirectX_LIBPATH_SUFFIX "x64")
  117. else()
  118. set(DirectX_LIBPATH_SUFFIX "x86")
  119. endif()
  120. find_library(DirectX_LIBRARY NAMES d3d9 HINTS ${DirectX_LIB_SEARCH_PATH} PATH_SUFFIXES ${DirectX_LIBPATH_SUFFIX})
  121. find_library(DirectX_D3DX9_LIBRARY NAMES d3dx9 HINTS ${DirectX_LIB_SEARCH_PATH} PATH_SUFFIXES ${DirectX_LIBPATH_SUFFIX})
  122. find_library(DirectX_DXERR9_LIBRARY NAMES dxerr HINTS ${DirectX_LIB_SEARCH_PATH} PATH_SUFFIXES ${DirectX_LIBPATH_SUFFIX})
  123. find_library(DirectX_DXGUID_LIBRARY NAMES dxguid HINTS ${DirectX_LIB_SEARCH_PATH} PATH_SUFFIXES ${DirectX_LIBPATH_SUFFIX})
  124. find_library(DirectX_DINPUT8_LIBRARY NAMES dinput8 HINTS ${DirectX_LIB_SEARCH_PATH} PATH_SUFFIXES ${DirectX_LIBPATH_SUFFIX})
  125. find_library(DirectX_XINPUT_LIBRARY NAMES xinput HINTS ${DirectX_LIB_SEARCH_PATH} PATH_SUFFIXES ${DirectX_LIBPATH_SUFFIX})
  126. find_library(DirectX_DXGI_LIBRARY NAMES dxgi HINTS ${DirectX_LIB_SEARCH_PATH} PATH_SUFFIXES ${DirectX_LIBPATH_SUFFIX})
  127. find_library(DirectX_D3DCOMPILER_LIBRARY NAMES d3dcompiler HINTS ${DirectX_LIB_SEARCH_PATH} PATH_SUFFIXES ${DirectX_LIBPATH_SUFFIX})
  128. if(DirectX_INCLUDE_DIR)
  129. set(DirectX_ROOT_DIR "${DirectX_INCLUDE_DIR}/..")
  130. endif(DirectX_INCLUDE_DIR)
  131. findpkg_finish(DirectX)
  132. set(DirectX_LIBRARIES
  133. ${DirectX_LIBRARIES}
  134. ${DirectX_D3DX9_LIBRARY}
  135. ${DirectX_DXERR9_LIBRARY}
  136. ${DirectX_DXGUID_LIBRARY}
  137. ${DirectX_DINPUT8_LIBRARY}
  138. ${DirectX_DXGI_LIBRARY}
  139. ${DirectX_D3DCOMPILER_LIBRARY}
  140. )
  141. # look for D3D10.1 components
  142. if (DirectX_FOUND)
  143. find_path(DirectX_D3D10_INCLUDE_DIR NAMES d3d10_1shader.h HINTS ${DirectX_INC_SEARCH_PATH} NO_DEFAULT_PATH)
  144. get_filename_component(DirectX_LIBRARY_DIR "${DirectX_LIBRARY}" PATH)
  145. message(STATUS "DX lib dir: ${DirectX_LIBRARY_DIR}")
  146. find_library(DirectX_D3D10_LIBRARY NAMES d3d10 HINTS ${DirectX_LIB_SEARCH_PATH} PATH_SUFFIXES ${DirectX_LIBPATH_SUFFIX})
  147. find_library(DirectX_D3DX10_LIBRARY NAMES d3dx10 HINTS ${DirectX_LIB_SEARCH_PATH} PATH_SUFFIXES ${DirectX_LIBPATH_SUFFIX})
  148. if (DirectX_D3D10_INCLUDE_DIR AND DirectX_D3D10_LIBRARY)
  149. set(DirectX_D3D10_FOUND TRUE)
  150. set(DirectX_D3D10_INCLUDE_DIRS ${DirectX_D3D10_INCLUDE_DIR} CACHE PATH "D3D10 Include Dirs")
  151. set(DirectX_D3D10_LIBRARIES ${DirectX_D3D10_LIBRARY} CACHE STRING "D3D10 Libraries")
  152. endif ()
  153. endif ()
  154. # look for D3D11 components
  155. if (DirectX_FOUND)
  156. find_path(DirectX_D3D11_INCLUDE_DIR NAMES D3D11Shader.h HINTS ${DirectX_INC_SEARCH_PATH} NO_DEFAULT_PATH)
  157. get_filename_component(DirectX_LIBRARY_DIR "${DirectX_LIBRARY}" PATH)
  158. message(STATUS "DX lib dir: ${DirectX_LIBRARY_DIR}")
  159. find_library(DirectX_D3D11_LIBRARY NAMES d3d11 d3d11_beta HINTS ${DirectX_LIB_SEARCH_PATH} PATH_SUFFIXES ${DirectX_LIBPATH_SUFFIX})
  160. find_library(DirectX_D3DX11_LIBRARY NAMES d3dx11 HINTS ${DirectX_LIB_SEARCH_PATH} PATH_SUFFIXES ${DirectX_LIBPATH_SUFFIX})
  161. if (DirectX_D3D11_INCLUDE_DIR AND DirectX_D3D11_LIBRARY)
  162. set(DirectX_D3D11_FOUND TRUE)
  163. set(DirectX_D3D11_INCLUDE_DIRS ${DirectX_D3D11_INCLUDE_DIR} CACHE PATH "D3D11 Include Dirs")
  164. set(DirectX_D3D11_LIBRARIES ${DirectX_D3D11_LIBRARY} CACHE STRING "D3D11 Libraries")
  165. endif ()
  166. endif ()
  167. endif(WIN32)