all repos — mgba @ ad85acab75a674ec46850a2381323632dae0a83a

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	ArchiveInspector.cpp
 72	AssetTile.cpp
 73	AssetView.cpp
 74	AudioProcessor.cpp
 75	CheatsModel.cpp
 76	CheatsView.cpp
 77	ConfigController.cpp
 78	Display.cpp
 79	DisplayGL.cpp
 80	DisplayQt.cpp
 81	GBAApp.cpp
 82	GBAKeyEditor.cpp
 83	GIFView.cpp
 84	GameController.cpp
 85	GamepadAxisEvent.cpp
 86	GamepadButtonEvent.cpp
 87	IOViewer.cpp
 88	InputController.cpp
 89	InputProfile.cpp
 90	KeyEditor.cpp
 91	LibraryModel.cpp
 92	LoadSaveState.cpp
 93	LogController.cpp
 94	LogView.cpp
 95	MemoryModel.cpp
 96	MemoryView.cpp
 97	MessagePainter.cpp
 98	MultiplayerController.cpp
 99	ObjView.cpp
100	OverrideView.cpp
101	PaletteView.cpp
102	ROMInfo.cpp
103	SavestateButton.cpp
104	SensorView.cpp
105	SettingsView.cpp
106	ShaderSelector.cpp
107	ShortcutController.cpp
108	ShortcutView.cpp
109	Swatch.cpp
110	TilePainter.cpp
111	TileView.cpp
112	Window.cpp
113	VFileDevice.cpp
114	VideoView.cpp)
115
116set(UI_FILES
117	AboutScreen.ui
118	ArchiveInspector.ui
119	AssetTile.ui
120	CheatsView.ui
121	DebuggerConsole.ui
122	GIFView.ui
123	IOViewer.ui
124	LoadSaveState.ui
125	LogView.ui
126	MemoryView.ui
127	ObjView.ui
128	OverrideView.ui
129	PaletteView.ui
130	ROMInfo.ui
131	SensorView.ui
132	SettingsView.ui
133	ShaderSelector.ui
134	ShortcutView.ui
135	TileView.ui
136	VideoView.ui)
137
138set(GBA_SRC
139	GBAOverride.cpp)
140
141set(GB_SRC
142	GBOverride.cpp)
143
144qt5_wrap_ui(UI_SRC ${UI_FILES})
145
146set(QT_LIBRARIES)
147set(CPACK_DEBIAN_PACKAGE_DEPENDS "${CPACK_DEBIAN_PACKAGE_DEPENDS},libqt5widgets5,libqt5opengl5,libqt5network5")
148
149set(AUDIO_SRC)
150if(BUILD_SDL)
151	list(APPEND AUDIO_SRC AudioProcessorSDL.cpp)
152endif()
153
154if(M_CORE_GBA)
155	list(APPEND PLATFORM_SRC ${GBA_SRC})
156endif()
157
158if(M_CORE_GB)
159	list(APPEND PLATFORM_SRC ${GB_SRC})
160endif()
161
162set(QT_DEFINES)
163if(Qt5Multimedia_FOUND)
164	list(APPEND AUDIO_SRC
165		AudioProcessorQt.cpp
166		AudioDevice.cpp)
167	if (WIN32 AND QT_STATIC)
168		list(APPEND QT_LIBRARIES qtaudio_windows strmiids winmm)
169	endif()
170	list(APPEND QT_LIBRARIES Qt5::Multimedia)
171	list(APPEND QT_DEFINES BUILD_QT_MULTIMEDIA)
172	set(CPACK_DEBIAN_PACKAGE_DEPENDS "${CPACK_DEBIAN_PACKAGE_DEPENDS},libqt5multimedia5")
173endif()
174
175if(NOT AUDIO_SRC)
176	message(WARNING "No supported audio modules found")
177	set(BUILD_QT OFF PARENT_SCOPE)
178	return()
179endif()
180
181if(USE_DEBUGGERS)
182	list(APPEND SOURCE_FILES
183		DebuggerController.cpp
184		DebuggerConsole.cpp
185		DebuggerConsoleController.cpp)
186endif()
187
188if(USE_GDB_STUB)
189	list(APPEND SOURCE_FILES GDBController.cpp GDBWindow.cpp)
190endif()
191
192qt5_add_resources(RESOURCES resources.qrc)
193if(APPLE)
194	set(MACOSX_BUNDLE_ICON_FILE mgba.icns)
195	set(MACOSX_BUNDLE_BUNDLE_VERSION ${LIB_VERSION_STRING})
196	set(MACOSX_BUNDLE_BUNDLE_NAME ${PROJECT_NAME})
197	set(MACOSX_BUNDLE_GUI_IDENTIFIER com.endrift.${BINARY_NAME}-qt)
198	set_source_files_properties(${CMAKE_SOURCE_DIR}/res/mgba.icns PROPERTIES MACOSX_PACKAGE_LOCATION Resources)
199endif()
200if(WIN32)
201	configure_file(${CMAKE_SOURCE_DIR}/res/mgba.rc.in ${CMAKE_BINARY_DIR}/res/mgba.rc)
202	list(APPEND RESOURCES ${CMAKE_BINARY_DIR}/res/mgba.rc)
203	set_source_files_properties(${CMAKE_BINARY_DIR}/res/mgba.rc PROPERTIES OBJECT_DEPENDS ${CMAKE_SOURCE_DIR}/res/mgba.ico)
204	if(QT_STATIC)
205		list(APPEND QT_LIBRARIES qwindows Qt5PlatformSupport imm32)
206	endif()
207endif()
208if(NOT DEFINED DATADIR)
209	if(APPLE)
210		set(DATADIR Applications/${PROJECT_NAME}.app/Contents/Resources)
211	else()
212		set(DATADIR ${CMAKE_INSTALL_DATADIR}/${BINARY_NAME})
213	endif()
214endif()
215install(DIRECTORY ${CMAKE_SOURCE_DIR}/res/shaders DESTINATION ${DATADIR} COMPONENT ${BINARY_NAME}-qt)
216install(FILES ${CMAKE_SOURCE_DIR}/res/nointro.dat DESTINATION ${DATADIR} COMPONENT ${BINARY_NAME}-qt)
217if(NOT WIN32 AND NOT APPLE)
218	list(APPEND QT_DEFINES DATADIR="${DATADIR}")
219endif()
220
221find_package(Qt5LinguistTools)
222if(Qt5LinguistTools_FOUND)
223	set(TRANSLATION_FILES)
224	set(TRANSLATION_QRC "${CMAKE_CURRENT_BINARY_DIR}/ts.qrc")
225	file(GLOB TS_FILES "${CMAKE_CURRENT_SOURCE_DIR}/ts/${BINARY_NAME}-*.ts")
226	if(UPDATE_TRANSLATIONS)
227		qt5_create_translation(TRANSLATION_FILES ${SOURCE_FILES} ${UI_FILES} ${TS_FILES} OPTIONS -locations absolute -no-obsolete)
228	else()
229		qt5_add_translation(TRANSLATION_FILES ${TS_FILES})
230	endif()
231	add_custom_command(OUTPUT ${TRANSLATION_QRC}
232		               COMMAND ${CMAKE_COMMAND} -DTRANSLATION_QRC:FILEPATH="${TRANSLATION_QRC}" -DTRANSLATION_FILES="${TRANSLATION_FILES}" -P "${CMAKE_CURRENT_SOURCE_DIR}/ts.cmake"
233		               DEPENDS ${TRANSLATION_FILES})
234	qt5_add_resources(TRANSLATION_RESOURCES ${TRANSLATION_QRC})
235	list(APPEND RESOURCES ${TRANSLATION_RESOURCES})
236endif()
237
238add_executable(${BINARY_NAME}-qt WIN32 MACOSX_BUNDLE main.cpp ${CMAKE_SOURCE_DIR}/res/mgba.icns ${SOURCE_FILES} ${PLATFORM_SRC} ${UI_SRC} ${AUDIO_SRC} ${RESOURCES})
239set_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}")
240
241list(APPEND QT_LIBRARIES Qt5::Widgets Qt5::OpenGL Qt5::Network)
242target_link_libraries(${BINARY_NAME}-qt ${PLATFORM_LIBRARY} ${BINARY_NAME} ${QT_LIBRARIES} ${OPENGL_LIBRARY} ${OPENGLES2_LIBRARY})
243set(CPACK_DEBIAN_PACKAGE_DEPENDS "${CPACK_DEBIAN_PACKAGE_DEPENDS}" PARENT_SCOPE)
244
245install(TARGETS ${BINARY_NAME}-qt
246	RUNTIME DESTINATION bin COMPONENT ${BINARY_NAME}-qt
247	BUNDLE DESTINATION Applications COMPONENT ${BINARY_NAME}-qt)
248if(UNIX AND NOT APPLE)
249	find_program(DESKTOP_FILE_INSTALL desktop-file-install)
250	if(DESKTOP_FILE_INSTALL)
251		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/\")")
252	endif()
253endif()
254if(UNIX)
255	install(FILES ${CMAKE_SOURCE_DIR}/doc/mgba-qt.6 DESTINATION ${MANDIR}/man6 COMPONENT ${BINARY_NAME}-qt)
256endif()
257if(APPLE OR WIN32)
258	set_target_properties(${BINARY_NAME}-qt PROPERTIES OUTPUT_NAME ${PROJECT_NAME})
259endif()
260if(APPLE)
261	set(DEPLOY_OPTIONS -p platforms/libqcocoa.dylib,audio/libqtaudio_coreaudio.dylib)
262	if(NOT CMAKE_INSTALL_NAME_TOOL EQUAL "install_name_tool")
263		set(DEPLOY_OPTIONS ${DEPLOY_OPTIONS} -I ${CMAKE_INSTALL_NAME_TOOL})
264	endif()
265	if(DEFINED CMAKE_OTOOL AND NOT CMAKE_OTOOL EQUAL "otool")
266		set(DEPLOY_OPTIONS ${DEPLOY_OPTIONS} -O ${CMAKE_OTOOL})
267	endif()
268	if(DEFINED CROSS_ROOT)
269		set(DEPLOY_OPTIONS ${DEPLOY_OPTIONS} -R ${CROSS_ROOT})
270	endif()
271	add_custom_command(TARGET ${BINARY_NAME}-qt POST_BUILD COMMAND ${CMAKE_SOURCE_DIR}/tools/deploy-mac.py ${DEPLOY_OPTIONS} ${PROJECT_NAME}.app)
272endif()