src/platform/qt/CMakeLists.txt (view raw)
1cmake_minimum_required(VERSION 2.8.11)
2enable_language(CXX)
3
4set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} --std=c++11")
5
6if(APPLE)
7 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -mmacosx-version-min=10.7")
8 if (CMAKE_CXX_COMPILER_ID MATCHES "Clang")
9 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -stdlib=libc++")
10 endif()
11endif()
12
13set(PLATFORM_SRC)
14set(QT_STATIC OFF)
15
16if(BUILD_SDL)
17 if(NOT SDL_FOUND AND NOT SDL2_FOUND)
18 find_package(SDL 1.2 REQUIRED)
19 endif()
20 if(SDL2_FOUND)
21 link_directories(${SDL2_LIBDIR})
22 endif()
23 list(APPEND PLATFORM_LIBRARY ${SDL_LIBRARY} ${SDLMAIN_LIBRARY})
24 list(APPEND PLATFORM_SRC ${PLATFORM_SRC} ${CMAKE_SOURCE_DIR}/src/platform/sdl/sdl-events.c ${CMAKE_SOURCE_DIR}/src/platform/sdl/sdl-audio.c)
25 include_directories(${SDL_INCLUDE_DIR} ${CMAKE_SOURCE_DIR}/src/platform/sdl)
26endif()
27
28set(CMAKE_AUTOMOC ON)
29set(CMAKE_INCLUDE_CURRENT_DIR ON)
30
31if(NOT WIN32 OR NOT BUILD_SDL)
32 find_package(Qt5Multimedia)
33endif()
34find_package(Qt5OpenGL)
35find_package(Qt5Network)
36find_package(Qt5Widgets)
37
38if(NOT BUILD_GL AND NOT BUILD_GLES2)
39 message(WARNING "OpenGL is required to build the Qt port")
40 set(BUILD_QT OFF PARENT_SCOPE)
41 return()
42endif()
43
44if(NOT Qt5OpenGL_FOUND OR NOT Qt5Widgets_FOUND OR NOT Qt5Network_FOUND)
45 message(WARNING "Cannot find Qt modules")
46 set(BUILD_QT OFF PARENT_SCOPE)
47 return()
48endif()
49
50if(BUILD_GL)
51 list(APPEND PLATFORM_SRC ${CMAKE_SOURCE_DIR}/src/platform/opengl/gl.c)
52 if(NOT WIN32 OR USE_EPOXY)
53 list(APPEND PLATFORM_SRC ${CMAKE_SOURCE_DIR}/src/platform/opengl/gles2.c)
54 endif()
55endif()
56
57if(BUILD_GLES2)
58 list(APPEND PLATFORM_SRC ${CMAKE_SOURCE_DIR}/src/platform/opengl/gles2.c)
59endif()
60
61get_target_property(QT_TYPE Qt5::Core TYPE)
62if(QT_TYPE STREQUAL STATIC_LIBRARY)
63 set(QT_STATIC ON)
64 list(APPEND QT_DEFINES QT_STATIC)
65endif()
66
67set(SOURCE_FILES
68 AboutScreen.cpp
69 AudioProcessor.cpp
70 CheatsModel.cpp
71 CheatsView.cpp
72 ConfigController.cpp
73 Display.cpp
74 DisplayGL.cpp
75 DisplayQt.cpp
76 GBAApp.cpp
77 GBAKeyEditor.cpp
78 GIFView.cpp
79 GameController.cpp
80 GamepadAxisEvent.cpp
81 GamepadButtonEvent.cpp
82 IOViewer.cpp
83 InputController.cpp
84 InputProfile.cpp
85 KeyEditor.cpp
86 LoadSaveState.cpp
87 LogController.cpp
88 LogView.cpp
89 MemoryModel.cpp
90 MemoryView.cpp
91 MessagePainter.cpp
92 MultiplayerController.cpp
93 OverrideView.cpp
94 PaletteView.cpp
95 ROMInfo.cpp
96 SavestateButton.cpp
97 SensorView.cpp
98 SettingsView.cpp
99 ShaderSelector.cpp
100 ShortcutController.cpp
101 ShortcutView.cpp
102 Swatch.cpp
103 Window.cpp
104 VFileDevice.cpp
105 VideoView.cpp)
106
107qt5_wrap_ui(UI_FILES
108 AboutScreen.ui
109 CheatsView.ui
110 GIFView.ui
111 IOViewer.ui
112 LoadSaveState.ui
113 LogView.ui
114 MemoryView.ui
115 OverrideView.ui
116 PaletteView.ui
117 ROMInfo.ui
118 SensorView.ui
119 SettingsView.ui
120 ShaderSelector.ui
121 ShortcutView.ui
122 VideoView.ui)
123
124set(QT_LIBRARIES)
125set(CPACK_DEBIAN_PACKAGE_DEPENDS "${CPACK_DEBIAN_PACKAGE_DEPENDS},libqt5widgets5,libqt5opengl5,libqt5network5")
126
127set(AUDIO_SRC)
128if(BUILD_SDL)
129 list(APPEND AUDIO_SRC AudioProcessorSDL.cpp)
130endif()
131
132set(QT_DEFINES)
133if(Qt5Multimedia_FOUND)
134 list(APPEND AUDIO_SRC
135 AudioProcessorQt.cpp
136 AudioDevice.cpp)
137 if (WIN32 AND QT_STATIC)
138 list(APPEND QT_LIBRARIES qtaudio_windows strmiids winmm)
139 endif()
140 list(APPEND QT_LIBRARIES Qt5::Multimedia)
141 list(APPEND QT_DEFINES BUILD_QT_MULTIMEDIA)
142 set(CPACK_DEBIAN_PACKAGE_DEPENDS "${CPACK_DEBIAN_PACKAGE_DEPENDS},libqt5multimedia5")
143endif()
144
145if(NOT AUDIO_SRC)
146 message(WARNING "No supported audio modules found")
147 set(BUILD_QT OFF PARENT_SCOPE)
148 return()
149endif()
150
151if(USE_GDB_STUB)
152 list(APPEND PLATFORM_SRC GDBController.cpp GDBWindow.cpp)
153endif()
154set(MACOSX_BUNDLE_ICON_FILE mgba.icns)
155set(MACOSX_BUNDLE_BUNDLE_VERSION ${LIB_VERSION_STRING})
156set(MACOSX_BUNDLE_BUNDLE_NAME ${PROJECT_NAME})
157set(MACOSX_BUNDLE_GUI_IDENTIFIER com.endrift.${BINARY_NAME}-qt)
158set_source_files_properties(${CMAKE_SOURCE_DIR}/res/mgba.icns PROPERTIES MACOSX_PACKAGE_LOCATION Resources)
159
160qt5_add_resources(RESOURCES resources.qrc)
161if(WIN32)
162 configure_file(${CMAKE_SOURCE_DIR}/res/mgba.rc.in ${CMAKE_BINARY_DIR}/res/mgba.rc)
163 list(APPEND RESOURCES ${CMAKE_BINARY_DIR}/res/mgba.rc)
164 if(QT_STATIC)
165 list(APPEND QT_LIBRARIES qwindows imm32)
166 endif()
167endif()
168if(APPLE)
169 set(DATA_DIR Applications/${PROJECT_NAME}.app/Contents/Resources)
170else()
171 set(DATA_DIR ${CMAKE_INSTALL_DATADIR}/${BINARY_NAME})
172endif()
173install(DIRECTORY ${CMAKE_SOURCE_DIR}/res/shaders DESTINATION ${DATA_DIR} COMPONENT ${BINARY_NAME}-qt)
174install(FILES ${CMAKE_SOURCE_DIR}/res/nointro.dat DESTINATION ${DATA_DIR} COMPONENT ${BINARY_NAME}-qt)
175if(NOT WIN32 AND NOT APPLE)
176 list(APPEND QT_DEFINES DATA_DIR="${DATA_DIR}")
177endif()
178
179add_executable(${BINARY_NAME}-qt WIN32 MACOSX_BUNDLE main.cpp ${CMAKE_SOURCE_DIR}/res/mgba.icns ${SOURCE_FILES} ${PLATFORM_SRC} ${UI_FILES} ${AUDIO_SRC} ${RESOURCES})
180set_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}")
181
182list(APPEND QT_LIBRARIES Qt5::Widgets Qt5::OpenGL Qt5::Network)
183target_link_libraries(${BINARY_NAME}-qt ${PLATFORM_LIBRARY} ${BINARY_NAME} ${QT_LIBRARIES} ${OPENGL_LIBRARY} ${OPENGLES2_LIBRARY})
184set(CPACK_DEBIAN_PACKAGE_DEPENDS "${CPACK_DEBIAN_PACKAGE_DEPENDS}" PARENT_SCOPE)
185
186install(TARGETS ${BINARY_NAME}-qt
187 RUNTIME DESTINATION bin COMPONENT ${BINARY_NAME}-qt
188 BUNDLE DESTINATION Applications COMPONENT ${BINARY_NAME}-qt)
189if(UNIX AND NOT APPLE)
190 find_program(DESKTOP_FILE_INSTALL desktop-file-install)
191 if(DESKTOP_FILE_INSTALL)
192 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/\")")
193 endif()
194endif()
195if(UNIX)
196 install(FILES ${CMAKE_SOURCE_DIR}/doc/mgba-qt.6 DESTINATION ${MANDIR}/man6 COMPONENT ${BINARY_NAME}-qt)
197endif()
198if(APPLE OR WIN32)
199 set_target_properties(${BINARY_NAME}-qt PROPERTIES OUTPUT_NAME ${PROJECT_NAME})
200endif()
201if(APPLE)
202 set(DEPLOY_OPTIONS -p platforms/libqcocoa.dylib,audio/libqtaudio_coreaudio.dylib)
203 if(NOT CMAKE_INSTALL_NAME_TOOL EQUAL "install_name_tool")
204 set(DEPLOY_OPTIONS ${DEPLOY_OPTIONS} -I ${CMAKE_INSTALL_NAME_TOOL})
205 endif()
206 if(DEFINED CMAKE_OTOOL AND NOT CMAKE_OTOOL EQUAL "otool")
207 set(DEPLOY_OPTIONS ${DEPLOY_OPTIONS} -O ${CMAKE_OTOOL})
208 endif()
209 if(DEFINED CROSS_ROOT)
210 set(DEPLOY_OPTIONS ${DEPLOY_OPTIONS} -R ${CROSS_ROOT})
211 endif()
212 add_custom_command(TARGET ${BINARY_NAME}-qt POST_BUILD COMMAND ${CMAKE_SOURCE_DIR}/tools/deploy-mac.py ${DEPLOY_OPTIONS} ${PROJECT_NAME}.app)
213endif()