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