Skip to content

Commit ed3e2ad

Browse files
Merge pull request #414 from FlyAndNotDown/master
Feat: Misc Update
2 parents 84a76e4 + 4335f29 commit ed3e2ad

9 files changed

Lines changed: 65 additions & 112 deletions

File tree

CMake/Common.cmake

Lines changed: 17 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -2,27 +2,30 @@ option(USE_UNITY_BUILD "Use unity build" ON)
22
option(EXPORT_COMPILE_COMMANDS "Whether to export all compile commands" OFF)
33

44
set(CMAKE_CXX_STANDARD 20)
5+
set(CMAKE_CXX_STANDARD_REQUIRED ON)
56
set(CMAKE_UNITY_BUILD ${USE_UNITY_BUILD})
67
set(CMAKE_EXPORT_COMPILE_COMMANDS ${EXPORT_COMPILE_COMMANDS})
78

8-
get_cmake_property(generator_is_multi_config GENERATOR_IS_MULTI_CONFIG)
99
if (${CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT})
1010
set(CMAKE_INSTALL_PREFIX ${CMAKE_SOURCE_DIR}/Installed CACHE PATH "" FORCE)
1111
endif()
1212

13-
add_definitions(-DBUILD_CONFIG_DEBUG=$<IF:$<OR:$<CONFIG:Debug>,$<CONFIG:RelWithDebInfo>>,1,0>)
14-
15-
add_definitions(-DPLATFORM_WINDOWS=$<IF:$<PLATFORM_ID:Windows>,1,0>)
16-
add_definitions(-DPLATFORM_LINUX=$<IF:$<PLATFORM_ID:Linux>,1,0>)
17-
add_definitions(-DPLATFORM_MACOS=$<IF:$<PLATFORM_ID:Darwin>,1,0>)
18-
19-
add_definitions(-DCOMPILER_MSVC=$<IF:$<CXX_COMPILER_ID:MSVC>,1,0>)
20-
add_definitions(-DCOMPILER_APPLE_CLANG=$<IF:$<CXX_COMPILER_ID:AppleClang>,1,0>)
21-
add_definitions(-DCOMPILER_GCC=$<IF:$<CXX_COMPILER_ID:GNU>,1,0>)
13+
add_compile_definitions(
14+
BUILD_CONFIG_DEBUG=$<IF:$<OR:$<CONFIG:Debug>,$<CONFIG:RelWithDebInfo>>,1,0>
15+
PLATFORM_WINDOWS=$<IF:$<PLATFORM_ID:Windows>,1,0>
16+
PLATFORM_LINUX=$<IF:$<PLATFORM_ID:Linux>,1,0>
17+
PLATFORM_MACOS=$<IF:$<PLATFORM_ID:Darwin>,1,0>
18+
COMPILER_MSVC=$<IF:$<CXX_COMPILER_ID:MSVC>,1,0>
19+
COMPILER_APPLE_CLANG=$<IF:$<CXX_COMPILER_ID:AppleClang>,1,0>
20+
COMPILER_GCC=$<IF:$<CXX_COMPILER_ID:GNU>,1,0>
21+
)
2222

2323
if (${MSVC})
24-
add_compile_options(/bigobj /MD)
25-
add_definitions(-D_SILENCE_ALL_MS_EXT_DEPRECATION_WARNINGS=1)
26-
add_definitions(-DWIN32_LEAN_AND_MEAN)
27-
add_definitions(-DNOMINMAX=1)
24+
set(CMAKE_MSVC_RUNTIME_LIBRARY "MultiThreadedDLL")
25+
add_compile_options(/bigobj)
26+
add_compile_definitions(
27+
_SILENCE_ALL_MS_EXT_DEPRECATION_WARNINGS=1
28+
WIN32_LEAN_AND_MEAN
29+
NOMINMAX=1
30+
)
2831
endif ()

CMake/Target.cmake

Lines changed: 16 additions & 63 deletions
Original file line numberDiff line numberDiff line change
@@ -9,11 +9,13 @@ set(GENERATED_MIRROR_INFO_SRC_DIR ${GENERATED_DIR}/MirrorInfoSrc CACHE PATH "" F
99
set(BASE_TARGETS_FOLDER "${SUB_PROJECT_NAME}" CACHE STRING "" FORCE)
1010
set(AUX_TARGETS_FOLDER "${BASE_TARGETS_FOLDER}/Aux" CACHE STRING "" FORCE)
1111

12+
get_cmake_property(with_multi_config_generator GENERATOR_IS_MULTI_CONFIG)
13+
1214
if (${BUILD_TEST})
1315
enable_testing()
14-
add_definitions(-DBUILD_TEST=1)
16+
add_compile_definitions(BUILD_TEST=1)
1517
else()
16-
add_definitions(-DBUILD_TEST=0)
18+
add_compile_definitions(BUILD_TEST=0)
1719
endif()
1820

1921
if ("${SUB_PROJECT_NAME}" STREQUAL "")
@@ -107,7 +109,7 @@ function(exp_process_runtime_dependencies)
107109
endif ()
108110
if (NOT ${arg_NOT_INSTALL} AND NOT "${runtime_deps}" STREQUAL "")
109111
install(
110-
FILES ${runtime_deps} DESTINATION ${CMAKE_INSTALL_PREFIX}/${SUB_PROJECT_NAME}/Binaries
112+
FILES ${runtime_deps} DESTINATION ${SUB_PROJECT_NAME}/Binaries
111113
)
112114
endif ()
113115
endfunction()
@@ -141,8 +143,8 @@ function(exp_add_resources_copy_command)
141143

142144
list(APPEND copy_commands COMMAND ${CMAKE_COMMAND} -E copy_if_different ${src} $<TARGET_FILE_DIR:${arg_NAME}>/${dst})
143145

144-
get_filename_component(absolute_dst ${CMAKE_INSTALL_PREFIX}/${SUB_PROJECT_NAME}/Binaries/${dst} ABSOLUTE)
145-
get_filename_component(dst_dir ${absolute_dst} DIRECTORY)
146+
cmake_path(SET dst_path NORMALIZE "${SUB_PROJECT_NAME}/Binaries/${dst}")
147+
cmake_path(GET dst_path PARENT_PATH dst_dir)
146148
if (NOT ${arg_NOT_INSTALL})
147149
install(FILES ${src} DESTINATION ${dst_dir})
148150
endif ()
@@ -166,6 +168,7 @@ function(exp_gather_target_libs)
166168
string(REGEX MATCH "\\$\\<BUILD_INTERFACE.+\\>" match ${arg_NAME})
167169
if (match)
168170
set(${arg_OUTPUT} "" PARENT_SCOPE)
171+
return()
169172
endif ()
170173

171174
get_target_property(target_libs ${arg_NAME} LINK_LIBRARIES)
@@ -309,8 +312,7 @@ function(exp_add_executable)
309312
set_target_properties(${arg_NAME} PROPERTIES FOLDER ${BASE_TARGETS_FOLDER})
310313
endif ()
311314
312-
get_cmake_property(generated_is_multi_config GENERATOR_IS_MULTI_CONFIG)
313-
if (${generated_is_multi_config})
315+
if (${with_multi_config_generator})
314316
set(runtime_output_dir ${CMAKE_BINARY_DIR}/Dist/$<CONFIG>/${SUB_PROJECT_NAME}/Binaries)
315317
else ()
316318
set(runtime_output_dir ${CMAKE_BINARY_DIR}/Dist/${SUB_PROJECT_NAME}/Binaries)
@@ -411,8 +413,7 @@ function(exp_add_library)
411413
${arg_NAME}
412414
PRIVATE ${arg_SRC} ${generated_src}
413415
)
414-
get_cmake_property(generator_is_multi_config GENERATOR_IS_MULTI_CONFIG)
415-
if (${generator_is_multi_config})
416+
if (${with_multi_config_generator})
416417
set(runtime_output_dir ${CMAKE_BINARY_DIR}/Targets/${SUB_PROJECT_NAME}/${arg_NAME}/$<CONFIG>/Binaries)
417418
set(library_output_dir ${CMAKE_BINARY_DIR}/Targets/${SUB_PROJECT_NAME}/${arg_NAME}/$<CONFIG>/Binaries)
418419
set(archive_output_directory ${CMAKE_BINARY_DIR}/Targets/${SUB_PROJECT_NAME}/${arg_NAME}/$<CONFIG>/Lib)
@@ -504,65 +505,17 @@ function(exp_add_test)
504505
set(multiValueArgs SRC INC LINK LIB DEP_TARGET RES REFLECT)
505506
cmake_parse_arguments(arg "${options}" "${singleValueArgs}" "${multiValueArgs}" ${ARGN})
506507
507-
if (DEFINED arg_REFLECT)
508-
exp_add_mirror_info_source_generation_target(
509-
NAME ${arg_NAME}
510-
OUTPUT_SRC generated_src
511-
OUTPUT_TARGET_NAME generated_target
512-
SEARCH_DIR ${arg_REFLECT}
513-
PRIVATE_INC ${arg_INC}
514-
LIB ${arg_LIB}
515-
)
516-
endif()
517-
518-
add_executable(${arg_NAME})
519-
set_target_properties(${arg_NAME} PROPERTIES FOLDER ${BASE_TARGETS_FOLDER})
520-
521-
target_sources(
522-
${arg_NAME}
523-
PRIVATE ${arg_SRC} ${generated_src}
524-
)
525-
get_cmake_property(generator_is_multi_config GENERATOR_IS_MULTI_CONFIG)
526-
if (${generator_is_multi_config})
527-
set_target_properties(
528-
${arg_NAME} PROPERTIES
529-
RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/Dist/$<CONFIG>/${SUB_PROJECT_NAME}/Binaries
530-
)
531-
else ()
532-
set_target_properties(
533-
${arg_NAME} PROPERTIES
534-
RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/Dist/${SUB_PROJECT_NAME}/Binaries
535-
)
536-
endif ()
537-
538-
target_include_directories(
539-
${arg_NAME}
540-
PRIVATE ${arg_INC}
541-
)
542-
target_link_directories(
543-
${arg_NAME}
544-
PRIVATE ${arg_LINK}
545-
)
546-
target_link_libraries(
547-
${arg_NAME}
548-
PRIVATE Test ${arg_LIB}
549-
)
550-
exp_process_runtime_dependencies(
508+
exp_add_executable(
551509
NAME ${arg_NAME}
510+
SRC ${arg_SRC}
511+
INC ${arg_INC}
512+
LINK ${arg_LINK}
513+
LIB Test ${arg_LIB}
552514
DEP_TARGET ${arg_DEP_TARGET}
553-
NOT_INSTALL
554-
)
555-
exp_add_resources_copy_command(
556-
NAME ${arg_NAME}
557515
RES ${arg_RES}
516+
REFLECT ${arg_REFLECT}
558517
NOT_INSTALL
559518
)
560-
if (DEFINED arg_DEP_TARGET)
561-
add_dependencies(${arg_NAME} ${arg_DEP_TARGET})
562-
endif()
563-
if (DEFINED arg_REFLECT)
564-
add_dependencies(${arg_NAME} ${generated_target})
565-
endif()
566519
567520
add_test(
568521
NAME ${arg_NAME}

CMakeLists.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ set(CMAKE_MAP_IMPORTED_CONFIG_DEBUG "Release" CACHE STRING "" FORCE)
1919
set(CMAKE_MAP_IMPORTED_CONFIG_RELWITHDEBINFO "Release" CACHE STRING "" FORCE)
2020
set(CMAKE_MAP_IMPORTED_CONFIG_MINSIZEREL "Release" CACHE STRING "" FORCE)
2121

22-
add_definitions(-DBUILD_EDITOR=$<BOOL:BUILD_EDITOR>)
22+
add_compile_definitions(BUILD_EDITOR=$<BOOL:${BUILD_EDITOR}>)
2323

2424
include(CMake/Common.cmake)
2525
include(CMake/Target.cmake)

Editor/CMakeLists.txt

Lines changed: 4 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -9,25 +9,19 @@ qt_standard_project_setup()
99

1010
if (${CMAKE_SYSTEM_NAME} STREQUAL "Darwin")
1111
set(platform_executable_hint MACOSX_BUNDLE)
12-
set(bundle_install_dest BUNDLE DESTINATION ${CMAKE_INSTALL_PREFIX}/${SUB_PROJECT_NAME}/Binaries)
12+
set(bundle_install_dest BUNDLE DESTINATION ${SUB_PROJECT_NAME}/Binaries)
1313
set(platform_fwk_dir ${QT_ROOT}/lib)
1414
endif ()
1515

16-
set(editor_includes Include)
1716
set(editor_qt_libs Qt6::Core Qt6::Gui Qt6::Widgets Qt6::WebEngineWidgets)
1817
set(editor_libs Core RHI Runtime httplib::httplib ${editor_qt_libs})
1918

20-
foreach (QT_LIB ${editor_qt_libs})
21-
string(REPLACE "::" "" QT_RAW_LIB ${QT_LIB})
22-
list(APPEND editor_includes ${${QT_RAW_LIB}_INCLUDE_DIRS})
23-
endforeach ()
24-
2519
exp_add_mirror_info_source_generation_target(
2620
NAME Editor
2721
OUTPUT_SRC EDITOR_MIRROR_GENERATED_SRC
2822
OUTPUT_TARGET_NAME EDITOR_MIRROR_GENERATED_TARGET
2923
SEARCH_DIR Include
30-
PRIVATE_INC ${editor_includes}
24+
PRIVATE_INC Include
3125
LIB ${editor_libs}
3226
FRAMEWORK_DIR ${platform_fwk_dir}
3327
)
@@ -49,7 +43,7 @@ else ()
4943
)
5044
endif ()
5145

52-
target_include_directories(Editor PRIVATE ${editor_includes})
46+
target_include_directories(Editor PRIVATE Include)
5347
target_link_libraries(Editor PRIVATE ${editor_libs})
5448

5549
if (${CMAKE_SYSTEM_NAME} STREQUAL "Windows")
@@ -65,7 +59,7 @@ exp_process_runtime_dependencies(
6559
)
6660
install(
6761
TARGETS Editor
68-
RUNTIME DESTINATION ${CMAKE_INSTALL_PREFIX}/${SUB_PROJECT_NAME}/Binaries
62+
RUNTIME DESTINATION ${SUB_PROJECT_NAME}/Binaries
6963
${bundle_install_dest}
7064
)
7165
export(

Editor/Include/Editor/Qt/JsonSerialization.h

Lines changed: 11 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -24,9 +24,6 @@
2424
#include <Mirror/Mirror.h>
2525
#include <Editor/Qt/MirrorTemplateView.h>
2626

27-
// TODO
28-
#pragma optimize("", off)
29-
3027
namespace Editor {
3128
template <typename T> struct QtJsonSerializer {};
3229
template <typename T> concept QtJsonSerializable = requires(
@@ -320,7 +317,7 @@ namespace Editor {
320317
}
321318
if (jsonObject.contains("value")) {
322319
const QJsonValue jsonValue = jsonObject["value"];
323-
QtJsonSerializer<K>::QtJsonDeserialize(jsonValue, outValue.second);
320+
QtJsonSerializer<V>::QtJsonDeserialize(jsonValue, outValue.second);
324321
}
325322
}
326323
};
@@ -378,7 +375,7 @@ namespace Editor {
378375
for (const auto& jsonElement : jsonArray) {
379376
T element;
380377
QtJsonSerializer<T>::QtJsonDeserialize(jsonElement, element);
381-
outValue.emplaceback(std::move(element));
378+
outValue.emplace_back(std::move(element));
382379
}
383380
}
384381
};
@@ -404,7 +401,6 @@ namespace Editor {
404401

405402
const QJsonArray jsonArray = inJsonValue.toArray();
406403
outValue.clear();
407-
outValue.reserve(jsonArray.size());
408404
for (const auto& jsonElement : jsonArray) {
409405
T element;
410406
QtJsonSerializer<T>::QtJsonDeserialize(jsonElement, element);
@@ -464,7 +460,6 @@ namespace Editor {
464460

465461
const QJsonArray jsonArray = inJsonValue.toArray();
466462
outValue.clear();
467-
outValue.reserve(jsonArray.size());
468463
for (const auto& jsonElement : jsonArray) {
469464
T element;
470465
QtJsonSerializer<T>::QtJsonDeserialize(jsonElement, element);
@@ -497,7 +492,7 @@ namespace Editor {
497492
outValue.reserve(jsonArray.size());
498493
for (const auto& jsonPair : jsonArray) {
499494
std::pair<K, V> pair;
500-
QtJsonSerializer<std::pair<K, V>>::QtJsonSerialize(jsonPair, pair);
495+
QtJsonSerializer<std::pair<K, V>>::QtJsonDeserialize(jsonPair, pair);
501496
outValue.emplace(std::move(pair));
502497
}
503498
}
@@ -524,10 +519,9 @@ namespace Editor {
524519

525520
const QJsonArray jsonArray = inJsonValue.toArray();
526521
outValue.clear();
527-
outValue.reserve(jsonArray.size());
528522
for (const auto& jsonPair : jsonArray) {
529523
std::pair<K, V> pair;
530-
QtJsonSerializer<std::pair<K, V>>::QtJsonSerialize(jsonPair, pair);
524+
QtJsonSerializer<std::pair<K, V>>::QtJsonDeserialize(jsonPair, pair);
531525
outValue.emplace(std::move(pair));
532526
}
533527
}
@@ -553,7 +547,7 @@ namespace Editor {
553547
{
554548
(void) std::initializer_list<int> { ([&]() -> void {
555549
const auto key = std::to_string(I);
556-
const QJsonValue jsonValue = inJsonObject[key];
550+
const QJsonValue jsonValue = inJsonObject[QString::fromStdString(key)];
557551
if (jsonValue.isNull()) {
558552
return;
559553
}
@@ -623,7 +617,7 @@ namespace Editor {
623617
const QJsonValue jsonType = jsonObject["type"];
624618
const QJsonValue jsonContent = jsonObject["content"];
625619

626-
uint64_t aspectIndex;
620+
uint64_t aspectIndex = 0;
627621
QtJsonSerializer<uint64_t>::QtJsonDeserialize(jsonType, aspectIndex);
628622
QtJsonDeserializeInternal(jsonContent, outValue, aspectIndex, std::make_index_sequence<sizeof...(T)> {});
629623
}
@@ -652,8 +646,7 @@ namespace Editor {
652646
return;
653647
}
654648
for (auto i = 0; i < L; i++) {
655-
QJsonValue jsonElement;
656-
QtJsonSerializer<T>::QtJsonDeserialize(jsonElement, jsonArray[i]);
649+
QtJsonSerializer<T>::QtJsonDeserialize(jsonArray[i], outValue[i]);
657650
}
658651
}
659652
};
@@ -903,7 +896,7 @@ namespace Editor {
903896
for (const auto& jsonElement : jsonArray) {
904897
T element;
905898
QtJsonSerializer<T>::QtJsonDeserialize(jsonElement, element);
906-
outValue.emplaceBack(std::move(element));
899+
outValue.insert(std::move(element));
907900
}
908901
}
909902
};
@@ -1124,7 +1117,7 @@ namespace Editor {
11241117
QJsonObject jsonObject;
11251118
jsonObject["key"] = jsonKey;
11261119
jsonObject["value"] = jsonValue;
1127-
outJsonValue = std::move(jsonValue);
1120+
outJsonValue = std::move(jsonObject);
11281121
}
11291122

11301123
static void DeserializeDynWithView(const QJsonValue& inJsonValue, const Mirror::StdPairView& inView)
@@ -1404,14 +1397,14 @@ namespace Editor {
14041397
return;
14051398
}
14061399
const QJsonObject jsonObject = inJsonValue.toObject();
1407-
if (!jsonObject.contains("type") || jsonObject.contains("content")) {
1400+
if (!jsonObject.contains("type") || !jsonObject.contains("content")) {
14081401
return;
14091402
}
14101403

14111404
const QJsonValue typeJson = jsonObject["type"];
14121405
const QJsonValue contentJson = jsonObject["content"];
14131406

1414-
uint64_t type;
1407+
uint64_t type = 0;
14151408
QtJsonSerializer<uint64_t>::QtJsonDeserialize(typeJson, type);
14161409

14171410
Mirror::Any tempObj = inView.CreateElement(type);

Editor/Include/Editor/Widget/ProjectHub.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@ namespace Editor {
3838

3939
public Q_SLOTS:
4040
void CreateProject() const;
41+
QString BrowseDirectory() const;
4142

4243
private:
4344
QString GetEngineVersion() const;

Editor/Src/Widget/ProjectHub.cpp

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@
22
// Created by johnk on 2025/8/3.
33
//
44

5+
#include <QFileDialog>
6+
57
#include <Editor/Widget/ProjectHub.h>
68
#include <Editor/Widget/moc_ProjectHub.cpp>
79
#include <Core/Log.h>
@@ -41,6 +43,11 @@ namespace Editor {
4143
LogInfo(ProjectHub, "ProjectHubBridge::CreateProject");
4244
}
4345

46+
QString ProjectHubBackend::BrowseDirectory() const // NOLINT
47+
{
48+
return QFileDialog::getExistingDirectory(nullptr, "Select Project Directory", QDir::rootPath());
49+
}
50+
4451
QString ProjectHubBackend::GetEngineVersion() const
4552
{
4653
return QString::fromStdString(engineVersion);

0 commit comments

Comments
 (0)