blob: 616fbc96a89c82c861c122467ddc85d5b29a3f78 [file] [log] [blame]
Mike Weiblen08c8e542018-06-26 14:47:37 -06001# ~~~
2# Copyright (c) 2018 Valve Corporation
3# Copyright (c) 2018 LunarG, Inc.
4#
5# Licensed under the Apache License, Version 2.0 (the "License");
6# you may not use this file except in compliance with the License.
7# You may obtain a copy of the License at
8#
9# http://www.apache.org/licenses/LICENSE-2.0
10#
11# Unless required by applicable law or agreed to in writing, software
12# distributed under the License is distributed on an "AS IS" BASIS,
13# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14# See the License for the specific language governing permissions and
15# limitations under the License.
16# ~~~
17
Mike Weiblen9ed609d2018-06-30 22:50:43 -060018set(CUBE_INCLUDE_DIRS ${CMAKE_CURRENT_BINARY_DIR} ${CMAKE_CURRENT_BINARY_DIR}/.. ${VulkanHeaders_INCLUDE_DIR})
Mark Young44212682018-02-21 15:29:41 -070019
Mark Lobodzinski7f6dfb72018-05-15 14:11:53 -060020set(SCRIPTS_DIR "${PROJECT_SOURCE_DIR}/scripts")
21
Tony-LunarGd8052a02018-09-17 10:55:05 -060022if (NOT GLSLANG_INSTALL_DIR AND DEFINED ENV{GLSLANG_INSTALL_DIR})
23 set(GLSLANG_INSTALL_DIR $ENV{GLSLANG_INSTALL_DIR})
24endif()
25
Tony-LunarG2478fee2018-05-22 13:26:26 -060026if(GLSLANG_INSTALL_DIR)
Mark Lobodzinskiebda2272018-05-22 08:40:49 -060027 message(STATUS "Using GLSLANG_INSTALL_DIR to look for glslangValidator")
Mike Weiblen9ed609d2018-06-30 22:50:43 -060028 find_program(GLSLANG_VALIDATOR names glslangValidator HINTS "${GLSLANG_INSTALL_DIR}/bin")
Mark Lobodzinskiebda2272018-05-22 08:40:49 -060029else()
Mark Lobodzinski7f6dfb72018-05-15 14:11:53 -060030 set(GLSLANG_VALIDATOR_NAME "glslangValidator")
Mark Lobodzinski67793842018-05-12 16:43:33 -060031 message(STATUS "Using cmake find_program to look for glslangValidator")
Mike Weiblene31a3222018-08-16 14:09:08 -060032 if(WIN32)
33 execute_process(
34 COMMAND ${PYTHON_EXECUTABLE} ${SCRIPTS_DIR}/fetch_glslangvalidator.py glslang-master-windows-x64-Release.zip)
Mark Lobodzinski7f6dfb72018-05-15 14:11:53 -060035 set(GLSLANG_VALIDATOR_NAME "glslangValidator.exe")
Mike Weiblene31a3222018-08-16 14:09:08 -060036 elseif(APPLE)
37 execute_process(COMMAND ${PYTHON_EXECUTABLE} ${SCRIPTS_DIR}/fetch_glslangvalidator.py glslang-master-osx-Release.zip)
38 elseif(UNIX AND NOT APPLE) # i.e. Linux
39 execute_process(COMMAND ${PYTHON_EXECUTABLE} ${SCRIPTS_DIR}/fetch_glslangvalidator.py glslang-master-linux-Release.zip)
Mark Lobodzinski7f6dfb72018-05-15 14:11:53 -060040 endif()
Nathaniel Cesarioc5c62652020-09-23 17:46:04 -060041 if (WIN32)
42 set(PLATFORM_DIR "${PROJECT_SOURCE_DIR}/glslang/windows/bin")
43 elseif(APPLE)
44 set(PLATFORM_DIR "${PROJECT_SOURCE_DIR}/glslang/darwin/bin")
45 else()
46 set(PLATFORM_DIR "${PROJECT_SOURCE_DIR}/glslang/linux/bin")
47 endif()
48 find_program(GLSLANG_VALIDATOR NAMES ${GLSLANG_VALIDATOR_NAME} HINTS ${PLATFORM_DIR})
Mark Lobodzinski67793842018-05-12 16:43:33 -060049endif()
Mark Lobodzinskia38c5c82018-04-11 15:15:31 -060050
Mike Weiblene31a3222018-08-16 14:09:08 -060051if(UNIX AND NOT APPLE) # i.e. Linux
Mark Lobodzinski6e590c32018-04-11 13:38:11 -060052 include(FindPkgConfig)
53 option(BUILD_WSI_XCB_SUPPORT "Build XCB WSI support" ON)
54 option(BUILD_WSI_XLIB_SUPPORT "Build Xlib WSI support" ON)
55 option(BUILD_WSI_WAYLAND_SUPPORT "Build Wayland WSI support" ON)
Nicolas Caramellic8be8c82020-07-13 17:22:09 +020056 option(BUILD_WSI_DIRECTFB_SUPPORT "Build DirectFB WSI support" OFF)
57 set(CUBE_WSI_SELECTION "XCB" CACHE STRING "Select WSI target for vkcube (XCB, XLIB, WAYLAND, DIRECTFB, DISPLAY)")
Mark Lobodzinski6e590c32018-04-11 13:38:11 -060058
Mike Weiblen9ed609d2018-06-30 22:50:43 -060059 if(BUILD_WSI_XCB_SUPPORT)
Mark Lobodzinski6e590c32018-04-11 13:38:11 -060060 find_package(XCB REQUIRED)
61 endif()
62
Mike Weiblen9ed609d2018-06-30 22:50:43 -060063 if(BUILD_WSI_XLIB_SUPPORT)
Mark Lobodzinski6e590c32018-04-11 13:38:11 -060064 find_package(X11 REQUIRED)
65 endif()
66
Mike Weiblen9ed609d2018-06-30 22:50:43 -060067 if(BUILD_WSI_WAYLAND_SUPPORT)
Mark Lobodzinski6e590c32018-04-11 13:38:11 -060068 find_package(Wayland REQUIRED)
Manuel Stoecklac939332019-06-26 20:55:53 -040069 find_package(WaylandScanner REQUIRED)
70 find_package(WaylandProtocols REQUIRED)
Mark Lobodzinski6e590c32018-04-11 13:38:11 -060071 include_directories(${WAYLAND_CLIENT_INCLUDE_DIR})
Manuel Stoecklac939332019-06-26 20:55:53 -040072 set(XDG_SHELL_PROTOCOL ${WAYLAND_PROTOCOLS_PATH}/stable/xdg-shell/xdg-shell.xml)
73 add_custom_command(COMMENT "Generating xdg-shell protocol dispatch data"
74 OUTPUT xdg-shell-code.c
75 COMMAND ${WAYLAND_SCANNER_EXECUTABLE}
76 private-code
77 ${XDG_SHELL_PROTOCOL}
78 ${CMAKE_CURRENT_BINARY_DIR}/xdg-shell-code.c
79 MAIN_DEPENDENCY ${XDG_SHELL_PROTOCOL}
80 DEPENDS ${XDG_SHELL_PROTOCOL} ${WAYLAND_SCANNER_EXECUTABLE})
81 add_custom_command(COMMENT "Generating xdg-shell protocol header"
82 OUTPUT xdg-shell-client-header.h
83 COMMAND ${WAYLAND_SCANNER_EXECUTABLE}
84 client-header
85 ${XDG_SHELL_PROTOCOL}
86 ${CMAKE_CURRENT_BINARY_DIR}/xdg-shell-client-header.h
87 MAIN_DEPENDENCY ${XDG_SHELL_PROTOCOL}
88 DEPENDS ${XDG_SHELL_PROTOCOL} ${WAYLAND_SCANNER_EXECUTABLE})
89
90 set(XDG_DECORATION_PROTOCOL ${WAYLAND_PROTOCOLS_PATH}/unstable/xdg-decoration/xdg-decoration-unstable-v1.xml)
91 add_custom_command(COMMENT "Generating xdg-decoration protocol dispatch data"
92 OUTPUT xdg-decoration-code.c
93 COMMAND ${WAYLAND_SCANNER_EXECUTABLE}
94 private-code
95 ${XDG_DECORATION_PROTOCOL}
96 ${CMAKE_CURRENT_BINARY_DIR}/xdg-decoration-code.c
97 MAIN_DEPENDENCY ${XDG_DECORATION_PROTOCOL}
98 DEPENDS ${XDG_DECORATION_PROTOCOL} ${WAYLAND_SCANNER_EXECUTABLE})
99 add_custom_command(COMMENT "Generating xdg-decoration protocol header"
100 OUTPUT xdg-decoration-client-header.h
101 COMMAND ${WAYLAND_SCANNER_EXECUTABLE}
102 client-header
103 ${XDG_DECORATION_PROTOCOL}
104 ${CMAKE_CURRENT_BINARY_DIR}/xdg-decoration-client-header.h
105 MAIN_DEPENDENCY ${XDG_DECORATION_PROTOCOL}
106 DEPENDS ${XDG_DECORATION_PROTOCOL} ${WAYLAND_SCANNER_EXECUTABLE})
Tony-LunarG2d9f59a2022-01-13 16:33:24 -0700107 endif()
Manuel Stoecklac939332019-06-26 20:55:53 -0400108
Tony-LunarG2d9f59a2022-01-13 16:33:24 -0700109 if(BUILD_WSI_DIRECTFB_SUPPORT)
110 find_package(DirectFB REQUIRED)
111 include_directories(${DIRECTFB_INCLUDE_DIR})
112 endif()
113endif()
114
115if(WIN32)
116 add_definitions(-DVK_USE_PLATFORM_WIN32_KHR -DWIN32_LEAN_AND_MEAN)
117 if(MSVC AND NOT MSVC_VERSION LESS 1900)
118 # If MSVC, Enable control flow guard
119 message(STATUS "Building vkcube with control flow guard")
120 add_compile_options("$<$<CXX_COMPILER_ID:MSVC>:/guard:cf>")
121 set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} /guard:cf")
122 set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} /guard:cf")
123 endif()
124elseif(ANDROID)
125 add_definitions(-DVK_USE_PLATFORM_ANDROID_KHR)
126elseif(APPLE)
127 add_definitions(-DVK_USE_PLATFORM_METAL_EXT)
128elseif(UNIX AND NOT APPLE) # i.e. Linux
129 if(NOT CUBE_WSI_SELECTION)
130 set(CUBE_WSI_SELECTION "XCB")
131 endif()
132
133 if(CUBE_WSI_SELECTION STREQUAL "XCB")
134 if(NOT BUILD_WSI_XCB_SUPPORT)
135 message(FATAL_ERROR "Selected XCB for vkcube build but not building Xcb support")
136 endif()
137 set(CUBE_INCLUDE_DIRS ${XCB_INCLUDE_DIRS} ${CUBE_INCLUDE_DIRS})
138 link_libraries(${XCB_LIBRARIES})
139 set(CUBE_PLATFORM VK_USE_PLATFORM_XCB_KHR)
140 elseif(CUBE_WSI_SELECTION STREQUAL "XLIB")
141 if(NOT BUILD_WSI_XLIB_SUPPORT)
142 message(FATAL_ERROR "Selected XLIB for vkcube build but not building Xlib support")
143 endif()
144 set(CUBE_INCLUDE_DIRS ${X11_INCLUDE_DIR} ${CUBE_INCLUDE_DIRS})
145 link_libraries(${X11_LIBRARIES})
146 set(CUBE_PLATFORM VK_USE_PLATFORM_XLIB_KHR)
147 elseif(CUBE_WSI_SELECTION STREQUAL "WAYLAND")
148 if(NOT BUILD_WSI_WAYLAND_SUPPORT)
149 message(FATAL_ERROR "Selected Wayland for vkcube build but not building Wayland support")
150 endif()
151 set(CUBE_INCLUDE_DIRS ${WAYLAND_CLIENT_INCLUDE_DIR} ${CUBE_INCLUDE_DIRS})
152 link_libraries(${WAYLAND_CLIENT_LIBRARIES})
153 set(CUBE_PLATFORM VK_USE_PLATFORM_WAYLAND_KHR)
154 set(XDG_SHELL_PROTOCOL ${WAYLAND_PROTOCOLS_PATH}/stable/xdg-shell/xdg-shell.xml)
Manuel Stoecklac939332019-06-26 20:55:53 -0400155 set(OPTIONAL_WAYLAND_DATA_FILES
156 ${CMAKE_CURRENT_BINARY_DIR}/xdg-shell-code.c
157 ${CMAKE_CURRENT_BINARY_DIR}/xdg-shell-client-header.h
158 ${CMAKE_CURRENT_BINARY_DIR}/xdg-decoration-code.c
159 ${CMAKE_CURRENT_BINARY_DIR}/xdg-decoration-client-header.h)
160 include_directories(${CMAKE_CURRENT_BINARY_DIR})
Nicolas Caramellic8be8c82020-07-13 17:22:09 +0200161 elseif(CUBE_WSI_SELECTION STREQUAL "DIRECTFB")
162 if(NOT BUILD_WSI_DIRECTFB_SUPPORT)
163 message(FATAL_ERROR "Selected DIRECTFB for vkcube build but not building DirectFB support")
164 endif()
165 set(CUBE_INCLUDE_DIRS ${DIRECTFB_INCLUDE_DIR} ${CUBE_INCLUDE_DIRS})
166 link_libraries(${DIRECTFB_LIBRARIES})
Tony-LunarG2d9f59a2022-01-13 16:33:24 -0700167 set(CUBE_PLATFORM VK_USE_PLATFORM_DIRECTFB_EXT)
Mark Lobodzinski6e590c32018-04-11 13:38:11 -0600168 elseif(CUBE_WSI_SELECTION STREQUAL "DISPLAY")
Tony-LunarG2d9f59a2022-01-13 16:33:24 -0700169 set(CUBE_PLATFORM VK_USE_PLATFORM_DISPLAY_KHR)
Tony Barbour61e9b872016-12-07 10:19:21 -0700170 else()
Mike Weiblen9ed609d2018-06-30 22:50:43 -0600171 message(FATAL_ERROR "Unrecognized value for CUBE_WSI_SELECTION: ${CUBE_WSI_SELECTION}")
172 endif()
Tony Barbour4f7ed012016-12-07 11:18:19 -0700173
Tony Barbour4f7ed012016-12-07 11:18:19 -0700174 link_libraries(${API_LOWERCASE} m)
Tony Barbour6af0b532016-12-07 12:12:45 -0700175else()
176 message(FATAL_ERROR "Unsupported Platform!")
Courtney Goeltzenleuchterc8a8d3e2014-10-28 10:27:47 -0600177endif()
Ian Elliottb27de192015-02-06 18:10:35 -0700178
Mike Weiblen9ed609d2018-06-30 22:50:43 -0600179set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS}")
180set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}")
Mark Lobodzinskic33e1912015-01-09 15:12:03 -0600181
Piers Daniell735ee532015-02-23 16:23:13 -0700182if(WIN32)
Dustin Graves95073002016-05-31 16:32:29 -0600183 # Use static MSVCRT libraries
Mike Weiblen9ed609d2018-06-30 22:50:43 -0600184 foreach(configuration
185 in
186 CMAKE_C_FLAGS_DEBUG
187 CMAKE_C_FLAGS_MINSIZEREL
188 CMAKE_C_FLAGS_RELEASE
189 CMAKE_C_FLAGS_RELWITHDEBINFO
190 CMAKE_CXX_FLAGS_DEBUG
191 CMAKE_CXX_FLAGS_MINSIZEREL
192 CMAKE_CXX_FLAGS_RELEASE
193 CMAKE_CXX_FLAGS_RELWITHDEBINFO)
Dustin Graves95073002016-05-31 16:32:29 -0600194 if(${configuration} MATCHES "/MD")
Mike Weiblene31a3222018-08-16 14:09:08 -0600195 string(REGEX
196 REPLACE "/MD"
197 "/MT"
198 ${configuration}
199 "${${configuration}}")
Dustin Graves95073002016-05-31 16:32:29 -0600200 endif()
201 endforeach()
Ian Elliottb27de192015-02-06 18:10:35 -0700202endif()
Courtney Goeltzenleuchter97db1c12014-10-30 15:14:16 -0600203
Mike Weiblen9ed609d2018-06-30 22:50:43 -0600204add_custom_command(COMMENT "Compiling cube vertex shader"
205 OUTPUT cube.vert.inc
206 COMMAND ${GLSLANG_VALIDATOR} -V -x -o ${CMAKE_CURRENT_BINARY_DIR}/cube.vert.inc
207 ${PROJECT_SOURCE_DIR}/cube/cube.vert
208 MAIN_DEPENDENCY ${PROJECT_SOURCE_DIR}/cube/cube.vert
209 DEPENDS ${PROJECT_SOURCE_DIR}/cube/cube.vert ${GLSLANG_VALIDATOR})
210add_custom_command(COMMENT "Compiling cube fragment shader"
211 OUTPUT cube.frag.inc
212 COMMAND ${GLSLANG_VALIDATOR} -V -x -o ${CMAKE_CURRENT_BINARY_DIR}/cube.frag.inc
213 ${PROJECT_SOURCE_DIR}/cube/cube.frag
214 MAIN_DEPENDENCY ${PROJECT_SOURCE_DIR}/cube/cube.frag
215 DEPENDS ${PROJECT_SOURCE_DIR}/cube/cube.frag ${GLSLANG_VALIDATOR})
Mark Lobodzinskib34d9ca2018-04-12 09:11:49 -0600216include_directories(${CMAKE_CURRENT_BINARY_DIR} ${CMAKE_CURRENT_SOURCE_DIR})
Petr Kraus9a4eb6a2017-11-30 14:49:20 +0100217
Ian Elliottb27de192015-02-06 18:10:35 -0700218if(WIN32)
Mike Weiblen9ed609d2018-06-30 22:50:43 -0600219 set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -D_CRT_SECURE_NO_WARNINGS -D_USE_MATH_DEFINES")
220 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -D_CRT_SECURE_NO_WARNINGS -D_USE_MATH_DEFINES")
Ian Elliottb27de192015-02-06 18:10:35 -0700221endif()
Courtney Goeltzenleuchter8750f6b2014-10-13 17:51:58 -0600222
Mike Weiblen9ed609d2018-06-30 22:50:43 -0600223include_directories(${CUBE_INCLUDE_DIRS})
Mark Young44212682018-02-21 15:29:41 -0700224
Mike Weiblen9ed609d2018-06-30 22:50:43 -0600225# ----------------------------------------------------------------------------
Tony-LunarGca8d3492018-10-31 16:10:48 -0600226# vkcube
Karl Schultz9ceac062017-12-12 10:33:01 -0500227
228if(APPLE)
229 include(macOS/cube/cube.cmake)
230elseif(NOT WIN32)
Mike Weiblen9ed609d2018-06-30 22:50:43 -0600231 if(${CMAKE_SYSTEM_PROCESSOR} STREQUAL ${CMAKE_HOST_SYSTEM_PROCESSOR})
Tony-LunarGca8d3492018-10-31 16:10:48 -0600232 add_executable(vkcube
Mike Weiblene31a3222018-08-16 14:09:08 -0600233 cube.c
234 ${PROJECT_SOURCE_DIR}/cube/cube.vert
235 ${PROJECT_SOURCE_DIR}/cube/cube.frag
236 cube.vert.inc
Manuel Stoecklac939332019-06-26 20:55:53 -0400237 cube.frag.inc
238 ${OPTIONAL_WAYLAND_DATA_FILES})
Tony-LunarGca8d3492018-10-31 16:10:48 -0600239 target_link_libraries(vkcube Vulkan::Vulkan)
Tony-LunarG2d9f59a2022-01-13 16:33:24 -0700240 target_compile_definitions(vkcube PUBLIC ${CUBE_PLATFORM})
Timo Gurr428455c2020-02-05 14:27:18 +0100241 include(CheckLibraryExists)
Tony-LunarG0bc09052019-02-26 14:44:32 -0700242 CHECK_LIBRARY_EXISTS("rt" clock_gettime "" NEED_RT)
243 if (NEED_RT)
244 target_link_libraries(vkcube rt)
245 endif()
Norbert Nopper747e2e42016-09-08 09:31:36 +0200246 endif()
Piers Daniell735ee532015-02-23 16:23:13 -0700247else()
Mike Weiblen9ed609d2018-06-30 22:50:43 -0600248 if(CMAKE_CL_64)
249 set(LIB_DIR "Win64")
Piers Daniell735ee532015-02-23 16:23:13 -0700250 else()
Mike Weiblen9ed609d2018-06-30 22:50:43 -0600251 set(LIB_DIR "Win32")
Piers Daniell735ee532015-02-23 16:23:13 -0700252 endif()
Tony Barbour1a86d032015-09-21 15:17:33 -0600253
Tony-LunarGca8d3492018-10-31 16:10:48 -0600254 add_executable(vkcube
Mike Weiblene31a3222018-08-16 14:09:08 -0600255 WIN32
256 cube.c
257 ${PROJECT_SOURCE_DIR}/cube/cube.vert
258 ${PROJECT_SOURCE_DIR}/cube/cube.frag
259 cube.vert.inc
260 cube.frag.inc)
Tony-LunarGca8d3492018-10-31 16:10:48 -0600261 target_link_libraries(vkcube Vulkan::Vulkan)
Ian Elliottb27de192015-02-06 18:10:35 -0700262endif()
Jeremy Hayesf56427a2016-09-07 15:55:11 -0600263
Karl Schultzb7940402018-05-29 13:09:22 -0600264if(APPLE)
Mike Schuchardtb7c389c2018-06-27 15:58:49 -0600265 # Keep RPATH so fixup_bundle can use it to find libraries
Tony-LunarGca8d3492018-10-31 16:10:48 -0600266 set_target_properties(vkcube PROPERTIES INSTALL_RPATH_USE_LINK_PATH TRUE)
267 install(TARGETS vkcube BUNDLE DESTINATION "cube")
Mike Schuchardtb7c389c2018-06-27 15:58:49 -0600268 # Fix up the library references to be self-contained within the bundle.
Mike Weiblene31a3222018-08-16 14:09:08 -0600269 install(CODE "
Mike Schuchardtb7c389c2018-06-27 15:58:49 -0600270 include(BundleUtilities)
Jeremy Kniager7d074d42018-11-08 16:20:42 -0700271 fixup_bundle(\${CMAKE_INSTALL_PREFIX}/cube/vkcube.app \"\" \"${Vulkan_LIBRARY_DIR}\")
Mike Weiblene31a3222018-08-16 14:09:08 -0600272 ")
Karl Schultzb7940402018-05-29 13:09:22 -0600273else()
Tony-LunarGca8d3492018-10-31 16:10:48 -0600274 install(TARGETS vkcube RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR})
Karl Schultzb7940402018-05-29 13:09:22 -0600275endif()
276
Mike Weiblen9ed609d2018-06-30 22:50:43 -0600277# ----------------------------------------------------------------------------
Tony-LunarGca8d3492018-10-31 16:10:48 -0600278# vkcubepp
Karl Schultz9ceac062017-12-12 10:33:01 -0500279
280if(APPLE)
281 include(macOS/cubepp/cubepp.cmake)
282elseif(NOT WIN32)
Mike Weiblen9ed609d2018-06-30 22:50:43 -0600283 if(${CMAKE_SYSTEM_PROCESSOR} STREQUAL ${CMAKE_HOST_SYSTEM_PROCESSOR})
Tony-LunarGca8d3492018-10-31 16:10:48 -0600284 add_executable(vkcubepp
Mike Weiblene31a3222018-08-16 14:09:08 -0600285 cube.cpp
286 ${PROJECT_SOURCE_DIR}/cube/cube.vert
287 ${PROJECT_SOURCE_DIR}/cube/cube.frag
288 cube.vert.inc
Manuel Stoecklac939332019-06-26 20:55:53 -0400289 cube.frag.inc
290 ${OPTIONAL_WAYLAND_DATA_FILES})
Tony-LunarGca8d3492018-10-31 16:10:48 -0600291 target_link_libraries(vkcubepp Vulkan::Vulkan)
Tony-LunarG2d9f59a2022-01-13 16:33:24 -0700292 target_compile_definitions(vkcubepp PUBLIC ${CUBE_PLATFORM})
Jeremy Hayes4fa507a2016-10-09 13:57:43 -0600293 endif()
294else()
Mike Weiblen9ed609d2018-06-30 22:50:43 -0600295 if(CMAKE_CL_64)
296 set(LIB_DIR "Win64")
Jeremy Hayes4fa507a2016-10-09 13:57:43 -0600297 else()
Mike Weiblen9ed609d2018-06-30 22:50:43 -0600298 set(LIB_DIR "Win32")
Jeremy Hayes4fa507a2016-10-09 13:57:43 -0600299 endif()
300
Tony-LunarGca8d3492018-10-31 16:10:48 -0600301 add_executable(vkcubepp
Mike Weiblene31a3222018-08-16 14:09:08 -0600302 WIN32
303 cube.cpp
304 ${PROJECT_SOURCE_DIR}/cube/cube.vert
305 ${PROJECT_SOURCE_DIR}/cube/cube.frag
306 cube.vert.inc
307 cube.frag.inc)
Tony-LunarGca8d3492018-10-31 16:10:48 -0600308 target_link_libraries(vkcubepp Vulkan::Vulkan)
Jeremy Hayesf56427a2016-09-07 15:55:11 -0600309endif()
Karl Schultzb7940402018-05-29 13:09:22 -0600310
311if(APPLE)
Mike Schuchardtb7c389c2018-06-27 15:58:49 -0600312 # Keep RPATH so fixup_bundle can use it to find libraries
Tony-LunarGca8d3492018-10-31 16:10:48 -0600313 set_target_properties(vkcubepp PROPERTIES INSTALL_RPATH_USE_LINK_PATH TRUE)
314 install(TARGETS vkcubepp BUNDLE DESTINATION "cube")
Mike Schuchardtb7c389c2018-06-27 15:58:49 -0600315 # Fix up the library references to be self-contained within the bundle.
Mike Weiblene31a3222018-08-16 14:09:08 -0600316 install(CODE "
Mike Schuchardtb7c389c2018-06-27 15:58:49 -0600317 include(BundleUtilities)
Jeremy Kniager7d074d42018-11-08 16:20:42 -0700318 fixup_bundle(\${CMAKE_INSTALL_PREFIX}/cube/vkcubepp.app \"\" \"${Vulkan_LIBRARY_DIR}\")
Mike Weiblene31a3222018-08-16 14:09:08 -0600319 ")
Karl Schultzb7940402018-05-29 13:09:22 -0600320else()
Tony-LunarGca8d3492018-10-31 16:10:48 -0600321 install(TARGETS vkcubepp RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR})
Karl Schultzb7940402018-05-29 13:09:22 -0600322endif()
Tony-LunarG2d9f59a2022-01-13 16:33:24 -0700323
324# ----------------------------------------------------------------------------
325# vkcube-wayland
326
327if(UNIX AND NOT APPLE) # i.e. Linux
328 if(BUILD_WSI_WAYLAND_SUPPORT AND EXISTS ${WAYLAND_PROTOCOLS_PATH}/unstable/xdg-decoration/xdg-decoration-unstable-v1.xml)
329 set(CUBE_INCLUDE_DIRS ${WAYLAND_CLIENT_INCLUDE_DIR} ${CUBE_INCLUDE_DIRS})
330 link_libraries(${WAYLAND_CLIENT_LIBRARIES})
331 set(OPTIONAL_WAYLAND_DATA_FILES
332 ${CMAKE_CURRENT_BINARY_DIR}/xdg-shell-code.c
333 ${CMAKE_CURRENT_BINARY_DIR}/xdg-shell-client-header.h
334 ${CMAKE_CURRENT_BINARY_DIR}/xdg-decoration-code.c
335 ${CMAKE_CURRENT_BINARY_DIR}/xdg-decoration-client-header.h)
336 include_directories(${CMAKE_CURRENT_BINARY_DIR})
337 if(${CMAKE_SYSTEM_PROCESSOR} STREQUAL ${CMAKE_HOST_SYSTEM_PROCESSOR})
338 add_executable(vkcube-wayland
339 cube.c
340 ${PROJECT_SOURCE_DIR}/cube/cube.vert
341 ${PROJECT_SOURCE_DIR}/cube/cube.frag
342 cube.vert.inc
343 cube.frag.inc
344 ${OPTIONAL_WAYLAND_DATA_FILES})
345 target_link_libraries(vkcube-wayland Vulkan::Vulkan)
346 target_compile_definitions(vkcube-wayland PUBLIC VK_USE_PLATFORM_WAYLAND_KHR)
347 include(CheckLibraryExists)
348 CHECK_LIBRARY_EXISTS("rt" clock_gettime "" NEED_RT)
349 if (NEED_RT)
350 target_link_libraries(vkcube-wayland rt)
351 endif()
352 endif()
Tony-LunarG3a60ee92022-02-17 14:22:24 -0700353 install(TARGETS vkcube-wayland RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR})
Tony-LunarG2d9f59a2022-01-13 16:33:24 -0700354 endif()
355endif()