1*b7893ccfSSadaf Ebrahimi# ~~~ 2*b7893ccfSSadaf Ebrahimi# Copyright (c) 2014-2019 Valve Corporation 3*b7893ccfSSadaf Ebrahimi# Copyright (c) 2014-2019 LunarG, Inc. 4*b7893ccfSSadaf Ebrahimi# 5*b7893ccfSSadaf Ebrahimi# Licensed under the Apache License, Version 2.0 (the "License"); 6*b7893ccfSSadaf Ebrahimi# you may not use this file except in compliance with the License. 7*b7893ccfSSadaf Ebrahimi# You may obtain a copy of the License at 8*b7893ccfSSadaf Ebrahimi# 9*b7893ccfSSadaf Ebrahimi# http://www.apache.org/licenses/LICENSE-2.0 10*b7893ccfSSadaf Ebrahimi# 11*b7893ccfSSadaf Ebrahimi# Unless required by applicable law or agreed to in writing, software 12*b7893ccfSSadaf Ebrahimi# distributed under the License is distributed on an "AS IS" BASIS, 13*b7893ccfSSadaf Ebrahimi# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14*b7893ccfSSadaf Ebrahimi# See the License for the specific language governing permissions and 15*b7893ccfSSadaf Ebrahimi# limitations under the License. 16*b7893ccfSSadaf Ebrahimi# ~~~ 17*b7893ccfSSadaf Ebrahimi 18*b7893ccfSSadaf Ebrahimi# Needed to make structure definitions match with glslang libraries 19*b7893ccfSSadaf Ebrahimiadd_definitions(-DNV_EXTENSIONS -DAMD_EXTENSIONS) 20*b7893ccfSSadaf Ebrahimi 21*b7893ccfSSadaf Ebrahimiif(WIN32) 22*b7893ccfSSadaf Ebrahimi add_definitions(-DVK_USE_PLATFORM_WIN32_KHR -DWIN32_LEAN_AND_MEAN) 23*b7893ccfSSadaf Ebrahimi # Workaround for TR1 deprecation in Visual Studio 15.5 until Google Test is updated 24*b7893ccfSSadaf Ebrahimi add_definitions(-D_SILENCE_TR1_NAMESPACE_DEPRECATION_WARNING) 25*b7893ccfSSadaf Ebrahimielseif(ANDROID) 26*b7893ccfSSadaf Ebrahimi add_definitions(-DVK_USE_PLATFORM_ANDROID_KHR) 27*b7893ccfSSadaf Ebrahimielseif(APPLE) 28*b7893ccfSSadaf Ebrahimi add_definitions(-DVK_USE_PLATFORM_MACOS_MVK) 29*b7893ccfSSadaf Ebrahimielseif(UNIX AND NOT APPLE) # i.e. Linux 30*b7893ccfSSadaf Ebrahimi if(BUILD_WSI_XCB_SUPPORT) 31*b7893ccfSSadaf Ebrahimi add_definitions(-DVK_USE_PLATFORM_XCB_KHR) 32*b7893ccfSSadaf Ebrahimi endif() 33*b7893ccfSSadaf Ebrahimi 34*b7893ccfSSadaf Ebrahimi if(BUILD_WSI_XLIB_SUPPORT) 35*b7893ccfSSadaf Ebrahimi add_definitions(-DVK_USE_PLATFORM_XLIB_KHR) 36*b7893ccfSSadaf Ebrahimi endif() 37*b7893ccfSSadaf Ebrahimi 38*b7893ccfSSadaf Ebrahimi if(BUILD_WSI_WAYLAND_SUPPORT) 39*b7893ccfSSadaf Ebrahimi add_definitions(-DVK_USE_PLATFORM_WAYLAND_KHR) 40*b7893ccfSSadaf Ebrahimi endif() 41*b7893ccfSSadaf Ebrahimielse() 42*b7893ccfSSadaf Ebrahimi message(FATAL_ERROR "Unsupported Platform!") 43*b7893ccfSSadaf Ebrahimiendif() 44*b7893ccfSSadaf Ebrahimi 45*b7893ccfSSadaf Ebrahimiif(WIN32) 46*b7893ccfSSadaf Ebrahimi file(COPY vk_layer_validation_tests.vcxproj.user DESTINATION ${CMAKE_BINARY_DIR}/tests) 47*b7893ccfSSadaf Ebrahimiendif() 48*b7893ccfSSadaf Ebrahimi 49*b7893ccfSSadaf Ebrahimiif(WIN32) 50*b7893ccfSSadaf Ebrahimi set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -D_CRT_SECURE_NO_WARNINGS -D_USE_MATH_DEFINES") 51*b7893ccfSSadaf Ebrahimi 52*b7893ccfSSadaf Ebrahimi # If MSVC, disable some signed/unsigned mismatch warnings. 53*b7893ccfSSadaf Ebrahimi if(MSVC) 54*b7893ccfSSadaf Ebrahimi set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /wd4267") 55*b7893ccfSSadaf Ebrahimi endif() 56*b7893ccfSSadaf Ebrahimi 57*b7893ccfSSadaf Ebrahimielse() 58*b7893ccfSSadaf Ebrahimi set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11") 59*b7893ccfSSadaf Ebrahimiendif() 60*b7893ccfSSadaf Ebrahimi 61*b7893ccfSSadaf Ebrahimiset(LIBGLM_INCLUDE_DIR ${PROJECT_SOURCE_DIR}/libs) 62*b7893ccfSSadaf Ebrahimi 63*b7893ccfSSadaf Ebrahimiset(COMMON_CPP vklayertests_pipeline_shader.cpp vklayertests_buffer_image_memory_sampler.cpp vklayertests_others.cpp vklayertests_descriptor_renderpass_framebuffer.cpp 64*b7893ccfSSadaf Ebrahimi vklayertests_command.cpp vklayertests_imageless_framebuffer.cpp vkpositivelayertests.cpp vkrenderframework.cpp vktestbinding.cpp vktestframework.cpp test_environment.cpp) 65*b7893ccfSSadaf Ebrahimi 66*b7893ccfSSadaf Ebrahimiif(NOT WIN32) 67*b7893ccfSSadaf Ebrahimi # extra setup for out-of-tree builds 68*b7893ccfSSadaf Ebrahimi if(NOT (CMAKE_CURRENT_SOURCE_DIR STREQUAL CMAKE_CURRENT_BINARY_DIR)) 69*b7893ccfSSadaf Ebrahimi add_custom_target(VulkanVL_binary_dir_symlinks ALL COMMAND ln -sf ${CMAKE_CURRENT_SOURCE_DIR}/run_all_tests.sh VERBATIM) 70*b7893ccfSSadaf Ebrahimi endif() 71*b7893ccfSSadaf Ebrahimielse() 72*b7893ccfSSadaf Ebrahimi if(NOT (CMAKE_CURRENT_SOURCE_DIR STREQUAL CMAKE_CURRENT_BINARY_DIR)) 73*b7893ccfSSadaf Ebrahimi file(TO_NATIVE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/_run_all_tests.ps1 RUN_ALL) 74*b7893ccfSSadaf Ebrahimi add_custom_target(VulkanVL_binary_dir_symlinks ALL 75*b7893ccfSSadaf Ebrahimi COMMAND ${CMAKE_COMMAND} -E copy_if_different ${RUN_ALL} run_all_tests.ps1 76*b7893ccfSSadaf Ebrahimi VERBATIM) 77*b7893ccfSSadaf Ebrahimi set_target_properties(VulkanVL_binary_dir_symlinks PROPERTIES FOLDER ${LAYERS_HELPER_FOLDER}) 78*b7893ccfSSadaf Ebrahimi endif() 79*b7893ccfSSadaf Ebrahimiendif() 80*b7893ccfSSadaf Ebrahimi 81*b7893ccfSSadaf Ebrahimi# ~~~ 82*b7893ccfSSadaf Ebrahimi# The vulkan loader search is: 83*b7893ccfSSadaf Ebrahimi# Existing vulkan target already present in the build 84*b7893ccfSSadaf Ebrahimi# User-supplied setting of CMAKE_PREFIX_PATH 85*b7893ccfSSadaf Ebrahimi# VULKAN_LOADER_INSTALL_DIR defined via cmake option 86*b7893ccfSSadaf Ebrahimi# VULKAN_LOADER_INSTALL_DIR defined via environment variable 87*b7893ccfSSadaf Ebrahimi# Default findVulkan operation if the VULKAN_SDK environment variable is defined 88*b7893ccfSSadaf Ebrahimi# ~~~ 89*b7893ccfSSadaf Ebrahimiset(VULKAN_LOADER_INSTALL_DIR "LOADER-NOTFOUND" CACHE PATH "Absolute path to a Vulkan-Loader install directory") 90*b7893ccfSSadaf Ebrahimi 91*b7893ccfSSadaf Ebrahimiif(NOT TARGET vulkan) 92*b7893ccfSSadaf Ebrahimi if(VULKAN_LOADER_INSTALL_DIR) 93*b7893ccfSSadaf Ebrahimi message(STATUS "VULKAN_LOADER_INSTALL_DIR specified, using find_package to locate Vulkan") 94*b7893ccfSSadaf Ebrahimi elseif(ENV{VULKAN_LOADER_INSTALL_DIR}) 95*b7893ccfSSadaf Ebrahimi message(STATUS "VULKAN_LOADER_INSTALL_DIR environment variable specified, using find_package to locate Vulkan") 96*b7893ccfSSadaf Ebrahimi else() 97*b7893ccfSSadaf Ebrahimi set(LOCAL_LOADER TRUE) 98*b7893ccfSSadaf Ebrahimi if(CMAKE_CL_64) 99*b7893ccfSSadaf Ebrahimi set(VULKAN_LOADER_INSTALL_DIR "${CMAKE_CURRENT_SOURCE_DIR}/../external/x64") 100*b7893ccfSSadaf Ebrahimi else() 101*b7893ccfSSadaf Ebrahimi set(VULKAN_LOADER_INSTALL_DIR "${CMAKE_CURRENT_SOURCE_DIR}/../external/x86") 102*b7893ccfSSadaf Ebrahimi endif() 103*b7893ccfSSadaf Ebrahimi endif() 104*b7893ccfSSadaf Ebrahimi set( 105*b7893ccfSSadaf Ebrahimi CMAKE_PREFIX_PATH 106*b7893ccfSSadaf Ebrahimi ${CMAKE_PREFIX_PATH};${VULKAN_LOADER_INSTALL_DIR};${VULKAN_HEADERS_INSTALL_DIR};$ENV{VULKAN_LOADER_INSTALL_DIR};$ENV{VULKAN_HEADERS_INSTALL_DIR} 107*b7893ccfSSadaf Ebrahimi ) 108*b7893ccfSSadaf Ebrahimi find_package(Vulkan) 109*b7893ccfSSadaf Ebrahimiendif() 110*b7893ccfSSadaf Ebrahimi 111*b7893ccfSSadaf Ebrahimiset_source_files_properties(${PROJECT_BINARY_DIR}/vk_safe_struct.cpp PROPERTIES GENERATED TRUE) 112*b7893ccfSSadaf Ebrahimiadd_executable(vk_layer_validation_tests 113*b7893ccfSSadaf Ebrahimi layer_validation_tests.cpp 114*b7893ccfSSadaf Ebrahimi ../layers/vk_format_utils.cpp 115*b7893ccfSSadaf Ebrahimi ../layers/convert_to_renderpass2.cpp 116*b7893ccfSSadaf Ebrahimi ../layers/generated/vk_safe_struct.cpp 117*b7893ccfSSadaf Ebrahimi ${COMMON_CPP}) 118*b7893ccfSSadaf Ebrahimiadd_test(NAME vk_layer_validation_tests COMMAND vk_layer_validation_tests) 119*b7893ccfSSadaf Ebrahimiadd_dependencies(vk_layer_validation_tests Vulkan::Vulkan VkLayer_khronos_validation VkLayer_khronos_validation-json) 120*b7893ccfSSadaf Ebrahimiif(NOT GTEST_IS_STATIC_LIB) 121*b7893ccfSSadaf Ebrahimi set_target_properties(vk_layer_validation_tests PROPERTIES COMPILE_DEFINITIONS "GTEST_LINKED_AS_SHARED_LIBRARY=1") 122*b7893ccfSSadaf Ebrahimiendif() 123*b7893ccfSSadaf Ebrahimi# Note that there is no need to add GTEST directories here due to googletest exporting them via the gtest target. 124*b7893ccfSSadaf Ebrahimitarget_include_directories(vk_layer_validation_tests 125*b7893ccfSSadaf Ebrahimi PUBLIC ${CMAKE_CURRENT_SOURCE_DIR} 126*b7893ccfSSadaf Ebrahimi ${PROJECT_SOURCE_DIR}/layers 127*b7893ccfSSadaf Ebrahimi ${PROJECT_SOURCE_DIR}/layers/generated 128*b7893ccfSSadaf Ebrahimi ${GLSLANG_SPIRV_INCLUDE_DIR} 129*b7893ccfSSadaf Ebrahimi ${SPIRV_TOOLS_INCLUDE_DIR} 130*b7893ccfSSadaf Ebrahimi ${CMAKE_CURRENT_BINARY_DIR} 131*b7893ccfSSadaf Ebrahimi ${CMAKE_BINARY_DIR} 132*b7893ccfSSadaf Ebrahimi ${PROJECT_BINARY_DIR} 133*b7893ccfSSadaf Ebrahimi ${PROJECT_BINARY_DIR}/layers) 134*b7893ccfSSadaf Ebrahimiadd_dependencies(vk_layer_validation_tests 135*b7893ccfSSadaf Ebrahimi VkLayer_utils) 136*b7893ccfSSadaf Ebrahimi 137*b7893ccfSSadaf Ebrahimi# Specify target_link_libraries 138*b7893ccfSSadaf Ebrahimiif(WIN32) 139*b7893ccfSSadaf Ebrahimi target_link_libraries(vk_layer_validation_tests 140*b7893ccfSSadaf Ebrahimi PRIVATE Vulkan::Vulkan 141*b7893ccfSSadaf Ebrahimi gtest 142*b7893ccfSSadaf Ebrahimi gtest_main 143*b7893ccfSSadaf Ebrahimi ${GLSLANG_LIBRARIES}) 144*b7893ccfSSadaf Ebrahimielse() 145*b7893ccfSSadaf Ebrahimi target_compile_options(vk_layer_validation_tests PRIVATE "-Wno-sign-compare") 146*b7893ccfSSadaf Ebrahimi if(BUILD_WSI_XCB_SUPPORT OR BUILD_WSI_XLIB_SUPPORT) 147*b7893ccfSSadaf Ebrahimi target_link_libraries(vk_layer_validation_tests 148*b7893ccfSSadaf Ebrahimi PRIVATE Vulkan::Vulkan 149*b7893ccfSSadaf Ebrahimi ${XCB_LIBRARIES} 150*b7893ccfSSadaf Ebrahimi ${X11_LIBRARIES} 151*b7893ccfSSadaf Ebrahimi gtest 152*b7893ccfSSadaf Ebrahimi gtest_main 153*b7893ccfSSadaf Ebrahimi ${GLSLANG_LIBRARIES}) 154*b7893ccfSSadaf Ebrahimi else() 155*b7893ccfSSadaf Ebrahimi target_link_libraries(vk_layer_validation_tests 156*b7893ccfSSadaf Ebrahimi PRIVATE Vulkan::Vulkan 157*b7893ccfSSadaf Ebrahimi gtest 158*b7893ccfSSadaf Ebrahimi gtest_main 159*b7893ccfSSadaf Ebrahimi ${GLSLANG_LIBRARIES}) 160*b7893ccfSSadaf Ebrahimi endif() 161*b7893ccfSSadaf Ebrahimiendif() 162*b7893ccfSSadaf Ebrahimi 163*b7893ccfSSadaf Ebrahimiif(WIN32) 164*b7893ccfSSadaf Ebrahimi # For Windows, copy necessary gtest DLLs to the right spot for the vk_layer_tests... 165*b7893ccfSSadaf Ebrahimi if(NOT GTEST_IS_STATIC_LIB) 166*b7893ccfSSadaf Ebrahimi file(TO_NATIVE_PATH ${PROJECT_BINARY_DIR}/external/googletest/googletest/$<CONFIG>/*.dll SRC_GTEST_DLLS) 167*b7893ccfSSadaf Ebrahimi file(TO_NATIVE_PATH ${CMAKE_CURRENT_BINARY_DIR}/$<CONFIG> DST_GTEST_DLLS) 168*b7893ccfSSadaf Ebrahimi add_custom_command(TARGET vk_layer_validation_tests POST_BUILD 169*b7893ccfSSadaf Ebrahimi COMMAND xcopy /Y /I ${SRC_GTEST_DLLS} ${DST_GTEST_DLLS}) 170*b7893ccfSSadaf Ebrahimi endif() 171*b7893ccfSSadaf Ebrahimi # Copy the loader shared lib (if supplied) to the test application directory so the test app finds it. 172*b7893ccfSSadaf Ebrahimi if(VULKAN_LOADER_INSTALL_DIR AND NOT LOCAL_LOADER) 173*b7893ccfSSadaf Ebrahimi add_custom_command(TARGET vk_layer_validation_tests POST_BUILD 174*b7893ccfSSadaf Ebrahimi COMMAND ${CMAKE_COMMAND} -E copy ${VULKAN_LOADER_INSTALL_DIR}/bin/vulkan-1.dll 175*b7893ccfSSadaf Ebrahimi $<TARGET_FILE_DIR:vk_layer_validation_tests>) 176*b7893ccfSSadaf Ebrahimi endif() 177*b7893ccfSSadaf Ebrahimiendif() 178*b7893ccfSSadaf Ebrahimi 179*b7893ccfSSadaf Ebrahimiif(INSTALL_TESTS) 180*b7893ccfSSadaf Ebrahimi install(TARGETS vk_layer_validation_tests DESTINATION ${CMAKE_INSTALL_BINDIR}) 181*b7893ccfSSadaf Ebrahimiendif() 182*b7893ccfSSadaf Ebrahimi 183*b7893ccfSSadaf Ebrahimiadd_subdirectory(layers) 184