Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
21 commits
Select commit Hold shift + click to select a range
7d67d42
feat: add web ui start up log
FlyAndNotDown Aug 12, 2025
e5f538e
feat: disable qt default application proxy
FlyAndNotDown Aug 12, 2025
e8b9e00
feat: add more 3rd package to README
FlyAndNotDown Aug 12, 2025
7a0af9e
feat: project hub update
FlyAndNotDown Aug 12, 2025
8778cb4
feat: support cmake install
FlyAndNotDown Aug 15, 2025
6eec356
feat: update project hub
FlyAndNotDown Aug 15, 2025
f3e6b95
fix: macos bundle cmake install
FlyAndNotDown Aug 16, 2025
d184462
fix: support debug for macos with RelWithDebInfo config
FlyAndNotDown Aug 16, 2025
ec9f82f
fix: macos command line tools rpath issue after install
FlyAndNotDown Aug 16, 2025
4028d31
fix: macos editor app bundle run issue on release config
FlyAndNotDown Aug 16, 2025
d2a00cc
refactor: use current executable path to calculate engine root for be…
FlyAndNotDown Aug 16, 2025
d7b9116
fix: use executable path to get web root in product mode
FlyAndNotDown Aug 16, 2025
0d9ac28
fix: macos dylib install twice issue
FlyAndNotDown Aug 16, 2025
617c49d
refactor: use executable path to search module
FlyAndNotDown Aug 16, 2025
62272ff
feat: support debug in RelWithDebInfo config
FlyAndNotDown Aug 16, 2025
a22834a
fix: macos SSAO sample crash
FlyAndNotDown Aug 16, 2025
00196e5
feat: auto copy RHI dylib to app bundle
FlyAndNotDown Aug 16, 2025
f61c20d
fix: cmdline test
FlyAndNotDown Aug 16, 2025
b7ce95f
fix: macos app bundle sign issue
FlyAndNotDown Aug 16, 2025
1dbcdba
ci: cmake install test on CI
FlyAndNotDown Aug 16, 2025
5039ce7
feat: auto install web project
FlyAndNotDown Aug 16, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions .github/workflows/build.yml
Original file line number Diff line number Diff line change
Expand Up @@ -57,3 +57,6 @@ jobs:
- name: Test
working-directory: ${{github.workspace}}/build
run: ctest -C ${{env.BUILD_TYPE}} --extra-verbose

- name: Install
run: cmake --build ${{github.workspace}}/build --config ${{env.BUILD_TYPE}} --target install -j ${{env.MAKE_THREAD_NUM}}
10 changes: 9 additions & 1 deletion CMake/Common.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -16,10 +16,18 @@ else ()
set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/Lib)
endif ()

if (${CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT})
if (${GENERATOR_IS_MULTI_CONFIG})
set(CMAKE_INSTALL_PREFIX ${CMAKE_BINARY_DIR}/Install/$<CONFIG> CACHE PATH "" FORCE)
else ()
set(CMAKE_INSTALL_PREFIX ${CMAKE_BINARY_DIR}/Install CACHE PATH "" FORCE)
endif ()
endif()

add_definitions(-DENGINE_CMAKE_SOURCE_DIRECTORY="${CMAKE_SOURCE_DIR}")
add_definitions(-DENGINE_CMAKE_BINARY_DIRECTORY="${CMAKE_BINARY_DIR}")

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

add_definitions(-DPLATFORM_WINDOWS=$<IF:$<PLATFORM_ID:Windows>,1,0>)
add_definitions(-DPLATFORM_LINUX=$<IF:$<PLATFORM_ID:Linux>,1,0>)
Expand Down
86 changes: 77 additions & 9 deletions CMake/Target.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -32,13 +32,13 @@ function(LinkLibraries)

foreach(L ${PARAMS_LIB})
if (NOT (TARGET ${L}))
target_link_libraries(${PARAMS_NAME} ${L})
target_link_libraries(${PARAMS_NAME} PUBLIC ${L})
continue()
endif()

get_target_property(3RD_TYPE ${L} 3RD_TYPE)
if (${3RD_TYPE} STREQUAL "3RD_TYPE-NOTFOUND")
target_link_libraries(${PARAMS_NAME} ${L})
target_link_libraries(${PARAMS_NAME} PUBLIC ${L})
else()
get_target_property(INCLUDE ${L} 3RD_INCLUDE)
get_target_property(LINK ${L} 3RD_LINK)
Expand All @@ -51,7 +51,7 @@ function(LinkLibraries)
target_link_directories(${PARAMS_NAME} PUBLIC ${LINK})
endif()
if (NOT ("${LIB}" STREQUAL "LIB-NOTFOUND"))
target_link_libraries(${PARAMS_NAME} ${LIB})
target_link_libraries(${PARAMS_NAME} PUBLIC ${LIB})
endif()

if (${3RD_TYPE} STREQUAL "CMakeProject")
Expand Down Expand Up @@ -114,7 +114,7 @@ function(GetTargetRuntimeDependenciesRecurse)
endfunction()

function(AddRuntimeDependenciesCopyCommand)
cmake_parse_arguments(PARAMS "" "NAME" "" ${ARGN})
cmake_parse_arguments(PARAMS "NOT_INSTALL" "NAME" "" ${ARGN})

GetTargetRuntimeDependenciesRecurse(
NAME ${PARAMS_NAME}
Expand All @@ -127,21 +127,33 @@ function(AddRuntimeDependenciesCopyCommand)
list(GET TEMP 0 SRC)
list(GET TEMP 1 DST)
set(COPY_COMMAND ${SRC} $<TARGET_FILE_DIR:${PARAMS_NAME}>/${DST})
set(INSTALL_DST ${CMAKE_INSTALL_PREFIX}/Engine/Binaries/${DST})
else ()
set(SRC ${R})
set(COPY_COMMAND ${SRC} $<TARGET_FILE_DIR:${PARAMS_NAME}>)
set(INSTALL_DST ${CMAKE_INSTALL_PREFIX}/Engine/Binaries)
endif ()

if (IS_DIRECTORY ${SRC})
add_custom_command(
TARGET ${PARAMS_NAME} POST_BUILD
COMMAND ${CMAKE_COMMAND} -E copy_directory_if_different ${COPY_COMMAND}
)
if (NOT ${PARAMS_NOT_INSTALL})
install(
DIRECTORY ${SRC} DESTINATION ${INSTALL_DST}
)
endif ()
else ()
add_custom_command(
TARGET ${PARAMS_NAME} POST_BUILD
COMMAND ${CMAKE_COMMAND} -E copy_if_different ${COPY_COMMAND}
)
if (NOT ${PARAMS_NOT_INSTALL})
install(
FILES ${SRC} DESTINATION ${INSTALL_DST}
)
endif ()
endif ()
endforeach()
endfunction()
Expand All @@ -158,7 +170,7 @@ function(ExpandResourcePathExpression)
endfunction()

function(AddResourcesCopyCommand)
cmake_parse_arguments(PARAMS "" "NAME" "RES" ${ARGN})
cmake_parse_arguments(PARAMS "NOT_INSTALL" "NAME" "RES" ${ARGN})

foreach(R ${PARAMS_RES})
ExpandResourcePathExpression(
Expand All @@ -167,13 +179,19 @@ function(AddResourcesCopyCommand)
OUTPUT_DST DST
)

list(APPEND COMMANDS COMMAND ${CMAKE_COMMAND} -E copy_if_different ${SRC} $<TARGET_FILE_DIR:${PARAMS_NAME}>/${DST})
list(APPEND COPY_COMMANDS COMMAND ${CMAKE_COMMAND} -E copy_if_different ${SRC} $<TARGET_FILE_DIR:${PARAMS_NAME}>/${DST})

get_filename_component(ABSOLUTE_DST ${CMAKE_INSTALL_PREFIX}/Engine/Binaries/${DST} ABSOLUTE)
get_filename_component(DST_DIR ${ABSOLUTE_DST} DIRECTORY)
if (NOT ${PARAMS_NOT_INSTALL})
install(FILES ${SRC} DESTINATION ${DST_DIR})
endif ()
endforeach()

set(COPY_RES_TARGET_NAME ${PARAMS_NAME}.CopyRes)
add_custom_target(
${COPY_RES_TARGET_NAME}
${COMMANDS}
${COPY_COMMANDS}
)
add_dependencies(${PARAMS_NAME} ${COPY_RES_TARGET_NAME})
endfunction()
Expand Down Expand Up @@ -284,12 +302,18 @@ function(AddMirrorInfoSourceGenerationTarget)
endfunction()

function(AddExecutable)
cmake_parse_arguments(PARAMS "SAMPLE" "NAME" "SRC;INC;LINK;LIB;DEP_TARGET;RES;REFLECT" ${ARGN})
cmake_parse_arguments(PARAMS "SAMPLE;NOT_INSTALL" "NAME" "SRC;INC;LINK;LIB;DEP_TARGET;RES;REFLECT" ${ARGN})

if (${PARAMS_SAMPLE} AND (NOT ${BUILD_SAMPLE}))
return()
endif()

if (${PARAMS_NOT_INSTALL})
set(NOT_INSTALL_FLAG NOT_INSTALL)
else ()
set(NOT_INSTALL_FLAG "")
endif ()

if (DEFINED PARAMS_REFLECT)
AddMirrorInfoSourceGenerationTarget(
NAME ${PARAMS_NAME}
Expand Down Expand Up @@ -324,10 +348,12 @@ function(AddExecutable)
)
AddRuntimeDependenciesCopyCommand(
NAME ${PARAMS_NAME}
${NOT_INSTALL_FLAG}
)
AddResourcesCopyCommand(
NAME ${PARAMS_NAME}
RES ${PARAMS_RES}
${NOT_INSTALL_FLAG}
)
if (DEFINED PARAMS_DEP_TARGET)
add_dependencies(${PARAMS_NAME} ${PARAMS_DEP_TARGET})
Expand All @@ -339,10 +365,21 @@ function(AddExecutable)
if (${MSVC})
set_target_properties(${PARAMS_NAME} PROPERTIES VS_DEBUGGER_WORKING_DIRECTORY ${CMAKE_RUNTIME_OUTPUT_DIRECTORY})
endif()

if (NOT ${PARAMS_NOT_INSTALL})
install(
TARGETS ${PARAMS_NAME}
RUNTIME DESTINATION ${CMAKE_INSTALL_PREFIX}/Engine/Binaries
)

if (${CMAKE_SYSTEM_NAME} STREQUAL "Darwin")
install(CODE "execute_process(COMMAND install_name_tool -add_rpath @executable_path ${CMAKE_INSTALL_PREFIX}/Engine/Binaries/$<TARGET_FILE_NAME:${PARAMS_NAME}>)")
endif ()
endif ()
endfunction()

function(AddLibrary)
cmake_parse_arguments(PARAMS "" "NAME;TYPE" "SRC;PRIVATE_INC;PUBLIC_INC;PRIVATE_LINK;LIB;REFLECT" ${ARGN})
cmake_parse_arguments(PARAMS "NOT_INSTALL" "NAME;TYPE" "SRC;PRIVATE_INC;PUBLIC_INC;PRIVATE_LINK;LIB;REFLECT" ${ARGN})

if ("${PARAMS_TYPE}" STREQUAL "SHARED")
list(APPEND PARAMS_PUBLIC_INC ${API_HEADER_DIR}/${PARAMS_NAME})
Expand Down Expand Up @@ -413,6 +450,35 @@ function(AddLibrary)
if (DEFINED PARAMS_REFLECT)
add_dependencies(${PARAMS_NAME} ${GENERATED_TARGET})
endif()

if (NOT ${PARAMS_NOT_INSTALL})
foreach (INC ${PARAMS_PUBLIC_INC})
get_filename_component(ABSOLUTE_INC ${INC} ABSOLUTE)
file(GLOB_RECURSE PUBLIC_HEADERS ${ABSOLUTE_INC}/*.h)
target_sources(
${PARAMS_NAME}
PUBLIC FILE_SET HEADERS
BASE_DIRS ${ABSOLUTE_INC} FILES ${PUBLIC_HEADERS}
)
endforeach ()

if (NOT ${CMAKE_SYSTEM_NAME} STREQUAL "Darwin" OR "${PARAMS_TYPE}" STREQUAL "STATIC")
install(
TARGETS ${PARAMS_NAME}
FILE_SET HEADERS DESTINATION ${CMAKE_INSTALL_PREFIX}/Engine/Include
ARCHIVE DESTINATION ${CMAKE_INSTALL_PREFIX}/Engine/Lib
LIBRARY DESTINATION ${CMAKE_INSTALL_PREFIX}/Engine/Lib
RUNTIME DESTINATION ${CMAKE_INSTALL_PREFIX}/Engine/Binaries
)
endif ()

if (${CMAKE_SYSTEM_NAME} STREQUAL "Darwin" AND "${PARAMS_TYPE}" STREQUAL "SHARED")
install(
FILES $<TARGET_FILE:${PARAMS_NAME}>
DESTINATION ${CMAKE_INSTALL_PREFIX}/Engine/Binaries
)
endif ()
endif ()
endfunction()

function(AddTest)
Expand Down Expand Up @@ -456,10 +522,12 @@ function(AddTest)
)
AddRuntimeDependenciesCopyCommand(
NAME ${PARAMS_NAME}
NOT_INSTALL
)
AddResourcesCopyCommand(
NAME ${PARAMS_NAME}
RES ${PARAMS_RES}
NOT_INSTALL
)
if (DEFINED PARAMS_DEP_TARGET)
add_dependencies(${PARAMS_NAME} ${PARAMS_DEP_TARGET})
Expand Down
43 changes: 38 additions & 5 deletions Editor/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -9,20 +9,33 @@ qt_standard_project_setup(REQUIRES ${QT_VERSION})

if (${CMAKE_SYSTEM_NAME} STREQUAL "Darwin")
set(PLATFORM_EXECUTABLE_HINT MACOSX_BUNDLE)
set(BUNDLE_INSTALL_DESTINATION BUNDLE DESTINATION ${CMAKE_INSTALL_PREFIX}/Engine/Binaries)
endif ()

file(GLOB_RECURSE SOURCES Src/*.cpp)
qt_add_executable(Editor ${PLATFORM_EXECUTABLE_HINT} ${SOURCES})
target_include_directories(Editor PRIVATE Include)
target_include_directories(Editor PRIVATE ${CPP_HTTP_LIB_SOURCE_DIR})
target_link_libraries(Editor PRIVATE Core RHI Runtime Qt6::Core Qt6::Gui Qt6::Widgets Qt6::Quick Qt6::WebEngineWidgets)
LinkLibraries(
NAME Editor
LIB Core RHI Runtime Qt6::Core Qt6::Gui Qt6::Widgets Qt6::Quick Qt6::WebEngineWidgets
)

if (${CMAKE_SYSTEM_NAME} STREQUAL "Windows")
set(PLATFORM_DEP_TARGET RHI-DirectX12 RHI-Vulkan)
set(RHI_DEP_TARGETS RHI-DirectX12 RHI-Vulkan)
else()
set(PLATFORM_DEP_TARGET RHI-Vulkan)
set(RHI_DEP_TARGETS RHI-Vulkan)
endif()
add_dependencies(Editor ${PLATFORM_DEP_TARGET})
add_dependencies(Editor ${RHI_DEP_TARGETS})

AddRuntimeDependenciesCopyCommand(
NAME Editor
)
install(
TARGETS Editor
RUNTIME DESTINATION ${CMAKE_INSTALL_PREFIX}/Engine/Binaries
${BUNDLE_INSTALL_DESTINATION}
)

if (${CMAKE_SYSTEM_NAME} STREQUAL "Windows")
set(QT_WIN_DEPLOY_EXECUTABLE ${QT_LIB_PREFIX}/bin/windeployqt.exe)
Expand All @@ -42,11 +55,28 @@ if (${CMAKE_SYSTEM_NAME} STREQUAL "Windows")
# -- QT 6.9.1 Temporal Fix End
COMMAND ${QT_WIN_DEPLOY_EXECUTABLE} $<TARGET_FILE:Editor>
)
install(
CODE "execute_process(COMMAND ${QT_WIN_DEPLOY_EXECUTABLE} ${CMAKE_INSTALL_PREFIX}/Engine/Binaries/$<TARGET_FILE_NAME:Editor>)"
)
elseif (${CMAKE_SYSTEM_NAME} STREQUAL "Darwin")
set(QT_MAC_DEPLOY_EXECUTABLE ${QT_LIB_PREFIX}/bin/macdeployqt)
add_custom_command(
TARGET Editor POST_BUILD
COMMAND ${QT_MAC_DEPLOY_EXECUTABLE} ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/Editor.app $<IF:$<CONFIG:Debug>,-no-strip,>
COMMAND ${QT_MAC_DEPLOY_EXECUTABLE} ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/Editor.app -no-strip
)
install(
CODE "execute_process(COMMAND ${QT_MAC_DEPLOY_EXECUTABLE} ${CMAKE_INSTALL_PREFIX}/Engine/Binaries/Editor.app -no-strip)"
)
endif ()

if (${CMAKE_SYSTEM_NAME} STREQUAL "Darwin")
foreach (RHI_DEP_TARGET ${RHI_DEP_TARGETS})
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}>)
endforeach ()

add_custom_command(
TARGET Editor POST_BUILD
${RHI_DEP_TARGET_COPY_COMMANDS}
)
endif ()

Expand Down Expand Up @@ -130,4 +160,7 @@ add_custom_command(
TARGET Editor.Web POST_BUILD
COMMAND ${CMAKE_COMMAND} -E copy_directory_if_different ${CMAKE_CURRENT_SOURCE_DIR}/Web/dist $<TARGET_FILE_DIR:Editor>/Web
)
if (NOT ${CMAKE_SYSTEM_NAME} STREQUAL "Darwin")
install(CODE "execute_process(COMMAND ${CMAKE_COMMAND} -E copy_directory_if_different ${CMAKE_CURRENT_SOURCE_DIR}/Web/dist ${CMAKE_INSTALL_PREFIX}/Engine/Binaries/Web)")
endif ()
# ---- end web project -------------------------------------------------------------------------------
8 changes: 6 additions & 2 deletions Editor/Include/Editor/WebUIServer.h
Original file line number Diff line number Diff line change
Expand Up @@ -16,9 +16,13 @@ namespace Editor {

void Start();
void Stop();
const std::string& BaseUrl() const;

private:
Common::UniquePtr<Common::NamedThread> serverThread;
Common::UniquePtr<httplib::Server> server;
WebUIServer();

std::string baseUrl;
Common::UniquePtr<Common::NamedThread> productServerThread;
Common::UniquePtr<httplib::Server> productServer;
};
}
4 changes: 4 additions & 0 deletions Editor/Include/Editor/Widget/ProjectHub.h
Original file line number Diff line number Diff line change
Expand Up @@ -11,12 +11,16 @@ namespace Editor {

class ProjectHubBridge final : public QObject {
Q_OBJECT
Q_PROPERTY(QString engineVersion MEMBER engineVersion CONSTANT)

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

public Q_SLOTS:
void CreateProject() const;

private:
QString engineVersion;
};

class ProjectHub final : public WebWidget {
Expand Down
6 changes: 5 additions & 1 deletion Editor/Src/Main.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
//

#include <QApplication>
#include <QNetworkProxy>

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

static void InitializePostQtApp() {}
static void InitializePostQtApp()
{
QNetworkProxy::setApplicationProxy(QNetworkProxy::NoProxy);
}

static void Cleanup(EditorApplicationModel inModel)
{
Expand Down
Loading
Loading