LYN-2421: Initial CPackIFW support for Windows

Merge pull request #224 from aws-lumberyard-dev/cpack_installer
This commit is contained in:
Scott Romero
2021-04-23 10:48:09 -07:00
committed by GitHub
11 changed files with 212 additions and 53 deletions
+5 -2
View File
@@ -119,7 +119,10 @@ endif()
include(cmake/RuntimeDependencies.cmake)
# 5. Perform test impact framework post steps once all of the targets have been enumerated
ly_test_impact_post_step()
# 6. Generate the O3DE find file and setup install locations for scripts, tools, assets etc., required by the engine
# 6. Generate the O3DE find file and setup install locations for scripts, tools, assets etc., required by the engine
if(NOT INSTALLED_ENGINE)
ly_setup_o3de_install()
endif()
# IMPORTANT: must be included last
include(cmake/CPack.cmake)
endif()
+16 -10
View File
@@ -10,7 +10,7 @@
#
# Do not overcomplicate searching for the 3rdParty path, if it is not easy to find,
# the user should define it.
# the user should define it.
set(LY_3RDPARTY_PATH "" CACHE PATH "Path to the 3rdParty folder")
@@ -42,7 +42,7 @@ endfunction()
# \arg:PACKAGE if defined, defines the name of the external library "package". This is used when a package exposes multiple interfaces
# if not defined, NAME is used
# \arg:COMPILE_DEFINITIONS compile definitions to be added to the interface
# \arg:BUILD_DEPENDENCIES list of interfaces this target depends on (could be a compilation dependency if the dependency is only
# \arg:BUILD_DEPENDENCIES list of interfaces this target depends on (could be a compilation dependency if the dependency is only
# exposing an include path, or could be a linking dependency is exposing a lib)
# \arg:RUNTIME_DEPENDENCIES list of files this target depends on (could be a dynamic libraries, text files, executables,
# applications, other 3rdParty targets, etc)
@@ -129,7 +129,7 @@ function(ly_add_external_target)
INTERFACE ${ly_add_external_target_INCLUDE_DIRECTORIES}
)
endif()
# Check if there is a pal file
ly_get_absolute_pal_filename(pal_file ${CMAKE_CURRENT_LIST_DIR}/Platform/${PAL_PLATFORM_NAME}/${ly_add_external_target_PACKAGE}_${PAL_PLATFORM_NAME_LOWERCASE}.cmake)
if(NOT EXISTS ${pal_file})
@@ -138,7 +138,7 @@ function(ly_add_external_target)
if(EXISTS ${pal_file})
include(${pal_file})
endif()
if(${PACKAGE_AND_NAME}_INCLUDE_DIRECTORIES)
list(TRANSFORM ${PACKAGE_AND_NAME}_INCLUDE_DIRECTORIES PREPEND ${BASE_PATH}/)
foreach(include_path ${${PACKAGE_AND_NAME}_INCLUDE_DIRECTORIES})
@@ -259,7 +259,7 @@ function(ly_add_external_target)
list(APPEND ly_add_external_target_BUILD_DEPENDENCIES "${${PACKAGE_AND_NAME}_BUILD_DEPENDENCIES}")
list(REMOVE_DUPLICATES ly_add_external_target_BUILD_DEPENDENCIES)
endif()
# Interface dependencies may require to find_packages. So far, we are just using packages for 3rdParty, so we will
# search for those and automatically bring those packages. The naming convention used is 3rdParty::PackageName::OptionalInterface
foreach(dependency ${ly_add_external_target_BUILD_DEPENDENCIES})
@@ -274,7 +274,7 @@ function(ly_add_external_target)
if(ly_add_external_target_BUILD_DEPENDENCIES)
target_link_libraries(3rdParty::${NAME_WITH_NAMESPACE}
INTERFACE
INTERFACE
${ly_add_external_target_BUILD_DEPENDENCIES}
)
endif()
@@ -287,9 +287,12 @@ endfunction()
#
# \arg:3RDPARTY_ROOT_DIRECTORY custom 3rd party directory which needs to be installed
function(ly_install_external_target 3RDPARTY_ROOT_DIRECTORY)
# Install the Find file to our <install_location>/cmake directory
install(FILES ${CMAKE_CURRENT_LIST_FILE} DESTINATION cmake)
# Install the Find file to our <install_location>/cmake directory
install(FILES ${CMAKE_CURRENT_LIST_FILE}
DESTINATION cmake
COMPONENT ${LY_DEFAULT_INSTALL_COMPONENT}
)
# We only want to install external targets that are part of our source tree
# Checking for relative path beginning with "../" also works when the path
@@ -297,7 +300,10 @@ function(ly_install_external_target 3RDPARTY_ROOT_DIRECTORY)
file(RELATIVE_PATH rel_path ${CMAKE_SOURCE_DIR} ${3RDPARTY_ROOT_DIRECTORY})
if (NOT ${rel_path} MATCHES "^../")
get_filename_component(rel_path ${rel_path} DIRECTORY)
install(DIRECTORY ${3RDPARTY_ROOT_DIRECTORY} DESTINATION ${rel_path})
install(DIRECTORY ${3RDPARTY_ROOT_DIRECTORY}
DESTINATION ${rel_path}
COMPONENT ${LY_DEFAULT_INSTALL_COMPONENT}
)
endif()
endfunction()
+103
View File
@@ -0,0 +1,103 @@
#
# All or portions of this file Copyright (c) Amazon.com, Inc. or its affiliates or
# its licensors.
#
# For complete copyright and license terms please see the LICENSE at the root of this
# distribution (the "License"). All use of this software is governed by the License,
# or, if provided, by the license below or the license accompanying this file. Do not
# remove or modify any license notices. This file is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
#
if(NOT PAL_TRAIT_BUILD_CPACK_SUPPORTED)
return()
endif()
set(LY_QTIFW_PATH "" CACHE PATH "Path to the Qt Installer Framework install path")
if(LY_QTIFW_PATH)
file(TO_CMAKE_PATH ${LY_QTIFW_PATH} CPACK_IFW_ROOT)
elseif(DEFINED ENV{QTIFWDIR})
file(TO_CMAKE_PATH $ENV{QTIFWDIR} CPACK_IFW_ROOT)
endif()
if(CPACK_IFW_ROOT)
if(NOT EXISTS ${CPACK_IFW_ROOT})
message(FATAL_ERROR "Invalid path supplied for LY_QTIFW_PATH argument or QTIFWDIR environment variable")
endif()
else()
# early out as no path to QtIFW has been supplied effectively disabling support
return()
endif()
set(CPACK_GENERATOR "IFW")
set(CPACK_PACKAGE_VENDOR "${PROJECT_NAME}")
set(CPACK_PACKAGE_VERSION "${LY_VERSION_STRING}")
set(CPACK_PACKAGE_DESCRIPTION_SUMMARY "Installation Tool")
string(TOLOWER ${PROJECT_NAME} _project_name_lower)
set(CPACK_PACKAGE_FILE_NAME "${_project_name_lower}_installer")
set(DEFAULT_LICENSE_NAME "Apache-2.0")
set(DEFAULT_LICENSE_FILE "${CMAKE_CURRENT_SOURCE_DIR}/LICENSE.txt")
set(CPACK_RESOURCE_FILE_LICENSE ${DEFAULT_LICENSE_FILE})
set(CPACK_IFW_PACKAGE_TITLE "${PROJECT_NAME} Installer")
set(CPACK_IFW_PACKAGE_PUBLISHER "${PROJECT_NAME}")
set(CPACK_IFW_TARGET_DIRECTORY "@ApplicationsDir@/${PROJECT_NAME}/${LY_VERSION_STRING}")
set(CPACK_IFW_PACKAGE_START_MENU_DIRECTORY "${PROJECT_NAME}")
# IMPORTANT: required to be included AFTER setting all property overrides
include(CPack REQUIRED)
include(CPackIFW REQUIRED)
function(ly_configure_cpack_component ly_configure_cpack_component_NAME)
set(options REQUIRED)
set(oneValueArgs DISPLAY_NAME DESCRIPTION LICENSE_NAME LICENSE_FILE)
set(multiValueArgs)
cmake_parse_arguments(ly_configure_cpack_component "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN})
# default to optional
set(component_type DISABLED)
set(ifw_component_type)
if(ly_configure_cpack_component_REQUIRED)
set(component_type REQUIRED)
set(ifw_component_type FORCED_INSTALLATION)
endif()
set(license_name ${DEFAULT_LICENSE_NAME})
set(license_file ${DEFAULT_LICENSE_FILE})
if(ly_configure_cpack_component_LICENSE_NAME AND ly_configure_cpack_component_LICENSE_FILE)
set(license_name ${ly_configure_cpack_component_LICENSE_NAME})
set(license_file ${ly_configure_cpack_component_LICENSE_FILE})
elseif(ly_configure_cpack_component_LICENSE_NAME OR ly_configure_cpack_component_LICENSE_FILE)
message(FATAL_ERROR "Invalid argument configuration. Both LICENSE_NAME and LICENSE_FILE must be set for ly_configure_cpack_component")
endif()
cpack_add_component(
${ly_configure_cpack_component_NAME} ${component_type}
DISPLAY_NAME ${ly_configure_cpack_component_DISPLAY_NAME}
DESCRIPTION ${ly_configure_cpack_component_DESCRIPTION}
)
cpack_ifw_configure_component(
${ly_configure_cpack_component_NAME} ${ifw_component_type}
LICENSES
${license_name}
${license_file}
)
endfunction()
# configure ALL components here
ly_configure_cpack_component(
${LY_DEFAULT_INSTALL_COMPONENT} REQUIRED
DISPLAY_NAME "${PROJECT_NAME} Core"
DESCRIPTION "${PROJECT_NAME} Headers, Libraries and Tools"
)
+29 -24
View File
@@ -37,7 +37,7 @@ define_property(TARGET PROPERTY GEM_MODULE
#
# Adds a target (static/dynamic library, executable) and convenient wrappers around most
# common parameters that need to be set.
# This function also creates an interface to use for dependencies. The interface will be
# This function also creates an interface to use for dependencies. The interface will be
# named as "NAMESPACE::NAME"
# Some examples:
# ly_add_target(NAME mystaticlib STATIC FILES_CMAKE somestatic_files.cmake)
@@ -81,7 +81,7 @@ function(ly_add_target)
set(multiValueArgs FILES_CMAKE GENERATED_FILES INCLUDE_DIRECTORIES COMPILE_DEFINITIONS BUILD_DEPENDENCIES RUNTIME_DEPENDENCIES PLATFORM_INCLUDE_FILES TARGET_PROPERTIES AUTOGEN_RULES)
cmake_parse_arguments(ly_add_target "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN})
# Validate input arguments
if(NOT ly_add_target_NAME)
message(FATAL_ERROR "You must provide a name for the target")
@@ -189,7 +189,7 @@ function(ly_add_target)
endif()
if(ly_add_target_OUTPUT_NAME)
set_target_properties(${ly_add_target_NAME} PROPERTIES
set_target_properties(${ly_add_target_NAME} PROPERTIES
OUTPUT_NAME ${ly_add_target_OUTPUT_NAME}
)
endif()
@@ -214,7 +214,7 @@ function(ly_add_target)
)
endif()
# Parse the 3rdParty library dependencies
# Parse the 3rdParty library dependencies
ly_parse_third_party_dependencies("${ly_add_target_BUILD_DEPENDENCIES}")
ly_target_link_libraries(${ly_add_target_NAME}
${ly_add_target_BUILD_DEPENDENCIES}
@@ -252,7 +252,7 @@ function(ly_add_target)
)
endif()
endif()
# IDE organization
ly_source_groups_from_folders("${ALLFILES}")
source_group("Generated Files" REGULAR_EXPRESSION "(${CMAKE_BINARY_DIR})") # Any file coming from the output folder
@@ -276,8 +276,8 @@ function(ly_add_target)
# Handle Qt MOC, RCC, UIC
# https://gitlab.kitware.com/cmake/cmake/issues/18749
# AUTOMOC is supposed to always rebuild because it checks files that are not listed in the sources (like extra
# "_p.h" headers) and which may change outside the visibility of the generator.
# AUTOMOC is supposed to always rebuild because it checks files that are not listed in the sources (like extra
# "_p.h" headers) and which may change outside the visibility of the generator.
# We are not using AUTOUIC because of:
# https://gitlab.kitware.com/cmake/cmake/-/issues/18741
# To overcome this problem, we manually wrap all the ui files listed in the target with qt5_wrap_ui
@@ -332,12 +332,16 @@ function(ly_add_target)
ly_add_autogen(
NAME ${ly_add_target_NAME}
INCLUDE_DIRECTORIES ${ly_add_target_INCLUDE_DIRECTORIES}
AUTOGEN_RULES ${ly_add_target_AUTOGEN_RULES}
AUTOGEN_RULES ${ly_add_target_AUTOGEN_RULES}
ALLFILES ${ALLFILES}
)
endif()
if(NOT ly_add_target_IMPORTED)
if(NOT ly_add_target_INSTALL_COMPONENT)
set(ly_add_target_INSTALL_COMPONENT ${LY_DEFAULT_INSTALL_COMPONENT})
endif()
ly_install_target(
${ly_add_target_NAME}
NAMESPACE ${ly_add_target_NAMESPACE}
@@ -345,15 +349,16 @@ function(ly_add_target)
BUILD_DEPENDENCIES ${ly_add_target_BUILD_DEPENDENCIES}
RUNTIME_DEPENDENCIES ${ly_add_target_RUNTIME_DEPENDENCIES}
COMPILE_DEFINITIONS ${ly_add_target_COMPILE_DEFINITIONS}
COMPONENT ${ly_add_target_INSTALL_COMPONENT}
)
endif()
endfunction()
#! ly_target_link_libraries: wraps target_link_libraries handling also MODULE linkage.
# MODULE libraries cannot be passed to target_link_libraries. MODULE libraries are shared libraries that we
# MODULE libraries cannot be passed to target_link_libraries. MODULE libraries are shared libraries that we
# dont want to link against because they will be loaded dynamically. However, we want to include their public headers
# and transition their public dependencies.
# and transition their public dependencies.
# To achieve this, we delay the target_link_libraries call to after all targets are declared (see ly_delayed_target_link_libraries)
#
# Signature is the same as target_link_libraries:
@@ -364,26 +369,26 @@ function(ly_target_link_libraries TARGET)
if(NOT TARGET)
message(FATAL_ERROR "You must provide a target")
endif()
set_property(GLOBAL APPEND PROPERTY LY_DELAYED_LINK_${TARGET} ${ARGN})
set_property(GLOBAL APPEND PROPERTY LY_DELAYED_LINK_TARGETS ${TARGET}) # to walk them at the end
endfunction()
#! ly_delayed_target_link_libraries: internal function called by the root CMakeLists.txt after all targets
# have been declared to determine if they are regularly
# have been declared to determine if they are regularly
# 1) If a MODULE is passed in the list of items, it will add the INTERFACE_INCLUDE_DIRECTORIES as include
# directories of TARGET. It will also add the "INTERFACE_LINK_LIBRARIES" to TARGET. MODULEs cannot be
# directly linked, but we can include the public headers and link against the things the MODULE expose
# to link.
# 2) If a target that has not yet been declared is passed, then it will defer it to after all targets are
# declared. This way we can do a check again. We could delay the link to when
# declared. This way we can do a check again. We could delay the link to when
# target is declared. This is needed for (1) since we dont know the type of target. This also addresses
# another issue with target_link_libraries where it will only validate that a MODULE is not being passed
# if the target is already declared, if not, it will fail later at linking time.
function(ly_delayed_target_link_libraries)
set(visibilities PRIVATE PUBLIC INTERFACE)
get_property(additional_module_paths GLOBAL PROPERTY LY_ADDITIONAL_MODULE_PATH)
@@ -391,15 +396,15 @@ function(ly_delayed_target_link_libraries)
get_property(delayed_targets GLOBAL PROPERTY LY_DELAYED_LINK_TARGETS)
foreach(target ${delayed_targets})
get_property(delayed_link GLOBAL PROPERTY LY_DELAYED_LINK_${target})
if(delayed_link)
cmake_parse_arguments(ly_delayed_target_link_libraries "" "" "${visibilities}" ${delayed_link})
foreach(visibility ${visibilities})
foreach(item ${ly_delayed_target_link_libraries_${visibility}})
if(TARGET ${item})
get_target_property(item_type ${item} TYPE)
else()
@@ -412,7 +417,7 @@ function(ly_delayed_target_link_libraries)
target_compile_definitions(${target} ${visibility} $<TARGET_PROPERTY:${item},INTERFACE_COMPILE_DEFINITIONS>)
target_compile_options(${target} ${visibility} $<TARGET_PROPERTY:${item},INTERFACE_COMPILE_OPTIONS>)
# Add it also as a manual dependency so runtime_dependencies walks it through
ly_add_dependencies(${target} ${item})
ly_add_dependencies(${target} ${item})
else()
ly_parse_third_party_dependencies(${item})
target_link_libraries(${target} ${visibility} ${item})
@@ -484,7 +489,7 @@ function(detect_qt_dependency TARGET_NAME OUTPUT_VARIABLE)
endfunction()
#! ly_parse_third_party_dependencies: Validates any 3rdParty library dependencies through the find_package command
#
#
# \arg:ly_THIRD_PARTY_LIBRARIES name of the target libraries to validate existance of through the find_package command.
#
function(ly_parse_third_party_dependencies ly_THIRD_PARTY_LIBRARIES)
@@ -518,7 +523,7 @@ endfunction()
#
macro(ly_configure_target_platform_properties)
foreach(platform_include_file ${ly_add_target_PLATFORM_INCLUDE_FILES})
set(LY_FILES_CMAKE)
set(LY_FILES)
set(LY_INCLUDE_DIRECTORIES)
@@ -528,7 +533,7 @@ macro(ly_configure_target_platform_properties)
set(LY_BUILD_DEPENDENCIES)
set(LY_RUNTIME_DEPENDENCIES)
set(LY_TARGET_PROPERTIES)
include(${platform_include_file} RESULT_VARIABLE ly_platform_cmake_file)
if(NOT ly_platform_cmake_file)
message(FATAL_ERROR "The supplied PLATFORM_INCLUDE_FILE(${platform_include_file}) cannot be included.\
@@ -578,7 +583,7 @@ endmacro()
#
# \arg:TARGETS name of the targets that depends on this file
# \arg:FILES files to copy
# \arg:OUTPUT_SUBDIRECTORY (OPTIONAL) where to place the files relative to TARGET_NAME's output dir.
# \arg:OUTPUT_SUBDIRECTORY (OPTIONAL) where to place the files relative to TARGET_NAME's output dir.
# If not specified, they are located in the same folder as TARGET_NAME
#
function(ly_add_target_files)
@@ -596,9 +601,9 @@ function(ly_add_target_files)
if(NOT ly_add_target_files_FILES)
message(FATAL_ERROR "You must provide at least a file to copy")
endif()
foreach(target ${ly_add_target_files_TARGETS})
foreach(file ${ly_add_target_files_FILES})
set_property(TARGET ${target} APPEND PROPERTY INTERFACE_LY_TARGET_FILES "${file}\n${ly_add_target_files_OUTPUT_SUBDIRECTORY}")
endforeach()
+1
View File
@@ -19,6 +19,7 @@ ly_set(PAL_TRAIT_BUILD_TESTS_SUPPORTED TRUE)
ly_set(PAL_TRAIT_BUILD_UNITY_SUPPORTED TRUE)
ly_set(PAL_TRAIT_BUILD_UNITY_EXCLUDE_EXTENSIONS)
ly_set(PAL_TRAIT_BUILD_EXCLUDE_ALL_TEST_RUNS_FROM_IDE TRUE)
ly_set(PAL_TRAIT_BUILD_CPACK_SUPPORTED FALSE)
# Test library support
ly_set(PAL_TRAIT_TEST_GOOGLE_TEST_SUPPORTED FALSE)
+53 -17
View File
@@ -11,11 +11,21 @@
set(CMAKE_INSTALL_MESSAGE NEVER) # Simplify messages to reduce output noise
ly_set(LY_DEFAULT_INSTALL_COMPONENT "Core")
#! ly_install_target: registers the target to be installed by cmake install.
#
# \arg:NAME name of the target
# \arg:COMPONENT the grouping string of the target used for splitting up the install
# into smaller packages.
function(ly_install_target ly_install_target_NAME)
set(options)
set(oneValueArgs NAMESPACE COMPONENT)
set(multiValueArgs INCLUDE_DIRECTORIES BUILD_DEPENDENCIES RUNTIME_DEPENDENCIES COMPILE_DEFINITIONS)
cmake_parse_arguments(ly_install_target "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN})
# All include directories marked PUBLIC or INTERFACE will be installed
set(include_location "include")
get_target_property(include_directories ${ly_install_target_NAME} INTERFACE_INCLUDE_DIRECTORIES)
@@ -36,18 +46,28 @@ function(ly_install_target ly_install_target_NAME)
install(
TARGETS ${ly_install_target_NAME}
LIBRARY DESTINATION lib/$<CONFIG>
ARCHIVE DESTINATION lib/$<CONFIG>
RUNTIME DESTINATION bin/$<CONFIG>
PUBLIC_HEADER DESTINATION ${include_location}
LIBRARY
DESTINATION lib/$<CONFIG>
COMPONENT ${ly_install_target_COMPONENT}
ARCHIVE
DESTINATION lib/$<CONFIG>
COMPONENT ${ly_install_target_COMPONENT}
RUNTIME
DESTINATION bin/$<CONFIG>
COMPONENT ${ly_install_target_COMPONENT}
PUBLIC_HEADER
DESTINATION ${include_location}
COMPONENT ${ly_install_target_COMPONENT}
)
ly_generate_target_config_file(${ly_install_target_NAME})
install(FILES "${CMAKE_CURRENT_BINARY_DIR}/${ly_install_target_NAME}_$<CONFIG>.cmake"
DESTINATION cmake_autogen/${ly_install_target_NAME}
COMPONENT ${ly_install_target_COMPONENT}
)
install(FILES "${CMAKE_CURRENT_BINARY_DIR}/Find${ly_install_target_NAME}.cmake"
DESTINATION cmake
COMPONENT ${ly_install_target_COMPONENT}
)
endfunction()
@@ -64,7 +84,7 @@ endfunction()
# \arg:RUNTIME_DEPENDENCIES list of dependencies this target depends on at runtime
# \arg:COMPILE_DEFINITIONS list of compilation definitions this target will use to compile
function(ly_generate_target_find_file)
set(options)
set(oneValueArgs NAME NAMESPACE)
set(multiValueArgs INCLUDE_DIRECTORIES COMPILE_DEFINITIONS BUILD_DEPENDENCIES RUNTIME_DEPENDENCIES)
@@ -81,7 +101,7 @@ function(ly_generate_target_find_file)
# only INTERFACE properties can be exposed on imported targets
ly_strip_private_properties(COMPILE_DEFINITIONS_PLACEHOLDER ${ly_generate_target_find_file_COMPILE_DEFINITIONS})
ly_strip_private_properties(include_directories_interface_props ${ly_generate_target_find_file_INCLUDE_DIRECTORIES})
ly_strip_private_properties(BUILD_DEPENDENCIES_PLACEHOLDER ${ly_generate_target_find_file_BUILD_DEPENDENCIES})
ly_strip_private_properties(BUILD_DEPENDENCIES_PLACEHOLDER ${ly_generate_target_find_file_BUILD_DEPENDENCIES})
if(ly_generate_target_find_file_NAMESPACE)
set(NAMESPACE_PLACEHOLDER "NAMESPACE ${ly_generate_target_find_file_NAMESPACE}")
@@ -111,9 +131,9 @@ endfunction()
# These per config files will be included by the target's find file to set the location of the binary/
# \arg:NAME name of the target
function(ly_generate_target_config_file NAME)
get_target_property(target_type ${NAME} TYPE)
unset(target_file_contents)
if(NOT target_type STREQUAL INTERFACE_LIBRARY)
@@ -127,11 +147,11 @@ function(ly_generate_target_config_file NAME)
set(out_dir lib)
endif()
string(APPEND target_file_contents
string(APPEND target_file_contents
"# Generated by O3DE install
set(target_location \"\${LY_ROOT_FOLDER}/${out_dir}/$<CONFIG>/$<${out_file_generator}:${NAME}>\")
set_target_properties(${NAME}
set_target_properties(${NAME}
PROPERTIES
$<$<CONFIG:profile>:IMPORTED_LOCATION \"\${target_location}>\"
IMPORTED_LOCATION_$<UPPER_CASE:$<CONFIG>> \"\${target_location}\"
@@ -172,7 +192,7 @@ endfunction()
#! ly_setup_o3de_install: orchestrates the installation of the different parts. This is the entry point from the root CMakeLists.txt
function(ly_setup_o3de_install)
ly_setup_cmake_install()
ly_setup_target_generator()
ly_setup_others()
@@ -184,14 +204,16 @@ function(ly_setup_cmake_install)
install(DIRECTORY "${CMAKE_SOURCE_DIR}/cmake"
DESTINATION .
COMPONENT ${LY_DEFAULT_INSTALL_COMPONENT}
REGEX "Findo3de.cmake" EXCLUDE
REGEX "Platform\/.*\/BuiltInPackages_.*\.cmake" EXCLUDE
)
install(
FILES
FILES
"${CMAKE_SOURCE_DIR}/CMakeLists.txt"
"${CMAKE_SOURCE_DIR}/engine.json"
DESTINATION .
COMPONENT ${LY_DEFAULT_INSTALL_COMPONENT}
)
# Collect all Find files that were added with ly_add_external_target_path
@@ -204,6 +226,7 @@ function(ly_setup_cmake_install)
endforeach()
install(FILES ${additional_find_files}
DESTINATION cmake/3rdParty
COMPONENT ${LY_DEFAULT_INSTALL_COMPONENT}
)
# Findo3de.cmake file: we generate a different Findo3de.camke file than the one we have in cmake. This one is going to expose all
@@ -218,8 +241,9 @@ function(ly_setup_cmake_install)
install(FILES "${CMAKE_CURRENT_BINARY_DIR}/cmake/Findo3de.cmake"
DESTINATION cmake
COMPONENT ${LY_DEFAULT_INSTALL_COMPONENT}
)
# BuiltInPackage_<platform>.cmake: since associations could happen in any cmake file across the engine. We collect
# all the associations in ly_associate_package and then generate them into BuiltInPackages_<platform>.cmake. This
# will consolidate all associations in one file
@@ -237,6 +261,7 @@ function(ly_setup_cmake_install)
)
install(FILES "${pal_builtin_file}"
DESTINATION cmake/3rdParty/Platform/${PAL_PLATFORM_NAME}
COMPONENT ${LY_DEFAULT_INSTALL_COMPONENT}
)
endfunction()
@@ -247,20 +272,22 @@ function(ly_setup_others)
# List of directories we want to install relative to engine root
set(DIRECTORIES_TO_INSTALL Tools/LyTestTools Tools/RemoteConsole ctest_scripts scripts)
foreach(dir ${DIRECTORIES_TO_INSTALL})
get_filename_component(install_path ${dir} DIRECTORY)
if (NOT install_path)
set(install_path .)
endif()
install(DIRECTORY "${CMAKE_SOURCE_DIR}/${dir}"
DESTINATION ${install_path}
COMPONENT ${LY_DEFAULT_INSTALL_COMPONENT}
)
endforeach()
install(DIRECTORY "${CMAKE_SOURCE_DIR}/python"
DESTINATION .
COMPONENT ${LY_DEFAULT_INSTALL_COMPONENT}
REGEX "downloaded_packages" EXCLUDE
REGEX "runtime" EXCLUDE
)
@@ -269,15 +296,18 @@ function(ly_setup_others)
install(DIRECTORY
${CMAKE_CURRENT_BINARY_DIR}/bin/$<CONFIG>/Registry
DESTINATION ./bin/$<CONFIG>
COMPONENT ${LY_DEFAULT_INSTALL_COMPONENT}
)
install(DIRECTORY
# This one will change soon, Engine/Registry files will be relocated to Registry
${CMAKE_SOURCE_DIR}/Engine/Registry
DESTINATION ./Engine
COMPONENT ${LY_DEFAULT_INSTALL_COMPONENT}
)
install(FILES
${CMAKE_SOURCE_DIR}/AssetProcessorPlatformConfig.setreg
DESTINATION ./Registry
COMPONENT ${LY_DEFAULT_INSTALL_COMPONENT}
)
# Qt Binaries
@@ -286,6 +316,7 @@ function(ly_setup_others)
install(DIRECTORY
${CMAKE_CURRENT_BINARY_DIR}/bin/$<CONFIG>/${qt_dir}
DESTINATION ./bin/$<CONFIG>
COMPONENT ${LY_DEFAULT_INSTALL_COMPONENT}
)
endforeach()
@@ -293,6 +324,7 @@ function(ly_setup_others)
install(DIRECTORY
${CMAKE_SOURCE_DIR}/Templates
DESTINATION .
COMPONENT ${LY_DEFAULT_INSTALL_COMPONENT}
)
# Misc
@@ -301,6 +333,7 @@ function(ly_setup_others)
${CMAKE_SOURCE_DIR}/LICENSE.txt
${CMAKE_SOURCE_DIR}/README.md
DESTINATION .
COMPONENT ${LY_DEFAULT_INSTALL_COMPONENT}
)
endfunction()
@@ -315,12 +348,15 @@ function(ly_setup_target_generator)
${CMAKE_SOURCE_DIR}/Code/LauncherUnified/LauncherProject.cpp
${CMAKE_SOURCE_DIR}/Code/LauncherUnified/StaticModules.in
DESTINATION LauncherGenerator
COMPONENT ${LY_DEFAULT_INSTALL_COMPONENT}
)
install(DIRECTORY ${CMAKE_SOURCE_DIR}/Code/LauncherUnified/Platform
DESTINATION LauncherGenerator
COMPONENT ${LY_DEFAULT_INSTALL_COMPONENT}
)
install(FILES ${CMAKE_SOURCE_DIR}/Code/LauncherUnified/FindLauncherGenerator.cmake
DESTINATION cmake
COMPONENT ${LY_DEFAULT_INSTALL_COMPONENT}
)
endfunction()
endfunction()
+1
View File
@@ -19,6 +19,7 @@ ly_set(PAL_TRAIT_BUILD_TESTS_SUPPORTED TRUE)
ly_set(PAL_TRAIT_BUILD_UNITY_SUPPORTED TRUE)
ly_set(PAL_TRAIT_BUILD_UNITY_EXCLUDE_EXTENSIONS)
ly_set(PAL_TRAIT_BUILD_EXCLUDE_ALL_TEST_RUNS_FROM_IDE FALSE)
ly_set(PAL_TRAIT_BUILD_CPACK_SUPPORTED FALSE)
# Test library support
ly_set(PAL_TRAIT_TEST_GOOGLE_TEST_SUPPORTED TRUE)
+1
View File
@@ -19,6 +19,7 @@ ly_set(PAL_TRAIT_BUILD_TESTS_SUPPORTED TRUE)
ly_set(PAL_TRAIT_BUILD_UNITY_SUPPORTED TRUE)
ly_set(PAL_TRAIT_BUILD_UNITY_EXCLUDE_EXTENSIONS ".mm")
ly_set(PAL_TRAIT_BUILD_EXCLUDE_ALL_TEST_RUNS_FROM_IDE FALSE)
ly_set(PAL_TRAIT_BUILD_CPACK_SUPPORTED FALSE)
# Test library support
ly_set(PAL_TRAIT_TEST_GOOGLE_TEST_SUPPORTED TRUE)
+1
View File
@@ -19,6 +19,7 @@ ly_set(PAL_TRAIT_BUILD_SERVER_SUPPORTED TRUE)
ly_set(PAL_TRAIT_BUILD_UNITY_SUPPORTED TRUE)
ly_set(PAL_TRAIT_BUILD_UNITY_EXCLUDE_EXTENSIONS)
ly_set(PAL_TRAIT_BUILD_EXCLUDE_ALL_TEST_RUNS_FROM_IDE FALSE)
ly_set(PAL_TRAIT_BUILD_CPACK_SUPPORTED TRUE)
# Test library support
ly_set(PAL_TRAIT_TEST_GOOGLE_TEST_SUPPORTED TRUE)
+1
View File
@@ -19,6 +19,7 @@ ly_set(PAL_TRAIT_BUILD_TESTS_SUPPORTED TRUE)
ly_set(PAL_TRAIT_BUILD_UNITY_SUPPORTED TRUE)
ly_set(PAL_TRAIT_BUILD_UNITY_EXCLUDE_EXTENSIONS ".mm")
ly_set(PAL_TRAIT_BUILD_EXCLUDE_ALL_TEST_RUNS_FROM_IDE TRUE)
ly_set(PAL_TRAIT_BUILD_CPACK_SUPPORTED FALSE)
# Test library support
ly_set(PAL_TRAIT_TEST_GOOGLE_TEST_SUPPORTED FALSE)
+1
View File
@@ -14,6 +14,7 @@ set(FILES
3rdPartyPackages.cmake
CommandExecution.cmake
Configurations.cmake
CPack.cmake
Dependencies.cmake
Deployment.cmake
EngineFinder.cmake