Mike Weiblen | 08c8e54 | 2018-06-26 14:47:37 -0600 | [diff] [blame] | 1 | # ~~~ |
| 2 | # Copyright (c) 2014-2018 Valve Corporation |
| 3 | # Copyright (c) 2014-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 Weiblen | e31a322 | 2018-08-16 14:09:08 -0600 | [diff] [blame] | 18 | if(WIN32) |
Tobin Ehlis | 5ef1efc | 2017-10-13 09:26:20 -0600 | [diff] [blame] | 19 | add_definitions(-DVK_USE_PLATFORM_WIN32_KHR -DVK_USE_PLATFORM_WIN32_KHX -DWIN32_LEAN_AND_MEAN) |
Mike Weiblen | e31a322 | 2018-08-16 14:09:08 -0600 | [diff] [blame] | 20 | elseif(ANDROID) |
Tobin Ehlis | 5ef1efc | 2017-10-13 09:26:20 -0600 | [diff] [blame] | 21 | add_definitions(-DVK_USE_PLATFORM_ANDROID_KHR -DVK_USE_PLATFORM_ANDROID_KHX) |
Mike Weiblen | e31a322 | 2018-08-16 14:09:08 -0600 | [diff] [blame] | 22 | elseif(APPLE) |
| 23 | add_definitions(-DVK_USE_PLATFORM_MACOS_MVK) |
| 24 | elseif(UNIX AND NOT APPLE) # i.e. Linux |
Mike Weiblen | 9ed609d | 2018-06-30 22:50:43 -0600 | [diff] [blame] | 25 | if(BUILD_WSI_XCB_SUPPORT) |
Brad Smith | d9f4641 | 2022-09-06 19:34:36 -0400 | [diff] [blame] | 26 | find_package(XCB REQUIRED) |
| 27 | include_directories(${XCB_INCLUDE_DIR}) |
Tobin Ehlis | 5ef1efc | 2017-10-13 09:26:20 -0600 | [diff] [blame] | 28 | add_definitions(-DVK_USE_PLATFORM_XCB_KHR -DVK_USE_PLATFORM_XCB_KHX) |
| 29 | endif() |
| 30 | |
Mike Weiblen | 9ed609d | 2018-06-30 22:50:43 -0600 | [diff] [blame] | 31 | if(BUILD_WSI_XLIB_SUPPORT) |
| 32 | add_definitions(-DVK_USE_PLATFORM_XLIB_KHR -DVK_USE_PLATFORM_XLIB_KHX -DVK_USE_PLATFORM_XLIB_XRANDR_EXT) |
Tobin Ehlis | 5ef1efc | 2017-10-13 09:26:20 -0600 | [diff] [blame] | 33 | endif() |
| 34 | |
Mike Weiblen | 9ed609d | 2018-06-30 22:50:43 -0600 | [diff] [blame] | 35 | if(BUILD_WSI_WAYLAND_SUPPORT) |
| 36 | add_definitions(-DVK_USE_PLATFORM_WAYLAND_KHR -DVK_USE_PLATFORM_WAYLAND_KHX) |
Tobin Ehlis | 5ef1efc | 2017-10-13 09:26:20 -0600 | [diff] [blame] | 37 | endif() |
Tobin Ehlis | 5ef1efc | 2017-10-13 09:26:20 -0600 | [diff] [blame] | 38 | else() |
| 39 | message(FATAL_ERROR "Unsupported Platform!") |
| 40 | endif() |
| 41 | |
Karl Schultz | c3b64a7 | 2018-05-28 15:14:19 -0600 | [diff] [blame] | 42 | # Copy or link the JSON files to the binary directory for ease of use in the build tree. |
Tobin Ehlis | 5ef1efc | 2017-10-13 09:26:20 -0600 | [diff] [blame] | 43 | set(ICD_JSON_FILES VkICD_mock_icd) |
Mike Weiblen | 9ed609d | 2018-06-30 22:50:43 -0600 | [diff] [blame] | 44 | if(WIN32) |
Karl Schultz | c3b64a7 | 2018-05-28 15:14:19 -0600 | [diff] [blame] | 45 | # extra setup for out-of-tree builds |
Mike Weiblen | 9ed609d | 2018-06-30 22:50:43 -0600 | [diff] [blame] | 46 | if(NOT (CMAKE_CURRENT_SOURCE_DIR STREQUAL CMAKE_CURRENT_BINARY_DIR)) |
| 47 | if(CMAKE_GENERATOR MATCHES "^Visual Studio.*") |
| 48 | foreach(config_file ${ICD_JSON_FILES}) |
| 49 | file(TO_NATIVE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/windows/${config_file}.json src_json) |
Mike Weiblen | e31a322 | 2018-08-16 14:09:08 -0600 | [diff] [blame] | 50 | file(TO_NATIVE_PATH ${CMAKE_CURRENT_BINARY_DIR}/$<CONFIG>/${config_file}.json dst_json) |
Mike Weiblen | 9ed609d | 2018-06-30 22:50:43 -0600 | [diff] [blame] | 51 | add_custom_target(${config_file}-json ALL COMMAND copy ${src_json} ${dst_json} VERBATIM) |
Mike Weiblen | e31a322 | 2018-08-16 14:09:08 -0600 | [diff] [blame] | 52 | set_target_properties(${config_file}-json PROPERTIES FOLDER ${TOOLS_HELPER_FOLDER}) |
Tobin Ehlis | 5ef1efc | 2017-10-13 09:26:20 -0600 | [diff] [blame] | 53 | endforeach(config_file) |
| 54 | else() |
Mike Weiblen | 9ed609d | 2018-06-30 22:50:43 -0600 | [diff] [blame] | 55 | foreach(config_file ${ICD_JSON_FILES}) |
| 56 | file(TO_NATIVE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/windows/${config_file}.json src_json) |
| 57 | file(TO_NATIVE_PATH ${CMAKE_CURRENT_BINARY_DIR}/${config_file}.json dst_json) |
| 58 | add_custom_target(${config_file}-json ALL COMMAND copy ${src_json} ${dst_json} VERBATIM) |
Tobin Ehlis | 5ef1efc | 2017-10-13 09:26:20 -0600 | [diff] [blame] | 59 | endforeach(config_file) |
| 60 | endif() |
| 61 | endif() |
Mike Schuchardt | ed2a035 | 2018-03-26 13:14:25 -0600 | [diff] [blame] | 62 | elseif(APPLE) |
| 63 | # extra setup for out-of-tree builds |
Mike Weiblen | 9ed609d | 2018-06-30 22:50:43 -0600 | [diff] [blame] | 64 | if(NOT (CMAKE_CURRENT_SOURCE_DIR STREQUAL CMAKE_CURRENT_BINARY_DIR)) |
| 65 | if(CMAKE_GENERATOR MATCHES "^Xcode.*") |
| 66 | add_custom_target(mk_icd_config_dir ALL |
| 67 | COMMAND ${CMAKE_COMMAND} -E make_directory ${CMAKE_CURRENT_BINARY_DIR}/$<CONFIG>) |
| 68 | foreach(config_file ${ICD_JSON_FILES}) |
Mike Schuchardt | 249440a | 2018-03-29 10:12:04 -0600 | [diff] [blame] | 69 | add_custom_target(${config_file}-json ALL |
Mike Weiblen | 9ed609d | 2018-06-30 22:50:43 -0600 | [diff] [blame] | 70 | DEPENDS mk_icd_config_dir |
Mike Weiblen | e31a322 | 2018-08-16 14:09:08 -0600 | [diff] [blame] | 71 | COMMAND ${CMAKE_COMMAND} -E create_symlink ${CMAKE_CURRENT_SOURCE_DIR}/macos/${config_file}.json |
| 72 | $<CONFIG> ${CMAKE_CURRENT_BINARY_DIR}/$<CONFIG>/${config_file}.json |
Mike Weiblen | 9ed609d | 2018-06-30 22:50:43 -0600 | [diff] [blame] | 73 | VERBATIM) |
Mike Schuchardt | 249440a | 2018-03-29 10:12:04 -0600 | [diff] [blame] | 74 | endforeach(config_file) |
| 75 | else() |
Mike Weiblen | 9ed609d | 2018-06-30 22:50:43 -0600 | [diff] [blame] | 76 | foreach(config_file ${ICD_JSON_FILES}) |
Mike Schuchardt | 249440a | 2018-03-29 10:12:04 -0600 | [diff] [blame] | 77 | add_custom_target(${config_file}-json ALL |
Mike Weiblen | e31a322 | 2018-08-16 14:09:08 -0600 | [diff] [blame] | 78 | COMMAND ${CMAKE_COMMAND} -E create_symlink ${CMAKE_CURRENT_SOURCE_DIR}/macos/${config_file}.json |
| 79 | ${config_file}.json |
Mike Weiblen | 9ed609d | 2018-06-30 22:50:43 -0600 | [diff] [blame] | 80 | VERBATIM) |
Mike Schuchardt | 249440a | 2018-03-29 10:12:04 -0600 | [diff] [blame] | 81 | endforeach(config_file) |
| 82 | endif() |
Mike Schuchardt | ed2a035 | 2018-03-26 13:14:25 -0600 | [diff] [blame] | 83 | endif() |
Tobin Ehlis | 5ef1efc | 2017-10-13 09:26:20 -0600 | [diff] [blame] | 84 | else() |
| 85 | # extra setup for out-of-tree builds |
Mike Weiblen | 9ed609d | 2018-06-30 22:50:43 -0600 | [diff] [blame] | 86 | if(NOT (CMAKE_CURRENT_SOURCE_DIR STREQUAL CMAKE_CURRENT_BINARY_DIR)) |
| 87 | foreach(config_file ${ICD_JSON_FILES}) |
Mike Weiblen | e31a322 | 2018-08-16 14:09:08 -0600 | [diff] [blame] | 88 | add_custom_target(${config_file}-json ALL |
| 89 | COMMAND ${CMAKE_COMMAND} -E create_symlink ${CMAKE_CURRENT_SOURCE_DIR}/linux/${config_file}.json |
| 90 | ${config_file}.json |
| 91 | VERBATIM) |
Tobin Ehlis | 5ef1efc | 2017-10-13 09:26:20 -0600 | [diff] [blame] | 92 | endforeach(config_file) |
| 93 | endif() |
| 94 | endif() |
Mark Lobodzinski | 9725953 | 2018-05-11 21:15:07 -0600 | [diff] [blame] | 95 | |
Tobin Ehlis | 5ef1efc | 2017-10-13 09:26:20 -0600 | [diff] [blame] | 96 | # For ICD with a direct dependency on a project with the same name, use it. |
Mike Weiblen | 9ed609d | 2018-06-30 22:50:43 -0600 | [diff] [blame] | 97 | if(NOT (CMAKE_CURRENT_SOURCE_DIR STREQUAL CMAKE_CURRENT_BINARY_DIR)) |
| 98 | foreach(config_file ${ICD_JSON_FILES}) |
Mark Lobodzinski | 7e46a5a | 2017-12-05 16:41:25 -0700 | [diff] [blame] | 99 | add_dependencies(${config_file}-json ${config_file}) |
| 100 | endforeach(config_file) |
| 101 | endif() |
Mike Weiblen | 9ed609d | 2018-06-30 22:50:43 -0600 | [diff] [blame] | 102 | add_custom_target(generate_icd_files DEPENDS mock_icd.h mock_icd.cpp) |
Mike Weiblen | e31a322 | 2018-08-16 14:09:08 -0600 | [diff] [blame] | 103 | set_target_properties(generate_icd_files PROPERTIES FOLDER ${TOOLS_HELPER_FOLDER}) |
Tobin Ehlis | 5ef1efc | 2017-10-13 09:26:20 -0600 | [diff] [blame] | 104 | |
Mike Weiblen | 9ed609d | 2018-06-30 22:50:43 -0600 | [diff] [blame] | 105 | if(WIN32) |
Tobin Ehlis | 5ef1efc | 2017-10-13 09:26:20 -0600 | [diff] [blame] | 106 | macro(add_vk_icd target) |
Mike Weiblen | 9ed609d | 2018-06-30 22:50:43 -0600 | [diff] [blame] | 107 | file(TO_NATIVE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/VkICD_${target}.def DEF_FILE) |
| 108 | add_custom_target(copy-${target}-def-file ALL |
| 109 | COMMAND ${CMAKE_COMMAND} -E copy_if_different ${DEF_FILE} VkICD_${target}.def |
| 110 | VERBATIM) |
Mike Weiblen | e31a322 | 2018-08-16 14:09:08 -0600 | [diff] [blame] | 111 | set_target_properties(copy-${target}-def-file PROPERTIES FOLDER ${TOOLS_HELPER_FOLDER}) |
Mike Weiblen | 9ed609d | 2018-06-30 22:50:43 -0600 | [diff] [blame] | 112 | add_library(VkICD_${target} SHARED ${ARGN} VkICD_${target}.def) |
Mike Weiblen | 9ed609d | 2018-06-30 22:50:43 -0600 | [diff] [blame] | 113 | if(INSTALL_ICD) |
| 114 | install(TARGETS VkICD_${target} DESTINATION ${CMAKE_INSTALL_LIBDIR}) |
| 115 | endif() |
Tobin Ehlis | 5ef1efc | 2017-10-13 09:26:20 -0600 | [diff] [blame] | 116 | endmacro() |
Karl Schultz | 9ceac06 | 2017-12-12 10:33:01 -0500 | [diff] [blame] | 117 | elseif(APPLE) |
| 118 | macro(add_vk_icd target) |
Mike Weiblen | 9ed609d | 2018-06-30 22:50:43 -0600 | [diff] [blame] | 119 | add_library(VkICD_${target} SHARED ${ARGN}) |
Mike Weiblen | 9ed609d | 2018-06-30 22:50:43 -0600 | [diff] [blame] | 120 | set_target_properties(VkICD_${target} PROPERTIES LINK_FLAGS "-Wl") |
| 121 | if(INSTALL_ICD) |
| 122 | install(TARGETS VkICD_${target} DESTINATION ${CMAKE_CURRENT_BINARY_DIR}) |
| 123 | endif() |
Karl Schultz | 9ceac06 | 2017-12-12 10:33:01 -0500 | [diff] [blame] | 124 | endmacro() |
Tobin Ehlis | 5ef1efc | 2017-10-13 09:26:20 -0600 | [diff] [blame] | 125 | else() |
| 126 | macro(add_vk_icd target) |
Mike Weiblen | 9ed609d | 2018-06-30 22:50:43 -0600 | [diff] [blame] | 127 | add_library(VkICD_${target} SHARED ${ARGN}) |
Mike Weiblen | 9ed609d | 2018-06-30 22:50:43 -0600 | [diff] [blame] | 128 | set_target_properties(VkICD_${target} PROPERTIES LINK_FLAGS "-Wl,-export-dynamic,-Bsymbolic,--exclude-libs,ALL") |
Mike Weiblen | e31a322 | 2018-08-16 14:09:08 -0600 | [diff] [blame] | 129 | if((UNIX AND NOT APPLE) AND INSTALL_ICD) # i.e. Linux |
Mike Weiblen | 9ed609d | 2018-06-30 22:50:43 -0600 | [diff] [blame] | 130 | install(TARGETS VkICD_${target} DESTINATION ${CMAKE_INSTALL_LIBDIR}) |
| 131 | endif() |
Tobin Ehlis | 5ef1efc | 2017-10-13 09:26:20 -0600 | [diff] [blame] | 132 | endmacro() |
| 133 | endif() |
| 134 | |
Mike Weiblen | e31a322 | 2018-08-16 14:09:08 -0600 | [diff] [blame] | 135 | include_directories(${CMAKE_CURRENT_SOURCE_DIR} |
| 136 | ${VulkanHeaders_INCLUDE_DIR} |
Jan Engelhardt | f8ba417 | 2018-11-12 18:32:06 +0100 | [diff] [blame] | 137 | ${WAYLAND_CLIENT_INCLUDE_DIR} |
Mike Weiblen | e31a322 | 2018-08-16 14:09:08 -0600 | [diff] [blame] | 138 | ${CMAKE_CURRENT_BINARY_DIR} |
| 139 | ${PROJECT_BINARY_DIR} |
| 140 | ${CMAKE_BINARY_DIR}) |
Tobin Ehlis | 5ef1efc | 2017-10-13 09:26:20 -0600 | [diff] [blame] | 141 | |
Mike Weiblen | 9ed609d | 2018-06-30 22:50:43 -0600 | [diff] [blame] | 142 | if(WIN32) |
| 143 | set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -D_CRT_SECURE_NO_WARNINGS") |
| 144 | set(CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE} -D_CRT_SECURE_NO_WARNINGS") |
| 145 | set(CMAKE_CXX_FLAGS_RELWITHDEBINFO "${CMAKE_CXX_FLAGS_RELWITHDEBINFO} -D_CRT_SECURE_NO_WARNINGS") |
| 146 | set(CMAKE_C_FLAGS_RELWITHDEBINFO "${CMAKE_C_FLAGS_RELWITHDEBINFO} -D_CRT_SECURE_NO_WARNINGS") |
| 147 | set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -D_CRT_SECURE_NO_WARNINGS /bigobj") |
| 148 | set(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} -D_CRT_SECURE_NO_WARNINGS /bigobj") |
| 149 | # Turn off transitional "changed behavior" warning message for Visual Studio versions prior to 2015. The changed behavior is |
| 150 | # that constructor initializers are now fixed to clear the struct members. |
Tobin Ehlis | 5ef1efc | 2017-10-13 09:26:20 -0600 | [diff] [blame] | 151 | add_compile_options("$<$<AND:$<CXX_COMPILER_ID:MSVC>,$<VERSION_LESS:$<CXX_COMPILER_VERSION>,19>>:/wd4351>") |
| 152 | else() |
Mike Weiblen | 9ed609d | 2018-06-30 22:50:43 -0600 | [diff] [blame] | 153 | set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wpointer-arith -Wno-unused-function -Wno-sign-compare") |
| 154 | set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wpointer-arith -Wno-unused-function -Wno-sign-compare") |
Tobin Ehlis | 5ef1efc | 2017-10-13 09:26:20 -0600 | [diff] [blame] | 155 | endif() |
| 156 | |
Mike Schuchardt | 70a8747 | 2019-07-23 11:12:29 -0700 | [diff] [blame] | 157 | add_vk_icd(mock_icd generated/mock_icd.cpp generated/mock_icd.h) |
Tobin Ehlis | 5ef1efc | 2017-10-13 09:26:20 -0600 | [diff] [blame] | 158 | |
Mike Weiblen | 9ed609d | 2018-06-30 22:50:43 -0600 | [diff] [blame] | 159 | # JSON file(s) install targets. For Linux, need to remove the "./" from the library path before installing to system directories. |
Mike Weiblen | e31a322 | 2018-08-16 14:09:08 -0600 | [diff] [blame] | 160 | if((UNIX AND NOT APPLE) AND INSTALL_ICD) # i.e. Linux |
Mike Weiblen | 9ed609d | 2018-06-30 22:50:43 -0600 | [diff] [blame] | 161 | foreach(config_file ${ICD_JSON_FILES}) |
Karl Schultz | c3b64a7 | 2018-05-28 15:14:19 -0600 | [diff] [blame] | 162 | add_custom_target(${config_file}-staging-json ALL |
Mike Weiblen | 9ed609d | 2018-06-30 22:50:43 -0600 | [diff] [blame] | 163 | COMMAND mkdir -p ${CMAKE_CURRENT_BINARY_DIR}/staging-json |
| 164 | COMMAND cp ${CMAKE_CURRENT_SOURCE_DIR}/linux/${config_file}.json ${CMAKE_CURRENT_BINARY_DIR}/staging-json |
| 165 | COMMAND sed -i -e "/\"library_path\":/s$./libVkICD$libVkICD$" |
| 166 | ${CMAKE_CURRENT_BINARY_DIR}/staging-json/${config_file}.json |
| 167 | VERBATIM |
| 168 | DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/linux/${config_file}.json) |
Mike Weiblen | e31a322 | 2018-08-16 14:09:08 -0600 | [diff] [blame] | 169 | install(FILES ${CMAKE_CURRENT_BINARY_DIR}/staging-json/${config_file}.json |
| 170 | DESTINATION ${CMAKE_INSTALL_DATAROOTDIR}/vulkan/icd.d) |
Karl Schultz | c3b64a7 | 2018-05-28 15:14:19 -0600 | [diff] [blame] | 171 | endforeach(config_file) |
| 172 | endif() |
| 173 | |
| 174 | # Windows uses the JSON file as-is. |
| 175 | if(WIN32 AND INSTALL_ICD) |
Mike Weiblen | 9ed609d | 2018-06-30 22:50:43 -0600 | [diff] [blame] | 176 | foreach(config_file ${ICD_JSON_FILES}) |
Karl Schultz | c3b64a7 | 2018-05-28 15:14:19 -0600 | [diff] [blame] | 177 | install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/windows/${config_file}.json DESTINATION ${CMAKE_INSTALL_LIBDIR}) |
| 178 | endforeach(config_file) |
| 179 | endif() |