CMakeLists.txt 17 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447
  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. cmake_minimum_required(VERSION 3.1)
  6. include(ExternalProject)
  7. project(megasource)
  8. set(MEGA TRUE)
  9. option(LOVE_USE_SDL3 "Use SDL3 instead of SDL2" ON)
  10. set (CMAKE_CXX_STANDARD 11)
  11. if(CMAKE_SIZEOF_VOID_P EQUAL 8)
  12. if(MSVC)
  13. # Normally we should rely on CMAKE_SYSTEM_PROCESSOR
  14. # but as of CMake 3.19.1, it sets to AMD64 even when targetting
  15. # Windows ARM64. This needs to be reevaluated in the future.
  16. set(_MEGATEMP_CHECKVAR CMAKE_SYSTEM_PROCESSOR)
  17. if("${CMAKE_GENERATOR}" MATCHES "^Visual Studio")
  18. set(_MEGATEMP_CHECKVAR CMAKE_GENERATOR_PLATFORM)
  19. # Note that MSVC_CXX_ARCHITECTURE_ID is an undocumented
  20. # variable, but unfortunately we need to depends on it
  21. # as reason stated above.
  22. # https://gitlab.kitware.com/cmake/cmake/-/issues/15170
  23. elseif(DEFINED MSVC_CXX_ARCHITECTURE_ID)
  24. set(_MEGATEMP_CHECKVAR MSVC_CXX_ARCHITECTURE_ID)
  25. endif()
  26. # FIXME: Code below also duplicates MEGA_X64 architecture assignment.
  27. if(${${_MEGATEMP_CHECKVAR}} MATCHES "^ARM64")
  28. set(MEGA_ARM64 TRUE)
  29. set(MEGA_ARCH ARM64)
  30. else()
  31. set(MEGA_X64 TRUE)
  32. set(MEGA_ARCH x64)
  33. endif()
  34. unset(_MEGATEMP_CHECKVAR)
  35. else()
  36. set(MEGA_X64 TRUE)
  37. set(MEGA_ARCH x64)
  38. endif()
  39. else()
  40. set(MEGA_X86 TRUE)
  41. set(MEGA_ARCH x86)
  42. endif()
  43. if(MSVC)
  44. set(CMAKE_SUPPRESS_REGENERATION TRUE)
  45. set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} /MP")
  46. set(CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE} /MP")
  47. message(STATUS "CMAKE_CXX_FLAGS_RELEASE: ${CMAKE_CXX_FLAGS_RELEASE}")
  48. message(STATUS "CMAKE_C_FLAGS_RELEASE: ${CMAKE_C_FLAGS_RELEASE}")
  49. endif()
  50. function(add_move_dll ARG_POST_TARGET ARG_TARGET)
  51. add_custom_command(TARGET ${ARG_POST_TARGET} POST_BUILD
  52. COMMAND ${CMAKE_COMMAND} -E copy
  53. $<TARGET_FILE:${ARG_TARGET}>
  54. ${CMAKE_CURRENT_BINARY_DIR}/$<CONFIGURATION>/$<TARGET_FILE_NAME:${ARG_TARGET}>)
  55. endfunction()
  56. function(add_move_file ARG_POST_TARGET ARG_FILE)
  57. get_filename_component(TEMP_FILENAME ${ARG_FILE} NAME)
  58. add_custom_command(TARGET ${ARG_POST_TARGET} POST_BUILD
  59. COMMAND ${CMAKE_COMMAND} -E copy
  60. ${ARG_FILE}
  61. ${CMAKE_CURRENT_BINARY_DIR}/$<CONFIGURATION>/${TEMP_FILENAME})
  62. endfunction()
  63. function(disable_warnings ARG_TARGET)
  64. get_target_property(OLD_FLAGS ${ARG_TARGET} COMPILE_FLAGS)
  65. if (CMAKE_CXX_COMPILER_ID MATCHES "Clang")
  66. set(NEW_FLAGS -w)
  67. else ()
  68. set(NEW_FLAGS -W0)
  69. endif ()
  70. if(OLD_FLAGS)
  71. set(NEW_FLAGS "${OLD_FLAGS} ${NEW_FLAGS}")
  72. endif()
  73. set_target_properties(${ARG_TARGET} PROPERTIES COMPILE_FLAGS ${NEW_FLAGS})
  74. endfunction()
  75. # Find vcvarsall.bat and look for dynamic runtime DLLs.
  76. if(MSVC)
  77. option(LOVE_INSTALL_UCRT "Provide the Windows 10 Universal CRT DLLs with LOVE" OFF)
  78. if(NOT(MSVC_TOOLSET_VERSION STREQUAL ""))
  79. set(VSVERSION "${MSVC_TOOLSET_VERSION}")
  80. elseif((MSVC_VERSION GREATER 1909) AND (MSVC_VERSION LESS 1920))
  81. set(VSVERSION "141")
  82. elseif(MSVC_VERSION EQUAL 1900)
  83. set(VSVERSION "140")
  84. elseif(MSVC_VERSION EQUAL 1800)
  85. set(VSVERSION "120")
  86. elseif(MSVC_VERSION LESS 1800)
  87. message(WARNING "Visual Studio 2013 (VS12) or newer is required!")
  88. else()
  89. message(WARNING "Cannot determine Visual Studio version!")
  90. endif()
  91. set(PROGRAMFILES_X86_STR "ProgramFiles(x86)")
  92. set(PROGRAMFILES_X86 "$ENV{${PROGRAMFILES_X86_STR}}")
  93. set(VSCOMNTOOLSSTRING "VS${VSVERSION}COMNTOOLS")
  94. set(VSCOMNTOOLS "$ENV{${VSCOMNTOOLSSTRING}}")
  95. if(VSCOMNTOOLS STREQUAL "")
  96. set(VSWHERE_PATH "${PROGRAMFILES_X86}\\Microsoft Visual Studio\\Installer\\vswhere.exe")
  97. execute_process(COMMAND ${VSWHERE_PATH} "-property" "installationPath" OUTPUT_VARIABLE VS_INSTALL_DIR OUTPUT_STRIP_TRAILING_WHITESPACE)
  98. if(NOT(VS_INSTALL_DIR STREQUAL ""))
  99. set(VSCOMNTOOLS "${VS_INSTALL_DIR}\\Common7\\Tools")
  100. endif()
  101. endif()
  102. if(VSCOMNTOOLS STREQUAL "")
  103. message(WARNING "Environment variable VSCOMNTOOLS not defined and vswhere.exe could not be found. Is Visual Studio properly installed?")
  104. else()
  105. # Find VsDevCmd.bat
  106. get_filename_component(VS_VCVARSALL_BAT ${VSCOMNTOOLS}/VsDevCmd.bat ABSOLUTE)
  107. if(NOT(EXISTS ${VS_VCVARSALL_BAT}))
  108. # Find vcvarsall.bat.
  109. get_filename_component(VS_VCVARSALL_BAT ${VSCOMNTOOLS}/../../VC/Auxiliary/Build/vcvarsall.bat ABSOLUTE)
  110. if(NOT(EXISTS ${VS_VCVARSALL_BAT}))
  111. # older VS versions have it here
  112. get_filename_component(VS_VCVARSALL_BAT ${VSCOMNTOOLS}/../../VC/vcvarsall.bat ABSOLUTE)
  113. endif()
  114. endif()
  115. if(EXISTS ${VS_VCVARSALL_BAT})
  116. set(MEGA_MSVC_VCVARSALL_BAT ${VS_VCVARSALL_BAT})
  117. if(VS_VCVARSALL_BAT MATCHES "VsDevCmd")
  118. message(STATUS "Found VsDevCmd.bat")
  119. if(MEGA_X64)
  120. set(MEGA_MSVC_VCVARSALL_BAT_ARG "-arch=amd64")
  121. elseif(MEGA_ARM64)
  122. set(MEGA_MSVC_VCVARSALL_BAT_ARG "-arch=arm64 -host_arch=amd64")
  123. else()
  124. set(MEGA_MSVC_VCVARSALL_BAT_ARG "-arch=x86")
  125. endif()
  126. # If we're using MSVC, then the vcvars_ver can be extracted from the MSVC linker version.
  127. # If we're somehow using Clang, then it won't work, but it's fine. VsDevCmd will use highest vcvars_ver available.
  128. string(REGEX MATCH "^([0-9]+)\\.([0-9]+)" VSVERSION_MATCH ${CMAKE_C_COMPILER_LINKER_VERSION})
  129. if(VSVERSION_MATCH)
  130. set(MEGA_MSVC_VCVARSALL_BAT_ARG "${MEGA_MSVC_VCVARSALL_BAT_ARG} -vcvars_ver=${CMAKE_MATCH_1}.${CMAKE_MATCH_2}")
  131. endif()
  132. else()
  133. message(STATUS "Found vcvarsall.bat")
  134. if(MEGA_X86)
  135. set(MEGA_MSVC_VCVARSALL_BAT_ARG "x86")
  136. elseif(MEGA_ARM64)
  137. set(MEGA_MSVC_VCVARSALL_BAT_ARG "x64_arm64")
  138. else()
  139. set(MEGA_MSVC_VCVARSALL_BAT_ARG "x86_amd64")
  140. endif()
  141. endif()
  142. else()
  143. message(WARNING "Could not find VsDevCmd.bat nor vcvarsall.bat")
  144. endif()
  145. endif()
  146. if(LOVE_INSTALL_UCRT)
  147. # We currently ship on platforms which might not have the Universal C Runtime installed.
  148. set(CMAKE_INSTALL_UCRT_LIBRARIES TRUE)
  149. endif()
  150. set(CMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP TRUE)
  151. # TODO: The code for InstallRequiredSystemLibraries needs the UCRTVersion and WindowsSDKVersion
  152. # environment variables set by vcvarsall in order to detect the correct version of the UCRT, in
  153. # newer Windows SDK versions. We don't gurantee that vcvarsall has been loaded before running...
  154. include(InstallRequiredSystemLibraries)
  155. foreach(RUNTIME_LIB ${CMAKE_INSTALL_SYSTEM_RUNTIME_LIBS})
  156. if(RUNTIME_LIB MATCHES "concrt")
  157. set(MSVC_RUNTIME_CONCRT_PATH ${RUNTIME_LIB})
  158. elseif(RUNTIME_LIB MATCHES "msvcp")
  159. set(MSVC_RUNTIME_MSVCP_PATH ${RUNTIME_LIB})
  160. endif()
  161. endforeach()
  162. # InstallRequiredSystemLibraries adds the concrt dll to its list, but we don't need it.
  163. if (EXISTS ${MSVC_RUNTIME_CONCRT_PATH})
  164. list(REMOVE_ITEM CMAKE_INSTALL_SYSTEM_RUNTIME_LIBS "${MSVC_RUNTIME_CONCRT_PATH}")
  165. endif()
  166. # CMake 3.20 InstallRequiredSystemLibraries recognize ARM64, but their older version aren't.
  167. # Put this safeguard in place, otherwise it will copy AMD64 DLLS which is NOT what user wants!
  168. if(MEGA_ARM64 AND ${CMAKE_VERSION} VERSION_LESS "3.20.0")
  169. message(WARNING "InstallRequiredSystemLibraries of CMake ${CMAKE_VERSION} doesn't support Windows ARM64. Please update your CMake!")
  170. set(MSVC_RUNTIME_MSVCP_PATH "")
  171. endif()
  172. # InstallRequiredSystemLibraries (as of CMake 3.14.5) doesn't include msvcp140_1.dll or msvcp140_2.dll in its list.
  173. if(EXISTS ${MSVC_RUNTIME_MSVCP_PATH})
  174. get_filename_component(MSVC_RUNTIME_MSVCP_DIR ${MSVC_RUNTIME_MSVCP_PATH} DIRECTORY)
  175. message(STATUS "Found MSVC Redist directory: ${MSVC_RUNTIME_MSVCP_DIR}")
  176. file(GLOB MSVC_RUNTIME_MSVCP_FILES "${MSVC_RUNTIME_MSVCP_DIR}/msvcp*.dll")
  177. set(CMAKE_INSTALL_SYSTEM_RUNTIME_LIBS ${CMAKE_INSTALL_SYSTEM_RUNTIME_LIBS} ${MSVC_RUNTIME_MSVCP_FILES})
  178. list(REMOVE_DUPLICATES CMAKE_INSTALL_SYSTEM_RUNTIME_LIBS)
  179. else()
  180. message(WARNING "InstallRequiredSystemLibraries did not find any msvcp runtime dll")
  181. endif()
  182. list(LENGTH CMAKE_INSTALL_SYSTEM_RUNTIME_LIBS MSVC_RUNTIME_COUNT)
  183. message(STATUS "Found ${MSVC_RUNTIME_COUNT} Visual C/C++ Runtime files")
  184. set(MEGA_MSVC_DLLS ${CMAKE_INSTALL_SYSTEM_RUNTIME_LIBS})
  185. endif()
  186. set(MEGA_ZLIB_VER "1.3.1")
  187. set(MEGA_LUA51_VER "5.1.5")
  188. set(MEGA_LUAJIT_VER "2.1.1734355927")
  189. set(MEGA_LIBOGG_VER "1.3.2")
  190. set(MEGA_LIBVORBIS_VER "1.3.5")
  191. set(MEGA_LIBTHEORA_VER "1.1.1")
  192. set(MEGA_FREETYPE_VER "2.13.2")
  193. set(MEGA_SDL2_VER "2.28.5")
  194. set(MEGA_SDL3_VER "3.2.10")
  195. set(MEGA_OPENAL_VER "1.24.3")
  196. set(MEGA_MODPLUG_VER "0.8.8.4")
  197. set(SKIP_INSTALL_ALL TRUE)
  198. set(ZLIB_FOUND TRUE)
  199. set(ZLIB_LIBRARY zlibstatic)
  200. set(ZLIB_INCLUDE_DIR .)
  201. set(OGG_LIBRARY ogg-static)
  202. message(STATUS "-----------------------------------------------------")
  203. message(STATUS "Configuring: zlib ${MEGA_ZLIB_VER}")
  204. message(STATUS "-----------------------------------------------------")
  205. set(ZLIB_BUILD_EXAMPLES OFF CACHE BOOL "Enable Zlib Examples" FORCE)
  206. add_subdirectory("libs/zlib-${MEGA_ZLIB_VER}" ${CMAKE_BINARY_DIR}/zlib)
  207. set(MEGA_ZLIB zlibstatic)
  208. message(STATUS "-----------------------------------------------------")
  209. message(STATUS "Configuring: lua ${MEGA_LUA51_VER}")
  210. message(STATUS "-----------------------------------------------------")
  211. add_subdirectory("libs/lua-${MEGA_LUA51_VER}" ${CMAKE_BINARY_DIR}/lua51)
  212. set(MEGA_LUA51 lua51)
  213. message(STATUS "-----------------------------------------------------")
  214. message(STATUS "Configuring: libogg ${MEGA_LIBOGG_VER}")
  215. message(STATUS "-----------------------------------------------------")
  216. add_subdirectory("libs/libogg-${MEGA_LIBOGG_VER}" ${CMAKE_BINARY_DIR}/libogg)
  217. set(MEGA_LIBOGG ogg-static)
  218. message(STATUS "-----------------------------------------------------")
  219. message(STATUS "Configuring: libvorbis ${MEGA_LIBVORBIS_VER}")
  220. message(STATUS "-----------------------------------------------------")
  221. add_subdirectory("libs/libvorbis-${MEGA_LIBVORBIS_VER}" ${CMAKE_BINARY_DIR}/libvorbis)
  222. set(MEGA_LIBVORBIS vorbis-static)
  223. set(MEGA_LIBVORBISFILE vorbisfile-static)
  224. message(STATUS "-----------------------------------------------------")
  225. message(STATUS "Configuring: libtheora ${MEGA_LIBTHEORA_VER}")
  226. message(STATUS "-----------------------------------------------------")
  227. add_subdirectory("libs/libtheora-${MEGA_LIBTHEORA_VER}" ${CMAKE_BINARY_DIR}/libtheora)
  228. set(MEGA_LIBTHEORA theora-static)
  229. message(STATUS "-----------------------------------------------------")
  230. message(STATUS "Configuring: freetype ${MEGA_FREETYPE_VER}")
  231. message(STATUS "-----------------------------------------------------")
  232. set(FT_DISABLE_ZLIB ON CACHE BOOL "(FreeType) Use zlib from megasource" FORCE)
  233. add_subdirectory("libs/freetype" ${CMAKE_BINARY_DIR}/freetype)
  234. set(MEGA_FREETYPE freetype)
  235. message(STATUS "-----------------------------------------------------")
  236. message(STATUS "Configuring: harfbuzz")
  237. message(STATUS "-----------------------------------------------------")
  238. add_subdirectory("libs/harfbuzz" ${CMAKE_BINARY_DIR}/harfbuzz)
  239. set(MEGA_HARFBUZZ harfbuzz)
  240. if(WIN32 AND MEGA_ARM64)
  241. # In Windows, SDL always tries to open OpenGL32.dll, which is not available in Windows ARM64.
  242. # This will cause error later on which makes love.window.setMode unhappy even when
  243. # LOVE_GRAPHICS_USE_OPENGLES is set, so disable OpenGL backend.
  244. set(SDL_OPENGL OFF CACHE BOOL "(SDL) Enable OpenGL Backend" FORCE)
  245. endif()
  246. if (LOVE_USE_SDL3)
  247. message(STATUS "-----------------------------------------------------")
  248. message(STATUS "Configuring: SDL3 ${MEGA_SDL3_VER}")
  249. message(STATUS "-----------------------------------------------------")
  250. add_subdirectory("libs/SDL3" ${CMAKE_BINARY_DIR}/SDL3)
  251. set(MEGA_SDL3 SDL3-shared)
  252. set(MEGA_SDL2 )
  253. set(MEGA_SDL2MAIN )
  254. else()
  255. message(STATUS "-----------------------------------------------------")
  256. message(STATUS "Configuring: SDL2 ${MEGA_SDL2_VER}")
  257. message(STATUS "-----------------------------------------------------")
  258. add_subdirectory("libs/SDL2" ${CMAKE_BINARY_DIR}/SDL2)
  259. set(MEGA_SDL2 SDL2)
  260. set(MEGA_SDL2MAIN SDL2main)
  261. set(MEGA_SDL3 )
  262. endif()
  263. message(STATUS "-----------------------------------------------------")
  264. message(STATUS "Configuring: openal-soft ${MEGA_OPENAL_VER}")
  265. message(STATUS "-----------------------------------------------------")
  266. set(ALSOFT_UTILS OFF CACHE BOOL "Build utility programs" FORCE)
  267. set(ALSOFT_NO_CONFIG_UTIL ON CACHE BOOL "Disable building the alsoft-config utility" FORCE)
  268. set(ALSOFT_EXAMPLES OFF CACHE BOOL "Build example programs" FORCE)
  269. set(ALSOFT_INSTALL OFF CACHE BOOL "Install main library" FORCE)
  270. set(ALSOFT_INSTALL_CONFIG OFF CACHE BOOL "Install alsoft.conf sample configuration file" FORCE)
  271. set(ALSOFT_INSTALL_HRTF_DATA OFF CACHE BOOL "Install HRTF data files" FORCE)
  272. set(ALSOFT_INSTALL_AMBDEC_PRESETS OFF CACHE BOOL "Install AmbDec preset files" FORCE)
  273. set(ALSOFT_INSTALL_EXAMPLES OFF CACHE BOOL "Install example programs (alplay, alstream, ...)" FORCE)
  274. set(ALSOFT_INSTALL_UTILS OFF CACHE BOOL "Install utility programs (openal-info, alsoft-config, ...)" FORCE)
  275. if(ANDROID)
  276. set(ALSOFT_REQUIRE_OBOE ON CACHE BOOL "Require Oboe backend" FORCE)
  277. set(ALSOFT_REQUIRE_OPENSL ON CACHE BOOL "Require OpenSL backend" FORCE)
  278. endif()
  279. add_subdirectory("libs/openal-soft" ${CMAKE_BINARY_DIR}/openal-soft)
  280. set(MEGA_OPENAL ${OPENAL_LIB_NAME})
  281. message(STATUS "-----------------------------------------------------")
  282. message(STATUS "Configuring: libmodplug ${MEGA_MODPLUG_VER}")
  283. message(STATUS "-----------------------------------------------------")
  284. add_subdirectory("libs/libmodplug-${MEGA_MODPLUG_VER}" ${CMAKE_BINARY_DIR}/libmodplug)
  285. set(MEGA_MODPLUG modplug-static)
  286. # LuaJIT
  287. if(MSVC)
  288. message(STATUS "-----------------------------------------------------")
  289. message(STATUS "Configuring: LuaJIT ${MEGA_LUAJIT_VER}")
  290. message(STATUS "-----------------------------------------------------")
  291. set(MEGA_LUAJIT_DIR "LuaJIT")
  292. # Copy LuaJIT source to binary dir. LuaJIT builds in-source,
  293. # and we don't want to modify the original source tree, so
  294. # we copy it.
  295. file(COPY libs/${MEGA_LUAJIT_DIR} DESTINATION ${CMAKE_BINARY_DIR}/libs)
  296. set(MEGA_LUAJIT_SOURCE_DIR ${CMAKE_BINARY_DIR}/libs/${MEGA_LUAJIT_DIR})
  297. set(MEGA_LUAJIT_BUILD_BAT "
  298. if not defined DevEnvDir (
  299. call \"${MEGA_MSVC_VCVARSALL_BAT}\" ${MEGA_MSVC_VCVARSALL_BAT_ARG}
  300. )
  301. cd \"${MEGA_LUAJIT_SOURCE_DIR}/src\"
  302. cl
  303. msvcbuild.bat amalg
  304. ")
  305. file(WRITE ${MEGA_LUAJIT_SOURCE_DIR}/megabuild.bat ${MEGA_LUAJIT_BUILD_BAT})
  306. ExternalProject_Add(luajit
  307. SOURCE_DIR ${MEGA_LUAJIT_SOURCE_DIR}
  308. BUILD_IN_SOURCE 1
  309. CONFIGURE_COMMAND ""
  310. BUILD_COMMAND "${MEGA_LUAJIT_SOURCE_DIR}/megabuild.bat"
  311. INSTALL_COMMAND cmake -E make_directory ${CMAKE_BINARY_DIR}/bin
  312. COMMAND cmake -E copy ${MEGA_LUAJIT_SOURCE_DIR}/src/lua51.dll ${CMAKE_BINARY_DIR}/bin
  313. COMMAND cmake -E copy ${MEGA_LUAJIT_SOURCE_DIR}/src/lua51.lib ${CMAKE_BINARY_DIR}/bin
  314. BUILD_BYPRODUCTS "${CMAKE_BINARY_DIR}/bin/lua51.lib" "${CMAKE_BINARY_DIR}/bin/lua51.dll"
  315. )
  316. set_target_properties(luajit PROPERTIES
  317. INTERFACE_INCLUDE_DIRECTORIES "${MEGA_LUAJIT_SOURCE_DIR}/src"
  318. IMPORTED_IMPLIB "${CMAKE_BINARY_DIR}/bin/lua51.lib"
  319. IMPORTED_LOCATION "${CMAKE_BINARY_DIR}/bin/lua51.dll"
  320. )
  321. set(MEGA_LUAJIT_LIB ${CMAKE_BINARY_DIR}/bin/lua51.lib)
  322. set(MEGA_LUAJIT_DLL ${CMAKE_BINARY_DIR}/bin/lua51.dll)
  323. set(MEGA_LUAJIT_INCLUDE ${MEGA_LUAJIT_SOURCE_DIR}/src)
  324. elseif(ANDROID)
  325. # LuaJIT is prebuilt in Android
  326. message(STATUS "-----------------------------------------------------")
  327. message(STATUS "Configuring: LuaJIT ${MEGA_LUAJIT_VER}")
  328. message(STATUS "-----------------------------------------------------")
  329. set(MEGA_LUAJIT_DIR "${CMAKE_CURRENT_SOURCE_DIR}/libs/LuaJIT")
  330. add_library(luajit IMPORTED SHARED GLOBAL)
  331. set_target_properties(luajit PROPERTIES
  332. IMPORTED_LOCATION ${MEGA_LUAJIT_DIR}/android/${ANDROID_ABI}/libluajit.so
  333. )
  334. target_include_directories(luajit INTERFACE ${MEGA_LUAJIT_DIR}/src ${MEGA_LUAJIT_DIR}/android/${ANDROID_ABI})
  335. set(MEGA_LUAJIT_LIB ${MEGA_LUAJIT_DIR}/android/${ANDROID_ABI}/libluajit.so)
  336. set(MEGA_LUAJIT_DLL)
  337. set(MEGA_LUAJIT_INCLUDE ${MEGA_LUAJIT_DIR}/src ${MEGA_LUAJIT_DIR}/android/${ANDROID_ABI})
  338. set(LUA_FOUND ON)
  339. set(LUA_INCLUDE_DIR ${MEGA_LUAJIT_INCLUDE})
  340. set(LUA_LIBRARY luajit)
  341. set(LUA_VERSION_MAJOR 5)
  342. set(LUA_VERSION_MINOR 1)
  343. set(LUA_VERSION_PATCH 5)
  344. set(LUA_VERSION_STRING "LuaJIT ${MEGA_LUAJIT_VER}")
  345. endif()
  346. set(MEGA_3P
  347. ${MEGA_ZLIB}
  348. ${MEGA_LUA51}
  349. ${MEGA_LIBOGG}
  350. ${MEGA_LIBVORBIS}
  351. ${MEGA_LIBVORBISFILE}
  352. ${MEGA_LIBTHEORA}
  353. ${MEGA_FREETYPE}
  354. ${MEGA_SDL3}
  355. ${MEGA_SDL2}
  356. ${MEGA_SDL2MAIN}
  357. ${MEGA_OPENAL}
  358. ${MEGA_MODPLUG}
  359. )
  360. # Set to directory of love source. Defaults to ./libs/love.
  361. if(NOT MEGA_LOVE)
  362. set(MEGA_LOVE ${CMAKE_CURRENT_SOURCE_DIR}/libs/love)
  363. endif()
  364. if(EXISTS ${MEGA_LOVE}/CMakeLists.txt)
  365. message(STATUS "-----------------------------------------------------")
  366. message(STATUS "Configuring: love")
  367. message(STATUS "-----------------------------------------------------")
  368. add_subdirectory(${MEGA_LOVE} ${CMAKE_BINARY_DIR}/love)
  369. # Turn off third-party warnings when building with LOVE.
  370. foreach(MEGA_LIB ${MEGA_3P})
  371. disable_warnings(${MEGA_LIB})
  372. endforeach()
  373. if(MSVC)
  374. set_property(DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} PROPERTY VS_STARTUP_PROJECT love)
  375. endif()
  376. else()
  377. message(STATUS "LOVE was not found")
  378. endif()
  379. link_directories(${SDL_LINK_DIR})
  380. add_executable(megatest src/test.cpp)
  381. target_link_libraries(megatest ${MEGA_3P})
  382. add_move_dll(megatest ${MEGA_SDL2} ${MEGA_SDL3})
  383. add_move_dll(megatest ${MEGA_OPENAL})
  384. add_move_dll(megatest ${MEGA_LUA51})