all repos — mgba @ 26a62cce6475f765151093597e5c33cf3fdd5d59

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	DebuggerController.cpp
 79	Display.cpp
 80	DisplayGL.cpp
 81	DisplayQt.cpp
 82	GBAApp.cpp
 83	GBAKeyEditor.cpp
 84	GIFView.cpp
 85	GameController.cpp
 86	GamepadAxisEvent.cpp
 87	GamepadButtonEvent.cpp
 88	IOViewer.cpp
 89	InputController.cpp
 90	InputProfile.cpp
 91	KeyEditor.cpp
 92	LibraryModel.cpp
 93	LoadSaveState.cpp
 94	LogController.cpp
 95	LogView.cpp
 96	MemoryModel.cpp
 97	MemoryView.cpp
 98	MessagePainter.cpp
 99	MultiplayerController.cpp
100	ObjView.cpp
101	OverrideView.cpp
102	PaletteView.cpp
103	ROMInfo.cpp
104	SavestateButton.cpp
105	SensorView.cpp
106	SettingsView.cpp
107	ShaderSelector.cpp
108	ShortcutController.cpp
109	ShortcutView.cpp
110	Swatch.cpp
111	TilePainter.cpp
112	TileView.cpp
113	Window.cpp
114	VFileDevice.cpp
115	VideoView.cpp)
116
117set(UI_FILES
118	AboutScreen.ui
119	ArchiveInspector.ui
120	AssetTile.ui
121	CheatsView.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_GDB_STUB)
182	list(APPEND PLATFORM_SRC GDBController.cpp GDBWindow.cpp)
183endif()
184
185qt5_add_resources(RESOURCES resources.qrc)
186if(APPLE)
187	set(MACOSX_BUNDLE_ICON_FILE mgba.icns)
188	set(MACOSX_BUNDLE_BUNDLE_VERSION ${LIB_VERSION_STRING})
189	set(MACOSX_BUNDLE_BUNDLE_NAME ${PROJECT_NAME})
190	set(MACOSX_BUNDLE_GUI_IDENTIFIER com.endrift.${BINARY_NAME}-qt)
191	set_source_files_properties(${CMAKE_SOURCE_DIR}/res/mgba.icns PROPERTIES MACOSX_PACKAGE_LOCATION Resources)
192endif()
193if(WIN32)
194	configure_file(${CMAKE_SOURCE_DIR}/res/mgba.rc.in ${CMAKE_BINARY_DIR}/res/mgba.rc)
195	list(APPEND RESOURCES ${CMAKE_BINARY_DIR}/res/mgba.rc)
196	set_source_files_properties(${CMAKE_BINARY_DIR}/res/mgba.rc PROPERTIES OBJECT_DEPENDS ${CMAKE_SOURCE_DIR}/res/mgba.ico)
197	if(QT_STATIC)
198		list(APPEND QT_LIBRARIES qwindows Qt5PlatformSupport imm32)
199	endif()
200endif()
201if(NOT DEFINED DATADIR)
202	if(APPLE)
203		set(DATADIR Applications/${PROJECT_NAME}.app/Contents/Resources)
204	else()
205		set(DATADIR ${CMAKE_INSTALL_DATADIR}/${BINARY_NAME})
206	endif()
207endif()
208install(DIRECTORY ${CMAKE_SOURCE_DIR}/res/shaders DESTINATION ${DATADIR} COMPONENT ${BINARY_NAME}-qt)
209install(FILES ${CMAKE_SOURCE_DIR}/res/nointro.dat DESTINATION ${DATADIR} COMPONENT ${BINARY_NAME}-qt)
210if(NOT WIN32 AND NOT APPLE)
211	list(APPEND QT_DEFINES DATADIR="${DATADIR}")
212endif()
213
214find_package(Qt5LinguistTools)
215if(Qt5LinguistTools_FOUND)
216	set(TRANSLATION_FILES)
217	set(TRANSLATION_QRC "${CMAKE_CURRENT_BINARY_DIR}/ts.qrc")
218	file(GLOB TS_FILES "${CMAKE_CURRENT_SOURCE_DIR}/ts/${BINARY_NAME}-*.ts")
219	if(UPDATE_TRANSLATIONS)
220		qt5_create_translation(TRANSLATION_FILES ${SOURCE_FILES} ${UI_FILES} ${TS_FILES} OPTIONS -locations absolute -no-obsolete)
221	else()
222		qt5_add_translation(TRANSLATION_FILES ${TS_FILES})
223	endif()
224	add_custom_command(OUTPUT ${TRANSLATION_QRC}
225		               COMMAND ${CMAKE_COMMAND} -DTRANSLATION_QRC:FILEPATH="${TRANSLATION_QRC}" -DTRANSLATION_FILES="${TRANSLATION_FILES}" -P "${CMAKE_CURRENT_SOURCE_DIR}/ts.cmake"
226		               DEPENDS ${TRANSLATION_FILES})
227	qt5_add_resources(TRANSLATION_RESOURCES ${TRANSLATION_QRC})
228	list(APPEND RESOURCES ${TRANSLATION_RESOURCES})
229endif()
230
231add_executable(${BINARY_NAME}-qt WIN32 MACOSX_BUNDLE main.cpp ${CMAKE_SOURCE_DIR}/res/mgba.icns ${SOURCE_FILES} ${PLATFORM_SRC} ${UI_SRC} ${AUDIO_SRC} ${RESOURCES})
232set_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}")
233
234list(APPEND QT_LIBRARIES Qt5::Widgets Qt5::OpenGL Qt5::Network)
235target_link_libraries(${BINARY_NAME}-qt ${PLATFORM_LIBRARY} ${BINARY_NAME} ${QT_LIBRARIES} ${OPENGL_LIBRARY} ${OPENGLES2_LIBRARY})
236set(CPACK_DEBIAN_PACKAGE_DEPENDS "${CPACK_DEBIAN_PACKAGE_DEPENDS}" PARENT_SCOPE)
237
238install(TARGETS ${BINARY_NAME}-qt
239	RUNTIME DESTINATION bin COMPONENT ${BINARY_NAME}-qt
240	BUNDLE DESTINATION Applications COMPONENT ${BINARY_NAME}-qt)
241if(UNIX AND NOT APPLE)
242	find_program(DESKTOP_FILE_INSTALL desktop-file-install)
243	if(DESKTOP_FILE_INSTALL)
244		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/\")")
245	endif()
246endif()
247if(UNIX)
248	install(FILES ${CMAKE_SOURCE_DIR}/doc/mgba-qt.6 DESTINATION ${MANDIR}/man6 COMPONENT ${BINARY_NAME}-qt)
249endif()
250if(APPLE OR WIN32)
251	set_target_properties(${BINARY_NAME}-qt PROPERTIES OUTPUT_NAME ${PROJECT_NAME})
252endif()
253if(APPLE)
254	set(DEPLOY_OPTIONS -p platforms/libqcocoa.dylib,audio/libqtaudio_coreaudio.dylib)
255	if(NOT CMAKE_INSTALL_NAME_TOOL EQUAL "install_name_tool")
256		set(DEPLOY_OPTIONS ${DEPLOY_OPTIONS} -I ${CMAKE_INSTALL_NAME_TOOL})
257	endif()
258	if(DEFINED CMAKE_OTOOL AND NOT CMAKE_OTOOL EQUAL "otool")
259		set(DEPLOY_OPTIONS ${DEPLOY_OPTIONS} -O ${CMAKE_OTOOL})
260	endif()
261	if(DEFINED CROSS_ROOT)
262		set(DEPLOY_OPTIONS ${DEPLOY_OPTIONS} -R ${CROSS_ROOT})
263	endif()
264	add_custom_command(TARGET ${BINARY_NAME}-qt POST_BUILD COMMAND ${CMAKE_SOURCE_DIR}/tools/deploy-mac.py ${DEPLOY_OPTIONS} ${PROJECT_NAME}.app)
265endif()