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})
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 InputProfile.cpp
87 KeyEditor.cpp
88 LoadSaveState.cpp
89 LogController.cpp
90 LogView.cpp
91 MemoryModel.cpp
92 MemoryView.cpp
93 MessagePainter.cpp
94 MultiplayerController.cpp
95 ObjView.cpp
96 OverrideView.cpp
97 PaletteView.cpp
98 ROMInfo.cpp
99 SavestateButton.cpp
100 SensorView.cpp
101 SettingsView.cpp
102 ShaderSelector.cpp
103 ShortcutController.cpp
104 ShortcutView.cpp
105 Swatch.cpp
106 TilePainter.cpp
107 TileView.cpp
108 utils.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 LoadSaveState.ui
122 LogView.ui
123 MemoryView.ui
124 ObjView.ui
125 OverrideView.ui
126 PaletteView.ui
127 ROMInfo.ui
128 SensorView.ui
129 SettingsView.ui
130 ShaderSelector.ui
131 ShortcutView.ui
132 TileView.ui
133 VideoView.ui)
134
135set(GBA_SRC
136 GBAOverride.cpp)
137
138set(GB_SRC
139 GBOverride.cpp)
140
141set(QT_LIBRARIES)
142set(CPACK_DEBIAN_PACKAGE_DEPENDS "${CPACK_DEBIAN_PACKAGE_DEPENDS},libqt5widgets5,libqt5opengl5")
143
144set(AUDIO_SRC)
145if(BUILD_SDL)
146 list(APPEND AUDIO_SRC AudioProcessorSDL.cpp)
147endif()
148
149if(M_CORE_GBA)
150 list(APPEND PLATFORM_SRC ${GBA_SRC})
151endif()
152
153if(M_CORE_GB)
154 list(APPEND PLATFORM_SRC ${GB_SRC})
155endif()
156
157set(QT_DEFINES)
158if(Qt5Multimedia_FOUND)
159 list(APPEND AUDIO_SRC
160 AudioProcessorQt.cpp
161 AudioDevice.cpp)
162 if (WIN32 AND QT_STATIC)
163 list(APPEND QT_LIBRARIES qtaudio_windows strmiids winmm)
164 endif()
165 list(APPEND QT_LIBRARIES Qt5::Multimedia)
166 list(APPEND QT_DEFINES BUILD_QT_MULTIMEDIA)
167 set(CPACK_DEBIAN_PACKAGE_DEPENDS "${CPACK_DEBIAN_PACKAGE_DEPENDS},libqt5multimedia5")
168endif()
169
170if(NOT AUDIO_SRC)
171 message(WARNING "No supported audio modules found")
172 set(BUILD_QT OFF PARENT_SCOPE)
173 return()
174endif()
175
176if(USE_DEBUGGERS)
177 list(APPEND SOURCE_FILES
178 DebuggerController.cpp
179 DebuggerConsole.cpp
180 DebuggerConsoleController.cpp)
181endif()
182
183if(USE_GDB_STUB)
184 list(APPEND SOURCE_FILES GDBController.cpp GDBWindow.cpp)
185endif()
186
187if(USE_SQLITE3)
188 list(APPEND SOURCE_FILES
189 ArchiveInspector.cpp
190 library/LibraryController.cpp
191 library/LibraryGrid.cpp
192 library/LibraryTree.cpp)
193endif()
194
195qt5_add_resources(RESOURCES resources.qrc)
196if(APPLE)
197 set(MACOSX_BUNDLE_ICON_FILE mgba.icns)
198 set(MACOSX_BUNDLE_BUNDLE_VERSION ${LIB_VERSION_STRING})
199 set(MACOSX_BUNDLE_BUNDLE_NAME ${PROJECT_NAME})
200 set(MACOSX_BUNDLE_GUI_IDENTIFIER com.endrift.${BINARY_NAME}-qt)
201 set_source_files_properties(${CMAKE_SOURCE_DIR}/res/mgba.icns PROPERTIES MACOSX_PACKAGE_LOCATION Resources)
202endif()
203if(WIN32)
204 configure_file(${CMAKE_SOURCE_DIR}/res/mgba.rc.in ${CMAKE_BINARY_DIR}/res/mgba.rc)
205 list(APPEND RESOURCES ${CMAKE_BINARY_DIR}/res/mgba.rc)
206 set_source_files_properties(${CMAKE_BINARY_DIR}/res/mgba.rc PROPERTIES OBJECT_DEPENDS ${CMAKE_SOURCE_DIR}/res/mgba.ico)
207 if(QT_STATIC)
208 list(APPEND QT_LIBRARIES qwindows Qt5PlatformSupport imm32)
209 endif()
210endif()
211if(NOT DEFINED DATADIR)
212 if(APPLE)
213 set(DATADIR Applications/${PROJECT_NAME}.app/Contents/Resources)
214 else()
215 set(DATADIR ${CMAKE_INSTALL_DATADIR}/${BINARY_NAME})
216 endif()
217endif()
218install(DIRECTORY ${CMAKE_SOURCE_DIR}/res/shaders DESTINATION ${DATADIR} COMPONENT ${BINARY_NAME}-qt)
219install(FILES ${CMAKE_SOURCE_DIR}/res/nointro.dat DESTINATION ${DATADIR} COMPONENT ${BINARY_NAME}-qt)
220if(NOT WIN32 AND NOT APPLE)
221 list(APPEND QT_DEFINES DATADIR="${DATADIR}")
222endif()
223
224find_package(Qt5LinguistTools)
225if(Qt5LinguistTools_FOUND)
226 set(TRANSLATION_FILES)
227 set(TRANSLATION_QRC "${CMAKE_CURRENT_BINARY_DIR}/ts.qrc")
228 file(GLOB TS_FILES "${CMAKE_CURRENT_SOURCE_DIR}/ts/${BINARY_NAME}-*.ts")
229 if(UPDATE_TRANSLATIONS)
230 qt5_create_translation(TRANSLATION_FILES ${SOURCE_FILES} ${UI_FILES} ${TS_FILES} OPTIONS -locations absolute -no-obsolete)
231 else()
232 qt5_add_translation(TRANSLATION_FILES ${TS_FILES})
233 endif()
234 add_custom_command(OUTPUT ${TRANSLATION_QRC}
235 COMMAND ${CMAKE_COMMAND} -DTRANSLATION_QRC:FILEPATH="${TRANSLATION_QRC}" -DQM_BASE="${CMAKE_CURRENT_BINARY_DIR}" -P "${CMAKE_CURRENT_SOURCE_DIR}/ts.cmake"
236 DEPENDS ${TRANSLATION_FILES})
237 qt5_add_resources(TRANSLATION_RESOURCES ${TRANSLATION_QRC})
238 list(APPEND RESOURCES ${TRANSLATION_RESOURCES})
239endif()
240
241qt5_wrap_ui(UI_SRC ${UI_FILES})
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)
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()