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
33if(NOT WIN32 OR NOT BUILD_SDL)
34 find_package(Qt5Multimedia)
35endif()
36find_package(Qt5OpenGL)
37find_package(Qt5Network)
38find_package(Qt5Widgets)
39
40if(NOT BUILD_GL AND NOT BUILD_GLES2)
41 message(WARNING "OpenGL is required to build the Qt port")
42 set(BUILD_QT OFF PARENT_SCOPE)
43 return()
44endif()
45
46if(NOT Qt5OpenGL_FOUND OR NOT Qt5Widgets_FOUND OR NOT Qt5Network_FOUND)
47 message(WARNING "Cannot find Qt modules")
48 set(BUILD_QT OFF PARENT_SCOPE)
49 return()
50endif()
51
52if(BUILD_GL)
53 list(APPEND PLATFORM_SRC ${CMAKE_SOURCE_DIR}/src/platform/opengl/gl.c)
54 if(NOT WIN32 OR USE_EPOXY)
55 list(APPEND PLATFORM_SRC ${CMAKE_SOURCE_DIR}/src/platform/opengl/gles2.c)
56 endif()
57endif()
58
59if(BUILD_GLES2)
60 list(APPEND PLATFORM_SRC ${CMAKE_SOURCE_DIR}/src/platform/opengl/gles2.c)
61endif()
62
63get_target_property(QT_TYPE Qt5::Core TYPE)
64if(QT_TYPE STREQUAL STATIC_LIBRARY)
65 set(QT_STATIC ON)
66 list(APPEND QT_DEFINES QT_STATIC)
67endif()
68
69set(SOURCE_FILES
70 AboutScreen.cpp
71 AssetTile.cpp
72 AssetView.cpp
73 AudioProcessor.cpp
74 CheatsModel.cpp
75 CheatsView.cpp
76 ConfigController.cpp
77 Display.cpp
78 DisplayGL.cpp
79 DisplayQt.cpp
80 GBAApp.cpp
81 GBAKeyEditor.cpp
82 GIFView.cpp
83 GameController.cpp
84 GamepadAxisEvent.cpp
85 GamepadButtonEvent.cpp
86 IOViewer.cpp
87 InputController.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 ShortcutController.cpp
106 ShortcutView.cpp
107 Swatch.cpp
108 TilePainter.cpp
109 TileView.cpp
110 Window.cpp
111 VFileDevice.cpp
112 VideoView.cpp)
113
114set(UI_FILES
115 AboutScreen.ui
116 ArchiveInspector.ui
117 AssetTile.ui
118 CheatsView.ui
119 DebuggerConsole.ui
120 GIFView.ui
121 IOViewer.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)
194endif()
195
196qt5_add_resources(RESOURCES resources.qrc)
197if(APPLE)
198 set(MACOSX_BUNDLE_ICON_FILE mgba.icns)
199 set(MACOSX_BUNDLE_BUNDLE_VERSION ${LIB_VERSION_STRING})
200 set(MACOSX_BUNDLE_BUNDLE_NAME ${PROJECT_NAME})
201 set(MACOSX_BUNDLE_GUI_IDENTIFIER com.endrift.${BINARY_NAME}-qt)
202 set_source_files_properties(${CMAKE_SOURCE_DIR}/res/mgba.icns PROPERTIES MACOSX_PACKAGE_LOCATION Resources)
203endif()
204if(WIN32)
205 configure_file(${CMAKE_SOURCE_DIR}/res/mgba.rc.in ${CMAKE_BINARY_DIR}/res/mgba.rc)
206 list(APPEND RESOURCES ${CMAKE_BINARY_DIR}/res/mgba.rc)
207 set_source_files_properties(${CMAKE_BINARY_DIR}/res/mgba.rc PROPERTIES OBJECT_DEPENDS ${CMAKE_SOURCE_DIR}/res/mgba.ico)
208 if(QT_STATIC)
209 list(APPEND QT_LIBRARIES qwindows Qt5PlatformSupport imm32)
210 endif()
211endif()
212if(NOT DEFINED DATADIR)
213 if(APPLE)
214 set(DATADIR Applications/${PROJECT_NAME}.app/Contents/Resources)
215 else()
216 set(DATADIR ${CMAKE_INSTALL_DATADIR}/${BINARY_NAME})
217 endif()
218endif()
219install(DIRECTORY ${CMAKE_SOURCE_DIR}/res/shaders DESTINATION ${DATADIR} COMPONENT ${BINARY_NAME}-qt)
220install(FILES ${CMAKE_SOURCE_DIR}/res/nointro.dat DESTINATION ${DATADIR} COMPONENT ${BINARY_NAME}-qt)
221if(NOT WIN32 AND NOT APPLE)
222 list(APPEND QT_DEFINES DATADIR="${DATADIR}")
223endif()
224
225find_package(Qt5LinguistTools)
226if(Qt5LinguistTools_FOUND)
227 set(TRANSLATION_FILES)
228 set(TRANSLATION_QRC "${CMAKE_CURRENT_BINARY_DIR}/ts.qrc")
229 file(GLOB TS_FILES "${CMAKE_CURRENT_SOURCE_DIR}/ts/${BINARY_NAME}-*.ts")
230 if(UPDATE_TRANSLATIONS)
231 qt5_create_translation(TRANSLATION_FILES ${SOURCE_FILES} ${UI_FILES} ${TS_FILES} OPTIONS -locations absolute -no-obsolete)
232 else()
233 qt5_add_translation(TRANSLATION_FILES ${TS_FILES})
234 endif()
235 add_custom_command(OUTPUT ${TRANSLATION_QRC}
236 COMMAND ${CMAKE_COMMAND} -DTRANSLATION_QRC:FILEPATH="${TRANSLATION_QRC}" -DTRANSLATION_FILES="${TRANSLATION_FILES}" -P "${CMAKE_CURRENT_SOURCE_DIR}/ts.cmake"
237 DEPENDS ${TRANSLATION_FILES})
238 qt5_add_resources(TRANSLATION_RESOURCES ${TRANSLATION_QRC})
239 list(APPEND RESOURCES ${TRANSLATION_RESOURCES})
240endif()
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 Qt5::OpenGL Qt5::Network)
246target_link_libraries(${BINARY_NAME}-qt ${PLATFORM_LIBRARY} ${BINARY_NAME} ${QT_LIBRARIES} ${OPENGL_LIBRARY} ${OPENGLES2_LIBRARY})
247set(CPACK_DEBIAN_PACKAGE_DEPENDS "${CPACK_DEBIAN_PACKAGE_DEPENDS}" PARENT_SCOPE)
248
249install(TARGETS ${BINARY_NAME}-qt
250 RUNTIME DESTINATION bin COMPONENT ${BINARY_NAME}-qt
251 BUNDLE DESTINATION Applications COMPONENT ${BINARY_NAME}-qt)
252if(UNIX AND NOT APPLE)
253 find_program(DESKTOP_FILE_INSTALL desktop-file-install)
254 if(DESKTOP_FILE_INSTALL)
255 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/\")")
256 endif()
257endif()
258if(UNIX)
259 install(FILES ${CMAKE_SOURCE_DIR}/doc/mgba-qt.6 DESTINATION ${MANDIR}/man6 COMPONENT ${BINARY_NAME}-qt)
260endif()
261if(APPLE OR WIN32)
262 set_target_properties(${BINARY_NAME}-qt PROPERTIES OUTPUT_NAME ${PROJECT_NAME})
263endif()
264if(APPLE)
265 set(DEPLOY_OPTIONS -p platforms/libqcocoa.dylib,audio/libqtaudio_coreaudio.dylib)
266 if(NOT CMAKE_INSTALL_NAME_TOOL EQUAL "install_name_tool")
267 set(DEPLOY_OPTIONS ${DEPLOY_OPTIONS} -I ${CMAKE_INSTALL_NAME_TOOL})
268 endif()
269 if(DEFINED CMAKE_OTOOL AND NOT CMAKE_OTOOL EQUAL "otool")
270 set(DEPLOY_OPTIONS ${DEPLOY_OPTIONS} -O ${CMAKE_OTOOL})
271 endif()
272 if(DEFINED CROSS_ROOT)
273 set(DEPLOY_OPTIONS ${DEPLOY_OPTIONS} -R ${CROSS_ROOT})
274 endif()
275 add_custom_command(TARGET ${BINARY_NAME}-qt POST_BUILD COMMAND ${CMAKE_SOURCE_DIR}/tools/deploy-mac.py ${DEPLOY_OPTIONS} ${PROJECT_NAME}.app)
276endif()