torque2d.cmake 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362
  1. project(${TORQUE_APP_NAME})
  2. if(UNIX)
  3. if(NOT CXX_FLAG32)
  4. set(CXX_FLAG32 "")
  5. endif()
  6. #set(CXX_FLAG32 "-m32") #uncomment for build x32 on OSx64
  7. if (CMAKE_CXX_COMPILER_ID MATCHES "Clang")
  8. set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${CXX_FLAG32} -Wundef -msse -pipe -Wfatal-errors -Wno-return-type-c-linkage -Wno-unused-local-typedef ${TORQUE_ADDITIONAL_LINKER_FLAGS}")
  9. set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${CXX_FLAG32} -Wundef -msse -pipe -Wfatal-errors -Wno-return-type-c-linkage -Wno-unused-local-typedef ${TORQUE_ADDITIONAL_LINKER_FLAGS}")
  10. else()
  11. # default compiler flags
  12. set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${CXX_FLAG32} -Wundef -msse -pipe -Wfatal-errors -no-pie ${TORQUE_ADDITIONAL_LINKER_FLAGS} -Wl,-rpath,'$$ORIGIN'")
  13. set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${CXX_FLAG32} -Wundef -msse -pipe -Wfatal-errors ${TORQUE_ADDITIONAL_LINKER_FLAGS} -Wl,-rpath,'$$ORIGIN'")
  14. endif()
  15. set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11 ")
  16. endif()
  17. if(UNIX AND NOT APPLE)
  18. set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -DLINUX")
  19. endif()
  20. # TODO: fmod support
  21. ###############################################################################
  22. # modules
  23. ###############################################################################
  24. option(TORQUE_SFX_VORBIS "Vorbis Sound" ON)
  25. mark_as_advanced(TORQUE_SFX_VORBIS)
  26. option(TORQUE_SFX_OPENAL "OpenAL Sound" ON)
  27. if(TORQUE_SFX_OPENAL)
  28. #Hide some unnecessary fields as advanced
  29. mark_as_advanced(ALSOFT_AMBDEC_PRESETS)
  30. mark_as_advanced(ALSOFT_BACKEND_DSOUND)
  31. mark_as_advanced(ALSOFT_BACKEND_MMDEVAPI)
  32. mark_as_advanced(ALSOFT_BACKEND_WAVE)
  33. mark_as_advanced(ALSOFT_BACKEND_WINMM)
  34. mark_as_advanced(ALSOFT_CONFIG)
  35. mark_as_advanced(ALSOFT_CPUEXT_SSE)
  36. mark_as_advanced(ALSOFT_CPUEXT_SSE2)
  37. mark_as_advanced(ALSOFT_CPUEXT_SSE3)
  38. mark_as_advanced(ALSOFT_CPUEXT_SSE4_1)
  39. mark_as_advanced(ALSOFT_DLOPEN)
  40. set(ALSOFT_DLOPEN ON CACHE BOOL "Test for open Dll" FORCE)
  41. mark_as_advanced(ALSOFT_EMBED_HRTF_DATA)
  42. mark_as_advanced(ALSOFT_EXAMPLES)
  43. mark_as_advanced(ALSOFT_HRTF_DEFS)
  44. mark_as_advanced(ALSOFT_INSTALL)
  45. mark_as_advanced(ALSOFT_NO_CONFIG_UTIL)
  46. mark_as_advanced(ALSOFT_NO_UID_DEFS)
  47. mark_as_advanced(ALSOFT_REQUIRE_ALSA)
  48. mark_as_advanced(ALSOFT_REQUIRE_COREAUDIO)
  49. mark_as_advanced(ALSOFT_REQUIRE_DSOUND)
  50. mark_as_advanced(ALSOFT_REQUIRE_JACK)
  51. mark_as_advanced(ALSOFT_REQUIRE_MMDEVAPI)
  52. mark_as_advanced(ALSOFT_REQUIRE_NEON)
  53. mark_as_advanced(ALSOFT_REQUIRE_OPENSL)
  54. mark_as_advanced(ALSOFT_REQUIRE_OSS)
  55. mark_as_advanced(ALSOFT_REQUIRE_PORTAUDIO)
  56. mark_as_advanced(ALSOFT_REQUIRE_PULSEAUDIO)
  57. mark_as_advanced(ALSOFT_REQUIRE_QSA)
  58. mark_as_advanced(ALSOFT_REQUIRE_SNDIO)
  59. mark_as_advanced(ALSOFT_REQUIRE_SOLARIS)
  60. mark_as_advanced(ALSOFT_REQUIRE_SSE)
  61. mark_as_advanced(ALSOFT_REQUIRE_SSE2)
  62. mark_as_advanced(ALSOFT_REQUIRE_SSE4_1)
  63. mark_as_advanced(ALSOFT_REQUIRE_WINMM)
  64. mark_as_advanced(ALSOFT_TESTS)
  65. mark_as_advanced(ALSOFT_UTILS)
  66. mark_as_advanced(ALSOFT_WERROR)
  67. mark_as_advanced(COREAUDIO_FRAMEWORK)
  68. mark_as_advanced(CMAKE_DEBUG_POSTFIX)
  69. mark_as_advanced(FORCE_STATIC_VCRT)
  70. mark_as_advanced(ALSOFT_BACKEND_WASAPI)
  71. mark_as_advanced(ALSOFT_BUILD_ROUTER)
  72. mark_as_advanced(ALSOFT_REQUIRE_SDL2)
  73. set(ALSOFT_REQUIRE_SDL2 OFF CACHE BOOL "T2D Does not have SDL" FORCE)
  74. mark_as_advanced(ALSOFT_REQUIRE_WASAPI)
  75. #the following is from openal-soft
  76. mark_as_advanced(SDL2MAIN_LIBRARY)
  77. mark_as_advanced(SDL2_CORE_LIBRARY)
  78. mark_as_advanced(SDL2_INCLUDE_DIR)
  79. endif()
  80. mark_as_advanced(TORQUE_SFX_OPENAL)
  81. ###############################################################################
  82. # options
  83. ###############################################################################
  84. if(UNIX AND NOT APPLE) # handle single-configuration generator
  85. set(TORQUE_BUILD_TYPE "Debug" CACHE STRING "Select one of Debug, Release and RelWithDebInfo")
  86. set_property(CACHE TORQUE_BUILD_TYPE PROPERTY STRINGS "Debug" "Release" "RelWithDebInfo")
  87. set(TORQUE_ADDITIONAL_LINKER_FLAGS "" CACHE STRING "Additional linker flags")
  88. mark_as_advanced(TORQUE_ADDITIONAL_LINKER_FLAGS)
  89. endif()
  90. if(WIN32)
  91. # warning C4800: 'XXX' : forcing value to bool 'true' or 'false' (performance warning)
  92. set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -wd4800")
  93. # warning C4018: '<' : signed/unsigned mismatch
  94. set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -wd4018")
  95. # warning C4244: 'initializing' : conversion from 'XXX' to 'XXX', possible loss of data
  96. set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -wd4244")
  97. endif()
  98. # build types
  99. if(UNIX AND NOT APPLE) # handle single-configuration generator
  100. set(CMAKE_BUILD_TYPE ${TORQUE_BUILD_TYPE})
  101. if(CMAKE_BUILD_TYPE STREQUAL "Debug")
  102. set(TORQUE_DEBUG TRUE)
  103. elseif(CMAKE_BUILD_TYPE STREQUAL "Release")
  104. set(TORQUE_RELEASE TRUE)
  105. elseif(CMAKE_BUILD_TYPE STREQUAL "RelWithDebInfo")
  106. set(TORQUE_RELEASE TRUE)
  107. else()
  108. message(FATAL_ERROR "Please select Debug, Release or RelWithDebInfo for TORQUE_BUILD_TYPE")
  109. endif()
  110. endif()
  111. ###############################################################################
  112. # Always enabled paths first
  113. ###############################################################################
  114. addPath("${srcDir}/") # must come first :)
  115. addPath("${srcDir}/algorithm")
  116. addPath("${srcDir}/assets")
  117. addPath("${srcDir}/audio")
  118. addPath("${srcDir}/bitmapFont")
  119. addPathRec("${srcDir}/Box2D")
  120. addPath("${srcDir}/collection")
  121. addPath("${srcDir}/component")
  122. addPath("${srcDir}/component/behaviors")
  123. addPath("${srcDir}/console")
  124. addPath("${srcDir}/debug")
  125. addPath("${srcDir}/debug/remote")
  126. addPath("${srcDir}/delegates")
  127. addPath("${srcDir}/game")
  128. addPath("${srcDir}/sfx")
  129. set(BLACKLIST "bitmapPvr.cc" )
  130. addPath("${srcDir}/graphics")
  131. if(WIN32)
  132. set(BLACKLIST "")
  133. endif()
  134. addPath("${srcDir}/gui")
  135. addPath("${srcDir}/gui/buttons")
  136. addPath("${srcDir}/gui/containers")
  137. addPath("${srcDir}/gui/editor")
  138. addPath("${srcDir}/gui/language")
  139. addPath("${srcDir}/input")
  140. addPath("${srcDir}/io")
  141. addPath("${srcDir}/io/resource")
  142. addPath("${srcDir}/io/zip")
  143. addPath("${srcDir}/math")
  144. addPath("${srcDir}/memory")
  145. addPath("${srcDir}/messaging")
  146. addPath("${srcDir}/module")
  147. addPath("${srcDir}/network")
  148. addPath("${srcDir}/persistence")
  149. addPath("${srcDir}/persistence/rapidjson/include/rapidjson")
  150. addPath("${srcDir}/persistence/rapidjson/include/rapidjson/internal")
  151. addPath("${srcDir}/persistence/taml")
  152. addPath("${srcDir}/persistence/taml/binary")
  153. addPath("${srcDir}/persistence/taml/json")
  154. addPath("${srcDir}/persistence/taml/xml")
  155. addPath("${srcDir}/persistence/tinyXML")
  156. set(BLACKLIST "platformNet_Emscripten.cpp")
  157. addPath("${srcDir}/platform")
  158. set(BLACKLIST "")
  159. addPath("${srcDir}/platform/menus")
  160. addPath("${srcDir}/platform/nativeDialogs")
  161. addPath("${srcDir}/platform/threads")
  162. addPath("${srcDir}/sim")
  163. addPath("${srcDir}/spine")
  164. addPath("${srcDir}/string")
  165. addPath("${srcDir}/testing")
  166. addPath("${srcDir}/testing/tests")
  167. addPath("${srcDir}/2d")
  168. addPath("${srcDir}/2d/assets")
  169. addPath("${srcDir}/2d/controllers")
  170. addPath("${srcDir}/2d/controllers/core")
  171. addPath("${srcDir}/2d/core")
  172. addPath("${srcDir}/2d/experimental")
  173. addPath("${srcDir}/2d/experimental/composites")
  174. addPath("${srcDir}/2d/gui")
  175. addPath("${srcDir}/2d/scene")
  176. addPath("${srcDir}/2d/sceneobject")
  177. if(TORQUE_SFX_OPENAL)
  178. if(WIN32)
  179. option(AL_ALEXT_PROTOTYPES "Use Extended OpenAL options" ON)
  180. addInclude("${libDir}/openal/win32")
  181. endif()
  182. if(UNIX AND NOT APPLE)
  183. option(AL_ALEXT_PROTOTYPES "Use Extended OpenAL options" ON)
  184. #addPath("${srcDir}/sfx/linux")
  185. endif()
  186. if(APPLE)
  187. option(AL_ALEXT_PROTOTYPES "Use Extended OpenAL options" OFF)
  188. addFramework("OpenAL")
  189. endif()
  190. endif()
  191. mark_as_advanced(AL_ALEXT_PROTOTYPES)
  192. if(AL_ALEXT_PROTOTYPES)
  193. addDef( "AL_ALEXT_PROTOTYPES" )
  194. endif()
  195. if(UNIX AND NOT APPLE)
  196. #set(CMAKE_SIZEOF_VOID_P 4) #force 32 bit
  197. set(ENV{CFLAGS} "${CXX_FLAG32} -g -O3")
  198. if("${TORQUE_ADDITIONAL_LINKER_FLAGS}" STREQUAL "")
  199. set(ENV{LDFLAGS} "${CXX_FLAG32}")
  200. else()
  201. set(ENV{LDFLAGS} "${CXX_FLAG32} ${TORQUE_ADDITIONAL_LINKER_FLAGS}")
  202. endif()
  203. endif()
  204. # Vorbis
  205. addInclude(${libDir}/libvorbis/include)
  206. addLib(libvorbis)
  207. addInclude(${libDir}/libogg/include)
  208. addLib(libogg)
  209. ###############################################################################
  210. # platform specific things
  211. ###############################################################################
  212. if(WIN32)
  213. addPath("${srcDir}/platformWin32")
  214. addPath("${srcDir}/platformWin32/nativeDialogs")
  215. addPath("${srcDir}/platformWin32/menus")
  216. addPath("${srcDir}/platformWin32/threads")
  217. # add windows rc file for the icon
  218. addFile("${cmakeDir}/Torque 2D.rc")
  219. endif()
  220. if(APPLE)
  221. addPath("${srcDir}/platformOSX")
  222. endif()
  223. if(UNIX AND NOT APPLE)
  224. addPath("${srcDir}/platformX86UNIX")
  225. endif()
  226. ###############################################################################
  227. ###############################################################################
  228. finishExecutable()
  229. ###############################################################################
  230. ###############################################################################
  231. # Set Visual Studio startup project
  232. if(MSVC)
  233. set_property(DIRECTORY ${CMAKE_SOURCE_DIR} PROPERTY VS_STARTUP_PROJECT ${TORQUE_APP_NAME})
  234. set_target_properties(${TORQUE_APP_NAME} PROPERTIES VS_DEBUGGER_WORKING_DIRECTORY ${TORQUE_APP_NAME})
  235. endif()
  236. if(NOT EXISTS "${TORQUE_APP_NAME}/Torque 2D.ico")
  237. CONFIGURE_FILE("${cmakeDir}/Torque 2D.ico" "${TORQUE_APP_NAME}/Torque 2D.ico" COPYONLY)
  238. endif()
  239. if(WIN32)
  240. if(NOT EXISTS "${projectSrcDir}/Torque 2D.rc")
  241. CONFIGURE_FILE("${cmakeDir}/Torque 2D.rc.in" "${TORQUE_APP_NAME}/Torque 2D.rc")
  242. endif()
  243. if(NOT EXISTS "${projectSrcDir}/main.cs")
  244. CONFIGURE_FILE("${cmakeDir}/main.cs.in" "${TORQUE_APP_NAME}/main.cs")
  245. endif()
  246. if(NOT EXISTS "${TORQUE_APP_NAME}/cleandso.bat")
  247. CONFIGURE_FILE("${cmakeDir}/cleandso.bat.in" "${TORQUE_APP_NAME}/cleandso.bat")
  248. endif()
  249. endif()
  250. ###############################################################################
  251. # Common Libraries
  252. ###############################################################################
  253. addLib(lpng)
  254. addLib(ljpeg)
  255. addLib(zlib)
  256. if (APPLE)
  257. addFramework("Cocoa")
  258. addFramework("OpenGL")
  259. addFramework("CoreData")
  260. addFramework("CoreFoundation")
  261. addFramework("Foundation")
  262. addFramework("AppKit")
  263. addFramework("AVFoundation")
  264. #set a few arch defaults
  265. set(CMAKE_OSX_ARCHITECTURES "x86_64" CACHE STRING "OSX Architecture" FORCE)
  266. set(CMAKE_OSX_DEPLOYMENT_TARGET "10.9" CACHE STRING "OSX Deployment target" FORCE)
  267. endif()
  268. if(WIN32)
  269. set(TORQUE_EXTERNAL_LIBS "COMCTL32.LIB;COMDLG32.LIB;USER32.LIB;ADVAPI32.LIB;GDI32.LIB;RPCRT4.LIB;WINMM.LIB;WS2_32.LIB;vfw32.lib;Imm32.lib;shell32.lib;shlwapi.lib;ole32.lib" CACHE STRING "external libs to link against")
  270. mark_as_advanced(TORQUE_EXTERNAL_LIBS)
  271. addLib("${TORQUE_EXTERNAL_LIBS}")
  272. endif()
  273. if(UNIX AND NOT APPLE)
  274. # copy pasted from T3D build system, some might not be needed
  275. set(TORQUE_EXTERNAL_LIBS "stdc++ m dl pthread rt X11 Xft SDL2main SDL2 openal" CACHE STRING "external libs to link against")
  276. mark_as_advanced(TORQUE_EXTERNAL_LIBS)
  277. string(REPLACE " " ";" TORQUE_EXTERNAL_LIBS_LIST ${TORQUE_EXTERNAL_LIBS})
  278. addLib( "${TORQUE_EXTERNAL_LIBS_LIST}" )
  279. endif()
  280. ###############################################################################
  281. # Always enabled Definitions
  282. ###############################################################################
  283. addDef(TORQUE_DEBUG Debug)
  284. addDef(TORQUE_DEBUG_GUARD)
  285. addDef(TORQUE_NET_STATS)
  286. addDef(_CRT_SECURE_NO_WARNINGS)
  287. addDef(_CRT_SECURE_NO_DEPRECATE)
  288. addDef(UNICODE)
  289. addDef(_UNICODE) # for VS
  290. addDef(TORQUE_UNICODE)
  291. addDef(DEBUG=1)
  292. ##TORQUE_DEBUG;TORQUE_DEBUG_GUARD;_CRT_SECURE_NO_DEPRECATE;UNICODE;
  293. if(UNIX AND NOT APPLE)
  294. addDef(LINUX)
  295. endif()
  296. ###############################################################################
  297. # Include Paths
  298. ###############################################################################
  299. addInclude("${srcDir}/")
  300. addInclude("${libDir}/")
  301. addInclude("${libDir}/lpng")
  302. addInclude("${libDir}/ljpeg")
  303. addInclude("${libDir}/zlib")
  304. addInclude("${libDir}/libogg/include")
  305. addInclude("${srcDir}/persistence/rapidjson")
  306. addInclude("${srcDir}/persistence/rapidjson/include")
  307. addInclude("${srcDir}/testing/googleTest")
  308. addInclude("${srcDir}/testing/googleTest/include")
  309. if(UNIX AND NOT APPLE)
  310. addInclude("/usr/include/freetype2/freetype")
  311. addInclude("/usr/include/freetype2")
  312. endif()
  313. if(MSVC)
  314. # Match projectGenerator naming for executables
  315. set(OUTPUT_CONFIG DEBUG RELWITHDEBINFO)
  316. set(OUTPUT_SUFFIX DEBUG OPTIMIZEDDEBUG)
  317. foreach(INDEX RANGE 1)
  318. list(GET OUTPUT_CONFIG ${INDEX} CONF)
  319. list(GET OUTPUT_SUFFIX ${INDEX} SUFFIX)
  320. set_property(TARGET ${PROJECT_NAME} PROPERTY OUTPUT_NAME_${CONF} ${PROJECT_NAME}_${SUFFIX})
  321. endforeach()
  322. endif()