all repos — mgba @ a30599e2396c4920d4b068caa682c6ba4c6e8830

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	GIFView.ui
122	IOViewer.ui
123	LoadSaveState.ui
124	LogView.ui
125	MemoryView.ui
126	ObjView.ui
127	OverrideView.ui
128	PaletteView.ui
129	ROMInfo.ui
130	SensorView.ui
131	SettingsView.ui
132	ShaderSelector.ui
133	ShortcutView.ui
134	TileView.ui
135	VideoView.ui)
136
137set(GBA_SRC
138	GBAOverride.cpp)
139
140set(GB_SRC
141	GBOverride.cpp)
142
143qt5_wrap_ui(UI_SRC ${UI_FILES})
144
145set(QT_LIBRARIES)
146set(CPACK_DEBIAN_PACKAGE_DEPENDS "${CPACK_DEBIAN_PACKAGE_DEPENDS},libqt5widgets5,libqt5opengl5,libqt5network5")
147
148set(AUDIO_SRC)
149if(BUILD_SDL)
150	list(APPEND AUDIO_SRC AudioProcessorSDL.cpp)
151endif()
152
153if(M_CORE_GBA)
154	list(APPEND PLATFORM_SRC ${GBA_SRC})
155endif()
156
157if(M_CORE_GB)
158	list(APPEND PLATFORM_SRC ${GB_SRC})
159endif()
160
161set(QT_DEFINES)
162if(Qt5Multimedia_FOUND)
163	list(APPEND AUDIO_SRC
164		AudioProcessorQt.cpp
165		AudioDevice.cpp)
166	if (WIN32 AND QT_STATIC)
167		list(APPEND QT_LIBRARIES qtaudio_windows strmiids winmm)
168	endif()
169	list(APPEND QT_LIBRARIES Qt5::Multimedia)
170	list(APPEND QT_DEFINES BUILD_QT_MULTIMEDIA)
171	set(CPACK_DEBIAN_PACKAGE_DEPENDS "${CPACK_DEBIAN_PACKAGE_DEPENDS},libqt5multimedia5")
172endif()
173
174if(NOT AUDIO_SRC)
175	message(WARNING "No supported audio modules found")
176	set(BUILD_QT OFF PARENT_SCOPE)
177	return()
178endif()
179
180if(USE_GDB_STUB)
181	list(APPEND PLATFORM_SRC GDBController.cpp GDBWindow.cpp)
182endif()
183
184qt5_add_resources(RESOURCES resources.qrc)
185if(APPLE)
186	set(MACOSX_BUNDLE_ICON_FILE mgba.icns)
187	set(MACOSX_BUNDLE_BUNDLE_VERSION ${LIB_VERSION_STRING})
188	set(MACOSX_BUNDLE_BUNDLE_NAME ${PROJECT_NAME})
189	set(MACOSX_BUNDLE_GUI_IDENTIFIER com.endrift.${BINARY_NAME}-qt)
190	set_source_files_properties(${CMAKE_SOURCE_DIR}/res/mgba.icns PROPERTIES MACOSX_PACKAGE_LOCATION Resources)
191endif()
192if(WIN32)
193	configure_file(${CMAKE_SOURCE_DIR}/res/mgba.rc.in ${CMAKE_BINARY_DIR}/res/mgba.rc)
194	list(APPEND RESOURCES ${CMAKE_BINARY_DIR}/res/mgba.rc)
195	set_source_files_properties(${CMAKE_BINARY_DIR}/res/mgba.rc PROPERTIES OBJECT_DEPENDS ${CMAKE_SOURCE_DIR}/res/mgba.ico)
196	if(QT_STATIC)
197		list(APPEND QT_LIBRARIES qwindows Qt5PlatformSupport imm32)
198	endif()
199endif()
200if(NOT DEFINED DATADIR)
201	if(APPLE)
202		set(DATADIR Applications/${PROJECT_NAME}.app/Contents/Resources)
203	else()
204		set(DATADIR ${CMAKE_INSTALL_DATADIR}/${BINARY_NAME})
205	endif()
206endif()
207install(DIRECTORY ${CMAKE_SOURCE_DIR}/res/shaders DESTINATION ${DATADIR} COMPONENT ${BINARY_NAME}-qt)
208install(FILES ${CMAKE_SOURCE_DIR}/res/nointro.dat DESTINATION ${DATADIR} COMPONENT ${BINARY_NAME}-qt)
209if(NOT WIN32 AND NOT APPLE)
210	list(APPEND QT_DEFINES DATADIR="${DATADIR}")
211endif()
212
213find_package(Qt5LinguistTools)
214if(Qt5LinguistTools_FOUND)
215	set(TRANSLATION_FILES)
216	set(TRANSLATION_QRC "${CMAKE_CURRENT_BINARY_DIR}/ts.qrc")
217	file(GLOB TS_FILES "${CMAKE_CURRENT_SOURCE_DIR}/ts/${BINARY_NAME}-*.ts")
218	if(UPDATE_TRANSLATIONS)
219		qt5_create_translation(TRANSLATION_FILES ${SOURCE_FILES} ${UI_FILES} ${TS_FILES} OPTIONS -locations absolute -no-obsolete)
220	else()
221		qt5_add_translation(TRANSLATION_FILES ${TS_FILES})
222	endif()
223	add_custom_command(OUTPUT ${TRANSLATION_QRC}
224		               COMMAND ${CMAKE_COMMAND} -DTRANSLATION_QRC:FILEPATH="${TRANSLATION_QRC}" -DTRANSLATION_FILES="${TRANSLATION_FILES}" -P "${CMAKE_CURRENT_SOURCE_DIR}/ts.cmake"
225		               DEPENDS ${TRANSLATION_FILES})
226	qt5_add_resources(TRANSLATION_RESOURCES ${TRANSLATION_QRC})
227	list(APPEND RESOURCES ${TRANSLATION_RESOURCES})
228endif()
229
230add_executable(${BINARY_NAME}-qt WIN32 MACOSX_BUNDLE main.cpp ${CMAKE_SOURCE_DIR}/res/mgba.icns ${SOURCE_FILES} ${PLATFORM_SRC} ${UI_SRC} ${AUDIO_SRC} ${RESOURCES})
231set_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}")
232
233list(APPEND QT_LIBRARIES Qt5::Widgets Qt5::OpenGL Qt5::Network)
234target_link_libraries(${BINARY_NAME}-qt ${PLATFORM_LIBRARY} ${BINARY_NAME} ${QT_LIBRARIES} ${OPENGL_LIBRARY} ${OPENGLES2_LIBRARY})
235set(CPACK_DEBIAN_PACKAGE_DEPENDS "${CPACK_DEBIAN_PACKAGE_DEPENDS}" PARENT_SCOPE)
236
237install(TARGETS ${BINARY_NAME}-qt
238	RUNTIME DESTINATION bin COMPONENT ${BINARY_NAME}-qt
239	BUNDLE DESTINATION Applications COMPONENT ${BINARY_NAME}-qt)
240if(UNIX AND NOT APPLE)
241	find_program(DESKTOP_FILE_INSTALL desktop-file-install)
242	if(DESKTOP_FILE_INSTALL)
243		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/\")")
244	endif()
245endif()
246if(UNIX)
247	install(FILES ${CMAKE_SOURCE_DIR}/doc/mgba-qt.6 DESTINATION ${MANDIR}/man6 COMPONENT ${BINARY_NAME}-qt)
248endif()
249if(APPLE OR WIN32)
250	set_target_properties(${BINARY_NAME}-qt PROPERTIES OUTPUT_NAME ${PROJECT_NAME})
251endif()
252if(APPLE)
253	set(DEPLOY_OPTIONS -p platforms/libqcocoa.dylib,audio/libqtaudio_coreaudio.dylib)
254	if(NOT CMAKE_INSTALL_NAME_TOOL EQUAL "install_name_tool")
255		set(DEPLOY_OPTIONS ${DEPLOY_OPTIONS} -I ${CMAKE_INSTALL_NAME_TOOL})
256	endif()
257	if(DEFINED CMAKE_OTOOL AND NOT CMAKE_OTOOL EQUAL "otool")
258		set(DEPLOY_OPTIONS ${DEPLOY_OPTIONS} -O ${CMAKE_OTOOL})
259	endif()
260	if(DEFINED CROSS_ROOT)
261		set(DEPLOY_OPTIONS ${DEPLOY_OPTIONS} -R ${CROSS_ROOT})
262	endif()
263	add_custom_command(TARGET ${BINARY_NAME}-qt POST_BUILD COMMAND ${CMAKE_SOURCE_DIR}/tools/deploy-mac.py ${DEPLOY_OPTIONS} ${PROJECT_NAME}.app)
264endif()