Skip to content

Commit c9e6912

Browse files
Merge pull request #402 from FlyAndNotDown/master
Feat: Misc Update
2 parents c69a700 + 5039ce7 commit c9e6912

File tree

24 files changed

+345
-59
lines changed

24 files changed

+345
-59
lines changed

.github/workflows/build.yml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,3 +57,6 @@ jobs:
5757
- name: Test
5858
working-directory: ${{github.workspace}}/build
5959
run: ctest -C ${{env.BUILD_TYPE}} --extra-verbose
60+
61+
- name: Install
62+
run: cmake --build ${{github.workspace}}/build --config ${{env.BUILD_TYPE}} --target install -j ${{env.MAKE_THREAD_NUM}}

CMake/Common.cmake

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,10 +16,18 @@ else ()
1616
set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/Lib)
1717
endif ()
1818

19+
if (${CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT})
20+
if (${GENERATOR_IS_MULTI_CONFIG})
21+
set(CMAKE_INSTALL_PREFIX ${CMAKE_BINARY_DIR}/Install/$<CONFIG> CACHE PATH "" FORCE)
22+
else ()
23+
set(CMAKE_INSTALL_PREFIX ${CMAKE_BINARY_DIR}/Install CACHE PATH "" FORCE)
24+
endif ()
25+
endif()
26+
1927
add_definitions(-DENGINE_CMAKE_SOURCE_DIRECTORY="${CMAKE_SOURCE_DIR}")
2028
add_definitions(-DENGINE_CMAKE_BINARY_DIRECTORY="${CMAKE_BINARY_DIR}")
2129

22-
add_definitions(-DBUILD_CONFIG_DEBUG=$<IF:$<CONFIG:Debug>,1,0>)
30+
add_definitions(-DBUILD_CONFIG_DEBUG=$<IF:$<OR:$<CONFIG:Debug>,$<CONFIG:RelWithDebInfo>>,1,0>)
2331

2432
add_definitions(-DPLATFORM_WINDOWS=$<IF:$<PLATFORM_ID:Windows>,1,0>)
2533
add_definitions(-DPLATFORM_LINUX=$<IF:$<PLATFORM_ID:Linux>,1,0>)

CMake/Target.cmake

Lines changed: 77 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -32,13 +32,13 @@ function(LinkLibraries)
3232

3333
foreach(L ${PARAMS_LIB})
3434
if (NOT (TARGET ${L}))
35-
target_link_libraries(${PARAMS_NAME} ${L})
35+
target_link_libraries(${PARAMS_NAME} PUBLIC ${L})
3636
continue()
3737
endif()
3838

3939
get_target_property(3RD_TYPE ${L} 3RD_TYPE)
4040
if (${3RD_TYPE} STREQUAL "3RD_TYPE-NOTFOUND")
41-
target_link_libraries(${PARAMS_NAME} ${L})
41+
target_link_libraries(${PARAMS_NAME} PUBLIC ${L})
4242
else()
4343
get_target_property(INCLUDE ${L} 3RD_INCLUDE)
4444
get_target_property(LINK ${L} 3RD_LINK)
@@ -51,7 +51,7 @@ function(LinkLibraries)
5151
target_link_directories(${PARAMS_NAME} PUBLIC ${LINK})
5252
endif()
5353
if (NOT ("${LIB}" STREQUAL "LIB-NOTFOUND"))
54-
target_link_libraries(${PARAMS_NAME} ${LIB})
54+
target_link_libraries(${PARAMS_NAME} PUBLIC ${LIB})
5555
endif()
5656

5757
if (${3RD_TYPE} STREQUAL "CMakeProject")
@@ -114,7 +114,7 @@ function(GetTargetRuntimeDependenciesRecurse)
114114
endfunction()
115115

116116
function(AddRuntimeDependenciesCopyCommand)
117-
cmake_parse_arguments(PARAMS "" "NAME" "" ${ARGN})
117+
cmake_parse_arguments(PARAMS "NOT_INSTALL" "NAME" "" ${ARGN})
118118

119119
GetTargetRuntimeDependenciesRecurse(
120120
NAME ${PARAMS_NAME}
@@ -127,21 +127,33 @@ function(AddRuntimeDependenciesCopyCommand)
127127
list(GET TEMP 0 SRC)
128128
list(GET TEMP 1 DST)
129129
set(COPY_COMMAND ${SRC} $<TARGET_FILE_DIR:${PARAMS_NAME}>/${DST})
130+
set(INSTALL_DST ${CMAKE_INSTALL_PREFIX}/Engine/Binaries/${DST})
130131
else ()
131132
set(SRC ${R})
132133
set(COPY_COMMAND ${SRC} $<TARGET_FILE_DIR:${PARAMS_NAME}>)
134+
set(INSTALL_DST ${CMAKE_INSTALL_PREFIX}/Engine/Binaries)
133135
endif ()
134136

135137
if (IS_DIRECTORY ${SRC})
136138
add_custom_command(
137139
TARGET ${PARAMS_NAME} POST_BUILD
138140
COMMAND ${CMAKE_COMMAND} -E copy_directory_if_different ${COPY_COMMAND}
139141
)
142+
if (NOT ${PARAMS_NOT_INSTALL})
143+
install(
144+
DIRECTORY ${SRC} DESTINATION ${INSTALL_DST}
145+
)
146+
endif ()
140147
else ()
141148
add_custom_command(
142149
TARGET ${PARAMS_NAME} POST_BUILD
143150
COMMAND ${CMAKE_COMMAND} -E copy_if_different ${COPY_COMMAND}
144151
)
152+
if (NOT ${PARAMS_NOT_INSTALL})
153+
install(
154+
FILES ${SRC} DESTINATION ${INSTALL_DST}
155+
)
156+
endif ()
145157
endif ()
146158
endforeach()
147159
endfunction()
@@ -158,7 +170,7 @@ function(ExpandResourcePathExpression)
158170
endfunction()
159171

160172
function(AddResourcesCopyCommand)
161-
cmake_parse_arguments(PARAMS "" "NAME" "RES" ${ARGN})
173+
cmake_parse_arguments(PARAMS "NOT_INSTALL" "NAME" "RES" ${ARGN})
162174

163175
foreach(R ${PARAMS_RES})
164176
ExpandResourcePathExpression(
@@ -167,13 +179,19 @@ function(AddResourcesCopyCommand)
167179
OUTPUT_DST DST
168180
)
169181

170-
list(APPEND COMMANDS COMMAND ${CMAKE_COMMAND} -E copy_if_different ${SRC} $<TARGET_FILE_DIR:${PARAMS_NAME}>/${DST})
182+
list(APPEND COPY_COMMANDS COMMAND ${CMAKE_COMMAND} -E copy_if_different ${SRC} $<TARGET_FILE_DIR:${PARAMS_NAME}>/${DST})
183+
184+
get_filename_component(ABSOLUTE_DST ${CMAKE_INSTALL_PREFIX}/Engine/Binaries/${DST} ABSOLUTE)
185+
get_filename_component(DST_DIR ${ABSOLUTE_DST} DIRECTORY)
186+
if (NOT ${PARAMS_NOT_INSTALL})
187+
install(FILES ${SRC} DESTINATION ${DST_DIR})
188+
endif ()
171189
endforeach()
172190

173191
set(COPY_RES_TARGET_NAME ${PARAMS_NAME}.CopyRes)
174192
add_custom_target(
175193
${COPY_RES_TARGET_NAME}
176-
${COMMANDS}
194+
${COPY_COMMANDS}
177195
)
178196
add_dependencies(${PARAMS_NAME} ${COPY_RES_TARGET_NAME})
179197
endfunction()
@@ -284,12 +302,18 @@ function(AddMirrorInfoSourceGenerationTarget)
284302
endfunction()
285303

286304
function(AddExecutable)
287-
cmake_parse_arguments(PARAMS "SAMPLE" "NAME" "SRC;INC;LINK;LIB;DEP_TARGET;RES;REFLECT" ${ARGN})
305+
cmake_parse_arguments(PARAMS "SAMPLE;NOT_INSTALL" "NAME" "SRC;INC;LINK;LIB;DEP_TARGET;RES;REFLECT" ${ARGN})
288306

289307
if (${PARAMS_SAMPLE} AND (NOT ${BUILD_SAMPLE}))
290308
return()
291309
endif()
292310

311+
if (${PARAMS_NOT_INSTALL})
312+
set(NOT_INSTALL_FLAG NOT_INSTALL)
313+
else ()
314+
set(NOT_INSTALL_FLAG "")
315+
endif ()
316+
293317
if (DEFINED PARAMS_REFLECT)
294318
AddMirrorInfoSourceGenerationTarget(
295319
NAME ${PARAMS_NAME}
@@ -324,10 +348,12 @@ function(AddExecutable)
324348
)
325349
AddRuntimeDependenciesCopyCommand(
326350
NAME ${PARAMS_NAME}
351+
${NOT_INSTALL_FLAG}
327352
)
328353
AddResourcesCopyCommand(
329354
NAME ${PARAMS_NAME}
330355
RES ${PARAMS_RES}
356+
${NOT_INSTALL_FLAG}
331357
)
332358
if (DEFINED PARAMS_DEP_TARGET)
333359
add_dependencies(${PARAMS_NAME} ${PARAMS_DEP_TARGET})
@@ -339,10 +365,21 @@ function(AddExecutable)
339365
if (${MSVC})
340366
set_target_properties(${PARAMS_NAME} PROPERTIES VS_DEBUGGER_WORKING_DIRECTORY ${CMAKE_RUNTIME_OUTPUT_DIRECTORY})
341367
endif()
368+
369+
if (NOT ${PARAMS_NOT_INSTALL})
370+
install(
371+
TARGETS ${PARAMS_NAME}
372+
RUNTIME DESTINATION ${CMAKE_INSTALL_PREFIX}/Engine/Binaries
373+
)
374+
375+
if (${CMAKE_SYSTEM_NAME} STREQUAL "Darwin")
376+
install(CODE "execute_process(COMMAND install_name_tool -add_rpath @executable_path ${CMAKE_INSTALL_PREFIX}/Engine/Binaries/$<TARGET_FILE_NAME:${PARAMS_NAME}>)")
377+
endif ()
378+
endif ()
342379
endfunction()
343380

344381
function(AddLibrary)
345-
cmake_parse_arguments(PARAMS "" "NAME;TYPE" "SRC;PRIVATE_INC;PUBLIC_INC;PRIVATE_LINK;LIB;REFLECT" ${ARGN})
382+
cmake_parse_arguments(PARAMS "NOT_INSTALL" "NAME;TYPE" "SRC;PRIVATE_INC;PUBLIC_INC;PRIVATE_LINK;LIB;REFLECT" ${ARGN})
346383

347384
if ("${PARAMS_TYPE}" STREQUAL "SHARED")
348385
list(APPEND PARAMS_PUBLIC_INC ${API_HEADER_DIR}/${PARAMS_NAME})
@@ -413,6 +450,35 @@ function(AddLibrary)
413450
if (DEFINED PARAMS_REFLECT)
414451
add_dependencies(${PARAMS_NAME} ${GENERATED_TARGET})
415452
endif()
453+
454+
if (NOT ${PARAMS_NOT_INSTALL})
455+
foreach (INC ${PARAMS_PUBLIC_INC})
456+
get_filename_component(ABSOLUTE_INC ${INC} ABSOLUTE)
457+
file(GLOB_RECURSE PUBLIC_HEADERS ${ABSOLUTE_INC}/*.h)
458+
target_sources(
459+
${PARAMS_NAME}
460+
PUBLIC FILE_SET HEADERS
461+
BASE_DIRS ${ABSOLUTE_INC} FILES ${PUBLIC_HEADERS}
462+
)
463+
endforeach ()
464+
465+
if (NOT ${CMAKE_SYSTEM_NAME} STREQUAL "Darwin" OR "${PARAMS_TYPE}" STREQUAL "STATIC")
466+
install(
467+
TARGETS ${PARAMS_NAME}
468+
FILE_SET HEADERS DESTINATION ${CMAKE_INSTALL_PREFIX}/Engine/Include
469+
ARCHIVE DESTINATION ${CMAKE_INSTALL_PREFIX}/Engine/Lib
470+
LIBRARY DESTINATION ${CMAKE_INSTALL_PREFIX}/Engine/Lib
471+
RUNTIME DESTINATION ${CMAKE_INSTALL_PREFIX}/Engine/Binaries
472+
)
473+
endif ()
474+
475+
if (${CMAKE_SYSTEM_NAME} STREQUAL "Darwin" AND "${PARAMS_TYPE}" STREQUAL "SHARED")
476+
install(
477+
FILES $<TARGET_FILE:${PARAMS_NAME}>
478+
DESTINATION ${CMAKE_INSTALL_PREFIX}/Engine/Binaries
479+
)
480+
endif ()
481+
endif ()
416482
endfunction()
417483

418484
function(AddTest)
@@ -456,10 +522,12 @@ function(AddTest)
456522
)
457523
AddRuntimeDependenciesCopyCommand(
458524
NAME ${PARAMS_NAME}
525+
NOT_INSTALL
459526
)
460527
AddResourcesCopyCommand(
461528
NAME ${PARAMS_NAME}
462529
RES ${PARAMS_RES}
530+
NOT_INSTALL
463531
)
464532
if (DEFINED PARAMS_DEP_TARGET)
465533
add_dependencies(${PARAMS_NAME} ${PARAMS_DEP_TARGET})

Editor/CMakeLists.txt

Lines changed: 38 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -9,20 +9,33 @@ qt_standard_project_setup(REQUIRES ${QT_VERSION})
99

1010
if (${CMAKE_SYSTEM_NAME} STREQUAL "Darwin")
1111
set(PLATFORM_EXECUTABLE_HINT MACOSX_BUNDLE)
12+
set(BUNDLE_INSTALL_DESTINATION BUNDLE DESTINATION ${CMAKE_INSTALL_PREFIX}/Engine/Binaries)
1213
endif ()
1314

1415
file(GLOB_RECURSE SOURCES Src/*.cpp)
1516
qt_add_executable(Editor ${PLATFORM_EXECUTABLE_HINT} ${SOURCES})
1617
target_include_directories(Editor PRIVATE Include)
1718
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)
19+
LinkLibraries(
20+
NAME Editor
21+
LIB Core RHI Runtime Qt6::Core Qt6::Gui Qt6::Widgets Qt6::Quick Qt6::WebEngineWidgets
22+
)
1923

2024
if (${CMAKE_SYSTEM_NAME} STREQUAL "Windows")
21-
set(PLATFORM_DEP_TARGET RHI-DirectX12 RHI-Vulkan)
25+
set(RHI_DEP_TARGETS RHI-DirectX12 RHI-Vulkan)
2226
else()
23-
set(PLATFORM_DEP_TARGET RHI-Vulkan)
27+
set(RHI_DEP_TARGETS RHI-Vulkan)
2428
endif()
25-
add_dependencies(Editor ${PLATFORM_DEP_TARGET})
29+
add_dependencies(Editor ${RHI_DEP_TARGETS})
30+
31+
AddRuntimeDependenciesCopyCommand(
32+
NAME Editor
33+
)
34+
install(
35+
TARGETS Editor
36+
RUNTIME DESTINATION ${CMAKE_INSTALL_PREFIX}/Engine/Binaries
37+
${BUNDLE_INSTALL_DESTINATION}
38+
)
2639

2740
if (${CMAKE_SYSTEM_NAME} STREQUAL "Windows")
2841
set(QT_WIN_DEPLOY_EXECUTABLE ${QT_LIB_PREFIX}/bin/windeployqt.exe)
@@ -42,11 +55,28 @@ if (${CMAKE_SYSTEM_NAME} STREQUAL "Windows")
4255
# -- QT 6.9.1 Temporal Fix End
4356
COMMAND ${QT_WIN_DEPLOY_EXECUTABLE} $<TARGET_FILE:Editor>
4457
)
58+
install(
59+
CODE "execute_process(COMMAND ${QT_WIN_DEPLOY_EXECUTABLE} ${CMAKE_INSTALL_PREFIX}/Engine/Binaries/$<TARGET_FILE_NAME:Editor>)"
60+
)
4561
elseif (${CMAKE_SYSTEM_NAME} STREQUAL "Darwin")
4662
set(QT_MAC_DEPLOY_EXECUTABLE ${QT_LIB_PREFIX}/bin/macdeployqt)
4763
add_custom_command(
4864
TARGET Editor POST_BUILD
49-
COMMAND ${QT_MAC_DEPLOY_EXECUTABLE} ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/Editor.app $<IF:$<CONFIG:Debug>,-no-strip,>
65+
COMMAND ${QT_MAC_DEPLOY_EXECUTABLE} ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/Editor.app -no-strip
66+
)
67+
install(
68+
CODE "execute_process(COMMAND ${QT_MAC_DEPLOY_EXECUTABLE} ${CMAKE_INSTALL_PREFIX}/Engine/Binaries/Editor.app -no-strip)"
69+
)
70+
endif ()
71+
72+
if (${CMAKE_SYSTEM_NAME} STREQUAL "Darwin")
73+
foreach (RHI_DEP_TARGET ${RHI_DEP_TARGETS})
74+
list(APPEND RHI_DEP_TARGET_COPY_COMMANDS COMMAND ${CMAKE_COMMAND} -E copy_if_different $<TARGET_FILE:${RHI_DEP_TARGET}> $<TARGET_FILE_DIR:Editor>/../Frameworks/$<TARGET_FILE_NAME:${RHI_DEP_TARGET}>)
75+
endforeach ()
76+
77+
add_custom_command(
78+
TARGET Editor POST_BUILD
79+
${RHI_DEP_TARGET_COPY_COMMANDS}
5080
)
5181
endif ()
5282

@@ -130,4 +160,7 @@ add_custom_command(
130160
TARGET Editor.Web POST_BUILD
131161
COMMAND ${CMAKE_COMMAND} -E copy_directory_if_different ${CMAKE_CURRENT_SOURCE_DIR}/Web/dist $<TARGET_FILE_DIR:Editor>/Web
132162
)
163+
if (NOT ${CMAKE_SYSTEM_NAME} STREQUAL "Darwin")
164+
install(CODE "execute_process(COMMAND ${CMAKE_COMMAND} -E copy_directory_if_different ${CMAKE_CURRENT_SOURCE_DIR}/Web/dist ${CMAKE_INSTALL_PREFIX}/Engine/Binaries/Web)")
165+
endif ()
133166
# ---- end web project -------------------------------------------------------------------------------

Editor/Include/Editor/WebUIServer.h

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,9 +16,13 @@ namespace Editor {
1616

1717
void Start();
1818
void Stop();
19+
const std::string& BaseUrl() const;
1920

2021
private:
21-
Common::UniquePtr<Common::NamedThread> serverThread;
22-
Common::UniquePtr<httplib::Server> server;
22+
WebUIServer();
23+
24+
std::string baseUrl;
25+
Common::UniquePtr<Common::NamedThread> productServerThread;
26+
Common::UniquePtr<httplib::Server> productServer;
2327
};
2428
}

Editor/Include/Editor/Widget/ProjectHub.h

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,12 +11,16 @@ namespace Editor {
1111

1212
class ProjectHubBridge final : public QObject {
1313
Q_OBJECT
14+
Q_PROPERTY(QString engineVersion MEMBER engineVersion CONSTANT)
1415

1516
public:
1617
explicit ProjectHubBridge(ProjectHub* parent = nullptr);
1718

1819
public Q_SLOTS:
1920
void CreateProject() const;
21+
22+
private:
23+
QString engineVersion;
2024
};
2125

2226
class ProjectHub final : public WebWidget {

Editor/Src/Main.cpp

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
//
44

55
#include <QApplication>
6+
#include <QNetworkProxy>
67

78
#include <Core/Cmdline.h>
89
#include <Runtime/Engine.h>
@@ -73,7 +74,10 @@ static void InitializePreQtApp(EditorApplicationModel inModel)
7374
Runtime::EngineHolder::Load("Editor", params);
7475
}
7576

76-
static void InitializePostQtApp() {}
77+
static void InitializePostQtApp()
78+
{
79+
QNetworkProxy::setApplicationProxy(QNetworkProxy::NoProxy);
80+
}
7781

7882
static void Cleanup(EditorApplicationModel inModel)
7983
{

0 commit comments

Comments
 (0)