making the runtime_dependencies a function so we can reuse internal functions for the install

main
pappeste 5 years ago
parent 1f6a6cccaa
commit ed17d01028

@ -36,6 +36,7 @@ include(cmake/GeneralSettings.cmake)
include(cmake/FileUtil.cmake)
include(cmake/PAL.cmake)
include(cmake/PALTools.cmake)
include(cmake/RuntimeDependencies.cmake)
include(cmake/Install.cmake)
include(cmake/Configurations.cmake) # Requires to be after PAL so we get platform variable definitions
include(cmake/Dependencies.cmake)
@ -117,7 +118,7 @@ if(PAL_TRAIT_BUILD_TESTS_SUPPORTED)
endif()
# 4. inject runtime dependencies to the targets. We need to do this after (1) since we are going to walk through
# the dependencies
include(cmake/RuntimeDependencies.cmake)
ly_delayed_generate_runtime_dependencies()
# 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

@ -10,7 +10,7 @@
#
set(LY_COPY_PERMISSIONS "OWNER_READ OWNER_WRITE OWNER_EXECUTE")
set(LY_TARGET_TYPES_WITH_RUNTIME_OUTPUTS MODULE_LIBRARY SHARED_LIBRARY EXECUTABLE)
set(LY_TARGET_TYPES_WITH_RUNTIME_OUTPUTS MODULE_LIBRARY SHARED_LIBRARY EXECUTABLE APPLICATION)
# There are several runtime dependencies to handle:
# 1. Dependencies to 3rdparty libraries. This involves copying IMPORTED_LOCATION to the folder where the target is.
@ -183,7 +183,7 @@ function(ly_get_runtime_dependency_command ly_RUNTIME_COMMAND ly_TARGET)
# To support platforms where the binaries end in different places, we are going to assume that all dependencies,
# including the ones we are building, need to be copied over. However, we add a check to prevent copying something
# over itself. This detection cannot happen now because the target we are copying for varies.
set(runtime_command "ly_copy(\"${source_file}\" \"$<TARGET_FILE_DIR:@target@>${target_directory}\")\n")
set(runtime_command "ly_copy(\"${source_file}\" \"@target_file_dir@${target_directory}\")\n")
# Tentative optimization: this is an attempt to solve the first "if" at generation time, making the runtime_dependencies
# file smaller and faster to run. In platforms where the built target and the dependencies targets end up in the same
@ -206,47 +206,51 @@ function(ly_get_runtime_dependency_command ly_RUNTIME_COMMAND ly_TARGET)
endfunction()
get_property(additional_module_paths GLOBAL PROPERTY LY_ADDITIONAL_MODULE_PATH)
list(APPEND CMAKE_MODULE_PATH ${additional_module_paths})
function(ly_delayed_generate_runtime_dependencies)
get_property(all_targets GLOBAL PROPERTY LY_ALL_TARGETS)
foreach(target IN LISTS all_targets)
get_property(additional_module_paths GLOBAL PROPERTY LY_ADDITIONAL_MODULE_PATH)
list(APPEND CMAKE_MODULE_PATH ${additional_module_paths})
# Exclude targets that dont produce runtime outputs
get_target_property(target_type ${target} TYPE)
if(NOT target_type IN_LIST LY_TARGET_TYPES_WITH_RUNTIME_OUTPUTS)
continue()
endif()
get_property(all_targets GLOBAL PROPERTY LY_ALL_TARGETS)
foreach(target IN LISTS all_targets)
unset(runtime_dependencies)
set(runtime_commands "
function(ly_copy source_file target_directory)
get_filename_component(target_filename \"\${source_file}\" NAME)
if(NOT \"\${source_file}\" STREQUAL \"\${target_directory}/\${target_filename}\")
if(NOT EXISTS \"\${target_directory}\")
file(MAKE_DIRECTORY \"\${target_directory}\")
endif()
if(\"\${source_file}\" IS_NEWER_THAN \"\${target_directory}/\${target_filename}\")
file(LOCK \"\${target_directory}/\${target_filename}.lock\" GUARD FUNCTION TIMEOUT 30)
file(COPY \"\${source_file}\" DESTINATION \"\${target_directory}\" FILE_PERMISSIONS ${LY_COPY_PERMISSIONS})
# Exclude targets that dont produce runtime outputs
get_target_property(target_type ${target} TYPE)
if(NOT target_type IN_LIST LY_TARGET_TYPES_WITH_RUNTIME_OUTPUTS)
continue()
endif()
endif()
endfunction()
\n")
ly_get_runtime_dependencies(runtime_dependencies ${target})
foreach(runtime_dependency ${runtime_dependencies})
unset(runtime_command)
ly_get_runtime_dependency_command(runtime_command ${runtime_dependency})
string(APPEND runtime_commands ${runtime_command})
endforeach()
# Generate the output file
string(CONFIGURE "${runtime_commands}" generated_commands @ONLY)
file(GENERATE
OUTPUT ${CMAKE_BINARY_DIR}/runtime_dependencies/$<CONFIG>/${target}.cmake
CONTENT "${generated_commands}"
)
unset(runtime_dependencies)
set(runtime_commands "
function(ly_copy source_file target_directory)
get_filename_component(target_filename \"\${source_file}\" NAME)
if(NOT \"\${source_file}\" STREQUAL \"\${target_directory}/\${target_filename}\")
if(NOT EXISTS \"\${target_directory}\")
file(MAKE_DIRECTORY \"\${target_directory}\")
endif()
if(\"\${source_file}\" IS_NEWER_THAN \"\${target_directory}/\${target_filename}\")
file(LOCK \"\${target_directory}/\${target_filename}.lock\" GUARD FUNCTION TIMEOUT 30)
file(COPY \"\${source_file}\" DESTINATION \"\${target_directory}\" FILE_PERMISSIONS ${LY_COPY_PERMISSIONS})
endif()
endif()
endfunction()
\n")
ly_get_runtime_dependencies(runtime_dependencies ${target})
foreach(runtime_dependency ${runtime_dependencies})
unset(runtime_command)
ly_get_runtime_dependency_command(runtime_command ${runtime_dependency})
string(APPEND runtime_commands ${runtime_command})
endforeach()
# Generate the output file
set(target_file_dir "$<TARGET_FILE_DIR:${target}>")
string(CONFIGURE "${runtime_commands}" generated_commands @ONLY)
file(GENERATE
OUTPUT ${CMAKE_BINARY_DIR}/runtime_dependencies/$<CONFIG>/${target}.cmake
CONTENT "${generated_commands}"
)
endforeach()
endforeach()
endfunction()

@ -118,57 +118,61 @@ function(ios_get_dependencies_recursive ios_DEPENDENCIES ly_TARGET)
endfunction()
# For each (non-monolithic) game project, find runtime dependencies and tell XCode to embed/sign them
if(NOT LY_MONOLITHIC_GAME)
function(ly_delayed_generate_runtime_dependencies)
# For each (non-monolithic) game project, find runtime dependencies and tell XCode to embed/sign them
if(NOT LY_MONOLITHIC_GAME)
foreach(game_project ${LY_PROJECTS})
# Recursively get all dependent frameworks for the game project.
unset(dependencies)
ios_get_dependencies_recursive(dependencies ${game_project}.GameLauncher)
if(dependencies)
set_target_properties(${game_project}.GameLauncher
PROPERTIES
XCODE_EMBED_FRAMEWORKS "${dependencies}"
XCODE_EMBED_FRAMEWORKS_CODE_SIGN_ON_COPY TRUE
XCODE_ATTRIBUTE_LD_RUNPATH_SEARCH_PATHS "@executable_path/Frameworks"
)
endif()
foreach(game_project ${LY_PROJECTS})
endforeach()
# Recursively get all dependent frameworks for the game project.
unset(dependencies)
ios_get_dependencies_recursive(dependencies ${game_project}.GameLauncher)
if(dependencies)
set_target_properties(${game_project}.GameLauncher
PROPERTIES
XCODE_EMBED_FRAMEWORKS "${dependencies}"
XCODE_EMBED_FRAMEWORKS_CODE_SIGN_ON_COPY TRUE
XCODE_ATTRIBUTE_LD_RUNPATH_SEARCH_PATHS "@executable_path/Frameworks"
)
endif()
endif()
get_property(all_targets GLOBAL PROPERTY LY_ALL_TARGETS)
unset(test_runner_dependencies)
foreach(target IN LISTS all_targets)
# Exclude targets that dont produce runtime outputs
get_target_property(target_type ${target} TYPE)
if(NOT target_type IN_LIST LY_TARGET_TYPES_WITH_RUNTIME_OUTPUTS)
continue()
endif()
file(GENERATE
OUTPUT ${CMAKE_BINARY_DIR}/runtime_dependencies/$<CONFIG>/${target}.cmake
CONTENT ""
)
if(target_type IN_LIST IOS_FRAMEWORK_TARGET_TYPES)
list(APPEND test_runner_dependencies ${target})
endif()
endforeach()
endif()
get_property(all_targets GLOBAL PROPERTY LY_ALL_TARGETS)
unset(test_runner_dependencies)
foreach(target IN LISTS all_targets)
# Exclude targets that dont produce runtime outputs
get_target_property(target_type ${target} TYPE)
if(NOT target_type IN_LIST LY_TARGET_TYPES_WITH_RUNTIME_OUTPUTS)
continue()
if(PAL_TRAIT_BUILD_TESTS_SUPPORTED)
add_dependencies("AzTestRunner" ${test_runner_dependencies})
# We still need to add indirect dependencies(eg. 3rdParty)
unset(all_dependencies)
ios_get_dependencies_recursive(all_dependencies AzTestRunner)
set_target_properties("AzTestRunner"
PROPERTIES
XCODE_EMBED_FRAMEWORKS "${all_dependencies}"
XCODE_EMBED_FRAMEWORKS_CODE_SIGN_ON_COPY TRUE
XCODE_ATTRIBUTE_LD_RUNPATH_SEARCH_PATHS "@executable_path/Frameworks"
)
endif()
file(GENERATE
OUTPUT ${CMAKE_BINARY_DIR}/runtime_dependencies/$<CONFIG>/${target}.cmake
CONTENT ""
)
if(target_type IN_LIST IOS_FRAMEWORK_TARGET_TYPES)
list(APPEND test_runner_dependencies ${target})
endif()
endforeach()
if(PAL_TRAIT_BUILD_TESTS_SUPPORTED)
add_dependencies("AzTestRunner" ${test_runner_dependencies})
# We still need to add indirect dependencies(eg. 3rdParty)
unset(all_dependencies)
ios_get_dependencies_recursive(all_dependencies AzTestRunner)
set_target_properties("AzTestRunner"
PROPERTIES
XCODE_EMBED_FRAMEWORKS "${all_dependencies}"
XCODE_EMBED_FRAMEWORKS_CODE_SIGN_ON_COPY TRUE
XCODE_ATTRIBUTE_LD_RUNPATH_SEARCH_PATHS "@executable_path/Frameworks"
)
endif()
endfunction()
Loading…
Cancel
Save