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