all repos — mgba @ 03db6b38336e4314bc4414c2e71fe3bac62005c9

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 Qt5OpenGL_FOUND OR NOT Qt5Widgets_FOUND OR NOT OPENGL_FOUND)
 38	message(WARNING "Cannot find Qt modules")
 39	set(BUILD_QT OFF PARENT_SCOPE)
 40	return()
 41endif()
 42
 43if(BUILD_GL)
 44list(APPEND PLATFORM_SRC ${PLATFORM_SRC} ${CMAKE_SOURCE_DIR}/src/platform/opengl/gl.c)
 45endif()
 46
 47if(BUILD_GLES2)
 48list(APPEND PLATFORM_SRC ${PLATFORM_SRC} ${CMAKE_SOURCE_DIR}/src/platform/opengl/gles2.c)
 49endif()
 50
 51get_target_property(QT_TYPE Qt5::Core TYPE)
 52if(QT_TYPE STREQUAL STATIC_LIBRARY)
 53	set(QT_STATIC ON)
 54	add_definitions(-DQT_STATIC)
 55endif()
 56
 57set(SOURCE_FILES
 58	AboutScreen.cpp
 59	AudioProcessor.cpp
 60	CheatsModel.cpp
 61	CheatsView.cpp
 62	ConfigController.cpp
 63	Display.cpp
 64	DisplayGL.cpp
 65	DisplayQt.cpp
 66	GBAApp.cpp
 67	GBAKeyEditor.cpp
 68	GIFView.cpp
 69	GameController.cpp
 70	GamepadAxisEvent.cpp
 71	GamepadButtonEvent.cpp
 72	InputController.cpp
 73	InputProfile.cpp
 74	KeyEditor.cpp
 75	LoadSaveState.cpp
 76	LogController.cpp
 77	LogView.cpp
 78	MemoryModel.cpp
 79	MemoryView.cpp
 80	MessagePainter.cpp
 81	MultiplayerController.cpp
 82	OverrideView.cpp
 83	PaletteView.cpp
 84	SavestateButton.cpp
 85	SensorView.cpp
 86	SettingsView.cpp
 87	ShortcutController.cpp
 88	ShortcutView.cpp
 89	Swatch.cpp
 90	Window.cpp
 91	VFileDevice.cpp
 92	VideoView.cpp)
 93
 94qt5_wrap_ui(UI_FILES
 95	AboutScreen.ui
 96	CheatsView.ui
 97	GIFView.ui
 98	LoadSaveState.ui
 99	LogView.ui
100	MemoryView.ui
101	OverrideView.ui
102	PaletteView.ui
103	SensorView.ui
104	SettingsView.ui
105	ShortcutView.ui
106	VideoView.ui)
107
108set(QT_LIBRARIES)
109set(CPACK_DEBIAN_PACKAGE_DEPENDS "${CPACK_DEBIAN_PACKAGE_DEPENDS},libqt5widgets5,libqt5opengl5")
110
111set(AUDIO_SRC)
112if(BUILD_SDL)
113	list(APPEND AUDIO_SRC AudioProcessorSDL.cpp)
114endif()
115
116if(Qt5Multimedia_FOUND)
117	list(APPEND AUDIO_SRC
118		AudioProcessorQt.cpp
119		AudioDevice.cpp)
120	if (WIN32 AND QT_STATIC)
121		list(APPEND QT_LIBRARIES qtaudio_windows strmiids winmm)
122	endif()
123	list(APPEND QT_LIBRARIES Qt5::Multimedia)
124	add_definitions(-DBUILD_QT_MULTIMEDIA)
125	set(CPACK_DEBIAN_PACKAGE_DEPENDS "${CPACK_DEBIAN_PACKAGE_DEPENDS},libqt5multimedia5")
126endif()
127
128if(NOT AUDIO_SRC)
129	message(WARNING "No supported audio modules found")
130	set(BUILD_QT OFF PARENT_SCOPE)
131	return()
132endif()
133
134if(USE_GDB_STUB)
135	list(APPEND PLATFORM_SRC GDBController.cpp GDBWindow.cpp)
136endif()
137set(MACOSX_BUNDLE_ICON_FILE mgba.icns)
138set(MACOSX_BUNDLE_BUNDLE_VERSION ${LIB_VERSION_STRING})
139set(MACOSX_BUNDLE_BUNDLE_NAME ${PROJECT_NAME})
140set(MACOSX_BUNDLE_GUI_IDENTIFIER com.endrift.${BINARY_NAME}-qt)
141set_source_files_properties(${CMAKE_SOURCE_DIR}/res/mgba.icns PROPERTIES MACOSX_PACKAGE_LOCATION Resources)
142
143qt5_add_resources(RESOURCES resources.qrc)
144if(WIN32)
145	configure_file(${CMAKE_SOURCE_DIR}/res/mgba.rc.in ${CMAKE_BINARY_DIR}/res/mgba.rc)
146	list(APPEND RESOURCES ${CMAKE_BINARY_DIR}/res/mgba.rc)
147	if(QT_STATIC)
148		list(APPEND QT_LIBRARIES qwindows imm32)
149	endif()
150endif()
151add_executable(${BINARY_NAME}-qt WIN32 MACOSX_BUNDLE main.cpp ${CMAKE_SOURCE_DIR}/res/mgba.icns ${SOURCE_FILES} ${PLATFORM_SRC} ${UI_FILES} ${AUDIO_SRC} ${RESOURCES})
152set_target_properties(${BINARY_NAME}-qt PROPERTIES MACOSX_BUNDLE_INFO_PLIST ${CMAKE_SOURCE_DIR}/res/info.plist.in COMPILE_DEFINITIONS "${FEATURE_DEFINES}")
153
154list(APPEND QT_LIBRARIES Qt5::Widgets Qt5::OpenGL)
155target_link_libraries(${BINARY_NAME}-qt ${PLATFORM_LIBRARY} ${OPENGL_LIBRARY} ${BINARY_NAME} ${QT_LIBRARIES})
156set(CPACK_DEBIAN_PACKAGE_DEPENDS "${CPACK_DEBIAN_PACKAGE_DEPENDS}" PARENT_SCOPE)
157
158install(TARGETS ${BINARY_NAME}-qt
159	RUNTIME DESTINATION bin COMPONENT ${BINARY_NAME}-qt
160	BUNDLE DESTINATION Applications COMPONENT ${BINARY_NAME}-qt)
161if(UNIX AND NOT APPLE)
162	find_program(DESKTOP_FILE_INSTALL desktop-file-install)
163	if(DESKTOP_FILE_INSTALL)
164		install(CODE "execute_process(COMMAND ${DESKTOP_FILE_INSTALL} \"${CMAKE_SOURCE_DIR}/res/mgba-qt.desktop\" --dir \"$ENV{DESTDIR}${CMAKE_INSTALL_PREFIX}/share/applications/\")")
165	endif()
166endif()
167if(APPLE OR WIN32)
168	set_target_properties(${BINARY_NAME}-qt PROPERTIES OUTPUT_NAME ${PROJECT_NAME})
169endif()
170if(APPLE)
171	set(DEPLOY_OPTIONS -p platforms/libqcocoa.dylib,audio/libqtaudio_coreaudio.dylib)
172	if(NOT CMAKE_INSTALL_NAME_TOOL EQUAL "install_name_tool")
173		set(DEPLOY_OPTIONS ${DEPLOY_OPTIONS} -I ${CMAKE_INSTALL_NAME_TOOL})
174	endif()
175	if(DEFINED CMAKE_OTOOL AND NOT CMAKE_OTOOL EQUAL "otool")
176		set(DEPLOY_OPTIONS ${DEPLOY_OPTIONS} -O ${CMAKE_OTOOL})
177	endif()
178	if(DEFINED CROSS_ROOT)
179		set(DEPLOY_OPTIONS ${DEPLOY_OPTIONS} -R ${CROSS_ROOT})
180	endif()
181	add_custom_command(TARGET ${BINARY_NAME}-qt POST_BUILD COMMAND ${CMAKE_SOURCE_DIR}/tools/deploy-mac.py ${DEPLOY_OPTIONS} ${PROJECT_NAME}.app)
182endif()