CMakeLists.txt 7.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262
  1. if(ENABLE_INNOEXTRACT)
  2. add_subdirectory("lib/innoextract")
  3. endif()
  4. set(launcher_SRCS
  5. StdInc.cpp
  6. aboutProject/aboutproject_moc.cpp
  7. modManager/cdownloadmanager_moc.cpp
  8. modManager/modstateitemmodel_moc.cpp
  9. modManager/cmodlistview_moc.cpp
  10. modManager/modstatecontroller.cpp
  11. modManager/modstatemodel.cpp
  12. modManager/modstate.cpp
  13. modManager/imageviewer_moc.cpp
  14. modManager/chroniclesextractor.cpp
  15. settingsView/csettingsview_moc.cpp
  16. startGame/StartGameTab.cpp
  17. firstLaunch/firstlaunch_moc.cpp
  18. main.cpp
  19. helper.cpp
  20. innoextract.cpp
  21. mainwindow_moc.cpp
  22. languages.cpp
  23. updatedialog_moc.cpp
  24. prepare.cpp
  25. )
  26. if(APPLE_IOS)
  27. list(APPEND launcher_SRCS
  28. ios/launchGame.m
  29. ios/revealdirectoryinfiles.h
  30. ios/revealdirectoryinfiles.mm
  31. ios/selectdirectory.h
  32. ios/selectdirectory.mm
  33. )
  34. endif()
  35. set(launcher_HEADERS
  36. StdInc.h
  37. aboutProject/aboutproject_moc.h
  38. modManager/cdownloadmanager_moc.h
  39. modManager/modstateitemmodel_moc.h
  40. modManager/cmodlistview_moc.h
  41. modManager/modstatecontroller.h
  42. modManager/modstatemodel.h
  43. modManager/modstate.h
  44. modManager/imageviewer_moc.h
  45. modManager/chroniclesextractor.h
  46. settingsView/csettingsview_moc.h
  47. startGame/StartGameTab.h
  48. firstLaunch/firstlaunch_moc.h
  49. mainwindow_moc.h
  50. languages.h
  51. updatedialog_moc.h
  52. main.h
  53. helper.h
  54. innoextract.h
  55. prepare.h
  56. )
  57. set(launcher_FORMS
  58. aboutProject/aboutproject_moc.ui
  59. modManager/cmodlistview_moc.ui
  60. modManager/imageviewer_moc.ui
  61. settingsView/csettingsview_moc.ui
  62. firstLaunch/firstlaunch_moc.ui
  63. mainwindow_moc.ui
  64. startGame/StartGameTab.ui
  65. updatedialog_moc.ui
  66. )
  67. set(launcher_RESOURCES
  68. resources.qrc
  69. )
  70. set(translationsDir "translation")
  71. set(launcher_TS
  72. "${translationsDir}/chinese.ts"
  73. "${translationsDir}/czech.ts"
  74. "${translationsDir}/english.ts"
  75. "${translationsDir}/french.ts"
  76. "${translationsDir}/german.ts"
  77. "${translationsDir}/hungarian.ts"
  78. "${translationsDir}/polish.ts"
  79. "${translationsDir}/portuguese.ts"
  80. "${translationsDir}/russian.ts"
  81. "${translationsDir}/spanish.ts"
  82. "${translationsDir}/swedish.ts"
  83. "${translationsDir}/ukrainian.ts"
  84. "${translationsDir}/vietnamese.ts"
  85. )
  86. if(ENABLE_TRANSLATIONS)
  87. if(TARGET Qt5::Core)
  88. file(MAKE_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/${translationsDir}")
  89. set_source_files_properties(${launcher_TS} PROPERTIES OUTPUT_LOCATION "${translationsDir}")
  90. qt5_add_translation(launcher_QM ${launcher_TS})
  91. set(translationsResource "${CMAKE_CURRENT_BINARY_DIR}/translations.qrc")
  92. list(APPEND launcher_RESOURCES "${translationsResource}")
  93. set(rccQmFiles "")
  94. foreach(qmFile ${launcher_QM})
  95. string(APPEND rccQmFiles "<file>${qmFile}</file>\n")
  96. endforeach()
  97. file(WRITE "${translationsResource}"
  98. "<!DOCTYPE RCC>
  99. <RCC version=\"1.0\">
  100. <qresource prefix=\"/\">
  101. ${rccQmFiles}
  102. </qresource>
  103. </RCC>"
  104. )
  105. endif()
  106. endif()
  107. if(WIN32)
  108. set(launcher_ICON VCMI_launcher.rc)
  109. endif()
  110. assign_source_group(${launcher_SRCS} ${launcher_HEADERS} ${launcher_RESOURCES} ${launcher_TS} ${launcher_ICON})
  111. set(CMAKE_AUTOMOC ON)
  112. set(CMAKE_AUTOUIC ON)
  113. set(CMAKE_AUTORCC ON)
  114. if(POLICY CMP0071)
  115. cmake_policy(SET CMP0071 NEW)
  116. endif()
  117. # As moc files are generated in the binary dir, tell CMake
  118. # to always look for includes there:
  119. set(CMAKE_INCLUDE_CURRENT_DIR ON)
  120. if(ENABLE_SINGLE_APP_BUILD OR ANDROID)
  121. add_library(vcmilauncher OBJECT ${launcher_QM})
  122. else()
  123. add_executable(vcmilauncher WIN32 ${launcher_QM} ${launcher_ICON})
  124. endif()
  125. if(ENABLE_TRANSLATIONS)
  126. if(TARGET Qt6::Core)
  127. qt_add_translations(vcmilauncher
  128. TS_FILES ${launcher_TS}
  129. RESOURCE_PREFIX "/${translationsDir}"
  130. INCLUDE_DIRECTORIES
  131. ${CMAKE_CURRENT_BINARY_DIR})
  132. endif()
  133. endif()
  134. if(ANDROID)
  135. get_target_property(rccPath Qt${QT_VERSION_MAJOR}::rcc IMPORTED_LOCATION)
  136. get_filename_component(qtDir "${rccPath}/../../" ABSOLUTE)
  137. set(qtDir "${qtDir}" PARENT_SCOPE)
  138. function(generate_binary_resource resourceName resourceDir)
  139. file(CREATE_LINK "${resourceDir}" "${CMAKE_CURRENT_BINARY_DIR}/${resourceName}"
  140. COPY_ON_ERROR
  141. SYMBOLIC
  142. )
  143. set(qrcFile "${CMAKE_CURRENT_BINARY_DIR}/${resourceName}.qrc")
  144. execute_process(COMMAND
  145. "${rccPath}" --project
  146. WORKING_DIRECTORY "${resourceDir}"
  147. OUTPUT_VARIABLE rccOutput
  148. )
  149. # add parent directory
  150. string(REPLACE "<file>." "<file>${resourceName}" rccOutput "${rccOutput}")
  151. file(WRITE "${qrcFile}" "${rccOutput}")
  152. endfunction()
  153. generate_binary_resource("config" "${CMAKE_SOURCE_DIR}/config")
  154. list(APPEND launcher_RESOURCES "${CMAKE_CURRENT_BINARY_DIR}/config.qrc")
  155. generate_binary_resource("Mods" "${CMAKE_SOURCE_DIR}/Mods")
  156. list(APPEND launcher_RESOURCES "${CMAKE_CURRENT_BINARY_DIR}/Mods.qrc")
  157. endif()
  158. target_sources(vcmilauncher PRIVATE
  159. ${launcher_SRCS}
  160. ${launcher_HEADERS}
  161. ${launcher_RESOURCES}
  162. ${launcher_FORMS}
  163. )
  164. if(WIN32)
  165. set_target_properties(vcmilauncher
  166. PROPERTIES
  167. OUTPUT_NAME "VCMI_launcher"
  168. PROJECT_LABEL "VCMI_launcher"
  169. )
  170. # FIXME: Can't to get CMP0020 working with Vcpkg and CMake 3.8.2
  171. # So far I tried:
  172. # - cmake_minimum_required set to 2.8.11 globally and in this file
  173. # - cmake_policy in all possible places
  174. # - used NO_POLICY_SCOPE to make sure no other parts reset policies
  175. # Still nothing worked, warning kept appearing and WinMain didn't link automatically
  176. target_link_libraries(vcmilauncher Qt${QT_VERSION_MAJOR}::WinMain)
  177. endif()
  178. if(APPLE)
  179. # This makes Xcode project prettier by moving vcmilauncher_autogen directory into vcmiclient subfolder
  180. set_property(GLOBAL PROPERTY AUTOGEN_TARGETS_FOLDER vcmilauncher)
  181. endif()
  182. if(ANDROID)
  183. target_link_libraries(vcmilauncher Qt${QT_VERSION_MAJOR}::AndroidExtras)
  184. elseif(NOT APPLE_IOS)
  185. target_link_libraries(vcmilauncher SDL2::SDL2)
  186. endif()
  187. if(ENABLE_STATIC_LIBS OR NOT (ENABLE_EDITOR AND ENABLE_LAUNCHER))
  188. target_compile_definitions(vcmilauncher PRIVATE VCMIQT_STATIC)
  189. endif()
  190. target_link_libraries(vcmilauncher vcmi vcmiqt Qt${QT_VERSION_MAJOR}::Widgets Qt${QT_VERSION_MAJOR}::Network)
  191. target_include_directories(vcmilauncher
  192. PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}
  193. )
  194. vcmi_set_output_dir(vcmilauncher "")
  195. enable_pch(vcmilauncher)
  196. if(ENABLE_INNOEXTRACT)
  197. target_compile_definitions(vcmilauncher PRIVATE ENABLE_INNOEXTRACT)
  198. target_link_libraries(vcmilauncher innoextract)
  199. endif()
  200. if(APPLE_IOS)
  201. target_link_libraries(vcmilauncher
  202. iOS_utils
  203. "-framework UniformTypeIdentifiers"
  204. )
  205. # TODO: remove after switching prebuilt deps to a newer Conan's Qt recipe
  206. if(XCODE_VERSION VERSION_GREATER_EQUAL 14.0)
  207. target_link_libraries(vcmilauncher "-framework IOKit")
  208. endif()
  209. # workaround https://github.com/conan-io/conan-center-index/issues/13332
  210. if(USING_CONAN)
  211. file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/QIOSIntegrationPlugin.h
  212. "#include <QtPlugin>\nQ_IMPORT_PLUGIN(QIOSIntegrationPlugin)"
  213. )
  214. target_link_libraries(vcmilauncher
  215. Qt${QT_VERSION_MAJOR}::QIOSIntegrationPlugin
  216. qt::QIOSIntegrationPlugin
  217. )
  218. endif()
  219. elseif(ANDROID)
  220. set(androidSdkDir "$ENV{ANDROID_HOME}")
  221. configure_file(
  222. "${androidPackageSourceDir}/androiddeployqt.json.in"
  223. "${CMAKE_BINARY_DIR}/androiddeployqt.json"
  224. @ONLY
  225. )
  226. else()
  227. install(TARGETS vcmilauncher DESTINATION ${BIN_DIR})
  228. # Install icons and desktop file on Linux
  229. if(NOT WIN32 AND NOT APPLE)
  230. install(FILES "vcmilauncher.desktop" DESTINATION share/applications)
  231. install(FILES "eu.vcmi.VCMI.metainfo.xml" DESTINATION share/metainfo)
  232. endif()
  233. endif()