You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
141 lines
6.0 KiB
CMake
141 lines
6.0 KiB
CMake
#
|
|
# Copyright (c) Contributors to the Open 3D Engine Project.
|
|
# For complete copyright and license terms please see the LICENSE at the root of this distribution.
|
|
#
|
|
# SPDX-License-Identifier: Apache-2.0 OR MIT
|
|
#
|
|
#
|
|
|
|
# Cmake version 3.20 is the minimum version needed for all of Open 3D Engine's supported platforms
|
|
cmake_minimum_required(VERSION 3.20)
|
|
|
|
include(cmake/LySet.cmake)
|
|
include(cmake/Version.cmake)
|
|
include(cmake/OutputDirectory.cmake)
|
|
|
|
if(NOT PROJECT_NAME)
|
|
project(O3DE
|
|
LANGUAGES C CXX
|
|
VERSION ${LY_VERSION_STRING}
|
|
)
|
|
endif()
|
|
|
|
################################################################################
|
|
# Initialize
|
|
################################################################################
|
|
include(cmake/GeneralSettings.cmake)
|
|
include(cmake/FileUtil.cmake)
|
|
include(cmake/PAL.cmake)
|
|
include(cmake/PALTools.cmake)
|
|
include(cmake/RuntimeDependencies.cmake)
|
|
include(cmake/Configurations.cmake) # Requires to be after PAL so we get platform variable definitions
|
|
include(cmake/Dependencies.cmake)
|
|
include(cmake/Deployment.cmake)
|
|
include(cmake/3rdParty.cmake)
|
|
include(cmake/LYPython.cmake)
|
|
include(cmake/Install.cmake)
|
|
include(cmake/LYWrappers.cmake)
|
|
include(cmake/Gems.cmake)
|
|
include(cmake/UnitTest.cmake)
|
|
include(cmake/LYTestWrappers.cmake)
|
|
include(cmake/Monolithic.cmake)
|
|
include(cmake/SettingsRegistry.cmake)
|
|
include(cmake/TestImpactFramework/LYTestImpactFramework.cmake)
|
|
include(cmake/CMakeFiles.cmake)
|
|
include(cmake/O3DEJson.cmake)
|
|
|
|
################################################################################
|
|
# Subdirectory processing
|
|
################################################################################
|
|
|
|
function(add_engine_json_external_subdirectories)
|
|
read_json_external_subdirs(external_subdis ${LY_ROOT_FOLDER}/engine.json)
|
|
foreach(external_subdir ${external_subdis})
|
|
file(REAL_PATH ${external_subdir} real_external_subdir BASE_DIRECTORY ${LY_ROOT_FOLDER})
|
|
list(APPEND engine_external_subdirs ${real_external_subdir})
|
|
endforeach()
|
|
|
|
set_property(GLOBAL APPEND PROPERTY LY_EXTERNAL_SUBDIRS ${engine_external_subdirs})
|
|
endfunction()
|
|
|
|
# Add the projects first so the Launcher can find them
|
|
include(cmake/Projects.cmake)
|
|
|
|
if(NOT INSTALLED_ENGINE)
|
|
|
|
# Add the rest of the targets
|
|
add_subdirectory(Assets)
|
|
add_subdirectory(Code)
|
|
add_subdirectory(python)
|
|
add_subdirectory(Registry)
|
|
add_subdirectory(scripts)
|
|
add_subdirectory(Templates)
|
|
add_subdirectory(Tools)
|
|
|
|
# Add external subdirectories listed in the engine.json. LY_EXTERNAL_SUBDIRS is a cache variable so the user can add extra
|
|
# external subdirectories
|
|
add_engine_json_external_subdirectories()
|
|
else()
|
|
ly_find_o3de_packages()
|
|
endif()
|
|
|
|
get_property(external_subdirs GLOBAL PROPERTY LY_EXTERNAL_SUBDIRS)
|
|
list(APPEND LY_EXTERNAL_SUBDIRS ${external_subdirs})
|
|
|
|
# Loop over the additional external subdirectories and invoke add_subdirectory on them
|
|
foreach(external_directory ${LY_EXTERNAL_SUBDIRS})
|
|
# Hash the extenal_directory name and append it to the Binary Directory section of add_subdirectory
|
|
# This is to deal with potential situations where multiple external directories has the same last directory name
|
|
# For example if D:/Company1/RayTracingGem and F:/Company2/Path/RayTracingGem were both added as a subdirectory
|
|
file(REAL_PATH ${external_directory} full_directory_path)
|
|
string(SHA256 full_directory_hash ${full_directory_path})
|
|
# Truncate the full_directory_hash down to 8 characters to avoid hitting the Windows 260 character path limit
|
|
# when the external subdirectory contains relative paths of significant length
|
|
string(SUBSTRING ${full_directory_hash} 0 8 full_directory_hash)
|
|
# Use the last directory as the suffix path to use for the Binary Directory
|
|
get_filename_component(directory_name ${external_directory} NAME)
|
|
add_subdirectory(${external_directory} ${CMAKE_BINARY_DIR}/External/${directory_name}-${full_directory_hash})
|
|
endforeach()
|
|
|
|
################################################################################
|
|
# Post-processing
|
|
################################################################################
|
|
# The following steps have to be done after all targets are registered:
|
|
|
|
# 1. Add any dependencies registered via ly_enable_gems
|
|
ly_enable_gems_delayed()
|
|
|
|
# 2. Defer generation of the StaticModules.inl file which is needed to create the AZ::Module derived class in monolithic
|
|
# builds until after all the targets are known and all the gems are enabled
|
|
ly_delayed_generate_static_modules_inl()
|
|
|
|
# 3. generate a settings registry .setreg file for all ly_add_project_dependencies() and ly_add_target_dependencies() calls
|
|
# to provide applications with the filenames of gem modules to load
|
|
# This must be done before ly_delayed_target_link_libraries() as that inserts BUILD_DEPENDENCIES as MANUALLY_ADDED_DEPENDENCIES
|
|
# if the build dependency is a MODULE_LIBRARY. That would cause a false load dependency to be generated
|
|
ly_delayed_generate_settings_registry()
|
|
|
|
# 4. link targets where the dependency was yet not declared, we need to have the declaration so we do different
|
|
# linking logic depending on the type of target
|
|
ly_delayed_target_link_libraries()
|
|
|
|
# 5. generate a registry file for unit testing for platforms that support unit testing
|
|
if(PAL_TRAIT_BUILD_TESTS_SUPPORTED)
|
|
ly_delayed_generate_unit_test_module_registry()
|
|
endif()
|
|
|
|
# 5. inject runtime dependencies to the targets. We need to do this after (1) since we are going to walk through
|
|
# the dependencies
|
|
ly_delayed_generate_runtime_dependencies()
|
|
|
|
# 6. Perform test impact framework post steps once all of the targets have been enumerated
|
|
ly_test_impact_post_step()
|
|
|
|
# 7. Generate the O3DE find file and setup install locations for scripts, tools, assets etc., required by the engine
|
|
if(LY_INSTALL_ENABLED)
|
|
# 8. Generate the O3DE find file and setup install locations for scripts, tools, assets etc., required by the engine
|
|
ly_setup_o3de_install()
|
|
# 9. CPack information (to be included after install)
|
|
include(cmake/Packaging.cmake)
|
|
endif()
|