forked from o3de/o3de
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathCMakeLists.txt
More file actions
181 lines (151 loc) · 7.36 KB
/
CMakeLists.txt
File metadata and controls
181 lines (151 loc) · 7.36 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
#
# 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.24 is the minimum version needed for all of Open 3D Engine's supported platforms
cmake_minimum_required(VERSION 3.24)
if(NOT ${CMAKE_VERSION} VERSION_LESS "3.24")
# CMP0135 - controls whether, when unpacking an archive file, it should:
# (OLD) set the file timestamps to what they are in the archive (not recommended)
# (NEW) set the file timestamps to the time of extraction (recommended)
cmake_policy(SET CMP0135 NEW)
endif()
include(cmake/LySet.cmake)
include(cmake/GeneralSettings.cmake)
include(cmake/FileUtil.cmake)
include(cmake/Version.cmake)
include(cmake/OutputDirectory.cmake)
if(NOT PROJECT_NAME)
include(cmake/CompilerSettings.cmake)
project(O3DE
LANGUAGES C CXX
VERSION ${O3DE_INSTALL_VERSION_STRING}
)
endif()
# Output some useful-for-debugging information in case something goes wrong and the user sends a log.
# this cannot be done until project() is called.
get_property(O3DE_SCRIPT_ONLY GLOBAL PROPERTY "O3DE_SCRIPT_ONLY")
if (O3DE_SCRIPT_ONLY)
message(STATUS "Basic Configuration Information (Script-only mode):\n"
" CMAKE_VERSION: ${CMAKE_VERSION}\n"
" CMAKE_GENERATOR: ${CMAKE_GENERATOR}"
)
else()
message(STATUS "Basic Configuration Information:\n"
" CMAKE_VERSION: ${CMAKE_VERSION}\n"
" CMAKE_GENERATOR: ${CMAKE_GENERATOR}\n"
" CMAKE_CXX_COMPILER_ID: ${CMAKE_CXX_COMPILER_ID}\n"
" CMAKE_CXX_COMPILER_VERSION: ${CMAKE_CXX_COMPILER_VERSION}\n"
" O3DE_INSTALL_VERSION_STRING: ${O3DE_INSTALL_VERSION_STRING}\n"
" INSTALLED_ENGINE: ${INSTALLED_ENGINE}"
)
endif()
################################################################################
# Initialize
################################################################################
message(STATUS "Initializing O3DE CMake system...")
list(APPEND CMAKE_MESSAGE_INDENT " ")
include(CTest)
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/TestImpactFramework/TestImpactTestTargetConfig.cmake) # LYTestWrappers dependency
include(cmake/LYTestWrappers.cmake)
include(cmake/Monolithic.cmake)
include(cmake/SettingsRegistry.cmake)
include(cmake/CMakeFiles.cmake)
include(cmake/O3DEJson.cmake)
include(cmake/Subdirectories.cmake)
include(cmake/TestImpactFramework/LYTestImpactFramework.cmake) # Put at end as nothing else depends on it
if (O3DE_SCRIPT_ONLY AND NOT INSTALLED_ENGINE)
get_property(engine_root GLOBAL PROPERTY O3DE_ENGINE_ROOT_FOLDER)
message(FATAL_ERROR "Script-only projects require pre-built versions of O3DE.\n\
The project being compiled (${PROJECT_NAME}) is a script-only project (see project.json) \
but the engine being used to build it is a compile-from-source engine using c++ code \
(${engine_root}). Please use a pre-built (installer) O3DE to build script-only projects.")
endif()
# Gather the list of o3de_manifest external Subdirectories
# into the O3DE_EXTERNAL_SUBDIRS_O3DE_MANIFEST_PROPERTY
add_o3de_manifest_json_external_subdirectories()
list(POP_BACK CMAKE_MESSAGE_INDENT)
message(STATUS "Executing CMake scripts...")
list(APPEND CMAKE_MESSAGE_INDENT " ")
# Add the projects first so the Launcher can find them
include(cmake/Projects.cmake)
# Add external subdirectories listed in the engine.json.
# O3DE_EXTERNAL_SUBDIRS is a cache variable so the user can add extra
# external subdirectories.
add_engine_json_external_subdirectories()
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)
# Invoke add_subdirectory on all external subdirectories
# that is in use by the union of projects specified by path in LY_PROJECTS
add_subdirectory_on_external_subdirs()
else()
ly_find_o3de_packages()
add_subdirectory_on_external_subdirs()
endif()
################################################################################
# Post-processing
################################################################################
# The following steps have to be done after all targets are registered:
list(POP_BACK CMAKE_MESSAGE_INDENT)
message(STATUS "Finishing up configuration...")
list(APPEND CMAKE_MESSAGE_INDENT " ")
# Most of these post processing steps are nearly instantaneous, so no point in displaying a message
# but if any of them take a time, we can add a message.
# 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
# This step takes a bit of time, so we display a message
message(STATUS "Computing Runtime Dependencies (files to copy to the target's output directory)...")
ly_delayed_generate_runtime_dependencies()
# 6. Perform test impact framework post steps once all of the targets have been enumerated
if(O3DE_TEST_IMPACT_NATIVE_TEST_TARGETS_ENABLED OR O3DE_TEST_IMPACT_PYTHON_TEST_TARGETS_ENABLED)
if(PAL_TRAIT_BUILD_TESTS_SUPPORTED)
ly_test_impact_post_step()
endif()
endif()
list(POP_BACK CMAKE_MESSAGE_INDENT)
# 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()