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(Qt5Widgets)
36
37if(NOT Qt5OpenGL_FOUND OR NOT Qt5Widgets_FOUND OR NOT OPENGL_FOUND)
38 message(WARNING "Cannot find Qt modules")
39 set(BUILD_QT OFF PARENT_SCOPE)
40 return()
41endif()
42
43if(BUILD_GL)
44list(APPEND PLATFORM_SRC ${PLATFORM_SRC} ${CMAKE_SOURCE_DIR}/src/platform/opengl/gl.c)
45endif()
46
47if(BUILD_GLES2)
48list(APPEND PLATFORM_SRC ${PLATFORM_SRC} ${CMAKE_SOURCE_DIR}/src/platform/opengl/gles2.c)
49endif()
50
51get_target_property(QT_TYPE Qt5::Core TYPE)
52if(QT_TYPE STREQUAL STATIC_LIBRARY)
53 set(QT_STATIC ON)
54 add_definitions(-DQT_STATIC)
55endif()
56
57set(SOURCE_FILES
58 AboutScreen.cpp
59 AudioProcessor.cpp
60 CheatsModel.cpp
61 CheatsView.cpp
62 ConfigController.cpp
63 Display.cpp
64 DisplayGL.cpp
65 DisplayQt.cpp
66 GBAApp.cpp
67 GBAKeyEditor.cpp
68 GIFView.cpp
69 GameController.cpp
70 GamepadAxisEvent.cpp
71 GamepadButtonEvent.cpp
72 InputController.cpp
73 InputProfile.cpp
74 KeyEditor.cpp
75 LoadSaveState.cpp
76 LogController.cpp
77 LogView.cpp
78 MemoryModel.cpp
79 MemoryView.cpp
80 MessagePainter.cpp
81 MultiplayerController.cpp
82 OverrideView.cpp
83 PaletteView.cpp
84 SavestateButton.cpp
85 SensorView.cpp
86 SettingsView.cpp
87 ShortcutController.cpp
88 ShortcutView.cpp
89 Swatch.cpp
90 Window.cpp
91 VFileDevice.cpp
92 VideoView.cpp)
93
94qt5_wrap_ui(UI_FILES
95 AboutScreen.ui
96 CheatsView.ui
97 GIFView.ui
98 LoadSaveState.ui
99 LogView.ui
100 MemoryView.ui
101 OverrideView.ui
102 PaletteView.ui
103 SensorView.ui
104 SettingsView.ui
105 ShortcutView.ui
106 VideoView.ui)
107
108set(QT_LIBRARIES)
109set(CPACK_DEBIAN_PACKAGE_DEPENDS "${CPACK_DEBIAN_PACKAGE_DEPENDS},libqt5widgets5,libqt5opengl5")
110
111set(AUDIO_SRC)
112if(BUILD_SDL)
113 list(APPEND AUDIO_SRC AudioProcessorSDL.cpp)
114endif()
115
116if(Qt5Multimedia_FOUND)
117 list(APPEND AUDIO_SRC
118 AudioProcessorQt.cpp
119 AudioDevice.cpp)
120 if (WIN32 AND QT_STATIC)
121 list(APPEND QT_LIBRARIES qtaudio_windows strmiids winmm)
122 endif()
123 list(APPEND QT_LIBRARIES Qt5::Multimedia)
124 add_definitions(-DBUILD_QT_MULTIMEDIA)
125 set(CPACK_DEBIAN_PACKAGE_DEPENDS "${CPACK_DEBIAN_PACKAGE_DEPENDS},libqt5multimedia5")
126endif()
127
128if(NOT AUDIO_SRC)
129 message(WARNING "No supported audio modules found")
130 set(BUILD_QT OFF PARENT_SCOPE)
131 return()
132endif()
133
134if(USE_GDB_STUB)
135 list(APPEND PLATFORM_SRC GDBController.cpp GDBWindow.cpp)
136endif()
137set(MACOSX_BUNDLE_ICON_FILE mgba.icns)
138set(MACOSX_BUNDLE_BUNDLE_VERSION ${LIB_VERSION_STRING})
139set(MACOSX_BUNDLE_BUNDLE_NAME ${PROJECT_NAME})
140set(MACOSX_BUNDLE_GUI_IDENTIFIER com.endrift.${BINARY_NAME}-qt)
141set_source_files_properties(${CMAKE_SOURCE_DIR}/res/mgba.icns PROPERTIES MACOSX_PACKAGE_LOCATION Resources)
142
143qt5_add_resources(RESOURCES resources.qrc)
144if(WIN32)
145 configure_file(${CMAKE_SOURCE_DIR}/res/mgba.rc.in ${CMAKE_BINARY_DIR}/res/mgba.rc)
146 list(APPEND RESOURCES ${CMAKE_BINARY_DIR}/res/mgba.rc)
147 if(QT_STATIC)
148 list(APPEND QT_LIBRARIES qwindows imm32)
149 endif()
150endif()
151add_executable(${BINARY_NAME}-qt WIN32 MACOSX_BUNDLE main.cpp ${CMAKE_SOURCE_DIR}/res/mgba.icns ${SOURCE_FILES} ${PLATFORM_SRC} ${UI_FILES} ${AUDIO_SRC} ${RESOURCES})
152set_target_properties(${BINARY_NAME}-qt PROPERTIES MACOSX_BUNDLE_INFO_PLIST ${CMAKE_SOURCE_DIR}/res/info.plist.in COMPILE_DEFINITIONS "${FEATURE_DEFINES}")
153
154list(APPEND QT_LIBRARIES Qt5::Widgets Qt5::OpenGL)
155target_link_libraries(${BINARY_NAME}-qt ${PLATFORM_LIBRARY} ${OPENGL_LIBRARY} ${BINARY_NAME} ${QT_LIBRARIES})
156set(CPACK_DEBIAN_PACKAGE_DEPENDS "${CPACK_DEBIAN_PACKAGE_DEPENDS}" PARENT_SCOPE)
157
158install(TARGETS ${BINARY_NAME}-qt
159 RUNTIME DESTINATION bin COMPONENT ${BINARY_NAME}-qt
160 BUNDLE DESTINATION Applications COMPONENT ${BINARY_NAME}-qt)
161if(UNIX AND NOT APPLE)
162 find_program(DESKTOP_FILE_INSTALL desktop-file-install)
163 if(DESKTOP_FILE_INSTALL)
164 install(CODE "execute_process(COMMAND ${DESKTOP_FILE_INSTALL} \"${CMAKE_SOURCE_DIR}/res/mgba-qt.desktop\" --dir \"$ENV{DESTDIR}${CMAKE_INSTALL_PREFIX}/share/applications/\")")
165 endif()
166endif()
167if(APPLE OR WIN32)
168 set_target_properties(${BINARY_NAME}-qt PROPERTIES OUTPUT_NAME ${PROJECT_NAME})
169endif()
170if(APPLE)
171 set(DEPLOY_OPTIONS -p platforms/libqcocoa.dylib,audio/libqtaudio_coreaudio.dylib)
172 if(NOT CMAKE_INSTALL_NAME_TOOL EQUAL "install_name_tool")
173 set(DEPLOY_OPTIONS ${DEPLOY_OPTIONS} -I ${CMAKE_INSTALL_NAME_TOOL})
174 endif()
175 if(DEFINED CMAKE_OTOOL AND NOT CMAKE_OTOOL EQUAL "otool")
176 set(DEPLOY_OPTIONS ${DEPLOY_OPTIONS} -O ${CMAKE_OTOOL})
177 endif()
178 if(DEFINED CROSS_ROOT)
179 set(DEPLOY_OPTIONS ${DEPLOY_OPTIONS} -R ${CROSS_ROOT})
180 endif()
181 add_custom_command(TARGET ${BINARY_NAME}-qt POST_BUILD COMMAND ${CMAKE_SOURCE_DIR}/tools/deploy-mac.py ${DEPLOY_OPTIONS} ${PROJECT_NAME}.app)
182endif()