Files
Renderive/main.cmake
T
2026-08-11 11:01:42 +08:00

168 lines
6.4 KiB
CMake

include_guard(GLOBAL)
#rcl_init("renderive")
#include(${CMAKE_CURRENT_LIST_DIR}/cmake/pthreads4w.cmake)
#include(${CMAKE_CURRENT_LIST_DIR}/cmake/datoviz.cmake)
set(renderive_dependencies
global::GTest
global::blend2d
global::taskflow
global::mpmcqueue
global::drogon
global::libdatachannel
# renderive::datoviz
${Psc_Core_dependencies}
)
#rcl_generate_registered_cmake_library()
rcl_load_dependency_environment(${renderive_dependencies})
library_is_installed_with_rely(renderive_dependencies_installed ${renderive_dependencies})
if (NOT renderive_dependencies_installed)
set(log "[FATAL_ERROR] Renderive 依赖未安装,请先构建 renderive_env 目标")
rcl_log_append("${log}")
rcl_add_dependency_action_targets(renderive_env ${renderive_dependencies})
return()
else ()
find_package(Drogon)
find_package(spdlog CONFIG REQUIRED)
find_package(LibDataChannel CONFIG REQUIRED)
endif ()
find_package(Qt5 MODULE REQUIRED COMPONENTS
Core Gui Widgets Svg Xml PrintSupport QuickWidgets Multimedia
)
find_package(blend2d REQUIRED)
find_package(GTest REQUIRED)
find_package(Taskflow CONFIG REQUIRED)
find_package(MPMCQueue CONFIG REQUIRED)
find_package(Threads REQUIRED)
set(qt_libraries
Qt5::Widgets
Qt5::Core
Qt5::Svg
Qt5::Xml
Qt5::PrintSupport
Qt5::Multimedia
Qt5::QuickWidgets
)
set(root_dir "${CMAKE_CURRENT_LIST_DIR}")
# Kernel is the only rendering architecture used by Core2.
add_library(Renderive_Kernel STATIC
"${root_dir}/Kernel/src/renderive/renderable/Renderable_Task_Graph.cpp"
"${root_dir}/Kernel/src/renderive/renderable/base/Renderable_Base.cpp"
"${root_dir}/Kernel/src/renderive/scene/base/Scene_Base.cpp"
)
target_include_directories(Renderive_Kernel PUBLIC "${root_dir}/Kernel/src")
target_compile_features(Renderive_Kernel PUBLIC cxx_std_20)
target_link_libraries(Renderive_Kernel PRIVATE Taskflow::Taskflow Threads::Threads)
file(GLOB_RECURSE renderive_core2_sources CONFIGURE_DEPENDS
"${root_dir}/Core2/*.cpp"
"${root_dir}/Core2/*.h"
"${root_dir}/Core2/*.hpp"
)
list(FILTER renderive_core2_sources EXCLUDE REGEX "[/\\\\]tests[/\\\\]")
add_library(Renderive_Core2 STATIC ${renderive_core2_sources})
target_include_directories(Renderive_Core2 PUBLIC "${root_dir}")
target_compile_features(Renderive_Core2 PUBLIC cxx_std_20)
target_link_libraries(Renderive_Core2
PUBLIC Renderive_Kernel
PRIVATE blend2d::blend2d
)
set(renderive_qt_sources
"${root_dir}/Qt/bridge/Qt_Event_Adapter.cpp"
"${root_dir}/Qt/bridge/Qt_Image_Adapter.cpp"
"${root_dir}/Qt/bridge/Qt_Presentation_Sink.cpp"
"${root_dir}/Qt/plot/Plot.cpp"
"${root_dir}/Qt/plot/Plot.h"
"${root_dir}/Qt/plot/Latency_Eager_Plot.cpp"
"${root_dir}/Qt/plot/Latency_Eager_Plot.h"
"${root_dir}/Qt/plot/Explicit_Plot.cpp"
"${root_dir}/Qt/plot/Explicit_Plot.h"
)
add_library(Renderive_Qt STATIC ${renderive_qt_sources})
set_property(TARGET Renderive_Qt PROPERTY AUTOMOC ON)
target_include_directories(Renderive_Qt PUBLIC "${root_dir}")
target_compile_features(Renderive_Qt PUBLIC cxx_std_20)
target_link_libraries(Renderive_Qt PUBLIC Renderive_Core2 ${qt_libraries})
unset(Psc_Widget_src)
append_glob_source(Psc_Widget_src "${root_dir}/Widget")
add_library(Psc_Widget STATIC ${Psc_Widget_src})
set_property(TARGET Psc_Widget PROPERTY AUTOMOC ON)
set_property(TARGET Psc_Widget PROPERTY AUTORCC ON)
target_link_libraries(Psc_Widget PUBLIC ${qt_libraries} Psc_Core_Static)
enable_testing()
file(GLOB_RECURSE renderive_kernel_test_sources CONFIGURE_DEPENDS
"${root_dir}/Kernel/tests/renderive/*.cpp"
)
add_executable(Renderive_Kernel_Tests EXCLUDE_FROM_ALL
"${root_dir}/Kernel/tests/main.cpp"
${renderive_kernel_test_sources}
)
target_compile_definitions(Renderive_Kernel_Tests PRIVATE RENDERIVE_WITH_GTEST)
target_link_libraries(Renderive_Kernel_Tests PRIVATE Renderive_Kernel GTest::GTest)
add_test(NAME Renderive_Kernel_Tests COMMAND Renderive_Kernel_Tests)
add_executable(Renderive_Core2_Tests EXCLUDE_FROM_ALL
"${root_dir}/Kernel/tests/main.cpp"
"${root_dir}/Core2/tests/Core2_Integration_Tests.cpp"
"${root_dir}/Core2/tests/Core2_Frame_Pipeline_Tests.cpp"
)
target_link_libraries(Renderive_Core2_Tests PRIVATE
Renderive_Core2
GTest::GTest
blend2d::blend2d
)
add_test(NAME Renderive_Core2_Tests COMMAND Renderive_Core2_Tests)
add_executable(Renderive_Qt_Tests EXCLUDE_FROM_ALL
"${root_dir}/Core2/tests/Qt_Bridge_Tests.cpp"
)
target_link_libraries(Renderive_Qt_Tests PRIVATE Renderive_Qt GTest::GTest)
get_filename_component(renderive_qt_runtime_root "${Qt5_DIR}/../../.." ABSOLUTE)
add_test(NAME Renderive_Qt_Tests
COMMAND "${CMAKE_COMMAND}" -E env
"PATH=${renderive_qt_runtime_root}/bin\;$ENV{PATH}"
"QT_QPA_PLATFORM=offscreen"
"QT_QPA_PLATFORM_PLUGIN_PATH=${renderive_qt_runtime_root}/plugins/platforms"
"$<TARGET_FILE:Renderive_Qt_Tests>"
)
if (MSVC)
target_compile_options(Renderive_Kernel PRIVATE /utf-8)
target_compile_options(Renderive_Core2 PRIVATE /utf-8)
target_compile_options(Renderive_Qt PRIVATE /utf-8)
endif ()
if (NOT TARGET Adminive::Nlohmann)
set(renderive_saved_build_testing "${BUILD_TESTING}")
set(BUILD_TESTING OFF)
add_subdirectory("${root_dir}/../Adminive"
"${CMAKE_CURRENT_BINARY_DIR}/third_party/Adminive"
EXCLUDE_FROM_ALL)
set(BUILD_TESTING "${renderive_saved_build_testing}")
unset(renderive_saved_build_testing)
endif ()
include(${CMAKE_CURRENT_LIST_DIR}/web.cmake)
set(renderive_package_includes
"^.*$"
)
set(renderive_package_excludes
# "^[.]git/.*$"
# "^[.]idea/.*$"
"^data/.*$"
"^performance/.*$"
"^cmake-build-[^/]*/.*$"
"^(.*/)?node_modules/.*$"
"^(.*/)?.git/.*$"
"^(.*/)?wwwroot/.*$"
"^(.*/)?dist/.*$"
"^(.*/)?htdocs/.*$"
"^(.*/)?model/.*$"
"^(.*/)?.idea/.*$"
"^(.*/)?.playwright-cli/.*$"
"^(.*/)?performance/.*$"
"^(.*/)?dll_source_lzy/.*$"
"^.*[.]tsbuildinfo$"
"^.*[.]zip$"
"^.*[.]otf$"
)
_add_project_zip_target(
renderive_package_zip
"${CMAKE_CURRENT_LIST_DIR}/renderive_package.zip"
"${CMAKE_SOURCE_DIR}"
renderive_package_includes
renderive_package_excludes
)