286 lines
16 KiB
CMake
286 lines
16 KiB
CMake
include_guard(GLOBAL)
|
|
|
|
function(Renderive_render_3D_datoviz_stage_test_resources runtime_dir)
|
|
file(MAKE_DIRECTORY
|
|
"${runtime_dir}/build"
|
|
"${Renderive_render_3D_datoviz_test_spirv_dir}")
|
|
|
|
# The source tree owns every runtime resource. A clean build directory is repopulated here.
|
|
file(COPY "${Renderive_render_3D_datoviz_root}/spec"
|
|
DESTINATION "${runtime_dir}")
|
|
file(COPY "${Renderive_render_3D_datoviz_root}/data/assets/fonts"
|
|
DESTINATION "${runtime_dir}/data/assets")
|
|
file(COPY "${Renderive_render_3D_datoviz_external_dir}/cimgui/imgui/misc/fonts"
|
|
DESTINATION "${runtime_dir}/external/cimgui/imgui/misc")
|
|
|
|
# DRP2 emits LF. Normalize only the generated runtime copies so exact snapshots do not depend
|
|
# on the checkout's Windows EOL mode; the source fixtures remain untouched.
|
|
file(GLOB_RECURSE Renderive_render_3D_datoviz_test_json_fixtures
|
|
LIST_DIRECTORIES false
|
|
"${runtime_dir}/spec/*.json")
|
|
foreach(Renderive_render_3D_datoviz_test_json_fixture
|
|
IN LISTS Renderive_render_3D_datoviz_test_json_fixtures)
|
|
file(READ "${Renderive_render_3D_datoviz_test_json_fixture}"
|
|
Renderive_render_3D_datoviz_test_json_content)
|
|
file(CONFIGURE
|
|
OUTPUT "${Renderive_render_3D_datoviz_test_json_fixture}"
|
|
CONTENT "${Renderive_render_3D_datoviz_test_json_content}"
|
|
@ONLY
|
|
NEWLINE_STYLE UNIX)
|
|
endforeach()
|
|
endfunction()
|
|
|
|
function(Renderive_render_3D_datoviz_add_test_runner target source_var component timeout)
|
|
set(Renderive_render_3D_datoviz_test_runner_sources ${${source_var}})
|
|
if(NOT component STREQUAL "NONE")
|
|
list(APPEND Renderive_render_3D_datoviz_test_runner_sources
|
|
"${Renderive_render_3D_datoviz_testing_dir}/components/${component}.c")
|
|
endif()
|
|
|
|
add_executable(${target} ${Renderive_render_3D_datoviz_test_runner_sources})
|
|
target_include_directories(${target} PRIVATE
|
|
"${Renderive_render_3D_datoviz_include_dir}"
|
|
"${Renderive_render_3D_datoviz_testing_dir}"
|
|
"${Renderive_render_3D_datoviz_src_dir}/common"
|
|
"${Renderive_render_3D_datoviz_src_dir}/scene/tests"
|
|
"${Renderive_render_3D_datoviz_src_dir}/vk/tests"
|
|
"${Renderive_render_3D_datoviz_src_dir}/vklite"
|
|
"${Vulkan_INCLUDE_DIR}/vulkan"
|
|
"${Renderive_render_3D_datoviz_external_dir}")
|
|
target_compile_definitions(${target} PRIVATE
|
|
DVZ_HAS_GLFW=0
|
|
"DVZ_TEST_SPIRV_DIR=\"${Renderive_render_3D_datoviz_test_spirv_dir}\"")
|
|
target_link_libraries(${target} PRIVATE
|
|
${ARGN}
|
|
Renderive_render_3D_datoviz_testing
|
|
${Renderive_render_3D_datoviz_thread_target})
|
|
if(Renderive_render_3D_datoviz_msvc_system_library_dirs)
|
|
target_link_directories(${target} PRIVATE
|
|
${Renderive_render_3D_datoviz_msvc_system_library_dirs})
|
|
endif()
|
|
if(MSVC)
|
|
target_link_options(${target} PRIVATE /STACK:8388608)
|
|
endif()
|
|
Renderive_render_3D_datoviz_configure_target(${target})
|
|
set_target_properties(${target} PROPERTIES
|
|
LINKER_LANGUAGE CXX
|
|
FOLDER Renderive_render_3D/datoviz/tests)
|
|
|
|
add_test(NAME ${target} COMMAND ${target})
|
|
set_tests_properties(${target} PROPERTIES
|
|
LABELS datoviz
|
|
TIMEOUT ${timeout}
|
|
WORKING_DIRECTORY "${Renderive_render_3D_datoviz_test_runtime_dir}")
|
|
endfunction()
|
|
|
|
function(Renderive_render_3D_datoviz_add_tests)
|
|
set(Renderive_render_3D_datoviz_testing_dir
|
|
"${Renderive_render_3D_datoviz_root}/testing")
|
|
set(Renderive_render_3D_datoviz_test_runtime_dir
|
|
"${CMAKE_CURRENT_BINARY_DIR}/testing/runtime")
|
|
set(Renderive_render_3D_datoviz_test_spirv_dir
|
|
"${CMAKE_CURRENT_BINARY_DIR}/testing/spirv")
|
|
Renderive_render_3D_datoviz_stage_test_resources(
|
|
"${Renderive_render_3D_datoviz_test_runtime_dir}")
|
|
|
|
file(GLOB Renderive_render_3D_datoviz_test_shaders CONFIGURE_DEPENDS
|
|
"${Renderive_render_3D_datoviz_src_dir}/vklite/tests/shaders/*.vert"
|
|
"${Renderive_render_3D_datoviz_src_dir}/vklite/tests/shaders/*.frag"
|
|
"${Renderive_render_3D_datoviz_src_dir}/vklite/tests/shaders/*.comp")
|
|
if(Vulkan_GLSLC_EXECUTABLE)
|
|
set(Renderive_render_3D_datoviz_glslc "${Vulkan_GLSLC_EXECUTABLE}")
|
|
else()
|
|
find_program(Renderive_render_3D_datoviz_glslc
|
|
NAMES glslc
|
|
HINTS "$ENV{VULKAN_SDK}/Bin" "$ENV{VULKAN_SDK}/bin")
|
|
endif()
|
|
if(NOT Renderive_render_3D_datoviz_glslc)
|
|
message(FATAL_ERROR "glslc is required to build the Datoviz vklite tests")
|
|
endif()
|
|
|
|
set(Renderive_render_3D_datoviz_test_spirv_outputs)
|
|
foreach(Renderive_render_3D_datoviz_test_shader
|
|
IN LISTS Renderive_render_3D_datoviz_test_shaders)
|
|
get_filename_component(Renderive_render_3D_datoviz_test_shader_name
|
|
"${Renderive_render_3D_datoviz_test_shader}" NAME)
|
|
get_filename_component(Renderive_render_3D_datoviz_test_shader_extension
|
|
"${Renderive_render_3D_datoviz_test_shader}" EXT)
|
|
set(Renderive_render_3D_datoviz_test_spirv
|
|
"${Renderive_render_3D_datoviz_test_spirv_dir}/${Renderive_render_3D_datoviz_test_shader_name}.spv")
|
|
set(Renderive_render_3D_datoviz_test_shader_args)
|
|
if(Renderive_render_3D_datoviz_test_shader_extension STREQUAL ".comp")
|
|
list(APPEND Renderive_render_3D_datoviz_test_shader_args
|
|
--target-env=vulkan1.3 --target-spv=spv1.6)
|
|
endif()
|
|
add_custom_command(
|
|
OUTPUT "${Renderive_render_3D_datoviz_test_spirv}"
|
|
COMMAND "${Renderive_render_3D_datoviz_glslc}"
|
|
${Renderive_render_3D_datoviz_test_shader_args}
|
|
-o "${Renderive_render_3D_datoviz_test_spirv}"
|
|
"${Renderive_render_3D_datoviz_test_shader}"
|
|
DEPENDS "${Renderive_render_3D_datoviz_test_shader}"
|
|
COMMENT "Compiling Datoviz test shader ${Renderive_render_3D_datoviz_test_shader_name}"
|
|
VERBATIM)
|
|
list(APPEND Renderive_render_3D_datoviz_test_spirv_outputs
|
|
"${Renderive_render_3D_datoviz_test_spirv}")
|
|
endforeach()
|
|
add_custom_target(Renderive_render_3D_datoviz_test_shaders
|
|
DEPENDS ${Renderive_render_3D_datoviz_test_spirv_outputs})
|
|
set_target_properties(Renderive_render_3D_datoviz_test_shaders PROPERTIES
|
|
FOLDER Renderive_render_3D/datoviz/tests)
|
|
|
|
add_library(Renderive_render_3D_datoviz_testing STATIC
|
|
"${Renderive_render_3D_datoviz_testing_dir}/testing.cpp"
|
|
"${Renderive_render_3D_datoviz_testing_dir}/datoviz_testing.c")
|
|
target_include_directories(Renderive_render_3D_datoviz_testing PUBLIC
|
|
"${Renderive_render_3D_datoviz_testing_dir}"
|
|
PRIVATE "${Renderive_render_3D_datoviz_src_dir}/common")
|
|
target_link_libraries(Renderive_render_3D_datoviz_testing PRIVATE
|
|
Renderive_render_3D_datoviz_common)
|
|
Renderive_render_3D_datoviz_configure_target(Renderive_render_3D_datoviz_testing)
|
|
set_target_properties(Renderive_render_3D_datoviz_testing PROPERTIES
|
|
FOLDER Renderive_render_3D/datoviz/tests)
|
|
|
|
set(Renderive_render_3D_datoviz_msvc_system_library_dirs)
|
|
if(MSVC)
|
|
if(CMAKE_SIZEOF_VOID_P EQUAL 8)
|
|
set(Renderive_render_3D_datoviz_msvc_library_arch x64)
|
|
else()
|
|
set(Renderive_render_3D_datoviz_msvc_library_arch x86)
|
|
endif()
|
|
get_filename_component(Renderive_render_3D_datoviz_windows_sdk_include_dir
|
|
"${Renderive_render_3D_datoviz_windows_sdk_include_root}" DIRECTORY)
|
|
get_filename_component(Renderive_render_3D_datoviz_windows_kits_dir
|
|
"${Renderive_render_3D_datoviz_windows_sdk_include_dir}" DIRECTORY)
|
|
get_filename_component(Renderive_render_3D_datoviz_windows_sdk_version
|
|
"${Renderive_render_3D_datoviz_windows_sdk_include_root}" NAME)
|
|
list(APPEND Renderive_render_3D_datoviz_msvc_system_library_dirs
|
|
"${Renderive_render_3D_datoviz_msvc_tools_dir}/lib/${Renderive_render_3D_datoviz_msvc_library_arch}"
|
|
"${Renderive_render_3D_datoviz_windows_kits_dir}/Lib/${Renderive_render_3D_datoviz_windows_sdk_version}/ucrt/${Renderive_render_3D_datoviz_msvc_library_arch}"
|
|
"${Renderive_render_3D_datoviz_windows_kits_dir}/Lib/${Renderive_render_3D_datoviz_windows_sdk_version}/um/${Renderive_render_3D_datoviz_msvc_library_arch}")
|
|
endif()
|
|
|
|
foreach(Renderive_render_3D_datoviz_test_module
|
|
IN ITEMS common fileio geom math thread input controller drp2 scene)
|
|
file(GLOB_RECURSE Renderive_render_3D_datoviz_${Renderive_render_3D_datoviz_test_module}_test_sources
|
|
CONFIGURE_DEPENDS
|
|
"${Renderive_render_3D_datoviz_src_dir}/${Renderive_render_3D_datoviz_test_module}/tests/*.c"
|
|
"${Renderive_render_3D_datoviz_src_dir}/${Renderive_render_3D_datoviz_test_module}/tests/*.cc"
|
|
"${Renderive_render_3D_datoviz_src_dir}/${Renderive_render_3D_datoviz_test_module}/tests/*.cpp"
|
|
"${Renderive_render_3D_datoviz_src_dir}/${Renderive_render_3D_datoviz_test_module}/tests/*.cxx")
|
|
endforeach()
|
|
file(GLOB_RECURSE Renderive_render_3D_datoviz_vk_test_sources CONFIGURE_DEPENDS
|
|
"${Renderive_render_3D_datoviz_src_dir}/vk/tests/*.c*"
|
|
"${Renderive_render_3D_datoviz_src_dir}/vklite/tests/*.c*")
|
|
list(FILTER Renderive_render_3D_datoviz_vk_test_sources EXCLUDE REGEX
|
|
"/src/vk/tests/test_cuda\\.cu$")
|
|
list(FILTER Renderive_render_3D_datoviz_vk_test_sources EXCLUDE REGEX
|
|
"/src/vklite/tests/test_(present|vklite)\\.c.*$")
|
|
list(FILTER Renderive_render_3D_datoviz_scene_test_sources EXCLUDE REGEX
|
|
"/src/scene/tests/(app|frame_plan_emit|test_scene)\\.c$")
|
|
set(Renderive_render_3D_datoviz_core_test_sources
|
|
${Renderive_render_3D_datoviz_common_test_sources}
|
|
${Renderive_render_3D_datoviz_fileio_test_sources}
|
|
${Renderive_render_3D_datoviz_geom_test_sources}
|
|
${Renderive_render_3D_datoviz_math_test_sources}
|
|
${Renderive_render_3D_datoviz_thread_test_sources})
|
|
set(Renderive_render_3D_datoviz_scheduler_test_sources
|
|
"${Renderive_render_3D_datoviz_testing_dir}/dvztest_scheduler.c")
|
|
|
|
Renderive_render_3D_datoviz_add_test_runner(
|
|
Renderive_render_3D_datoviz_test_scheduler
|
|
Renderive_render_3D_datoviz_scheduler_test_sources NONE 120
|
|
Renderive_render_3D_datoviz_common)
|
|
Renderive_render_3D_datoviz_add_test_runner(
|
|
Renderive_render_3D_datoviz_test_common
|
|
Renderive_render_3D_datoviz_common_test_sources dvztest_common 120
|
|
Renderive_render_3D_datoviz_common)
|
|
Renderive_render_3D_datoviz_add_test_runner(
|
|
Renderive_render_3D_datoviz_test_fileio
|
|
Renderive_render_3D_datoviz_fileio_test_sources dvztest_fileio 120
|
|
Renderive_render_3D_datoviz_common Renderive_render_3D_datoviz_fileio)
|
|
Renderive_render_3D_datoviz_add_test_runner(
|
|
Renderive_render_3D_datoviz_test_geom
|
|
Renderive_render_3D_datoviz_geom_test_sources dvztest_geom 120
|
|
Renderive_render_3D_datoviz_common Renderive_render_3D_datoviz_geom
|
|
Renderive_render_3D_datoviz_math)
|
|
Renderive_render_3D_datoviz_add_test_runner(
|
|
Renderive_render_3D_datoviz_test_math
|
|
Renderive_render_3D_datoviz_math_test_sources dvztest_math 120
|
|
Renderive_render_3D_datoviz_common Renderive_render_3D_datoviz_math)
|
|
Renderive_render_3D_datoviz_add_test_runner(
|
|
Renderive_render_3D_datoviz_test_thread
|
|
Renderive_render_3D_datoviz_thread_test_sources dvztest_thread 120
|
|
Renderive_render_3D_datoviz_common Renderive_render_3D_datoviz_thread)
|
|
Renderive_render_3D_datoviz_add_test_runner(
|
|
Renderive_render_3D_datoviz_test_input
|
|
Renderive_render_3D_datoviz_input_test_sources dvztest_input 120
|
|
Renderive_render_3D_datoviz_common Renderive_render_3D_datoviz_input)
|
|
Renderive_render_3D_datoviz_add_test_runner(
|
|
Renderive_render_3D_datoviz_test_core
|
|
Renderive_render_3D_datoviz_core_test_sources dvztest_core 180
|
|
Renderive_render_3D_datoviz_common Renderive_render_3D_datoviz_fileio
|
|
Renderive_render_3D_datoviz_geom Renderive_render_3D_datoviz_math
|
|
Renderive_render_3D_datoviz_thread)
|
|
Renderive_render_3D_datoviz_add_test_runner(
|
|
Renderive_render_3D_datoviz_test_controller
|
|
Renderive_render_3D_datoviz_controller_test_sources dvztest_controller 120
|
|
Renderive_render_3D_datoviz_common Renderive_render_3D_datoviz_math
|
|
Renderive_render_3D_datoviz_input Renderive_render_3D_datoviz_controller)
|
|
Renderive_render_3D_datoviz_add_test_runner(
|
|
Renderive_render_3D_datoviz_test_drp2
|
|
Renderive_render_3D_datoviz_drp2_test_sources dvztest_drp2 300
|
|
Renderive_render_3D_datoviz_common Renderive_render_3D_datoviz_vk
|
|
Renderive_render_3D_datoviz_vklite Renderive_render_3D_datoviz_drp2)
|
|
Renderive_render_3D_datoviz_add_test_runner(
|
|
Renderive_render_3D_datoviz_test_scene
|
|
Renderive_render_3D_datoviz_scene_test_sources dvztest_scene_core 600
|
|
Renderive_render_3D_datoviz_common Renderive_render_3D_datoviz_fileio
|
|
Renderive_render_3D_datoviz_geom Renderive_render_3D_datoviz_math
|
|
Renderive_render_3D_datoviz_thread Renderive_render_3D_datoviz_input
|
|
Renderive_render_3D_datoviz_controller Renderive_render_3D_datoviz_vk
|
|
Renderive_render_3D_datoviz_vklite Renderive_render_3D_datoviz_drp2
|
|
Renderive_render_3D_datoviz_scene)
|
|
Renderive_render_3D_datoviz_add_test_runner(
|
|
Renderive_render_3D_datoviz_test_vk
|
|
Renderive_render_3D_datoviz_vk_test_sources dvztest_vk 600
|
|
Renderive_render_3D_datoviz_common Renderive_render_3D_datoviz_fileio
|
|
Renderive_render_3D_datoviz_geom Renderive_render_3D_datoviz_math
|
|
Renderive_render_3D_datoviz_thread Renderive_render_3D_datoviz_vk
|
|
Renderive_render_3D_datoviz_vklite)
|
|
add_dependencies(Renderive_render_3D_datoviz_test_vk
|
|
Renderive_render_3D_datoviz_test_shaders)
|
|
|
|
set(Renderive_render_3D_datoviz_test_targets
|
|
Renderive_render_3D_datoviz_test_scheduler
|
|
Renderive_render_3D_datoviz_test_common
|
|
Renderive_render_3D_datoviz_test_fileio
|
|
Renderive_render_3D_datoviz_test_geom
|
|
Renderive_render_3D_datoviz_test_math
|
|
Renderive_render_3D_datoviz_test_thread
|
|
Renderive_render_3D_datoviz_test_input
|
|
Renderive_render_3D_datoviz_test_core
|
|
Renderive_render_3D_datoviz_test_controller
|
|
Renderive_render_3D_datoviz_test_drp2
|
|
Renderive_render_3D_datoviz_test_scene
|
|
Renderive_render_3D_datoviz_test_vk)
|
|
add_custom_target(Renderive_render_3D_datoviz_tests
|
|
DEPENDS ${Renderive_render_3D_datoviz_test_targets})
|
|
set_target_properties(Renderive_render_3D_datoviz_tests PROPERTIES
|
|
FOLDER Renderive_render_3D/datoviz/tests)
|
|
|
|
find_program(Renderive_render_3D_datoviz_powershell
|
|
NAMES pwsh powershell REQUIRED)
|
|
add_custom_target(Renderive_render_3D_datoviz_run_tests
|
|
COMMAND "${Renderive_render_3D_datoviz_powershell}"
|
|
-NoProfile -ExecutionPolicy Bypass
|
|
-File "${Renderive_render_3D_datoviz_root}/../env.ps1"
|
|
-DatovizBuildDirectory "${CMAKE_BINARY_DIR}"
|
|
-CTestExecutable "${CMAKE_CTEST_COMMAND}"
|
|
DEPENDS Renderive_render_3D_datoviz_tests
|
|
USES_TERMINAL
|
|
VERBATIM)
|
|
set_target_properties(Renderive_render_3D_datoviz_run_tests PROPERTIES
|
|
FOLDER Renderive_render_3D/datoviz/tests)
|
|
endfunction()
|