all repos — mgba @ 111337e3e0907bde2a84bf89b259e05e9224dc96

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