123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675 |
- if(POLICY CMP0084)
- # Disable trying to search for Qt3/4 if what we actually want is not found
- cmake_policy(SET CMP0084 NEW)
- endif()
- if (MSVC)
- if(_M_ARM_64)
- list(APPEND CMAKE_PREFIX_PATH "${CMAKE_SOURCE_DIR}/Externals/Qt/Qt6.5.1/ARM64")
- else()
- list(APPEND CMAKE_PREFIX_PATH "${CMAKE_SOURCE_DIR}/Externals/Qt/Qt6.5.1/x64")
- endif()
- endif()
- set(CMAKE_AUTOMOC ON)
- set(CMAKE_AUTORCC ON)
- find_package(Qt6 REQUIRED COMPONENTS Core Gui Widgets Svg)
- message(STATUS "Found Qt version ${Qt6_VERSION}")
- set_property(TARGET Qt6::Core PROPERTY INTERFACE_COMPILE_FEATURES "")
- add_executable(dolphin-emu
- AboutDialog.cpp
- AboutDialog.h
- CheatSearchFactoryWidget.cpp
- CheatSearchFactoryWidget.h
- CheatSearchWidget.cpp
- CheatSearchWidget.h
- CheatsManager.cpp
- CheatsManager.h
- Achievements/AchievementBox.cpp
- Achievements/AchievementBox.h
- Achievements/AchievementHeaderWidget.cpp
- Achievements/AchievementHeaderWidget.h
- Achievements/AchievementLeaderboardWidget.cpp
- Achievements/AchievementLeaderboardWidget.h
- Achievements/AchievementProgressWidget.cpp
- Achievements/AchievementProgressWidget.h
- Achievements/AchievementSettingsWidget.cpp
- Achievements/AchievementSettingsWidget.h
- Achievements/AchievementsWindow.cpp
- Achievements/AchievementsWindow.h
- Config/ARCodeWidget.cpp
- Config/ARCodeWidget.h
- Config/CheatCodeEditor.cpp
- Config/CheatCodeEditor.h
- Config/CheatWarningWidget.cpp
- Config/CheatWarningWidget.h
- Config/CommonControllersWidget.cpp
- Config/CommonControllersWidget.h
- Config/ConfigControls/ConfigBool.cpp
- Config/ConfigControls/ConfigBool.h
- Config/ConfigControls/ConfigChoice.cpp
- Config/ConfigControls/ConfigChoice.h
- Config/ConfigControls/ConfigInteger.cpp
- Config/ConfigControls/ConfigInteger.h
- Config/ConfigControls/ConfigRadio.cpp
- Config/ConfigControls/ConfigRadio.h
- Config/ConfigControls/ConfigFloatSlider.cpp
- Config/ConfigControls/ConfigFloatSlider.h
- Config/ConfigControls/ConfigSlider.cpp
- Config/ConfigControls/ConfigSlider.h
- Config/ControllerInterface/ControllerInterfaceWindow.cpp
- Config/ControllerInterface/ControllerInterfaceWindow.h
- Config/ControllerInterface/DualShockUDPClientAddServerDialog.cpp
- Config/ControllerInterface/DualShockUDPClientAddServerDialog.h
- Config/ControllerInterface/DualShockUDPClientWidget.cpp
- Config/ControllerInterface/DualShockUDPClientWidget.h
- Config/ControllerInterface/ServerStringValidator.cpp
- Config/ControllerInterface/ServerStringValidator.h
- Config/ControllersWindow.cpp
- Config/ControllersWindow.h
- Config/FilesystemWidget.cpp
- Config/FilesystemWidget.h
- Config/FreeLookWidget.cpp
- Config/FreeLookWidget.h
- Config/FreeLookWindow.cpp
- Config/FreeLookWindow.h
- Config/GameConfigEdit.cpp
- Config/GameConfigEdit.h
- Config/GameConfigHighlighter.cpp
- Config/GameConfigHighlighter.h
- Config/GameConfigWidget.cpp
- Config/GameConfigWidget.h
- Config/GamecubeControllersWidget.cpp
- Config/GamecubeControllersWidget.h
- Config/GeckoCodeWidget.cpp
- Config/GeckoCodeWidget.h
- Config/Graphics/AdvancedWidget.cpp
- Config/Graphics/AdvancedWidget.h
- Config/Graphics/EnhancementsWidget.cpp
- Config/Graphics/EnhancementsWidget.h
- Config/Graphics/GeneralWidget.cpp
- Config/Graphics/GeneralWidget.h
- Config/Graphics/GraphicsWindow.cpp
- Config/Graphics/GraphicsWindow.h
- Config/Graphics/HacksWidget.cpp
- Config/Graphics/HacksWidget.h
- Config/Graphics/ColorCorrectionConfigWindow.cpp
- Config/Graphics/ColorCorrectionConfigWindow.h
- Config/Graphics/PostProcessingConfigWindow.cpp
- Config/Graphics/PostProcessingConfigWindow.h
- Config/GraphicsModListWidget.cpp
- Config/GraphicsModListWidget.h
- Config/GraphicsModWarningWidget.cpp
- Config/GraphicsModWarningWidget.h
- Config/HardcoreWarningWidget.cpp
- Config/HardcoreWarningWidget.h
- Config/InfoWidget.cpp
- Config/InfoWidget.h
- Config/LogConfigWidget.cpp
- Config/LogConfigWidget.h
- Config/LogWidget.cpp
- Config/LogWidget.h
- Config/Mapping/FreeLookGeneral.cpp
- Config/Mapping/FreeLookGeneral.h
- Config/Mapping/FreeLookRotation.cpp
- Config/Mapping/FreeLookRotation.h
- Config/Mapping/GBAPadEmu.cpp
- Config/Mapping/GBAPadEmu.h
- Config/Mapping/GCKeyboardEmu.cpp
- Config/Mapping/GCKeyboardEmu.h
- Config/Mapping/GCMicrophone.cpp
- Config/Mapping/GCMicrophone.h
- Config/Mapping/GCPadEmu.cpp
- Config/Mapping/GCPadEmu.h
- Config/Mapping/GCPadWiiUConfigDialog.cpp
- Config/Mapping/GCPadWiiUConfigDialog.h
- Config/Mapping/Hotkey3D.cpp
- Config/Mapping/Hotkey3D.h
- Config/Mapping/HotkeyControllerProfile.cpp
- Config/Mapping/HotkeyControllerProfile.h
- Config/Mapping/HotkeyDebugging.cpp
- Config/Mapping/HotkeyDebugging.h
- Config/Mapping/HotkeyGBA.cpp
- Config/Mapping/HotkeyGBA.h
- Config/Mapping/HotkeyGeneral.cpp
- Config/Mapping/HotkeyGeneral.h
- Config/Mapping/HotkeyGraphics.cpp
- Config/Mapping/HotkeyGraphics.h
- Config/Mapping/HotkeyStates.cpp
- Config/Mapping/HotkeyStates.h
- Config/Mapping/HotkeyStatesOther.cpp
- Config/Mapping/HotkeyStatesOther.h
- Config/Mapping/HotkeyTAS.cpp
- Config/Mapping/HotkeyTAS.h
- Config/Mapping/HotkeyUSBEmu.cpp
- Config/Mapping/HotkeyUSBEmu.h
- Config/Mapping/HotkeyWii.cpp
- Config/Mapping/HotkeyWii.h
- Config/Mapping/IOWindow.cpp
- Config/Mapping/MappingButton.cpp
- Config/Mapping/MappingButton.h
- Config/Mapping/MappingCommon.cpp
- Config/Mapping/MappingCommon.h
- Config/Mapping/MappingIndicator.cpp
- Config/Mapping/MappingIndicator.h
- Config/Mapping/MappingNumeric.cpp
- Config/Mapping/MappingNumeric.h
- Config/Mapping/MappingWidget.cpp
- Config/Mapping/MappingWidget.h
- Config/Mapping/MappingWindow.cpp
- Config/Mapping/MappingWindow.h
- Config/Mapping/WiimoteEmuExtension.cpp
- Config/Mapping/WiimoteEmuExtension.h
- Config/Mapping/WiimoteEmuExtensionMotionInput.cpp
- Config/Mapping/WiimoteEmuExtensionMotionInput.h
- Config/Mapping/WiimoteEmuExtensionMotionSimulation.cpp
- Config/Mapping/WiimoteEmuExtensionMotionSimulation.h
- Config/Mapping/WiimoteEmuGeneral.cpp
- Config/Mapping/WiimoteEmuGeneral.h
- Config/Mapping/WiimoteEmuMotionControl.cpp
- Config/Mapping/WiimoteEmuMotionControl.h
- Config/Mapping/WiimoteEmuMotionControlIMU.cpp
- Config/Mapping/WiimoteEmuMotionControlIMU.h
- Config/NewPatchDialog.cpp
- Config/NewPatchDialog.h
- Config/PatchesWidget.cpp
- Config/PatchesWidget.h
- Config/PropertiesDialog.cpp
- Config/PropertiesDialog.h
- Config/SettingsWindow.cpp
- Config/SettingsWindow.h
- Config/ToolTipControls/BalloonTip.cpp
- Config/ToolTipControls/BalloonTip.h
- Config/ToolTipControls/ToolTipCheckBox.cpp
- Config/ToolTipControls/ToolTipCheckBox.h
- Config/ToolTipControls/ToolTipComboBox.cpp
- Config/ToolTipControls/ToolTipComboBox.h
- Config/ToolTipControls/ToolTipPushButton.cpp
- Config/ToolTipControls/ToolTipPushButton.h
- Config/ToolTipControls/ToolTipRadioButton.cpp
- Config/ToolTipControls/ToolTipRadioButton.h
- Config/ToolTipControls/ToolTipSlider.cpp
- Config/ToolTipControls/ToolTipSlider.h
- Config/ToolTipControls/ToolTipSpinBox.cpp
- Config/ToolTipControls/ToolTipSpinBox.h
- Config/ToolTipControls/ToolTipWidget.h
- Config/VerifyWidget.cpp
- Config/VerifyWidget.h
- Config/WiimoteControllersWidget.cpp
- Config/WiimoteControllersWidget.h
- ConvertDialog.cpp
- ConvertDialog.h
- Debugger/AssembleInstructionDialog.cpp
- Debugger/AssembleInstructionDialog.h
- Debugger/AssemblerWidget.cpp
- Debugger/AssemblerWidget.h
- Debugger/AssemblyEditor.cpp
- Debugger/AssemblyEditor.h
- Debugger/BranchWatchDialog.cpp
- Debugger/BranchWatchDialog.h
- Debugger/BranchWatchTableModel.cpp
- Debugger/BranchWatchTableModel.h
- Debugger/BreakpointDialog.cpp
- Debugger/BreakpointDialog.h
- Debugger/BreakpointWidget.cpp
- Debugger/BreakpointWidget.h
- Debugger/CodeViewWidget.cpp
- Debugger/CodeViewWidget.h
- Debugger/CodeWidget.cpp
- Debugger/CodeWidget.h
- Debugger/GekkoSyntaxHighlight.cpp
- Debugger/GekkoSyntaxHighlight.h
- Debugger/JitBlockTableModel.cpp
- Debugger/JitBlockTableModel.h
- Debugger/JITWidget.cpp
- Debugger/JITWidget.h
- Debugger/MemoryViewWidget.cpp
- Debugger/MemoryViewWidget.h
- Debugger/MemoryWidget.cpp
- Debugger/MemoryWidget.h
- Debugger/NetworkWidget.cpp
- Debugger/NetworkWidget.h
- Debugger/PatchInstructionDialog.cpp
- Debugger/PatchInstructionDialog.h
- Debugger/RegisterColumn.cpp
- Debugger/RegisterColumn.h
- Debugger/RegisterWidget.cpp
- Debugger/RegisterWidget.h
- Debugger/ThreadWidget.cpp
- Debugger/ThreadWidget.h
- Debugger/WatchWidget.cpp
- Debugger/WatchWidget.h
- DiscordHandler.cpp
- DiscordHandler.h
- DiscordJoinRequestDialog.cpp
- DiscordJoinRequestDialog.h
- FIFO/FIFOAnalyzer.cpp
- FIFO/FIFOAnalyzer.h
- FIFO/FIFOPlayerWindow.cpp
- FIFO/FIFOPlayerWindow.h
- GameList/GameList.cpp
- GameList/GameList.h
- GameList/GameListModel.cpp
- GameList/GameListModel.h
- GameList/GameTracker.cpp
- GameList/GameTracker.h
- GameList/GridProxyModel.cpp
- GameList/GridProxyModel.h
- GameList/ListProxyModel.cpp
- GameList/ListProxyModel.h
- GCMemcardCreateNewDialog.cpp
- GCMemcardCreateNewDialog.h
- GCMemcardManager.cpp
- GCMemcardManager.h
- Host.cpp
- Host.h
- HotkeyScheduler.cpp
- HotkeyScheduler.h
- InfinityBase/InfinityBaseWindow.cpp
- InfinityBase/InfinityBaseWindow.h
- Main.cpp
- MainWindow.cpp
- MainWindow.h
- MenuBar.cpp
- MenuBar.h
- NetPlay/ChunkedProgressDialog.cpp
- NetPlay/ChunkedProgressDialog.h
- NetPlay/GameDigestDialog.cpp
- NetPlay/GameDigestDialog.h
- NetPlay/GameListDialog.cpp
- NetPlay/GameListDialog.h
- NetPlay/NetPlayBrowser.cpp
- NetPlay/NetPlayBrowser.h
- NetPlay/NetPlayDialog.cpp
- NetPlay/NetPlayDialog.h
- NetPlay/NetPlaySetupDialog.cpp
- NetPlay/NetPlaySetupDialog.h
- NetPlay/PadMappingDialog.cpp
- NetPlay/PadMappingDialog.h
- NANDRepairDialog.cpp
- NANDRepairDialog.h
- NKitWarningDialog.cpp
- NKitWarningDialog.h
- QtUtils/AspectRatioWidget.cpp
- QtUtils/AspectRatioWidget.h
- QtUtils/BlockUserInputFilter.cpp
- QtUtils/BlockUserInputFilter.h
- QtUtils/ClearLayoutRecursively.cpp
- QtUtils/ClearLayoutRecursively.h
- QtUtils/ClickableStatusBar.h
- QtUtils/DolphinFileDialog.cpp
- QtUtils/DolphinFileDialog.h
- QtUtils/DoubleClickEventFilter.cpp
- QtUtils/DoubleClickEventFilter.h
- QtUtils/ElidedButton.cpp
- QtUtils/ElidedButton.h
- QtUtils/FileOpenEventFilter.cpp
- QtUtils/FileOpenEventFilter.h
- QtUtils/FromStdString.h
- QtUtils/ImageConverter.cpp
- QtUtils/ImageConverter.h
- QtUtils/ModalMessageBox.cpp
- QtUtils/ModalMessageBox.h
- QtUtils/NonDefaultQPushButton.cpp
- QtUtils/NonDefaultQPushButton.h
- QtUtils/ParallelProgressDialog.h
- QtUtils/PartiallyClosableTabWidget.cpp
- QtUtils/PartiallyClosableTabWidget.h
- QtUtils/QtUtils.cpp
- QtUtils/QtUtils.h
- QtUtils/SetWindowDecorations.cpp
- QtUtils/SetWindowDecorations.h
- QtUtils/SignalBlocking.h
- QtUtils/UTF8CodePointCountValidator.cpp
- QtUtils/UTF8CodePointCountValidator.h
- QtUtils/WindowActivationEventFilter.cpp
- QtUtils/WindowActivationEventFilter.h
- QtUtils/WrapInScrollArea.cpp
- QtUtils/WrapInScrollArea.h
- RenderWidget.cpp
- RenderWidget.h
- ResourcePackManager.cpp
- ResourcePackManager.h
- Resources.cpp
- Resources.h
- RiivolutionBootWidget.cpp
- RiivolutionBootWidget.h
- SearchBar.cpp
- SearchBar.h
- Settings.cpp
- Settings.h
- Settings/AdvancedPane.cpp
- Settings/AdvancedPane.h
- Settings/AudioPane.cpp
- Settings/AudioPane.h
- Settings/BroadbandAdapterSettingsDialog.cpp
- Settings/BroadbandAdapterSettingsDialog.h
- Settings/GameCubePane.cpp
- Settings/GameCubePane.h
- Settings/GeneralPane.cpp
- Settings/GeneralPane.h
- Settings/InterfacePane.cpp
- Settings/InterfacePane.h
- Settings/PathPane.cpp
- Settings/PathPane.h
- Settings/USBDeviceAddToWhitelistDialog.cpp
- Settings/USBDeviceAddToWhitelistDialog.h
- Settings/WiiPane.cpp
- Settings/WiiPane.h
- SkylanderPortal/SkylanderModifyDialog.cpp
- SkylanderPortal/SkylanderModifyDialog.h
- SkylanderPortal/SkylanderPortalWindow.cpp
- SkylanderPortal/SkylanderPortalWindow.h
- TAS/GCTASInputWindow.cpp
- TAS/GCTASInputWindow.h
- TAS/GBATASInputWindow.cpp
- TAS/GBATASInputWindow.h
- TAS/IRWidget.cpp
- TAS/IRWidget.h
- TAS/StickWidget.cpp
- TAS/StickWidget.h
- TAS/TASCheckBox.cpp
- TAS/TASCheckBox.h
- TAS/TASControlState.cpp
- TAS/TASControlState.h
- TAS/TASInputWindow.cpp
- TAS/TASInputWindow.h
- TAS/TASSlider.cpp
- TAS/TASSlider.h
- TAS/TASSpinBox.cpp
- TAS/TASSpinBox.h
- TAS/WiiTASInputWindow.cpp
- TAS/WiiTASInputWindow.h
- ToolBar.cpp
- ToolBar.h
- Translation.cpp
- Translation.h
- Updater.cpp
- Updater.h
- WiiUpdate.cpp
- WiiUpdate.h
- )
- if (WIN32)
- target_sources(dolphin-emu PRIVATE
- Styles/Dark/dark.qrc
- )
- endif()
- if (NOT WIN32)
- target_sources(dolphin-emu PRIVATE
- QtUtils/SignalDaemon.cpp
- QtUtils/SignalDaemon.h
- )
- endif()
- target_compile_definitions(dolphin-emu
- PRIVATE
- -DQT_USE_QSTRINGBUILDER
- -DQT_NO_CAST_FROM_ASCII
- -DQT_NO_CAST_TO_ASCII
- )
- target_include_directories(dolphin-emu
- PRIVATE
- ${CMAKE_CURRENT_BINARY_DIR}
- ${Qt6Gui_PRIVATE_INCLUDE_DIRS}
- )
- target_link_libraries(dolphin-emu
- PRIVATE
- core
- Qt6::Widgets
- uicommon
- imgui
- implot
- )
- if (WIN32)
- target_link_libraries(dolphin-emu
- PRIVATE
- gdi32.lib
- shell32.lib
- dwmapi.lib # Needed to set window decorations for dark theme
- )
- endif()
- if (MSVC)
- set(qtGui "")
- set(qtGuiPriv "")
- set(qtWidgetsPriv "")
- list(TRANSFORM Qt6Gui_INCLUDE_DIRS PREPEND "/external:I" OUTPUT_VARIABLE qtGui)
- list(TRANSFORM Qt6Gui_PRIVATE_INCLUDE_DIRS PREPEND "/external:I" OUTPUT_VARIABLE qtGuiPriv)
- list(TRANSFORM Qt6Widgets_PRIVATE_INCLUDE_DIRS PREPEND "/external:I" OUTPUT_VARIABLE qtWidgetsPriv)
- target_compile_options(dolphin-emu PRIVATE "${qtGui}")
- target_compile_options(dolphin-emu PRIVATE "${qtGuiPriv}")
- target_compile_options(dolphin-emu PRIVATE "${qtWidgets}")
- # Qt 6.3.0 headers use std::aligned_storage instead of alignas
- target_compile_definitions(dolphin-emu PRIVATE _SILENCE_CXX23_ALIGNED_STORAGE_DEPRECATION_WARNING)
- # Qt6 requires RTTI
- remove_cxx_flag_from_target(dolphin-emu "/GR-")
- target_compile_options(dolphin-emu PRIVATE "/GR")
- endif()
- if(WIN32)
- target_sources(dolphin-emu PRIVATE DolphinQt.manifest DolphinQt.rc)
- set_target_properties(dolphin-emu PROPERTIES
- DEBUG_POSTFIX D
- OUTPUT_NAME Dolphin
- WIN32_EXECUTABLE TRUE
- )
- # Copy Sys dir
- add_custom_command(TARGET dolphin-emu POST_BUILD
- COMMAND ${CMAKE_COMMAND} -E remove_directory "${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/Sys"
- COMMAND ${CMAKE_COMMAND} -E copy_directory "${CMAKE_SOURCE_DIR}/Data/Sys" "${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/Sys"
- )
- # Copy COPYING
- add_custom_command(TARGET dolphin-emu POST_BUILD
- COMMAND ${CMAKE_COMMAND} -E copy_if_different "${CMAKE_SOURCE_DIR}/COPYING" "${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/COPYING"
- )
- # Copy Licenses dir
- add_custom_command(TARGET dolphin-emu POST_BUILD
- COMMAND ${CMAKE_COMMAND} -E copy_directory "${CMAKE_SOURCE_DIR}/LICENSES" "${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/Licenses"
- )
- # Copy qt.conf
- add_custom_command(TARGET dolphin-emu POST_BUILD
- COMMAND ${CMAKE_COMMAND} -E copy_if_different "${CMAKE_CURRENT_SOURCE_DIR}/qt.conf.win" "${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/qt.conf"
- )
- # Delegate to Qt's official deployment binary on Windows to copy over the necessary Qt-specific libraries, etc.
- get_target_property(MOC_EXECUTABLE_LOCATION Qt6::moc IMPORTED_LOCATION)
- get_filename_component(QT_BINARY_DIRECTORY "${MOC_EXECUTABLE_LOCATION}" DIRECTORY)
- find_program(WINDEPLOYQT_EXE windeployqt HINTS "${QT_BINARY_DIRECTORY}")
- # Note: We set the PATH for the duration of this command so that the
- # deployment application is able to locate the Qt libraries to copy.
- # if the necessary paths aren't already set beforehand.
- #
- # For example, consider a hypothetical emulation project named Orca.
- # Orca supplies its own version of Qt instead of having developers actually
- # install the officially supported Qt libraries -- a method that would make
- # wrangling around with Qt through CMake much nicer and lessen the external
- # library maintenance burden of the project, but alas.
- #
- # In this case, as Qt is not installed through the official binary, this also
- # means proper path variables will not be set up, thus the need to ensure they're
- # always set up.
- #
- add_custom_command(TARGET dolphin-emu POST_BUILD
- COMMAND "${CMAKE_COMMAND}" -E env PATH="${QT_BINARY_DIRECTORY}"
- "${WINDEPLOYQT_EXE}" --libdir="${CMAKE_RUNTIME_OUTPUT_DIRECTORY}"
- --plugindir="${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/QtPlugins"
- $<IF:$<CONFIG:Debug>,--debug,--release>
- --no-translations
- --no-compiler-runtime
- --no-system-d3d-compiler
- --no-opengl-sw
- "$<TARGET_FILE:dolphin-emu>"
- )
- endif()
- # Handle localization
- find_package(Gettext)
- if(WIN32 AND NOT Gettext_FOUND)
- message(STATUS "Using Gettext from Externals")
- set(GETTEXT_MSGFMT_EXECUTABLE "${CMAKE_SOURCE_DIR}/Externals/gettext/msgfmt.exe")
- endif()
- if(GETTEXT_MSGFMT_EXECUTABLE)
- set(pot_file "${CMAKE_SOURCE_DIR}/Languages/po/dolphin-emu.pot")
- file(GLOB LINGUAS ${CMAKE_SOURCE_DIR}/Languages/po/*.po)
- target_sources(dolphin-emu PRIVATE ${pot_file} ${LINGUAS})
- source_group("Localization" FILES ${LINGUAS})
- source_group("Localization\\\\Generated" FILES ${pot_file})
- foreach(po ${LINGUAS})
- get_filename_component(lang ${po} NAME_WE)
- if(WIN32)
- set(mo_dir ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/Languages)
- set(mo ${mo_dir}/${lang}.mo)
- else()
- set(mo_dir ${CMAKE_CURRENT_BINARY_DIR}/${lang})
- set(mo ${mo_dir}/dolphin-emu.mo)
- endif()
- target_sources(dolphin-emu PRIVATE ${mo})
- source_group("Localization\\\\Generated" FILES ${mo})
- if(CMAKE_SYSTEM_NAME STREQUAL "Darwin")
- set_source_files_properties(${mo} PROPERTIES MACOSX_PACKAGE_LOCATION "Resources/${lang}.lproj")
- else()
- install(FILES ${mo} DESTINATION share/locale/${lang}/LC_MESSAGES)
- endif()
- if(WIN32)
- add_custom_command(OUTPUT ${mo}
- COMMAND ${CMAKE_COMMAND} -E make_directory ${mo_dir}
- COMMAND ${GETTEXT_MSGFMT_EXECUTABLE} -o ${mo} ${po}
- DEPENDS ${po}
- )
- else()
- add_custom_command(OUTPUT ${mo}
- COMMAND ${CMAKE_COMMAND} -E make_directory ${mo_dir}
- COMMAND ${GETTEXT_MSGMERGE_EXECUTABLE} --quiet --update --backup=none -s ${po} ${pot_file}
- COMMAND ${GETTEXT_MSGFMT_EXECUTABLE} -o ${mo} ${po}
- DEPENDS ${po}
- )
- endif()
- endforeach()
- endif()
- if(APPLE)
- include(BundleUtilities)
- set(BUNDLE_PATH ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/DolphinQt.app)
- # Ask for an application bundle.
- set_target_properties(dolphin-emu PROPERTIES
- MACOSX_BUNDLE true
- MACOSX_BUNDLE_INFO_PLIST "${CMAKE_CURRENT_BINARY_DIR}/Info.plist"
- XCODE_ATTRIBUTE_CODE_SIGN_IDENTITY ""
- OUTPUT_NAME DolphinQt
- )
- # Copy qt.conf into the bundle
- target_sources(dolphin-emu PRIVATE "${CMAKE_CURRENT_SOURCE_DIR}/qt.conf")
- set_source_files_properties("${CMAKE_CURRENT_SOURCE_DIR}/qt.conf" PROPERTIES MACOSX_PACKAGE_LOCATION Resources)
- # Copy icon into the bundle
- target_sources(dolphin-emu PRIVATE "${CMAKE_SOURCE_DIR}/Data/Dolphin.icns")
- set_source_files_properties("${CMAKE_SOURCE_DIR}/Data/Dolphin.icns" PROPERTIES MACOSX_PACKAGE_LOCATION Resources)
- # Manually include plugins
- find_package(Qt6QMacStylePlugin REQUIRED PATHS ${Qt6Widgets_DIR})
- find_package(Qt6QCocoaIntegrationPlugin REQUIRED PATHS ${Qt6Gui_DIR})
- # Copy Qt plugins into the bundle
- get_target_property(qtcocoa_location Qt6::QCocoaIntegrationPlugin LOCATION)
- target_sources(dolphin-emu PRIVATE "${qtcocoa_location}")
- set_source_files_properties("${qtcocoa_location}" PROPERTIES MACOSX_PACKAGE_LOCATION MacOS/platforms)
- get_target_property(qtmacstyle_location Qt6::QMacStylePlugin LOCATION)
- target_sources(dolphin-emu PRIVATE "${qtmacstyle_location}")
- set_source_files_properties("${qtmacstyle_location}" PROPERTIES MACOSX_PACKAGE_LOCATION MacOS/styles)
- # Copy resources into the bundle
- set_property(DIRECTORY APPEND PROPERTY CMAKE_CONFIGURE_DEPENDS "${CMAKE_SOURCE_DIR}/Data/Sys")
- file(GLOB_RECURSE resources RELATIVE "${CMAKE_SOURCE_DIR}/Data" "${CMAKE_SOURCE_DIR}/Data/Sys/*")
- foreach(res ${resources})
- target_sources(dolphin-emu PRIVATE "${CMAKE_SOURCE_DIR}/Data/${res}")
- get_filename_component(resdir "${res}" DIRECTORY)
- set_source_files_properties("${CMAKE_SOURCE_DIR}/Data/${res}" PROPERTIES
- MACOSX_PACKAGE_LOCATION "Resources/${resdir}")
- source_group("Resources" FILES "${CMAKE_SOURCE_DIR}/Data/${res}")
- endforeach()
- # Copy MoltenVK into the bundle
- if(ENABLE_VULKAN)
- if(USE_BUNDLED_MOLTENVK)
- add_dependencies(dolphin-emu MoltenVK)
- ExternalProject_Get_Property(MoltenVK SOURCE_DIR)
- target_sources(dolphin-emu PRIVATE "${SOURCE_DIR}/Package/Release/MoltenVK/dynamic/dylib/macOS/libMoltenVK.dylib")
- set_source_files_properties("${SOURCE_DIR}/Package/Release/MoltenVK/dynamic/dylib/macOS/libMoltenVK.dylib" PROPERTIES MACOSX_PACKAGE_LOCATION Frameworks GENERATED ON)
- else()
- find_file(MOLTENVK_DYLIB NAMES libMoltenVK.dylib PATH_SUFFIXES lib)
- if(NOT MOLTENVK_DYLIB)
- message(FATAL_ERROR "Couldn't find libMoltenVK.dylib. Enable USE_BUNDLED_MOLTENVK?")
- endif()
- target_sources(dolphin-emu PRIVATE ${MOLTENVK_DYLIB})
- set_source_files_properties(${MOLTENVK_DYLIB} PROPERTIES MACOSX_PACKAGE_LOCATION Frameworks)
- endif()
- endif()
- if(NOT SKIP_POSTPROCESS_BUNDLE)
- # Update library references to make the bundle portable
- include(DolphinPostprocessBundle)
- dolphin_postprocess_bundle(dolphin-emu)
- # Fix rpath
- add_custom_command(TARGET dolphin-emu
- POST_BUILD COMMAND
- ${CMAKE_INSTALL_NAME_TOOL} -add_rpath "@executable_path/../Frameworks/"
- $<TARGET_FILE:dolphin-emu>)
- endif()
- if(MACOS_CODE_SIGNING)
- add_custom_command(TARGET dolphin-emu
- POST_BUILD
- COMMAND "${CMAKE_SOURCE_DIR}/Tools/mac-codesign.sh"
- "-e" "${CMAKE_CURRENT_SOURCE_DIR}/DolphinEmu$<$<CONFIG:Debug>:Debug>.entitlements"
- "${MACOS_CODE_SIGNING_IDENTITY}"
- "${BUNDLE_PATH}"
- )
- endif()
- else()
- install(TARGETS dolphin-emu RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR})
- endif()
- if(USE_MGBA)
- target_sources(dolphin-emu PRIVATE
- GBAHost.cpp
- GBAHost.h
- GBAWidget.cpp
- GBAWidget.h
- )
- endif()
- if(USE_DISCORD_PRESENCE)
- target_compile_definitions(dolphin-emu PRIVATE -DUSE_DISCORD_PRESENCE)
- endif()
- if(USE_RETRO_ACHIEVEMENTS)
- target_link_libraries(dolphin-emu PRIVATE rcheevos)
- target_compile_definitions(dolphin-emu PRIVATE -DUSE_RETRO_ACHIEVEMENTS)
- endif()
|