• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1# Platform port library
2
3# Target file may define TCUTIL_PLATFORM_SRCS
4if (NOT DEFINED TCUTIL_PLATFORM_SRCS)
5	if (DE_OS_IS_WIN32)
6		set(TCUTIL_PLATFORM_SRCS
7			win32/tcuWin32Platform.hpp
8			win32/tcuWin32Platform.cpp
9			win32/tcuWGLContextFactory.hpp
10			win32/tcuWGLContextFactory.cpp
11			win32/tcuWGL.hpp
12			win32/tcuWGL.cpp
13			win32/tcuWin32API.h
14			win32/tcuWin32Window.cpp
15			win32/tcuWin32Window.hpp
16			win32/tcuWin32EGLNativeDisplayFactory.hpp
17			win32/tcuWin32EGLNativeDisplayFactory.cpp
18			win32/tcuWin32VulkanPlatform.hpp
19			win32/tcuWin32VulkanPlatform.cpp
20			)
21
22	elseif ((DE_OS_IS_UNIX OR DE_OS_IS_OSX) AND (DEQP_USE_X11 OR DEQP_USE_WAYLAND OR DEQP_USE_HEADLESS))
23
24		set(TCUTIL_PLATFORM_SRCS
25			lnx/tcuLnx.cpp
26			lnx/tcuLnx.hpp
27			lnx/tcuLnxPlatform.cpp
28			lnx/tcuLnxPlatform.hpp
29			lnx/tcuLnxEglPlatform.hpp
30			lnx/tcuLnxEglPlatform.cpp
31			lnx/tcuLnxVulkanPlatform.hpp
32			lnx/tcuLnxVulkanPlatform.cpp
33		)
34
35		include_directories(lnx)
36
37		if (DEQP_USE_X11)
38			add_definitions(-DDEQP_SUPPORT_X11=1)
39			include_directories(lnx/X11)
40
41			message(STATUS "DEQP_SUPPORT_GLX        = ${DEQP_SUPPORT_GLX}")
42
43			if (DEQP_SUPPORT_GLX)
44				add_definitions(-DDEQP_SUPPORT_GLX=1)
45			endif ()
46
47			set(TCUTIL_PLATFORM_SRCS
48				${TCUTIL_PLATFORM_SRCS}
49				lnx/X11/tcuLnxX11.cpp
50				lnx/X11/tcuLnxX11.hpp
51				lnx/X11/tcuLnxX11EglDisplayFactory.hpp
52				lnx/X11/tcuLnxX11EglDisplayFactory.cpp
53				)
54
55			if (DEQP_USE_XCB)
56				set(TCUTIL_PLATFORM_SRCS
57					${TCUTIL_PLATFORM_SRCS}
58					lnx/X11/tcuLnxX11Xcb.hpp
59					lnx/X11/tcuLnxX11Xcb.cpp
60					)
61			endif()
62
63			if (DEQP_SUPPORT_GLX)
64				set(TCUTIL_PLATFORM_SRCS
65					${TCUTIL_PLATFORM_SRCS}
66					lnx/X11/tcuLnxX11GlxPlatform.hpp
67					lnx/X11/tcuLnxX11GlxPlatform.cpp
68				)
69			endif()
70		endif()
71
72		if (DEQP_USE_WAYLAND)
73			add_definitions(-DDEQP_SUPPORT_WAYLAND=1)
74			include_directories(lnx/wayland)
75
76			set(DEQP_XDG_SHELL_GEN_OUTPUTS_DIR ${PROJECT_BINARY_DIR}/framework/platform)
77			set(DEQP_XDG_SHELL_OUTPUTS
78				${DEQP_XDG_SHELL_GEN_OUTPUTS_DIR}/xdg-shell.c
79				${DEQP_XDG_SHELL_GEN_OUTPUTS_DIR}/xdg-shell.h)
80
81			if (WAYLAND_XDG_SHELL_SRC_DIR)
82				# Allow xdg-shell.c and xdg-shell.h to be source files specified in an external directory
83				configure_file(${WAYLAND_XDG_SHELL_SRC_DIR}/xdg-shell.c ${DEQP_XDG_SHELL_GEN_OUTPUTS_DIR}/xdg-shell.c COPYONLY)
84				configure_file(${WAYLAND_XDG_SHELL_SRC_DIR}/xdg-shell.h ${DEQP_XDG_SHELL_GEN_OUTPUTS_DIR}/xdg-shell.h COPYONLY)
85			else ()
86				pkg_get_variable(WAYLAND_PROTOCOLS_DIR wayland-protocols pkgdatadir)
87
88				if (NOT WAYLAND_SCANNER)
89					pkg_get_variable(WAYLAND_SCANNER wayland-scanner wayland_scanner)
90				endif()
91
92				set(DEQP_XDG_SHELL_PROTOCOL ${WAYLAND_PROTOCOLS_DIR}/stable/xdg-shell/xdg-shell.xml)
93				add_custom_command(
94					COMMAND ${WAYLAND_SCANNER} ARGS client-header ${DEQP_XDG_SHELL_PROTOCOL} xdg-shell.h
95					COMMAND ${WAYLAND_SCANNER} ARGS public-code ${DEQP_XDG_SHELL_PROTOCOL} xdg-shell.c
96					DEPENDS ${DEQP_XDG_SHELL_PROTOCOL}
97					OUTPUT ${DEQP_XDG_SHELL_OUTPUTS})
98			endif()
99
100			add_custom_target(
101				deqp-xdg-shell ALL
102				DEPENDS ${DEQP_XDG_SHELL_OUTPUTS})
103
104			set(TCUTIL_PLATFORM_SRCS
105				${TCUTIL_PLATFORM_SRCS}
106				lnx/wayland/tcuLnxWayland.hpp
107				lnx/wayland/tcuLnxWayland.cpp
108				lnx/wayland/tcuLnxWaylandEglDisplayFactory.cpp
109				lnx/wayland/tcuLnxWaylandEglDisplayFactory.hpp
110				${DEQP_XDG_SHELL_GEN_OUTPUTS_DIR}/xdg-shell.c
111				${DEQP_XDG_SHELL_GEN_OUTPUTS_DIR}/xdg-shell.h
112				)
113			include_directories(${DEQP_XDG_SHELL_GEN_OUTPUTS_DIR})
114			include_directories(wayland)
115		endif()
116
117		if (DEQP_USE_HEADLESS)
118			add_definitions(-DDEQP_SUPPORT_HEADLESS=1)
119		endif()
120
121	elseif (DE_OS_IS_UNIX AND DEQP_USE_SURFACELESS)
122		add_definitions(-DDEQP_SURFACELESS=1)
123		set(TCUTIL_PLATFORM_SRCS
124			surfaceless/tcuSurfacelessPlatform.hpp
125			surfaceless/tcuSurfacelessPlatform.cpp
126			)
127
128	elseif (DE_OS_IS_ANDROID)
129		set(TCUTIL_PLATFORM_SRCS
130			android/tcuAndroidExecService.cpp
131			android/tcuAndroidExecService.hpp
132			)
133
134		if (DE_ANDROID_API GREATER 8)
135			# Add NativeActivity code
136			set(TCUTIL_PLATFORM_SRCS
137				${TCUTIL_PLATFORM_SRCS}
138				android/tcuAndroidAssets.cpp
139				android/tcuAndroidAssets.hpp
140				android/tcuAndroidNativeActivity.cpp
141				android/tcuAndroidNativeActivity.hpp
142				android/tcuAndroidPlatform.cpp
143				android/tcuAndroidPlatform.hpp
144				android/tcuAndroidRenderActivity.cpp
145				android/tcuAndroidRenderActivity.hpp
146				android/tcuAndroidTestActivity.cpp
147				android/tcuAndroidTestActivity.hpp
148				android/tcuAndroidUtil.cpp
149				android/tcuAndroidUtil.hpp
150				android/tcuAndroidWindow.cpp
151				android/tcuAndroidWindow.hpp
152				)
153		endif ()
154
155	elseif (DE_OS_IS_IOS)
156		set(TCUTIL_PLATFORM_SRCS
157			ios/tcuIOSApp.mm
158			ios/tcuIOSApp.h
159			ios/tcuIOSPlatform.mm
160			ios/tcuIOSPlatform.hh
161			)
162
163	elseif (DE_OS_IS_OSX)
164		set(TCUTIL_PLATFORM_SRCS
165			osx/tcuOSXPlatform.cpp
166			osx/tcuOSXPlatform.hpp
167			osx/tcuOSXVulkanPlatform.cpp
168			osx/tcuOSXVulkanPlatform.hpp
169			osx/tcuOSXMetalView.mm
170			osx/tcuOSXMetalView.hpp
171			)
172		list(APPEND TCUTIL_PLATFORM_LIBS ${QUARTZCORE_LIBRARY} ${COCOA_LIBRARY})
173
174	elseif (DE_OS_IS_FUCHSIA)
175		set(TCUTIL_PLATFORM_SRCS
176			fuchsia/tcuFuchsiaPlatform.cpp
177			)
178
179	else ()
180		set(TCUTIL_PLATFORM_SRCS
181			vanilla/tcuVanillaPlatform.cpp
182			)
183
184	endif ()
185endif ()
186
187include_directories(${PROJECT_BINARY_DIR}/external/vulkancts/framework/vulkan)
188
189add_library(tcutil-platform STATIC ${TCUTIL_PLATFORM_SRCS})
190if (DEQP_USE_WAYLAND)
191	add_dependencies(tcutil-platform deqp-xdg-shell)
192endif()
193
194# Add vkutil to the deps before tcutil so that it picks up the c++11 dependencies
195target_link_libraries(tcutil-platform vkutil)
196
197target_link_libraries(tcutil-platform tcutil ${TCUTIL_PLATFORM_LIBS})
198
199# Always link to glutil as some platforms such as Win32 always support GL
200target_link_libraries(tcutil-platform glutil)
201
202# Always link to eglutil
203target_link_libraries(tcutil-platform eglutil)
204
205# X11 libraries
206if (DEQP_USE_X11)
207	find_package(X11 REQUIRED)
208	target_link_libraries(tcutil-platform ${X11_LIBRARIES})
209	if (DEQP_USE_XCB)
210		find_package(XCB REQUIRED)
211		target_link_libraries(tcutil-platform ${XCB_LIBRARIES})
212		target_compile_definitions(tcutil-platform PUBLIC DEQP_SUPPORT_XCB=1)
213	endif ()
214	if (DEQP_SUPPORT_GLX)
215	  # GLX functions don't currently have wrappers, so link directly to libGL.
216	  target_link_libraries(tcutil-platform GL)
217	endif ()
218	if (DEQP_USE_WAYLAND)
219		find_package(Wayland REQUIRED)
220		target_link_libraries(tcutil-platform ${WAYLAND_LIBRARIES})
221		target_compile_definitions(tcutil-platform PUBLIC DEQP_SUPPORT_WAYLAND=1)
222	endif ()
223endif ()
224
225if (DE_OS_IS_WIN32)
226	target_link_libraries(tcutil-platform "version")
227endif()
228
229# Add similar library for Vulkan SC ( uses same code as vkutil, but with different INL files. These
230# are picked up via the version of vkutil that is linked against )
231add_library(tcutil-sc-platform STATIC ${TCUTIL_PLATFORM_SRCS})
232
233# Add vkscutil to the deps before tcutil so that it picks up the c++11 dependencies
234target_link_libraries(tcutil-sc-platform vkscutil)
235
236target_link_libraries(tcutil-sc-platform tcutil ${TCUTIL_PLATFORM_LIBS})
237
238# Always link to glutil as some platforms such as Win32 always support GL
239target_link_libraries(tcutil-sc-platform glutil)
240
241# Always link to eglutil
242target_link_libraries(tcutil-sc-platform eglutil)
243
244# X11 libraries
245if (DEQP_USE_X11)
246	find_package(X11 REQUIRED)
247	target_link_libraries(tcutil-sc-platform ${X11_LIBRARIES})
248	if (DEQP_USE_XCB)
249		find_package(XCB REQUIRED)
250		target_link_libraries(tcutil-sc-platform ${XCB_LIBRARIES})
251		target_compile_definitions(tcutil-sc-platform PUBLIC DEQP_SUPPORT_XCB=1)
252	endif ()
253	if (DEQP_SUPPORT_GLX)
254	  # GLX functions don't currently have wrappers, so link directly to libGL.
255	  target_link_libraries(tcutil-sc-platform GL)
256	endif ()
257	if (DEQP_USE_WAYLAND)
258		find_package(Wayland REQUIRED)
259		target_link_libraries(tcutil-sc-platform ${WAYLAND_LIBRARIES})
260		target_compile_definitions(tcutil-sc-platform PUBLIC DEQP_SUPPORT_WAYLAND=1)
261	endif ()
262endif ()
263
264if (DE_OS_IS_WIN32)
265	target_link_libraries(tcutil-sc-platform "version")
266endif()
267