CMakeLists.txt 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400
  1. #
  2. # Copyright (c) Contributors to the Open 3D Engine Project.
  3. # For complete copyright and license terms please see the LICENSE at the root of this distribution.
  4. #
  5. # SPDX-License-Identifier: Apache-2.0 OR MIT
  6. #
  7. #
  8. o3de_pal_dir(pal_source_dir ${CMAKE_CURRENT_LIST_DIR}/Source/Platform/${PAL_PLATFORM_NAME} "${gem_restricted_path}" "${gem_path}" "${gem_parent_relative_path}")
  9. # The ${gem_name}Stats.API target declares the common interface for tracking and recording multiplayer stats for profiling purposes.
  10. ly_add_target(
  11. NAME ${gem_name}Stats.API INTERFACE
  12. NAMESPACE Gem
  13. FILES_CMAKE
  14. multiplayerstats_api_files.cmake
  15. INCLUDE_DIRECTORIES
  16. INTERFACE
  17. Include
  18. BUILD_DEPENDENCIES
  19. INTERFACE
  20. AZ::AzCore
  21. )
  22. ly_add_target(
  23. NAME ${gem_name}.Common.Static STATIC
  24. NAMESPACE Gem
  25. FILES_CMAKE
  26. multiplayer_files.cmake
  27. INCLUDE_DIRECTORIES
  28. PRIVATE
  29. ${pal_source_dir}
  30. Source
  31. .
  32. PUBLIC
  33. Include
  34. BUILD_DEPENDENCIES
  35. PUBLIC
  36. AZ::AzCore
  37. AZ::AzFramework
  38. AZ::AzNetworking
  39. AUTOGEN_RULES
  40. *.AutoPackets.xml,AutoPackets_Header.jinja,$path/$fileprefix.AutoPackets.h
  41. *.AutoPackets.xml,AutoPackets_Inline.jinja,$path/$fileprefix.AutoPackets.inl
  42. *.AutoPackets.xml,AutoPackets_Source.jinja,$path/$fileprefix.AutoPackets.cpp
  43. *.AutoPackets.xml,AutoPacketDispatcher_Header.jinja,$path/$fileprefix.AutoPacketDispatcher.h
  44. *.AutoPackets.xml,AutoPacketDispatcher_Inline.jinja,$path/$fileprefix.AutoPacketDispatcher.inl
  45. )
  46. # Typically, the Editor Connection Listener is enabled in all regular builds, and disabled in all monolithic builds.
  47. # This can be overridden by passing -DFORCE_ENABLE_O3DE_EDITOR_CONNECTION_LISTENER=0 or 1 when generating the build files.
  48. # The override can be removed by passing -UFORCE_ENABLE_O3DE_EDITOR_CONNECTION_LISTENER when generating the build files.
  49. set(FORCE_ENABLE_O3DE_EDITOR_CONNECTION_LISTENER "" CACHE STRING
  50. "Overrides the creation of the Editor Connection Listener.
  51. If unset, it is only created in non-monolithic builds.
  52. 0 always disables the Editor Connection Listener.
  53. 1 always enables the Editor Connection Listener.")
  54. # If there's a value in FORCE_ENABLE_O3DE_EDITOR_CONNECTION_LISTENER, the compiler flag will get set to it.
  55. # Otherwise, the variable will be empty and no compiler flag will be set, leaving it to the code to decide
  56. # whether or not to include the listener.
  57. set(O3DE_EDITOR_CONNECTION_LISTENER_ENABLE_FLAG $<$<NOT:$<STREQUAL:"${FORCE_ENABLE_O3DE_EDITOR_CONNECTION_LISTENER}","">>:O3DE_EDITOR_CONNECTION_LISTENER_ENABLE=$<BOOL:${FORCE_ENABLE_O3DE_EDITOR_CONNECTION_LISTENER}>>)
  58. ly_add_target(
  59. NAME ${gem_name}.Client.Static STATIC
  60. NAMESPACE Gem
  61. FILES_CMAKE
  62. multiplayer_split_files.cmake
  63. INCLUDE_DIRECTORIES
  64. PRIVATE
  65. ${pal_source_dir}
  66. Source
  67. .
  68. PUBLIC
  69. Include
  70. COMPILE_DEFINITIONS
  71. PUBLIC
  72. AZ_TRAIT_CLIENT=1
  73. AZ_TRAIT_SERVER=0
  74. ${O3DE_EDITOR_CONNECTION_LISTENER_ENABLE_FLAG}
  75. BUILD_DEPENDENCIES
  76. PUBLIC
  77. Gem::${gem_name}.Common.Static
  78. PRIVATE
  79. Gem::EMotionFXStaticLib
  80. Gem::PhysX.Static
  81. AUTOGEN_RULES
  82. *.AutoComponent.xml,AutoComponent_Header.jinja,$path/$fileprefix.AutoComponent.h
  83. *.AutoComponent.xml,AutoComponent_Source.jinja,$path/$fileprefix.AutoComponent.cpp
  84. *.AutoComponent.xml,AutoComponentTypes_Header.jinja,$path/AutoComponentTypes.h
  85. *.AutoComponent.xml,AutoComponentTypes_Source.jinja,$path/AutoComponentTypes.cpp
  86. )
  87. ly_add_target(
  88. NAME ${gem_name}.Server.Static STATIC
  89. NAMESPACE Gem
  90. FILES_CMAKE
  91. multiplayer_split_files.cmake
  92. INCLUDE_DIRECTORIES
  93. PRIVATE
  94. ${pal_source_dir}
  95. Source
  96. .
  97. PUBLIC
  98. Include
  99. COMPILE_DEFINITIONS
  100. PUBLIC
  101. AZ_TRAIT_CLIENT=0
  102. AZ_TRAIT_SERVER=1
  103. ${O3DE_EDITOR_CONNECTION_LISTENER_ENABLE_FLAG}
  104. BUILD_DEPENDENCIES
  105. PUBLIC
  106. Gem::${gem_name}.Common.Static
  107. PRIVATE
  108. Gem::EMotionFXStaticLib
  109. Gem::PhysX.Static
  110. AUTOGEN_RULES
  111. *.AutoComponent.xml,AutoComponent_Header.jinja,$path/$fileprefix.AutoComponent.h
  112. *.AutoComponent.xml,AutoComponent_Source.jinja,$path/$fileprefix.AutoComponent.cpp
  113. *.AutoComponent.xml,AutoComponentTypes_Header.jinja,$path/AutoComponentTypes.h
  114. *.AutoComponent.xml,AutoComponentTypes_Source.jinja,$path/AutoComponentTypes.cpp
  115. )
  116. ly_add_target(
  117. NAME ${gem_name}.Unified.Static STATIC
  118. NAMESPACE Gem
  119. FILES_CMAKE
  120. multiplayer_split_files.cmake
  121. INCLUDE_DIRECTORIES
  122. PRIVATE
  123. ${pal_source_dir}
  124. Source
  125. .
  126. PUBLIC
  127. Include
  128. COMPILE_DEFINITIONS
  129. PUBLIC
  130. AZ_TRAIT_CLIENT=1
  131. AZ_TRAIT_SERVER=1
  132. ${O3DE_EDITOR_CONNECTION_LISTENER_ENABLE_FLAG}
  133. BUILD_DEPENDENCIES
  134. PUBLIC
  135. Gem::${gem_name}.Common.Static
  136. PRIVATE
  137. Gem::EMotionFXStaticLib
  138. Gem::PhysX.Static
  139. AUTOGEN_RULES
  140. *.AutoComponent.xml,AutoComponent_Header.jinja,$path/$fileprefix.AutoComponent.h
  141. *.AutoComponent.xml,AutoComponent_Source.jinja,$path/$fileprefix.AutoComponent.cpp
  142. *.AutoComponent.xml,AutoComponentTypes_Header.jinja,$path/AutoComponentTypes.h
  143. *.AutoComponent.xml,AutoComponentTypes_Source.jinja,$path/AutoComponentTypes.cpp
  144. )
  145. ly_add_target(
  146. NAME ${gem_name} ${PAL_TRAIT_MONOLITHIC_DRIVEN_MODULE_TYPE}
  147. NAMESPACE Gem
  148. FILES_CMAKE
  149. multiplayer_shared_files.cmake
  150. INCLUDE_DIRECTORIES
  151. PRIVATE
  152. Source
  153. .
  154. PUBLIC
  155. Include
  156. BUILD_DEPENDENCIES
  157. PRIVATE
  158. Gem::${gem_name}.Unified.Static
  159. RUNTIME_DEPENDENCIES
  160. Gem::CertificateManager
  161. )
  162. # Inject the gem name into the Module source file
  163. ly_add_source_properties(
  164. SOURCES
  165. Source/MultiplayerGem.cpp
  166. PROPERTY COMPILE_DEFINITIONS
  167. VALUES
  168. O3DE_GEM_NAME=${gem_name}
  169. O3DE_GEM_VERSION=${gem_version})
  170. ly_add_target(
  171. NAME ${gem_name}.Client ${PAL_TRAIT_MONOLITHIC_DRIVEN_MODULE_TYPE}
  172. NAMESPACE Gem
  173. FILES_CMAKE
  174. multiplayer_shared_files.cmake
  175. INCLUDE_DIRECTORIES
  176. PRIVATE
  177. Source
  178. .
  179. PUBLIC
  180. Include
  181. BUILD_DEPENDENCIES
  182. PRIVATE
  183. Gem::${gem_name}.Client.Static
  184. RUNTIME_DEPENDENCIES
  185. Gem::CertificateManager
  186. )
  187. ly_add_target(
  188. NAME ${gem_name}.Server ${PAL_TRAIT_MONOLITHIC_DRIVEN_MODULE_TYPE}
  189. NAMESPACE Gem
  190. FILES_CMAKE
  191. multiplayer_shared_files.cmake
  192. INCLUDE_DIRECTORIES
  193. PRIVATE
  194. Source
  195. .
  196. PUBLIC
  197. Include
  198. BUILD_DEPENDENCIES
  199. PRIVATE
  200. Gem::${gem_name}.Server.Static
  201. RUNTIME_DEPENDENCIES
  202. Gem::CertificateManager
  203. )
  204. ly_add_target(
  205. NAME ${gem_name}.Debug.Client ${PAL_TRAIT_MONOLITHIC_DRIVEN_MODULE_TYPE}
  206. NAMESPACE Gem
  207. FILES_CMAKE
  208. multiplayer_debug_files.cmake
  209. INCLUDE_DIRECTORIES
  210. PRIVATE
  211. Source
  212. .
  213. PUBLIC
  214. Include
  215. BUILD_DEPENDENCIES
  216. PRIVATE
  217. AZ::AzCore
  218. AZ::AtomCore
  219. AZ::AzFramework
  220. AZ::AzNetworking
  221. Gem::Atom_Feature_Common.Public
  222. Gem::${gem_name}.Client.Static
  223. Gem::ImGui.Static
  224. )
  225. ly_add_target(
  226. NAME ${gem_name}.Debug ${PAL_TRAIT_MONOLITHIC_DRIVEN_MODULE_TYPE}
  227. NAMESPACE Gem
  228. FILES_CMAKE
  229. multiplayer_debug_files.cmake
  230. INCLUDE_DIRECTORIES
  231. PRIVATE
  232. Source
  233. .
  234. PUBLIC
  235. Include
  236. BUILD_DEPENDENCIES
  237. PRIVATE
  238. AZ::AzCore
  239. AZ::AtomCore
  240. AZ::AzFramework
  241. AZ::AzNetworking
  242. Gem::Atom_Feature_Common.Public
  243. Gem::${gem_name}.Unified.Static
  244. Gem::ImGui.Static
  245. )
  246. # Inject the gem name into the Module source file
  247. ly_add_source_properties(
  248. SOURCES
  249. Source/Debug/MultiplayerDebugModule.cpp
  250. PROPERTY COMPILE_DEFINITIONS
  251. VALUES
  252. O3DE_GEM_NAME=${gem_name}
  253. O3DE_GEM_VERSION=${gem_version})
  254. # The "Multiplayer" target is used by clients and servers, Debug is used only on clients.
  255. ly_create_alias(NAME ${gem_name}.Clients NAMESPACE Gem TARGETS Gem::${gem_name}.Client Gem::${gem_name}.Debug.Client)
  256. ly_create_alias(NAME ${gem_name}.Servers NAMESPACE Gem TARGETS Gem::${gem_name}.Server)
  257. ly_create_alias(NAME ${gem_name}.Unified NAMESPACE Gem TARGETS Gem::${gem_name} Gem::${gem_name}.Debug)
  258. if (PAL_TRAIT_BUILD_HOST_TOOLS)
  259. ly_add_target(
  260. NAME ${gem_name}.Tools.Static STATIC
  261. NAMESPACE Gem
  262. FILES_CMAKE
  263. multiplayer_tools_files.cmake
  264. INCLUDE_DIRECTORIES
  265. PRIVATE
  266. ${pal_source_dir}
  267. Source
  268. .
  269. PUBLIC
  270. Include
  271. BUILD_DEPENDENCIES
  272. PUBLIC
  273. AZ::AzCore
  274. AZ::AzFramework
  275. AZ::AzNetworking
  276. AZ::AzToolsFramework
  277. )
  278. ly_add_target(
  279. NAME ${gem_name}.Editor GEM_MODULE
  280. NAMESPACE Gem
  281. FILES_CMAKE
  282. multiplayer_editor_shared_files.cmake
  283. COMPILE_DEFINITIONS
  284. PUBLIC
  285. MULTIPLAYER_EDITOR
  286. INCLUDE_DIRECTORIES
  287. PRIVATE
  288. .
  289. Source
  290. ${pal_source_dir}
  291. PUBLIC
  292. Include
  293. BUILD_DEPENDENCIES
  294. PRIVATE
  295. Legacy::EditorLib
  296. Legacy::CryCommon
  297. Legacy::Editor.Headers
  298. AZ::AzCore
  299. AZ::AzFramework
  300. AZ::AzNetworking
  301. AZ::AzToolsFramework
  302. Gem::Atom_RPI.Public
  303. Gem::Atom_RHI.Reflect
  304. Gem::${gem_name}.Unified.Static
  305. Gem::${gem_name}.Tools.Static
  306. )
  307. # Inject the gem name into the Module source file
  308. ly_add_source_properties(
  309. SOURCES
  310. Source/Editor/MultiplayerEditorGem.cpp
  311. PROPERTY COMPILE_DEFINITIONS
  312. VALUES
  313. O3DE_GEM_NAME=${gem_name}
  314. O3DE_GEM_VERSION=${gem_version})
  315. ly_create_alias(NAME ${gem_name}.Builders NAMESPACE Gem TARGETS Gem::${gem_name}.Editor)
  316. # use the ${gem_name}.Editor module in tools like the Editor: Such tools also get the visual debug view:
  317. ly_create_alias(NAME ${gem_name}.Tools NAMESPACE Gem TARGETS Gem::${gem_name}.Debug Gem::${gem_name}.Builders)
  318. endif()
  319. if (PAL_TRAIT_BUILD_TESTS_SUPPORTED)
  320. ly_add_target(
  321. NAME ${gem_name}.Tests ${PAL_TRAIT_TEST_TARGET_TYPE}
  322. NAMESPACE Gem
  323. FILES_CMAKE
  324. multiplayer_tests_files.cmake
  325. INCLUDE_DIRECTORIES
  326. PRIVATE
  327. Tests
  328. ${pal_source_dir}
  329. Source
  330. .
  331. PUBLIC
  332. Include
  333. BUILD_DEPENDENCIES
  334. PRIVATE
  335. AZ::AzTest
  336. Gem::${gem_name}.Unified.Static
  337. Gem::PhysX.Static
  338. AUTOGEN_RULES
  339. *.AutoComponent.xml,AutoComponent_Header.jinja,$path/$fileprefix.AutoComponent.h
  340. *.AutoComponent.xml,AutoComponent_Source.jinja,$path/$fileprefix.AutoComponent.cpp
  341. *.AutoComponent.xml,AutoComponentTypes_Header.jinja,$path/AutoComponentTypes.h
  342. *.AutoComponent.xml,AutoComponentTypes_Source.jinja,$path/AutoComponentTypes.cpp
  343. )
  344. ly_add_googletest(
  345. NAME Gem::${gem_name}.Tests
  346. LABELS REQUIRES_tiaf
  347. )
  348. ly_add_googlebenchmark(
  349. NAME Gem::${gem_name}.Benchmarks
  350. TARGET Gem::${gem_name}.Tests
  351. )
  352. if (PAL_TRAIT_BUILD_HOST_TOOLS)
  353. ly_add_target(
  354. NAME ${gem_name}.Builders.Tests ${PAL_TRAIT_TEST_TARGET_TYPE}
  355. NAMESPACE Gem
  356. FILES_CMAKE
  357. multiplayer_tools_tests_files.cmake
  358. INCLUDE_DIRECTORIES
  359. PRIVATE
  360. Tests
  361. Source
  362. .
  363. BUILD_DEPENDENCIES
  364. PRIVATE
  365. AZ::AzTest
  366. AZ::AzTestShared
  367. AZ::AzToolsFrameworkTestCommon
  368. Gem::${gem_name}.Unified.Static
  369. Gem::${gem_name}.Tools.Static
  370. )
  371. ly_add_googletest(
  372. NAME Gem::${gem_name}.Builders.Tests
  373. LABELS REQUIRES_tiaf
  374. )
  375. endif()
  376. endif()