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