Skip to content

Commit 7927320

Browse files
committed
refactor: remove merge lib support, change to pack 3rd packages to installed pack
1 parent ebabae5 commit 7927320

File tree

21 files changed

+78
-125
lines changed

21 files changed

+78
-125
lines changed

.github/workflows/build.yml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -69,3 +69,5 @@ jobs:
6969

7070
- name: Install
7171
run: cmake --build ${{github.workspace}}/build --config ${{env.BUILD_TYPE}} --target install -j ${{env.MAKE_THREAD_NUM}}
72+
73+
# TODO build test project

.gitignore

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,5 +19,7 @@ ThirdParty/ConanRecipes/**/build
1919
ThirdParty/ConanRecipes/**/CMakeUserPresets.json
2020

2121
# Test Project
22+
TestProject/.idea
23+
TestProject/.vscode
2224
TestProject/cmake-build*
2325
TestProject/build*

CMake/Config.cmake.in

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,10 @@
11
@PACKAGE_INIT@
22

3+
file(GLOB_RECURSE cmake_libs ${CMAKE_CURRENT_LIST_DIR}/CMake/*.cmake)
4+
foreach (cmake_lib ${cmake_libs})
5+
include(${cmake_lib})
6+
endforeach ()
7+
38
include(${CMAKE_CURRENT_LIST_DIR}/@SUB_PROJECT_NAME@Targets.cmake)
4-
include(${CMAKE_CURRENT_LIST_DIR}/Common.cmake)
5-
include(${CMAKE_CURRENT_LIST_DIR}/Target.cmake)
69

710
check_required_components(@SUB_PROJECT_NAME@)

CMake/Target.cmake

Lines changed: 41 additions & 96 deletions
Original file line numberDiff line numberDiff line change
@@ -33,20 +33,7 @@ function(exp_gather_target_runtime_dependencies_recurse)
3333

3434
get_target_property(runtime_dep ${arg_NAME} RUNTIME_DEP)
3535
if (NOT ("${runtime_dep}" STREQUAL "runtime_dep-NOTFOUND"))
36-
foreach(r ${runtime_dep})
37-
# workaround to make EXPORT_PROPERTIES support generator expression
38-
string(REPLACE "[" "$<" r "${r}")
39-
string(REPLACE "]" ">" r "${r}")
40-
41-
get_target_property(type ${arg_NAME} TYPE)
42-
if (${type} STREQUAL "SHARED_LIBRARY")
43-
set(target_bin_dir $<TARGET_FILE_DIR:${arg_NAME}>)
44-
else ()
45-
set(target_bin_dir $<TARGET_FILE_DIR:${arg_NAME}>/../Binaries)
46-
endif ()
47-
string(REPLACE "$<TARGET_BIN_DIR>" ${target_bin_dir} temp_r ${r})
48-
list(APPEND result_runtime_dep ${temp_r})
49-
endforeach()
36+
list(APPEND result_runtime_dep ${runtime_dep})
5037
endif()
5138

5239
get_target_property(libs ${arg_NAME} LINK_LIBRARIES)
@@ -100,6 +87,7 @@ function(exp_process_runtime_dependencies)
10087
list(APPEND dep_targets ${dep_dep_targets})
10188
endforeach ()
10289

90+
set(copy_commands COMMAND ${CMAKE_COMMAND} -E make_directory $<TARGET_FILE_DIR:${arg_NAME}>)
10391
foreach(r ${runtime_deps})
10492
list(APPEND copy_commands COMMAND ${CMAKE_COMMAND} -E copy_if_different ${r} $<TARGET_FILE_DIR:${arg_NAME}>)
10593
endforeach()
@@ -377,7 +365,7 @@ function(exp_add_executable)
377365
export(
378366
TARGETS ${arg_NAME}
379367
NAMESPACE ${SUB_PROJECT_NAME}::
380-
APPEND FILE ${CMAKE_BINARY_DIR}/CMake/${SUB_PROJECT_NAME}Targets.cmake
368+
APPEND FILE ${CMAKE_BINARY_DIR}/${SUB_PROJECT_NAME}Targets.cmake
381369
)
382370

383371
if (${CMAKE_SYSTEM_NAME} STREQUAL "Darwin")
@@ -389,7 +377,7 @@ endfunction()
389377
function(exp_add_library)
390378
set(options NOT_INSTALL)
391379
set(singleValueArgs NAME TYPE)
392-
set(multiValueArgs SRC PRIVATE_INC PUBLIC_INC PRIVATE_LINK PUBLIC_LINK PRIVATE_LIB PUBLIC_LIB PRIVATE_MERGE_LIB PUBLIC_MERGE_LIB REFLECT)
380+
set(multiValueArgs SRC PRIVATE_INC PUBLIC_INC PRIVATE_LINK PUBLIC_LINK PRIVATE_LIB PUBLIC_LIB REFLECT)
393381
cmake_parse_arguments(arg "${options}" "${singleValueArgs}" "${multiValueArgs}" ${ARGN})
394382

395383
if ("${arg_TYPE}" STREQUAL "SHARED")
@@ -441,27 +429,6 @@ function(exp_add_library)
441429
)
442430

443431
foreach (inc ${arg_PUBLIC_INC})
444-
list(APPEND public_inc ${inc})
445-
endforeach ()
446-
foreach (lib ${arg_PUBLIC_MERGE_LIB})
447-
if (NOT TARGET ${lib})
448-
continue()
449-
endif ()
450-
451-
get_target_property(target_includes ${lib} INTERFACE_INCLUDE_DIRECTORIES)
452-
if ("${target_includes}" STREQUAL "target_includes-NOTFOUND")
453-
continue()
454-
endif ()
455-
456-
string(REGEX MATCH "\\$\\<\\$\\<CONFIG:.+\\>:(.+)>" match "${target_includes}")
457-
if (match)
458-
list(APPEND public_inc ${CMAKE_MATCH_1})
459-
else ()
460-
list(APPEND public_inc ${target_includes})
461-
endif ()
462-
endforeach ()
463-
464-
foreach (inc ${public_inc})
465432
get_filename_component(absolute_inc ${inc} ABSOLUTE)
466433
list(APPEND public_build_inc $<BUILD_INTERFACE:${absolute_inc}>)
467434
endforeach ()
@@ -470,56 +437,17 @@ function(exp_add_library)
470437
PRIVATE ${arg_PRIVATE_INC}
471438
PUBLIC ${public_build_inc} $<INSTALL_INTERFACE:${SUB_PROJECT_NAME}/Target/${arg_NAME}/Include>
472439
)
473-
474440
target_link_directories(
475441
${arg_NAME}
476442
PRIVATE ${arg_PRIVATE_LINK}
477443
PUBLIC ${arg_PUBLIC_LINK}
478444
)
479-
480-
foreach (lib ${arg_PRIVATE_MERGE_LIB})
481-
list(APPEND merge_lib ${lib})
482-
endforeach ()
483-
foreach (lib ${arg_PUBLIC_MERGE_LIB})
484-
list(APPEND merge_lib ${lib})
485-
endforeach ()
486-
487-
foreach (lib ${merge_lib})
488-
list(APPEND build_merge_lib $<BUILD_INTERFACE:${lib}>)
489-
490-
exp_gather_target_runtime_dependencies_recurse(
491-
NAME ${lib}
492-
OUT_RUNTIME_DEP temp_runtime_dep
493-
)
494-
list(APPEND runtime_dep ${temp_runtime_dep})
495-
endforeach ()
496445
target_link_libraries(
497446
${arg_NAME}
498-
PRIVATE ${build_merge_lib}
447+
PRIVATE ${arg_PRIVATE_LIB}
499448
PUBLIC ${arg_PUBLIC_LIB}
500449
)
501450

502-
if (DEFINED runtime_dep)
503-
foreach (r ${runtime_dep})
504-
get_filename_component(FILE_NAME ${r} NAME)
505-
list(APPEND commands COMMAND ${CMAKE_COMMAND} -E copy_if_different ${r} ${runtime_output_dir}/${FILE_NAME})
506-
list(APPEND runtime_dep_files $<TARGET_BIN_DIR>/${FILE_NAME})
507-
endforeach ()
508-
add_custom_command(
509-
TARGET ${arg_NAME} POST_BUILD
510-
${commands}
511-
)
512-
513-
# workaround to make EXPORT_PROPERTIES support generator expression
514-
string(REPLACE "$<" "[" runtime_dep_files "${runtime_dep_files}")
515-
string(REPLACE ">" "]" runtime_dep_files "${runtime_dep_files}")
516-
set_target_properties(
517-
${arg_NAME} PROPERTIES
518-
EXPORT_PROPERTIES "RUNTIME_DEP"
519-
RUNTIME_DEP "${runtime_dep_files}"
520-
)
521-
endif ()
522-
523451
if ("${arg_TYPE}" STREQUAL "SHARED")
524452
string(TOUPPER ${arg_NAME}_API api_name)
525453
string(REPLACE "-" "/" api_dir ${arg_NAME})
@@ -536,21 +464,14 @@ function(exp_add_library)
536464
endif()
537465

538466
if (NOT ${arg_NOT_INSTALL})
539-
foreach (inc ${public_inc})
467+
foreach (inc ${arg_PUBLIC_INC})
540468
list(APPEND install_inc ${inc}/)
541469
endforeach ()
542470
install(
543471
DIRECTORY ${install_inc}
544472
DESTINATION ${SUB_PROJECT_NAME}/Target/${arg_NAME}/Include
545473
)
546474

547-
if (DEFINED runtime_dep)
548-
install(
549-
FILES ${runtime_dep}
550-
DESTINATION ${SUB_PROJECT_NAME}/Target/${arg_NAME}/Binaries
551-
)
552-
endif ()
553-
554475
install(
555476
TARGETS ${arg_NAME}
556477
EXPORT ${SUB_PROJECT_NAME}Targets
@@ -561,7 +482,7 @@ function(exp_add_library)
561482
export(
562483
TARGETS ${arg_NAME}
563484
NAMESPACE ${SUB_PROJECT_NAME}::
564-
APPEND FILE ${CMAKE_BINARY_DIR}/CMake/${SUB_PROJECT_NAME}Targets.cmake
485+
APPEND FILE ${CMAKE_BINARY_DIR}/${SUB_PROJECT_NAME}Targets.cmake
565486
)
566487

567488
if ("${arg_TYPE}" STREQUAL "SHARED")
@@ -654,33 +575,57 @@ install(
654575
EXPORT ${SUB_PROJECT_NAME}Targets
655576
FILE ${SUB_PROJECT_NAME}Targets.cmake
656577
NAMESPACE ${SUB_PROJECT_NAME}::
657-
DESTINATION ${SUB_PROJECT_NAME}/CMake
578+
DESTINATION ${SUB_PROJECT_NAME}
658579
)
659580

660581
configure_package_config_file(
661582
${CMAKE_CURRENT_LIST_DIR}/Config.cmake.in
662-
${CMAKE_BINARY_DIR}/CMake/${SUB_PROJECT_NAME}Config.cmake
583+
${CMAKE_BINARY_DIR}/${SUB_PROJECT_NAME}Config.cmake
663584
INSTALL_DESTINATION ${SUB_PROJECT_NAME}/CMake
664585
)
665586

666587
write_basic_package_version_file(
667-
${CMAKE_BINARY_DIR}/CMake/${SUB_PROJECT_NAME}ConfigVersion.cmake
588+
${CMAKE_BINARY_DIR}/${SUB_PROJECT_NAME}ConfigVersion.cmake
668589
VERSION ${SUB_PROJECT_VERSION_MAJOR}.${SUB_PROJECT_VERSION_MINOR}.${SUB_PROJECT_VERSION_PATCH}
669590
COMPATIBILITY SameMajorVersion
670591
)
671592

672593
install(
673594
FILES
674-
${CMAKE_BINARY_DIR}/CMake/${SUB_PROJECT_NAME}Config.cmake
675-
${CMAKE_BINARY_DIR}/CMake/${SUB_PROJECT_NAME}ConfigVersion.cmake
676-
DESTINATION ${SUB_PROJECT_NAME}/CMake
595+
${CMAKE_BINARY_DIR}/${SUB_PROJECT_NAME}Config.cmake
596+
${CMAKE_BINARY_DIR}/${SUB_PROJECT_NAME}ConfigVersion.cmake
597+
DESTINATION ${SUB_PROJECT_NAME}
677598
)
678599

679-
file(GLOB all_cmake_libs ${CMAKE_CURRENT_LIST_DIR}/*)
680-
foreach (cmake_lib ${all_cmake_libs})
681-
file(COPY ${cmake_lib} DESTINATION ${CMAKE_BINARY_DIR}/CMake)
600+
file(GLOB_RECURSE preset_cmake_libs ${CMAKE_CURRENT_LIST_DIR}/*)
601+
foreach (cmake_lib ${preset_cmake_libs})
602+
file(
603+
COPY ${cmake_lib}
604+
DESTINATION ${CMAKE_BINARY_DIR}/CMake
605+
)
682606
endforeach ()
683607
install(
684-
FILES ${all_cmake_libs}
608+
FILES ${preset_cmake_libs}
685609
DESTINATION ${SUB_PROJECT_NAME}/CMake
686610
)
611+
612+
if (DEFINED SUB_PROJECT_CMAKE_LIBS)
613+
foreach (cmake_lib ${SUB_PROJECT_CMAKE_LIBS})
614+
if (IS_ABSOLUTE ${cmake_lib})
615+
message(FATAL_ERROR "project cmake libs defined in SUB_PROJECT_CMAKE_LIBS should be relative path from project root")
616+
endif ()
617+
618+
set(src_file ${CMAKE_SOURCE_DIR}/${cmake_lib})
619+
get_filename_component(binary_tree_dst_dir ${CMAKE_BINARY_DIR}/CMake/${cmake_lib} DIRECTORY)
620+
get_filename_component(install_tree_dst_dir ${SUB_PROJECT_NAME}/CMake/${cmake_lib} DIRECTORY)
621+
622+
file(
623+
COPY ${src_file}
624+
DESTINATION ${binary_tree_dst_dir}
625+
)
626+
install(
627+
FILES ${src_file}
628+
DESTINATION ${install_tree_dst_dir}
629+
)
630+
endforeach ()
631+
endif ()

CMakeLists.txt

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,8 @@ set(SUB_PROJECT_NAME "Explosion" CACHE STRING "" FORCE)
1212
set(SUB_PROJECT_VERSION_MAJOR 0 CACHE STRING "" FORCE)
1313
set(SUB_PROJECT_VERSION_MINOR 0 CACHE STRING "" FORCE)
1414
set(SUB_PROJECT_VERSION_PATCH 1 CACHE STRING "" FORCE)
15+
set(SUB_PROJECT_CMAKE_LIBS "ThirdParty/Registry.cmake" CACHE STRING "" FORCE)
16+
set(USE_CONAN ON CACHE BOOL "" FORCE)
1517

1618
set(CMAKE_MAP_IMPORTED_CONFIG_DEBUG "Release" CACHE STRING "" FORCE)
1719
set(CMAKE_MAP_IMPORTED_CONFIG_RELWITHDEBINFO "Release" CACHE STRING "" FORCE)
@@ -21,8 +23,8 @@ add_definitions(-DBUILD_EDITOR=$<BOOL:BUILD_EDITOR>)
2123

2224
include(CMake/Common.cmake)
2325
include(CMake/Target.cmake)
26+
include(ThirdParty/Registry.cmake)
2427

25-
add_subdirectory(ThirdParty)
2628
add_subdirectory(Engine)
2729
add_subdirectory(Tool)
2830
add_subdirectory(Sample)

Editor/CMakeLists.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,7 @@ install(
7171
export(
7272
TARGETS Editor
7373
NAMESPACE ${SUB_PROJECT_NAME}::
74-
APPEND FILE ${CMAKE_BINARY_DIR}/CMake/${SUB_PROJECT_NAME}Targets.cmake
74+
APPEND FILE ${CMAKE_BINARY_DIR}/${SUB_PROJECT_NAME}Targets.cmake
7575
)
7676

7777
if (${CMAKE_SYSTEM_NAME} STREQUAL "Windows")
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
11
cmake_minimum_required(VERSION %{cmakeMinVersion})
22
project(%{projectName}%)
33

4-
%{commonCMakeScripts}
4+
%{findEngineCMakeScripts}%

Engine/Source/Common/CMakeLists.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ exp_add_library(
44
TYPE STATIC
55
SRC ${sources}
66
PUBLIC_INC Include
7-
PUBLIC_MERGE_LIB rapidjson::rapidjson debugbreak::debugbreak cityhash::cityhash Taskflow::Taskflow
7+
PUBLIC_LIB rapidjson::rapidjson debugbreak::debugbreak cityhash::cityhash Taskflow::Taskflow
88
)
99

1010
file(GLOB test_sources Test/*.cpp)

Engine/Source/Core/CMakeLists.txt

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,8 +11,7 @@ exp_add_library(
1111
TYPE SHARED
1212
SRC ${sources}
1313
PUBLIC_INC Include ${generated_include_dir}
14-
PUBLIC_LIB Common
15-
PUBLIC_MERGE_LIB clipp::clipp
14+
PUBLIC_LIB Common clipp::clipp
1615
)
1716

1817
file(GLOB test_sources Test/*.cpp)

Engine/Source/Launch/CMakeLists.txt

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,5 @@ exp_add_library(
44
TYPE STATIC
55
SRC ${sources}
66
PUBLIC_INC Include
7-
PUBLIC_LIB Runtime
8-
PUBLIC_MERGE_LIB glfw::glfw
7+
PUBLIC_LIB Runtime glfw::glfw
98
)

0 commit comments

Comments
 (0)