aboutsummaryrefslogtreecommitdiff
path: root/tests/CMakeLists.txt
blob: 3f09ac4c9d406ff32a47aa007d8e017507d24592 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
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!")
    endif()

    if (WIN32)
       file(COPY vk_layer_validation_tests.vcxproj.user DESTINATION ${CMAKE_BINARY_DIR}/tests)
    endif()

    set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_SOURCE_DIR}/cmake")

    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()

    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
                COMMAND ln -sf ${CMAKE_CURRENT_SOURCE_DIR}/vkvalidatelayerdoc.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)
            FILE(TO_NATIVE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/_vkvalidatelayerdoc.ps1 VALIDATE_DOC)
            add_custom_target(binary-dir-symlinks ALL
                COMMAND ${CMAKE_COMMAND} -E copy_if_different ${RUN_ALL} run_all_tests.ps1
                COMMAND ${CMAKE_COMMAND} -E copy_if_different ${VALIDATE_DOC} vkvalidatelayerdoc.ps1
                VERBATIM
                )
            set_target_properties(binary-dir-symlinks PROPERTIES FOLDER ${VVL_TARGET_FOLDER})
        endif()
    endif()

    # Predefine loader root as a cmake cache variable for cmake-gui
    set(LOADER_REPO_ROOT "LOADER-NOTFOUND" CACHE PATH "Absolute path to the root of the loader repository")

    if(NOT LOADER_REPO_ROOT)
        message(STATUS "LOADER_REPO_ROOT not set, using find_package to locate Vulkan")
        find_package(Vulkan)
        set (LIBVK "Vulkan::Vulkan")
    else()
        message(STATUS "Using user-supplied path to locate Vulkan")
        if(WIN32)
            set (LOADER_SEARCH_PATHS
                "${LOADER_REPO_ROOT}/${BUILDTGT_DIR}/loader/${DEBUG_DECORATION}"
                "${LOADER_REPO_ROOT}/${BUILDTGT_DIR}/loader/${RELEASE_DECORATION}"
                "${LOADER_REPO_ROOT}/Lib"
                )
        elseif(UNIX)
            set (LOADER_SEARCH_PATHS
                "${LOADER_REPO_ROOT}/${BUILDTGT_DIR}/loader"
                "${LOADER_REPO_ROOT}/x86_64/lib"
                )
        endif()
        find_library(LIBVK NAMES vulkan vulkan-1
            HINTS ${LOADER_SEARCH_PATHS}
            )
        message(STATUS "Found Vulkan: ${LIBVK}")
    endif()

    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
        ${VULKAN_HEADERS_LOCATION}/include
        ${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)

    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)
        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)
        add_custom_command(TARGET vk_layer_validation_tests POST_BUILD
            COMMAND xcopy /Y /I ${SRC_GTEST_DLLS} ${DST_GTEST_DLLS})
    endif()

    add_subdirectory(layers)
endif()