178 lines
6.5 KiB
CMake
178 lines
6.5 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()
|
|
|
|
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()
|
|
endif ()
|
|
rcl_load_dependency_environment(${renderive_dependencies})
|
|
find_package(Drogon)
|
|
find_package(spdlog CONFIG REQUIRED)
|
|
find_package(LibDataChannel CONFIG REQUIRED)
|
|
|
|
|
|
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)
|
|
|
|
|
|
if (CMAKE_CURRENT_LIST_DIR STREQUAL CMAKE_SOURCE_DIR)
|
|
set(3rd_dir "${CMAKE_SOURCE_DIR}/third_party")
|
|
else ()
|
|
set(3rd_dir "${root_dir}/..")
|
|
endif ()
|
|
|
|
add_subdirectory("${3rd_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
|
|
) |