1# The name of our project is "VULKAN". CMakeLists files in this project can 2# refer to the root source directory of the project as ${VULKAN_SOURCE_DIR} and 3# to the root binary directory of the project as ${VULKAN_BINARY_DIR}. 4cmake_minimum_required(VERSION 2.8.11) 5project (VULKAN) 6# set (CMAKE_VERBOSE_MAKEFILE 1) 7 8# The API_NAME allows renaming builds to avoid conflicts with installed SDKs 9# The MAJOR number of the version we're building, used in naming 10# <api-name>-<major>.dll (and other files). 11set(API_NAME "Vulkan" CACHE STRING "API name to use when building") 12set(MAJOR "1") 13string(TOLOWER ${API_NAME} API_LOWERCASE) 14 15set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_CURRENT_SOURCE_DIR}/cmake") 16find_package(PythonInterp 3 REQUIRED) 17 18option(USE_CCACHE "Use ccache" OFF) 19if (USE_CCACHE) 20 find_program(CCACHE_FOUND ccache) 21 if(CCACHE_FOUND) 22 set_property(GLOBAL PROPERTY RULE_LAUNCH_COMPILE ccache) 23 set_property(GLOBAL PROPERTY RULE_LAUNCH_LINK ccache) 24 endif(CCACHE_FOUND) 25endif() 26 27# Enable cmake folders 28set_property(GLOBAL PROPERTY USE_FOLDERS ON) 29set(LVL_TARGET_FOLDER lvl_cmake_targets) 30 31if(CMAKE_SYSTEM_NAME STREQUAL "Linux") 32 set(FALLBACK_CONFIG_DIRS "/etc/xdg" CACHE STRING 33 "Search path to use when XDG_CONFIG_DIRS is unset or empty or the current process is SUID/SGID. Default is freedesktop compliant.") 34 set(FALLBACK_DATA_DIRS "/usr/local/share:/usr/share" CACHE STRING 35 "Search path to use when XDG_DATA_DIRS is unset or empty or the current process is SUID/SGID. Default is freedesktop compliant.") 36 37 include(FindPkgConfig) 38 option(BUILD_WSI_XCB_SUPPORT "Build XCB WSI support" ON) 39 option(BUILD_WSI_XLIB_SUPPORT "Build Xlib WSI support" ON) 40 option(BUILD_WSI_WAYLAND_SUPPORT "Build Wayland WSI support" ON) 41 option(BUILD_WSI_MIR_SUPPORT "Build Mir WSI support" OFF) 42 set(DEMOS_WSI_SELECTION "XCB" CACHE STRING "Select WSI target for demos (XCB, XLIB, WAYLAND, MIR, DISPLAY)") 43 44 if (BUILD_WSI_XCB_SUPPORT) 45 find_package(XCB REQUIRED) 46 endif() 47 48 if (BUILD_WSI_XLIB_SUPPORT) 49 find_package(X11 REQUIRED) 50 endif() 51 52 if (BUILD_WSI_WAYLAND_SUPPORT) 53 find_package(Wayland REQUIRED) 54 include_directories(${WAYLAND_CLIENT_INCLUDE_DIR}) 55 endif() 56 57 if (BUILD_WSI_MIR_SUPPORT) 58 find_package(Mir REQUIRED) 59 endif() 60 61 # This option can be used to suppress the installation of artifacts from the 62 # Vulkan-LoaderAndValidationLayers repo while running "make install" for the 63 # VulkanTools and VulkanSamples repos. This can be used to prevent the 64 # overwriting of LVL artifacts when installing these downstream repos. 65 option(INSTALL_LVL_FILES "Install content from LoaderAndValidationLayers repo" ON) 66endif() 67 68set(SCRIPTS_DIR "${CMAKE_CURRENT_SOURCE_DIR}/scripts") 69 70# Header file for CMake settings 71include_directories("${PROJECT_SOURCE_DIR}/include") 72 73if (CMAKE_COMPILER_IS_GNUCC OR CMAKE_C_COMPILER_ID MATCHES "Clang") 74 set(COMMON_COMPILE_FLAGS "-Wall -Wextra -Wno-unused-parameter -Wno-missing-field-initializers") 75 set(COMMON_COMPILE_FLAGS "${COMMON_COMPILE_FLAGS} -fno-strict-aliasing -fno-builtin-memcmp") 76 77 # For GCC version 7.1 or greater, we need to disable the implicit fallthrough warning since 78 # there's no consistent way to satisfy all compilers until they all accept the C++17 standard 79 if (CMAKE_COMPILER_IS_GNUCC AND NOT (CMAKE_CXX_COMPILER_VERSION LESS 7.1)) 80 set(COMMON_COMPILE_FLAGS "${COMMON_COMPILE_FLAGS} -Wimplicit-fallthrough=0") 81 endif() 82 83 set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -std=c99 ${COMMON_COMPILE_FLAGS}") 84 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${COMMON_COMPILE_FLAGS} -std=c++11 -fno-rtti") 85 if (UNIX) 86 set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fvisibility=hidden") 87 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fvisibility=hidden") 88 endif() 89endif() 90 91if(WIN32) 92 # Treat warnings as errors 93 add_compile_options("$<$<CXX_COMPILER_ID:MSVC>:/WX>") 94 # Disable RTTI 95 add_compile_options("$<$<CXX_COMPILER_ID:MSVC>:/GR->") 96 # Warn about nested declarations 97 add_compile_options("$<$<CXX_COMPILER_ID:MSVC>:/w34456>") 98 # Warn about potentially uninitialized variables 99 add_compile_options("$<$<CXX_COMPILER_ID:MSVC>:/w34701>") 100 add_compile_options("$<$<CXX_COMPILER_ID:MSVC>:/w34703>") 101 # Warn about different indirection types. 102 add_compile_options("$<$<CXX_COMPILER_ID:MSVC>:/w34057>") 103 # Warn about signed/unsigned mismatch. 104 add_compile_options("$<$<CXX_COMPILER_ID:MSVC>:/w34245>") 105endif() 106 107if(NOT WIN32) 108 set (BUILDTGT_DIR build) 109 set (BINDATA_DIR Bin) 110 set (LIBSOURCE_DIR Lib) 111else() 112 # is WIN32 113 option(DISABLE_BUILD_PATH_DECORATION "Disable the decoration of the gslang and SPIRV-Tools build path with MSVC build type info" OFF) 114 option(DISABLE_BUILDTGT_DIR_DECORATION "Disable the decoration of the gslang and SPIRV-Tools build path with target info" OFF) 115 option(ENABLE_WIN10_ONECORE "Link the loader with OneCore umbrella libraries" OFF) 116 117 # For Windows, since 32-bit and 64-bit items can co-exist, we build each in its own build directory. 118 # 32-bit target data goes in build32, and 64-bit target data goes into build. So, include/link the 119 # appropriate data at build time. 120 if (DISABLE_BUILDTGT_DIR_DECORATION) 121 set (BUILDTGT_DIR "") 122 set (BINDATA_DIR "") 123 set (LIBSOURCE_DIR "") 124 elseif (CMAKE_CL_64) 125 set (BUILDTGT_DIR build) 126 set (BINDATA_DIR Bin) 127 set (LIBSOURCE_DIR Lib) 128 else() 129 set (BUILDTGT_DIR build32) 130 set (BINDATA_DIR Bin32) 131 set (LIBSOURCE_DIR Lib32) 132 endif() 133endif() 134 135option(BUILD_LOADER "Build loader" ON) 136option(BUILD_TESTS "Build tests" ON) 137option(BUILD_LAYERS "Build layers" ON) 138option(BUILD_DEMOS "Build demos" ON) 139option(BUILD_VKJSON "Build vkjson" ON) 140option(BUILD_ICD "Build icd" ON) 141option(CUSTOM_GLSLANG_BIN_ROOT "Use the user defined GLSLANG_BINARY_ROOT" OFF) 142option(CUSTOM_SPIRV_TOOLS_BIN_ROOT "Use the user defined SPIRV_TOOLS*BINARY_ROOT paths" OFF) 143 144#Choose natural default paths for glslang and SPIRV-Tools binaries to support custom definition by the user on the CMake command line or in the GUI 145set(GLSLANG_BINARY_ROOT "${CMAKE_BINARY_DIR}/../glslang" CACHE STRING "User defined path to the glslang binaries for this project") 146set(SPIRV_TOOLS_BINARY_ROOT "${CMAKE_BINARY_DIR}/../SPIRV-Tools" CACHE STRING "User defined path to the SPIRV-Tools binaries for this project") 147set(SPIRV_TOOLS_OPT_BINARY_ROOT "${CMAKE_BINARY_DIR}/../SPIRV-Tools/opt" CACHE STRING "User defined path to the SPIRV-Tools-opt binaries for this project") 148 149# Define a variable for a default root location to the gslang, SPIRV-Tools and other external sources and cache it to allow the user to customize it as needed 150set(EXTERNAL_SOURCE_ROOT "${CMAKE_CURRENT_SOURCE_DIR}/external" CACHE STRING "Root path to external sources such as glslang and SPIRV-Tools") 151 152 153if (WIN32) 154 if(CUSTOM_GLSLANG_BIN_ROOT) 155 set(GSLANG_FINAL_BINARY_PATH ${GLSLANG_BINARY_ROOT}/${BUILDTGT_DIR}) 156 else() 157 set(GSLANG_FINAL_BINARY_PATH "${EXTERNAL_SOURCE_ROOT}/glslang/${BUILDTGT_DIR}") 158 endif() 159 160 if(DISABLE_BUILD_PATH_DECORATION) 161 set (DEBUG_DECORATION "") 162 set (RELEASE_DECORATION "") 163 else() 164 set (DEBUG_DECORATION "Debug") 165 set (RELEASE_DECORATION "Release") 166 endif() 167 168 # Take some steps to set up a variable pointing to the final glslang binaries given the variety of input options 169 set (GLSLANG_SEARCH_PATH "${GSLANG_FINAL_BINARY_PATH}/glslang/${RELEASE_DECORATION}" 170 "${GSLANG_FINAL_BINARY_PATH}/glslang/OSDependent/Windows/${RELEASE_DECORATION}" 171 "${GSLANG_FINAL_BINARY_PATH}/hlsl/${RELEASE_DECORATION}" 172 "${GSLANG_FINAL_BINARY_PATH}/OGLCompilersDLL/${RELEASE_DECORATION}" 173 "${GSLANG_FINAL_BINARY_PATH}/SPIRV/${RELEASE_DECORATION}" ) 174 175 set (GLSLANG_DEBUG_SEARCH_PATH "${GSLANG_FINAL_BINARY_PATH}/glslang/${DEBUG_DECORATION}" 176 "${GSLANG_FINAL_BINARY_PATH}/glslang/OSDependent/Windows/${DEBUG_DECORATION}" 177 "${GSLANG_FINAL_BINARY_PATH}/hlsl/${DEBUG_DECORATION}" 178 "${GSLANG_FINAL_BINARY_PATH}/OGLCompilersDLL/${DEBUG_DECORATION}" 179 "${GSLANG_FINAL_BINARY_PATH}/SPIRV/${DEBUG_DECORATION}") 180 181 if(CUSTOM_SPIRV_TOOLS_BIN_ROOT) 182 set (SPIRV_TOOLS_SEARCH_PATH "${SPIRV_TOOLS_BINARY_ROOT}/${BUILDTGT_DIR}/source/${RELEASE_DECORATION}") 183 set (SPIRV_TOOLS_DEBUG_SEARCH_PATH "${SPIRV_TOOLS_BINARY_ROOT}/${BUILDTGT_DIR}/source/${DEBUG_DECORATION}") 184 set (SPIRV_TOOLS_OPT_SEARCH_PATH "${SPIRV_TOOLS_OPT_BINARY_ROOT}/${BUILDTGT_DIR}/source/opt/${RELEASE_DECORATION}") 185 set (SPIRV_TOOLS_OPT_DEBUG_SEARCH_PATH "${SPIRV_TOOLS_OPT_BINARY_ROOT}/${BUILDTGT_DIR}/source/opt/${DEBUG_DECORATION}") 186 else() 187 set (SPIRV_TOOLS_SEARCH_PATH "${EXTERNAL_SOURCE_ROOT}/glslang/${BUILDTGT_DIR}/External/spirv-tools/source/${RELEASE_DECORATION}") 188 set (SPIRV_TOOLS_DEBUG_SEARCH_PATH "${EXTERNAL_SOURCE_ROOT}/glslang/${BUILDTGT_DIR}/External/spirv-tools/source/${DEBUG_DECORATION}") 189 set (SPIRV_TOOLS_OPT_SEARCH_PATH "${EXTERNAL_SOURCE_ROOT}/glslang/${BUILDTGT_DIR}/External/spirv-tools/source/opt/${RELEASE_DECORATION}") 190 set (SPIRV_TOOLS_OPT_DEBUG_SEARCH_PATH "${EXTERNAL_SOURCE_ROOT}/glslang/${BUILDTGT_DIR}/External/spirv-tools/source/opt/${DEBUG_DECORATION}") 191 endif() 192else() 193 # not WIN32 194 if(CUSTOM_GLSLANG_BIN_ROOT) 195 set (GLSLANG_SEARCH_PATH "${GLSLANG_BINARY_ROOT}/install/lib" 196 "${GLSLANG_BINARY_ROOT}/glslang" 197 "${GLSLANG_BINARY_ROOT}/glslang/OSDependent/Unix" 198 "${GLSLANG_BINARY_ROOT}/OGLCompilersDLL" 199 "${GLSLANG_BINARY_ROOT}/SPIRV" 200 "${GLSLANG_BINARY_ROOT}/hlsl" 201 "${GLSLANG_BINARY_ROOT}/StandAlone") 202 else() 203 set (GLSLANG_SEARCH_PATH "${EXTERNAL_SOURCE_ROOT}/glslang/${BUILDTGT_DIR}/install/lib" "${CMAKE_SOURCE_DIR}/../x86_64/lib/glslang" ) 204 endif() 205 206 if(CUSTOM_SPIRV_TOOLS_BIN_ROOT) 207 set (SPIRV_TOOLS_SEARCH_PATH "${SPIRV_TOOLS_BINARY_ROOT}/source" ) 208 set (SPIRV_TOOLS_OPT_SEARCH_PATH "${SPIRV_TOOLS_OPT_BINARY_ROOT}/source/opt" ) 209 else() 210 set (SPIRV_TOOLS_SEARCH_PATH "${EXTERNAL_SOURCE_ROOT}/glslang/${BUILDTGT_DIR}/External/spirv-tools/source" "${CMAKE_SOURCE_DIR}/../x86_64/lib/spirv-tools" ) 211 set (SPIRV_TOOLS_OPT_SEARCH_PATH "${EXTERNAL_SOURCE_ROOT}/glslang/${BUILDTGT_DIR}/External/spirv-tools/source/opt" "${CMAKE_SOURCE_DIR}/../x86_64/lib/spirv-tools" ) 212 endif() 213endif() 214 215find_program(GLSLANG_VALIDATOR NAMES glslangValidator 216 HINTS "${EXTERNAL_SOURCE_ROOT}/glslang/${BUILDTGT_DIR}/install/bin" 217 "${GLSLANG_BINARY_ROOT}/StandAlone" 218 "${PROJECT_SOURCE_DIR}/external/${BINDATA_DIR}") 219 220find_path(GLSLANG_SPIRV_INCLUDE_DIR SPIRV/spirv.hpp HINTS "${EXTERNAL_SOURCE_ROOT}/glslang" 221 "${CMAKE_SOURCE_DIR}/../glslang" 222 DOC "Path to SPIRV/spirv.hpp") 223 224find_path(SPIRV_TOOLS_INCLUDE_DIR spirv-tools/libspirv.h HINTS "${EXTERNAL_SOURCE_ROOT}/glslang/External/spirv-tools/include" 225 "${CMAKE_SOURCE_DIR}/../glslang/External/spirv-tools/include" 226 DOC "Path to spirv-tools/libspirv.h") 227 228find_library(GLSLANG_LIB NAMES glslang 229 HINTS ${GLSLANG_SEARCH_PATH} ) 230 231find_library(OGLCompiler_LIB NAMES OGLCompiler 232 HINTS ${GLSLANG_SEARCH_PATH} ) 233 234find_library(OSDependent_LIB NAMES OSDependent 235 HINTS ${GLSLANG_SEARCH_PATH} ) 236 237find_library(HLSL_LIB NAMES HLSL 238 HINTS ${GLSLANG_SEARCH_PATH} ) 239 240find_library(SPIRV_LIB NAMES SPIRV 241 HINTS ${GLSLANG_SEARCH_PATH} ) 242 243find_library(SPIRV_REMAPPER_LIB NAMES SPVRemapper 244 HINTS ${GLSLANG_SEARCH_PATH} ) 245 246find_library(SPIRV_TOOLS_LIB NAMES SPIRV-Tools 247 HINTS ${SPIRV_TOOLS_SEARCH_PATH} ) 248 249find_library(SPIRV_TOOLS_OPT_LIB NAMES SPIRV-Tools-opt 250 HINTS ${SPIRV_TOOLS_OPT_SEARCH_PATH} ) 251 252if (WIN32) 253 add_library(glslang STATIC IMPORTED) 254 add_library(OGLCompiler STATIC IMPORTED) 255 add_library(OSDependent STATIC IMPORTED) 256 add_library(HLSL STATIC IMPORTED) 257 add_library(SPIRV STATIC IMPORTED) 258 add_library(SPVRemapper STATIC IMPORTED) 259 add_library(Loader STATIC IMPORTED) 260 add_library(SPIRV-Tools-opt STATIC IMPORTED) 261 add_library(SPIRV-Tools STATIC IMPORTED) 262 263 find_library(GLSLANG_DLIB NAMES glslangd 264 HINTS ${GLSLANG_DEBUG_SEARCH_PATH} ) 265 find_library(OGLCompiler_DLIB NAMES OGLCompilerd 266 HINTS ${GLSLANG_DEBUG_SEARCH_PATH} ) 267 find_library(OSDependent_DLIB NAMES OSDependentd 268 HINTS ${GLSLANG_DEBUG_SEARCH_PATH} ) 269 find_library(HLSL_DLIB NAMES HLSLd 270 HINTS ${GLSLANG_DEBUG_SEARCH_PATH} ) 271 find_library(SPIRV_DLIB NAMES SPIRVd 272 HINTS ${GLSLANG_DEBUG_SEARCH_PATH} ) 273 find_library(SPIRV_REMAPPER_DLIB NAMES SPVRemapperd 274 HINTS ${GLSLANG_DEBUG_SEARCH_PATH} ) 275 find_library(SPIRV_TOOLS_DLIB NAMES SPIRV-Toolsd 276 HINTS ${SPIRV_TOOLS_DEBUG_SEARCH_PATH} ) 277 find_library(SPIRV_TOOLS_OPT_DLIB NAMES SPIRV-Tools-optd 278 HINTS ${SPIRV_TOOLS_OPT_DEBUG_SEARCH_PATH} ) 279 280 set_target_properties(glslang PROPERTIES 281 IMPORTED_LOCATION "${GLSLANG_LIB}" 282 IMPORTED_LOCATION_DEBUG "${GLSLANG_DLIB}") 283 set_target_properties(OGLCompiler PROPERTIES 284 IMPORTED_LOCATION "${OGLCompiler_LIB}" 285 IMPORTED_LOCATION_DEBUG "${OGLCompiler_DLIB}") 286 set_target_properties(OSDependent PROPERTIES 287 IMPORTED_LOCATION "${OSDependent_LIB}" 288 IMPORTED_LOCATION_DEBUG "${OSDependent_DLIB}") 289 set_target_properties(HLSL PROPERTIES 290 IMPORTED_LOCATION "${HLSL_LIB}" 291 IMPORTED_LOCATION_DEBUG "${HLSL_DLIB}") 292 set_target_properties(SPIRV PROPERTIES 293 IMPORTED_LOCATION "${SPIRV_LIB}" 294 IMPORTED_LOCATION_DEBUG "${SPIRV_DLIB}") 295 set_target_properties(SPVRemapper PROPERTIES 296 IMPORTED_LOCATION "${SPIRV_REMAPPER_LIB}" 297 IMPORTED_LOCATION_DEBUG "${SPIRV_REMAPPER_DLIB}") 298 set_target_properties(SPIRV-Tools PROPERTIES 299 IMPORTED_LOCATION "${SPIRV_TOOLS_LIB}" 300 IMPORTED_LOCATION_DEBUG "${SPIRV_TOOLS_DLIB}") 301 set_target_properties(SPIRV-Tools-opt PROPERTIES 302 IMPORTED_LOCATION "${SPIRV_TOOLS_OPT_LIB}" 303 IMPORTED_LOCATION_DEBUG "${SPIRV_TOOLS_OPT_DLIB}") 304 305 set (SPIRV_TOOLS_LIBRARIES SPIRV-Tools-opt SPIRV-Tools) 306 set (GLSLANG_LIBRARIES glslang OGLCompiler OSDependent HLSL SPIRV SPVRemapper ${SPIRV_TOOLS_LIBRARIES}) 307else () 308 # not WIN32 309 set (SPIRV_TOOLS_LIBRARIES ${SPIRV_TOOLS_OPT_LIB} ${SPIRV_TOOLS_LIB}) 310 set (GLSLANG_LIBRARIES ${GLSLANG_LIB} ${OGLCompiler_LIB} ${OSDependent_LIB} ${HLSL_LIB} ${SPIRV_LIB} ${SPIRV_REMAPPER_LIB} ${SPIRV_TOOLS_LIBRARIES}) 311endif() 312 313set (PYTHON_CMD ${PYTHON_EXECUTABLE}) 314 315# Define macro used for building vkxml generated files 316macro(run_vk_xml_generate dependency output) 317 add_custom_command(OUTPUT ${output} 318 COMMAND ${PYTHON_CMD} ${SCRIPTS_DIR}/lvl_genvk.py -registry ${SCRIPTS_DIR}/vk.xml ${output} 319 DEPENDS ${SCRIPTS_DIR}/vk.xml ${SCRIPTS_DIR}/generator.py ${SCRIPTS_DIR}/${dependency} ${SCRIPTS_DIR}/lvl_genvk.py ${SCRIPTS_DIR}/reg.py 320 ) 321endmacro() 322 323# Define macro used for generating header files containing commit IDs for external dependencies 324macro(run_external_revision_generate source_dir symbol_name output) 325 add_custom_command(OUTPUT ${output} 326 # NOTE: If you modify this call to use --rev_file instead of --git_dir (to read the commit ID from a file instead of 327 # parsing from a Git repository), you probably also want to add the revision file to the list of DEPENDS on the 328 # subsequent line (to ensure that the script is re-run when the revision file is modified). 329 COMMAND ${PYTHON_CMD} ${SCRIPTS_DIR}/external_revision_generator.py --git_dir ${source_dir} -s ${symbol_name} -o ${output} 330 DEPENDS ${SCRIPTS_DIR}/external_revision_generator.py ${source_dir}/.git/HEAD ${source_dir}/.git/index 331 ) 332endmacro() 333 334# Custom target for generated vulkan helper file dependencies 335add_custom_target(generate_helper_files DEPENDS 336 vk_enum_string_helper.h 337 vk_struct_size_helper.h 338 vk_struct_size_helper.c 339 vk_safe_struct.h 340 vk_safe_struct.cpp 341 vk_object_types.h 342 vk_layer_dispatch_table.h 343 vk_dispatch_table_helper.h 344 vk_extension_helper.h 345 vk_typemap_helper.h 346 spirv_tools_commit_id.h 347 ) 348set_target_properties(generate_helper_files PROPERTIES FOLDER ${LVL_TARGET_FOLDER}) 349 350# Rules to build generated helper files 351run_vk_xml_generate(loader_extension_generator.py vk_layer_dispatch_table.h) 352run_vk_xml_generate(dispatch_table_helper_generator.py vk_dispatch_table_helper.h) 353run_vk_xml_generate(helper_file_generator.py vk_safe_struct.h) 354run_vk_xml_generate(helper_file_generator.py vk_safe_struct.cpp) 355run_vk_xml_generate(helper_file_generator.py vk_struct_size_helper.h) 356run_vk_xml_generate(helper_file_generator.py vk_struct_size_helper.c) 357run_vk_xml_generate(helper_file_generator.py vk_enum_string_helper.h) 358run_vk_xml_generate(helper_file_generator.py vk_object_types.h) 359run_vk_xml_generate(helper_file_generator.py vk_extension_helper.h) 360run_vk_xml_generate(helper_file_generator.py vk_typemap_helper.h) 361run_external_revision_generate(${EXTERNAL_SOURCE_ROOT}/glslang/External/spirv-tools SPIRV_TOOLS_COMMIT_ID spirv_tools_commit_id.h) 362 363 364 365if(NOT WIN32) 366 include(GNUInstallDirs) 367 368 add_definitions(-DFALLBACK_CONFIG_DIRS="${FALLBACK_CONFIG_DIRS}") 369 add_definitions(-DFALLBACK_DATA_DIRS="${FALLBACK_DATA_DIRS}") 370 add_definitions(-DSYSCONFDIR="${CMAKE_INSTALL_FULL_SYSCONFDIR}") 371 372 # Make sure /etc is searched by the loader 373 if(NOT (CMAKE_INSTALL_FULL_SYSCONFDIR STREQUAL "/etc")) 374 add_definitions(-DEXTRASYSCONFDIR="/etc") 375 endif() 376endif() 377 378if(UNIX) 379 if(INSTALL_LVL_FILES) 380 install(DIRECTORY "${PROJECT_SOURCE_DIR}/include/vulkan" DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}) 381 install(FILES "${CMAKE_CURRENT_BINARY_DIR}/vk_layer_dispatch_table.h" DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}/vulkan") 382 endif() 383 384# uninstall target 385configure_file( 386 "${CMAKE_CURRENT_SOURCE_DIR}/cmake/cmake_uninstall.cmake.in" 387 "${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake" 388 IMMEDIATE @ONLY) 389 390add_custom_target(uninstall 391 COMMAND ${CMAKE_COMMAND} -P ${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake) 392endif() 393 394# Layer Utils Library 395# For Windows, we use a static lib because the Windows loader has a fairly restrictive loader search 396# path that can't be easily modified to point it to the same directory that contains the layers. 397set(VKLAYER_UTILS_VLF_SOURCES 398 layers/vk_layer_config.cpp 399 layers/vk_layer_extension_utils.cpp 400 layers/vk_layer_utils.cpp 401 layers/vk_format_utils.cpp 402 ) 403if (WIN32) 404 add_library(VkLayer_utils STATIC ${VKLAYER_UTILS_VLF_SOURCES}) 405 target_compile_definitions(VkLayer_utils PUBLIC _CRT_SECURE_NO_WARNINGS) 406else() 407 add_library(VkLayer_utils SHARED ${VKLAYER_UTILS_VLF_SOURCES}) 408 if(INSTALL_LVL_FILES) 409 install(TARGETS VkLayer_utils DESTINATION ${CMAKE_INSTALL_LIBDIR}) 410 endif() 411endif() 412add_dependencies(VkLayer_utils generate_helper_files) 413target_include_directories( 414 VkLayer_utils PUBLIC 415 ${CMAKE_CURRENT_SOURCE_DIR}/loader 416 ${CMAKE_CURRENT_SOURCE_DIR}/include/vulkan 417 ${CMAKE_CURRENT_BINARY_DIR} 418 ) 419 420add_definitions(-DAPI_NAME="${API_NAME}") 421 422# loader: Generic VULKAN ICD loader 423# tests: VULKAN tests 424if(BUILD_LOADER) 425 add_subdirectory(loader) 426endif() 427 428if(BUILD_TESTS) 429 add_subdirectory(tests) 430endif() 431 432if(BUILD_LAYERS) 433 add_subdirectory(layers) 434endif() 435 436if(BUILD_DEMOS) 437 add_subdirectory(demos) 438endif() 439 440if(BUILD_VKJSON) 441 add_subdirectory(libs/vkjson) 442endif() 443 444if(BUILD_ICD) 445 add_subdirectory(icd) 446endif() 447