CMakeLists.txt 21 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540
  1. project(${TORQUE_APP_NAME})
  2. # Enable ObjectiveC compilation when compiling for Apple platforms
  3. if (APPLE)
  4. enable_language(OBJC)
  5. endif (APPLE)
  6. ################# Helper Function Calls ###################
  7. forwardDef(TORQUE_OPENGL)
  8. forwardDef(TORQUE_D3D11)
  9. forwardDef(TORQUE_ADVANCED_LIGHTING)
  10. forwardDef(TORQUE_BASIC_LIGHTING)
  11. set(TORQUE_SDL ON) # we need sdl to do our platform interop
  12. forwardDef(TORQUE_SDL)
  13. if(TORQUE_TESTING)
  14. set(TORQUE_COMPILE_DEFINITIONS ${TORQUE_COMPILE_DEFINITIONS} TORQUE_TESTS_ENABLED)
  15. set(TORQUE_COMPILE_DEFINITIONS ${TORQUE_COMPILE_DEFINITIONS} "_VARIADIC_MAX=10")
  16. endif()
  17. # On Windows we disable CRT Security warnings - this comes from recommendations to use non-portable functions.
  18. if (WIN32)
  19. set(TORQUE_COMPILE_DEFINITIONS ${TORQUE_COMPILE_DEFINITIONS} _CRT_SECURE_NO_WARNINGS WIN32)
  20. endif (WIN32)
  21. if (APPLE)
  22. set(TORQUE_COMPILE_DEFINITIONS ${TORQUE_COMPILE_DEFINITIONS} __MACOSX__)
  23. elseif (UNIX)
  24. set(TORQUE_COMPILE_DEFINITIONS ${TORQUE_COMPILE_DEFINITIONS} __linux__)
  25. endif (APPLE)
  26. ################# Set Engine Linkages ###################
  27. # When on Windows, we need to link against winsock and windows codecs
  28. if (WIN32)
  29. set(TORQUE_SOURCE_FILES ${TORQUE_SOURCE_FILES} ${TORQUE_PLATFORM_WIN_SOURCES})
  30. endif (WIN32)
  31. # Linux requires X11 & freetype
  32. if (UNIX AND NOT APPLE)
  33. set(TORQUE_SOURCE_FILES ${TORQUE_SOURCE_FILES} ${TORQUE_PLATFORM_X11_SOURCES})
  34. find_package(Freetype REQUIRED)
  35. set(TORQUE_INCLUDE_DIRECTORIES ${TORQUE_INCLUDE_DIRECTORIES} ${FREETYPE_INCLUDE_DIRS})
  36. endif (UNIX AND NOT APPLE)
  37. ################# Collect Source Files ###################
  38. # Handle app
  39. torqueAddSourceDirectories("app" "app/net")
  40. # Handle console
  41. torqueAddSourceDirectories("console")
  42. torqueAddSourceDirectories("console/torquescript")
  43. set(TORQUE_INCLUDE_DIRECTORIES ${TORQUE_INCLUDE_DIRECTORIES} "ts/vhacd")
  44. # Handle Platform
  45. torqueAddSourceDirectories("platform" "platform/threads" "platform/async"
  46. "platform/input" "platform/output")
  47. torqueAddSourceDirectories("platform/nativeDialogs")
  48. # Handle T3D
  49. torqueAddSourceDirectories( "T3D" "T3D/assets" "T3D/decal" "T3D/examples" "T3D/fps" "T3D/fx"
  50. "T3D/gameBase" "T3D/gameBase/std"
  51. "T3D/lighting"
  52. "T3D/physics"
  53. # "T3D/components" "T3D/sceneComponent" "T3D/systems" "T3D/gameOBjects"
  54. "T3D/sfx" "T3D/turret" "T3D/vehicles")
  55. # Handle TS
  56. torqueAddSourceDirectories("ts" "ts/collada" "ts/assimp" "ts/loader" "ts/arch")
  57. # Handle SFX - OpenAL is handled as a module later on
  58. torqueAddSourceDirectories("sfx" "sfx/media" "sfx/null")
  59. if(TORQUE_SFX_OPENAL AND NOT TORQUE_DEDICATED)
  60. torqueAddSourceDirectories("sfx/openal")
  61. if(WIN32)
  62. torqueAddSourceDirectories("sfx/openal/win32")
  63. elseif(UNIX AND NOT APPLE)
  64. torqueAddSourceDirectories("sfx/openal/linux")
  65. elseif(APPLE)
  66. torqueAddSourceDirectories("sfx/openal/mac")
  67. endif()
  68. endif()
  69. # Handle GFX
  70. torqueAddSourceDirectories("gfx" "gfx/Null" "gfx/test" "gfx/bitmap" "gfx/bitmap/loaders" "gfx/bitmap/loaders/ies"
  71. "gfx/util" "gfx/video" "gfx/sim" )
  72. # add the stb headers
  73. set(TORQUE_INCLUDE_DIRECTORIES ${TORQUE_INCLUDE_DIRECTORIES} "gfx/bitmap/loaders/stb")
  74. if (TORQUE_OPENGL)
  75. torqueAddSourceDirectories("gfx/gl" "gfx/gl/sdl" "gfx/gl/tGL")
  76. endif (TORQUE_OPENGL)
  77. if (WIN32 AND TORQUE_D3D11)
  78. torqueAddSourceDirectories("gfx/D3D11")
  79. endif (WIN32 AND TORQUE_D3D11)
  80. # Handle core
  81. torqueAddSourceDirectories("core" "core/stream" "core/strings" "core/util"
  82. "core/util/journal" "core/util/zip" "core/util/zip/compressors")
  83. # Handle GUI
  84. torqueAddSourceDirectories("gui" "gui/buttons" "gui/containers" "gui/controls" "gui/core"
  85. "gui/game" "gui/shiny" "gui/utility" "gui/3d")
  86. # Handle postFX
  87. torqueAddSourceDirectories("postFx")
  88. # Handle Windowmanager
  89. torqueAddSourceDirectories("windowManager" "windowManager/torque" "windowManager/sdl")
  90. # Handle scene
  91. torqueAddSourceDirectories("scene" "scene/culling" "scene/zones" "scene/mixin")
  92. # Handle math
  93. torqueAddSourceDirectories("math" "math/util")
  94. # Handle persistence
  95. torqueAddSourceDirectories("persistence/taml" "persistence/taml/binary" "persistence/taml/xml")
  96. # Handle Cinterface
  97. torqueAddSourceDirectories("cinterface")
  98. # Handle util
  99. torqueAddSourceDirectories("util" "util/messaging")
  100. # Handle assets
  101. torqueAddSourceDirectories("assets")
  102. # Handle Sim
  103. torqueAddSourceDirectories("sim")
  104. # Handle module
  105. torqueAddSourceDirectories("module")
  106. # Handle forest
  107. torqueAddSourceDirectories("forest" "forest/ts")
  108. if(TORQUE_OPENGL)
  109. torqueAddSourceDirectories("forest" "forest/glsl")
  110. endif(TORQUE_OPENGL)
  111. if(TORQUE_D3D11)
  112. torqueAddSourceDirectories("forest" "forest/hlsl")
  113. endif(TORQUE_D3D11)
  114. # Handle shadergen
  115. torqueAddSourceDirectories("shaderGen")
  116. if (WIN32 AND TORQUE_D3D11)
  117. torqueAddSourceDirectories("shaderGen/HLSL")
  118. endif (WIN32 AND TORQUE_D3D11)
  119. if (TORQUE_OPENGL)
  120. torqueAddSourceDirectories("shaderGen/GLSL")
  121. endif (TORQUE_OPENGL)
  122. # Handle terrain
  123. torqueAddSourceDirectories("terrain")
  124. # Handle theora
  125. if (TORQUE_THEORA)
  126. torqueAddSourceDirectories("core/ogg")
  127. torqueAddSourceDirectories("gui/theora")
  128. endif(TORQUE_THEORA)
  129. if (WIN32 AND TORQUE_D3D11)
  130. torqueAddSourceDirectories("terrain/hlsl")
  131. endif (WIN32 AND TORQUE_D3D11)
  132. if (TORQUE_OPENGL)
  133. torqueAddSourceDirectories("terrain/glsl")
  134. endif (TORQUE_OPENGL)
  135. # Handle Materials
  136. torqueAddSourceDirectories("materials")
  137. # Handle collision
  138. torqueAddSourceDirectories("collision")
  139. # Handle lighting
  140. torqueAddSourceDirectories("lighting" "lighting/common"
  141. "lighting/shadowMap")
  142. if (TORQUE_ADVANCED_LIGHTING)
  143. torqueAddSourceDirectories("lighting/advanced")
  144. if (WIN32 AND TORQUE_D3D11)
  145. torqueAddSourceDirectories("lighting/advanced/hlsl")
  146. endif (WIN32 AND TORQUE_D3D11)
  147. if (TORQUE_OPENGL)
  148. torqueAddSourceDirectories("lighting/advanced/glsl")
  149. endif (TORQUE_OPENGL)
  150. endif (TORQUE_ADVANCED_LIGHTING)
  151. if (TORQUE_BASIC_LIGHTING)
  152. torqueAddSourceDirectories("lighting/basic" "lighting/basic/shadowMap")
  153. endif (TORQUE_BASIC_LIGHTING)
  154. # Handle environment
  155. torqueAddSourceDirectories("environment")
  156. # Handle renderInstance
  157. torqueAddSourceDirectories("renderInstance")
  158. # Handle i18n
  159. torqueAddSourceDirectories("i18n")
  160. # Begin handling platform specific stuff
  161. # Handle Platform POSIX
  162. if (UNIX)
  163. torqueAddSourceDirectories("platformPOSIX")
  164. if(NOT APPLE)
  165. if (TORQUE_CPU_X32 OR TORQUE_CPU_X64)
  166. torqueAddSourceDirectories("platformX86UNIX")
  167. endif (TORQUE_CPU_X32 OR TORQUE_CPU_X64)
  168. endif(NOT APPLE)
  169. endif (UNIX)
  170. # Handle platformMac
  171. if (APPLE)
  172. torqueAddSourceDirectories("platformMac")
  173. endif (APPLE)
  174. # Handle platformWin32
  175. if (WIN32)
  176. torqueAddSourceDirectories("platformWin32" "platformWin32/videoInfo")
  177. endif (WIN32)
  178. # Handle platformSDL
  179. torqueAddSourceDirectories("platformSDL" "platformSDL/threads")
  180. # Handle platformX11
  181. if (UNIX AND NOT APPLE)
  182. torqueAddSourceDirectories("platformX11")
  183. endif (UNIX AND NOT APPLE)
  184. if(TORQUE_TESTING)
  185. torqueAddSourceDirectories("testing")
  186. set(TORQUE_COMPILE_DEFINITIONS ${TORQUE_COMPILE_DEFINITIONS} TORQUE_SHARED SDL_MAIN_HANDLED)
  187. endif(TORQUE_TESTING)
  188. # Add the collected files to our engine group
  189. source_group(TREE "${CMAKE_SOURCE_DIR}/Engine/source" PREFIX "Engine" FILES ${TORQUE_SOURCE_FILES})
  190. file(GLOB_RECURSE TORQUE_APP_GAME_SOURCES "${TORQUE_APP_ROOT_DIRECTORY}/source/*.cpp" "${TORQUE_APP_ROOT_DIRECTORY}/source/*.h")
  191. source_group(TREE "${TORQUE_APP_ROOT_DIRECTORY}/source" PREFIX "Source Files" FILES ${TORQUE_APP_GAME_SOURCES})
  192. set(TORQUE_INCLUDE_DIRECTORIES ${TORQUE_INCLUDE_DIRECTORIES} "${TORQUE_APP_ROOT_DIRECTORY}/source")
  193. ################# Engine Module Handling ###################
  194. set(TORQUE_MODULE_PATHS "${CMAKE_SOURCE_DIR}/Tools/CMake/modules" "${TORQUE_APP_GAME_DIRECTORY}/data")
  195. if (NOT "${TORQUE_MODULE_USER_PATH}" STREQUAL "")
  196. list(APPEND TORQUE_MODULE_PATHS "${TORQUE_MODULE_USER_PATH}")
  197. endif()
  198. # Before doing module scanning, store away the engine sources - we do this so that modules
  199. # can be placed into the proper filters
  200. set(TORQUE_SOURCE_FILES_TEMPORARY ${TORQUE_SOURCE_FILES} ${TORQUE_APP_GAME_SOURCES})
  201. set(TORQUE_SOURCE_FILES "")
  202. foreach (TORQUE_MODULE_PATH ${TORQUE_MODULE_PATHS})
  203. # First find simple cmake scripts, mostly used for in-engine modules
  204. file(GLOB MODULE_SCRIPTS "${TORQUE_MODULE_PATH}/*.cmake")
  205. foreach (TORQUE_MODULE_SCRIPT ${MODULE_SCRIPTS})
  206. include(${TORQUE_MODULE_SCRIPT})
  207. # Add this script's collected files to our Engine group
  208. source_group(TREE "${CMAKE_SOURCE_DIR}/Engine" PREFIX "Engine" FILES ${TORQUE_SOURCE_FILES})
  209. set(TORQUE_SOURCE_FILES_TEMPORARY ${TORQUE_SOURCE_FILES_TEMPORARY} ${TORQUE_SOURCE_FILES})
  210. set(TORQUE_SOURCE_FILES "")
  211. endforeach()
  212. # Next find sub projects, these can introduce new source files
  213. SUBDIRLIST(POSSIBLE_PROJECTS "${TORQUE_MODULE_PATH}")
  214. foreach (POSSIBLE_PROJECT ${POSSIBLE_PROJECTS})
  215. # Retrieve the absolute path of this possible project
  216. get_filename_component(POSSIBLE_PROJECT_ABSOLUTEPATH "${POSSIBLE_PROJECT}"
  217. REALPATH BASE_DIR "${TORQUE_MODULE_PATH}")
  218. if (EXISTS "${POSSIBLE_PROJECT_ABSOLUTEPATH}/CMakeLists.txt")
  219. add_subdirectory("${POSSIBLE_PROJECT_ABSOLUTEPATH}" ${CMAKE_BINARY_DIR}/temp/${POSSIBLE_PROJECT} EXCLUDE_FROM_ALL)
  220. source_group(TREE "${POSSIBLE_PROJECT_ABSOLUTEPATH}" PREFIX "Modules/${POSSIBLE_PROJECT}" FILES ${TORQUE_SOURCE_FILES})
  221. set(TORQUE_SOURCE_FILES_TEMPORARY ${TORQUE_SOURCE_FILES_TEMPORARY} ${TORQUE_SOURCE_FILES})
  222. set(TORQUE_SOURCE_FILES "")
  223. elseif(NOT EXISTS "${POSSIBLE_PROJECT_ABSOLUTEPATH}/*.cmake")
  224. file(GLOB_RECURSE MODULE_SOURCE "${POSSIBLE_PROJECT_ABSOLUTEPATH}/source/*.h" "${POSSIBLE_PROJECT_ABSOLUTEPATH}/source/*.cpp")
  225. #message(STATUS "MODULE_SOURCE:${MODULE_SOURCE}")
  226. source_group(TREE "${POSSIBLE_PROJECT_ABSOLUTEPATH}" PREFIX "Modules/${POSSIBLE_PROJECT}/" FILES ${MODULE_SOURCE})
  227. set(TORQUE_SOURCE_FILES_TEMPORARY ${TORQUE_SOURCE_FILES_TEMPORARY} ${MODULE_SOURCE})
  228. endif()
  229. endforeach()
  230. endforeach()
  231. set(TORQUE_SOURCE_FILES ${TORQUE_SOURCE_FILES_TEMPORARY})
  232. ################# Library Post-build Handling ###################
  233. set(TORQUE_LIBRARY_PATHS "${CMAKE_SOURCE_DIR}/Engine/lib" "${TORQUE_APP_GAME_DIRECTORY}/data")
  234. if (NOT "${TORQUE_LIBRARY_USER_PATH}" STREQUAL "")
  235. list(APPEND TORQUE_LIBRARY_PATHS "${TORQUE_LIBRARY_USER_PATH}")
  236. endif()
  237. foreach (TORQUE_LIBRARY_PATH ${TORQUE_LIBRARY_PATHS})
  238. # First find simple cmake scripts, mostly used for in-engine libraries
  239. file(GLOB_RECURSE LIBRARY_SCRIPTS "${TORQUE_LIBRARY_PATH}/*Torque_postBuild.cmake")
  240. #message(STATUS "LIBRARY_SCRIPTS:${LIBRARY_SCRIPTS}")
  241. foreach (TORQUE_LIBRARY_SCRIPT ${LIBRARY_SCRIPTS})
  242. include(${TORQUE_LIBRARY_SCRIPT})
  243. endforeach()
  244. endforeach()
  245. ################# Dynamic File Configuration ###################
  246. # Prepare Windows RC file
  247. if (WIN32)
  248. set(APPLICATION_ICON_PATH "${CMAKE_SOURCE_DIR}/Tools/CMake/torque.ico")
  249. configure_file("${CMAKE_SOURCE_DIR}/Tools/CMake/torque-win.rc.in" "${TORQUE_APP_ROOT_DIRECTORY}/source/torque.rc")
  250. set(TORQUE_SOURCE_FILES ${TORQUE_SOURCE_FILES} "${TORQUE_APP_ROOT_DIRECTORY}/source/torque.rc")
  251. endif (WIN32)
  252. # Prepare OSX Plist
  253. if (APPLE)
  254. set(MACOSX_RESOURCES
  255. "${TORQUE_APP_GAME_DIRECTORY}/data"
  256. "${TORQUE_APP_GAME_DIRECTORY}/core"
  257. "${TORQUE_APP_GAME_DIRECTORY}/tools"
  258. "${TORQUE_APP_GAME_DIRECTORY}/main.${TORQUE_SCRIPT_EXTENSION}"
  259. "${TORQUE_APP_GAME_DIRECTORY}/${TORQUE_APP_NAME}.torsion"
  260. "${TORQUE_APP_GAME_DIRECTORY}/Template.torsion.exports")
  261. if(TORQUE_TESTING)
  262. set(MACOSX_RESOURCES ${MACOSX_RESOURCES} "${TORQUE_APP_GAME_DIRECTORY}/runTests.${TORQUE_SCRIPT_EXTENSION}")
  263. endif()
  264. set(TORQUE_SOURCE_FILES ${TORQUE_SOURCE_FILES} ${TORQUE_PLATFORM_MAC_SOURCES} ${MACOSX_RESOURCES})
  265. source_group("Resources" FILES ${MACOSX_RESOURCES})
  266. set_source_files_properties(${MACOSX_RESOURCES} PROPERTIES MACOSX_PACKAGE_LOCATION "Resources")
  267. set(EXECUTABLE_NAME "${TORQUE_APP_NAME}")
  268. configure_file("${CMAKE_SOURCE_DIR}/Tools/CMake/Info.plist.in" "${TORQUE_APP_ROOT_DIRECTORY}/source/Info.plist" COPYONLY)
  269. file( COPY "${CMAKE_SOURCE_DIR}/Tools/CMake/app_assets/apple/App.xcassets" DESTINATION "${TORQUE_APP_ROOT_DIRECTORY}/source")
  270. endif (APPLE)
  271. addDef(TORQUE_DEBUG Debug)
  272. addDef(TORQUE_RELEASE "RelWithDebInfo;Release")
  273. addDef(TORQUE_ENABLE_ASSERTS "Debug;RelWithDebInfo")
  274. addDef(TORQUE_DEBUG_GFX_MODE "RelWithDebInfo")
  275. addDef(TORQUE_OGGVORBIS)
  276. if (TORQUE_THEORA)
  277. addDef(TORQUE_OGGTHEORA)
  278. endif(TORQUE_THEORA)
  279. if(NOT TORQUE_SDL)
  280. filterOut("platform/nativeDialogs/fileDialog.cpp" )
  281. endif()
  282. if(NOT TORQUE_OPENGL)
  283. filterOut("platformSDL/sdlPlatformGL.cpp")
  284. endif()
  285. if (NOT TORQUE_NET_CURL)
  286. filterOut("app/net/httpObject.h" "app/net/httpObject.cpp")
  287. endif()
  288. ################# Executable Generation ###################
  289. if (TORQUE_DYNAMIC_LIBRARY AND NOT TORQUE_TESTING)
  290. set(TORQUE_COMPILE_DEFINITIONS ${TORQUE_COMPILE_DEFINITIONS} TORQUE_SHARED)
  291. # Build the main engine library
  292. add_library(TorqueEngine SHARED ${TORQUE_SOURCE_FILES})
  293. target_compile_definitions(TorqueEngine PUBLIC ${TORQUE_COMPILE_DEFINITIONS})
  294. target_link_libraries(TorqueEngine ${TORQUE_LINK_LIBRARIES})
  295. target_include_directories(TorqueEngine PUBLIC ${CMAKE_CURRENT_SOURCE_DIR} "${CMAKE_BINARY_DIR}/temp" ${TORQUE_INCLUDE_DIRECTORIES})
  296. set(TORQUE_SOURCE_FILES "main/main.cpp")
  297. set(TORQUE_LINK_LIBRARIES TorqueEngine)
  298. else()
  299. if(NOT TORQUE_TESTING)
  300. set(TORQUE_SOURCE_FILES "main/main.cpp" ${TORQUE_SOURCE_FILES})
  301. endif()
  302. endif (TORQUE_DYNAMIC_LIBRARY AND NOT TORQUE_TESTING)
  303. if (APPLE)
  304. add_executable(${TORQUE_APP_NAME} MACOSX_BUNDLE
  305. ${TORQUE_SOURCE_FILES})
  306. target_sources(${TORQUE_APP_NAME} PRIVATE "${TORQUE_APP_ROOT_DIRECTORY}/source/App.xcassets")
  307. set_source_files_properties( "${TORQUE_APP_ROOT_DIRECTORY}/source/App.xcassets" PROPERTIES
  308. MACOSX_PACKAGE_LOCATION Resources)
  309. set_target_properties(${TORQUE_APP_NAME} PROPERTIES
  310. MACOSX_BUNDLE true
  311. MACOSX_BUNDLE_INFO_PLIST "${TORQUE_APP_ROOT_DIRECTORY}/source/Info.plist"
  312. XCODE_ATTRIBUTE_PRODUCT_BUNDLE_IDENTIFIER "com.torque3d.${TORQUE_APP_NAME}"
  313. INSTALL_RPATH "@executable_path/../Frameworks"
  314. XCODE_ATTRIBUTE_SKIP_INSTALL NO
  315. BUILD_WITH_INSTALL_RPATH ON
  316. XCODE_ATTRIBUTE_INSTALL_PATH "/Applications"
  317. XCODE_ATTRIBUTE_ASSETCATALOG_COMPILER_APPICON_NAME "AppIcon"
  318. XCODE_ATTRIBUTE_LINKER_DISPLAYS_MANGLED_NAMES[variant=Debug] YES
  319. XCODE_ATTRIBUTE_ONLY_ACTIVE_ARCH[variant=Debug] YES
  320. XCODE_ATTRIBUTE_ENABLE_TESTABILITY[variant=Debug] YES
  321. XCODE_ATTRIBUTE_SDL_FILE_DIR[variant=Debug] parent
  322. XCODE_ATTRIBUTE_SDL_FILE_DIR[variant=RelWithDebInfo] parent
  323. XCODE_ATTRIBUTE_SDL_FILE_DIR[variant=Release] resource)
  324. elseif (WIN32)
  325. add_executable(${TORQUE_APP_NAME} WIN32 ${TORQUE_SOURCE_FILES})
  326. set(TORQUE_CXX_FLAGS_COMMON_DEFAULT "-DUNICODE -D_UNICODE -D_CRT_SECURE_NO_WARNINGS /MP /Ob2 /Oi /Ot /Oy /GT /Zi /W4 /nologo /GF /EHsc /GS- /Gy- /Qpar- /fp:precise /fp:except- /GR /Zc:wchar_t-" )
  327. if( TORQUE_CPU_X32 )
  328. set(TORQUE_CXX_FLAGS_COMMON_DEFAULT "${TORQUE_CXX_FLAGS_COMMON_DEFAULT} /arch:SSE2")
  329. endif()
  330. set(TORQUE_CXX_FLAGS_COMMON ${TORQUE_CXX_FLAGS_COMMON_DEFAULT} CACHE STRING "")
  331. mark_as_advanced(TORQUE_CXX_FLAGS_COMMON)
  332. set(TORQUE_CXX_FLAGS_EXECUTABLES "/wd4018 /wd4100 /wd4121 /wd4127 /wd4130 /wd4244 /wd4245 /wd4389 /wd4511 /wd4512 /wd4800 /wd4995" CACHE STRING "")
  333. mark_as_advanced(TORQUE_CXX_FLAGS_EXECUTABLES)
  334. set(TORQUE_CXX_FLAGS "${TORQUE_CXX_FLAGS_COMMON_DEFAULT} ${TORQUE_CXX_FLAGS_EXECUTABLES}" CACHE STRING "")
  335. mark_as_advanced(TORQUE_CXX_FLAGS)
  336. # NOTE: On Windows, /Zc:wchar_t- is necessary otherwise you get unicode errors
  337. set_target_properties(${TORQUE_APP_NAME} PROPERTIES COMPILE_FLAGS "${TORQUE_CXX_FLAGS}")
  338. if (TORQUE_DYNAMIC_LIBRARY AND NOT TORQUE_TESTING)
  339. set_target_properties(TorqueEngine PROPERTIES COMPILE_FLAGS "${TORQUE_CXX_FLAGS_COMMON_DEFAULT}")
  340. endif (TORQUE_DYNAMIC_LIBRARY AND NOT TORQUE_TESTING)
  341. else()
  342. add_executable(${TORQUE_APP_NAME} ${TORQUE_SOURCE_FILES})
  343. # NOTE: On Linux, we set the rpath to ./ so that shared objects next to the executable are used
  344. set_target_properties(${TORQUE_APP_NAME} PROPERTIES LINK_FLAGS "-Wl,-rpath,./")
  345. endif()
  346. if(MSVC)
  347. # Match projectGenerator naming for executables
  348. set(OUTPUT_CONFIG DEBUG MINSIZEREL RELWITHDEBINFO)
  349. set(OUTPUT_SUFFIX DEBUG MINSIZE OPTIMIZEDDEBUG)
  350. foreach(INDEX RANGE 2)
  351. list(GET OUTPUT_CONFIG ${INDEX} CONF)
  352. list(GET OUTPUT_SUFFIX ${INDEX} SUFFIX)
  353. set_property(TARGET ${TORQUE_APP_NAME} PROPERTY OUTPUT_NAME_${CONF} ${TORQUE_APP_NAME}_${SUFFIX})
  354. if (TORQUE_DYNAMIC_LIBRARY AND NOT TORQUE_TESTING)
  355. set_property(TARGET TorqueEngine PROPERTY ${CONF}_POSTFIX "_${SUFFIX}")
  356. set_property(TARGET TorqueEngine PROPERTY ${CONF}_OUTPUT_NAME ${TORQUE_APP_NAME})
  357. endif (TORQUE_DYNAMIC_LIBRARY AND NOT TORQUE_TESTING)
  358. endforeach()
  359. # Set Visual Studio startup project
  360. set_property(DIRECTORY ${CMAKE_SOURCE_DIR} PROPERTY VS_STARTUP_PROJECT ${TORQUE_APP_NAME})
  361. endif()
  362. set_property(GLOBAL PROPERTY USE_FOLDERS ON)
  363. foreach (TORQUE_LIBRARY ${TORQUE_LINK_LIBRARIES})
  364. set_target_properties(${TORQUE_LIBRARY} PROPERTIES
  365. FOLDER "Libraries")
  366. # remove warnings from 3rd parties.
  367. target_compile_options(${TORQUE_LIBRARY} PRIVATE "-w")
  368. endforeach()
  369. target_compile_definitions(${TORQUE_APP_NAME} PUBLIC ${TORQUE_COMPILE_DEFINITIONS})
  370. target_link_libraries(${TORQUE_APP_NAME} ${TORQUE_LINK_LIBRARIES})
  371. if(APPLE)
  372. target_link_libraries(${TORQUE_APP_NAME} ${TORQUE_LINK_FRAMEWORKS})
  373. endif(APPLE)
  374. if(WIN32)
  375. target_link_libraries(${TORQUE_APP_NAME} ${TORQUE_LINK_WINDOWS})
  376. endif(WIN32)
  377. if(UNIX AND NOT APPLE)
  378. target_link_libraries(${TORQUE_APP_NAME} ${TORQUE_LINK_LINUX})
  379. endif(UNIX AND NOT APPLE)
  380. target_link_options(${TORQUE_APP_NAME} PUBLIC ${TORQUE_LINK_OPTIONS})
  381. if (TORQUE_TARGET_PROPERTIES)
  382. set_target_properties(${TORQUE_APP_NAME} PROPERTIES ${TORQUE_TARGET_PROPERTIES})
  383. endif (TORQUE_TARGET_PROPERTIES)
  384. target_include_directories(${TORQUE_APP_NAME} PUBLIC ${CMAKE_CURRENT_SOURCE_DIR} "${CMAKE_BINARY_DIR}/temp" ${TORQUE_INCLUDE_DIRECTORIES})
  385. if(TORQUE_TESTING)
  386. if(WIN32)
  387. target_link_options(${TORQUE_APP_NAME} PRIVATE "/SUBSYSTEM:CONSOLE")
  388. set_target_properties(gtest PROPERTIES COMPILE_FLAGS "/Zc:wchar_t-")
  389. set_target_properties(gmock PROPERTIES COMPILE_FLAGS "/Zc:wchar_t-")
  390. endif()
  391. endif(TORQUE_TESTING)
  392. append_defs()
  393. # Process library binaries - these are coming from modules that are providing links to external, precompiled code that should be included
  394. # with the executable. This is done because on Windows, the .lib is separate from the .dll so we can't automatically scan for shared
  395. # objects in our link libraries in that case.
  396. foreach (LIBRARY_BINARY ${TORQUE_ADDITIONAL_LIBRARY_BINARIES})
  397. if (APPLE)
  398. # For OSX, we want these binaries to be copied to the Frameworks directory
  399. add_custom_command(TARGET ${TORQUE_APP_NAME} POST_BUILD
  400. COMMAND ${CMAKE_COMMAND} -E make_directory "${TORQUE_APP_GAME_DIRECTORY}/${TORQUE_APP_NAME}.app/Contents/Frameworks"
  401. COMMAND ${CMAKE_COMMAND} -E copy ${LIBRARY_BINARY} "${TORQUE_APP_GAME_DIRECTORY}/${TORQUE_APP_NAME}.app/Contents/Frameworks/$(CONFIGURATION)")
  402. else()
  403. # All other platforms expect the file next to the executable
  404. add_custom_command(TARGET ${TORQUE_APP_NAME} POST_BUILD COMMAND ${CMAKE_COMMAND} -E copy ${LIBRARY_BINARY} "${TORQUE_APP_GAME_DIRECTORY}")
  405. endif (APPLE)
  406. endforeach()
  407. # Process link libraries for dynamic links - we do this on OSX/Linux to ensure the binaries end up in the correct App directory
  408. # as in the root CMake we force everything to be in game. This is necessary because on these platforms these are considered "libraries"
  409. # and not runtime binaries like we configure in the root CMake. We don't globally set library outputs to avoid outputting eg. a files to
  410. # our game directory.
  411. if (UNIX)
  412. get_target_property(GAME_LINK_LIBRARIES ${TORQUE_APP_NAME} LINK_LIBRARIES)
  413. foreach (GAME_LINK_LIBRARY ${GAME_LINK_LIBRARIES})
  414. # For eg. OSX some links are not valid targets - for example frameworks provided by OS
  415. if (TARGET ${GAME_LINK_LIBRARY})
  416. get_target_property(LINK_LIBRARY_TYPE ${GAME_LINK_LIBRARY} TYPE)
  417. # Only pay attention to shared libraries and make them output to the app resources
  418. if ("${LINK_LIBRARY_TYPE}" STREQUAL "SHARED_LIBRARY")
  419. if (APPLE)
  420. set_target_properties(${GAME_LINK_LIBRARY} PROPERTIES
  421. XCODE_ATTRIBUTE_SKIP_INSTALL YES
  422. )
  423. add_custom_command(TARGET ${TORQUE_APP_NAME} POST_BUILD
  424. COMMAND ${CMAKE_COMMAND} -E make_directory "${TORQUE_APP_GAME_DIRECTORY}/${TORQUE_APP_NAME}.app/Contents/Frameworks"
  425. COMMAND ${CMAKE_COMMAND} -E copy "$<TARGET_FILE:${GAME_LINK_LIBRARY}>" "${TORQUE_APP_GAME_DIRECTORY}/${TORQUE_APP_NAME}.app/Contents/Frameworks/$<TARGET_FILE_NAME:${GAME_LINK_LIBRARY}>"
  426. COMMAND ${CMAKE_COMMAND} -E create_symlink "$<TARGET_FILE:${GAME_LINK_LIBRARY}>" "${TORQUE_APP_GAME_DIRECTORY}/${TORQUE_APP_NAME}.app/Contents/Frameworks/$<TARGET_LINKER_FILE_NAME:${GAME_LINK_LIBRARY}>"
  427. COMMAND ${CMAKE_COMMAND} -E create_symlink "$<TARGET_FILE:${GAME_LINK_LIBRARY}>" "${TORQUE_APP_GAME_DIRECTORY}/${TORQUE_APP_NAME}.app/Contents/Frameworks/lib$<TARGET_LINKER_FILE_BASE_NAME:${GAME_LINK_LIBRARY}>.1.dylib"
  428. )
  429. else()
  430. set_target_properties(${GAME_LINK_LIBRARY} PROPERTIES LIBRARY_OUTPUT_DIRECTORY "${TORQUE_APP_GAME_DIRECTORY}")
  431. endif(APPLE)
  432. endif()
  433. endif()
  434. endforeach()
  435. endif (UNIX)