src/platform/qt/CMakeLists.txt (view raw)
1if(NOT MSVC)
2 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
3endif()
4
5if(APPLE)
6 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -mmacosx-version-min=10.7")
7 if (CMAKE_CXX_COMPILER_ID MATCHES "Clang")
8 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -stdlib=libc++")
9 endif()
10endif()
11
12set(PLATFORM_SRC)
13set(QT_STATIC OFF)
14
15if(BUILD_SDL)
16 if(NOT SDL_FOUND AND NOT SDL2_FOUND)
17 find_package(SDL 1.2 REQUIRED)
18 endif()
19 if(SDL2_FOUND)
20 link_directories(${SDL2_LIBDIR})
21 endif()
22 list(APPEND PLATFORM_LIBRARY ${SDL_LIBRARY})
23 list(APPEND PLATFORM_SRC ${PLATFORM_SRC} ${CMAKE_SOURCE_DIR}/src/platform/sdl/sdl-events.c ${CMAKE_SOURCE_DIR}/src/platform/sdl/sdl-audio.c)
24 include_directories(${SDL_INCLUDE_DIR} ${CMAKE_SOURCE_DIR}/src/platform/sdl)
25endif()
26
27set(CMAKE_AUTOMOC ON)
28set(CMAKE_INCLUDE_CURRENT_DIR ON)
29
30find_package(Qt5Multimedia)
31find_package(Qt5OpenGL)
32find_package(Qt5Widgets)
33
34if(NOT BUILD_GL AND NOT BUILD_GLES2)
35 message(WARNING "OpenGL is recommended to build the Qt port")
36endif()
37
38if(NOT Qt5Widgets_FOUND)
39 message(WARNING "Cannot find Qt modules")
40 set(BUILD_QT OFF PARENT_SCOPE)
41 return()
42endif()
43
44if(BUILD_GL)
45 list(APPEND PLATFORM_SRC ${CMAKE_SOURCE_DIR}/src/platform/opengl/gl.c)
46 if(NOT WIN32 OR USE_EPOXY)
47 list(APPEND PLATFORM_SRC ${CMAKE_SOURCE_DIR}/src/platform/opengl/gles2.c)
48 endif()
49endif()
50
51if(BUILD_GLES2)
52 list(APPEND PLATFORM_SRC ${CMAKE_SOURCE_DIR}/src/platform/opengl/gles2.c)
53endif()
54
55get_target_property(QT_TYPE Qt5::Core TYPE)
56if(QT_TYPE STREQUAL STATIC_LIBRARY)
57 set(QT_STATIC ON)
58 list(APPEND QT_DEFINES QT_STATIC)
59endif()
60
61set(SOURCE_FILES
62 AboutScreen.cpp
63 AssetTile.cpp
64 AssetView.cpp
65 AudioProcessor.cpp
66 CheatsModel.cpp
67 CheatsView.cpp
68 ConfigController.cpp
69 Display.cpp
70 DisplayGL.cpp
71 DisplayQt.cpp
72 GBAApp.cpp
73 GBAKeyEditor.cpp
74 GIFView.cpp
75 GameController.cpp
76 GamepadAxisEvent.cpp
77 GamepadButtonEvent.cpp
78 GamepadHatEvent.cpp
79 IOViewer.cpp
80 InputController.cpp
81 InputProfile.cpp
82 KeyEditor.cpp
83 LoadSaveState.cpp
84 LogController.cpp
85 LogView.cpp
86 MemoryModel.cpp
87 MemorySearch.cpp
88 MemoryView.cpp
89 MessagePainter.cpp
90 MultiplayerController.cpp
91 ObjView.cpp
92 OverrideView.cpp
93 PaletteView.cpp
94 ROMInfo.cpp
95 SavestateButton.cpp
96 SensorView.cpp
97 SettingsView.cpp
98 ShaderSelector.cpp
99 ShortcutController.cpp
100 ShortcutView.cpp
101 Swatch.cpp
102 TilePainter.cpp
103 TileView.cpp
104 utils.cpp
105 Window.cpp
106 VFileDevice.cpp
107 VideoView.cpp)
108
109set(UI_FILES
110 AboutScreen.ui
111 ArchiveInspector.ui
112 AssetTile.ui
113 CheatsView.ui
114 DebuggerConsole.ui
115 GIFView.ui
116 IOViewer.ui
117 LoadSaveState.ui
118 LogView.ui
119 MemorySearch.ui
120 MemoryView.ui
121 ObjView.ui
122 OverrideView.ui
123 PaletteView.ui
124 ROMInfo.ui
125 SensorView.ui
126 SettingsView.ui
127 ShaderSelector.ui
128 ShortcutView.ui
129 TileView.ui
130 VideoView.ui)
131
132set(GBA_SRC
133 GBAOverride.cpp)
134
135set(GB_SRC
136 GBOverride.cpp)
137
138set(QT_LIBRARIES)
139set(CPACK_DEBIAN_PACKAGE_DEPENDS "${CPACK_DEBIAN_PACKAGE_DEPENDS},libqt5widgets5,libqt5opengl5")
140
141set(AUDIO_SRC)
142if(BUILD_SDL)
143 list(APPEND AUDIO_SRC AudioProcessorSDL.cpp)
144endif()
145
146if(M_CORE_GBA)
147 list(APPEND PLATFORM_SRC ${GBA_SRC})
148endif()
149
150if(M_CORE_GB)
151 list(APPEND PLATFORM_SRC ${GB_SRC})
152endif()
153
154set(QT_DEFINES)
155if(Qt5Multimedia_FOUND)
156 list(APPEND AUDIO_SRC
157 AudioProcessorQt.cpp
158 AudioDevice.cpp)
159 if (WIN32 AND QT_STATIC)
160 list(APPEND QT_LIBRARIES qtaudio_windows strmiids winmm)
161 endif()
162 list(APPEND QT_LIBRARIES Qt5::Multimedia)
163 list(APPEND QT_DEFINES BUILD_QT_MULTIMEDIA)
164 set(CPACK_DEBIAN_PACKAGE_DEPENDS "${CPACK_DEBIAN_PACKAGE_DEPENDS},libqt5multimedia5")
165endif()
166
167if(NOT AUDIO_SRC)
168 message(WARNING "No supported audio modules found")
169 set(BUILD_QT OFF PARENT_SCOPE)
170 return()
171endif()
172
173if(USE_DEBUGGERS)
174 list(APPEND SOURCE_FILES
175 DebuggerController.cpp
176 DebuggerConsole.cpp
177 DebuggerConsoleController.cpp)
178endif()
179
180if(USE_GDB_STUB)
181 list(APPEND SOURCE_FILES GDBController.cpp GDBWindow.cpp)
182endif()
183
184if(USE_SQLITE3)
185 list(APPEND SOURCE_FILES
186 ArchiveInspector.cpp
187 library/LibraryController.cpp
188 library/LibraryGrid.cpp
189 library/LibraryTree.cpp)
190endif()
191
192qt5_add_resources(RESOURCES resources.qrc)
193if(APPLE)
194 set(MACOSX_BUNDLE_ICON_FILE mgba.icns)
195 set(MACOSX_BUNDLE_BUNDLE_VERSION ${LIB_VERSION_STRING})
196 set(MACOSX_BUNDLE_BUNDLE_NAME ${PROJECT_NAME})
197 set(MACOSX_BUNDLE_GUI_IDENTIFIER com.endrift.${BINARY_NAME}-qt)
198 set_source_files_properties(${CMAKE_SOURCE_DIR}/res/mgba.icns PROPERTIES MACOSX_PACKAGE_LOCATION Resources)
199endif()
200if(WIN32)
201 configure_file(${CMAKE_SOURCE_DIR}/res/mgba.rc.in ${CMAKE_BINARY_DIR}/res/mgba.rc)
202 list(APPEND RESOURCES ${CMAKE_BINARY_DIR}/res/mgba.rc)
203 set_source_files_properties(${CMAKE_BINARY_DIR}/res/mgba.rc PROPERTIES OBJECT_DEPENDS ${CMAKE_SOURCE_DIR}/res/mgba.ico)
204 if(QT_STATIC)
205 list(APPEND QT_LIBRARIES qwindows Qt5PlatformSupport imm32)
206 endif()
207endif()
208if(NOT DEFINED DATADIR)
209 if(APPLE)
210 set(DATADIR Applications/${PROJECT_NAME}.app/Contents/Resources)
211 else()
212 set(DATADIR ${CMAKE_INSTALL_DATADIR}/${BINARY_NAME})
213 endif()
214endif()
215install(DIRECTORY ${CMAKE_SOURCE_DIR}/res/shaders DESTINATION ${DATADIR} COMPONENT ${BINARY_NAME}-qt)
216install(FILES ${CMAKE_SOURCE_DIR}/res/nointro.dat DESTINATION ${DATADIR} COMPONENT ${BINARY_NAME}-qt)
217if(NOT WIN32 AND NOT APPLE)
218 list(APPEND QT_DEFINES DATADIR="${CMAKE_INSTALL_PREFIX}/${DATADIR}")
219endif()
220
221find_package(Qt5LinguistTools)
222if(Qt5LinguistTools_FOUND)
223 set(TRANSLATION_FILES)
224 set(TRANSLATION_QRC "${CMAKE_CURRENT_BINARY_DIR}/ts.qrc")
225 file(GLOB TS_FILES "${CMAKE_CURRENT_SOURCE_DIR}/ts/${BINARY_NAME}-*.ts")
226 if(UPDATE_TRANSLATIONS)
227 qt5_create_translation(TRANSLATION_FILES ${SOURCE_FILES} ${UI_FILES} ${TS_FILES} OPTIONS -locations absolute -no-obsolete)
228 else()
229 qt5_add_translation(TRANSLATION_FILES ${TS_FILES})
230 endif()
231 set(QT_QM_FILES)
232 if(QT_STATIC)
233 get_target_property(QT_CORE_LOCATION Qt5::Core LOCATION)
234 get_filename_component(QT_CORE_LOCATION ${QT_CORE_LOCATION} DIRECTORY)
235 get_filename_component(QT_QM_LOCATION "${QT_CORE_LOCATION}/../translations" ABSOLUTE)
236 foreach(TS ${TS_FILES})
237 get_filename_component(TS ${TS} NAME)
238 string(REGEX REPLACE "${BINARY_NAME}-(.*).ts$" "qtbase_\\1.qm" QT_QM "${TS}")
239 list(APPEND QT_QM_FILES "${QT_QM_LOCATION}/${QT_QM}")
240 endforeach()
241 list(APPEND TRANSLATION_FILES ${QT_QM_FILES})
242 endif()
243 add_custom_command(OUTPUT ${TRANSLATION_QRC}
244 COMMAND ${CMAKE_COMMAND} -DTRANSLATION_QRC:FILEPATH="${TRANSLATION_QRC}" -DQM_BASE="${CMAKE_CURRENT_BINARY_DIR}" "-DTRANSLATION_FILES='${TRANSLATION_FILES}'" -P "${CMAKE_CURRENT_SOURCE_DIR}/ts.cmake"
245 DEPENDS ${TRANSLATION_FILES})
246 qt5_add_resources(TRANSLATION_RESOURCES ${TRANSLATION_QRC})
247 list(APPEND RESOURCES ${TRANSLATION_RESOURCES})
248endif()
249
250qt5_wrap_ui(UI_SRC ${UI_FILES})
251
252add_executable(${BINARY_NAME}-qt WIN32 MACOSX_BUNDLE main.cpp ${CMAKE_SOURCE_DIR}/res/mgba.icns ${SOURCE_FILES} ${PLATFORM_SRC} ${UI_SRC} ${AUDIO_SRC} ${RESOURCES})
253set_target_properties(${BINARY_NAME}-qt PROPERTIES MACOSX_BUNDLE_INFO_PLIST ${CMAKE_SOURCE_DIR}/res/info.plist.in COMPILE_DEFINITIONS "${FEATURE_DEFINES};${FUNCTION_DEFINES};${OS_DEFINES};${QT_DEFINES}")
254
255list(APPEND QT_LIBRARIES Qt5::Widgets)
256if(BUILD_GL OR BUILD_GLES2)
257 list(APPEND QT_LIBRARIES Qt5::OpenGL ${OPENGL_LIBRARY} ${OPENGLES2_LIBRARY})
258endif()
259target_link_libraries(${BINARY_NAME}-qt ${PLATFORM_LIBRARY} ${BINARY_NAME} ${QT_LIBRARIES})
260set(CPACK_DEBIAN_PACKAGE_DEPENDS "${CPACK_DEBIAN_PACKAGE_DEPENDS}" PARENT_SCOPE)
261
262install(TARGETS ${BINARY_NAME}-qt
263 RUNTIME DESTINATION bin COMPONENT ${BINARY_NAME}-qt
264 BUNDLE DESTINATION Applications COMPONENT ${BINARY_NAME}-qt)
265if(UNIX AND NOT APPLE)
266 find_program(DESKTOP_FILE_INSTALL desktop-file-install)
267 if(DESKTOP_FILE_INSTALL)
268 install(CODE "execute_process(COMMAND ${DESKTOP_FILE_INSTALL} \"${CMAKE_SOURCE_DIR}/res/mgba-qt.desktop\" --dir \"\$ENV{DESTDIR}\${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_DATADIR}/applications/\")")
269 endif()
270endif()
271if(UNIX)
272 install(FILES ${CMAKE_SOURCE_DIR}/doc/mgba-qt.6 DESTINATION ${MANDIR}/man6 COMPONENT ${BINARY_NAME}-qt)
273endif()
274if(APPLE OR WIN32)
275 set_target_properties(${BINARY_NAME}-qt PROPERTIES OUTPUT_NAME ${PROJECT_NAME})
276endif()
277if(APPLE)
278 if(CMAKE_HOST_SYSTEM_NAME STREQUAL "Darwin")
279 get_target_property(QTCOCOA Qt5::QCocoaIntegrationPlugin LOCATION)
280 get_target_property(COREAUDIO Qt5::CoreAudioPlugin LOCATION)
281 get_target_property(BUNDLE_PATH ${BINARY_NAME}-qt LOCATION)
282 target_sources(${BINARY_NAME}-qt PRIVATE "${PLUGINS}")
283 set_source_files_properties("${QTCOCOA}" PROPERTIES MACOSX_PACKAGE_LOCATION Contents/PlugIns)
284 set_source_files_properties("${COREAUDIO}" PROPERTIES MACOSX_PACKAGE_LOCATION Contents/PlugIns)
285 install(CODE "
286 include(BundleUtilities)
287 set(BU_CHMOD_BUNDLE_ITEMS ON)
288 file(GLOB_RECURSE PLUGINS \"${BUNDLE_PATH}/Contents/PlugIns/*${CMAKE_SHARED_LIBRARY_SUFFIX}\")
289 fixup_bundle(\"${BUNDLE_PATH}\" \"${PLUGINS}\" \"\")
290 " COMPONENT ${BINARY_NAME}-qt)
291 else()
292 set(DEPLOY_OPTIONS -p platforms/libqcocoa.dylib,audio/libqtaudio_coreaudio.dylib)
293 if(NOT CMAKE_INSTALL_NAME_TOOL EQUAL "install_name_tool")
294 set(DEPLOY_OPTIONS ${DEPLOY_OPTIONS} -I "${CMAKE_INSTALL_NAME_TOOL}")
295 endif()
296 if(DEFINED CMAKE_OTOOL AND NOT CMAKE_OTOOL EQUAL "otool")
297 set(DEPLOY_OPTIONS ${DEPLOY_OPTIONS} -O "${CMAKE_OTOOL}")
298 endif()
299 if(DEFINED CROSS_ROOT)
300 set(DEPLOY_OPTIONS ${DEPLOY_OPTIONS} -R "${CROSS_ROOT}")
301 endif()
302 install(CODE "execute_process(COMMAND \"${CMAKE_SOURCE_DIR}/tools/deploy-mac.py\" -v ${DEPLOY_OPTIONS} \"\$ENV{DESTDIR}\${CMAKE_INSTALL_PREFIX}/Applications/${PROJECT_NAME}.app\")")
303 endif()
304endif()
305if(WIN32 AND CMAKE_MAJOR_VERSION GREATER 2 AND CMAKE_MINOR_VERSION GREATER 7)
306 # Work around CMake issue #16907
307 set_target_properties(${BINARY_NAME}-qt PROPERTIES AUTORCC ON SKIP_AUTORCC ON)
308endif()