all repos — mgba @ 47344bc08ad3ef95c009f4bc72ae936b6c50f5c5

mGBA Game Boy Advance Emulator

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	AssetTile.cpp
 72	AssetView.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	LoadSaveState.cpp
 91	LogController.cpp
 92	LogView.cpp
 93	MemoryModel.cpp
 94	MemoryView.cpp
 95	MessagePainter.cpp
 96	MultiplayerController.cpp
 97	ObjView.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	DebuggerConsole.ui
120	GIFView.ui
121	IOViewer.ui
122	LoadSaveState.ui
123	LogView.ui
124	MemoryView.ui
125	ObjView.ui
126	OverrideView.ui
127	PaletteView.ui
128	ROMInfo.ui
129	SensorView.ui
130	SettingsView.ui
131	ShaderSelector.ui
132	ShortcutView.ui
133	TileView.ui
134	VideoView.ui)
135
136set(GBA_SRC
137	GBAOverride.cpp)
138
139set(GB_SRC
140	GBOverride.cpp)
141
142qt5_wrap_ui(UI_SRC ${UI_FILES})
143
144set(QT_LIBRARIES)
145set(CPACK_DEBIAN_PACKAGE_DEPENDS "${CPACK_DEBIAN_PACKAGE_DEPENDS},libqt5widgets5,libqt5opengl5,libqt5network5")
146
147set(AUDIO_SRC)
148if(BUILD_SDL)
149	list(APPEND AUDIO_SRC AudioProcessorSDL.cpp)
150endif()
151
152if(M_CORE_GBA)
153	list(APPEND PLATFORM_SRC ${GBA_SRC})
154endif()
155
156if(M_CORE_GB)
157	list(APPEND PLATFORM_SRC ${GB_SRC})
158endif()
159
160set(QT_DEFINES)
161if(Qt5Multimedia_FOUND)
162	list(APPEND AUDIO_SRC
163		AudioProcessorQt.cpp
164		AudioDevice.cpp)
165	if (WIN32 AND QT_STATIC)
166		list(APPEND QT_LIBRARIES qtaudio_windows strmiids winmm)
167	endif()
168	list(APPEND QT_LIBRARIES Qt5::Multimedia)
169	list(APPEND QT_DEFINES BUILD_QT_MULTIMEDIA)
170	set(CPACK_DEBIAN_PACKAGE_DEPENDS "${CPACK_DEBIAN_PACKAGE_DEPENDS},libqt5multimedia5")
171endif()
172
173if(NOT AUDIO_SRC)
174	message(WARNING "No supported audio modules found")
175	set(BUILD_QT OFF PARENT_SCOPE)
176	return()
177endif()
178
179if(USE_DEBUGGERS)
180	list(APPEND SOURCE_FILES
181		DebuggerController.cpp
182		DebuggerConsole.cpp
183		DebuggerConsoleController.cpp)
184endif()
185
186if(USE_GDB_STUB)
187	list(APPEND SOURCE_FILES GDBController.cpp GDBWindow.cpp)
188endif()
189
190if(USE_SQLITE3)
191	list(APPEND SOURCE_FILES
192		ArchiveInspector.cpp
193		LibraryModel.cpp)
194endif()
195
196qt5_add_resources(RESOURCES resources.qrc)
197if(APPLE)
198	set(MACOSX_BUNDLE_ICON_FILE mgba.icns)
199	set(MACOSX_BUNDLE_BUNDLE_VERSION ${LIB_VERSION_STRING})
200	set(MACOSX_BUNDLE_BUNDLE_NAME ${PROJECT_NAME})
201	set(MACOSX_BUNDLE_GUI_IDENTIFIER com.endrift.${BINARY_NAME}-qt)
202	set_source_files_properties(${CMAKE_SOURCE_DIR}/res/mgba.icns PROPERTIES MACOSX_PACKAGE_LOCATION Resources)
203endif()
204if(WIN32)
205	configure_file(${CMAKE_SOURCE_DIR}/res/mgba.rc.in ${CMAKE_BINARY_DIR}/res/mgba.rc)
206	list(APPEND RESOURCES ${CMAKE_BINARY_DIR}/res/mgba.rc)
207	set_source_files_properties(${CMAKE_BINARY_DIR}/res/mgba.rc PROPERTIES OBJECT_DEPENDS ${CMAKE_SOURCE_DIR}/res/mgba.ico)
208	if(QT_STATIC)
209		list(APPEND QT_LIBRARIES qwindows Qt5PlatformSupport imm32)
210	endif()
211endif()
212if(NOT DEFINED DATADIR)
213	if(APPLE)
214		set(DATADIR Applications/${PROJECT_NAME}.app/Contents/Resources)
215	else()
216		set(DATADIR ${CMAKE_INSTALL_DATADIR}/${BINARY_NAME})
217	endif()
218endif()
219install(DIRECTORY ${CMAKE_SOURCE_DIR}/res/shaders DESTINATION ${DATADIR} COMPONENT ${BINARY_NAME}-qt)
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="${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	add_custom_command(OUTPUT ${TRANSLATION_QRC}
236		               COMMAND ${CMAKE_COMMAND} -DTRANSLATION_QRC:FILEPATH="${TRANSLATION_QRC}" -DTRANSLATION_FILES="${TRANSLATION_FILES}" -P "${CMAKE_CURRENT_SOURCE_DIR}/ts.cmake"
237		               DEPENDS ${TRANSLATION_FILES})
238	qt5_add_resources(TRANSLATION_RESOURCES ${TRANSLATION_QRC})
239	list(APPEND RESOURCES ${TRANSLATION_RESOURCES})
240endif()
241
242add_executable(${BINARY_NAME}-qt WIN32 MACOSX_BUNDLE main.cpp ${CMAKE_SOURCE_DIR}/res/mgba.icns ${SOURCE_FILES} ${PLATFORM_SRC} ${UI_SRC} ${AUDIO_SRC} ${RESOURCES})
243set_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}")
244
245list(APPEND QT_LIBRARIES Qt5::Widgets Qt5::OpenGL Qt5::Network)
246target_link_libraries(${BINARY_NAME}-qt ${PLATFORM_LIBRARY} ${BINARY_NAME} ${QT_LIBRARIES} ${OPENGL_LIBRARY} ${OPENGLES2_LIBRARY})
247set(CPACK_DEBIAN_PACKAGE_DEPENDS "${CPACK_DEBIAN_PACKAGE_DEPENDS}" PARENT_SCOPE)
248
249install(TARGETS ${BINARY_NAME}-qt
250	RUNTIME DESTINATION bin COMPONENT ${BINARY_NAME}-qt
251	BUNDLE DESTINATION Applications COMPONENT ${BINARY_NAME}-qt)
252if(UNIX AND NOT APPLE)
253	find_program(DESKTOP_FILE_INSTALL desktop-file-install)
254	if(DESKTOP_FILE_INSTALL)
255		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/\")")
256	endif()
257endif()
258if(UNIX)
259	install(FILES ${CMAKE_SOURCE_DIR}/doc/mgba-qt.6 DESTINATION ${MANDIR}/man6 COMPONENT ${BINARY_NAME}-qt)
260endif()
261if(APPLE OR WIN32)
262	set_target_properties(${BINARY_NAME}-qt PROPERTIES OUTPUT_NAME ${PROJECT_NAME})
263endif()
264if(APPLE)
265	set(DEPLOY_OPTIONS -p platforms/libqcocoa.dylib,audio/libqtaudio_coreaudio.dylib)
266	if(NOT CMAKE_INSTALL_NAME_TOOL EQUAL "install_name_tool")
267		set(DEPLOY_OPTIONS ${DEPLOY_OPTIONS} -I ${CMAKE_INSTALL_NAME_TOOL})
268	endif()
269	if(DEFINED CMAKE_OTOOL AND NOT CMAKE_OTOOL EQUAL "otool")
270		set(DEPLOY_OPTIONS ${DEPLOY_OPTIONS} -O ${CMAKE_OTOOL})
271	endif()
272	if(DEFINED CROSS_ROOT)
273		set(DEPLOY_OPTIONS ${DEPLOY_OPTIONS} -R ${CROSS_ROOT})
274	endif()
275	add_custom_command(TARGET ${BINARY_NAME}-qt POST_BUILD COMMAND ${CMAKE_SOURCE_DIR}/tools/deploy-mac.py ${DEPLOY_OPTIONS} ${PROJECT_NAME}.app)
276endif()