CMakeLists.txt 8.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264
  1. set(CMAKE_AUTOMOC ON)
  2. set(CMAKE_AUTORCC ON)
  3. set(CMAKE_AUTOUIC ON)
  4. set(CMAKE_INCLUDE_CURRENT_DIR ON)
  5. set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${PROJECT_SOURCE_DIR}/CMakeModules)
  6. add_executable(yuzu
  7. Info.plist
  8. about_dialog.cpp
  9. about_dialog.h
  10. aboutdialog.ui
  11. applets/error.cpp
  12. applets/error.h
  13. applets/profile_select.cpp
  14. applets/profile_select.h
  15. applets/software_keyboard.cpp
  16. applets/software_keyboard.h
  17. applets/web_browser.cpp
  18. applets/web_browser.h
  19. bootmanager.cpp
  20. bootmanager.h
  21. compatdb.ui
  22. compatibility_list.cpp
  23. compatibility_list.h
  24. configuration/config.cpp
  25. configuration/config.h
  26. configuration/configuration_shared.cpp
  27. configuration/configuration_shared.h
  28. configuration/configure.ui
  29. configuration/configure_audio.cpp
  30. configuration/configure_audio.h
  31. configuration/configure_audio.ui
  32. configuration/configure_cpu.cpp
  33. configuration/configure_cpu.h
  34. configuration/configure_cpu.ui
  35. configuration/configure_cpu_debug.cpp
  36. configuration/configure_cpu_debug.h
  37. configuration/configure_cpu_debug.ui
  38. configuration/configure_debug.cpp
  39. configuration/configure_debug.h
  40. configuration/configure_debug.ui
  41. configuration/configure_dialog.cpp
  42. configuration/configure_dialog.h
  43. configuration/configure_filesystem.cpp
  44. configuration/configure_filesystem.h
  45. configuration/configure_filesystem.ui
  46. configuration/configure_general.cpp
  47. configuration/configure_general.h
  48. configuration/configure_general.ui
  49. configuration/configure_graphics.cpp
  50. configuration/configure_graphics.h
  51. configuration/configure_graphics.ui
  52. configuration/configure_graphics_advanced.cpp
  53. configuration/configure_graphics_advanced.h
  54. configuration/configure_graphics_advanced.ui
  55. configuration/configure_hotkeys.cpp
  56. configuration/configure_hotkeys.h
  57. configuration/configure_hotkeys.ui
  58. configuration/configure_input.cpp
  59. configuration/configure_input.h
  60. configuration/configure_input.ui
  61. configuration/configure_input_player.cpp
  62. configuration/configure_input_player.h
  63. configuration/configure_input_player.ui
  64. configuration/configure_input_simple.cpp
  65. configuration/configure_input_simple.h
  66. configuration/configure_input_simple.ui
  67. configuration/configure_mouse_advanced.cpp
  68. configuration/configure_mouse_advanced.h
  69. configuration/configure_mouse_advanced.ui
  70. configuration/configure_per_game.cpp
  71. configuration/configure_per_game.h
  72. configuration/configure_per_game.ui
  73. configuration/configure_per_game_addons.cpp
  74. configuration/configure_per_game_addons.h
  75. configuration/configure_per_game_addons.ui
  76. configuration/configure_profile_manager.cpp
  77. configuration/configure_profile_manager.h
  78. configuration/configure_profile_manager.ui
  79. configuration/configure_service.cpp
  80. configuration/configure_service.h
  81. configuration/configure_service.ui
  82. configuration/configure_system.cpp
  83. configuration/configure_system.h
  84. configuration/configure_system.ui
  85. configuration/configure_touchscreen_advanced.cpp
  86. configuration/configure_touchscreen_advanced.h
  87. configuration/configure_touchscreen_advanced.ui
  88. configuration/configure_ui.cpp
  89. configuration/configure_ui.h
  90. configuration/configure_ui.ui
  91. configuration/configure_web.cpp
  92. configuration/configure_web.h
  93. configuration/configure_web.ui
  94. debugger/console.cpp
  95. debugger/console.h
  96. debugger/profiler.cpp
  97. debugger/profiler.h
  98. debugger/wait_tree.cpp
  99. debugger/wait_tree.h
  100. discord.h
  101. game_list.cpp
  102. game_list.h
  103. game_list_p.h
  104. game_list_worker.cpp
  105. game_list_worker.h
  106. hotkeys.cpp
  107. hotkeys.h
  108. install_dialog.cpp
  109. install_dialog.h
  110. loading_screen.cpp
  111. loading_screen.h
  112. loading_screen.ui
  113. main.cpp
  114. main.h
  115. main.ui
  116. uisettings.cpp
  117. uisettings.h
  118. util/limitable_input_dialog.cpp
  119. util/limitable_input_dialog.h
  120. util/sequence_dialog/sequence_dialog.cpp
  121. util/sequence_dialog/sequence_dialog.h
  122. util/util.cpp
  123. util/util.h
  124. compatdb.cpp
  125. compatdb.h
  126. yuzu.rc
  127. )
  128. file(GLOB COMPAT_LIST
  129. ${PROJECT_BINARY_DIR}/dist/compatibility_list/compatibility_list.qrc
  130. ${PROJECT_BINARY_DIR}/dist/compatibility_list/compatibility_list.json)
  131. file(GLOB_RECURSE ICONS ${PROJECT_SOURCE_DIR}/dist/icons/*)
  132. file(GLOB_RECURSE THEMES ${PROJECT_SOURCE_DIR}/dist/qt_themes/*)
  133. if (ENABLE_QT_TRANSLATION)
  134. set(YUZU_QT_LANGUAGES "${PROJECT_SOURCE_DIR}/dist/languages" CACHE PATH "Path to the translation bundle for the Qt frontend")
  135. option(GENERATE_QT_TRANSLATION "Generate en.ts as the translation source file" OFF)
  136. # Update source TS file if enabled
  137. if (GENERATE_QT_TRANSLATION)
  138. get_target_property(SRCS yuzu SOURCES)
  139. qt5_create_translation(QM_FILES ${SRCS} ${UIS} ${YUZU_QT_LANGUAGES}/en.ts)
  140. add_custom_target(translation ALL DEPENDS ${YUZU_QT_LANGUAGES}/en.ts)
  141. endif()
  142. # Find all TS files except en.ts
  143. file(GLOB_RECURSE LANGUAGES_TS ${YUZU_QT_LANGUAGES}/*.ts)
  144. list(REMOVE_ITEM LANGUAGES_TS ${YUZU_QT_LANGUAGES}/en.ts)
  145. # Compile TS files to QM files
  146. qt5_add_translation(LANGUAGES_QM ${LANGUAGES_TS})
  147. # Build a QRC file from the QM file list
  148. set(LANGUAGES_QRC ${CMAKE_CURRENT_BINARY_DIR}/languages.qrc)
  149. file(WRITE ${LANGUAGES_QRC} "<RCC><qresource prefix=\"languages\">\n")
  150. foreach (QM ${LANGUAGES_QM})
  151. get_filename_component(QM_FILE ${QM} NAME)
  152. file(APPEND ${LANGUAGES_QRC} "<file>${QM_FILE}</file>\n")
  153. endforeach (QM)
  154. file(APPEND ${LANGUAGES_QRC} "</qresource></RCC>")
  155. # Add the QRC file to package in all QM files
  156. qt5_add_resources(LANGUAGES ${LANGUAGES_QRC})
  157. else()
  158. set(LANGUAGES)
  159. endif()
  160. target_sources(yuzu
  161. PRIVATE
  162. ${COMPAT_LIST}
  163. ${ICONS}
  164. ${LANGUAGES}
  165. ${THEMES}
  166. )
  167. if (APPLE)
  168. set(MACOSX_ICON "../../dist/yuzu.icns")
  169. set_source_files_properties(${MACOSX_ICON} PROPERTIES MACOSX_PACKAGE_LOCATION Resources)
  170. target_sources(yuzu PRIVATE ${MACOSX_ICON})
  171. set_target_properties(yuzu PROPERTIES MACOSX_BUNDLE TRUE)
  172. set_target_properties(yuzu PROPERTIES MACOSX_BUNDLE_INFO_PLIST ${CMAKE_CURRENT_SOURCE_DIR}/Info.plist)
  173. elseif(WIN32)
  174. # compile as a win32 gui application instead of a console application
  175. target_link_libraries(yuzu PRIVATE Qt5::WinMain)
  176. if(MSVC)
  177. set_target_properties(yuzu PROPERTIES LINK_FLAGS_RELEASE "/SUBSYSTEM:WINDOWS")
  178. elseif(MINGW)
  179. set_target_properties(yuzu PROPERTIES LINK_FLAGS_RELEASE "-mwindows")
  180. endif()
  181. endif()
  182. create_target_directory_groups(yuzu)
  183. target_link_libraries(yuzu PRIVATE common core input_common video_core)
  184. target_link_libraries(yuzu PRIVATE Boost::boost glad Qt5::Widgets)
  185. target_link_libraries(yuzu PRIVATE ${PLATFORM_LIBRARIES} Threads::Threads)
  186. if (ENABLE_VULKAN AND NOT WIN32)
  187. target_include_directories(yuzu PRIVATE ${Qt5Gui_PRIVATE_INCLUDE_DIRS})
  188. endif()
  189. target_compile_definitions(yuzu PRIVATE
  190. # Use QStringBuilder for string concatenation to reduce
  191. # the overall number of temporary strings created.
  192. -DQT_USE_QSTRINGBUILDER
  193. # Disable implicit conversions from/to C strings
  194. -DQT_NO_CAST_FROM_ASCII
  195. -DQT_NO_CAST_TO_ASCII
  196. # Disable implicit type narrowing in signal/slot connect() calls.
  197. -DQT_NO_NARROWING_CONVERSIONS_IN_CONNECT
  198. # Disable unsafe overloads of QProcess' start() function.
  199. -DQT_NO_PROCESS_COMBINED_ARGUMENT_START
  200. # Disable implicit QString->QUrl conversions to enforce use of proper resolving functions.
  201. -DQT_NO_URL_CAST_FROM_STRING
  202. )
  203. if (YUZU_ENABLE_COMPATIBILITY_REPORTING)
  204. target_compile_definitions(yuzu PRIVATE -DYUZU_ENABLE_COMPATIBILITY_REPORTING)
  205. endif()
  206. if (USE_DISCORD_PRESENCE)
  207. target_sources(yuzu PUBLIC
  208. discord_impl.cpp
  209. discord_impl.h
  210. )
  211. target_link_libraries(yuzu PRIVATE discord-rpc)
  212. target_compile_definitions(yuzu PRIVATE -DUSE_DISCORD_PRESENCE)
  213. endif()
  214. if (YUZU_USE_QT_WEB_ENGINE)
  215. target_link_libraries(yuzu PRIVATE Qt5::WebEngineCore Qt5::WebEngineWidgets)
  216. target_compile_definitions(yuzu PRIVATE -DYUZU_USE_QT_WEB_ENGINE)
  217. endif ()
  218. if (YUZU_ENABLE_BOXCAT)
  219. target_compile_definitions(yuzu PRIVATE -DYUZU_ENABLE_BOXCAT)
  220. endif ()
  221. if(UNIX AND NOT APPLE)
  222. install(TARGETS yuzu RUNTIME DESTINATION "${CMAKE_INSTALL_PREFIX}/bin")
  223. endif()
  224. if (MSVC)
  225. include(CopyYuzuQt5Deps)
  226. include(CopyYuzuSDLDeps)
  227. include(CopyYuzuUnicornDeps)
  228. copy_yuzu_Qt5_deps(yuzu)
  229. copy_yuzu_SDL_deps(yuzu)
  230. copy_yuzu_unicorn_deps(yuzu)
  231. endif()
  232. if (NOT APPLE)
  233. target_compile_definitions(yuzu PRIVATE HAS_OPENGL)
  234. endif()
  235. if (ENABLE_VULKAN)
  236. target_include_directories(yuzu PRIVATE ../../externals/Vulkan-Headers/include)
  237. target_compile_definitions(yuzu PRIVATE HAS_VULKAN)
  238. endif()