File: CMakeLists.txt

package info (click to toggle)
vulkan-validationlayers 1.4.341.0-1
  • links: PTS, VCS
  • area: main
  • in suites: sid
  • size: 54,356 kB
  • sloc: cpp: 675,478; python: 12,311; sh: 24; makefile: 24; xml: 14
file content (152 lines) | stat: -rw-r--r-- 4,697 bytes parent folder | download | duplicates (5)
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
# ~~~
# Copyright (c) 2025 Valve Corporation
# Copyright (c) 2025 LunarG, Inc.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
# ~~~

add_library(vk_test_framework STATIC
    android_hardware_buffer.h
    layer_validation_tests.h
    layer_validation_tests.cpp
    pipeline_helper.h
    pipeline_helper.cpp
    shader_helper.h
    shader_helper.cpp
    shader_object_helper.h
    shader_object_helper.cpp
    test_common.h
    shader_templates.h
    error_monitor.cpp
    error_monitor.h
    video_objects.h
    render.cpp
    render.h
    binding.h
    binding.cpp
    buffer_helper.h
    cooperative_matrix_helper.h
    cooperative_matrix_helper.cpp
    test_framework.cpp
    ray_tracing_objects.h
    ray_tracing_objects.cpp
    data_graph_objects.h
    data_graph_objects.cpp
    ray_tracing_helper_nv.h
    ray_tracing_helper_nv.cpp
    external_memory_sync.h
    external_memory_sync.cpp
    sync_helper.h
    sync_helper.cpp
    sync_val_tests.h
    descriptor_helper.h
    descriptor_helper.cpp
    thread_helper.h
    thread_helper.cpp
    gpu_av_helper.h
    render_pass_helper.h
    render_pass_helper.cpp
    feature_requirements.h
    feature_requirements.cpp
)
if (APPLE)
    target_sources(vk_test_framework PRIVATE
        apple_wsi.h
        apple_wsi.mm
    )
    # QuartzCore framework is needed for minimal Metal interaction
    target_link_libraries(vk_test_framework PRIVATE "-framework QuartzCore")
endif()

target_include_directories(vk_test_framework PUBLIC
    ${CMAKE_CURRENT_SOURCE_DIR}
)

find_package(GTest CONFIG)
find_package(glslang CONFIG)
find_package(SPIRV-Tools CONFIG)

if(${CMAKE_CXX_COMPILER_ID} MATCHES "(GNU|Clang)")
    target_compile_options(vk_test_framework PUBLIC
        -Wno-sign-compare
        -Wno-shorten-64-to-32
        -Wno-missing-field-initializers
    )
    if(CMAKE_CXX_COMPILER_ID MATCHES "Clang")
        target_compile_options(vk_test_framework PUBLIC
            -Wno-sign-conversion
            -Wno-implicit-int-conversion
        )
    endif()
elseif(MSVC)
    target_compile_options(vk_test_framework PUBLIC
        /wd4389 # signed/unsigned mismatch
        /wd4267 # Disable some signed/unsigned mismatch warnings.
    )

    if (CMAKE_SIZEOF_VOID_P EQUAL 4)
        # Due to IHV driver issues, we need the extra 2GB of virtual address space for 32 bit testing
        target_link_options(vk_test_framework PUBLIC /LARGEADDRESSAWARE)
    endif()
endif()

target_link_libraries(vk_test_framework PUBLIC
    VkLayer_utils
    glslang::SPIRV
    SPIRV-Tools-static
    SPIRV-Headers::SPIRV-Headers
    GTest::gtest
    GTest::gtest_main
    $<TARGET_NAME_IF_EXISTS:PkgConfig::XCB>
    $<TARGET_NAME_IF_EXISTS:PkgConfig::X11>
    $<TARGET_NAME_IF_EXISTS:PkgConfig::WAYlAND_CLIENT>
)

# setup framework/config.h using framework/config.h.in as a source
file(GENERATE OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/config_$<CONFIG>.h" INPUT "config.h.in")

# Since config_$<CONFIG>.h differs per build, set a compiler definition that files can use to include it
target_compile_definitions(vk_test_framework PRIVATE CONFIG_HEADER_FILE="config_$<CONFIG>.h")

target_sources(vk_test_framework PRIVATE ${CMAKE_CURRENT_BINARY_DIR}/config_$<CONFIG>.h)

target_include_directories(vk_test_framework PUBLIC
    ${CMAKE_CURRENT_BINARY_DIR}
    ${VVL_SOURCE_DIR}/layers/external
)

if(SLANG_INSTALL_DIR)
    target_link_libraries(vk_test_framework PUBLIC slang::slang)
    target_compile_definitions(vk_test_framework PUBLIC VVL_USE_SLANG)
endif()

function(configure_slang_for_target TARGET_NAME)
    if(WIN32)
        add_custom_command(TARGET ${TARGET_NAME} PRE_LINK
            COMMAND ${CMAKE_COMMAND} -E copy $<TARGET_RUNTIME_DLLS:${TARGET_NAME}> $<TARGET_FILE_DIR:${TARGET_NAME}>
            COMMAND_EXPAND_LISTS
        )
    endif()
endfunction()

function(install_slang_with_target TARGET_NAME DESTINATION)
    if(NOT WIN32)
        install(FILES $<TARGET_FILE:slang::slang> DESTINATION ${DESTINATION})

        # Make sure slang can be found after the target is installed
        set_target_properties(${TARGET_NAME} PROPERTIES
            INSTALL_RPATH "$ORIGIN"
            INSTALL_RPATH_USE_LINK_PATH TRUE
        )
    endif()
endfunction()