diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index caddafe9..2834bece 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -69,3 +69,5 @@ jobs: - name: Install run: cmake --build ${{github.workspace}}/build --config ${{env.BUILD_TYPE}} --target install -j ${{env.MAKE_THREAD_NUM}} + + # TODO build test project diff --git a/.gitignore b/.gitignore index 7ac52f19..351f4b16 100644 --- a/.gitignore +++ b/.gitignore @@ -8,9 +8,18 @@ cmake-build* build* +# Installed +Installed + # 3rd ThirdParty/Zip ThirdParty/Lib ThirdParty/ConanRecipes/**/src ThirdParty/ConanRecipes/**/build ThirdParty/ConanRecipes/**/CMakeUserPresets.json + +# Test Project +TestProject/.idea +TestProject/.vscode +TestProject/cmake-build* +TestProject/build* diff --git a/CMake/Common.cmake b/CMake/Common.cmake index 27f0ddf2..4f51cf89 100644 --- a/CMake/Common.cmake +++ b/CMake/Common.cmake @@ -1,6 +1,3 @@ -include(ExternalProject) -include(GenerateExportHeader) - option(USE_UNITY_BUILD "Use unity build" ON) option(EXPORT_COMPILE_COMMANDS "Whether to export all compile commands" OFF) @@ -10,8 +7,7 @@ set(CMAKE_EXPORT_COMPILE_COMMANDS ${EXPORT_COMPILE_COMMANDS}) get_cmake_property(generator_is_multi_config GENERATOR_IS_MULTI_CONFIG) if (${CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT}) - # TODO support multi config generator for CMAKE_INSTALL_PREFIX - set(CMAKE_INSTALL_PREFIX ${CMAKE_BINARY_DIR}/Install CACHE PATH "" FORCE) + set(CMAKE_INSTALL_PREFIX ${CMAKE_SOURCE_DIR}/Installed CACHE PATH "" FORCE) endif() add_definitions(-DBUILD_CONFIG_DEBUG=$,$>,1,0>) diff --git a/CMake/Config.cmake.in b/CMake/Config.cmake.in new file mode 100644 index 00000000..76cec7b4 --- /dev/null +++ b/CMake/Config.cmake.in @@ -0,0 +1,10 @@ +@PACKAGE_INIT@ + +file(GLOB_RECURSE cmake_libs ${CMAKE_CURRENT_LIST_DIR}/CMake/*.cmake) +foreach (cmake_lib ${cmake_libs}) + include(${cmake_lib}) +endforeach () + +include(${CMAKE_CURRENT_LIST_DIR}/@SUB_PROJECT_NAME@Targets.cmake) + +check_required_components(@SUB_PROJECT_NAME@) diff --git a/CMake/Target.cmake b/CMake/Target.cmake index a53eaf97..10d879f0 100644 --- a/CMake/Target.cmake +++ b/CMake/Target.cmake @@ -1,9 +1,12 @@ +include(GenerateExportHeader) +include(CMakePackageConfigHelpers) + option(BUILD_TEST "Build unit tests" ON) -option(BUILD_SAMPLE "Build sample" ON) -set(API_HEADER_DIR ${CMAKE_BINARY_DIR}/Generated/Api CACHE PATH "" FORCE) -set(BASE_TARGETS_FOLDER "${ENGINE_SUB_PROJECT_NAME}" CACHE STRING "" FORCE) -set(SAMPLE_TARGETS_FOLDER "${BASE_TARGETS_FOLDER}/Sample" CACHE STRING "" FORCE) +set(GENERATED_DIR ${CMAKE_BINARY_DIR}/Generated CACHE PATH "" FORCE) +set(GENERATED_API_HEADER_DIR ${GENERATED_DIR}/Api CACHE PATH "" FORCE) +set(GENERATED_MIRROR_INFO_SRC_DIR ${GENERATED_DIR}/MirrorInfoSrc CACHE PATH "" FORCE) +set(BASE_TARGETS_FOLDER "${SUB_PROJECT_NAME}" CACHE STRING "" FORCE) set(AUX_TARGETS_FOLDER "${BASE_TARGETS_FOLDER}/Aux" CACHE STRING "" FORCE) if (${BUILD_TEST}) @@ -13,6 +16,10 @@ else() add_definitions(-DBUILD_TEST=0) endif() +if ("${SUB_PROJECT_NAME}" STREQUAL "") + message(FATAL_ERROR "SUB_PROJECT_NAME not defined, please set it in your project cmake") +endif () + function(exp_gather_target_runtime_dependencies_recurse) set(options "") set(singleValueArgs NAME OUT_RUNTIME_DEP OUT_DEP_TARGET) @@ -26,20 +33,7 @@ function(exp_gather_target_runtime_dependencies_recurse) get_target_property(runtime_dep ${arg_NAME} RUNTIME_DEP) if (NOT ("${runtime_dep}" STREQUAL "runtime_dep-NOTFOUND")) - foreach(r ${runtime_dep}) - # workaround to make EXPORT_PROPERTIES support generator expression - string(REPLACE "[" "$<" r "${r}") - string(REPLACE "]" ">" r "${r}") - - get_target_property(type ${arg_NAME} TYPE) - if (${type} STREQUAL "SHARED_LIBRARY") - set(target_bin_dir $) - else () - set(target_bin_dir $/../Binaries) - endif () - string(REPLACE "$" ${target_bin_dir} temp_r ${r}) - list(APPEND result_runtime_dep ${temp_r}) - endforeach() + list(APPEND result_runtime_dep ${runtime_dep}) endif() get_target_property(libs ${arg_NAME} LINK_LIBRARIES) @@ -93,6 +87,7 @@ function(exp_process_runtime_dependencies) list(APPEND dep_targets ${dep_dep_targets}) endforeach () + set(copy_commands COMMAND ${CMAKE_COMMAND} -E make_directory $) foreach(r ${runtime_deps}) list(APPEND copy_commands COMMAND ${CMAKE_COMMAND} -E copy_if_different ${r} $) endforeach() @@ -255,7 +250,7 @@ function(exp_add_mirror_info_source_generation_target) get_filename_component(dir ${temp} DIRECTORY) get_filename_component(filename ${temp} NAME_WE) - set(output_source "${CMAKE_BINARY_DIR}/Generated/MirrorInfoSource/${dir}/${filename}.generated.cpp") + set(output_source "${GENERATED_MIRROR_INFO_SRC_DIR}/${dir}/${filename}.generated.cpp") list(APPEND output_sources ${output_source}) add_custom_command( @@ -281,15 +276,11 @@ function(exp_add_mirror_info_source_generation_target) endfunction() function(exp_add_executable) - set(options SAMPLE NOT_INSTALL) - set(singleValueArgs NAME) + set(options NOT_INSTALL) + set(singleValueArgs NAME FOLDER) set(multiValueArgs SRC INC LINK LIB DEP_TARGET RES REFLECT) cmake_parse_arguments(arg "${options}" "${singleValueArgs}" "${multiValueArgs}" ${ARGN}) - if (${arg_SAMPLE} AND (NOT ${BUILD_SAMPLE})) - return() - endif() - if (${arg_NOT_INSTALL}) set(not_install_flag NOT_INSTALL) else () @@ -312,8 +303,8 @@ function(exp_add_executable) ${arg_NAME} PRIVATE ${arg_SRC} ${generated_src} ) - if (${arg_SAMPLE}) - set_target_properties(${arg_NAME} PROPERTIES FOLDER ${SAMPLE_TARGETS_FOLDER}) + if (DEFINED arg_FOLDER) + set_target_properties(${arg_NAME} PROPERTIES FOLDER ${BASE_TARGETS_FOLDER}/${arg_FOLDER}) else () set_target_properties(${arg_NAME} PROPERTIES FOLDER ${BASE_TARGETS_FOLDER}) endif () @@ -386,11 +377,11 @@ endfunction() function(exp_add_library) set(options NOT_INSTALL) set(singleValueArgs NAME TYPE) - set(multiValueArgs SRC PRIVATE_INC PUBLIC_INC PRIVATE_LINK PUBLIC_LINK PRIVATE_LIB PUBLIC_LIB PRIVATE_MERGE_LIB PUBLIC_MERGE_LIB REFLECT) + set(multiValueArgs SRC PRIVATE_INC PUBLIC_INC PRIVATE_LINK PUBLIC_LINK PRIVATE_LIB PUBLIC_LIB REFLECT) cmake_parse_arguments(arg "${options}" "${singleValueArgs}" "${multiValueArgs}" ${ARGN}) if ("${arg_TYPE}" STREQUAL "SHARED") - list(APPEND arg_PUBLIC_INC ${API_HEADER_DIR}/${arg_NAME}) + list(APPEND arg_PUBLIC_INC ${GENERATED_API_HEADER_DIR}/${arg_NAME}) endif () if (DEFINED arg_REFLECT) @@ -438,78 +429,25 @@ function(exp_add_library) ) foreach (inc ${arg_PUBLIC_INC}) - list(APPEND public_inc ${inc}) - endforeach () - foreach (lib ${arg_PUBLIC_MERGE_LIB}) - if (TARGET ${lib}) - list(APPEND public_inc $) - endif () - endforeach () - - foreach (inc ${public_inc}) - string(REGEX MATCH "\\$\\<.+\\>" match ${inc}) - if (match) - list(APPEND public_build_inc $) - else () - get_filename_component(absolute_inc ${inc} ABSOLUTE) - list(APPEND public_build_inc $) - endif () + get_filename_component(absolute_inc ${inc} ABSOLUTE) + list(APPEND public_build_inc $) endforeach () target_include_directories( ${arg_NAME} PRIVATE ${arg_PRIVATE_INC} PUBLIC ${public_build_inc} $ ) - target_link_directories( ${arg_NAME} PRIVATE ${arg_PRIVATE_LINK} PUBLIC ${arg_PUBLIC_LINK} ) - - foreach (lib ${arg_PRIVATE_MERGE_LIB}) - list(APPEND merge_lib ${lib}) - endforeach () - foreach (lib ${arg_PUBLIC_MERGE_LIB}) - list(APPEND merge_lib ${lib}) - endforeach () - - foreach (lib ${merge_lib}) - list(APPEND build_merge_lib $) - - exp_gather_target_runtime_dependencies_recurse( - NAME ${lib} - OUT_RUNTIME_DEP temp_runtime_dep - ) - list(APPEND runtime_dep ${temp_runtime_dep}) - endforeach () target_link_libraries( ${arg_NAME} - PRIVATE ${build_merge_lib} + PRIVATE ${arg_PRIVATE_LIB} PUBLIC ${arg_PUBLIC_LIB} ) - if (DEFINED runtime_dep) - foreach (r ${runtime_dep}) - get_filename_component(FILE_NAME ${r} NAME) - list(APPEND commands COMMAND ${CMAKE_COMMAND} -E copy_if_different ${r} ${runtime_output_dir}/${FILE_NAME}) - list(APPEND runtime_dep_files $/${FILE_NAME}) - endforeach () - add_custom_command( - TARGET ${arg_NAME} POST_BUILD - ${commands} - ) - - # workaround to make EXPORT_PROPERTIES support generator expression - string(REPLACE "$<" "[" runtime_dep_files "${runtime_dep_files}") - string(REPLACE ">" "]" runtime_dep_files "${runtime_dep_files}") - set_target_properties( - ${arg_NAME} PROPERTIES - EXPORT_PROPERTIES "RUNTIME_DEP" - RUNTIME_DEP "${runtime_dep_files}" - ) - endif () - if ("${arg_TYPE}" STREQUAL "SHARED") string(TOUPPER ${arg_NAME}_API api_name) string(REPLACE "-" "/" api_dir ${arg_NAME}) @@ -517,7 +455,7 @@ function(exp_add_library) generate_export_header( ${arg_NAME} EXPORT_MACRO_NAME ${api_name} - EXPORT_FILE_NAME ${API_HEADER_DIR}/${arg_NAME}/${api_dir}/Api.h + EXPORT_FILE_NAME ${GENERATED_API_HEADER_DIR}/${arg_NAME}/${api_dir}/Api.h ) endif() @@ -526,7 +464,7 @@ function(exp_add_library) endif() if (NOT ${arg_NOT_INSTALL}) - foreach (inc ${public_inc}) + foreach (inc ${arg_PUBLIC_INC}) list(APPEND install_inc ${inc}/) endforeach () install( @@ -534,29 +472,23 @@ function(exp_add_library) DESTINATION ${SUB_PROJECT_NAME}/Target/${arg_NAME}/Include ) - if (DEFINED runtime_dep) - install( - FILES ${runtime_dep} - DESTINATION ${SUB_PROJECT_NAME}/Target/${arg_NAME}/Binaries - ) - endif () - install( TARGETS ${arg_NAME} EXPORT ${SUB_PROJECT_NAME}Targets ARCHIVE DESTINATION ${SUB_PROJECT_NAME}/Target/${arg_NAME}/Lib LIBRARY DESTINATION ${SUB_PROJECT_NAME}/Target/${arg_NAME}/Lib - RUNTIME DESTINATION ${SUB_PROJECT_NAME}/Binaries + RUNTIME DESTINATION ${SUB_PROJECT_NAME}/Target/${arg_NAME}/Binaries ) export( TARGETS ${arg_NAME} NAMESPACE ${SUB_PROJECT_NAME}:: APPEND FILE ${CMAKE_BINARY_DIR}/${SUB_PROJECT_NAME}Targets.cmake ) + if ("${arg_TYPE}" STREQUAL "SHARED") install( FILES $ - DESTINATION ${SUB_PROJECT_NAME}/Target/${arg_NAME}/Binaries + DESTINATION ${SUB_PROJECT_NAME}/Binaries ) endif () endif () @@ -643,5 +575,57 @@ install( EXPORT ${SUB_PROJECT_NAME}Targets FILE ${SUB_PROJECT_NAME}Targets.cmake NAMESPACE ${SUB_PROJECT_NAME}:: + DESTINATION ${SUB_PROJECT_NAME} +) + +configure_package_config_file( + ${CMAKE_CURRENT_LIST_DIR}/Config.cmake.in + ${CMAKE_BINARY_DIR}/${SUB_PROJECT_NAME}Config.cmake + INSTALL_DESTINATION ${SUB_PROJECT_NAME}/CMake +) + +write_basic_package_version_file( + ${CMAKE_BINARY_DIR}/${SUB_PROJECT_NAME}ConfigVersion.cmake + VERSION ${SUB_PROJECT_VERSION_MAJOR}.${SUB_PROJECT_VERSION_MINOR}.${SUB_PROJECT_VERSION_PATCH} + COMPATIBILITY SameMajorVersion +) + +install( + FILES + ${CMAKE_BINARY_DIR}/${SUB_PROJECT_NAME}Config.cmake + ${CMAKE_BINARY_DIR}/${SUB_PROJECT_NAME}ConfigVersion.cmake + DESTINATION ${SUB_PROJECT_NAME} +) + +file(GLOB_RECURSE preset_cmake_libs ${CMAKE_CURRENT_LIST_DIR}/*) +foreach (cmake_lib ${preset_cmake_libs}) + file( + COPY ${cmake_lib} + DESTINATION ${CMAKE_BINARY_DIR}/CMake + ) +endforeach () +install( + FILES ${preset_cmake_libs} DESTINATION ${SUB_PROJECT_NAME}/CMake ) + +if (DEFINED SUB_PROJECT_CMAKE_LIBS) + foreach (cmake_lib ${SUB_PROJECT_CMAKE_LIBS}) + if (IS_ABSOLUTE ${cmake_lib}) + message(FATAL_ERROR "project cmake libs defined in SUB_PROJECT_CMAKE_LIBS should be relative path from project root") + endif () + + set(src_file ${CMAKE_SOURCE_DIR}/${cmake_lib}) + get_filename_component(binary_tree_dst_dir ${CMAKE_BINARY_DIR}/CMake/${cmake_lib} DIRECTORY) + get_filename_component(install_tree_dst_dir ${SUB_PROJECT_NAME}/CMake/${cmake_lib} DIRECTORY) + + file( + COPY ${src_file} + DESTINATION ${binary_tree_dst_dir} + ) + install( + FILES ${src_file} + DESTINATION ${install_tree_dst_dir} + ) + endforeach () +endif () diff --git a/CMakeLists.txt b/CMakeLists.txt index 8ac7d687..6f3d1a80 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -6,9 +6,14 @@ set(CMAKE_PROJECT_TOP_LEVEL_INCLUDES ${CMAKE_SOURCE_DIR}/conan_provider.cmake CA project(Explosion) option(BUILD_EDITOR "Build Explosion editor" ON) +option(BUILD_SAMPLE "Build samples" ON) -set(SUB_PROJECT_NAME "Engine" CACHE STRING "" FORCE) -set(ENGINE_SUB_PROJECT_NAME "Engine" CACHE STRING "" FORCE) +set(SUB_PROJECT_NAME "Explosion" CACHE STRING "" FORCE) +set(SUB_PROJECT_VERSION_MAJOR 0 CACHE STRING "" FORCE) +set(SUB_PROJECT_VERSION_MINOR 0 CACHE STRING "" FORCE) +set(SUB_PROJECT_VERSION_PATCH 1 CACHE STRING "" FORCE) +set(SUB_PROJECT_CMAKE_LIBS "ThirdParty/Registry.cmake" CACHE STRING "" FORCE) +set(USE_CONAN ON CACHE BOOL "" FORCE) set(CMAKE_MAP_IMPORTED_CONFIG_DEBUG "Release" CACHE STRING "" FORCE) set(CMAKE_MAP_IMPORTED_CONFIG_RELWITHDEBINFO "Release" CACHE STRING "" FORCE) @@ -18,8 +23,8 @@ add_definitions(-DBUILD_EDITOR=$) include(CMake/Common.cmake) include(CMake/Target.cmake) +include(ThirdParty/Registry.cmake) -add_subdirectory(ThirdParty) add_subdirectory(Engine) add_subdirectory(Tool) add_subdirectory(Sample) @@ -27,9 +32,3 @@ add_subdirectory(Sample) if (${BUILD_EDITOR}) add_subdirectory(Editor) endif() - -file(GLOB engine_cmake_libs CMake/*.cmake) -install( - FILES ${engine_cmake_libs} - DESTINATION ${SUB_PROJECT_NAME}/CMake -) diff --git a/Editor/CMakeLists.txt b/Editor/CMakeLists.txt index d48c4e47..e2d13322 100644 --- a/Editor/CMakeLists.txt +++ b/Editor/CMakeLists.txt @@ -9,7 +9,7 @@ qt_standard_project_setup() if (${CMAKE_SYSTEM_NAME} STREQUAL "Darwin") set(platform_executable_hint MACOSX_BUNDLE) - set(bundle_install_dest BUNDLE DESTINATION ${CMAKE_INSTALL_PREFIX}/${ENGINE_SUB_PROJECT_NAME}/Binaries) + set(bundle_install_dest BUNDLE DESTINATION ${CMAKE_INSTALL_PREFIX}/${SUB_PROJECT_NAME}/Binaries) set(platform_fwk_dir ${QT_ROOT}/lib) endif () @@ -65,7 +65,7 @@ exp_process_runtime_dependencies( ) install( TARGETS Editor - RUNTIME DESTINATION ${CMAKE_INSTALL_PREFIX}/${ENGINE_SUB_PROJECT_NAME}/Binaries + RUNTIME DESTINATION ${CMAKE_INSTALL_PREFIX}/${SUB_PROJECT_NAME}/Binaries ${bundle_install_dest} ) export( @@ -81,7 +81,7 @@ if (${CMAKE_SYSTEM_NAME} STREQUAL "Windows") COMMAND ${qt_win_deploy_executable} $ ) install( - CODE "execute_process(COMMAND ${qt_win_deploy_executable} ${CMAKE_INSTALL_PREFIX}/${ENGINE_SUB_PROJECT_NAME}/Binaries/$)" + CODE "execute_process(COMMAND ${qt_win_deploy_executable} ${CMAKE_INSTALL_PREFIX}/${SUB_PROJECT_NAME}/Binaries/$)" ) elseif (${CMAKE_SYSTEM_NAME} STREQUAL "Darwin") set(qt_mac_deploy_executable ${QT_ROOT}/bin/macdeployqt) @@ -90,7 +90,7 @@ elseif (${CMAKE_SYSTEM_NAME} STREQUAL "Darwin") COMMAND ${qt_mac_deploy_executable} $/Editor.app -no-strip ) install( - CODE "execute_process(COMMAND ${qt_mac_deploy_executable} ${CMAKE_INSTALL_PREFIX}/${ENGINE_SUB_PROJECT_NAME}/Binaries/Editor.app -no-strip)" + CODE "execute_process(COMMAND ${qt_mac_deploy_executable} ${CMAKE_INSTALL_PREFIX}/${SUB_PROJECT_NAME}/Binaries/Editor.app -no-strip)" ) endif () @@ -159,6 +159,6 @@ add_custom_command( COMMAND ${CMAKE_COMMAND} -E copy_directory_if_different ${CMAKE_CURRENT_SOURCE_DIR}/Web/dist $/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_SUB_PROJECT_NAME}/Binaries/Web)") + install(CODE "execute_process(COMMAND ${CMAKE_COMMAND} -E copy_directory_if_different ${CMAKE_CURRENT_SOURCE_DIR}/Web/dist ${CMAKE_INSTALL_PREFIX}/${SUB_PROJECT_NAME}/Binaries/Web)") endif () # ---- end web project ------------------------------------------------------------------------------- diff --git a/Editor/Resource/ProjectTemplates/Default/CMakeLists.txt b/Editor/Resource/ProjectTemplates/Default/CMakeLists.txt index e048152f..99a143ec 100644 --- a/Editor/Resource/ProjectTemplates/Default/CMakeLists.txt +++ b/Editor/Resource/ProjectTemplates/Default/CMakeLists.txt @@ -1,4 +1,4 @@ cmake_minimum_required(VERSION %{cmakeMinVersion}) project(%{projectName}%) -%{commonCMakeScripts} +%{findEngineCMakeScripts}% diff --git a/Engine/CMakeLists.txt b/Engine/CMakeLists.txt index cbb69742..f0f7f5af 100644 --- a/Engine/CMakeLists.txt +++ b/Engine/CMakeLists.txt @@ -6,10 +6,10 @@ function(get_engine_shader_resources) set(multiValueArgs "") cmake_parse_arguments(arg "${options}" "${singleValueArgs}" "${multiValueArgs}" ${ARGN}) - file(GLOB_RECURSE engine_shaders ${CMAKE_SOURCE_DIR}/${ENGINE_SUB_PROJECT_NAME}/Shader/*.es*) + file(GLOB_RECURSE engine_shaders ${CMAKE_SOURCE_DIR}/Engine/Shader/*.es*) foreach (shader ${engine_shaders}) get_filename_component(shader_absolute ${shader} ABSOLUTE) - string(REPLACE ${CMAKE_SOURCE_DIR}/${ENGINE_SUB_PROJECT_NAME}/Shader ../Shader/${ENGINE_SUB_PROJECT_NAME} copy_dst ${shader_absolute}) + string(REPLACE ${CMAKE_SOURCE_DIR}/Engine/Shader ../Shader/${SUB_PROJECT_NAME} copy_dst ${shader_absolute}) list(APPEND result ${shader}->${copy_dst}) endforeach () diff --git a/Engine/Source/Common/CMakeLists.txt b/Engine/Source/Common/CMakeLists.txt index bc7fbe10..944ceb38 100644 --- a/Engine/Source/Common/CMakeLists.txt +++ b/Engine/Source/Common/CMakeLists.txt @@ -4,7 +4,7 @@ exp_add_library( TYPE STATIC SRC ${sources} PUBLIC_INC Include - PUBLIC_MERGE_LIB rapidjson::rapidjson debugbreak::debugbreak cityhash::cityhash Taskflow::Taskflow + PUBLIC_LIB rapidjson::rapidjson debugbreak::debugbreak cityhash::cityhash Taskflow::Taskflow ) file(GLOB test_sources Test/*.cpp) diff --git a/Engine/Source/Core/CMakeLists.txt b/Engine/Source/Core/CMakeLists.txt index c1571258..734d2dcd 100644 --- a/Engine/Source/Core/CMakeLists.txt +++ b/Engine/Source/Core/CMakeLists.txt @@ -1,11 +1,17 @@ +set(generated_include_dir ${GENERATED_DIR}/Configure/Core/Include) + +configure_file( + Template/EngineVersion.h.in + ${generated_include_dir}/Core/EngineVersion.h +) + file(GLOB sources Src/*.cpp) exp_add_library( NAME Core TYPE SHARED SRC ${sources} - PUBLIC_INC Include - PUBLIC_LIB Common - PUBLIC_MERGE_LIB clipp::clipp + PUBLIC_INC Include ${generated_include_dir} + PUBLIC_LIB Common clipp::clipp ) file(GLOB test_sources Test/*.cpp) diff --git a/Engine/Source/Core/Include/Core/EngineVersion.h b/Engine/Source/Core/Include/Core/EngineVersion.h deleted file mode 100644 index edbbbcb6..00000000 --- a/Engine/Source/Core/Include/Core/EngineVersion.h +++ /dev/null @@ -1,9 +0,0 @@ -// -// Created by johnk on 2025/8/16. -// - -#pragma once - -#define ENGINE_VERSION_MAJOR 0 -#define ENGINE_VERSION_MINOR 0 -#define ENGINE_VERSION_PATCH 1 diff --git a/Engine/Source/Core/Template/EngineVersion.h.in b/Engine/Source/Core/Template/EngineVersion.h.in new file mode 100644 index 00000000..947c8382 --- /dev/null +++ b/Engine/Source/Core/Template/EngineVersion.h.in @@ -0,0 +1,9 @@ +// +// generated by cmake configure tool, do not modify this file manually +// + +#pragma once + +#define ENGINE_VERSION_MAJOR @SUB_PROJECT_VERSION_MAJOR@ +#define ENGINE_VERSION_MINOR @SUB_PROJECT_VERSION_MINOR@ +#define ENGINE_VERSION_PATCH @SUB_PROJECT_VERSION_PATCH@ diff --git a/Engine/Source/Launch/CMakeLists.txt b/Engine/Source/Launch/CMakeLists.txt index b90dcb38..113ae20f 100644 --- a/Engine/Source/Launch/CMakeLists.txt +++ b/Engine/Source/Launch/CMakeLists.txt @@ -4,6 +4,5 @@ exp_add_library( TYPE STATIC SRC ${sources} PUBLIC_INC Include - PUBLIC_LIB Runtime - PUBLIC_MERGE_LIB glfw::glfw + PUBLIC_LIB Runtime glfw::glfw ) \ No newline at end of file diff --git a/Engine/Source/RHI-DirectX12/CMakeLists.txt b/Engine/Source/RHI-DirectX12/CMakeLists.txt index e42791ca..fdb59b50 100644 --- a/Engine/Source/RHI-DirectX12/CMakeLists.txt +++ b/Engine/Source/RHI-DirectX12/CMakeLists.txt @@ -4,6 +4,5 @@ exp_add_library( TYPE SHARED SRC ${sources} PUBLIC_INC Include - PUBLIC_LIB RHI d3d12 - PUBLIC_MERGE_LIB Microsoft::DirectX-Headers dxgi d3dcompiler + PUBLIC_LIB RHI d3d12 Microsoft::DirectX-Headers dxgi d3dcompiler ) diff --git a/Engine/Source/RHI-Vulkan/CMakeLists.txt b/Engine/Source/RHI-Vulkan/CMakeLists.txt index bad54060..9930cb16 100644 --- a/Engine/Source/RHI-Vulkan/CMakeLists.txt +++ b/Engine/Source/RHI-Vulkan/CMakeLists.txt @@ -12,8 +12,7 @@ exp_add_library( TYPE SHARED SRC ${sources} ${platform_sources} PUBLIC_INC Include - PUBLIC_LIB RHI ${platform_ext_libs} - PUBLIC_MERGE_LIB Vulkan::Headers Vulkan::Loader vulkan-validationlayers::vulkan-validationlayers spirv-cross::spirv-cross GPUOpen::VulkanMemoryAllocator + PUBLIC_LIB RHI ${platform_ext_libs} Vulkan::Headers Vulkan::Loader vulkan-validationlayers::vulkan-validationlayers spirv-cross::spirv-cross GPUOpen::VulkanMemoryAllocator ) # .mm files can not perform unity build with .cpp files diff --git a/Engine/Source/Render/CMakeLists.txt b/Engine/Source/Render/CMakeLists.txt index f391457a..f2f25cc3 100644 --- a/Engine/Source/Render/CMakeLists.txt +++ b/Engine/Source/Render/CMakeLists.txt @@ -4,8 +4,7 @@ exp_add_library( TYPE STATIC SRC ${sources} PUBLIC_INC Include - PUBLIC_LIB Core RHI - PUBLIC_MERGE_LIB dxc::dxc spirv-cross::spirv-cross + PUBLIC_LIB Core RHI dxc::dxc spirv-cross::spirv-cross ) file(GLOB shader_sources SharedSrc/*.cpp) diff --git a/Engine/Source/Runtime/CMakeLists.txt b/Engine/Source/Runtime/CMakeLists.txt index 6acf4247..66316f76 100644 --- a/Engine/Source/Runtime/CMakeLists.txt +++ b/Engine/Source/Runtime/CMakeLists.txt @@ -5,8 +5,7 @@ exp_add_library( SRC ${sources} PUBLIC_INC Include REFLECT Include - PUBLIC_LIB Core Mirror Render - PUBLIC_MERGE_LIB assimp::assimp + PUBLIC_LIB Core Mirror Render assimp::assimp ) file(GLOB test_sources Test/*.cpp) diff --git a/Engine/Source/Test/CMakeLists.txt b/Engine/Source/Test/CMakeLists.txt index b1a388f5..51dac0de 100644 --- a/Engine/Source/Test/CMakeLists.txt +++ b/Engine/Source/Test/CMakeLists.txt @@ -3,6 +3,5 @@ exp_add_library( TYPE STATIC SRC Src/Main.cpp PUBLIC_INC Include - PUBLIC_LIB Core - PUBLIC_MERGE_LIB GTest::gtest + PUBLIC_LIB Core GTest::gtest ) \ No newline at end of file diff --git a/Sample/CMakeLists.txt b/Sample/CMakeLists.txt index 500c1c37..eb9fc4bb 100644 --- a/Sample/CMakeLists.txt +++ b/Sample/CMakeLists.txt @@ -4,6 +4,10 @@ function(add_sample) set(multiValueArgs SRC INC SHADER IMAGE MODEL) cmake_parse_arguments(arg "${options}" "${singleValueArgs}" "${multiValueArgs}" ${ARGN}) + if (NOT ${BUILD_SAMPLE}) + return() + endif () + if (${CMAKE_SYSTEM_NAME} STREQUAL "Windows") set(platform_dep_target RHI-DirectX12 RHI-Vulkan) else() @@ -25,11 +29,11 @@ function(add_sample) list(APPEND paths ${path}) endforeach() - list(APPEND paths "${CMAKE_SOURCE_DIR}/${ENGINE_SUB_PROJECT_NAME}/Shader/Platform.esh->../Test/Sample/ShaderInclude/Platform.esh") + list(APPEND paths "${CMAKE_SOURCE_DIR}/Engine/Shader/Platform.esh->../Test/Sample/ShaderInclude/Platform.esh") exp_add_executable( - SAMPLE NAME ${arg_NAME} + FOLDER Sample SRC ${arg_SRC} INC ${arg_INC} LIB Sample-Base @@ -52,8 +56,7 @@ exp_add_library( NAME Sample-Base SRC ${sources} PUBLIC_INC Base - PUBLIC_LIB RHI ${platform_ext_libs} Render.Static - PUBLIC_MERGE_LIB glfw::glfw clipp::clipp stb::stb assimp::assimp + PUBLIC_LIB RHI ${platform_ext_libs} Render.Static glfw::glfw clipp::clipp stb::stb assimp::assimp NOT_INSTALL ) @@ -106,7 +109,7 @@ add_sample( file(GLOB sources Rendering-BaseTexture/*.cpp) add_sample( - NAME Rendering-BaseTexture + NAME RenderingSample-BaseTexture SRC ${sources} INC Rendering-BaseTexture SHADER Rendering-BaseTexture/BaseTexture.esl @@ -115,7 +118,7 @@ add_sample( file(GLOB SOURCES Rendering-SSAO/*.cpp) add_sample( - NAME Rendering-SSAO + NAME RenderingSample-SSAO SRC ${SOURCES} INC Rendering-SSAO SHADER diff --git a/TestProject/CMakeLists.txt b/TestProject/CMakeLists.txt new file mode 100644 index 00000000..bc5a8fe1 --- /dev/null +++ b/TestProject/CMakeLists.txt @@ -0,0 +1,18 @@ +cmake_minimum_required(VERSION 3.25) + +project(ExplosionTest) + +set(ENGINE_ROOT "" CACHE STRING "Root directory of engine (where ExplosionConfig.cmake inside), support source build engine or packed engine.") +set(SUB_PROJECT_NAME "ExplosionTest" CACHE STRING "Name of project." FORCE) +if ("${ENGINE_ROOT}" STREQUAL "") + message(FATAL_ERROR "ENGINE_ROOT not set, please add -DENGINE_ROOT=/path/to/engine/root to cmake arguments.") +endif () + +set(CMAKE_PREFIX_PATH ${ENGINE_ROOT}) +find_package(Explosion REQUIRED) + +exp_add_executable( + NAME Main + SRC Main.cpp + LIB Explosion::Core +) diff --git a/TestProject/Main.cpp b/TestProject/Main.cpp new file mode 100644 index 00000000..592b3f5a --- /dev/null +++ b/TestProject/Main.cpp @@ -0,0 +1,7 @@ +#include + +int main() +{ + LogInfo(Project, "Hello, explosion"); + return 0; +} diff --git a/ThirdParty/CMakeLists.txt b/ThirdParty/Registry.cmake similarity index 85% rename from ThirdParty/CMakeLists.txt rename to ThirdParty/Registry.cmake index 36bb7f8c..c062eb43 100644 --- a/ThirdParty/CMakeLists.txt +++ b/ThirdParty/Registry.cmake @@ -1,3 +1,9 @@ +if (${USE_CONAN}) + install(CODE "execute_process(COMMAND conan install ${CMAKE_SOURCE_DIR} -c tools.cmake.cmakedeps:new=will_break_next --deployer=full_deploy --output-folder=${CMAKE_INSTALL_PREFIX}/${SUB_PROJECT_NAME}/ThirdParty)") +else () + set(CMAKE_PREFIX_PATH "${CMAKE_PREFIX_PATH};${CMAKE_CURRENT_LIST_DIR}/../../ThirdParty") +endif () + find_package(httplib REQUIRED GLOBAL) find_package(glfw REQUIRED GLOBAL) find_package(stb REQUIRED GLOBAL) diff --git a/Tool/MirrorTool/CMakeLists.txt b/Tool/MirrorTool/CMakeLists.txt index 97e2009a..7eb01bf9 100644 --- a/Tool/MirrorTool/CMakeLists.txt +++ b/Tool/MirrorTool/CMakeLists.txt @@ -3,8 +3,7 @@ exp_add_library( NAME MirrorTool.Static SRC ${sources} PUBLIC_INC Include - PUBLIC_LIB Mirror - PUBLIC_MERGE_LIB libclang::libclang clipp::clipp + PUBLIC_LIB Mirror libclang::libclang clipp::clipp ) file(GLOB exe_sources ExeSrc/*.cpp) @@ -22,5 +21,5 @@ exp_add_test( LIB MirrorTool.Static RES ${CMAKE_CURRENT_SOURCE_DIR}/Test/MirrorToolInput.h->../Test/Resource/Mirror/MirrorToolInput.h - ${CMAKE_SOURCE_DIR}/${ENGINE_SUB_PROJECT_NAME}/Source/Mirror/Include/Mirror/Meta.h->../Test/Resource/Mirror/Mirror/Meta.h + ${CMAKE_SOURCE_DIR}/Engine/Source/Mirror/Include/Mirror/Meta.h->../Test/Resource/Mirror/Mirror/Meta.h ) diff --git a/conan_provider.cmake b/conan_provider.cmake index d9f11413..f2007215 100644 --- a/conan_provider.cmake +++ b/conan_provider.cmake @@ -461,7 +461,9 @@ endfunction() function(conan_install) - set(conan_output_folder ${CMAKE_BINARY_DIR}/conan) + # ++[kindem] + set(conan_output_folder ${CMAKE_BINARY_DIR}/Conan) + # --[kindem] # Invoke "conan install" with the provided arguments set(conan_args -of=${conan_output_folder}) message(STATUS "CMake-Conan: conan install ${CMAKE_SOURCE_DIR} ${conan_args} ${ARGN}") @@ -707,7 +709,7 @@ cmake_language(DEFER DIRECTORY "${CMAKE_SOURCE_DIR}" CALL conan_provide_dependen set(CONAN_HOST_PROFILE "default;auto-cmake" CACHE STRING "Conan host profile") set(CONAN_BUILD_PROFILE "default" CACHE STRING "Conan build profile") # ++[kindem] -set(CONAN_INSTALL_ARGS "--build=missing;-c;tools.cmake.cmakedeps:new=will_break_next" CACHE STRING "Command line arguments for conan install") +set(CONAN_INSTALL_ARGS "--build=missing;-c;tools.cmake.cmakedeps:new=will_break_next;--deployer=full_deploy;--output-folder=ThirdParty" CACHE STRING "Command line arguments for conan install") # --[kindem] find_program(_cmake_program NAMES cmake NO_PACKAGE_ROOT_PATH NO_CMAKE_PATH NO_CMAKE_ENVIRONMENT_PATH NO_CMAKE_SYSTEM_PATH NO_CMAKE_FIND_ROOT_PATH)