all repos — mgba @ bd312238319c03151d5f9c9da199318f65ea90d5

mGBA Game Boy Advance Emulator

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 mgba.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/mgba.icns PROPERTIES MACOSX_PACKAGE_LOCATION Resources)
201endif()
202if(WIN32)
203	configure_file(${CMAKE_SOURCE_DIR}/res/mgba.rc.in ${CMAKE_BINARY_DIR}/res/mgba.rc)
204	list(APPEND RESOURCES ${CMAKE_BINARY_DIR}/res/mgba.rc)
205	set_source_files_properties(${CMAKE_BINARY_DIR}/res/mgba.rc PROPERTIES OBJECT_DEPENDS ${CMAKE_SOURCE_DIR}/res/mgba.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()
217install(DIRECTORY ${CMAKE_SOURCE_DIR}/res/shaders DESTINATION ${DATADIR} COMPONENT ${BINARY_NAME}-qt)
218install(FILES ${CMAKE_SOURCE_DIR}/res/nointro.dat DESTINATION ${DATADIR} COMPONENT ${BINARY_NAME}-qt)
219if(NOT WIN32 AND NOT APPLE)
220	list(APPEND QT_DEFINES DATADIR="${DATADIR}")
221endif()
222
223find_package(Qt5LinguistTools)
224if(Qt5LinguistTools_FOUND)
225	set(TRANSLATION_FILES)
226	set(TRANSLATION_QRC "${CMAKE_CURRENT_BINARY_DIR}/ts.qrc")
227	file(GLOB TS_FILES "${CMAKE_CURRENT_SOURCE_DIR}/ts/${BINARY_NAME}-*.ts")
228	if(UPDATE_TRANSLATIONS)
229		qt5_create_translation(TRANSLATION_FILES ${SOURCE_FILES} ${UI_FILES} ${TS_FILES} OPTIONS -locations absolute -no-obsolete)
230	else()
231		qt5_add_translation(TRANSLATION_FILES ${TS_FILES})
232	endif()
233	add_custom_command(OUTPUT ${TRANSLATION_QRC}
234		               COMMAND ${CMAKE_COMMAND} -DTRANSLATION_QRC:FILEPATH="${TRANSLATION_QRC}" -DQM_BASE="${CMAKE_CURRENT_BINARY_DIR}" -P "${CMAKE_CURRENT_SOURCE_DIR}/ts.cmake"
235		               DEPENDS ${TRANSLATION_FILES})
236	qt5_add_resources(TRANSLATION_RESOURCES ${TRANSLATION_QRC})
237	list(APPEND RESOURCES ${TRANSLATION_RESOURCES})
238endif()
239
240qt5_wrap_ui(UI_SRC ${UI_FILES})
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)
246if(BUILD_GL OR BUILD_GLES2)
247	list(APPEND QT_LIBRARIES Qt5::OpenGL ${OPENGL_LIBRARY} ${OPENGLES2_LIBRARY})
248endif()
249target_link_libraries(${BINARY_NAME}-qt ${PLATFORM_LIBRARY} ${BINARY_NAME} ${QT_LIBRARIES})
250set(CPACK_DEBIAN_PACKAGE_DEPENDS "${CPACK_DEBIAN_PACKAGE_DEPENDS}" PARENT_SCOPE)
251
252install(TARGETS ${BINARY_NAME}-qt
253	RUNTIME DESTINATION bin COMPONENT ${BINARY_NAME}-qt
254	BUNDLE DESTINATION Applications COMPONENT ${BINARY_NAME}-qt)
255if(UNIX AND NOT APPLE)
256	find_program(DESKTOP_FILE_INSTALL desktop-file-install)
257	if(DESKTOP_FILE_INSTALL)
258		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/\")")
259	endif()
260endif()
261if(UNIX)
262	install(FILES ${CMAKE_SOURCE_DIR}/doc/mgba-qt.6 DESTINATION ${MANDIR}/man6 COMPONENT ${BINARY_NAME}-qt)
263endif()
264if(APPLE OR WIN32)
265	set_target_properties(${BINARY_NAME}-qt PROPERTIES OUTPUT_NAME ${PROJECT_NAME})
266endif()
267if(APPLE)
268	message(STATUS ${CMAKE_SYSTEM_NAME})
269	if(CMAKE_HOST_SYSTEM_NAME STREQUAL "Darwin")
270		get_target_property(QTCOCOA Qt5::QCocoaIntegrationPlugin LOCATION)
271		get_target_property(COREAUDIO Qt5::CoreAudioPlugin LOCATION)
272		get_target_property(BUNDLE_PATH ${BINARY_NAME}-qt LOCATION)
273		target_sources(${BINARY_NAME}-qt PRIVATE "${PLUGINS}")
274		set_source_files_properties("${QTCOCOA}" PROPERTIES MACOSX_PACKAGE_LOCATION Contents/PlugIns)
275		set_source_files_properties("${COREAUDIO}" PROPERTIES MACOSX_PACKAGE_LOCATION Contents/PlugIns)
276		install(CODE "
277		   include(BundleUtilities)
278		   set(BU_CHMOD_BUNDLE_ITEMS ON)
279		   file(GLOB_RECURSE PLUGINS \"${BUNDLE_PATH}/Contents/PlugIns/*${CMAKE_SHARED_LIBRARY_SUFFIX}\")
280		   fixup_bundle(\"${BUNDLE_PATH}\"   \"${PLUGINS}\"   \"\")
281		   " COMPONENT ${BINARY_NAME}-qt)
282	else()
283		set(DEPLOY_OPTIONS -p platforms/libqcocoa.dylib,audio/libqtaudio_coreaudio.dylib)
284		if(NOT CMAKE_INSTALL_NAME_TOOL EQUAL "install_name_tool")
285			set(DEPLOY_OPTIONS ${DEPLOY_OPTIONS} -I "${CMAKE_INSTALL_NAME_TOOL}")
286		endif()
287		if(DEFINED CMAKE_OTOOL AND NOT CMAKE_OTOOL EQUAL "otool")
288			set(DEPLOY_OPTIONS ${DEPLOY_OPTIONS} -O "${CMAKE_OTOOL}")
289		endif()
290		if(DEFINED CROSS_ROOT)
291			set(DEPLOY_OPTIONS ${DEPLOY_OPTIONS} -R "${CROSS_ROOT}")
292		endif()
293		install(CODE "execute_process(COMMAND \"${CMAKE_SOURCE_DIR}/tools/deploy-mac.py\" -v ${DEPLOY_OPTIONS} \"\$ENV{DESTDIR}\${CMAKE_INSTALL_PREFIX}/Applications/${PROJECT_NAME}.app\")")
294	endif()
295endif()
296if(WIN32 AND CMAKE_MAJOR_VERSION GREATER 2 AND CMAKE_MINOR_VERSION GREATER 7)
297	# Work around CMake issue #16907
298	set_target_properties(${BINARY_NAME}-qt PROPERTIES AUTORCC ON SKIP_AUTORCC ON)
299endif()