CMakeLists.txt (10098B)
1 find_package(Qt6 6.7.2 COMPONENTS Core Gui Widgets LinguistTools REQUIRED) 2 3 include(CopyBaseTranslations) 4 5 set(CMAKE_AUTOMOC ON) 6 set(CMAKE_AUTOUIC ON) 7 8 set(SRCS 9 aboutdialog.cpp 10 aboutdialog.h 11 aboutdialog.ui 12 achievementlogindialog.cpp 13 achievementlogindialog.h 14 achievementlogindialog.ui 15 achievementsettingswidget.cpp 16 achievementsettingswidget.h 17 achievementsettingswidget.ui 18 advancedsettingswidget.cpp 19 advancedsettingswidget.h 20 advancedsettingswidget.ui 21 audioexpansionsettingsdialog.ui 22 audiosettingswidget.cpp 23 audiosettingswidget.h 24 audiosettingswidget.ui 25 audiostretchsettingsdialog.ui 26 autoupdaterdialog.cpp 27 autoupdaterdialog.h 28 autoupdaterdialog.ui 29 biossettingswidget.cpp 30 biossettingswidget.h 31 biossettingswidget.ui 32 cheatcodeeditordialog.cpp 33 cheatcodeeditordialog.h 34 cheatcodeeditordialog.ui 35 cheatmanagerwindow.cpp 36 cheatmanagerwindow.h 37 cheatmanagerwindow.ui 38 collapsiblewidget.cpp 39 collapsiblewidget.h 40 colorpickerbutton.cpp 41 colorpickerbutton.h 42 consolesettingswidget.cpp 43 consolesettingswidget.h 44 consolesettingswidget.ui 45 controllerbindingwidget_analog_controller.ui 46 controllerbindingwidget_analog_joystick.ui 47 controllerbindingwidget_digital_controller.ui 48 controllerbindingwidget_guncon.ui 49 controllerbindingwidget_justifier.ui 50 controllerbindingwidget_mouse.ui 51 controllerbindingwidget_negcon.ui 52 controllerbindingwidget_negconrumble.ui 53 controllerbindingwidgets.cpp 54 controllerbindingwidgets.h 55 controllerbindingwidget.ui 56 controllerglobalsettingswidget.cpp 57 controllerglobalsettingswidget.h 58 controllerglobalsettingswidget.ui 59 controllerledsettingsdialog.ui 60 controllermacroeditwidget.ui 61 controllermacrowidget.ui 62 controllersettingswindow.cpp 63 controllersettingswindow.h 64 controllersettingswindow.ui 65 controllersettingwidgetbinder.h 66 coverdownloaddialog.cpp 67 coverdownloaddialog.h 68 coverdownloaddialog.ui 69 debuggeraddbreakpointdialog.ui 70 debuggermodels.cpp 71 debuggermodels.h 72 debuggerwindow.cpp 73 debuggerwindow.h 74 debuggerwindow.ui 75 displaywidget.cpp 76 displaywidget.h 77 emptygamelistwidget.ui 78 emulationsettingswidget.cpp 79 emulationsettingswidget.h 80 emulationsettingswidget.ui 81 foldersettingswidget.cpp 82 foldersettingswidget.h 83 foldersettingswidget.ui 84 gamelistmodel.cpp 85 gamelistmodel.h 86 gamelistrefreshthread.cpp 87 gamelistrefreshthread.h 88 gamelistsettingswidget.cpp 89 gamelistsettingswidget.h 90 gamelistsettingswidget.ui 91 gamelistwidget.cpp 92 gamelistwidget.h 93 gamelistwidget.ui 94 gamesummarywidget.cpp 95 gamesummarywidget.h 96 gamesummarywidget.ui 97 graphicssettingswidget.cpp 98 graphicssettingswidget.h 99 graphicssettingswidget.ui 100 hotkeysettingswidget.cpp 101 hotkeysettingswidget.h 102 inputbindingdialog.cpp 103 inputbindingdialog.h 104 inputbindingdialog.ui 105 inputbindingwidgets.cpp 106 inputbindingwidgets.h 107 interfacesettingswidget.cpp 108 interfacesettingswidget.h 109 interfacesettingswidget.ui 110 logwindow.cpp 111 logwindow.h 112 mainwindow.cpp 113 mainwindow.h 114 mainwindow.ui 115 memorycardeditorwindow.cpp 116 memorycardeditorwindow.h 117 memorycardeditorwindow.ui 118 memorycardsettingswidget.cpp 119 memorycardsettingswidget.h 120 memoryscannerwindow.cpp 121 memoryscannerwindow.h 122 memoryscannerwindow.ui 123 memoryviewwidget.cpp 124 memoryviewwidget.h 125 postprocessingsettingswidget.cpp 126 postprocessingsettingswidget.h 127 postprocessingchainconfigwidget.ui 128 qthost.cpp 129 qthost.h 130 qtkeycodes.cpp 131 qtprogresscallback.cpp 132 qtprogresscallback.h 133 qtthemes.cpp 134 qttranslations.cpp 135 qtutils.cpp 136 qtutils.h 137 resource.h 138 selectdiscdialog.cpp 139 selectdiscdialog.h 140 selectdiscdialog.ui 141 settingswindow.cpp 142 settingswindow.h 143 settingswindow.ui 144 settingwidgetbinder.h 145 setupwizarddialog.cpp 146 setupwizarddialog.h 147 setupwizarddialog.ui 148 ) 149 150 set(TS_FILES 151 translations/duckstation-qt_de.ts 152 translations/duckstation-qt_en.ts 153 translations/duckstation-qt_es.ts 154 translations/duckstation-qt_es-ES.ts 155 translations/duckstation-qt_fr.ts 156 translations/duckstation-qt_he.ts 157 translations/duckstation-qt_id.ts 158 translations/duckstation-qt_it.ts 159 translations/duckstation-qt_ja.ts 160 translations/duckstation-qt_ko.ts 161 translations/duckstation-qt_nl.ts 162 translations/duckstation-qt_pl.ts 163 translations/duckstation-qt_pt-BR.ts 164 translations/duckstation-qt_pt-PT.ts 165 translations/duckstation-qt_ru.ts 166 translations/duckstation-qt_tr.ts 167 translations/duckstation-qt_zh-CN.ts 168 ) 169 170 add_executable(duckstation-qt ${SRCS} ${QM_FILES}) 171 target_precompile_headers(duckstation-qt PRIVATE "pch.h") 172 target_include_directories(duckstation-qt PRIVATE "${Qt6Gui_PRIVATE_INCLUDE_DIRS}" "${CMAKE_CURRENT_SOURCE_DIR}") 173 target_link_libraries(duckstation-qt PRIVATE core common imgui minizip scmversion Qt6::Core Qt6::Gui Qt6::Widgets) 174 175 # Our Qt builds may have exceptions on, so force them off. 176 target_compile_definitions(duckstation-qt PRIVATE QT_NO_EXCEPTIONS) 177 178 add_core_resources(duckstation-qt) 179 180 if(WIN32) 181 target_sources(duckstation-qt PRIVATE 182 duckstation-qt.rc 183 vcruntimecheck.cpp 184 ) 185 186 # We want a Windows subsystem application not console. 187 set_target_properties(duckstation-qt PROPERTIES 188 WIN32_EXECUTABLE TRUE 189 DEBUG_POSTFIX "-debug") 190 191 # Copy in Qt DLLs. Borrowed from Dolphin. 192 get_target_property(MOC_EXECUTABLE_LOCATION Qt6::moc IMPORTED_LOCATION) 193 get_filename_component(QT_BINARY_DIRECTORY "${MOC_EXECUTABLE_LOCATION}" DIRECTORY) 194 find_program(WINDEPLOYQT_EXE windeployqt HINTS "${QT_BINARY_DIRECTORY}") 195 add_custom_command(TARGET duckstation-qt POST_BUILD 196 COMMAND "${CMAKE_COMMAND}" -E env PATH="${QT_BINARY_DIRECTORY}" 197 "${WINDEPLOYQT_EXE}" --libdir="${CMAKE_RUNTIME_OUTPUT_DIRECTORY}" 198 --plugindir="${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/QtPlugins" 199 $<IF:$<CONFIG:Debug>,--debug,--release> 200 --no-compiler-runtime 201 --no-system-d3d-compiler 202 --no-system-dxc-compiler 203 --no-translations 204 "$<TARGET_FILE:duckstation-qt>" 205 ) 206 add_custom_command(TARGET duckstation-qt POST_BUILD 207 COMMAND ${CMAKE_COMMAND} -E copy_if_different "${CMAKE_CURRENT_SOURCE_DIR}/qt.conf.win" "${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/qt.conf" 208 ) 209 #set_source_files_properties(${TS_FILES} PROPERTIES OUTPUT_LOCATION "${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/translations") 210 211 set(DEPS_TO_COPY cpuinfo.dll discord-rpc.dll freetype.dll harfbuzz.dll libjpeg.dll libpng16.dll libsharpyuv.dll libwebp.dll 212 SDL2.dll shaderc_shared.dll soundtouch.dll spirv-cross-c-shared.dll zlib1.dll zstd.dll) 213 foreach(DEP ${DEPS_TO_COPY}) 214 list(APPEND DEP_BINS "${CMAKE_PREFIX_PATH}/bin/${DEP}") 215 endforeach() 216 add_custom_command(TARGET duckstation-qt POST_BUILD 217 COMMAND ${CMAKE_COMMAND} -E copy_if_different ${DEP_BINS} "${CMAKE_RUNTIME_OUTPUT_DIRECTORY}" 218 ) 219 if(CMAKE_BUILD_TYPE MATCHES "Debug") 220 get_property(WINPIXEVENTRUNTIME_DLL TARGET WinPixEventRuntime::WinPixEventRuntime PROPERTY IMPORTED_LOCATION) 221 message(STATUS WP "${WINPIXEVENTRUNTIME_DLL}") 222 add_custom_command(TARGET duckstation-qt POST_BUILD 223 COMMAND ${CMAKE_COMMAND} -E copy_if_different "${WINPIXEVENTRUNTIME_DLL}" "${CMAKE_RUNTIME_OUTPUT_DIRECTORY}" 224 ) 225 endif() 226 elseif(APPLE) 227 # Don't generate a bundle for XCode, it makes code signing fail... 228 if(NOT CMAKE_GENERATOR MATCHES "Xcode") 229 get_scm_version() 230 set(BUNDLE_PATH ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/DuckStation.app) 231 set_target_properties(duckstation-qt PROPERTIES 232 MACOSX_BUNDLE true 233 MACOSX_BUNDLE_INFO_PLIST ${CMAKE_CURRENT_SOURCE_DIR}/Info.plist.in 234 OUTPUT_NAME DuckStation 235 ) 236 237 # Inject Qt Libraries into bundle. 238 if(NOT SKIP_POSTPROCESS_BUNDLE) 239 find_program(MACDEPLOYQT_EXE macdeployqt HINTS "${QT_BINARY_DIRECTORY}") 240 add_custom_target(duckstation-postprocess-bundle ALL 241 COMMAND "${MACDEPLOYQT_EXE}" "${BUNDLE_PATH}" -no-strip 242 ) 243 add_dependencies(duckstation-postprocess-bundle duckstation-qt) 244 endif() 245 endif() 246 247 # Copy icon into the bundle 248 target_sources(duckstation-qt PRIVATE "${CMAKE_CURRENT_SOURCE_DIR}/DuckStation.icns") 249 set_source_files_properties("${CMAKE_CURRENT_SOURCE_DIR}/DuckStation.icns" PROPERTIES MACOSX_PACKAGE_LOCATION Resources) 250 endif() 251 252 if(ALLOW_INSTALL) 253 # Install main binary. 254 install(TARGETS duckstation-qt RUNTIME DESTINATION "${CMAKE_INSTALL_PREFIX}") 255 endif() 256 257 # Compile qrc to a binary file. 258 if(NOT APPLE) 259 set(RCC_FILE "${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/resources/duckstation-qt.rcc") 260 qt_add_binary_resources(duckstation-qt-rcc resources/duckstation-qt.qrc DESTINATION ${RCC_FILE} OPTIONS -no-compress) 261 add_dependencies(duckstation-qt duckstation-qt-rcc) 262 else() 263 set(RCC_FILE "${CMAKE_CURRENT_BINARY_DIR}/duckstation-qt.rcc") 264 qt_add_binary_resources(duckstation-qt-rcc resources/duckstation-qt.qrc DESTINATION ${RCC_FILE} OPTIONS -no-compress) 265 add_dependencies(duckstation-qt duckstation-qt-rcc) 266 target_sources(duckstation-qt PRIVATE ${RCC_FILE}) 267 set_source_files_properties(${RCC_FILE} PROPERTIES MACOSX_PACKAGE_LOCATION Resources) 268 endif() 269 270 271 # Translation setup. 272 qt_add_lrelease(duckstation-qt TS_FILES ${TS_FILES} QM_FILES_OUTPUT_VARIABLE QM_FILES) 273 if(NOT APPLE) 274 set(QM_OUTPUT_DIR "$<TARGET_FILE_DIR:duckstation-qt>/translations") 275 add_custom_command(TARGET duckstation-qt POST_BUILD COMMAND "${CMAKE_COMMAND}" -E make_directory "${QM_OUTPUT_DIR}") 276 foreach (QM_FILE IN LISTS QM_FILES) 277 get_filename_component(QM_FILE_NAME ${QM_FILE} NAME) 278 add_custom_command(TARGET duckstation-qt POST_BUILD COMMAND "${CMAKE_COMMAND}" -E copy_if_different "${QM_FILE}" "${QM_OUTPUT_DIR}/${QM_FILE_NAME}") 279 if(ALLOW_INSTALL) 280 install(FILES "${QM_FILE}" DESTINATION "${CMAKE_INSTALL_PREFIX}/translations") 281 endif() 282 endforeach() 283 else() 284 foreach (QM_FILE IN LISTS QM_FILES) 285 target_sources(duckstation-qt PRIVATE ${QM_FILE}) 286 set_source_files_properties(${QM_FILE} PROPERTIES MACOSX_PACKAGE_LOCATION Resources/translations) 287 endforeach() 288 endif() 289 copy_base_translations(duckstation-qt)