diff options
-rw-r--r-- | BUILD.md | 2 | ||||
-rw-r--r-- | CMakeLists.txt | 8 | ||||
-rw-r--r-- | external/CMakeLists.txt | 39 | ||||
-rw-r--r-- | tests/CMakeLists.txt | 270 |
4 files changed, 162 insertions, 157 deletions
@@ -141,7 +141,7 @@ on/off options currently supported by this repository: | ------ | -------- | ------- | ----------- | | BUILD_LAYERS | All | `ON` | Controls whether or not the validation layers are built. | | BUILD_LAYER_SUPPORT_FILES | All | `OFF` | Controls whether or not layer support files are built if the layers are not built. | -| BUILD_TESTS | All | `ON` | Controls whether or not the validation layer tests are built. This option is only available when a copy of Google Test is available in the "external" directory. | +| BUILD_TESTS | All | `???` | Controls whether or not the validation layer tests are built. The default is `ON` when the Google Test repository is cloned into the `external` directory. Otherwise, the default is `OFF`. | | INSTALL_TESTS | All | `OFF` | Controls whether or not the validation layer tests are installed. This option is only available when a copy of Google Test is available | BUILD_WSI_XCB_SUPPORT | Linux | `ON` | Build the components with XCB support. | | BUILD_WSI_XLIB_SUPPORT | Linux | `ON` | Build the components with Xlib support. | diff --git a/CMakeLists.txt b/CMakeLists.txt index 3e1199b15..bd7ccf91e 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -118,7 +118,11 @@ if(WIN32) add_compile_options("$<$<CXX_COMPILER_ID:MSVC>:/w34245>") endif() -option(BUILD_TESTS "Build tests" ON) +if(IS_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/external/googletest) + option(BUILD_TESTS "Build tests" ON) +else() + option(BUILD_TESTS "Build tests" OFF) +endif() option(INSTALL_TESTS "Install tests" OFF) option(BUILD_LAYERS "Build layers" ON) option(BUILD_LAYER_SUPPORT_FILES "Generate layer files" OFF) # For generating files when not building layers @@ -255,8 +259,8 @@ endif() add_definitions(-DAPI_NAME="${API_NAME}") +add_subdirectory(external) if(BUILD_TESTS) - add_subdirectory(external) add_subdirectory(tests) endif() diff --git a/external/CMakeLists.txt b/external/CMakeLists.txt index d0fc32afa..91cfe7e0f 100644 --- a/external/CMakeLists.txt +++ b/external/CMakeLists.txt @@ -1,19 +1,26 @@ -# googletest is an external dependency for the tests in the ValidationLayers -# repo. Check for its presence before trying to build tests. +if(BUILD_TESTS) + # googletest is an external dependency for the tests in the ValidationLayers + # repo. Add googletest to the project if present and not already defined. -# Suppress all warnings from external projects. -set_property(DIRECTORY APPEND PROPERTY COMPILE_OPTIONS -w) + # Suppress all warnings from external projects. + set_property(DIRECTORY APPEND PROPERTY COMPILE_OPTIONS -w) -if(TARGET gtest_main) - message(STATUS "Google Test (googletest) already configured - use it") -elseif(IS_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/googletest) - SET(BUILD_GTEST ON CACHE BOOL "Builds the googletest subproject") - SET(BUILD_GMOCK OFF CACHE BOOL "Builds the googlemock subproject") - SET(gtest_force_shared_crt ON CACHE BOOL "Link gtest runtimes dynamically") - SET(BUILD_SHARED_LIBS ON CACHE BOOL "Build shared libraries") - # EXCLUDE_FROM_ALL keeps the install target from installing GTEST files. - add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/googletest EXCLUDE_FROM_ALL) -else() - message(STATUS - "Google Test was not found - tests based on that will not build") + if(TARGET gtest_main) + # It is possible that a project enclosing this one has defined the gtest target + message(STATUS "Vulkan-ValidationLayers/external: " + "Google Test (googletest) already configured - use it") + elseif(IS_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/googletest) + message(STATUS "Vulkan-ValidationLayers/external: " + "googletests found - configuring it for tests") + SET(BUILD_GTEST ON CACHE BOOL "Builds the googletest subproject") + SET(BUILD_GMOCK OFF CACHE BOOL "Builds the googlemock subproject") + SET(gtest_force_shared_crt ON CACHE BOOL "Link gtest runtimes dynamically") + SET(BUILD_SHARED_LIBS ON CACHE BOOL "Build shared libraries") + # EXCLUDE_FROM_ALL keeps the install target from installing GTEST files. + add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/googletest EXCLUDE_FROM_ALL) + else() + message(SEND_ERROR + "Vulkan-ValidationLayers/external: Google Test was not found. " + "Provide Google Test in external/googletest or set BUILD_TESTS=OFF") + endif() endif() diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt index 72043258c..24977f5ca 100644 --- a/tests/CMakeLists.txt +++ b/tests/CMakeLists.txt @@ -1,158 +1,152 @@ -cmake_minimum_required(VERSION 2.8.11) - -if (TARGET gtest_main) - message(STATUS "Vulkan-ValidationLayers/tests: googletests found - building tests") - - set(GTEST_LOCATION ${CMAKE_CURRENT_SOURCE_DIR}/../external/googletest) - - if(CMAKE_SYSTEM_NAME STREQUAL "Windows") - add_definitions(-DVK_USE_PLATFORM_WIN32_KHR -DWIN32_LEAN_AND_MEAN) - # Workaround for TR1 deprecation in Visual Studio 15.5 until Google Test is updated - add_definitions(-D_SILENCE_TR1_NAMESPACE_DEPRECATION_WARNING) - set(DisplayServer Win32) - elseif(CMAKE_SYSTEM_NAME STREQUAL "Android") - add_definitions(-DVK_USE_PLATFORM_ANDROID_KHR) - elseif(CMAKE_SYSTEM_NAME STREQUAL "Linux") - if (BUILD_WSI_XCB_SUPPORT) - add_definitions(-DVK_USE_PLATFORM_XCB_KHR) - endif() - - if (BUILD_WSI_XLIB_SUPPORT) - add_definitions(-DVK_USE_PLATFORM_XLIB_KHR) - endif() - - if (BUILD_WSI_WAYLAND_SUPPORT) - add_definitions(-DVK_USE_PLATFORM_WAYLAND_KHR) - endif() - - if (BUILD_WSI_MIR_SUPPORT) - add_definitions(-DVK_USE_PLATFORM_MIR_KHR) - include_directories(${MIR_INCLUDE_DIR}) - endif() - elseif(CMAKE_SYSTEM_NAME STREQUAL "Darwin") - add_definitions(-DVK_USE_PLATFORM_MACOS_MVK) - else() - message(FATAL_ERROR "Unsupported Platform!") +set(GTEST_LOCATION ${CMAKE_CURRENT_SOURCE_DIR}/../external/googletest) + +if(CMAKE_SYSTEM_NAME STREQUAL "Windows") + add_definitions(-DVK_USE_PLATFORM_WIN32_KHR -DWIN32_LEAN_AND_MEAN) + # Workaround for TR1 deprecation in Visual Studio 15.5 until Google Test is updated + add_definitions(-D_SILENCE_TR1_NAMESPACE_DEPRECATION_WARNING) + set(DisplayServer Win32) +elseif(CMAKE_SYSTEM_NAME STREQUAL "Android") + add_definitions(-DVK_USE_PLATFORM_ANDROID_KHR) +elseif(CMAKE_SYSTEM_NAME STREQUAL "Linux") + if (BUILD_WSI_XCB_SUPPORT) + add_definitions(-DVK_USE_PLATFORM_XCB_KHR) endif() - if (WIN32) - file(COPY vk_layer_validation_tests.vcxproj.user DESTINATION ${CMAKE_BINARY_DIR}/tests) + if (BUILD_WSI_XLIB_SUPPORT) + add_definitions(-DVK_USE_PLATFORM_XLIB_KHR) endif() - set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_SOURCE_DIR}/cmake") + if (BUILD_WSI_WAYLAND_SUPPORT) + add_definitions(-DVK_USE_PLATFORM_WAYLAND_KHR) + endif() - if(WIN32) - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -D_CRT_SECURE_NO_WARNINGS -D_USE_MATH_DEFINES") + if (BUILD_WSI_MIR_SUPPORT) + add_definitions(-DVK_USE_PLATFORM_MIR_KHR) + include_directories(${MIR_INCLUDE_DIR}) + endif() +elseif(CMAKE_SYSTEM_NAME STREQUAL "Darwin") + add_definitions(-DVK_USE_PLATFORM_MACOS_MVK) +else() + message(FATAL_ERROR "Unsupported Platform!") +endif() - # If MSVC, disable some signed/unsigned mismatch warnings. - if (MSVC) - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /wd4267") - endif() +if (WIN32) + file(COPY vk_layer_validation_tests.vcxproj.user DESTINATION ${CMAKE_BINARY_DIR}/tests) +endif() - else() - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11") - endif() +set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_SOURCE_DIR}/cmake") - set (LIBGLM_INCLUDE_DIR ${PROJECT_SOURCE_DIR}/libs) - - set(COMMON_CPP - vkrenderframework.cpp - vktestbinding.cpp - vktestframework.cpp - test_environment.cpp - ) - - if (NOT WIN32) - # extra setup for out-of-tree builds - if (NOT (CMAKE_CURRENT_SOURCE_DIR STREQUAL CMAKE_CURRENT_BINARY_DIR)) - add_custom_target(binary-dir-symlinks ALL - COMMAND ln -sf ${CMAKE_CURRENT_SOURCE_DIR}/run_all_tests.sh - VERBATIM - ) - endif() - else() - if (NOT (CMAKE_CURRENT_SOURCE_DIR STREQUAL CMAKE_CURRENT_BINARY_DIR)) - FILE(TO_NATIVE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/_run_all_tests.ps1 RUN_ALL) - add_custom_target(binary-dir-symlinks ALL - COMMAND ${CMAKE_COMMAND} -E copy_if_different ${RUN_ALL} run_all_tests.ps1 - VERBATIM - ) - set_target_properties(binary-dir-symlinks PROPERTIES FOLDER ${LAYERS_HELPER_FOLDER}) - endif() +if(WIN32) + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -D_CRT_SECURE_NO_WARNINGS -D_USE_MATH_DEFINES") + + # If MSVC, disable some signed/unsigned mismatch warnings. + if (MSVC) + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /wd4267") endif() - # The vulkan loader search is: - # User-supplied setting of CMAKE_PREFIX_PATH - # VULKAN_LOADER_INSTALL_DIR defined via cmake option - # VULKAN_LOADER_INSTALL_DIR defined via environment variable - # Default findVulkan operation if the VULKAN_SDK environment variable is defined - set(VULKAN_LOADER_INSTALL_DIR "LOADER-NOTFOUND" CACHE PATH "Absolute path to a Vulkan-Loader install directory") - - if (VULKAN_LOADER_INSTALL_DIR) - message(STATUS "VULKAN_LOADER_INSTALL_DIR specified, using find_package to locate Vulkan") - elseif(ENV{VULKAN_LOADER_INSTALL_DIR}) - message(STATUS "VULKAN_LOADER_INSTALL_DIR environment variable specified, using find_package to locate Vulkan") +else() + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11") +endif() + +set (LIBGLM_INCLUDE_DIR ${PROJECT_SOURCE_DIR}/libs) + +set(COMMON_CPP + vkrenderframework.cpp + vktestbinding.cpp + vktestframework.cpp + test_environment.cpp + ) + +if (NOT WIN32) + # extra setup for out-of-tree builds + if (NOT (CMAKE_CURRENT_SOURCE_DIR STREQUAL CMAKE_CURRENT_BINARY_DIR)) + add_custom_target(binary-dir-symlinks ALL + COMMAND ln -sf ${CMAKE_CURRENT_SOURCE_DIR}/run_all_tests.sh + VERBATIM + ) endif() - set(CMAKE_PREFIX_PATH ${CMAKE_PREFIX_PATH};${VULKAN_LOADER_INSTALL_DIR};${VULKAN_HEADERS_INSTALL_DIR};$ENV{VULKAN_LOADER_INSTALL_DIR};$ENV{VULKAN_HEADERS_INSTALL_DIR}) - find_package(Vulkan) - set (LIBVK "Vulkan::Vulkan") +else() + if (NOT (CMAKE_CURRENT_SOURCE_DIR STREQUAL CMAKE_CURRENT_BINARY_DIR)) + FILE(TO_NATIVE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/_run_all_tests.ps1 RUN_ALL) + add_custom_target(binary-dir-symlinks ALL + COMMAND ${CMAKE_COMMAND} -E copy_if_different ${RUN_ALL} run_all_tests.ps1 + VERBATIM + ) + set_target_properties(binary-dir-symlinks PROPERTIES FOLDER ${LAYERS_HELPER_FOLDER}) + endif() +endif() - add_executable(vk_layer_validation_tests layer_validation_tests.cpp ../layers/vk_format_utils.cpp ${COMMON_CPP}) +# The vulkan loader search is: +# User-supplied setting of CMAKE_PREFIX_PATH +# VULKAN_LOADER_INSTALL_DIR defined via cmake option +# VULKAN_LOADER_INSTALL_DIR defined via environment variable +# Default findVulkan operation if the VULKAN_SDK environment variable is defined +set(VULKAN_LOADER_INSTALL_DIR "LOADER-NOTFOUND" CACHE PATH "Absolute path to a Vulkan-Loader install directory") + +if (VULKAN_LOADER_INSTALL_DIR) + message(STATUS "VULKAN_LOADER_INSTALL_DIR specified, using find_package to locate Vulkan") +elseif(ENV{VULKAN_LOADER_INSTALL_DIR}) + message(STATUS "VULKAN_LOADER_INSTALL_DIR environment variable specified, using find_package to locate Vulkan") +endif() +set(CMAKE_PREFIX_PATH ${CMAKE_PREFIX_PATH};${VULKAN_LOADER_INSTALL_DIR};${VULKAN_HEADERS_INSTALL_DIR};$ENV{VULKAN_LOADER_INSTALL_DIR};$ENV{VULKAN_HEADERS_INSTALL_DIR}) +find_package(Vulkan) +set (LIBVK "Vulkan::Vulkan") + +add_executable(vk_layer_validation_tests layer_validation_tests.cpp ../layers/vk_format_utils.cpp ${COMMON_CPP}) +set_target_properties(vk_layer_validation_tests + PROPERTIES + COMPILE_DEFINITIONS "GTEST_LINKED_AS_SHARED_LIBRARY=1") +target_include_directories(vk_layer_validation_tests PUBLIC + ${VulkanHeaders_INCLUDE_DIR} + ${CMAKE_CURRENT_SOURCE_DIR} + ${GTEST_LOCATION}/googletest/include + ${PROJECT_SOURCE_DIR}/layers + ${GLSLANG_SPIRV_INCLUDE_DIR} + ${CMAKE_CURRENT_BINARY_DIR} + ${CMAKE_BINARY_DIR} + ${PROJECT_BINARY_DIR} + ${PROJECT_BINARY_DIR}/layers + ) +add_dependencies(vk_layer_validation_tests + VkLayer_utils + VkLayer_core_validation-json + VkLayer_device_profile_api-json + VkLayer_object_tracker-json + VkLayer_parameter_validation-json + VkLayer_standard_validation-json + VkLayer_threading-json + VkLayer_unique_objects-json + ) + +if(NOT WIN32) set_target_properties(vk_layer_validation_tests - PROPERTIES - COMPILE_DEFINITIONS "GTEST_LINKED_AS_SHARED_LIBRARY=1") - target_include_directories(vk_layer_validation_tests PUBLIC - ${VulkanHeaders_INCLUDE_DIR} - ${CMAKE_CURRENT_SOURCE_DIR} - ${GTEST_LOCATION}/googletest/include - ${PROJECT_SOURCE_DIR}/layers - ${GLSLANG_SPIRV_INCLUDE_DIR} - ${CMAKE_CURRENT_BINARY_DIR} - ${CMAKE_BINARY_DIR} - ${PROJECT_BINARY_DIR} - ${PROJECT_BINARY_DIR}/layers - ) - add_dependencies(vk_layer_validation_tests - VkLayer_utils - VkLayer_core_validation-json - VkLayer_device_profile_api-json - VkLayer_object_tracker-json - VkLayer_parameter_validation-json - VkLayer_standard_validation-json - VkLayer_threading-json - VkLayer_unique_objects-json - ) - - if(NOT WIN32) - set_target_properties(vk_layer_validation_tests - PROPERTIES - COMPILE_FLAGS "-Wno-sign-compare") - if (BUILD_WSI_XCB_SUPPORT OR BUILD_WSI_XLIB_SUPPORT) - target_link_libraries(vk_layer_validation_tests ${LIBVK} ${XCB_LIBRARIES} ${X11_LIBRARIES} gtest gtest_main ${GLSLANG_LIBRARIES}) - else() - target_link_libraries(vk_layer_validation_tests ${LIBVK} gtest gtest_main ${GLSLANG_LIBRARIES}) - endif() - endif() - if(WIN32) + PROPERTIES + COMPILE_FLAGS "-Wno-sign-compare") + if (BUILD_WSI_XCB_SUPPORT OR BUILD_WSI_XLIB_SUPPORT) + target_link_libraries(vk_layer_validation_tests ${LIBVK} ${XCB_LIBRARIES} ${X11_LIBRARIES} gtest gtest_main ${GLSLANG_LIBRARIES}) + else() target_link_libraries(vk_layer_validation_tests ${LIBVK} gtest gtest_main ${GLSLANG_LIBRARIES}) endif() +endif() +if(WIN32) + target_link_libraries(vk_layer_validation_tests ${LIBVK} gtest gtest_main ${GLSLANG_LIBRARIES}) +endif() - if (WIN32) - # For Windows, copy necessary gtest DLLs to the right spot for the vk_layer_tests... - FILE(TO_NATIVE_PATH ${PROJECT_BINARY_DIR}/external/googletest/googletest/$<CONFIGURATION>/*.dll SRC_GTEST_DLLS) - FILE(TO_NATIVE_PATH ${CMAKE_CURRENT_BINARY_DIR}/$<CONFIGURATION> DST_GTEST_DLLS) +if (WIN32) + # For Windows, copy necessary gtest DLLs to the right spot for the vk_layer_tests... + FILE(TO_NATIVE_PATH ${PROJECT_BINARY_DIR}/external/googletest/googletest/$<CONFIGURATION>/*.dll SRC_GTEST_DLLS) + FILE(TO_NATIVE_PATH ${CMAKE_CURRENT_BINARY_DIR}/$<CONFIGURATION> DST_GTEST_DLLS) + add_custom_command(TARGET vk_layer_validation_tests POST_BUILD + COMMAND xcopy /Y /I ${SRC_GTEST_DLLS} ${DST_GTEST_DLLS}) + # Copy the loader shared lib (if supplied) to the test application directory so the test app finds it. + if(VULKAN_LOADER_INSTALL_DIR) add_custom_command(TARGET vk_layer_validation_tests POST_BUILD - COMMAND xcopy /Y /I ${SRC_GTEST_DLLS} ${DST_GTEST_DLLS}) - # Copy the loader shared lib (if supplied) to the test application directory so the test app finds it. - if(VULKAN_LOADER_INSTALL_DIR) - add_custom_command(TARGET vk_layer_validation_tests POST_BUILD - COMMAND ${CMAKE_COMMAND} -E copy ${VULKAN_LOADER_INSTALL_DIR}/bin/vulkan-1.dll $<TARGET_FILE_DIR:vk_layer_validation_tests>) - endif() - endif() - - if(INSTALL_TESTS) - install(TARGETS vk_layer_validation_tests DESTINATION ${CMAKE_INSTALL_BINDIR}) + COMMAND ${CMAKE_COMMAND} -E copy ${VULKAN_LOADER_INSTALL_DIR}/bin/vulkan-1.dll $<TARGET_FILE_DIR:vk_layer_validation_tests>) endif() +endif() - add_subdirectory(layers) +if(INSTALL_TESTS) + install(TARGETS vk_layer_validation_tests DESTINATION ${CMAKE_INSTALL_BINDIR}) endif() + +add_subdirectory(layers) |