1# - try to find Oculus VR's SDK for Oculus Rift support
2#
3# Cache Variables: (probably not for direct use in your scripts)
4#  OVR_INCLUDE_DIR
5#  OVR_SOURCE_DIR
6#  OVR_LIBRARY
7#
8# Non-cache variables you might use in your CMakeLists.txt:
9#  OVR_FOUND
10#  OVR_INCLUDE_DIRS
11#  OVR_LIBRARIES
12#
13# Requires these CMake modules:
14#  FindPackageHandleStandardArgs (known included with CMake >=2.6.2)
15#
16# Original Author:
17# 2014 Kevin M. Godby <kevin@godby.org>
18#
19# Distributed under the Boost Software License, Version 1.0.
20# (See accompanying file LICENSE_1_0.txt or copy at
21# http://www.boost.org/LICENSE_1_0.txt)
22
23set(OVR_ROOT_DIR
24	"${OVR_ROOT_DIR}"
25	CACHE
26	PATH
27	"Directory to search for Oculus SDK")
28
29# The OVR library is built in a directory tree that varies based on platform,
30# architecture, and compiler.
31#
32# The libraries live in one of the following locations:
33#
34# Lib/Win32/VS2012/libovrd.lib
35# Lib/Win32/VS2012/libovr.lib
36# Lib/Win32/VS2013/libovrd.lib
37# Lib/Win32/VS2013/libovr.lib
38# Lib/Win32/VS2010/libovrd.lib
39# Lib/Win32/VS2010/libovr.lib
40# Lib/x64/VS2012/libovr64d.lib
41# Lib/x64/VS2012/libovr64.lib
42# Lib/x64/VS2013/libovr64d.lib
43# Lib/x64/VS2013/libovr64.lib
44# Lib/x64/VS2010/libovr64d.lib
45# Lib/x64/VS2010/libovr64.lib
46# Lib/Linux/Release/x86_64/libovr.a
47# Lib/Linux/Debug/x86_64/libovr.a
48# Lib/Linux/Release/i386/libovr.a
49# Lib/Linux/Debug/i386/libovr.a
50# Lib/Mac/Release/libovr.a
51# Lib/Mac/Debug/libovr.a
52
53set(OVR_LIBRARY_PATH_SUFFIX "Lib")
54
55# Test compiler
56if(MSVC10) # Microsoft Visual Studio 2010
57	set(_ovr_library_compiler "VS2010")
58elseif(MSVC11) # Microsoft Visual Studio 2012
59	set(_ovr_library_compiler "VS2012")
60elseif(MSVC12) # Microsoft Visual Studio 2013
61	set(_ovr_library_compiler "VS2013")
62endif()
63
64
65# Test 32/64 bits
66if("${CMAKE_SIZEOF_VOID_P}" EQUAL "8")
67	set(_ovr_library_arch "x86_64")
68	if (WIN32)
69		set(_ovr_library_arch "x64")
70		set(_ovr_libname_bitsuffix "64")
71	endif(WIN32)
72else()
73	set(_ovr_library_arch "i386")
74	if (WIN32)
75		set(_ovr_library_arch "Win32")
76		set(_ovr_libname_bitsuffix "")
77	endif(WIN32)
78endif()
79
80# Test platform
81if(${CMAKE_SYSTEM_NAME} MATCHES "Linux")
82	set(OVR_LIBRARY_PATH_SUFFIX_START "Lib/Linux") # needs build type and arch
83elseif(${CMAKE_SYSTEM_NAME} MATCHES "Darwin")
84	set(OVR_LIBRARY_PATH_SUFFIX_START "Lib/Mac") # needs build type
85elseif(${CMAKE_SYSTEM_NAME} MATCHES "Windows")
86	set(OVR_LIBRARY_PATH_SUFFIX "Lib/${_ovr_library_arch}/${_ovr_library_compiler}")
87endif()
88
89find_library(OVR_LIBRARY_RELEASE
90	NAMES
91	ovr${_ovr_libname_bitsuffix}
92	libovr${_ovr_libname_bitsuffix}
93	PATHS
94	"${OVR_ROOT_DIR}"
95	"${OVR_ROOT_DIR}/LibOVR"
96	c:/tools/oculus-sdk.install/OculusSDK/LibOVR
97	PATH_SUFFIXES
98	${OVR_LIBRARY_PATH_SUFFIX}
99	${OVR_LIBRARY_PATH_SUFFIX_START}/Release
100	${OVR_LIBRARY_PATH_SUFFIX_START}/Release/${_ovr_library_arch})
101
102find_library(OVR_LIBRARY_DEBUG
103	NAMES
104	ovr${_ovr_libname_bitsuffix}d
105	libovr${_ovr_libname_bitsuffix}d
106	PATHS
107	"${OVR_ROOT_DIR}"
108	"${OVR_ROOT_DIR}/LibOVR"
109	c:/tools/oculus-sdk.install/OculusSDK/LibOVR
110	PATH_SUFFIXES
111	${OVR_LIBRARY_PATH_SUFFIX}
112	${OVR_LIBRARY_PATH_SUFFIX_START}/Debug
113	${OVR_LIBRARY_PATH_SUFFIX_START}/Debug/${_ovr_library_arch})
114
115include(SelectLibraryConfigurations)
116select_library_configurations(OVR)
117
118if(OVR_LIBRARY_RELEASE)
119	get_filename_component(_libdir "${OVR_LIBRARY_RELEASE}" PATH)
120endif()
121
122find_path(OVR_INCLUDE_DIR
123	NAMES
124	OVR.h
125	HINTS
126	"${_libdir}"
127	"${_libdir}/.."
128	"${_libdir}/../.."
129	"${_libdir}/../../.."
130	PATHS
131	"${OVR_ROOT_DIR}"
132	PATH_SUFFIXES
133	include
134	Include
135	)
136
137find_path(OVR_SOURCE_DIR
138	NAMES
139	OVR_CAPI.h
140	HINTS
141	"${_libdir}"
142	"${_libdir}/.."
143	"${_libdir}/../.."
144	"${_libdir}/../../.."
145	PATHS
146	"${OVR_ROOT_DIR}"
147	PATH_SUFFIXES
148	Src
149	)
150
151# Dependencies
152
153set(_ovr_dependency_libraries "")
154set(_ovr_dependency_includes "")
155
156if(NOT OPENGL_FOUND)
157	find_package(OpenGL)
158	list(APPEND _ovr_dependency_libraries ${OPENGL_LIBRARIES})
159	list(APPEND _ovr_dependency_includes ${OPENGL_INCLUDE_DIR})
160	list(APPEND _ovr_dependencies OPENGL_FOUND)
161endif()
162
163if(NOT THREADS_FOUND)
164	find_package(Threads)
165	list(APPEND _ovr_dependency_libraries ${CMAKE_THREAD_LIBS_INIT})
166	list(APPEND _ovr_dependencies THREADS_FOUND)
167endif()
168
169# Linux-only dependencies
170if(${CMAKE_SYSTEM_NAME} MATCHES "Linux")
171	if(NOT X11_FOUND)
172		find_package(X11)
173		list(APPEND _ovr_dependency_libraries ${X11_LIBRARIES})
174		list(APPEND _ovr_dependency_includes ${X11_INCLUDE_DIR})
175		list(APPEND _ovr_dependencies X11_FOUND)
176	endif()
177
178	if(NOT XRANDR_FOUND)
179		find_package(Xrandr)
180		list(APPEND _ovr_dependency_libraries ${XRANDR_LIBRARIES})
181		list(APPEND _ovr_dependency_includes ${XRANDR_INCLUDE_DIR})
182		list(APPEND _ovr_dependencies XRANDR_FOUND)
183	endif()
184
185	if(NOT UDEV_FOUND)
186		find_package(udev)
187		list(APPEND _ovr_dependency_libraries ${UDEV_LIBRARIES})
188		list(APPEND _ovr_dependency_includes ${UDEV_INCLUDE_DIR})
189		list(APPEND _ovr_dependencies UDEV_FOUND)
190	endif()
191endif()
192
193if(WIN32)
194	#find_library(OVR_WINMM_LIBRARY winmm)
195	#find_library(OVR_WS2_LIBRARY ws2_32)
196	list(APPEND _ovr_dependency_libraries winmm ws2_32)#${OVR_WINMM_LIBRARY} ${OVR_WS2_LIBRARY})
197endif()
198
199include(FindPackageHandleStandardArgs)
200find_package_handle_standard_args(OVR
201	DEFAULT_MSG
202	OVR_LIBRARY
203	OVR_INCLUDE_DIR
204	OVR_SOURCE_DIR
205	${_ovr_dependencies}
206	)
207
208if(OVR_FOUND)
209	set(OVR_LIBRARIES ${OVR_LIBRARY} ${_ovr_dependency_libraries})
210	set(OVR_INCLUDE_DIRS ${OVR_INCLUDE_DIR} ${OVR_SOURCE_DIR} ${_ovr_dependency_includes})
211	mark_as_advanced(OVR_ROOT_DIR)
212endif()
213
214mark_as_advanced(OVR_INCLUDE_DIR
215	OVR_SOURCE_DIR
216	OVR_LIBRARY
217	OVR_WINMM_LIBRARY
218	OVR_WS2_LIBRARY)
219
220