duckstation

duckstation, but archived from the revision just before upstream changed it to a proprietary software project, this version is the libre one
git clone https://git.neptards.moe/u3shit/duckstation.git
Log | Files | Refs | README | LICENSE

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)