Fixed generation of Monolithic builds StaticModules.inl (#947)
* Fixed generation of Monolithic builds StaticModules.inl A project's gem module RUNTIME_DEPENDENCIES were not visited to determine any dependent gem modules that needed to load. Therefore the CreateStaticModules function were missing CreateModuleClass_* function calls required initialize the gem's AZ::Module derived class in monolithic builds * Removed the logic to strip the Gem:: and Project:: prefix from the Server Launcher gem dependencies When associating gem dependencies with the server target there was CMake logic left over in it to strip the beginning of the target name if it began with "Gem::" or "Project::"
This commit is contained in:
committed by
GitHub
parent
d4587d1f99
commit
9a0b93c9ff
@@ -9,6 +9,8 @@
|
||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
#
|
||||
|
||||
|
||||
set_property(GLOBAL PROPERTY LAUNCHER_UNIFIED_BINARY_DIR ${CMAKE_CURRENT_BINARY_DIR})
|
||||
# Launcher targets for a project need to be generated when configuring a project.
|
||||
# When building the engine source, this file will be included by LauncherUnified's CMakeLists.txt
|
||||
# When using an installed engine, this file will be included by the FindLauncherGenerator.cmake script
|
||||
@@ -40,28 +42,8 @@ foreach(project_name project_path IN ZIP_LISTS LY_PROJECTS_TARGET_NAME LY_PROJEC
|
||||
|
||||
# In the monolithic case, we need to register the gem modules, to do so we will generate a StaticModules.inl
|
||||
# file from StaticModules.in
|
||||
|
||||
set_property(GLOBAL APPEND PROPERTY LY_STATIC_MODULE_PROJECTS_NAME ${project_name})
|
||||
get_property(game_gem_dependencies GLOBAL PROPERTY LY_DELAYED_DEPENDENCIES_${project_name}.GameLauncher)
|
||||
|
||||
unset(extern_module_declarations)
|
||||
unset(module_invocations)
|
||||
|
||||
foreach(game_gem_dependency ${game_gem_dependencies})
|
||||
# To match the convention on how gems targets vs gem modules are named, we remove the "Gem::" from prefix
|
||||
# and remove the ".Static" from the suffix
|
||||
string(REGEX REPLACE "^Gem::" "Gem_" game_gem_dependency ${game_gem_dependency})
|
||||
string(REGEX REPLACE "^Project::" "Project_" game_gem_dependency ${game_gem_dependency})
|
||||
# Replace "." with "_"
|
||||
string(REPLACE "." "_" game_gem_dependency ${game_gem_dependency})
|
||||
|
||||
string(APPEND extern_module_declarations "extern \"C\" AZ::Module* CreateModuleClass_${game_gem_dependency}();\n")
|
||||
string(APPEND module_invocations " modulesOut.push_back(CreateModuleClass_${game_gem_dependency}());\n")
|
||||
|
||||
endforeach()
|
||||
|
||||
configure_file(StaticModules.in
|
||||
${CMAKE_CURRENT_BINARY_DIR}/${project_name}.GameLauncher/Includes/StaticModules.inl
|
||||
)
|
||||
|
||||
set(game_build_dependencies
|
||||
${game_gem_dependencies}
|
||||
@@ -70,29 +52,9 @@ foreach(project_name project_path IN ZIP_LISTS LY_PROJECTS_TARGET_NAME LY_PROJEC
|
||||
|
||||
if(PAL_TRAIT_BUILD_SERVER_SUPPORTED)
|
||||
get_property(server_gem_dependencies GLOBAL PROPERTY LY_DELAYED_DEPENDENCIES_${project_name}.ServerLauncher)
|
||||
|
||||
unset(extern_module_declarations)
|
||||
unset(module_invocations)
|
||||
|
||||
foreach(server_gem_dependency ${server_gem_dependencies})
|
||||
# To match the convention on how gems targets vs gem modules are named, we remove the "Gem::" from prefix
|
||||
# and remove the ".Static" from the suffix
|
||||
string(REGEX REPLACE "^Gem::" "Gem_" server_gem_dependency ${server_gem_dependency})
|
||||
string(REGEX REPLACE "^Project::" "Project_" server_gem_dependency ${server_gem_dependency})
|
||||
# Replace "." with "_"
|
||||
string(REPLACE "." "_" server_gem_dependency ${server_gem_dependency})
|
||||
|
||||
string(APPEND extern_module_declarations "extern \"C\" AZ::Module* CreateModuleClass_${server_gem_dependency}();\n")
|
||||
string(APPEND module_invocations " modulesOut.push_back(CreateModuleClass_${server_gem_dependency}());\n")
|
||||
|
||||
endforeach()
|
||||
|
||||
configure_file(StaticModules.in
|
||||
${CMAKE_CURRENT_BINARY_DIR}/${project_name}.ServerLauncher/Includes/StaticModules.inl
|
||||
)
|
||||
|
||||
set(server_build_dependencies
|
||||
${game_gem_dependencies}
|
||||
${server_gem_dependencies}
|
||||
Legacy::CrySystem
|
||||
)
|
||||
endif()
|
||||
@@ -186,3 +148,63 @@ foreach(project_name project_path IN ZIP_LISTS LY_PROJECTS_TARGET_NAME LY_PROJEC
|
||||
endif()
|
||||
|
||||
endforeach()
|
||||
|
||||
#! Defer generation of the StaticModules.inl file needed in monolithic builds until after all the CMake targets are known
|
||||
# This is that the GEM_MODULE target runtime dependencies can be parsed to discover the list of dependent modules
|
||||
# to load
|
||||
function(ly_delayed_generate_static_modules_inl)
|
||||
if(LY_MONOLITHIC_GAME)
|
||||
get_property(launcher_unified_binary_dir GLOBAL PROPERTY LAUNCHER_UNIFIED_BINARY_DIR)
|
||||
get_property(project_names GLOBAL PROPERTY LY_STATIC_MODULE_PROJECTS_NAME)
|
||||
foreach(project_name ${project_names})
|
||||
|
||||
unset(extern_module_declarations)
|
||||
unset(module_invocations)
|
||||
|
||||
unset(all_game_gem_dependencies)
|
||||
ly_get_gem_load_dependencies(all_game_gem_dependencies ${project_name}.GameLauncher)
|
||||
|
||||
foreach(game_gem_dependency ${all_game_gem_dependencies})
|
||||
# To match the convention on how gems targets vs gem modules are named,
|
||||
# we remove the ".Static" from the suffix
|
||||
# Replace "." with "_"
|
||||
string(REPLACE "." "_" game_gem_dependency ${game_gem_dependency})
|
||||
|
||||
string(APPEND extern_module_declarations "extern \"C\" AZ::Module* CreateModuleClass_Gem_${game_gem_dependency}();\n")
|
||||
string(APPEND module_invocations " modulesOut.push_back(CreateModuleClass_Gem_${game_gem_dependency}());\n")
|
||||
|
||||
endforeach()
|
||||
|
||||
configure_file(${CMAKE_CURRENT_FUNCTION_LIST_DIR}/StaticModules.in
|
||||
${launcher_unified_binary_dir}/${project_name}.GameLauncher/Includes/StaticModules.inl
|
||||
)
|
||||
|
||||
if(PAL_TRAIT_BUILD_SERVER_SUPPORTED)
|
||||
get_property(server_gem_dependencies GLOBAL PROPERTY LY_STATIC_MODULE_PROJECTS_DEPENDENCIES_${project_name}.ServerLauncher)
|
||||
|
||||
unset(extern_module_declarations)
|
||||
unset(module_invocations)
|
||||
|
||||
unset(all_server_gem_dependencies)
|
||||
ly_get_gem_load_dependencies(all_server_gem_dependencies ${project_name}.ServerLauncher)
|
||||
foreach(server_gem_dependency ${server_gem_dependencies})
|
||||
ly_get_gem_load_dependencies(server_gem_load_dependencies ${server_gem_dependency})
|
||||
list(APPEND all_server_gem_dependencies ${server_gem_load_dependencies} ${server_gem_dependency})
|
||||
endforeach()
|
||||
foreach(server_gem_dependency ${all_server_gem_dependencies})
|
||||
# Replace "." with "_"
|
||||
string(REPLACE "." "_" server_gem_dependency ${server_gem_dependency})
|
||||
|
||||
string(APPEND extern_module_declarations "extern \"C\" AZ::Module* CreateModuleClass_Gem_${server_gem_dependency}();\n")
|
||||
string(APPEND module_invocations " modulesOut.push_back(CreateModuleClass_Gem_${server_gem_dependency}());\n")
|
||||
|
||||
endforeach()
|
||||
|
||||
configure_file(${CMAKE_CURRENT_FUNCTION_LIST_DIR}/StaticModules.in
|
||||
${launcher_unified_binary_dir}/${project_name}.ServerLauncher/Includes/StaticModules.inl
|
||||
)
|
||||
|
||||
endif()
|
||||
endforeach()
|
||||
endif()
|
||||
endfunction()
|
||||
|
||||
Reference in New Issue
Block a user