Selaa lähdekoodia

WIP, need to merge from development

Signed-off-by: Esteban Papp <[email protected]>
Esteban Papp 3 vuotta sitten
vanhempi
commit
c842fce4bf

+ 1 - 1
cmake/Install.cmake

@@ -168,4 +168,4 @@ function(ly_install_run_script SCRIPT)
         COMPONENT ${CMAKE_INSTALL_DEFAULT_COMPONENT_NAME} # use the default for the time being
     )
 
-endfunction()
+endfunction()

+ 25 - 10
cmake/Packaging.cmake

@@ -136,6 +136,7 @@ endif()
 
 install(FILES ${_cmake_package_dest}
     DESTINATION ./Tools/Redistributables/CMake
+    COMPONENT ${CMAKE_INSTALL_DEFAULT_COMPONENT_NAME}
 )
 
 # the version string and git tags are intended to be synchronized so it should be safe to use that instead
@@ -159,6 +160,7 @@ if(${CPACK_PACKAGE_VERSION} VERSION_GREATER "0.0.0.0")
     if (${_status_code} EQUAL 0 AND EXISTS ${_3rd_party_license_dest})
         install(FILES ${_3rd_party_license_dest}
             DESTINATION .
+            COMPONENT ${CMAKE_INSTALL_DEFAULT_COMPONENT_NAME}
         )
     else()
         file(REMOVE ${_3rd_party_license_dest})
@@ -242,29 +244,35 @@ ly_configure_cpack_component(
     DISPLAY_NAME "${PROJECT_NAME}"
     DESCRIPTION "${PROJECT_NAME} Headers, scripts and common files"
 )
-#file(APPEND "${CPACK_OUTPUT_CONFIG_FILE}" "set(LY_CPACK_COMPONENTS_ALL ${CMAKE_INSTALL_DEFAULT_COMPONENT_NAME})\n")
+
+file(APPEND "${CPACK_OUTPUT_CONFIG_FILE}" "set(LY_CPACK_COMPONENTS_ALL ${CMAKE_INSTALL_DEFAULT_COMPONENT_NAME})\n")
 
 foreach(conf IN LISTS CMAKE_CONFIGURATION_TYPES)
     string(TOUPPER ${conf} UCONF)
     unset(flags)
-    if(${conf} STREQUAL profile)
+    if(${conf} STREQUAL profile AND ${LY_BUILD_PERMUTATION} STREQUAL Default)
         set(flags REQUIRED)
     else()
         set(flags DISABLED)
     endif()
 
+    unset(permutation_description)
+    if(${LY_BUILD_PERMUTATION} STREQUAL Monolithic)
+        set(permutation_description " monolithic ")
+    endif()
+
     # Inject a check to not declare components that have not been built. We are using AzCore since that is a
     # common target that will always be build, in every permutation and configuration
-    #file(APPEND "${CPACK_OUTPUT_CONFIG_FILE}" 
-    #    "if(EXISTS \"${CMAKE_ARCHIVE_OUTPUT_DIRECTORY}/${conf}/${CMAKE_STATIC_LIBRARY_PREFIX}AzCore${CMAKE_STATIC_LIBRARY_SUFFIX}\")\n")
+    file(APPEND "${CPACK_OUTPUT_CONFIG_FILE}" 
+        "if(EXISTS \"${CMAKE_ARCHIVE_OUTPUT_DIRECTORY}/${conf}/${CMAKE_STATIC_LIBRARY_PREFIX}AzCore${CMAKE_STATIC_LIBRARY_SUFFIX}\")\n")
     ly_configure_cpack_component(
-        ${CMAKE_INSTALL_DEFAULT_COMPONENT_NAME}_${UCONF} ${flags}
+        ${LY_INSTALL_PERMUTATION_COMPONENT}_${UCONF} ${flags}
         DISPLAY_NAME "${PROJECT_NAME} (${conf})"
-        DESCRIPTION "${PROJECT_NAME} Libraries and Tools in ${conf}"
+        DESCRIPTION "${PROJECT_NAME} Libraries and Tools in${permutation_description}${conf}"
     )
-    #file(APPEND "${CPACK_OUTPUT_CONFIG_FILE}" 
-#"list(APPEND LY_CPACK_COMPONENTS_ALL ${CMAKE_INSTALL_DEFAULT_COMPONENT_NAME}_${UCONF})
-#endif()\n")
+    file(APPEND "${CPACK_OUTPUT_CONFIG_FILE}" 
+"list(APPEND LY_CPACK_COMPONENTS_ALL ${CMAKE_INSTALL_DEFAULT_COMPONENT_NAME}_${UCONF})
+endif()\n")
 
 endforeach()
 
@@ -279,4 +287,11 @@ if(LY_INSTALLER_DOWNLOAD_URL)
     )
 endif()
 
-#file(APPEND "${CPACK_OUTPUT_CONFIG_FILE}" "set(CPACK_COMPONENTS_ALL \${LY_CPACK_COMPONENTS_ALL})\n")
+# Inject other build directories
+foreach(external_dir ${LY_INSTALL_EXTERNAL_BUILD_DIRS})
+    file(APPEND "${CPACK_OUTPUT_CONFIG_FILE}"
+        "include(${external_dir}/CPackConfig.cmake)\n"
+    )
+endforeach()
+
+file(APPEND "${CPACK_OUTPUT_CONFIG_FILE}" "set(CPACK_COMPONENTS_ALL \${LY_CPACK_COMPONENTS_ALL})\n")

+ 49 - 24
cmake/Platform/Common/Install_common.cmake

@@ -8,6 +8,8 @@
 
 include(cmake/FileUtil.cmake)
 
+set(LY_INSTALL_EXTERNAL_BUILD_DIRS "" CACHE PATH "External build directories to be included in the install process. This allows to package non-monolithic and monolithic.")
+
 set(CMAKE_INSTALL_MESSAGE NEVER) # Simplify messages to reduce output noise
 
 define_property(TARGET PROPERTY LY_INSTALL_GENERATE_RUN_TARGET
@@ -19,12 +21,25 @@ define_property(TARGET PROPERTY LY_INSTALL_GENERATE_RUN_TARGET
     ]]
 )
 
-ly_set(CMAKE_INSTALL_DEFAULT_COMPONENT_NAME Core)
+# We can have elements being installed under the following components:
+# - Core (required for all) (default)
+# - Default
+#   - Default_$<CONFIG>
+# - Monolithic
+#   - Monolithic_$<CONFIG>
+# Debug/Monolithic are build permutations, so for a CMake run, it can only generate
+# one of the permutations. Each build permutation can generate only one cmake_install.cmake.
+# Each build permutation will generate the same elements in Core.
+# CPack is able to put the two together by taking Core from one permutation and then taking
+# each permutation.
 
+ly_set(CMAKE_INSTALL_DEFAULT_COMPONENT_NAME Core)
 if(LY_MONOLITHIC_GAME)
     set(LY_BUILD_PERMUTATION Monolithic)
+    set(LY_INSTALL_PERMUTATION_COMPONENT Monolithic)
 else()
     set(LY_BUILD_PERMUTATION Default)
+    set(LY_INSTALL_PERMUTATION_COMPONENT Default)
 endif()
 
 cmake_path(RELATIVE_PATH CMAKE_RUNTIME_OUTPUT_DIRECTORY BASE_DIRECTORY ${CMAKE_BINARY_DIR} OUTPUT_VARIABLE runtime_output_directory)
@@ -106,19 +121,18 @@ function(ly_setup_target OUTPUT_CONFIGURED_TARGET ALIAS_TARGET_NAME absolute_tar
     else()
         foreach(conf IN LISTS CMAKE_CONFIGURATION_TYPES)
             string(TOUPPER ${conf} UCONF)
-            install(
-                TARGETS ${TARGET_NAME}
+            install(TARGETS ${TARGET_NAME}
                 ARCHIVE
                     DESTINATION ${archive_output_directory}
-                    COMPONENT ${CMAKE_INSTALL_DEFAULT_COMPONENT_NAME}_${UCONF}
+                    COMPONENT ${LY_INSTALL_PERMUTATION_COMPONENT}_${UCONF}
                     CONFIGURATIONS ${conf}
                 LIBRARY
                     DESTINATION ${library_output_directory}/${target_library_output_subdirectory}
-                    COMPONENT ${CMAKE_INSTALL_DEFAULT_COMPONENT_NAME}_${UCONF}
+                    COMPONENT ${LY_INSTALL_PERMUTATION_COMPONENT}_${UCONF}
                     CONFIGURATIONS ${conf}
                 RUNTIME
                     DESTINATION ${runtime_output_directory}/${target_runtime_output_subdirectory}
-                    COMPONENT ${CMAKE_INSTALL_DEFAULT_COMPONENT_NAME}_${UCONF}
+                    COMPONENT ${LY_INSTALL_PERMUTATION_COMPONENT}_${UCONF}
                     CONFIGURATIONS ${conf}
             )
         endforeach()
@@ -275,10 +289,15 @@ set_property(TARGET ${NAME_PLACEHOLDER}
 
     set(target_install_source_dir ${CMAKE_CURRENT_BINARY_DIR}/install/${relative_target_source_dir})
     file(GENERATE OUTPUT "${target_install_source_dir}/Platform/${PAL_PLATFORM_NAME}/${LY_BUILD_PERMUTATION}/${NAME_PLACEHOLDER}_$<CONFIG>.cmake" CONTENT "${target_file_contents}")
-    install(FILES "${target_install_source_dir}/Platform/${PAL_PLATFORM_NAME}/${LY_BUILD_PERMUTATION}/${NAME_PLACEHOLDER}_$<CONFIG>.cmake"
-        DESTINATION ${relative_target_source_dir}/Platform/${PAL_PLATFORM_NAME}/${LY_BUILD_PERMUTATION}
-        COMPONENT ${CMAKE_INSTALL_DEFAULT_COMPONENT_NAME}
-    )
+
+    foreach(conf IN LISTS CMAKE_CONFIGURATION_TYPES)
+        string(TOUPPER ${conf} UCONF)
+        install(FILES "${target_install_source_dir}/Platform/${PAL_PLATFORM_NAME}/${LY_BUILD_PERMUTATION}/${NAME_PLACEHOLDER}_${conf}.cmake"
+            DESTINATION ${relative_target_source_dir}/Platform/${PAL_PLATFORM_NAME}/${LY_BUILD_PERMUTATION}
+            COMPONENT ${LY_INSTALL_PERMUTATION_COMPONENT}_${UCONF}
+            CONFIGURATIONS  ${conf}
+        )
+    endforeach()  
 
     # Since a CMakeLists.txt could contain multiple targets, we generate it in a folder per target
     ly_file_read(${LY_ROOT_FOLDER}/cmake/install/InstalledTarget.in target_cmakelists_template)
@@ -353,9 +372,10 @@ endif()
         "${GEM_VARIANT_TO_LOAD_PLACEHOLDER}"
         "${ENABLE_GEMS_PLACEHOLDER}"
     )
+
     install(FILES "${target_install_source_dir}/Platform/${PAL_PLATFORM_NAME}/${LY_BUILD_PERMUTATION}/permutation.cmake"
-        DESTINATION ${relative_target_source_dir}//Platform/${PAL_PLATFORM_NAME}/${LY_BUILD_PERMUTATION}
-        COMPONENT ${CMAKE_INSTALL_DEFAULT_COMPONENT_NAME}
+        DESTINATION ${relative_target_source_dir}/Platform/${PAL_PLATFORM_NAME}/${LY_BUILD_PERMUTATION}
+        COMPONENT ${LY_INSTALL_PERMUTATION_COMPONENT}
     )
 
 endfunction()
@@ -377,6 +397,11 @@ function(ly_setup_o3de_install)
         COMPONENT ${CMAKE_INSTALL_DEFAULT_COMPONENT_NAME}
     )
 
+    # Inject other build directories
+    foreach(external_dir ${LY_INSTALL_EXTERNAL_BUILD_DIRS})
+        install(CODE "include(${external_dir}/cmake_install.cmake)")
+    endforeach()
+
     if(COMMAND ly_post_install_steps)
         ly_post_install_steps()
     endif()
@@ -399,18 +424,19 @@ function(ly_setup_cmake_install)
         DESTINATION cmake
         COMPONENT ${CMAKE_INSTALL_DEFAULT_COMPONENT_NAME}
     )
-    # Inject code that will generate each ConfigurationType_<CONFIG>.cmake file
-    set(install_configuration_type_template [=[
-        configure_file(@LY_ROOT_FOLDER@/cmake/install/ConfigurationType_config.cmake.in
-            ${CMAKE_INSTALL_PREFIX}/cmake/Platform/@PAL_PLATFORM_NAME@/@LY_BUILD_PERMUTATION@/ConfigurationTypes_${CMAKE_INSTALL_CONFIG_NAME}.cmake
+    # generate each ConfigurationType_<CONFIG>.cmake file and install it under that configuration
+    foreach(conf IN LISTS CMAKE_CONFIGURATION_TYPES)
+        string(TOUPPER ${conf} UCONF)
+        configure_file("${LY_ROOT_FOLDER}/cmake/install/ConfigurationType_config.cmake.in"
+            "${CMAKE_BINARY_DIR}/cmake/Platform/${PAL_PLATFORM_NAME}/${LY_BUILD_PERMUTATION}/ConfigurationTypes_${conf}.cmake"
             @ONLY
         )
-        message(STATUS "Generated ${CMAKE_INSTALL_PREFIX}/cmake/Platform/@PAL_PLATFORM_NAME@/@LY_BUILD_PERMUTATION@/ConfigurationTypes_${CMAKE_INSTALL_CONFIG_NAME}.cmake")
-    ]=])
-    string(CONFIGURE "${install_configuration_type_template}" install_configuration_type @ONLY)
-    install(CODE "${install_configuration_type}"
-        COMPONENT ${CMAKE_INSTALL_DEFAULT_COMPONENT_NAME}
-    )
+        install(FILES "${CMAKE_BINARY_DIR}/cmake/Platform/${PAL_PLATFORM_NAME}/${LY_BUILD_PERMUTATION}/ConfigurationTypes_${conf}.cmake"
+            DESTINATION cmake/Platform/${PAL_PLATFORM_NAME}/${LY_BUILD_PERMUTATION}
+            COMPONENT ${LY_INSTALL_PERMUTATION_COMPONENT}_${UCONF}
+            CONFIGURATIONS ${conf}
+        )
+    endforeach()
 
     # Transform the LY_EXTERNAL_SUBDIRS list into a json array
     set(indent "        ")
@@ -429,8 +455,7 @@ function(ly_setup_cmake_install)
 
     configure_file(${LY_ROOT_FOLDER}/cmake/install/engine.json.in ${CMAKE_CURRENT_BINARY_DIR}/cmake/engine.json @ONLY)
 
-    install(
-        FILES
+    install(FILES
             "${LY_ROOT_FOLDER}/CMakeLists.txt"
             "${CMAKE_CURRENT_BINARY_DIR}/cmake/engine.json"
         DESTINATION .

+ 25 - 18
cmake/Platform/Mac/Install_mac.cmake

@@ -58,24 +58,31 @@ function(ly_install_target_override)
         set_property(TARGET ${ly_platform_install_target_TARGET} PROPERTY RESOURCE "")
     endif()
     
-    install(
-        TARGETS ${ly_platform_install_target_TARGET}
-        ARCHIVE
-            DESTINATION ${ly_platform_install_target_ARCHIVE_DIR}
-            COMPONENT ${CMAKE_INSTALL_DEFAULT_COMPONENT_NAME}
-        LIBRARY
-            DESTINATION ${ly_platform_install_target_LIBRARY_DIR}/${ly_platform_install_target_LIBRARY_SUBDIR}
-            COMPONENT ${CMAKE_INSTALL_DEFAULT_COMPONENT_NAME}
-        RUNTIME
-            DESTINATION ${ly_platform_install_target_RUNTIME_DIR}/${ly_platform_install_target_RUNTIME_SUBDIR}
-            COMPONENT ${CMAKE_INSTALL_DEFAULT_COMPONENT_NAME}
-        BUNDLE
-            DESTINATION ${ly_platform_install_target_RUNTIME_DIR}/${ly_platform_install_target_RUNTIME_SUBDIR}
-            COMPONENT ${CMAKE_INSTALL_DEFAULT_COMPONENT_NAME}
-        RESOURCE
-            DESTINATION ${ly_platform_install_target_RUNTIME_DIR}/${ly_platform_install_target_RUNTIME_SUBDIR}
-            COMPONENT ${CMAKE_INSTALL_DEFAULT_COMPONENT_NAME}
-    )
+    foreach(conf IN LISTS CMAKE_CONFIGURATION_TYPES)
+        string(TOUPPER ${conf} UCONF)
+        install(TARGETS ${TARGET_NAME}
+            ARCHIVE
+                DESTINATION ${ly_platform_install_target_ARCHIVE_DIR}
+                COMPONENT ${LY_INSTALL_PERMUTATION_COMPONENT}_${UCONF}
+                CONFIGURATIONS ${conf}
+            LIBRARY
+                DESTINATION ${ly_platform_install_target_LIBRARY_DIR}/${ly_platform_install_target_LIBRARY_SUBDIR}
+                COMPONENT ${LY_INSTALL_PERMUTATION_COMPONENT}_${UCONF}
+                CONFIGURATIONS ${conf}
+            RUNTIME
+                DESTINATION ${ly_platform_install_target_RUNTIME_DIR}/${ly_platform_install_target_RUNTIME_SUBDIR}
+                COMPONENT ${LY_INSTALL_PERMUTATION_COMPONENT}_${UCONF}
+                CONFIGURATIONS ${conf}
+            BUNDLE
+                DESTINATION ${ly_platform_install_target_RUNTIME_DIR}/${ly_platform_install_target_RUNTIME_SUBDIR}
+                COMPONENT ${LY_INSTALL_PERMUTATION_COMPONENT}_${UCONF}
+                CONFIGURATIONS ${conf}
+            RESOURCE
+                DESTINATION ${ly_platform_install_target_RUNTIME_DIR}/${ly_platform_install_target_RUNTIME_SUBDIR}
+                COMPONENT ${LY_INSTALL_PERMUTATION_COMPONENT}_${UCONF}
+                CONFIGURATIONS ${conf}
+        )
+    endforeach()
 
     set(install_relative_binaries_path "${ly_platform_install_target_RUNTIME_DIR}/${ly_platform_install_target_RUNTIME_SUBDIR}")