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 ArchiveInspector.cpp
72 AssetTile.cpp
73 AssetView.cpp
74 AudioProcessor.cpp
75 CheatsModel.cpp
76 CheatsView.cpp
77 ConfigController.cpp
78 Display.cpp
79 DisplayGL.cpp
80 DisplayQt.cpp
81 GBAApp.cpp
82 GBAKeyEditor.cpp
83 GIFView.cpp
84 GameController.cpp
85 GamepadAxisEvent.cpp
86 GamepadButtonEvent.cpp
87 IOViewer.cpp
88 InputController.cpp
89 InputProfile.cpp
90 KeyEditor.cpp
91 LibraryModel.cpp
92 LoadSaveState.cpp
93 LogController.cpp
94 LogView.cpp
95 MemoryModel.cpp
96 MemoryView.cpp
97 MessagePainter.cpp
98 MultiplayerController.cpp
99 ObjView.cpp
100 OverrideView.cpp
101 PaletteView.cpp
102 ROMInfo.cpp
103 SavestateButton.cpp
104 SensorView.cpp
105 SettingsView.cpp
106 ShaderSelector.cpp
107 ShortcutController.cpp
108 ShortcutView.cpp
109 Swatch.cpp
110 TilePainter.cpp
111 TileView.cpp
112 Window.cpp
113 VFileDevice.cpp
114 VideoView.cpp)
115
116set(UI_FILES
117 AboutScreen.ui
118 ArchiveInspector.ui
119 AssetTile.ui
120 CheatsView.ui
121 GIFView.ui
122 IOViewer.ui
123 LoadSaveState.ui
124 LogView.ui
125 MemoryView.ui
126 ObjView.ui
127 OverrideView.ui
128 PaletteView.ui
129 ROMInfo.ui
130 SensorView.ui
131 SettingsView.ui
132 ShaderSelector.ui
133 ShortcutView.ui
134 TileView.ui
135 VideoView.ui)
136
137set(GBA_SRC
138 GBAOverride.cpp)
139
140set(GB_SRC
141 GBOverride.cpp)
142
143qt5_wrap_ui(UI_SRC ${UI_FILES})
144
145set(QT_LIBRARIES)
146set(CPACK_DEBIAN_PACKAGE_DEPENDS "${CPACK_DEBIAN_PACKAGE_DEPENDS},libqt5widgets5,libqt5opengl5,libqt5network5")
147
148set(AUDIO_SRC)
149if(BUILD_SDL)
150 list(APPEND AUDIO_SRC AudioProcessorSDL.cpp)
151endif()
152
153if(M_CORE_GBA)
154 list(APPEND PLATFORM_SRC ${GBA_SRC})
155endif()
156
157if(M_CORE_GB)
158 list(APPEND PLATFORM_SRC ${GB_SRC})
159endif()
160
161set(QT_DEFINES)
162if(Qt5Multimedia_FOUND)
163 list(APPEND AUDIO_SRC
164 AudioProcessorQt.cpp
165 AudioDevice.cpp)
166 if (WIN32 AND QT_STATIC)
167 list(APPEND QT_LIBRARIES qtaudio_windows strmiids winmm)
168 endif()
169 list(APPEND QT_LIBRARIES Qt5::Multimedia)
170 list(APPEND QT_DEFINES BUILD_QT_MULTIMEDIA)
171 set(CPACK_DEBIAN_PACKAGE_DEPENDS "${CPACK_DEBIAN_PACKAGE_DEPENDS},libqt5multimedia5")
172endif()
173
174if(NOT AUDIO_SRC)
175 message(WARNING "No supported audio modules found")
176 set(BUILD_QT OFF PARENT_SCOPE)
177 return()
178endif()
179
180if(USE_GDB_STUB)
181 list(APPEND PLATFORM_SRC GDBController.cpp GDBWindow.cpp)
182endif()
183
184qt5_add_resources(RESOURCES resources.qrc)
185if(APPLE)
186 set(MACOSX_BUNDLE_ICON_FILE mgba.icns)
187 set(MACOSX_BUNDLE_BUNDLE_VERSION ${LIB_VERSION_STRING})
188 set(MACOSX_BUNDLE_BUNDLE_NAME ${PROJECT_NAME})
189 set(MACOSX_BUNDLE_GUI_IDENTIFIER com.endrift.${BINARY_NAME}-qt)
190 set_source_files_properties(${CMAKE_SOURCE_DIR}/res/mgba.icns PROPERTIES MACOSX_PACKAGE_LOCATION Resources)
191endif()
192if(WIN32)
193 configure_file(${CMAKE_SOURCE_DIR}/res/mgba.rc.in ${CMAKE_BINARY_DIR}/res/mgba.rc)
194 list(APPEND RESOURCES ${CMAKE_BINARY_DIR}/res/mgba.rc)
195 set_source_files_properties(${CMAKE_BINARY_DIR}/res/mgba.rc PROPERTIES OBJECT_DEPENDS ${CMAKE_SOURCE_DIR}/res/mgba.ico)
196 if(QT_STATIC)
197 list(APPEND QT_LIBRARIES qwindows Qt5PlatformSupport imm32)
198 endif()
199endif()
200if(NOT DEFINED DATADIR)
201 if(APPLE)
202 set(DATADIR Applications/${PROJECT_NAME}.app/Contents/Resources)
203 else()
204 set(DATADIR ${CMAKE_INSTALL_DATADIR}/${BINARY_NAME})
205 endif()
206endif()
207install(DIRECTORY ${CMAKE_SOURCE_DIR}/res/shaders DESTINATION ${DATADIR} COMPONENT ${BINARY_NAME}-qt)
208install(FILES ${CMAKE_SOURCE_DIR}/res/nointro.dat DESTINATION ${DATADIR} COMPONENT ${BINARY_NAME}-qt)
209if(NOT WIN32 AND NOT APPLE)
210 list(APPEND QT_DEFINES DATADIR="${DATADIR}")
211endif()
212
213find_package(Qt5LinguistTools)
214if(Qt5LinguistTools_FOUND)
215 set(TRANSLATION_FILES)
216 set(TRANSLATION_QRC "${CMAKE_CURRENT_BINARY_DIR}/ts.qrc")
217 file(GLOB TS_FILES "${CMAKE_CURRENT_SOURCE_DIR}/ts/${BINARY_NAME}-*.ts")
218 if(UPDATE_TRANSLATIONS)
219 qt5_create_translation(TRANSLATION_FILES ${SOURCE_FILES} ${UI_FILES} ${TS_FILES} OPTIONS -locations absolute -no-obsolete)
220 else()
221 qt5_add_translation(TRANSLATION_FILES ${TS_FILES})
222 endif()
223 add_custom_command(OUTPUT ${TRANSLATION_QRC}
224 COMMAND ${CMAKE_COMMAND} -DTRANSLATION_QRC:FILEPATH="${TRANSLATION_QRC}" -DTRANSLATION_FILES="${TRANSLATION_FILES}" -P "${CMAKE_CURRENT_SOURCE_DIR}/ts.cmake"
225 DEPENDS ${TRANSLATION_FILES})
226 qt5_add_resources(TRANSLATION_RESOURCES ${TRANSLATION_QRC})
227 list(APPEND RESOURCES ${TRANSLATION_RESOURCES})
228endif()
229
230add_executable(${BINARY_NAME}-qt WIN32 MACOSX_BUNDLE main.cpp ${CMAKE_SOURCE_DIR}/res/mgba.icns ${SOURCE_FILES} ${PLATFORM_SRC} ${UI_SRC} ${AUDIO_SRC} ${RESOURCES})
231set_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}")
232
233list(APPEND QT_LIBRARIES Qt5::Widgets Qt5::OpenGL Qt5::Network)
234target_link_libraries(${BINARY_NAME}-qt ${PLATFORM_LIBRARY} ${BINARY_NAME} ${QT_LIBRARIES} ${OPENGL_LIBRARY} ${OPENGLES2_LIBRARY})
235set(CPACK_DEBIAN_PACKAGE_DEPENDS "${CPACK_DEBIAN_PACKAGE_DEPENDS}" PARENT_SCOPE)
236
237install(TARGETS ${BINARY_NAME}-qt
238 RUNTIME DESTINATION bin COMPONENT ${BINARY_NAME}-qt
239 BUNDLE DESTINATION Applications COMPONENT ${BINARY_NAME}-qt)
240if(UNIX AND NOT APPLE)
241 find_program(DESKTOP_FILE_INSTALL desktop-file-install)
242 if(DESKTOP_FILE_INSTALL)
243 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/\")")
244 endif()
245endif()
246if(UNIX)
247 install(FILES ${CMAKE_SOURCE_DIR}/doc/mgba-qt.6 DESTINATION ${MANDIR}/man6 COMPONENT ${BINARY_NAME}-qt)
248endif()
249if(APPLE OR WIN32)
250 set_target_properties(${BINARY_NAME}-qt PROPERTIES OUTPUT_NAME ${PROJECT_NAME})
251endif()
252if(APPLE)
253 set(DEPLOY_OPTIONS -p platforms/libqcocoa.dylib,audio/libqtaudio_coreaudio.dylib)
254 if(NOT CMAKE_INSTALL_NAME_TOOL EQUAL "install_name_tool")
255 set(DEPLOY_OPTIONS ${DEPLOY_OPTIONS} -I ${CMAKE_INSTALL_NAME_TOOL})
256 endif()
257 if(DEFINED CMAKE_OTOOL AND NOT CMAKE_OTOOL EQUAL "otool")
258 set(DEPLOY_OPTIONS ${DEPLOY_OPTIONS} -O ${CMAKE_OTOOL})
259 endif()
260 if(DEFINED CROSS_ROOT)
261 set(DEPLOY_OPTIONS ${DEPLOY_OPTIONS} -R ${CROSS_ROOT})
262 endif()
263 add_custom_command(TARGET ${BINARY_NAME}-qt POST_BUILD COMMAND ${CMAKE_SOURCE_DIR}/tools/deploy-mac.py ${DEPLOY_OPTIONS} ${PROJECT_NAME}.app)
264endif()