CMakeLists.txt 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353
  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. set(SCRIPT_CANVAS_COMMON_DEFINES
  9. SCRIPTCANVAS
  10. ENABLE_EXTENDED_MATH_SUPPORT=0
  11. )
  12. set(SCRIPT_CANVAS_EXECUTION_NOTIFICATION_DEFINES
  13. $<$<NOT:$<CONFIG:Release>>:SC_EXECUTION_TRACE_ENABLED> # this is REQUIRED for debugging/execution logging
  14. )
  15. # note that the above define controls whether the debug static library has member variables in its classes, in its API,
  16. # and thus must be transmitted to all users of the static library or else the sizeof the structs will mismatch.
  17. # It must thus be an INTERFACE or PUBLIC compile definition
  18. set(SCRIPT_CANVAS_DEBUG_DEBUGGER_DEFINES
  19. $<$<NOT:$<CONFIG:Release>>:
  20. # SCRIPT_CANVAS_DEBUGGER_IS_ALWAYS_OBSERVING # for aggressive logging that ignores filtering (probably only for debug/development purposes)
  21. # SCRIPT_CANVAS_DEBUGGER_CONNECT_TO_ANYTHING_BUT_SELF # connect to the first target that is not self
  22. # SCRIPT_CANVAS_DEBUG_DEBUGGER # to debug the ${gem_name} Debugging systems themselves
  23. >
  24. )
  25. ly_add_target(
  26. NAME ${gem_name}Debugger STATIC
  27. NAMESPACE Gem
  28. FILES_CMAKE
  29. scriptcanvasgem_debugger_files.cmake
  30. INCLUDE_DIRECTORIES
  31. PRIVATE
  32. Include
  33. Include/ScriptCanvas
  34. COMPILE_DEFINITIONS
  35. PUBLIC
  36. SCRIPTCANVAS_ERRORS_ENABLED
  37. ${SCRIPT_CANVAS_EXECUTION_NOTIFICATION_DEFINES}
  38. PRIVATE
  39. ${SCRIPT_CANVAS_COMMON_DEFINES}
  40. ${SCRIPT_CANVAS_DEBUG_DEBUGGER_DEFINES}
  41. BUILD_DEPENDENCIES
  42. PRIVATE
  43. AZ::AzCore
  44. AZ::AzFramework
  45. Gem::ScriptEvents.Static
  46. )
  47. # the script canvas debugger is an optional gem module
  48. # To Enable it, associate it with a project
  49. ly_create_alias(NAME ${gem_name}Debugger.Builders NAMESPACE Gem TARGETS Gem::${gem_name}Debugger)
  50. ly_create_alias(NAME ${gem_name}Debugger.Tools NAMESPACE Gem TARGETS Gem::${gem_name}Debugger)
  51. ly_create_alias(NAME ${gem_name}Debugger.Clients NAMESPACE Gem TARGETS Gem::${gem_name}Debugger)
  52. ly_create_alias(NAME ${gem_name}Debugger.Servers NAMESPACE Gem TARGETS Gem::${gem_name}Debugger)
  53. ly_create_alias(NAME ${gem_name}Debugger.Unified NAMESPACE Gem TARGETS Gem::${gem_name}Debugger)
  54. ly_add_target(
  55. NAME ${gem_name}.Extensions STATIC
  56. NAMESPACE Gem
  57. FILES_CMAKE
  58. scriptcanvasgem_extensions_files.cmake
  59. INCLUDE_DIRECTORIES
  60. PUBLIC
  61. Include
  62. BUILD_DEPENDENCIES
  63. PUBLIC
  64. AZ::AzCore
  65. AZ::AzFramework
  66. )
  67. ly_add_target(
  68. NAME ${gem_name}.API STATIC
  69. NAMESPACE Gem
  70. FILES_CMAKE
  71. scriptcanvasgem_autogen_files.cmake
  72. scriptcanvasgem_headers.cmake
  73. scriptcanvasgem_common_files.cmake
  74. scriptcanvasgem_runtime_asset_files.cmake
  75. INCLUDE_DIRECTORIES
  76. PUBLIC
  77. .
  78. Include
  79. Include/ScriptCanvas
  80. ${SCRIPT_CANVAS_AUTOGEN_BUILD_DIR}
  81. COMPILE_DEFINITIONS
  82. PUBLIC
  83. SCRIPTCANVAS_ERRORS_ENABLED
  84. ${SCRIPT_CANVAS_EXECUTION_NOTIFICATION_DEFINES}
  85. PRIVATE
  86. ${SCRIPT_CANVAS_COMMON_DEFINES}
  87. ${SCRIPT_CANVAS_DEBUG_DEBUGGER_DEFINES}
  88. BUILD_DEPENDENCIES
  89. PUBLIC
  90. Gem::ScriptEvents.Static
  91. Gem::ExpressionEvaluation.Static
  92. Gem::${gem_name}.Extensions
  93. PRIVATE
  94. AZ::AzCore
  95. AZ::AzFramework
  96. Gem::${gem_name}Debugger
  97. AUTOGEN_RULES
  98. *.ScriptCanvasGrammar.xml,ScriptCanvasGrammar_Header.jinja,$path/$fileprefix.generated.h
  99. *.ScriptCanvasGrammar.xml,ScriptCanvasGrammar_Source.jinja,$path/$fileprefix.generated.cpp
  100. *.ScriptCanvasNodeable.xml,ScriptCanvasNodeable_Header.jinja,$path/$fileprefix.generated.h
  101. *.ScriptCanvasNodeable.xml,ScriptCanvasNodeable_Source.jinja,$path/$fileprefix.generated.cpp
  102. *.ScriptCanvasFunction.xml,ScriptCanvasFunction_Header.jinja,$path/$fileprefix.generated.h
  103. *.ScriptCanvasFunction.xml,ScriptCanvasFunction_Source.jinja,$path/$fileprefix.generated.cpp
  104. RUNTIME_DEPENDENCIES
  105. Gem::${gem_name}Debugger
  106. )
  107. ly_add_target(
  108. NAME ${gem_name} ${PAL_TRAIT_MONOLITHIC_DRIVEN_MODULE_TYPE}
  109. NAMESPACE Gem
  110. FILES_CMAKE
  111. scriptcanvasgem_game_files.cmake
  112. INCLUDE_DIRECTORIES
  113. PRIVATE
  114. .
  115. Include/${gem_name}
  116. COMPILE_DEFINITIONS
  117. PUBLIC
  118. SCRIPTCANVAS_ERRORS_ENABLED
  119. SCRIPTCANVAS_EDITOR
  120. PRIVATE
  121. ${SCRIPT_CANVAS_COMMON_DEFINES}
  122. BUILD_DEPENDENCIES
  123. PUBLIC
  124. Gem::${gem_name}.API
  125. PRIVATE
  126. AZ::AzCore
  127. AZ::AzFramework
  128. Gem::ScriptEvents.Static
  129. RUNTIME_DEPENDENCIES
  130. Gem::ScriptEvents
  131. Gem::ExpressionEvaluation
  132. )
  133. # Inject the gem name into the Module source file
  134. ly_add_source_properties(
  135. SOURCES
  136. Source/ScriptCanvasGem.cpp
  137. PROPERTY COMPILE_DEFINITIONS
  138. VALUES
  139. O3DE_GEM_NAME=${gem_name}
  140. O3DE_GEM_VERSION=${gem_version})
  141. # the "${gem_name}" target is active in Clients and Servers
  142. ly_create_alias(NAME ${gem_name}.Clients NAMESPACE Gem TARGETS Gem::${gem_name})
  143. ly_create_alias(NAME ${gem_name}.Servers NAMESPACE Gem TARGETS Gem::${gem_name})
  144. ly_create_alias(NAME ${gem_name}.Unified NAMESPACE Gem TARGETS Gem::${gem_name})
  145. if(PAL_TRAIT_BUILD_HOST_TOOLS)
  146. ly_add_target(
  147. NAME ${gem_name}.Editor.Static STATIC
  148. NAMESPACE Gem
  149. AUTOMOC
  150. AUTOUIC
  151. AUTORCC
  152. FILES_CMAKE
  153. scriptcanvasgem_editor_files.cmake
  154. scriptcanvasgem_editor_asset_files.cmake
  155. scriptcanvasgem_editor_builder_files.cmake
  156. scriptcanvasgem_editor_tools_files.cmake
  157. scriptcanvasgem_game_files.cmake
  158. COMPILE_DEFINITIONS
  159. PUBLIC
  160. SCRIPTCANVAS_ERRORS_ENABLED
  161. PRIVATE
  162. ${SCRIPT_CANVAS_COMMON_DEFINES}
  163. INCLUDE_DIRECTORIES
  164. PUBLIC
  165. Editor/Include
  166. PRIVATE
  167. .
  168. Editor
  169. Tools
  170. ${SCRIPT_CANVAS_AUTOGEN_BUILD_DIR}
  171. BUILD_DEPENDENCIES
  172. PUBLIC
  173. Legacy::CryCommon
  174. AZ::AzCore
  175. AZ::AssetBuilderSDK
  176. ${additional_dependencies}
  177. Gem::${gem_name}.API
  178. Gem::ScriptEvents.Static
  179. Gem::GraphCanvasWidgets
  180. Gem::ExpressionEvaluation.Static
  181. PRIVATE
  182. Legacy::EditorCore
  183. Gem::AtomToolsFramework.Static
  184. RUNTIME_DEPENDENCIES
  185. Gem::${gem_name}
  186. )
  187. ly_add_target(
  188. NAME ${gem_name}.Editor GEM_MODULE
  189. NAMESPACE Gem
  190. FILES_CMAKE
  191. scriptcanvasgem_editor_shared_files.cmake
  192. COMPILE_DEFINITIONS
  193. PUBLIC
  194. SCRIPTCANVAS_ERRORS_ENABLED
  195. PRIVATE
  196. SCRIPTCANVAS_EDITOR
  197. ${SCRIPT_CANVAS_COMMON_DEFINES}
  198. INCLUDE_DIRECTORIES
  199. PUBLIC
  200. Editor/Include
  201. PRIVATE
  202. .
  203. Editor
  204. BUILD_DEPENDENCIES
  205. PRIVATE
  206. AZ::AzToolsFramework
  207. PUBLIC
  208. Gem::${gem_name}.Editor.Static
  209. RUNTIME_DEPENDENCIES
  210. 3rdParty::Qt::Core
  211. 3rdParty::Qt::Gui
  212. 3rdParty::Qt::Widgets
  213. Legacy::EditorCore
  214. AZ::AzQtComponents
  215. Gem::GraphCanvas.Editor
  216. Gem::ScriptEvents.Editor
  217. Gem::ExpressionEvaluation
  218. )
  219. o3de_pal_dir(pal_source_dir ${CMAKE_CURRENT_LIST_DIR}/Application/Platform/${PAL_PLATFORM_NAME} "${gem_restricted_path}" "${gem_path}" "${gem_parent_relative_path}")
  220. ly_add_target(
  221. NAME ${gem_name}Application APPLICATION
  222. NAMESPACE Gem
  223. AUTORCC
  224. FILES_CMAKE
  225. scriptcanvasgem_application_files.cmake
  226. ${pal_source_dir}/platform_${PAL_PLATFORM_NAME_LOWERCASE}_files.cmake
  227. COMPILE_DEFINITIONS
  228. PUBLIC
  229. SCRIPTCANVAS_ERRORS_ENABLED
  230. PRIVATE
  231. SCRIPTCANVAS_EDITOR
  232. ${SCRIPT_CANVAS_COMMON_DEFINES}
  233. INCLUDE_DIRECTORIES
  234. PRIVATE
  235. Application
  236. Editor
  237. BUILD_DEPENDENCIES
  238. PRIVATE
  239. AZ::AzCore
  240. AZ::AzToolsFramework
  241. AZ::AzQtComponents
  242. Legacy::EditorCore
  243. Gem::${gem_name}.Editor
  244. Gem::${gem_name}.Editor.Static
  245. Gem::AtomToolsFramework.Static
  246. RUNTIME_DEPENDENCIES
  247. Gem::${gem_name}.Editor
  248. )
  249. # Inject target name for dependency resolution
  250. ly_add_source_properties(
  251. SOURCES
  252. Application/ScriptCanvasApplication.cpp
  253. PROPERTY COMPILE_DEFINITIONS
  254. VALUES
  255. LY_CMAKE_TARGET="${gem_name}Application")
  256. if(PAL_TRAIT_BUILD_EXTERNAL_CRASH_HANDLER_SUPPORTED)
  257. ly_target_link_libraries(${gem_name}Application PRIVATE AZ::ToolsCrashHandler)
  258. endif()
  259. # Inject the gem name into the Module source file
  260. ly_add_source_properties(
  261. SOURCES
  262. Editor/ScriptCanvasEditorGem.cpp
  263. PROPERTY COMPILE_DEFINITIONS
  264. VALUES
  265. O3DE_GEM_NAME=${gem_name}
  266. O3DE_GEM_VERSION=${gem_version})
  267. # the "${gem_name}.Editor" target is active in all dev tools:
  268. ly_create_alias(NAME ${gem_name}.Builders NAMESPACE Gem TARGETS Gem::${gem_name}.Editor)
  269. ly_create_alias(NAME ${gem_name}.Tools NAMESPACE Gem TARGETS Gem::${gem_name}.Editor)
  270. ly_set_gem_variant_to_load(TARGETS ${gem_name}Application VARIANTS Tools)
  271. # Add build dependency to Editor for the ScriptCanvas application since
  272. # Editor opens up the ScriptCanvas
  273. ly_add_dependencies(Editor Gem::${gem_name}Application)
  274. # Inject the project path into the ScriptCanvas VS debugger command arguments if the build system being invoked
  275. # in a project centric view
  276. if(NOT PROJECT_NAME STREQUAL "O3DE")
  277. set_property(TARGET ${gem_name}Application APPEND PROPERTY VS_DEBUGGER_COMMAND_ARGUMENTS "--project-path=\"${CMAKE_SOURCE_DIR}\"")
  278. endif()
  279. endif()
  280. ################################################################################
  281. # Tests
  282. ################################################################################
  283. if(PAL_TRAIT_BUILD_TESTS_SUPPORTED)
  284. ly_add_target(
  285. NAME ${gem_name}.Tests MODULE
  286. NAMESPACE Gem
  287. FILES_CMAKE
  288. scriptcanvasgem_tests_files.cmake
  289. INCLUDE_DIRECTORIES
  290. PRIVATE
  291. Include
  292. Tests
  293. BUILD_DEPENDENCIES
  294. PRIVATE
  295. AZ::AzCore
  296. AZ::AzCoreTestCommon
  297. AZ::AzFramework
  298. AZ::AzTest
  299. Gem::${gem_name}.API
  300. )
  301. ly_add_googletest(
  302. NAME Gem::${gem_name}.Tests
  303. )
  304. if(PAL_TRAIT_BUILD_HOST_TOOLS)
  305. ly_add_target(
  306. NAME ${gem_name}.Editor.Tests MODULE
  307. NAMESPACE Gem
  308. FILES_CMAKE
  309. scriptcanvasgem_editor_tests_files.cmake
  310. INCLUDE_DIRECTORIES
  311. PRIVATE
  312. Builder
  313. Editor
  314. BUILD_DEPENDENCIES
  315. PRIVATE
  316. AZ::AzCoreTestCommon
  317. AZ::AzTest
  318. Gem::${gem_name}.API
  319. Gem::${gem_name}.Editor.Static
  320. )
  321. ly_add_googletest(
  322. NAME Gem::${gem_name}.Editor.Tests
  323. )
  324. endif()
  325. endif()