all repos — mgba @ 7d360d6cb893f916ecdcece999303cd6a35e952c

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 ${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()