CMakeLists.txt 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410
  1. cmake_minimum_required (VERSION 3.9.0)
  2. project (Banshee)
  3. # Version
  4. set (BS_VERSION_MAJOR 0)
  5. set (BS_VERSION_MINOR 4)
  6. set (BS_PREBUILT_DEPENDENCIES_VERSION 20)
  7. set (BS_SRC_DEPENDENCIES_VERSION 15)
  8. set (BS_BUILTIN_ASSETS_VERSION 3)
  9. # Configuration types
  10. if(CMAKE_CONFIGURATION_TYPES) # Multiconfig generator?
  11. set(CMAKE_CONFIGURATION_TYPES "Debug;OptimizedDebug;Release;" CACHE INTERNAL "")
  12. else()
  13. if(NOT CMAKE_BUILD_TYPE)
  14. message("Defaulting to release build.")
  15. set(CMAKE_BUILD_TYPE Release CACHE INTERNAL "")
  16. endif()
  17. set_property(CACHE CMAKE_BUILD_TYPE PROPERTY HELPSTRING "Choose the type of build")
  18. # Set the valid options for cmake-gui drop-down list
  19. set_property(CACHE CMAKE_BUILD_TYPE PROPERTY STRINGS Debug OptimizedDebug Release)
  20. endif()
  21. if(${CMAKE_SIZEOF_VOID_P} EQUAL 8)
  22. set(BS_64BIT true)
  23. endif()
  24. if(UNIX AND NOT APPLE)
  25. set(LINUX TRUE)
  26. endif()
  27. # Options
  28. set(AUDIO_MODULE "OpenAudio" CACHE STRING "Audio backend to use.")
  29. set_property(CACHE AUDIO_MODULE PROPERTY STRINGS OpenAudio FMOD)
  30. set(PHYSICS_MODULE "PhysX" CACHE STRING "Physics backend to use.")
  31. set_property(CACHE PHYSICS_MODULE PROPERTY STRINGS PhysX)
  32. if(WIN32)
  33. set(RENDER_API_MODULE "DirectX 11" CACHE STRING "Render API to use.")
  34. set_property(CACHE RENDER_API_MODULE PROPERTY STRINGS "DirectX 11" "OpenGL" "Vulkan")
  35. else()
  36. set(RENDER_API_MODULE "OpenGL" CACHE STRING "Render API to use.")
  37. set_property(CACHE RENDER_API_MODULE PROPERTY STRINGS "OpenGL" "Vulkan")
  38. endif()
  39. set(RENDERER_MODULE "RenderBeast" CACHE STRING "Renderer backend to use.")
  40. set_property(CACHE RENDERER_MODULE PROPERTY STRINGS RenderBeast)
  41. set(BUILD_SCOPE "Runtime" CACHE STRING "Determines which parts of Banshee to build. Pick Framework to build only the low-level C++ framework. Pick Runtime to build everything, including the framework, scripting API and the editor.")
  42. set_property(CACHE BUILD_SCOPE PROPERTY STRINGS "Runtime" "Framework")
  43. set(INCLUDE_ALL_IN_WORKFLOW OFF CACHE BOOL "If true, all libraries (even those not selected) will be included in the generated workflow (e.g. Visual Studio solution). This is useful when working on engine internals with a need for easy access to all parts of it. Only relevant for workflow generators like Visual Studio or XCode.")
  44. set(GENERATE_SCRIPT_BINDINGS ON CACHE BOOL "If true, script binding files will be generated. Script bindings are required for the project to build properly, however they take a while to generate. If you are sure the script bindings are up to date, you can turn off their generation (temporarily) to speed up the build.")
  45. set(BUILD_TESTS OFF CACHE BOOL "If true, build targets for running unit tests will be included in the output.")
  46. if(BUILD_SCOPE MATCHES "Runtime")
  47. set(BUILD_EDITOR ON)
  48. else()
  49. set(BUILD_EDITOR OFF)
  50. endif()
  51. if(CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT)
  52. if(LINUX)
  53. set(CMAKE_INSTALL_PREFIX /usr/local/opt/bsf CACHE PATH "..." FORCE)
  54. endif()
  55. endif()
  56. include(CMake/Common.cmake)
  57. # Ensure dependencies are up to date
  58. ## Check prebuilt dependencies that are downloaded in a .zip
  59. if(NOT APPLE)
  60. set(BUILTIN_DEP_VERSION_FILE ${PROJECT_SOURCE_DIR}/../Dependencies/.version)
  61. if(NOT EXISTS ${BUILTIN_DEP_VERSION_FILE})
  62. message(STATUS "Binary dependencies are missing. Downloading package...")
  63. update_binary_deps(${BS_PREBUILT_DEPENDENCIES_VERSION})
  64. else()
  65. file (STRINGS ${BUILTIN_DEP_VERSION_FILE} CURRENT_BUILTIN_DEP_VERSION)
  66. if(${BS_PREBUILT_DEPENDENCIES_VERSION} GREATER ${CURRENT_BUILTIN_DEP_VERSION})
  67. message(STATUS "Your precomiled dependencies package is out of date. Downloading latest package...")
  68. update_binary_deps(${BS_PREBUILT_DEPENDENCIES_VERSION})
  69. endif()
  70. endif()
  71. endif()
  72. ## Check dependencies built from source
  73. if(WIN32)
  74. set(SOURCE_DEP_BUILD_DIR ${PROJECT_SOURCE_DIR}/../Dependencies/Build)
  75. set(SOURCE_DEP_BUILD_VERSION_FILE ${SOURCE_DEP_BUILD_DIR}/.version)
  76. if(EXISTS ${SOURCE_DEP_BUILD_VERSION_FILE})
  77. file (STRINGS ${SOURCE_DEP_BUILD_VERSION_FILE} CURRENT_SOURCE_DEP_VERSION)
  78. if(${BS_SRC_DEPENDENCIES_VERSION} GREATER ${CURRENT_SOURCE_DEP_VERSION})
  79. message(STATUS "Built dependencies are out of date, forcing recompile.")
  80. execute_process(COMMAND "${CMAKE_COMMAND}"
  81. -E remove_directory "${SOURCE_DEP_BUILD_DIR}")
  82. endif()
  83. else()
  84. message(STATUS "Built dependencies are out of date, forcing recompile.")
  85. execute_process(COMMAND "${CMAKE_COMMAND}"
  86. -E remove_directory "${SOURCE_DEP_BUILD_DIR}")
  87. endif()
  88. endif()
  89. ## Check data dependencies
  90. set(BUILTIN_ASSETS_VERSION_FILE ${PROJECT_SOURCE_DIR}/../Data/.version)
  91. if(NOT EXISTS ${BUILTIN_ASSETS_VERSION_FILE})
  92. message(STATUS "Builtin assets are missing. Downloading package...")
  93. update_builtin_assets(${BS_BUILTIN_ASSETS_VERSION})
  94. else()
  95. file (STRINGS ${BUILTIN_ASSETS_VERSION_FILE} CURRENT_BUILTIN_ASSET_VERSION)
  96. if(${BS_BUILTIN_ASSETS_VERSION} GREATER ${CURRENT_BUILTIN_ASSET_VERSION})
  97. message(STATUS "Your builtin asset package is out of date. Downloading latest package...")
  98. update_builtin_assets(${BS_BUILTIN_ASSETS_VERSION})
  99. endif()
  100. endif()
  101. # Includes required for various find_package calls
  102. set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_SOURCE_DIR}/CMake/Modules/")
  103. # Global compile & linker flags
  104. ## Compiler-agnostic settings
  105. ### Target at least C++14
  106. set(CMAKE_CXX_STANDARD 14)
  107. ## Compiler-specific settings
  108. if(MSVC)
  109. # Linker
  110. set(BS_LINKER_FLAGS_COMMON "/DYNAMICBASE /NOLOGO")
  111. set(BS_LINKER_FLAGS_DEBUG "${BS_LINKER_FLAGS_COMMON} /DEBUG")
  112. set(BS_LINKER_FLAGS_OPTIMIZEDDEBUG "${BS_LINKER_FLAGS_COMMON} /LTCG:incremental /INCREMENTAL:NO /OPT:REF /DEBUG")
  113. set(BS_LINKER_FLAGS_RELEASE "${BS_LINKER_FLAGS_COMMON} /LTCG /INCREMENTAL:NO /OPT:REF")
  114. if(BS_64BIT)
  115. set(BS_LINKER_FLAGS_OPTIMIZEDDEBUG "${BS_LINKER_FLAGS_OPTIMIZEDDEBUG} /OPT:ICF")
  116. set(BS_LINKER_FLAGS_RELEASE "${BS_LINKER_FLAGS_RELEASE} /OPT:ICF")
  117. endif()
  118. set(CMAKE_SHARED_LINKER_FLAGS_DEBUG "/DLL ${BS_LINKER_FLAGS_DEBUG}")
  119. set(CMAKE_MODULE_LINKER_FLAGS_DEBUG "/DLL ${BS_LINKER_FLAGS_DEBUG}")
  120. set(CMAKE_EXE_LINKER_FLAGS_DEBUG ${BS_LINKER_FLAGS_DEBUG})
  121. set(CMAKE_SHARED_LINKER_FLAGS_OPTIMIZEDDEBUG "/DLL ${BS_LINKER_FLAGS_OPTIMIZEDDEBUG}")
  122. set(CMAKE_MODULE_LINKER_FLAGS_OPTIMIZEDDEBUG "/DLL ${BS_LINKER_FLAGS_OPTIMIZEDDEBUG}")
  123. set(CMAKE_EXE_LINKER_FLAGS_OPTIMIZEDDEBUG ${BS_LINKER_FLAGS_OPTIMIZEDDEBUG})
  124. set(CMAKE_SHARED_LINKER_FLAGS_RELEASE "/DLL ${BS_LINKER_FLAGS_RELEASE}")
  125. set(CMAKE_MODULE_LINKER_FLAGS_RELEASE "/DLL ${BS_LINKER_FLAGS_RELEASE}")
  126. set(CMAKE_EXE_LINKER_FLAGS_RELEASE ${BS_LINKER_FLAGS_RELEASE})
  127. # Compiler
  128. set(BS_COMPILER_FLAGS_COMMON "/GS- /W3 /GR- /WX- /MP /permissive- /nologo /bigobj /wd\"4577\" /wd\"4530\"")
  129. set(CMAKE_CXX_FLAGS "/DWIN32 /D_WINDOWS")
  130. set(CMAKE_CXX_FLAGS_DEBUG "${BS_COMPILER_FLAGS_COMMON} /Od /RTC1 /MDd -DDEBUG")
  131. if(BS_64BIT) # Debug edit and continue for 64-bit
  132. set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} /ZI")
  133. else() # Normal debug for 32-bit
  134. set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} /Zi")
  135. endif()
  136. set(CMAKE_CXX_FLAGS_OPTIMIZEDDEBUG "${BS_COMPILER_FLAGS_COMMON} /GL /Gy /Zi /O2 /Oi /MD -DDEBUG")
  137. set(CMAKE_CXX_FLAGS_RELEASE "${BS_COMPILER_FLAGS_COMMON} /GL /Gy /O2 /Oi /MD -DNDEBUG")
  138. # Global defines
  139. #add_definitions(-D_HAS_EXCEPTIONS=0)
  140. elseif(CMAKE_CXX_COMPILER_ID MATCHES "Clang" OR CMAKE_CXX_COMPILER_ID MATCHES "AppleClang")
  141. # Note: Optionally add -ffunction-sections, -fdata-sections, but with linker option --gc-sections
  142. # TODO: Use link-time optimization -flto. Might require non-default linker.
  143. set(BS_COMPILER_FLAGS_COMMON "-Wall -fPIC -fno-exceptions -fno-strict-aliasing -fno-rtti -fno-ms-compatibility")
  144. if(LINUX)
  145. set(BS_COMPILER_FLAGS_COMMON "${BS_COMPILER_FLAGS_COMMON} -Wl,-rpath=$ORIGIN")
  146. elseif(APPLE)
  147. set(BS_COMPILER_FLAGS_COMMON "${BS_COMPILER_FLAGS_COMMON} -fobjc-arc -Wno-c++1z-extensions")
  148. endif()
  149. set(CMAKE_CXX_FLAGS_DEBUG "${BS_COMPILER_FLAGS_COMMON} -g -O0 -DDEBUG")
  150. set(CMAKE_CXX_FLAGS_OPTIMIZEDDEBUG "${BS_COMPILER_FLAGS_COMMON} -gline-tables-only -O2 -DDEBUG -Wno-unused-variable")
  151. set(CMAKE_CXX_FLAGS_RELEASE "${BS_COMPILER_FLAGS_COMMON} -g0 -O2 -DNDEBUG -Wno-unused-variable")
  152. set(CMAKE_SHARED_LINKER_FLAGS_RELEASE -s)
  153. set(CMAKE_MODULE_LINKER_FLAGS_RELEASE -s)
  154. if(CMAKE_CXX_COMPILER_ID STREQUAL "Clang")
  155. set(CMAKE_EXE_LINKER_FLAGS_DEBUG "-no-pie")
  156. set(CMAKE_EXE_LINKER_FLAGS_OPTIMIZEDDEBUG "-s -no-pie")
  157. set(CMAKE_EXE_LINKER_FLAGS_RELEASE "-s -no-pie")
  158. endif()
  159. elseif("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU")
  160. # TODO: Use link-time optimization -flto. Might require non-default linker.
  161. set(BS_COMPILER_FLAGS_COMMON "-Wall -fPIC -fno-exceptions -fno-strict-aliasing -fno-rtti")
  162. if(LINUX)
  163. set(BS_COMPILER_FLAGS_COMMON "${BS_COMPILER_FLAGS_COMMON} -Wl,-rpath=$ORIGIN")
  164. endif()
  165. set(CMAKE_CXX_FLAGS_DEBUG "${BS_COMPILER_FLAGS_COMMON} -g -O0 -DDEBUG")
  166. set(CMAKE_CXX_FLAGS_OPTIMIZEDDEBUG "${BS_COMPILER_FLAGS_COMMON} -gline-tables-only -O2 -DDEBUG -Wno-unused-variable")
  167. set(CMAKE_CXX_FLAGS_RELEASE "${BS_COMPILER_FLAGS_COMMON} -g0 -O2 -DNDEBUG -Wno-unused-variable")
  168. set(CMAKE_SHARED_LINKER_FLAGS_RELEASE -s)
  169. set(CMAKE_MODULE_LINKER_FLAGS_RELEASE -s)
  170. set(CMAKE_EXE_LINKER_FLAGS_DEBUG "-no-pie")
  171. set(CMAKE_EXE_LINKER_FLAGS_OPTIMIZEDDEBUG "-s -no-pie")
  172. set(CMAKE_EXE_LINKER_FLAGS_RELEASE "-s -no-pie")
  173. else()
  174. # TODO_OTHER_COMPILERS_GO_HERE
  175. endif()
  176. set(CMAKE_XCODE_ATTRIBUTE_CLANG_ENABLE_OBJC_ARC "YES")
  177. set(CMAKE_FIND_FRAMEWORK "LAST")
  178. # Output
  179. if(BS_64BIT)
  180. set(BS_OUTPUT_DIR_PREFIX x64)
  181. else()
  182. set(BS_OUTPUT_DIR_PREFIX x86)
  183. endif()
  184. set(BS_BINARY_OUTPUT_DIR ${PROJECT_SOURCE_DIR}/../bin/${BS_OUTPUT_DIR_PREFIX})
  185. set(BS_LIBRARY_OUTPUT_DIR ${PROJECT_SOURCE_DIR}/../lib/${BS_OUTPUT_DIR_PREFIX})
  186. set(CMAKE_RUNTIME_OUTPUT_DIRECTORY_DEBUG ${BS_BINARY_OUTPUT_DIR}/Debug)
  187. set(CMAKE_RUNTIME_OUTPUT_DIRECTORY_OPTIMIZEDDEBUG ${BS_BINARY_OUTPUT_DIR}/OptimizedDebug)
  188. set(CMAKE_RUNTIME_OUTPUT_DIRECTORY_RELEASE ${BS_BINARY_OUTPUT_DIR}/Release)
  189. set(CMAKE_LIBRARY_OUTPUT_DIRECTORY_DEBUG ${BS_BINARY_OUTPUT_DIR}/Debug)
  190. set(CMAKE_LIBRARY_OUTPUT_DIRECTORY_OPTIMIZEDDEBUG ${BS_BINARY_OUTPUT_DIR}/OptimizedDebug)
  191. set(CMAKE_LIBRARY_OUTPUT_DIRECTORY_RELEASE ${BS_BINARY_OUTPUT_DIR}/Release)
  192. set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY_DEBUG ${BS_LIBRARY_OUTPUT_DIR}/Debug)
  193. set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY_OPTIMIZEDDEBUG ${BS_LIBRARY_OUTPUT_DIR}/OptimizedDebug)
  194. set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY_RELEASE ${BS_LIBRARY_OUTPUT_DIR}/Release)
  195. if(WIN32)
  196. set(BS_LIBRARY_EXTENSION ".lib")
  197. else()
  198. set(BS_LIBRARY_EXTENSION ".a")
  199. endif()
  200. include(CMake/FindPackageOrBuild.cmake)
  201. set_property(GLOBAL PROPERTY USE_FOLDERS TRUE)
  202. # Config file
  203. ## Note: Must happen before script binding generation
  204. ## Set names of libraries used in the config file
  205. if(RENDER_API_MODULE MATCHES "DirectX 11")
  206. set(RENDER_API_MODULE_LIB BansheeD3D11RenderAPI)
  207. elseif(RENDER_API_MODULE MATCHES "Vulkan")
  208. set(RENDER_API_MODULE_LIB BansheeVulkanRenderAPI)
  209. else()
  210. set(RENDER_API_MODULE_LIB BansheeGLRenderAPI)
  211. endif()
  212. if(AUDIO_MODULE MATCHES "FMOD")
  213. set(AUDIO_MODULE_LIB BansheeFMOD)
  214. else() # Default to OpenAudio
  215. set(AUDIO_MODULE_LIB BansheeOpenAudio)
  216. endif()
  217. set(RENDERER_MODULE_LIB RenderBeast)
  218. set(PHYSICS_MODULE_LIB BansheePhysX)
  219. if(BUILD_EDITOR)
  220. set(BS_EDITOR_BUILD 1)
  221. else()
  222. set(BS_EDITOR_BUILD 0)
  223. endif()
  224. ## Generate config files)
  225. configure_file("${PROJECT_SOURCE_DIR}/CMake/BsEngineConfig.h.in" "${PROJECT_SOURCE_DIR}/BansheeEngine/BsEngineConfig.h")
  226. configure_file("${PROJECT_SOURCE_DIR}/CMake/BsFrameworkConfig.h.in" "${PROJECT_SOURCE_DIR}/BansheeUtility/BsFrameworkConfig.h")
  227. # Code generation for script bindings
  228. include(CMake/GenerateScriptBindings.cmake)
  229. # Sub-directories
  230. ## Layers
  231. add_subdirectory(BansheeUtility)
  232. add_subdirectory(BansheeCore)
  233. add_subdirectory(BansheeEngine)
  234. if(BUILD_EDITOR OR MSVC)
  235. add_subdirectory(BansheeEditor)
  236. endif()
  237. ## Plugins
  238. ### If using MSVC include all plugins in the solution (which ones actually build is controlled by dependencies)
  239. if(INCLUDE_ALL_IN_WORKFLOW AND MSVC)
  240. add_subdirectory(BansheeD3D11RenderAPI)
  241. add_subdirectory(BansheeGLRenderAPI)
  242. add_subdirectory(BansheeVulkanRenderAPI)
  243. add_subdirectory(BansheeFMOD)
  244. add_subdirectory(BansheeOpenAudio)
  245. else() # Otherwise include only chosen ones
  246. if(RENDER_API_MODULE MATCHES "DirectX 11")
  247. add_subdirectory(BansheeD3D11RenderAPI)
  248. elseif(RENDER_API_MODULE MATCHES "Vulkan")
  249. add_subdirectory(BansheeVulkanRenderAPI)
  250. else()
  251. add_subdirectory(BansheeGLRenderAPI)
  252. endif()
  253. if(AUDIO_MODULE MATCHES "FMOD")
  254. add_subdirectory(BansheeFMOD)
  255. else() # Default to OpenAudio
  256. add_subdirectory(BansheeOpenAudio)
  257. endif()
  258. endif()
  259. add_subdirectory(RenderBeast)
  260. add_subdirectory(BansheePhysX)
  261. add_subdirectory(BansheeFBXImporter)
  262. add_subdirectory(BansheeFontImporter)
  263. add_subdirectory(BansheeFreeImgImporter)
  264. add_subdirectory(BansheeMono)
  265. add_subdirectory(BansheeSL)
  266. ## Script interop
  267. add_subdirectory(SBansheeEngine)
  268. if(BUILD_EDITOR OR (INCLUDE_ALL_IN_WORKFLOW AND MSVC))
  269. add_subdirectory(SBansheeEditor)
  270. endif()
  271. ## Executables
  272. add_subdirectory(Examples/ExampleGettingStarted)
  273. add_subdirectory(Examples/ExampleLowLevelRendering)
  274. add_subdirectory(Examples/ExamplePhysicallyBasedShading)
  275. if(BUILD_EDITOR OR (INCLUDE_ALL_IN_WORKFLOW AND MSVC))
  276. add_subdirectory(BansheeEditorExec)
  277. add_subdirectory(Game)
  278. endif()
  279. ## Local experimental projects (not part of main repository)
  280. add_subdirectory_optional(Experimental/PBS)
  281. add_subdirectory_optional(Experimental/Shadows)
  282. ## Managed projects
  283. if(BUILD_EDITOR)
  284. set(CS_ENGINE_PROJ ${PROJECT_SOURCE_DIR}/MBansheeEngine/MBansheeEngine.csproj)
  285. set(CS_EDITOR_PROJ ${PROJECT_SOURCE_DIR}/MBansheeEditor/MBansheeEditor.csproj)
  286. if(MSVC)
  287. include_external_msproject(MBansheeEngine ${CS_ENGINE_PROJ})
  288. include_external_msproject(MBansheeEditor ${CS_EDITOR_PROJ})
  289. set_target_properties(MBansheeEngine PROPERTIES
  290. MAP_IMPORTED_CONFIG_RELEASE OptimizedDebug
  291. )
  292. set_target_properties(MBansheeEditor PROPERTIES
  293. MAP_IMPORTED_CONFIG_RELEASE OptimizedDebug
  294. )
  295. set_property(TARGET MBansheeEngine PROPERTY FOLDER Script)
  296. set_property(TARGET MBansheeEditor PROPERTY FOLDER Script)
  297. add_dependencies(BansheeEditorExec MBansheeEngine MBansheeEditor)
  298. add_dependencies(Game MBansheeEngine)
  299. set_property(DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} PROPERTY VS_STARTUP_PROJECT BansheeEditorExec)
  300. else()
  301. find_package(mcs)
  302. if("${CMAKE_BUILD_TYPE}" STREQUAL "Debug")
  303. set(CS_PROJ_CONFIG Debug)
  304. else()
  305. set(CS_PROJ_CONFIG Release)
  306. endif()
  307. add_custom_target(BuildManaged
  308. COMMAND xbuild /p:Configuration=${CS_PROJ_CONFIG} ${CS_EDITOR_PROJ}
  309. COMMENT "Building managed assemblies")
  310. add_dependencies(BansheeEditorExec BuildManaged)
  311. add_dependencies(Game BuildManaged)
  312. endif()
  313. endif()
  314. ## Tests
  315. if(BUILD_TESTS)
  316. enable_testing()
  317. add_executable(UtilityTest
  318. BansheeUtility/Private/UnitTests/BsUtilityTest.cpp
  319. BansheeUtility/Private/UnitTests/BsUtilityTestSuite.cpp
  320. BansheeUtility/Private/UnitTests/BsFileSystemTestSuite.cpp)
  321. target_link_libraries(UtilityTest BansheeUtility)
  322. target_include_directories(UtilityTest PRIVATE "BansheeUtility")
  323. set_property(TARGET UtilityTest PROPERTY FOLDER Tests)
  324. add_test(NAME FrameworkTests COMMAND $<TARGET_FILE:UtilityTest>)
  325. endif()
  326. ## Install
  327. install(
  328. DIRECTORY ../Data/Engine
  329. DESTINATION bin/Data
  330. )