CMakeLists.txt 7.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246
  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_gem_setup("PhysX5")
  9. ly_add_external_target_path(${CMAKE_CURRENT_SOURCE_DIR}/3rdParty)
  10. o3de_pal_dir(pal_source_dir ${CMAKE_CURRENT_LIST_DIR}/Source/Platform/${PAL_PLATFORM_NAME} "${gem_restricted_path}" "${gem_path}" "${gem_parent_relative_path}")
  11. include(${pal_source_dir}/PAL_${PAL_PLATFORM_NAME_LOWERCASE}.cmake) # for PAL_TRAIT_PHYSX_SUPPORTED
  12. if(PAL_TRAIT_PHYSX_SUPPORTED)
  13. set(physx_dependency 3rdParty::PhysX5)
  14. set(physx_files ../Code/physx_files.cmake)
  15. set(physx_module_files physx_module_files.cmake)
  16. set(physx_shared_files ../Code/physx_shared_files.cmake)
  17. set(physx_editor_files ../Code/physx_editor_files.cmake)
  18. else()
  19. set(physx_files ../Code/physx_unsupported_files.cmake)
  20. set(physx_module_files physx_unsupported_module_files.cmake)
  21. set(physx_shared_files ../Code/physx_unsupported_shared_files.cmake)
  22. set(physx_editor_files ../Code/physx_unsupported_files.cmake)
  23. endif()
  24. ly_add_target(
  25. NAME ${gem_name}.Static STATIC
  26. NAMESPACE Gem
  27. FILES_CMAKE
  28. ${physx_files}
  29. COMPILE_DEFINITIONS
  30. PUBLIC
  31. PHYSX_ENABLE_MULTI_THREADING
  32. PHYSX_SETREG_GEM_NAME="PhysX5"
  33. $<$<NOT:$<CONFIG:release>>:AZ_PHYSICS_DEBUG_ENABLED>
  34. INCLUDE_DIRECTORIES
  35. PUBLIC
  36. ../Code/.
  37. ../Code/Source
  38. ${pal_source_dir}
  39. ../Code/Include
  40. BUILD_DEPENDENCIES
  41. PUBLIC
  42. ${physx_dependency}
  43. AZ::AzCore
  44. AZ::AzFramework
  45. Legacy::CryCommon
  46. PRIVATE
  47. Gem::LmbrCentral.API
  48. )
  49. ly_add_target(
  50. NAME ${gem_name} ${PAL_TRAIT_MONOLITHIC_DRIVEN_MODULE_TYPE}
  51. NAMESPACE Gem
  52. OUTPUT_NAME ${gem_name}.Gem
  53. FILES_CMAKE
  54. ${physx_module_files}
  55. ${physx_shared_files}
  56. COMPILE_DEFINITIONS
  57. PUBLIC
  58. PHYSX_ENABLE_MULTI_THREADING
  59. INCLUDE_DIRECTORIES
  60. PRIVATE
  61. ${pal_source_dir}
  62. PUBLIC
  63. ../Code/Include
  64. BUILD_DEPENDENCIES
  65. PRIVATE
  66. Gem::${gem_name}.Static
  67. Gem::LmbrCentral.API
  68. RUNTIME_DEPENDENCIES
  69. Gem::LmbrCentral
  70. )
  71. # Inject the gem name into the Module source file
  72. if(PAL_TRAIT_PHYSX_SUPPORTED)
  73. ly_add_source_properties(
  74. SOURCES
  75. Source/Module.cpp
  76. PROPERTY COMPILE_DEFINITIONS
  77. VALUES
  78. O3DE_GEM_NAME=${gem_name}
  79. O3DE_GEM_VERSION=${gem_version})
  80. else()
  81. ly_add_source_properties(
  82. SOURCES
  83. Source/ModuleUnsupported.cpp
  84. PROPERTY COMPILE_DEFINITIONS
  85. VALUES
  86. O3DE_GEM_NAME=${gem_name}
  87. O3DE_GEM_VERSION=${gem_version})
  88. endif()
  89. # use the ${gem_name} module in clients and servers:
  90. ly_create_alias(NAME ${gem_name}.Clients NAMESPACE Gem TARGETS Gem::${gem_name})
  91. ly_create_alias(NAME ${gem_name}.Servers NAMESPACE Gem TARGETS Gem::${gem_name})
  92. ly_create_alias(NAME ${gem_name}.Unified NAMESPACE Gem TARGETS Gem::${gem_name})
  93. if(PAL_TRAIT_BUILD_HOST_TOOLS)
  94. ly_add_target(
  95. NAME ${gem_name}.Editor.Static STATIC
  96. NAMESPACE Gem
  97. AUTOMOC
  98. AUTOUIC
  99. FILES_CMAKE
  100. ${physx_editor_files}
  101. PLATFORM_INCLUDE_FILES
  102. ${CMAKE_CURRENT_LIST_DIR}/Source/Platform/Common/${PAL_TRAIT_COMPILER_ID}/physx_editor_static_${PAL_TRAIT_COMPILER_ID_LOWERCASE}.cmake
  103. COMPILE_DEFINITIONS
  104. PUBLIC
  105. PHYSX_EDITOR
  106. ENABLE_NON_COMPILED_CGF
  107. INCLUDE_DIRECTORIES
  108. PRIVATE
  109. ../Code/.
  110. ../Code/Source
  111. ${pal_source_dir}
  112. PUBLIC
  113. ../Code/Include
  114. BUILD_DEPENDENCIES
  115. PUBLIC
  116. ${physx_dependency}
  117. 3rdParty::poly2tri
  118. 3rdParty::v-hacd
  119. Legacy::Editor.Headers
  120. AZ::AzCore
  121. AZ::AzFramework
  122. AZ::AzToolsFramework
  123. AZ::AssetBuilderSDK
  124. AZ::SceneCore
  125. AZ::SceneData
  126. Legacy::CryCommon
  127. Gem::LmbrCentral.Editor
  128. Gem::PhysX.NumericalMethods
  129. Gem::${gem_name}.Static
  130. Gem::CommonFeaturesAtom.Static
  131. RUNTIME_DEPENDENCIES
  132. AZ::SceneCore
  133. )
  134. ly_add_target(
  135. NAME ${gem_name}.Editor GEM_MODULE
  136. NAMESPACE Gem
  137. OUTPUT_NAME ${gem_name}.Editor.Gem
  138. AUTOMOC
  139. FILES_CMAKE
  140. ${physx_module_files}
  141. COMPILE_DEFINITIONS
  142. PUBLIC
  143. PHYSX_ENABLE_MULTI_THREADING
  144. INCLUDE_DIRECTORIES
  145. PRIVATE
  146. ../Code/.
  147. ../Code/Source
  148. ${pal_source_dir}
  149. PUBLIC
  150. ../Code/Include
  151. BUILD_DEPENDENCIES
  152. PRIVATE
  153. Gem::${gem_name}.Editor.Static
  154. )
  155. # use the ${gem_name}.Editor module in dev tools:
  156. ly_create_alias(NAME ${gem_name}.Builders NAMESPACE Gem TARGETS Gem::${gem_name}.Editor)
  157. ly_create_alias(NAME ${gem_name}.Tools NAMESPACE Gem TARGETS Gem::${gem_name}.Editor)
  158. endif()
  159. ################################################################################
  160. # Tests
  161. ################################################################################
  162. if(PAL_TRAIT_BUILD_TESTS_SUPPORTED)
  163. ly_add_target(
  164. NAME ${gem_name}.Tests ${PAL_TRAIT_TEST_TARGET_TYPE}
  165. NAMESPACE Gem
  166. OUTPUT_NAME ${gem_name}.Tests.Gem
  167. FILES_CMAKE
  168. ../Code/physx_tests_files.cmake
  169. INCLUDE_DIRECTORIES
  170. PRIVATE
  171. ../Code/Tests
  172. BUILD_DEPENDENCIES
  173. PRIVATE
  174. AZ::AzTestShared
  175. AZ::AzTest
  176. Gem::${gem_name}.Static
  177. Gem::LmbrCentral
  178. RUNTIME_DEPENDENCIES
  179. Gem::LmbrCentral
  180. )
  181. ly_add_googletest(
  182. NAME Gem::${gem_name}.Tests
  183. LABELS REQUIRES_tiaf
  184. )
  185. # Only add the physx benchmarks if this flag is set. The benchmark code is still built, as it is part of the ${gem_name}.Tests project.
  186. # Currently jenkins has a 1500sec(25min) timeout, our benchmarks can sometimes take over 1500sec and cause a build failure for timeout.
  187. # Jenkins currently doesn't upload the results of the benchmarks, so this is ok.
  188. if(LY_PHYSX_ENABLE_RUNNING_BENCHMARKS)
  189. ly_add_googlebenchmark(
  190. NAME Gem::${gem_name}.Benchmarks
  191. TARGET Gem::${gem_name}.Tests
  192. )
  193. endif()
  194. list(APPEND testTargets ${gem_name}.Tests)
  195. if (PAL_TRAIT_BUILD_HOST_TOOLS)
  196. ly_add_target(
  197. NAME ${gem_name}.Editor.Tests ${PAL_TRAIT_TEST_TARGET_TYPE}
  198. NAMESPACE Gem
  199. OUTPUT_NAME ${gem_name}.Editor.Tests.Gem
  200. FILES_CMAKE
  201. ${physx_module_files}
  202. ../Code/physx_editor_tests_files.cmake
  203. INCLUDE_DIRECTORIES
  204. PRIVATE
  205. ../Code/Tests
  206. ../Code/Source
  207. ../Code/.
  208. BUILD_DEPENDENCIES
  209. PRIVATE
  210. 3rdParty::Qt::Test
  211. AZ::AzTestShared
  212. AZ::AzTest
  213. AZ::AzToolsFrameworkTestCommon
  214. AZ::AzManipulatorTestFramework.Static
  215. Gem::${gem_name}.Static
  216. Gem::PhysX.Mocks
  217. Gem::${gem_name}.Editor.Static
  218. RUNTIME_DEPENDENCIES
  219. Gem::LmbrCentral.Editor
  220. )
  221. ly_add_googletest(
  222. NAME Gem::${gem_name}.Editor.Tests
  223. LABELS REQUIRES_tiaf
  224. )
  225. endif()
  226. endif()