blob: 5efc012321d3d10b1862ed72ffc70af1cd0a48e3 [file] [log] [blame]
José Fonsecab00229e2014-09-24 16:06:54 +01001# - try to find DirectX include directories and libraries
2#
3# Once done this will define:
4#
José Fonsecab00229e2014-09-24 16:06:54 +01005# DirectX_XYZ_INCLUDE_FOUND - system has the include for the XYZ API
6# DirectX_XYZ_INCLUDE_DIR - include directory for the XYZ API
José Fonsecab00229e2014-09-24 16:06:54 +01007#
8# Where XYZ can be any of:
9#
10# DDRAW
11# D3D
José Fonsecab00229e2014-09-24 16:06:54 +010012# D3D8
José Fonsecab00229e2014-09-24 16:06:54 +010013# D3D9
José Fonsecab00229e2014-09-24 16:06:54 +010014# D3D10
15# D3D10_1
José Fonsecab00229e2014-09-24 16:06:54 +010016# D3D11
17# D3D11_1
18# D3D11_2
José Fonsecab00229e2014-09-24 16:06:54 +010019# D2D1
20#
José Fonsecab460bf32010-11-19 18:57:51 +000021
José Fonsecae2748992012-04-30 17:21:58 +010022
José Fonsecab00229e2014-09-24 16:06:54 +010023include (CheckIncludeFileCXX)
24include (FindPackageMessage)
José Fonsecaa316ae52011-06-02 14:09:33 +010025
26
José Fonsecab00229e2014-09-24 16:06:54 +010027if (WIN32)
José Fonsecab5e81382012-04-13 09:03:28 +010028
José Fonsecab00229e2014-09-24 16:06:54 +010029 if (CMAKE_SIZEOF_VOID_P EQUAL 8)
30 set (DirectX_ARCHITECTURE x64)
31 else ()
32 set (DirectX_ARCHITECTURE x86)
33 endif ()
José Fonsecab5e81382012-04-13 09:03:28 +010034
Jose Fonseca4ace1bd2015-03-16 12:51:33 +000035 # Can't use "$ENV{ProgramFiles(x86)}" to avoid violating CMP0053. See
36 # http://public.kitware.com/pipermail/cmake-developers/2014-October/023190.html
37 set (ProgramFiles_x86 "ProgramFiles(x86)")
38 if ("$ENV{${ProgramFiles_x86}}")
39 set (ProgramFiles "$ENV{${ProgramFiles_x86}}")
José Fonsecab00229e2014-09-24 16:06:54 +010040 else ()
41 set (ProgramFiles "$ENV{ProgramFiles}")
42 endif ()
José Fonsecae2748992012-04-30 17:21:58 +010043
José Fonsecab00229e2014-09-24 16:06:54 +010044 find_path (DirectX_ROOT_DIR
45 Include/d3d9.h
46 PATHS
47 "$ENV{DXSDK_DIR}"
48 "${ProgramFiles}/Microsoft DirectX SDK (June 2010)"
49 "${ProgramFiles}/Microsoft DirectX SDK (February 2010)"
50 "${ProgramFiles}/Microsoft DirectX SDK (March 2009)"
51 "${ProgramFiles}/Microsoft DirectX SDK (August 2008)"
52 "${ProgramFiles}/Microsoft DirectX SDK (June 2008)"
53 "${ProgramFiles}/Microsoft DirectX SDK (March 2008)"
54 "${ProgramFiles}/Microsoft DirectX SDK (November 2007)"
55 "${ProgramFiles}/Microsoft DirectX SDK (August 2007)"
56 "${ProgramFiles}/Microsoft DirectX SDK"
57 DOC "DirectX SDK root directory"
58 )
59 if (DirectX_ROOT_DIR)
60 set (DirectX_INC_SEARCH_PATH "${DirectX_ROOT_DIR}/Include")
61 set (DirectX_LIB_SEARCH_PATH "${DirectX_ROOT_DIR}/Lib/${DirectX_ARCHITECTURE}")
62 set (DirectX_BIN_SEARCH_PATH "${DirectX_ROOT_DIR}/Utilities/bin/x86")
63 endif ()
José Fonseca070a0632014-06-23 18:25:55 +010064
José Fonsecab00229e2014-09-24 16:06:54 +010065 # With VS 2011 and Windows 8 SDK, the DirectX SDK is included as part of
66 # the Windows SDK.
67 #
68 # See also:
69 # - http://msdn.microsoft.com/en-us/library/windows/desktop/ee663275.aspx
Jose Fonseca8fa3a332016-07-26 21:45:57 +010070 if (MSVC)
José Fonsecab00229e2014-09-24 16:06:54 +010071 set (USE_WINSDK_HEADERS TRUE)
72 endif ()
José Fonsecaa316ae52011-06-02 14:09:33 +010073
José Fonsecab00229e2014-09-24 16:06:54 +010074 # Find a header in the DirectX SDK
75 macro (find_dxsdk_header var_name header)
76 set (include_dir_var "DirectX_${var_name}_INCLUDE_DIR")
77 set (include_found_var "DirectX_${var_name}_INCLUDE_FOUND")
78 find_path (${include_dir_var} ${header}
José Fonseca20a15212014-09-24 20:37:21 +010079 HINTS ${DirectX_INC_SEARCH_PATH}
80 DOC "The directory where ${header} resides"
81 CMAKE_FIND_ROOT_PATH_BOTH
82 )
José Fonsecab00229e2014-09-24 16:06:54 +010083 if (${include_dir_var})
84 set (${include_found_var} TRUE)
85 find_package_message (${var_name}_INC "Found ${header} header: ${${include_dir_var}}/${header}" "[${${include_dir_var}}]")
86 endif ()
87 mark_as_advanced (${include_found_var})
88 endmacro ()
José Fonsecaa316ae52011-06-02 14:09:33 +010089
José Fonsecab00229e2014-09-24 16:06:54 +010090 # Find a header in the Windows SDK
91 macro (find_winsdk_header var_name header)
92 if (USE_WINSDK_HEADERS)
93 # Windows SDK
94 set (include_dir_var "DirectX_${var_name}_INCLUDE_DIR")
95 set (include_found_var "DirectX_${var_name}_INCLUDE_FOUND")
96 check_include_file_cxx (${header} ${include_found_var})
97 set (${include_dir_var})
98 mark_as_advanced (${include_found_var})
99 else ()
100 find_dxsdk_header (${var_name} ${header})
101 endif ()
102 endmacro ()
José Fonseca8384ccb2011-05-25 10:12:02 +0100103
Jose Fonseca16b76a22017-03-20 12:50:52 +0000104 find_winsdk_header (D3D d3d.h)
José Fonseca8384ccb2011-05-25 10:12:02 +0100105
Jose Fonseca8f55cb52017-03-22 15:00:53 +0000106 if (MSVC)
107 set (DirectX_D3D8_INCLUDE_DIR ${CMAKE_SOURCE_DIR}/thirdparty/dxsdk_aug2007)
108 set (DirectX_D3D8_INCLUDE_FOUND TRUE)
109 mark_as_advanced (DirectX_D3D8_INCLUDE_FOUND)
110 else ()
111 find_dxsdk_header (D3D8 d3d8.h)
112 endif ()
José Fonsecab460bf32010-11-19 18:57:51 +0000113
José Fonsecab00229e2014-09-24 16:06:54 +0100114 find_winsdk_header (D3D9 d3d9.h)
José Fonsecab460bf32010-11-19 18:57:51 +0000115
Jose Fonseca5020c0d2017-10-11 22:02:32 +0100116 find_winsdk_header (D3D11_4 d3d11_4.h)
José Fonsecab460bf32010-11-19 18:57:51 +0000117
Jose Fonseca16b76a22017-03-20 12:50:52 +0000118 find_winsdk_header (D2D1_1 d2d1_1.h)
José Fonsecab460bf32010-11-19 18:57:51 +0000119
José Fonsecab00229e2014-09-24 16:06:54 +0100120 find_program (DirectX_FXC_EXECUTABLE fxc
José Fonseca20a15212014-09-24 20:37:21 +0100121 HINTS ${DirectX_BIN_SEARCH_PATH}
José Fonsecab00229e2014-09-24 16:06:54 +0100122 DOC "Path to fxc.exe executable."
123 )
José Fonsecae2748992012-04-30 17:21:58 +0100124
José Fonseca5b6fb752012-04-14 14:56:45 +0100125endif ()