Advertisement
Guest User

Untitled

a guest
Aug 17th, 2014
362
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 12.46 KB | None | 0 0
  1. if(${CMAKE_SOURCE_DIR} STREQUAL ${CMAKE_BINARY_DIR})
  2. # Protop: run cmake like this: cmake -G "<generator>" -H. -Bbuild
  3. message(FATAL_ERROR "Prevented in-tree build.")
  4. endif()
  5.  
  6. cmake_minimum_required(VERSION 2.8)
  7.  
  8. include(ExternalProject)
  9.  
  10. project(megasource)
  11.  
  12. set(MEGA TRUE)
  13.  
  14. if(CMAKE_SIZEOF_VOID_P EQUAL 8)
  15. set(MEGA_X64 TRUE)
  16. set(MEGA_ARCH x64)
  17. else()
  18. set(MEGA_X86 TRUE)
  19. set(MEGA_ARCH x86)
  20. endif()
  21.  
  22. if(MSVC)
  23. set(CMAKE_SUPPRESS_REGENERATION TRUE)
  24. endif()
  25.  
  26. if(MSVC)
  27. set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} /MP")
  28. set(CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE} /MP")
  29. if(MEGA_X86)
  30. # This prevents usage of SSE2.
  31. set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} /arch:IA32")
  32. set(CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE} /arch:IA32")
  33. endif()
  34. message(STATUS "CMAKE_CXX_FLAGS_RELEASE: ${CMAKE_CXX_FLAGS_RELEASE}")
  35. message(STATUS "CMAKE_C_FLAGS_RELEASE: ${CMAKE_C_FLAGS_RELEASE}")
  36. endif()
  37.  
  38. function(add_move_dll ARG_POST_TARGET ARG_TARGET)
  39. add_custom_command(TARGET ${ARG_POST_TARGET} POST_BUILD
  40. COMMAND ${CMAKE_COMMAND} -E copy
  41. $<TARGET_FILE:${ARG_TARGET}>
  42. ${CMAKE_CURRENT_BINARY_DIR}/$<CONFIGURATION>/$<TARGET_FILE_NAME:${ARG_TARGET}>)
  43. endfunction()
  44.  
  45. function(add_move_file ARG_POST_TARGET ARG_FILE)
  46. get_filename_component(TEMP_FILENAME ${ARG_FILE} NAME)
  47. add_custom_command(TARGET ${ARG_POST_TARGET} POST_BUILD
  48. COMMAND ${CMAKE_COMMAND} -E copy
  49. ${ARG_FILE}
  50. ${CMAKE_CURRENT_BINARY_DIR}/$<CONFIGURATION>/${TEMP_FILENAME})
  51. endfunction()
  52.  
  53. function(disable_warnings ARG_TARGET)
  54. get_target_property(OLD_FLAGS ${ARG_TARGET} COMPILE_FLAGS)
  55. set(NEW_FLAGS -W0)
  56. if(OLD_FLAGS)
  57. set(NEW_FLAGS "${OLD_FLAGS} ${NEW_FLAGS}")
  58. endif()
  59. set_target_properties(${ARG_TARGET} PROPERTIES COMPILE_FLAGS ${NEW_FLAGS})
  60. endfunction()
  61.  
  62. # Look for dynamic runtime DLLs.
  63. if(MSVC11)
  64. set(VS110COMNTOOLS "$ENV{VS110COMNTOOLS}")
  65. if(${VS110COMNTOOLS} STREQUAL "")
  66. message(WARNING "Environment variable VS110COMNTOOLS not defined. Is VS11 properly installed?")
  67. else()
  68. get_filename_component(VS110_REDIST_DIR ${VS110COMNTOOLS}/../../VC/redist/${MEGA_ARCH}/Microsoft.VC110.CRT ABSOLUTE)
  69. set(MSVCP110_DLL ${VS110_REDIST_DIR}/msvcp110.dll)
  70. set(MSVCR110_DLL ${VS110_REDIST_DIR}/msvcr110.dll)
  71. if(EXISTS ${MSVCP110_DLL} AND EXISTS ${MSVCR110_DLL})
  72. message(STATUS "Found msvcp110.dll, msvcr110.dll")
  73. set(MEGA_MSVC_DLLS ${MSVCP110_DLL} ${MSVCR110_DLL})
  74. else()
  75. message(WARNING "Could not find msvcp110.dll, msvcr110.dll")
  76. endif()
  77.  
  78. # Find vcvarsall.bat.
  79. get_filename_component(VS110_VCVARSALL_BAT ${VS110COMNTOOLS}/../../VC/vcvarsall.bat ABSOLUTE)
  80.  
  81. if(EXISTS ${VS110_VCVARSALL_BAT})
  82. message(STATUS "Found vsvarsall.bat")
  83. set(MEGA_MSVC_VCVARSALL_BAT ${VS110_VCVARSALL_BAT})
  84.  
  85. if(MEGA_X86)
  86. set(MEGA_MSVC_VCVARSALL_BAT_ARG "x86")
  87. else()
  88. set(MEGA_MSVC_VCVARSALL_BAT_ARG "x86_amd64")
  89. endif()
  90. else()
  91. message(WARNING "Could not find vsvarsall.bat")
  92. endif()
  93.  
  94. endif()
  95. elseif(MSVC12)
  96. set(VS120COMNTOOLS "$ENV{VS120COMNTOOLS}")
  97. if(${VS120COMNTOOLS} STREQUAL "")
  98. message(WARNING "Environment variable VS120COMNTOOLS not defined. Is VS12 properly installed?")
  99. else()
  100. get_filename_component(VS120_REDIST_DIR ${VS120COMNTOOLS}/../../VC/redist/${MEGA_ARCH}/Microsoft.VC120.CRT ABSOLUTE)
  101. set(MSVCP120_DLL ${VS120_REDIST_DIR}/msvcp120.dll)
  102. set(MSVCR120_DLL ${VS120_REDIST_DIR}/msvcr120.dll)
  103. if(EXISTS ${MSVCP120_DLL} AND EXISTS ${MSVCR120_DLL})
  104. message(STATUS "Found msvcp120.dll, msvcr120.dll")
  105. set(MEGA_MSVC_DLLS ${MSVCP120_DLL} ${MSVCR120_DLL})
  106. else()
  107. message(WARNING "Could not find msvcp120.dll, msvcr120.dll")
  108. endif()
  109.  
  110. # Find vcvarsall.bat.
  111. get_filename_component(VS120_VCVARSALL_BAT ${VS120COMNTOOLS}/../../VC/vcvarsall.bat ABSOLUTE)
  112.  
  113. if(EXISTS ${VS120_VCVARSALL_BAT})
  114. message(STATUS "Found vsvarsall.bat")
  115. set(MEGA_MSVC_VCVARSALL_BAT ${VS120_VCVARSALL_BAT})
  116.  
  117. if(MEGA_X86)
  118. set(MEGA_MSVC_VCVARSALL_BAT_ARG "x86")
  119. else()
  120. set(MEGA_MSVC_VCVARSALL_BAT_ARG "x86_amd64")
  121. endif()
  122. else()
  123. message(WARNING "Could not find vsvarsall.bat")
  124. endif()
  125.  
  126. endif()
  127. endif()
  128.  
  129. set(MEGA_ZLIB_VER "1.2.8")
  130. set(MEGA_PHYSFS_VER "2.0.3")
  131. set(MEGA_LUA51_VER "5.1.5")
  132. set(MEGA_LUAJIT_VER "2.0.3")
  133. set(MEGA_LIBPNG_VER "166")
  134. set(MEGA_JPEG_TURBO_VER "1.3.1")
  135. set(MEGA_LIBOGG_VER "1.3.1")
  136. set(MEGA_LIBVORBIS_VER "1.3.3")
  137. set(MEGA_MPG123_VER "1.15.3")
  138. set(MEGA_FREETYPE_VER "2.5.0.1")
  139. set(MEGA_SDL2_VER "2.0.3")
  140. set(MEGA_SDL2_IMAGE_VER "2.0.0")
  141. set(MEGA_OPENAL_VER "1.15.1-29e0af5ef052")
  142. set(MEGA_JASPER_VER "1.900.1")
  143. set(MEGA_TIFF_VER "4.0.3")
  144. set(MEGA_DEVIL_VER "1.7.8")
  145. set(MEGA_MODPLUG_VER "0.8.8.4")
  146.  
  147. set(SKIP_INSTALL_ALL TRUE)
  148.  
  149. set(ZLIB_FOUND TRUE)
  150. set(ZLIB_LIBRARY zlibstatic)
  151. set(ZLIB_INCLUDE_DIR .)
  152.  
  153. set(OGG_LIBRARY ogg-static)
  154.  
  155. message(STATUS "-----------------------------------------------------")
  156. message(STATUS "Configuring: zlib ${MEGA_ZLIB_VER}")
  157. message(STATUS "-----------------------------------------------------")
  158. add_subdirectory("libs/zlib-${MEGA_ZLIB_VER}" ${CMAKE_BINARY_DIR}/zlib)
  159. set(MEGA_ZLIB zlibstatic)
  160.  
  161. message(STATUS "-----------------------------------------------------")
  162. message(STATUS "Configuring: physfs ${MEGA_PHYSFS_VER}")
  163. message(STATUS "-----------------------------------------------------")
  164. add_subdirectory("libs/physfs-${MEGA_PHYSFS_VER}" ${CMAKE_BINARY_DIR}/physfs)
  165. set(MEGA_PHYSFS physfs-static)
  166.  
  167. message(STATUS "-----------------------------------------------------")
  168. message(STATUS "Configuring: lua ${MEGA_LUA51_VER}")
  169. message(STATUS "-----------------------------------------------------")
  170. add_subdirectory("libs/lua-${MEGA_LUA51_VER}" ${CMAKE_BINARY_DIR}/lua51)
  171. set(MEGA_LUA51 lua51)
  172.  
  173. message(STATUS "-----------------------------------------------------")
  174. message(STATUS "Configuring: libpng ${MEGA_LIBPNG_VER}")
  175. message(STATUS "-----------------------------------------------------")
  176. add_subdirectory("libs/lpng${MEGA_LIBPNG_VER}" ${CMAKE_BINARY_DIR}/lpng)
  177. set(MEGA_LIBPNG ${PNG_LIB_NAME_STATIC})
  178.  
  179. message(STATUS "-----------------------------------------------------")
  180. message(STATUS "Configuring: jpeg-turbo ${MEGA_JPEG_TURBO_VER}")
  181. message(STATUS "-----------------------------------------------------")
  182. add_subdirectory("libs/libjpeg-turbo" ${CMAKE_BINARY_DIR}/jpeg-turbo)
  183. set(MEGA_JPEG jpeg-static)
  184. set(MEGA_JPEG_TURBO turbojpeg-static)
  185.  
  186. message(STATUS "-----------------------------------------------------")
  187. message(STATUS "Configuring: libogg ${MEGA_LIBOGG_VER}")
  188. message(STATUS "-----------------------------------------------------")
  189. add_subdirectory("libs/libogg-${MEGA_LIBOGG_VER}" ${CMAKE_BINARY_DIR}/libogg)
  190. set(MEGA_LIBOGG ogg-static)
  191.  
  192. message(STATUS "-----------------------------------------------------")
  193. message(STATUS "Configuring: libvorbis ${MEGA_LIBVORBIS_VER}")
  194. message(STATUS "-----------------------------------------------------")
  195. add_subdirectory("libs/libvorbis-${MEGA_LIBVORBIS_VER}" ${CMAKE_BINARY_DIR}/libvorbis)
  196. set(MEGA_LIBVORBIS vorbis-static)
  197. set(MEGA_LIBVORBISFILE vorbisfile-static)
  198.  
  199. message(STATUS "-----------------------------------------------------")
  200. message(STATUS "Configuring: mpg123 ${MEGA_MPG123_VER}")
  201. message(STATUS "-----------------------------------------------------")
  202. add_subdirectory("libs/mpg123-${MEGA_MPG123_VER}" ${CMAKE_BINARY_DIR}/mpg123)
  203. set(MEGA_MPEG123 mpg123)
  204.  
  205. message(STATUS "-----------------------------------------------------")
  206. message(STATUS "Configuring: freetype ${MEGA_FREETYPE_VER}")
  207. message(STATUS "-----------------------------------------------------")
  208. add_subdirectory("libs/freetype-${MEGA_FREETYPE_VER}" ${CMAKE_BINARY_DIR}/freetype)
  209. set(MEGA_FREETYPE freetype-static)
  210.  
  211. message(STATUS "-----------------------------------------------------")
  212. message(STATUS "Configuring: SDL2 ${MEGA_SDL2_VER}")
  213. message(STATUS "-----------------------------------------------------")
  214. add_subdirectory("libs/SDL2" ${CMAKE_BINARY_DIR}/SDL2)
  215. set(MEGA_SDL2 SDL2)
  216. set(MEGA_SDL2MAIN SDL2main)
  217.  
  218. message(STATUS "-----------------------------------------------------")
  219. message(STATUS "Configuring: openal-soft ${MEGA_OPENAL_VER}")
  220. message(STATUS "-----------------------------------------------------")
  221. add_subdirectory("libs/openal-soft-${MEGA_OPENAL_VER}" ${CMAKE_BINARY_DIR}/openal-soft)
  222. set(MEGA_OPENAL ${OPENAL_LIB_NAME})
  223.  
  224. message(STATUS "-----------------------------------------------------")
  225. message(STATUS "Configuring: jasper ${MEGA_JASPER_VER}")
  226. message(STATUS "-----------------------------------------------------")
  227. add_subdirectory("libs/jasper-${MEGA_JASPER_VER}" ${CMAKE_BINARY_DIR}/jasper)
  228. set(MEGA_JASPER jasper-static)
  229.  
  230. message(STATUS "-----------------------------------------------------")
  231. message(STATUS "Configuring: tiff ${MEGA_TIFF_VER}")
  232. message(STATUS "-----------------------------------------------------")
  233. add_subdirectory("libs/tiff-${MEGA_TIFF_VER}" ${CMAKE_BINARY_DIR}/tiff)
  234. set(MEGA_TIFF tiff-static)
  235.  
  236. message(STATUS "-----------------------------------------------------")
  237. message(STATUS "Configuring: DevIL ${MEGA_DEVIL_VER}")
  238. message(STATUS "-----------------------------------------------------")
  239. add_subdirectory("libs/DevIL-${MEGA_DEVIL_VER}" ${CMAKE_BINARY_DIR}/DevIL)
  240. set(MEGA_DEVIL DevIL)
  241.  
  242. message(STATUS "-----------------------------------------------------")
  243. message(STATUS "Configuring: SDL2_image ${MEGA_SDL2_IMAGE_VER}")
  244. message(STATUS "-----------------------------------------------------")
  245. add_subdirectory("libs/SDL2_image-${MEGA_SDL2_IMAGE_VER}" ${CMAKE_BINARY_DIR}/SDL2_image)
  246. set(MEGA_SDL2_IMAGE SDL2_image-static)
  247.  
  248. message(STATUS "-----------------------------------------------------")
  249. message(STATUS "Configuring: libmodplug ${MEGA_MODPLUG_VER}")
  250. message(STATUS "-----------------------------------------------------")
  251. add_subdirectory("libs/libmodplug-${MEGA_MODPLUG_VER}" ${CMAKE_BINARY_DIR}/libmodplug)
  252. set(MEGA_MODPLUG modplug-static)
  253.  
  254. # LuaJIT
  255. if(MSVC)
  256. message(STATUS "-----------------------------------------------------")
  257. message(STATUS "Configuring: LuaJIT ${MEGA_LUAJIT_VER}")
  258. message(STATUS "-----------------------------------------------------")
  259. set(MEGA_LUAJIT_DIR "LuaJIT")
  260.  
  261. # Copy LuaJIT source to binary dir. LuaJIT builds in-source,
  262. # and we don't want to modify the original source tree, so
  263. # we copy it.
  264. file(COPY libs/${MEGA_LUAJIT_DIR} DESTINATION libs)
  265.  
  266. set(MEGA_LUAJIT_DIR "LuaJIT")
  267.  
  268. set(MEGA_LUAJIT_BUILD_BAT "
  269. @echo off
  270. call \"${MEGA_MSVC_VCVARSALL_BAT}\" ${MEGA_MSVC_VCVARSALL_BAT_ARG}
  271. cd src
  272. msvcbuild.bat
  273. ")
  274.  
  275. set(MEGA_LUAJIT_SOURCE_DIR ${CMAKE_BINARY_DIR}/libs/${MEGA_LUAJIT_DIR})
  276. file(WRITE ${MEGA_LUAJIT_SOURCE_DIR}/megabuild.bat ${MEGA_LUAJIT_BUILD_BAT})
  277.  
  278. ExternalProject_Add(luajit
  279. SOURCE_DIR ${MEGA_LUAJIT_SOURCE_DIR}
  280. BUILD_IN_SOURCE 1
  281. CONFIGURE_COMMAND ""
  282. BUILD_COMMAND "${MEGA_LUAJIT_SOURCE_DIR}/megabuild.bat"
  283. INSTALL_COMMAND cmake -E make_directory ${CMAKE_BINARY_DIR}/bin
  284. COMMAND cmake -E copy ${MEGA_LUAJIT_SOURCE_DIR}/src/lua51.dll ${CMAKE_BINARY_DIR}/bin
  285. COMMAND cmake -E copy ${MEGA_LUAJIT_SOURCE_DIR}/src/lua51.lib ${CMAKE_BINARY_DIR}/bin)
  286.  
  287. set(MEGA_LUAJIT_LIB ${CMAKE_BINARY_DIR}/bin/lua51.lib)
  288. set(MEGA_LUAJIT_DLL ${CMAKE_BINARY_DIR}/bin/lua51.dll)
  289. set(MEGA_LUAJIT_INCLUDE ${MEGA_LUAJIT_SOURCE_DIR}/src)
  290.  
  291. endif()
  292.  
  293. set(MEGA_3P
  294. ${MEGA_ZLIB}
  295. ${MEGA_PHYSFS}
  296. ${MEGA_LUA51}
  297. ${MEGA_LIBPNG}
  298. ${MEGA_JPEG}
  299. ${MEGA_JPEG_TURBO}
  300. ${MEGA_LIBOGG}
  301. ${MEGA_LIBVORBIS}
  302. ${MEGA_LIBVORBISFILE}
  303. ${MEGA_MPEG123}
  304. ${MEGA_FREETYPE}
  305. ${MEGA_SDL2}
  306. ${MEGA_SDL2MAIN}
  307. ${MEGA_SDL2_IMAGE}
  308. ${MEGA_OPENAL}
  309. ${MEGA_JASPER}
  310. ${MEGA_TIFF}
  311. ${MEGA_DEVIL}
  312. ${MEGA_MODPLUG}
  313. )
  314.  
  315. # Set to directory of love source. Defaults to ./libs/love.
  316. if(NOT MEGA_LOVE)
  317. set(MEGA_LOVE ${CMAKE_CURRENT_SOURCE_DIR}/libs/love)
  318. endif()
  319.  
  320. if(EXISTS ${MEGA_LOVE}/CMakeLists.txt)
  321. message(STATUS "-----------------------------------------------------")
  322. message(STATUS "Configuring: love")
  323. message(STATUS "-----------------------------------------------------")
  324. add_subdirectory(${MEGA_LOVE} ${CMAKE_BINARY_DIR}/love)
  325.  
  326. # Turn off third-party warnings when building with LOVE.
  327. foreach(MEGA_LIB ${MEGA_3P})
  328. disable_warnings(${MEGA_LIB})
  329. endforeach()
  330. else()
  331. message(STATUS "LOVE was not found")
  332. endif()
  333.  
  334. link_directories(${SDL_LINK_DIR})
  335. add_executable(megatest src/test.cpp)
  336. target_link_libraries(megatest ${MEGA_3P})
  337.  
  338. add_move_dll(megatest ${MEGA_MPEG123})
  339. add_move_dll(megatest ${MEGA_SDL2})
  340. add_move_dll(megatest ${MEGA_OPENAL})
  341. add_move_dll(megatest ${MEGA_DEVIL})
  342. add_move_dll(megatest ${MEGA_LUA51})
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement