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 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 LibraryModel.cpp
91 LoadSaveState.cpp
92 LogController.cpp
93 LogView.cpp
94 MemoryModel.cpp
95 MemoryView.cpp
96 MessagePainter.cpp
97 MultiplayerController.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 GIFView.ui
120 IOViewer.ui
121 LoadSaveState.ui
122 LogView.ui
123 MemoryView.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
140qt5_wrap_ui(UI_SRC ${UI_FILES})
141
142set(QT_LIBRARIES)
143set(CPACK_DEBIAN_PACKAGE_DEPENDS "${CPACK_DEBIAN_PACKAGE_DEPENDS},libqt5widgets5,libqt5opengl5,libqt5network5")
144
145set(AUDIO_SRC)
146if(BUILD_SDL)
147 list(APPEND AUDIO_SRC AudioProcessorSDL.cpp)
148endif()
149
150if(M_CORE_GBA)
151 list(APPEND PLATFORM_SRC ${GBA_SRC})
152endif()
153
154if(M_CORE_GB)
155 list(APPEND PLATFORM_SRC ${GB_SRC})
156endif()
157
158set(QT_DEFINES)
159if(Qt5Multimedia_FOUND)
160 list(APPEND AUDIO_SRC
161 AudioProcessorQt.cpp
162 AudioDevice.cpp)
163 if (WIN32 AND QT_STATIC)
164 list(APPEND QT_LIBRARIES qtaudio_windows strmiids winmm)
165 endif()
166 list(APPEND QT_LIBRARIES Qt5::Multimedia)
167 list(APPEND QT_DEFINES BUILD_QT_MULTIMEDIA)
168 set(CPACK_DEBIAN_PACKAGE_DEPENDS "${CPACK_DEBIAN_PACKAGE_DEPENDS},libqt5multimedia5")
169endif()
170
171if(NOT AUDIO_SRC)
172 message(WARNING "No supported audio modules found")
173 set(BUILD_QT OFF PARENT_SCOPE)
174 return()
175endif()
176
177if(USE_GDB_STUB)
178 list(APPEND PLATFORM_SRC GDBController.cpp GDBWindow.cpp)
179endif()
180
181qt5_add_resources(RESOURCES resources.qrc)
182if(APPLE)
183 set(MACOSX_BUNDLE_ICON_FILE mgba.icns)
184 set(MACOSX_BUNDLE_BUNDLE_VERSION ${LIB_VERSION_STRING})
185 set(MACOSX_BUNDLE_BUNDLE_NAME ${PROJECT_NAME})
186 set(MACOSX_BUNDLE_GUI_IDENTIFIER com.endrift.${BINARY_NAME}-qt)
187 set_source_files_properties(${CMAKE_SOURCE_DIR}/res/mgba.icns PROPERTIES MACOSX_PACKAGE_LOCATION Resources)
188endif()
189if(WIN32)
190 configure_file(${CMAKE_SOURCE_DIR}/res/mgba.rc.in ${CMAKE_BINARY_DIR}/res/mgba.rc)
191 list(APPEND RESOURCES ${CMAKE_BINARY_DIR}/res/mgba.rc)
192 set_source_files_properties(${CMAKE_BINARY_DIR}/res/mgba.rc PROPERTIES OBJECT_DEPENDS ${CMAKE_SOURCE_DIR}/res/mgba.ico)
193 if(QT_STATIC)
194 list(APPEND QT_LIBRARIES qwindows Qt5PlatformSupport imm32)
195 endif()
196endif()
197if(NOT DEFINED DATADIR)
198 if(APPLE)
199 set(DATADIR Applications/${PROJECT_NAME}.app/Contents/Resources)
200 else()
201 set(DATADIR ${CMAKE_INSTALL_DATADIR}/${BINARY_NAME})
202 endif()
203endif()
204install(DIRECTORY ${CMAKE_SOURCE_DIR}/res/shaders DESTINATION ${DATADIR} COMPONENT ${BINARY_NAME}-qt)
205install(FILES ${CMAKE_SOURCE_DIR}/res/nointro.dat DESTINATION ${DATADIR} COMPONENT ${BINARY_NAME}-qt)
206if(NOT WIN32 AND NOT APPLE)
207 list(APPEND QT_DEFINES DATADIR="${DATADIR}")
208endif()
209
210find_package(Qt5LinguistTools)
211if(Qt5LinguistTools_FOUND)
212 set(TRANSLATION_FILES)
213 set(TRANSLATION_QRC "${CMAKE_CURRENT_BINARY_DIR}/ts.qrc")
214 file(GLOB TS_FILES "${CMAKE_CURRENT_SOURCE_DIR}/ts/${BINARY_NAME}-*.ts")
215 if(UPDATE_TRANSLATIONS)
216 qt5_create_translation(TRANSLATION_FILES ${SOURCE_FILES} ${UI_FILES} ${TS_FILES} OPTIONS -locations absolute -no-obsolete)
217 else()
218 qt5_add_translation(TRANSLATION_FILES ${TS_FILES})
219 endif()
220 add_custom_command(OUTPUT ${TRANSLATION_QRC}
221 COMMAND ${CMAKE_COMMAND} -DTRANSLATION_QRC:FILEPATH="${TRANSLATION_QRC}" -DTRANSLATION_FILES="${TRANSLATION_FILES}" -P "${CMAKE_CURRENT_SOURCE_DIR}/ts.cmake"
222 DEPENDS ${TRANSLATION_FILES})
223 qt5_add_resources(TRANSLATION_RESOURCES ${TRANSLATION_QRC})
224 list(APPEND RESOURCES ${TRANSLATION_RESOURCES})
225endif()
226
227add_executable(${BINARY_NAME}-qt WIN32 MACOSX_BUNDLE main.cpp ${CMAKE_SOURCE_DIR}/res/mgba.icns ${SOURCE_FILES} ${PLATFORM_SRC} ${UI_SRC} ${AUDIO_SRC} ${RESOURCES})
228set_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}")
229
230list(APPEND QT_LIBRARIES Qt5::Widgets Qt5::OpenGL Qt5::Network)
231target_link_libraries(${BINARY_NAME}-qt ${PLATFORM_LIBRARY} ${BINARY_NAME} ${QT_LIBRARIES} ${OPENGL_LIBRARY} ${OPENGLES2_LIBRARY})
232set(CPACK_DEBIAN_PACKAGE_DEPENDS "${CPACK_DEBIAN_PACKAGE_DEPENDS}" PARENT_SCOPE)
233
234install(TARGETS ${BINARY_NAME}-qt
235 RUNTIME DESTINATION bin COMPONENT ${BINARY_NAME}-qt
236 BUNDLE DESTINATION Applications COMPONENT ${BINARY_NAME}-qt)
237if(UNIX AND NOT APPLE)
238 find_program(DESKTOP_FILE_INSTALL desktop-file-install)
239 if(DESKTOP_FILE_INSTALL)
240 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/\")")
241 endif()
242endif()
243if(UNIX)
244 install(FILES ${CMAKE_SOURCE_DIR}/doc/mgba-qt.6 DESTINATION ${MANDIR}/man6 COMPONENT ${BINARY_NAME}-qt)
245endif()
246if(APPLE OR WIN32)
247 set_target_properties(${BINARY_NAME}-qt PROPERTIES OUTPUT_NAME ${PROJECT_NAME})
248endif()
249if(APPLE)
250 set(DEPLOY_OPTIONS -p platforms/libqcocoa.dylib,audio/libqtaudio_coreaudio.dylib)
251 if(NOT CMAKE_INSTALL_NAME_TOOL EQUAL "install_name_tool")
252 set(DEPLOY_OPTIONS ${DEPLOY_OPTIONS} -I ${CMAKE_INSTALL_NAME_TOOL})
253 endif()
254 if(DEFINED CMAKE_OTOOL AND NOT CMAKE_OTOOL EQUAL "otool")
255 set(DEPLOY_OPTIONS ${DEPLOY_OPTIONS} -O ${CMAKE_OTOOL})
256 endif()
257 if(DEFINED CROSS_ROOT)
258 set(DEPLOY_OPTIONS ${DEPLOY_OPTIONS} -R ${CROSS_ROOT})
259 endif()
260 add_custom_command(TARGET ${BINARY_NAME}-qt POST_BUILD COMMAND ${CMAKE_SOURCE_DIR}/tools/deploy-mac.py ${DEPLOY_OPTIONS} ${PROJECT_NAME}.app)
261endif()