all repos — mgba @ c0689783da366b4727c9c15cbc888b8ee3e0ce2a

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