11set (CMAKE_PREFIX_PATH ${QT_LIB_PREFIX} )
22find_package (
33 Qt6 ${QT_VERSION}
4- COMPONENTS Core Gui Widgets Quick
4+ COMPONENTS Core Gui Widgets Quick WebEngineWidgets
55 REQUIRED
66)
77
88qt_standard_project_setup (REQUIRES ${QT_VERSION} )
99
10+ if (${CMAKE_SYSTEM_NAME} STREQUAL "Darwin" )
11+ set (PLATFORM_EXECUTABLE_HINT MACOSX_BUNDLE )
12+ endif ()
13+
1014file (GLOB_RECURSE SOURCES Src/*.cpp )
11- qt_add_executable (Editor ${SOURCES} )
15+ qt_add_executable (Editor ${PLATFORM_EXECUTABLE_HINT} ${ SOURCES} )
1216target_include_directories (Editor PRIVATE Include )
13- target_link_libraries (Editor PRIVATE Core RHI Runtime Qt6::Core Qt6::Gui Qt6::Widgets Qt6::Quick )
17+ target_include_directories (Editor PRIVATE ${CPP_HTTP_LIB_SOURCE_DIR} )
18+ target_link_libraries (Editor PRIVATE Core RHI Runtime Qt6::Core Qt6::Gui Qt6::Widgets Qt6::Quick Qt6::WebEngineWidgets )
1419
1520if (${CMAKE_SYSTEM_NAME} STREQUAL "Windows" )
1621 set (PLATFORM_DEP_TARGET RHI-DirectX12 RHI-Vulkan)
@@ -21,10 +26,26 @@ add_dependencies(Editor ${PLATFORM_DEP_TARGET})
2126
2227if (${CMAKE_SYSTEM_NAME} STREQUAL "Windows" )
2328 set (QT_WIN_DEPLOY_EXECUTABLE ${QT_LIB_PREFIX} /bin/windeployqt.exe)
24- set (QT_BUILDIN_QML_DIRECTORY ${QT_LIB_PREFIX} /qml)
2529 add_custom_command (
2630 TARGET Editor POST_BUILD
27- COMMAND ${QT_WIN_DEPLOY_EXECUTABLE} $<TARGET_FILE :Editor > --qmldir ${QT_BUILDIN_QML_DIRECTORY} --verbose 0
31+ # ++ QT 6.9.1 Temporal Fix Start
32+ # #see https://bugreports.qt.io/browse/QTBUG-137542
33+ COMMAND ${CMAKE_COMMAND} -E copy_if_different ${QT_LIB_PREFIX} /resources/qtwebengine_devtools_resources.pak ${QT_LIB_PREFIX} /resources/qtwebengine_devtools_resources.debug.pak
34+ COMMAND ${CMAKE_COMMAND} -E copy_if_different ${QT_LIB_PREFIX} /resources/qtwebengine_resources.pak ${QT_LIB_PREFIX} /resources/qtwebengine_resources.debug.pak
35+ COMMAND ${CMAKE_COMMAND} -E copy_if_different ${QT_LIB_PREFIX} /resources/qtwebengine_resources_100p.pak ${QT_LIB_PREFIX} /resources/qtwebengine_resources_100p.debug.pak
36+ COMMAND ${CMAKE_COMMAND} -E copy_if_different ${QT_LIB_PREFIX} /resources/qtwebengine_resources_200p.pak ${QT_LIB_PREFIX} /resources/qtwebengine_resources_200p.debug.pak
37+ COMMAND ${CMAKE_COMMAND} -E copy_if_different ${QT_LIB_PREFIX} /resources/qtwebengine_devtools_resources.pak ${CMAKE_RUNTIME_OUTPUT_DIRECTORY} /resources/qtwebengine_devtools_resources.pak
38+ COMMAND ${CMAKE_COMMAND} -E copy_if_different ${QT_LIB_PREFIX} /resources/qtwebengine_resources.pak ${CMAKE_RUNTIME_OUTPUT_DIRECTORY} /resources/qtwebengine_resources.pak
39+ COMMAND ${CMAKE_COMMAND} -E copy_if_different ${QT_LIB_PREFIX} /resources/qtwebengine_resources_100p.pak ${CMAKE_RUNTIME_OUTPUT_DIRECTORY} /resources/qtwebengine_resources_100p.pak
40+ COMMAND ${CMAKE_COMMAND} -E copy_if_different ${QT_LIB_PREFIX} /resources/qtwebengine_resources_200p.pak ${CMAKE_RUNTIME_OUTPUT_DIRECTORY} /resources/qtwebengine_resources_200p.pak
41+ # -- QT 6.9.1 Temporal Fix End
42+ COMMAND ${QT_WIN_DEPLOY_EXECUTABLE} $<TARGET_FILE :Editor >
43+ )
44+ elseif (${CMAKE_SYSTEM_NAME} STREQUAL "Darwin" )
45+ set (QT_MAC_DEPLOY_EXECUTABLE ${QT_LIB_PREFIX} /bin/macdeployqt)
46+ add_custom_command (
47+ TARGET Editor POST_BUILD
48+ COMMAND ${QT_MAC_DEPLOY_EXECUTABLE} ${CMAKE_RUNTIME_OUTPUT_DIRECTORY} /Editor.app $<IF :$<CONFIG :Debug >,-no -strip ,>
2849 )
2950endif ()
3051
@@ -47,38 +68,65 @@ AddResourcesCopyCommand(
4768)
4869# ---- end shaders -----------------------------------------------------------------------------------
4970
71+ # ---- begin web project -----------------------------------------------------------------------------
72+ set (NODEJS_HOME ${3RD_SOURCE_DIR} /Nodejs-${CMAKE_SYSTEM_NAME} -${NODEJS_VERSION} )
73+ if (${CMAKE_SYSTEM_NAME} STREQUAL "Windows" )
74+ set (NODEJS_PATH ${NODEJS_HOME} )
75+ set (NPM_EXECUTABLE npm.cmd)
76+ elseif (${CMAKE_SYSTEM_NAME} STREQUAL "Darwin" )
77+ set (NODEJS_BIN_PATH ${NODEJS_HOME} /bin)
78+ set (NODEJS_MODULES_PATH ${NODEJS_HOME} /lib/node_modules)
79+ file (REMOVE ${NODEJS_BIN_PATH} /corepack )
80+ file (REMOVE ${NODEJS_BIN_PATH} /npm )
81+ file (REMOVE ${NODEJS_BIN_PATH} /npx )
82+ execute_process (
83+ COMMAND ln -s ${NODEJS_MODULES_PATH} ${NODEJS_BIN_PATH} /node_modules
84+ RESULT_VARIABLE LINK_RESULT
85+ OUTPUT_VARIABLE LINK_OUTPUT
86+ ERROR_VARIABLE LINK_ERROR
87+ )
88+ execute_process (
89+ COMMAND ln -s ${NODEJS_MODULES_PATH} /npm/bin/npm ${NODEJS_BIN_PATH} /npm
90+ RESULT_VARIABLE LINK_RESULT
91+ OUTPUT_VARIABLE LINK_OUTPUT
92+ ERROR_VARIABLE LINK_ERROR
93+ )
94+ execute_process (
95+ COMMAND ln -s ${NODEJS_MODULES_PATH} /npm/bin/npx ${NODEJS_BIN_PATH} /npx
96+ RESULT_VARIABLE LINK_RESULT
97+ OUTPUT_VARIABLE LINK_OUTPUT
98+ ERROR_VARIABLE LINK_ERROR
99+ )
100+ set (NODEJS_PATH "$ENV{PATH} :${NODEJS_BIN_PATH} " )
101+ set (NPM_EXECUTABLE npm)
102+ else ()
103+ message (FATAL_ERROR "Unsupported OS" )
104+ endif ()
50105
51- # ---- begin qml -------------------------------------------------------------------------------------
52- set (EDITOR_QML_ROOT ${CMAKE_CURRENT_SOURCE_DIR} /Qml)
53- set (EDITOR_RESOURCE_ROOT ${CMAKE_CURRENT_SOURCE_DIR} /Resource)
54- get_filename_component (EDITOR_RESOURCE_ROOT_ABSOLUTE ${EDITOR_RESOURCE_ROOT} ABSOLUTE )
55-
56- file (GLOB QML_SOURCES ${EDITOR_QML_ROOT} /*.qml )
57-
58- list (
59- APPEND SINGLETON_QML_SOURCES
60- ETheme.qml)
61- target_compile_definitions (Editor PRIVATE -DSINGLETON_QML_SOURCES= "${SINGLETON_QML_SOURCES} " )
62-
63- # QML only support placed in root dir
64- foreach (QML_SOURCE ${QML_SOURCES} )
65- get_filename_component (ALIAS ${QML_SOURCE} NAME )
66- set_source_files_properties (${QML_SOURCE} PROPERTIES QT_RESOURCE_ALIAS ${ALIAS} )
67- if (${ALIAS} IN_LIST SINGLETON_QML_SOURCES)
68- set_source_files_properties (${QML_SOURCE} PROPERTIES QT_QML_SINGLETON_TYPE true )
69- endif ()
70- endforeach ()
106+ message ("Perform web project npm install......" )
107+ execute_process (
108+ COMMAND ${CMAKE_COMMAND} -E env PATH =${NODEJS_PATH} ${NPM_EXECUTABLE} install --no-fund --registry=https://registry.npmmirror.com
109+ WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} /Web
110+ RESULT_VARIABLE NPM_INSTALL_RESULT
111+ OUTPUT_VARIABLE NPM_INSTALL_OUTPUT
112+ ERROR_VARIABLE NPM_INSTALL_ERROR
113+ )
114+ if (${NPM_INSTALL_RESULT} STREQUAL "0" )
115+ message (${NPM_INSTALL_OUTPUT} )
116+ else ()
117+ message (FATAL_ERROR ${NPM_INSTALL_ERROR} )
118+ endif ()
71119
72- add_custom_command (
73- TARGET Editor POST_BUILD
74- COMMAND ${CMAKE_COMMAND} -E copy_directory_if_different ${EDITOR_RESOURCE_ROOT_ABSOLUTE} ${CMAKE_RUNTIME_OUTPUT_DIRECTORY} /../Resource
120+ add_custom_target (
121+ Editor.Web
122+ COMMAND ${CMAKE_COMMAND} -E env PATH =${NODEJS_PATH} ${NPM_EXECUTABLE} run build
123+ WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} /Web
124+ VERBATIM
75125)
126+ add_dependencies (Editor Editor.Web )
76127
77- qt_add_qml_module (
78- Editor
79- NO_CACHEGEN
80- URI editor
81- QML_FILES ${QML_SOURCES}
82- OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR} /Generated/QmlModule
128+ add_custom_command (
129+ TARGET Editor.Web POST_BUILD
130+ COMMAND ${CMAKE_COMMAND} -E copy_directory_if_different ${CMAKE_CURRENT_SOURCE_DIR} /Web/dist $<TARGET_FILE_DIR :Editor >/Web
83131)
84- # ---- end qml -------- -------------------------------------------------------------------------------
132+ # ---- end web project -------------------------------------------------------------------------------
0 commit comments