From 00e16656215ba6629c073253ce33f0aaeb4b5a27 Mon Sep 17 00:00:00 2001 From: wyc <1104749580@qq.com> Date: Fri, 31 Jul 2026 08:56:20 +0800 Subject: [PATCH] =?UTF-8?q?cmake=20=E6=9B=B4=E6=96=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- main.cmake | 387 +++++++++++++++++++++++++++-------------------------- 1 file changed, 197 insertions(+), 190 deletions(-) diff --git a/main.cmake b/main.cmake index 02085f5..18c6b9a 100644 --- a/main.cmake +++ b/main.cmake @@ -1,16 +1,27 @@ w_use3rd(Qt5) -find_package(blend2d CONFIG REQUIRED) + set(renderive_dependencies -global::GTest -global::blend2d + global::GTest + global::blend2d ) rcl_add_dependency_action_targets(renderive_env ${renderive_dependencies}) library_is_installed_with_rely(renderive_dependencies_installed ${renderive_dependencies}) if (NOT renderive_dependencies_installed) -message(STATUS "Renderive 依赖未安装,请先构建 renderive_env 目标") -return() + message(STATUS "============== Renderive 依赖未安装,请先构建 renderive_env 目标") + return() +else () + find_package(blend2d CONFIG REQUIRED) + if (NOT TARGET blend2d::blend2d) + message(FATAL_ERROR "Renderive依赖错误 blend2d::blend2d was not found") + return() + endif () + find_package(GTest CONFIG REQUIRED) + if (NOT TARGET GTest::gtest) + message(FATAL_ERROR "Renderive依赖错误 GTest::GTest was not found") + return() + endif () endif () option(YSGRAPHIC_CORE_BUILD_TESTS "Build Renderive_Core test targets" ON) @@ -21,84 +32,81 @@ option(RENDERIVE_MEMORY_GLOBAL_POOL "Enable Renderive small object synchronized 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 cannot enable ASan and TSan simultaneously") + message(FATAL_ERROR "Renderive cannot enable ASan and TSan simultaneously") endif () -if (NOT TARGET blend2d::blend2d) -message(FATAL_ERROR "Blend2D target blend2d::blend2d was not found") -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_ASAN_Options INTERFACE) -target_compile_options(Renderive_ASAN_Options INTERFACE /fsanitize=address) -target_link_options(Renderive_ASAN_Options INTERFACE /fsanitize=address /INCREMENTAL:NO) + 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_ASAN_Options INTERFACE) + target_compile_options(Renderive_ASAN_Options INTERFACE /fsanitize=address) + target_link_options(Renderive_ASAN_Options INTERFACE /fsanitize=address /INCREMENTAL:NO) endif () function(renderive_apply_sanitizer target) -get_target_property(target_type ${target} TYPE) -if (YSGRAPHIC_CORE_ENABLE_ASAN) -if (MSVC) -target_link_libraries(${target} PRIVATE Renderive_ASAN_Options) -if (target_type STREQUAL "STATIC_LIBRARY") -target_link_libraries(${target} INTERFACE Renderive_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 TSan is not supported by MSVC") -endif () -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 () + get_target_property(target_type ${target} TYPE) + if (YSGRAPHIC_CORE_ENABLE_ASAN) + if (MSVC) + target_link_libraries(${target} PRIVATE Renderive_ASAN_Options) + if (target_type STREQUAL "STATIC_LIBRARY") + target_link_libraries(${target} INTERFACE Renderive_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 TSan is not supported by MSVC") + endif () + 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 () endfunction() function(renderive_enable_qt_target target) -set_target_properties(${target} PROPERTIES -AUTOMOC ON -AUTOUIC ON -AUTORCC ON -) + set_target_properties(${target} PROPERTIES + AUTOMOC ON + AUTOUIC ON + AUTORCC ON + ) endfunction() set(renderive_public_libraries -Qt5::Widgets -Qt5::Core -Qt5::Svg -Qt5::Xml -Qt5::PrintSupport -Qt5::Multimedia -Qt5::QuickWidgets -Core_Static -blend2d::blend2d + Qt5::Widgets + Qt5::Core + Qt5::Svg + Qt5::Xml + Qt5::PrintSupport + Qt5::Multimedia + Qt5::QuickWidgets + Core_Static + blend2d::blend2d ) find_package(OpenGL QUIET) if (OpenGL_FOUND) -list(APPEND renderive_public_libraries OpenGL::GL) + list(APPEND renderive_public_libraries OpenGL::GL) endif () set(renderive_root "${CMAKE_CURRENT_LIST_DIR}/Renderive") file(GLOB_RECURSE renderive_sources CONFIGURE_DEPENDS -"${renderive_root}/*.c" -"${renderive_root}/*.cpp" -"${renderive_root}/*.h" -"${renderive_root}/*.qrc" + "${renderive_root}/*.c" + "${renderive_root}/*.cpp" + "${renderive_root}/*.h" + "${renderive_root}/*.qrc" ) list(FILTER renderive_sources EXCLUDE REGEX "main\\.cpp$") list(FILTER renderive_sources EXCLUDE REGEX "Performance_Shower(_p)?\\.(cpp|h)$") @@ -107,16 +115,16 @@ add_library(Renderive STATIC ${renderive_sources}) target_include_directories(Renderive PUBLIC "${CMAKE_CURRENT_LIST_DIR}") target_link_libraries(Renderive PUBLIC ${renderive_public_libraries}) target_compile_definitions(Renderive PUBLIC -RENDERIVE_MEMORY_DOMAIN_STATS=$ -RENDERIVE_MEMORY_GLOBAL_POOL=$ -RENDERIVE_FRAME_ARENA_GROW=$ + RENDERIVE_MEMORY_DOMAIN_STATS=$ + RENDERIVE_MEMORY_GLOBAL_POOL=$ + RENDERIVE_FRAME_ARENA_GROW=$ ) renderive_enable_qt_target(Renderive) renderive_apply_sanitizer(Renderive) set(renderive_diagnostics_sources -"${renderive_root}/plottable/Performance_Shower.cpp" -"${renderive_root}/plottable/Performance_Shower_p.h" + "${renderive_root}/plottable/Performance_Shower.cpp" + "${renderive_root}/plottable/Performance_Shower_p.h" ) add_library(Renderive_Diagnostics STATIC ${renderive_diagnostics_sources}) target_include_directories(Renderive_Diagnostics PUBLIC "${CMAKE_CURRENT_LIST_DIR}") @@ -126,11 +134,11 @@ renderive_apply_sanitizer(Renderive_Diagnostics) set(renderive_widget_root "${CMAKE_CURRENT_LIST_DIR}/Widget") file(GLOB_RECURSE renderive_widget_sources CONFIGURE_DEPENDS -"${renderive_widget_root}/*.c" -"${renderive_widget_root}/*.cpp" -"${renderive_widget_root}/*.h" -"${renderive_widget_root}/*.hpp" -"${renderive_widget_root}/*.qrc" + "${renderive_widget_root}/*.c" + "${renderive_widget_root}/*.cpp" + "${renderive_widget_root}/*.h" + "${renderive_widget_root}/*.hpp" + "${renderive_widget_root}/*.qrc" ) add_library(Renderive_Widget STATIC ${renderive_widget_sources}) target_include_directories(Renderive_Widget PUBLIC "${CMAKE_CURRENT_LIST_DIR}") @@ -139,136 +147,135 @@ renderive_enable_qt_target(Renderive_Widget) renderive_apply_sanitizer(Renderive_Widget) if (YSGRAPHIC_CORE_BUILD_TESTS) -enable_testing() -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 was not found") -endif () + 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} -) -renderive_apply_sanitizer(${target}) -add_test(NAME Renderive.${test_name} COMMAND ${target}) -endfunction() + 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 was not found") + endif () -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 -) + 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} + ) + renderive_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(renderive_demo_root "${CMAKE_CURRENT_LIST_DIR}/Demo_Gallery") file(GLOB_RECURSE renderive_demo_sources CONFIGURE_DEPENDS -"${renderive_demo_root}/*.c" -"${renderive_demo_root}/*.cpp" -"${renderive_demo_root}/*.h" -"${renderive_demo_root}/*.hpp" + "${renderive_demo_root}/*.c" + "${renderive_demo_root}/*.cpp" + "${renderive_demo_root}/*.h" + "${renderive_demo_root}/*.hpp" ) add_library(Demo_Gallery_Lib STATIC ${renderive_demo_sources}) target_link_libraries(Demo_Gallery_Lib PUBLIC -Renderive -Renderive_Diagnostics -Renderive_Widget + Renderive + Renderive_Diagnostics + Renderive_Widget ) renderive_apply_sanitizer(Demo_Gallery_Lib) add_executable(Demo_Gallery "${CMAKE_CURRENT_LIST_DIR}/demo_gallery_main.cpp") target_link_libraries(Demo_Gallery PRIVATE Demo_Gallery_Lib) renderive_enable_qt_target(Demo_Gallery) -renderive_apply_sanitizer(Demo_Gallery) - +renderive_apply_sanitizer(Demo_Gallery) \ No newline at end of file