all repos — mgba @ 746af3ff8285dd0b2932a7e74425be48966709ed

mGBA Game Boy Advance Emulator

src/platform/qt/CMakeLists.txt (view raw)

  1cmake_minimum_required(VERSION 2.8.11)
  2enable_language(CXX)
  3
  4set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} --std=c++11")
  5
  6if(APPLE)
  7	set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -mmacosx-version-min=10.7")
  8	if (CMAKE_CXX_COMPILER_ID MATCHES "Clang")
  9		set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -stdlib=libc++")
 10	endif()
 11endif()
 12
 13set(PLATFORM_SRC)
 14set(QT_STATIC OFF)
 15
 16if(BUILD_SDL)
 17	if(NOT SDL_FOUND AND NOT SDL2_FOUND)
 18		find_package(SDL 1.2 REQUIRED)
 19	endif()
 20	if(SDL2_FOUND)
 21		link_directories(${SDL2_LIBDIR})
 22	endif()
 23	list(APPEND PLATFORM_LIBRARY ${SDL_LIBRARY} ${SDLMAIN_LIBRARY})
 24	list(APPEND PLATFORM_SRC ${PLATFORM_SRC} ${CMAKE_SOURCE_DIR}/src/platform/sdl/sdl-events.c ${CMAKE_SOURCE_DIR}/src/platform/sdl/sdl-audio.c)
 25	include_directories(${SDL_INCLUDE_DIR} ${CMAKE_SOURCE_DIR}/src/platform/sdl)
 26endif()
 27
 28set(CMAKE_AUTOMOC ON)
 29set(CMAKE_INCLUDE_CURRENT_DIR ON)
 30
 31if(NOT WIN32 OR NOT BUILD_SDL)
 32	find_package(Qt5Multimedia)
 33endif()
 34find_package(Qt5OpenGL)
 35find_package(Qt5Widgets)
 36
 37if(NOT BUILD_GL AND NOT BUILD_GLES2)
 38	message(WARNING "OpenGL is required to build the Qt port")
 39	set(BUILD_QT OFF PARENT_SCOPE)
 40	return()
 41endif()
 42
 43if(NOT Qt5OpenGL_FOUND OR NOT Qt5Widgets_FOUND)
 44	message(WARNING "Cannot find Qt modules")
 45	set(BUILD_QT OFF PARENT_SCOPE)
 46	return()
 47endif()
 48
 49if(BUILD_GL)
 50	list(APPEND PLATFORM_SRC ${CMAKE_SOURCE_DIR}/src/platform/opengl/gl.c)
 51	if(NOT WIN32 OR USE_EPOXY)
 52		list(APPEND PLATFORM_SRC ${CMAKE_SOURCE_DIR}/src/platform/opengl/gles2.c)
 53	endif()
 54endif()
 55
 56if(BUILD_GLES2)
 57	list(APPEND PLATFORM_SRC ${CMAKE_SOURCE_DIR}/src/platform/opengl/gles2.c)
 58endif()
 59
 60get_target_property(QT_TYPE Qt5::Core TYPE)
 61if(QT_TYPE STREQUAL STATIC_LIBRARY)
 62	set(QT_STATIC ON)
 63	list(APPEND QT_DEFINES QT_STATIC)
 64endif()
 65
 66set(SOURCE_FILES
 67	AboutScreen.cpp
 68	AudioProcessor.cpp
 69	CheatsModel.cpp
 70	CheatsView.cpp
 71	ConfigController.cpp
 72	Display.cpp
 73	DisplayGL.cpp
 74	DisplayQt.cpp
 75	GBAApp.cpp
 76	GBAKeyEditor.cpp
 77	GIFView.cpp
 78	GameController.cpp
 79	GamepadAxisEvent.cpp
 80	GamepadButtonEvent.cpp
 81	IOViewer.cpp
 82	InputController.cpp
 83	InputProfile.cpp
 84	KeyEditor.cpp
 85	LoadSaveState.cpp
 86	LogController.cpp
 87	LogView.cpp
 88	MemoryModel.cpp
 89	MemoryView.cpp
 90	MessagePainter.cpp
 91	MultiplayerController.cpp
 92	OverrideView.cpp
 93	PaletteView.cpp
 94	ROMInfo.cpp
 95	SavestateButton.cpp
 96	SensorView.cpp
 97	SettingsView.cpp
 98	ShaderSelector.cpp
 99	ShortcutController.cpp
100	ShortcutView.cpp
101	Swatch.cpp
102	Window.cpp
103	VFileDevice.cpp
104	VideoView.cpp)
105
106qt5_wrap_ui(UI_FILES
107	AboutScreen.ui
108	CheatsView.ui
109	GIFView.ui
110	IOViewer.ui
111	LoadSaveState.ui
112	LogView.ui
113	MemoryView.ui
114	OverrideView.ui
115	PaletteView.ui
116	ROMInfo.ui
117	SensorView.ui
118	SettingsView.ui
119	ShaderSelector.ui
120	ShortcutView.ui
121	VideoView.ui)
122
123set(QT_LIBRARIES)
124set(CPACK_DEBIAN_PACKAGE_DEPENDS "${CPACK_DEBIAN_PACKAGE_DEPENDS},libqt5widgets5,libqt5opengl5")
125
126set(AUDIO_SRC)
127if(BUILD_SDL)
128	list(APPEND AUDIO_SRC AudioProcessorSDL.cpp)
129endif()
130
131set(QT_DEFINES)
132if(Qt5Multimedia_FOUND)
133	list(APPEND AUDIO_SRC
134		AudioProcessorQt.cpp
135		AudioDevice.cpp)
136	if (WIN32 AND QT_STATIC)
137		list(APPEND QT_LIBRARIES qtaudio_windows strmiids winmm)
138	endif()
139	list(APPEND QT_LIBRARIES Qt5::Multimedia)
140	list(APPEND QT_DEFINES BUILD_QT_MULTIMEDIA)
141	set(CPACK_DEBIAN_PACKAGE_DEPENDS "${CPACK_DEBIAN_PACKAGE_DEPENDS},libqt5multimedia5")
142endif()
143
144if(NOT AUDIO_SRC)
145	message(WARNING "No supported audio modules found")
146	set(BUILD_QT OFF PARENT_SCOPE)
147	return()
148endif()
149
150if(USE_GDB_STUB)
151	list(APPEND PLATFORM_SRC GDBController.cpp GDBWindow.cpp)
152endif()
153set(MACOSX_BUNDLE_ICON_FILE mgba.icns)
154set(MACOSX_BUNDLE_BUNDLE_VERSION ${LIB_VERSION_STRING})
155set(MACOSX_BUNDLE_BUNDLE_NAME ${PROJECT_NAME})
156set(MACOSX_BUNDLE_GUI_IDENTIFIER com.endrift.${BINARY_NAME}-qt)
157set_source_files_properties(${CMAKE_SOURCE_DIR}/res/mgba.icns PROPERTIES MACOSX_PACKAGE_LOCATION Resources)
158
159qt5_add_resources(RESOURCES resources.qrc)
160if(WIN32)
161	configure_file(${CMAKE_SOURCE_DIR}/res/mgba.rc.in ${CMAKE_BINARY_DIR}/res/mgba.rc)
162	list(APPEND RESOURCES ${CMAKE_BINARY_DIR}/res/mgba.rc)
163	if(QT_STATIC)
164		list(APPEND QT_LIBRARIES qwindows imm32)
165	endif()
166endif()
167if(APPLE)
168	set(SHADER_DIR Applications/${PROJECT_NAME}.app/Contents/Resources)
169else()
170	set(SHADER_DIR ${CMAKE_INSTALL_DATADIR}/${BINARY_NAME})
171endif()
172install(DIRECTORY ${CMAKE_SOURCE_DIR}/res/shaders DESTINATION ${SHADER_DIR} COMPONENT ${BINARY_NAME}-qt)
173if(NOT WIN32 AND NOT APPLE)
174	list(APPEND QT_DEFINES QT_SHADER_DIR="${SHADER_DIR}/shaders")
175endif()
176
177add_executable(${BINARY_NAME}-qt WIN32 MACOSX_BUNDLE main.cpp ${CMAKE_SOURCE_DIR}/res/mgba.icns ${SOURCE_FILES} ${PLATFORM_SRC} ${UI_FILES} ${AUDIO_SRC} ${RESOURCES})
178set_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}")
179
180list(APPEND QT_LIBRARIES Qt5::Widgets Qt5::OpenGL)
181target_link_libraries(${BINARY_NAME}-qt ${PLATFORM_LIBRARY} ${BINARY_NAME} ${QT_LIBRARIES} ${OPENGL_LIBRARY} ${OPENGLES2_LIBRARY})
182set(CPACK_DEBIAN_PACKAGE_DEPENDS "${CPACK_DEBIAN_PACKAGE_DEPENDS}" PARENT_SCOPE)
183
184install(TARGETS ${BINARY_NAME}-qt
185	RUNTIME DESTINATION bin COMPONENT ${BINARY_NAME}-qt
186	BUNDLE DESTINATION Applications COMPONENT ${BINARY_NAME}-qt)
187if(UNIX AND NOT APPLE)
188	find_program(DESKTOP_FILE_INSTALL desktop-file-install)
189	if(DESKTOP_FILE_INSTALL)
190		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/\")")
191	endif()
192endif()
193if(UNIX)
194	install(FILES ${CMAKE_SOURCE_DIR}/doc/mgba-qt.6 DESTINATION ${MANDIR}/man6 COMPONENT ${BINARY_NAME}-qt)
195endif()
196if(APPLE OR WIN32)
197	set_target_properties(${BINARY_NAME}-qt PROPERTIES OUTPUT_NAME ${PROJECT_NAME})
198endif()
199if(APPLE)
200	set(DEPLOY_OPTIONS -p platforms/libqcocoa.dylib,audio/libqtaudio_coreaudio.dylib)
201	if(NOT CMAKE_INSTALL_NAME_TOOL EQUAL "install_name_tool")
202		set(DEPLOY_OPTIONS ${DEPLOY_OPTIONS} -I ${CMAKE_INSTALL_NAME_TOOL})
203	endif()
204	if(DEFINED CMAKE_OTOOL AND NOT CMAKE_OTOOL EQUAL "otool")
205		set(DEPLOY_OPTIONS ${DEPLOY_OPTIONS} -O ${CMAKE_OTOOL})
206	endif()
207	if(DEFINED CROSS_ROOT)
208		set(DEPLOY_OPTIONS ${DEPLOY_OPTIONS} -R ${CROSS_ROOT})
209	endif()
210	add_custom_command(TARGET ${BINARY_NAME}-qt POST_BUILD COMMAND ${CMAKE_SOURCE_DIR}/tools/deploy-mac.py ${DEPLOY_OPTIONS} ${PROJECT_NAME}.app)
211endif()