Files
Aethera/render_3D/third_party/datoviz/cmake/DatovizTests.cmake
T
2026-08-20 10:23:47 +08:00

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