164 lines
9.0 KiB
CMake
164 lines
9.0 KiB
CMake
w_use3rd(Qt5)
|
|
|
|
set(renderive_rely global::GTest global::blend2d)
|
|
library_is_installed_with_rely(ok ${renderive_rely})
|
|
if (${ok})
|
|
#target_link_libraries(your_target PRIVATE blend2d::blend2d)
|
|
else ()
|
|
message("renderive 依赖未安装! 请运行 renderive_env 目标安装所需第三方依赖")
|
|
endif ()
|
|
rcl_add_dependency_action_targets("renderive_env" ${renderive_rely})
|
|
find_package(GTest REQUIRED)
|
|
if (TARGET GTest::gtest)
|
|
set(renderive_gtest_library GTest::gtest)
|
|
elseif (TARGET GTest::GTest)
|
|
set(renderive_gtest_library GTest::GTest)
|
|
else ()
|
|
message(FATAL_ERROR "GTest target not found")
|
|
endif ()
|
|
|
|
option(YSGRAPHIC_CORE_BUILD_TESTS "Build Renderive_Core test targets" ON)
|
|
option(YSGRAPHIC_CORE_ENABLE_ASAN "Build Renderive_Core targets with AddressSanitizer" OFF)
|
|
option(YSGRAPHIC_CORE_ENABLE_TSAN "Build Renderive_Core targets with ThreadSanitizer" OFF)
|
|
option(RENDERIVE_MEMORY_DOMAIN_STATS "Enable Renderive memory domain statistics" ON)
|
|
option(RENDERIVE_MEMORY_GLOBAL_POOL "Enable Renderive small object synchronized pool" ON)
|
|
option(RENDERIVE_FRAME_ARENA_GROW "Enable Renderive frame arena high-water growth" ON)
|
|
if (YSGRAPHIC_CORE_ENABLE_ASAN AND YSGRAPHIC_CORE_ENABLE_TSAN)
|
|
message(FATAL_ERROR "Renderive_Core cannot enable ASan and TSan in the same build")
|
|
endif ()
|
|
if (YSGRAPHIC_CORE_ENABLE_ASAN AND MSVC)
|
|
string(REPLACE "/RTC1" "" __PSC_CMAKE_CXX_FLAGS_DEBUG "${__PSC_CMAKE_CXX_FLAGS_DEBUG}")
|
|
string(REPLACE "/RTC1" "" __PSC_CMAKE_C_FLAGS_DEBUG "${__PSC_CMAKE_C_FLAGS_DEBUG}")
|
|
set(__PSC_CMAKE_CXX_FLAGS_DEBUG "${__PSC_CMAKE_CXX_FLAGS_DEBUG}" CACHE STRING "" FORCE)
|
|
set(__PSC_CMAKE_C_FLAGS_DEBUG "${__PSC_CMAKE_C_FLAGS_DEBUG}" CACHE STRING "" FORCE)
|
|
add_library(Renderive_Core_ASAN_Options INTERFACE)
|
|
target_compile_options(Renderive_Core_ASAN_Options INTERFACE /fsanitize=address)
|
|
target_link_options(Renderive_Core_ASAN_Options INTERFACE /fsanitize=address /INCREMENTAL:NO)
|
|
endif ()
|
|
function(ysgraphic_core_apply_sanitizer target)
|
|
get_target_property(target_type ${target} TYPE)
|
|
if (YSGRAPHIC_CORE_ENABLE_ASAN)
|
|
if (MSVC)
|
|
target_link_libraries(${target} PRIVATE Renderive_Core_ASAN_Options)
|
|
if (target_type STREQUAL "STATIC_LIBRARY")
|
|
target_link_libraries(${target} INTERFACE Renderive_Core_ASAN_Options)
|
|
endif ()
|
|
else ()
|
|
target_compile_options(${target} PRIVATE -fsanitize=address -fno-omit-frame-pointer)
|
|
if (target_type STREQUAL "STATIC_LIBRARY")
|
|
target_link_options(${target} INTERFACE -fsanitize=address)
|
|
else ()
|
|
target_link_options(${target} PRIVATE -fsanitize=address)
|
|
endif ()
|
|
endif ()
|
|
endif ()
|
|
if (YSGRAPHIC_CORE_ENABLE_TSAN)
|
|
if (MSVC)
|
|
message(FATAL_ERROR "Renderive_Core TSan is not supported by MSVC")
|
|
else ()
|
|
target_compile_options(${target} PRIVATE -fsanitize=thread -fno-omit-frame-pointer)
|
|
if (target_type STREQUAL "STATIC_LIBRARY")
|
|
target_link_options(${target} INTERFACE -fsanitize=thread)
|
|
else ()
|
|
target_link_options(${target} PRIVATE -fsanitize=thread)
|
|
endif ()
|
|
endif ()
|
|
endif ()
|
|
endfunction()
|
|
set(other_library Qt5::Widgets Qt5::Core Qt5::Svg Qt5::Xml Qt5::PrintSupport Qt5::Multimedia Qt5::QuickWidgets)
|
|
find_package(OpenGL)
|
|
if (OpenGL_FOUND)
|
|
list(APPEND other_library OpenGL::GL)
|
|
endif ()
|
|
|
|
|
|
set(dir "${CMAKE_CURRENT_LIST_DIR}/Renderive")
|
|
file(GLOB_RECURSE srcs CONFIGURE_DEPENDS "${dir}/*.c" "${dir}/*.cpp" "${dir}/*.h" "${dir}/*.qrc")
|
|
list(FILTER srcs EXCLUDE REGEX "main\\.cpp$")
|
|
list(FILTER srcs EXCLUDE REGEX "Performance_Shower(_p)?\\.(cpp|h)$")
|
|
add_library(Renderive STATIC "${srcs}")
|
|
target_include_directories(Renderive PUBLIC "${CMAKE_CURRENT_LIST_DIR}")
|
|
set(Core Core_Static)
|
|
target_link_libraries(Renderive PUBLIC ${other_library})
|
|
if (RENDERIVE_MEMORY_DOMAIN_STATS)
|
|
target_compile_definitions(Renderive PUBLIC RENDERIVE_MEMORY_DOMAIN_STATS=1)
|
|
else ()
|
|
target_compile_definitions(Renderive PUBLIC RENDERIVE_MEMORY_DOMAIN_STATS=0)
|
|
endif ()
|
|
if (RENDERIVE_MEMORY_GLOBAL_POOL)
|
|
target_compile_definitions(Renderive PUBLIC RENDERIVE_MEMORY_GLOBAL_POOL=1)
|
|
else ()
|
|
target_compile_definitions(Renderive PUBLIC RENDERIVE_MEMORY_GLOBAL_POOL=0)
|
|
endif ()
|
|
if (RENDERIVE_FRAME_ARENA_GROW)
|
|
target_compile_definitions(Renderive PUBLIC RENDERIVE_FRAME_ARENA_GROW=1)
|
|
else ()
|
|
target_compile_definitions(Renderive PUBLIC RENDERIVE_FRAME_ARENA_GROW=0)
|
|
endif ()
|
|
set_property(TARGET Renderive PROPERTY AUTOMOC ON)
|
|
set_property(TARGET Renderive PROPERTY AUTOUIC ON)
|
|
set_property(TARGET Renderive PROPERTY AUTORCC ON)
|
|
target_link_libraries(Renderive PUBLIC ${Core})
|
|
ysgraphic_core_apply_sanitizer(Renderive)
|
|
|
|
set(renderive_diagnostics_srcs
|
|
"${dir}/plottable/Performance_Shower.cpp"
|
|
"${dir}/plottable/Performance_Shower_p.h"
|
|
)
|
|
add_library(Renderive_Diagnostics STATIC "${renderive_diagnostics_srcs}")
|
|
target_include_directories(Renderive_Diagnostics PUBLIC "${CMAKE_CURRENT_LIST_DIR}")
|
|
target_link_libraries(Renderive_Diagnostics PUBLIC Renderive)
|
|
set_property(TARGET Renderive_Diagnostics PROPERTY AUTOMOC ON)
|
|
set_property(TARGET Renderive_Diagnostics PROPERTY AUTOUIC ON)
|
|
set_property(TARGET Renderive_Diagnostics PROPERTY AUTORCC ON)
|
|
ysgraphic_core_apply_sanitizer(Renderive_Diagnostics)
|
|
if (YSGRAPHIC_CORE_BUILD_TESTS)
|
|
enable_testing()
|
|
function(renderive_add_gtest target test_name source)
|
|
add_executable(${target} EXCLUDE_FROM_ALL "${CMAKE_CURRENT_LIST_DIR}/tests/${source}")
|
|
target_link_libraries(${target} PRIVATE Renderive ${renderive_gtest_library} ${ARGN})
|
|
ysgraphic_core_apply_sanitizer(${target})
|
|
add_test(NAME Renderive.${test_name} COMMAND ${target})
|
|
endfunction()
|
|
renderive_add_gtest(Renderive_ASan_Runtime_Smoke ASan_Runtime_Smoke ASan_Runtime_Smoke.cpp)
|
|
renderive_add_gtest(Renderive_Update_Completion Update_Completion Update_Completion.cpp)
|
|
renderive_add_gtest(Renderive_Memory_Default Memory_Default Memory_Default.cpp)
|
|
renderive_add_gtest(Renderive_Memory_Callbacks Memory_Callbacks Memory_Callbacks.cpp)
|
|
renderive_add_gtest(Renderive_Memory_Failure Memory_Failure Memory_Failure.cpp)
|
|
renderive_add_gtest(Renderive_Memory_Late_Config Memory_Late_Config Memory_Late_Config.cpp)
|
|
renderive_add_gtest(Renderive_Memory_Plot_Late_Config Memory_Plot_Late_Config Memory_Plot_Late_Config.cpp)
|
|
set_tests_properties(Renderive.Memory_Plot_Late_Config PROPERTIES ENVIRONMENT "QT_QPA_PLATFORM=offscreen")
|
|
renderive_add_gtest(Renderive_Timeline_Stream_Consistency Timeline_Stream_Consistency Timeline_Stream_Consistency.cpp)
|
|
renderive_add_gtest(Renderive_Memory_Data_Path_Stress Memory_Data_Path_Stress Memory_Data_Path_Stress.cpp)
|
|
set_tests_properties(Renderive.Memory_Data_Path_Stress PROPERTIES ENVIRONMENT "QT_QPA_PLATFORM=offscreen;RENDERIVE_PERFORMANCE_LOG=0" TIMEOUT 20)
|
|
renderive_add_gtest(Renderive_Renderable_Lifecycle_Stress Renderable_Lifecycle_Stress Renderable_Lifecycle_Stress.cpp)
|
|
set_tests_properties(Renderive.Renderable_Lifecycle_Stress PROPERTIES ENVIRONMENT "QT_QPA_PLATFORM=offscreen;RENDERIVE_PERFORMANCE_LOG=0" TIMEOUT 20)
|
|
renderive_add_gtest(Renderive_Frame_Scheduler_Feedback Frame_Scheduler_Feedback Frame_Scheduler_Feedback.cpp Renderive_Diagnostics)
|
|
set_tests_properties(Renderive.Frame_Scheduler_Feedback PROPERTIES ENVIRONMENT "RENDERIVE_PERFORMANCE_LOG=1;RENDERIVE_PERFORMANCE_LOG_PATH=${CMAKE_BINARY_DIR}/renderive_feedback_test_log.csv")
|
|
renderive_add_gtest(Renderive_Performance_Shower_Interaction Performance_Shower_Interaction Performance_Shower_Interaction.cpp Renderive_Diagnostics Renderive_Widget)
|
|
set_tests_properties(Renderive.Performance_Shower_Interaction PROPERTIES ENVIRONMENT "QT_QPA_PLATFORM=offscreen;RENDERIVE_PERFORMANCE_LOG=0" TIMEOUT 12)
|
|
renderive_add_gtest(Renderive_Multithread_Input_Stress Multithread_Input_Stress Multithread_Input_Stress.cpp)
|
|
set_tests_properties(Renderive.Multithread_Input_Stress PROPERTIES ENVIRONMENT "QT_QPA_PLATFORM=offscreen;RENDERIVE_PERFORMANCE_LOG=0" TIMEOUT 15)
|
|
endif ()
|
|
|
|
set(dir "${CMAKE_CURRENT_LIST_DIR}/Widget")
|
|
file(GLOB_RECURSE srcs "${dir}/*.c" "${dir}/*.cpp" "${dir}/*.h" "${dir}/*.hpp" "${dir}/*.qrc")
|
|
add_library(Renderive_Widget STATIC "${srcs}")
|
|
target_include_directories(Renderive_Widget PUBLIC "${CMAKE_CURRENT_LIST_DIR}")
|
|
target_link_libraries(Renderive_Widget PUBLIC ${other_library} Renderive)
|
|
set_property(TARGET Renderive_Widget PROPERTY AUTOMOC ON)
|
|
set_property(TARGET Renderive_Widget PROPERTY AUTOUIC ON)
|
|
set_property(TARGET Renderive_Widget PROPERTY AUTORCC ON)
|
|
ysgraphic_core_apply_sanitizer(Renderive_Widget)
|
|
#
|
|
set(dir "${CMAKE_CURRENT_LIST_DIR}/Demo_Gallery")
|
|
file(GLOB_RECURSE srcs "${dir}/*.c" "${dir}/*.cpp" "${dir}/*.h" "${dir}/*.hpp")
|
|
add_library(Demo_Gallery_Lib ${srcs})
|
|
target_link_libraries(Demo_Gallery_Lib PUBLIC Renderive Renderive_Diagnostics Renderive_Widget)
|
|
|
|
add_executable(Demo_Gallery ${CMAKE_CURRENT_LIST_DIR}/demo_gallery_main.cpp)
|
|
target_link_libraries(Demo_Gallery PUBLIC Demo_Gallery_Lib)
|
|
|
|
|
|
|