CMakeLists.txt 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321
  1. # Copyright (c) Contributors to the Open 3D Engine Project.
  2. # For complete copyright and license terms please see the LICENSE at the root of this distribution.
  3. #
  4. # SPDX-License-Identifier: Apache-2.0 OR MIT
  5. #
  6. # Currently we are in the Code folder: ${CMAKE_CURRENT_LIST_DIR}
  7. # Get the platform specific folder ${pal_dir} for the current folder: ${CMAKE_CURRENT_LIST_DIR}/Platform/${PAL_PLATFORM_NAME}
  8. # Note: o3de_pal_dir will take care of the details for us, as this may be a restricted platform
  9. # in which case it will see if that platform is present here or in the restricted folder.
  10. # i.e. It could here in our gem : Gems/MPSGameLift/Code/Platform/<platorm_name> or
  11. # <restricted_folder>/<platform_name>/Gems/MPSGameLift/Code
  12. o3de_pal_dir(pal_dir ${CMAKE_CURRENT_LIST_DIR}/Platform/${PAL_PLATFORM_NAME} "${gem_restricted_path}" "${gem_path}" "${gem_parent_relative_path}")
  13. # Now that we have the platform abstraction layer (PAL) folder for this folder, thats where we will find the
  14. # traits for this platform. Traits for a platform are defines for things like whether or not something in this gem
  15. # is supported by this platform.
  16. include(${pal_dir}/PAL_${PAL_PLATFORM_NAME_LOWERCASE}.cmake)
  17. # Check to see if building the Gem Modules are supported for the current platform
  18. if(NOT PAL_TRAIT_MPSGAMELIFT_SUPPORTED)
  19. return()
  20. endif()
  21. # The ${gem_name}.API target declares the common interface that users of this gem should depend on in their targets
  22. ly_add_target(
  23. NAME ${gem_name}.API INTERFACE
  24. NAMESPACE Gem
  25. FILES_CMAKE
  26. mpsgamelift_api_files.cmake
  27. ${pal_dir}/mpsgamelift_api_files.cmake
  28. INCLUDE_DIRECTORIES
  29. INTERFACE
  30. Include
  31. BUILD_DEPENDENCIES
  32. INTERFACE
  33. AZ::AzCore
  34. )
  35. # The ${gem_name}.Private.Object targets are internal targets
  36. # They should not be used outside of this Gems CMakeLists.txt
  37. ly_add_target(
  38. NAME ${gem_name}.Client.Private.Object STATIC
  39. NAMESPACE Gem
  40. FILES_CMAKE
  41. mpsgamelift_private_files.cmake
  42. ${pal_dir}/mpsgamelift_private_files.cmake
  43. mpsgamelift_client_files.cmake
  44. TARGET_PROPERTIES
  45. O3DE_PRIVATE_TARGET TRUE
  46. INCLUDE_DIRECTORIES
  47. PRIVATE
  48. Include
  49. Source
  50. BUILD_DEPENDENCIES
  51. PUBLIC
  52. AZ::AzCore
  53. AZ::AzFramework
  54. Gem::Multiplayer.Client
  55. Gem::LyShine
  56. PRIVATE
  57. Gem::Multiplayer.Client.Static
  58. Gem::AWSCore.Static
  59. Gem::AWSGameLift.Client.Static
  60. Gem::LyShine.Static
  61. )
  62. ly_add_target(
  63. NAME ${gem_name}.Server.Private.Object STATIC
  64. NAMESPACE Gem
  65. FILES_CMAKE
  66. mpsgamelift_private_files.cmake
  67. ${pal_dir}/mpsgamelift_private_files.cmake
  68. mpsgamelift_server_files.cmake
  69. TARGET_PROPERTIES
  70. O3DE_PRIVATE_TARGET TRUE
  71. INCLUDE_DIRECTORIES
  72. PRIVATE
  73. Include
  74. Source
  75. BUILD_DEPENDENCIES
  76. PUBLIC
  77. AZ::AzCore
  78. AZ::AzFramework
  79. Gem::Multiplayer.Server
  80. PRIVATE
  81. Gem::Multiplayer.Server.Static
  82. Gem::AWSGameLift.Server.Static
  83. )
  84. ly_add_target(
  85. NAME ${gem_name}.Unified.Private.Object STATIC
  86. NAMESPACE Gem
  87. FILES_CMAKE
  88. mpsgamelift_private_files.cmake
  89. mpsgamelift_client_files.cmake
  90. ${pal_dir}/mpsgamelift_private_files.cmake
  91. TARGET_PROPERTIES
  92. O3DE_PRIVATE_TARGET TRUE
  93. INCLUDE_DIRECTORIES
  94. PRIVATE
  95. Include
  96. Source
  97. BUILD_DEPENDENCIES
  98. PUBLIC
  99. AZ::AzCore
  100. AZ::AzFramework
  101. Gem::Multiplayer
  102. Gem::LyShine
  103. PRIVATE
  104. Gem::Multiplayer.Unified.Static
  105. Gem::AWSCore.Static
  106. Gem::AWSGameLift.Client.Static
  107. Gem::LyShine.Static
  108. )
  109. # Here add ${gem_name} target, it depends on the Private Object library and Public API interface
  110. ly_add_target(
  111. NAME ${gem_name}.Client ${PAL_TRAIT_MONOLITHIC_DRIVEN_MODULE_TYPE}
  112. NAMESPACE Gem
  113. FILES_CMAKE
  114. mpsgamelift_shared_files.cmake
  115. ${pal_dir}/mpsgamelift_shared_files.cmake
  116. INCLUDE_DIRECTORIES
  117. PUBLIC
  118. Include
  119. PRIVATE
  120. Source
  121. BUILD_DEPENDENCIES
  122. PUBLIC
  123. Gem::${gem_name}.API
  124. PRIVATE
  125. Gem::Multiplayer.Client.Static
  126. Gem::AWSCore.Static
  127. Gem::AWSGameLift.Client.Static
  128. Gem::${gem_name}.Client.Private.Object
  129. RUNTIME_DEPENDENCIES
  130. Gem::AWSGameLift.Clients
  131. )
  132. ly_add_target(
  133. NAME ${gem_name}.Server ${PAL_TRAIT_MONOLITHIC_DRIVEN_MODULE_TYPE}
  134. NAMESPACE Gem
  135. FILES_CMAKE
  136. mpsgamelift_shared_files.cmake
  137. ${pal_dir}/mpsgamelift_shared_files.cmake
  138. INCLUDE_DIRECTORIES
  139. PUBLIC
  140. Include
  141. PRIVATE
  142. Source
  143. BUILD_DEPENDENCIES
  144. PUBLIC
  145. Gem::${gem_name}.API
  146. PRIVATE
  147. Gem::Multiplayer.Server.Static
  148. Gem::${gem_name}.Server.Private.Object
  149. RUNTIME_DEPENDENCIES
  150. Gem::AWSGameLift.Servers
  151. )
  152. ly_add_target(
  153. NAME ${gem_name} ${PAL_TRAIT_MONOLITHIC_DRIVEN_MODULE_TYPE}
  154. NAMESPACE Gem
  155. FILES_CMAKE
  156. mpsgamelift_shared_files.cmake
  157. ${pal_dir}/mpsgamelift_shared_files.cmake
  158. INCLUDE_DIRECTORIES
  159. PUBLIC
  160. Include
  161. PRIVATE
  162. Source
  163. BUILD_DEPENDENCIES
  164. PUBLIC
  165. Gem::${gem_name}.API
  166. PRIVATE
  167. Gem::${gem_name}.Unified.Private.Object
  168. )
  169. # By default, we will specify that the above target ${gem_name} would be used by
  170. # Client and Server type targets when this gem is enabled. If you don't want it
  171. # active in Clients or Servers by default, delete one of both of the following lines:
  172. ly_create_alias(NAME ${gem_name}.Clients NAMESPACE Gem TARGETS Gem::${gem_name}.Client)
  173. ly_create_alias(NAME ${gem_name}.Servers NAMESPACE Gem TARGETS Gem::${gem_name}.Server)
  174. ly_create_alias(NAME ${gem_name}.Unified NAMESPACE Gem TARGETS Gem::${gem_name})
  175. # For the Client and Server variants of ${gem_name} Gem, an alias to the ${gem_name}.API target will be made
  176. ly_create_alias(NAME ${gem_name}.Clients.API NAMESPACE Gem TARGETS Gem::${gem_name}.API)
  177. ly_create_alias(NAME ${gem_name}.Servers.API NAMESPACE Gem TARGETS Gem::${gem_name}.API)
  178. ly_create_alias(NAME ${gem_name}.Unified.API NAMESPACE Gem TARGETS Gem::${gem_name}.API)
  179. # If we are on a host platform, we want to add the host tools targets like the ${gem_name}.Editor MODULE target
  180. if(PAL_TRAIT_BUILD_HOST_TOOLS)
  181. # The ${gem_name}.Editor.API target can be used by other gems that want to interact with the ${gem_name}.Editor module
  182. ly_add_target(
  183. NAME ${gem_name}.Editor.API INTERFACE
  184. NAMESPACE Gem
  185. FILES_CMAKE
  186. mpsgamelift_editor_api_files.cmake
  187. ${pal_dir}/mpsgamelift_editor_api_files.cmake
  188. INCLUDE_DIRECTORIES
  189. INTERFACE
  190. Include
  191. BUILD_DEPENDENCIES
  192. INTERFACE
  193. AZ::AzToolsFramework
  194. )
  195. # The ${gem_name}.Editor.Private.Object target is an internal target
  196. # which is only to be used by this gems CMakeLists.txt and any subdirectories
  197. # Other gems should not use this target
  198. ly_add_target(
  199. NAME ${gem_name}.Editor.Private.Object STATIC
  200. NAMESPACE Gem
  201. FILES_CMAKE
  202. mpsgamelift_editor_private_files.cmake
  203. TARGET_PROPERTIES
  204. O3DE_PRIVATE_TARGET TRUE
  205. INCLUDE_DIRECTORIES
  206. PRIVATE
  207. Include
  208. Source
  209. BUILD_DEPENDENCIES
  210. PUBLIC
  211. AZ::AzToolsFramework
  212. Gem::Multiplayer.Unified.Static
  213. Gem::AWSCore.Static
  214. Gem::AWSGameLift.Client.Static
  215. $<TARGET_OBJECTS:Gem::${gem_name}.Unified.Private.Object>
  216. )
  217. ly_add_target(
  218. NAME ${gem_name}.Editor GEM_MODULE
  219. NAMESPACE Gem
  220. AUTOMOC
  221. FILES_CMAKE
  222. mpsgamelift_editor_shared_files.cmake
  223. INCLUDE_DIRECTORIES
  224. PRIVATE
  225. Source
  226. PUBLIC
  227. Include
  228. BUILD_DEPENDENCIES
  229. PUBLIC
  230. Gem::${gem_name}.Editor.API
  231. PRIVATE
  232. Gem::${gem_name}.Editor.Private.Object
  233. )
  234. # By default, we will specify that the above target ${gem_name} would be used by
  235. # Tool and Builder type targets when this gem is enabled. If you don't want it
  236. # active in Tools or Builders by default, delete one of both of the following lines:
  237. ly_create_alias(NAME ${gem_name}.Tools NAMESPACE Gem TARGETS Gem::${gem_name}.Editor)
  238. ly_create_alias(NAME ${gem_name}.Builders NAMESPACE Gem TARGETS Gem::${gem_name}.Editor)
  239. # For the Tools and Builders variants of ${gem_name} Gem, an alias to the ${gem_name}.Editor API target will be made
  240. ly_create_alias(NAME ${gem_name}.Tools.API NAMESPACE Gem TARGETS Gem::${gem_name}.Editor.API)
  241. ly_create_alias(NAME ${gem_name}.Builders.API NAMESPACE Gem TARGETS Gem::${gem_name}.Editor.API)
  242. endif()
  243. ################################################################################
  244. # Tests
  245. ################################################################################
  246. # See if globally, tests are supported
  247. if(PAL_TRAIT_BUILD_TESTS_SUPPORTED)
  248. # We globally support tests, see if we support tests on this platform for ${gem_name}.Tests
  249. if(PAL_TRAIT_MPSGAMELIFT_TEST_SUPPORTED)
  250. # We support ${gem_name}.Tests on this platform, add dependency on the Private Object target
  251. ly_add_target(
  252. NAME ${gem_name}.Tests ${PAL_TRAIT_TEST_TARGET_TYPE}
  253. NAMESPACE Gem
  254. FILES_CMAKE
  255. mpsgamelift_tests_files.cmake
  256. INCLUDE_DIRECTORIES
  257. PRIVATE
  258. Tests
  259. Source
  260. BUILD_DEPENDENCIES
  261. PRIVATE
  262. AZ::AzTest
  263. AZ::AzFramework
  264. Gem::${gem_name}.Unified.Private.Object
  265. )
  266. # Add ${gem_name}.Tests to googletest
  267. ly_add_googletest(
  268. NAME Gem::${gem_name}.Tests
  269. )
  270. endif()
  271. # If we are a host platform we want to add tools test like editor tests here
  272. if(PAL_TRAIT_BUILD_HOST_TOOLS)
  273. # We are a host platform, see if Editor tests are supported on this platform
  274. if(PAL_TRAIT_MPSGAMELIFT_EDITOR_TEST_SUPPORTED)
  275. # We support ${gem_name}.Editor.Tests on this platform, add ${gem_name}.Editor.Tests target which depends on
  276. # private ${gem_name}.Editor.Private.Object target
  277. ly_add_target(
  278. NAME ${gem_name}.Editor.Tests ${PAL_TRAIT_TEST_TARGET_TYPE}
  279. NAMESPACE Gem
  280. FILES_CMAKE
  281. mpsgamelift_editor_tests_files.cmake
  282. INCLUDE_DIRECTORIES
  283. PRIVATE
  284. Tests
  285. Source
  286. BUILD_DEPENDENCIES
  287. PRIVATE
  288. AZ::AzTest
  289. Gem::${gem_name}.Unified.Private.Object
  290. )
  291. # Add ${gem_name}.Editor.Tests to googletest
  292. ly_add_googletest(
  293. NAME Gem::${gem_name}.Editor.Tests
  294. )
  295. endif()
  296. endif()
  297. endif()