blob: f52cf4f10386a5a249c7ea08bf912f96ad38057e [file] [log] [blame]
# The list of dependencies.
prebuilt(QT5)
prebuilt(FFMPEG)
set(ANDROID_LIBUI_HEADLESS_SRC_FILES
# cmake-format: sortable
android/emulation/control/ScreenCapturer.cpp
android/emulator-window.c
android/gpu_frame.cpp
android/main-common-ui.c
android/mp4/MP4Dataset.cpp
android/mp4/MP4Demuxer.cpp
android/mp4/SensorLocationEventProvider.cpp
android/mp4/VideoMetadataProvider.cpp
android/recording/audio/AudioProducer.cpp
android/recording/codecs/audio/VorbisCodec.cpp
android/recording/codecs/video/VP9Codec.cpp
android/recording/FfmpegRecorder.cpp
android/recording/Frame.cpp
android/recording/GifConverter.cpp
android/recording/screen-recorder.cpp
android/recording/video/GuestReadbackWorker.cpp
android/recording/video/player/Clock.cpp
android/recording/video/player/FrameQueue.cpp
android/recording/video/player/PacketQueue.cpp
android/recording/video/player/VideoPlayer.cpp
android/recording/video/player/VideoPlayerNotifier.cpp
android/recording/video/VideoFrameSharer.cpp
android/recording/video/VideoProducer.cpp
android/resource.c
android/skin/charmap.c
android/skin/event-headless.cpp
android/skin/file.c
android/skin/generic-event-buffer.cpp
android/skin/generic-event.cpp
android/skin/image.c
android/skin/keyboard.c
android/skin/keycode-buffer.c
android/skin/keycode.c
android/skin/LibuiAgent.cpp
android/skin/qt/emulator-no-qt-no-window.cpp
android/skin/rect.c
android/skin/resource.c
android/skin/surface-headless.cpp
android/skin/trackball.c
android/skin/ui.c
android/skin/window.c
android/skin/winsys-headless.cpp
android/window-agent-headless-impl.cpp)
set(ANDROID_LIBUI_SRC_FILES
# cmake-format: sortable
android/emulation/control/ScreenCapturer.cpp
android/emulator-window.c
android/gpu_frame.cpp
android/main-common-ui.c
android/mp4/MP4Dataset.cpp
android/mp4/MP4Demuxer.cpp
android/mp4/SensorLocationEventProvider.cpp
android/mp4/VideoMetadataProvider.cpp
android/recording/audio/AudioProducer.cpp
android/recording/codecs/audio/VorbisCodec.cpp
android/recording/codecs/video/VP9Codec.cpp
android/recording/FfmpegRecorder.cpp
android/recording/Frame.cpp
android/recording/GifConverter.cpp
android/recording/screen-recorder.cpp
android/recording/video/GuestReadbackWorker.cpp
android/recording/video/player/Clock.cpp
android/recording/video/player/FrameQueue.cpp
android/recording/video/player/PacketQueue.cpp
android/recording/video/player/VideoPlayer.cpp
android/recording/video/player/VideoPlayerNotifier.cpp
android/recording/video/VideoFrameSharer.cpp
android/recording/video/VideoProducer.cpp
android/resource.c
android/skin/charmap.c
android/skin/file.c
android/skin/generic-event-buffer.cpp
android/skin/generic-event.cpp
android/skin/image.c
android/skin/keyboard.c
android/skin/keycode-buffer.c
android/skin/keycode.c
android/skin/LibuiAgent.cpp
android/skin/qt/angle-input-widget.cpp
android/skin/qt/car-cluster-window.cpp
android/skin/qt/common-controls/cc-list-item.cpp
android/skin/qt/device-3d-widget.cpp
android/skin/qt/editable-slider-widget.cpp
android/skin/qt/emulator-container.cpp
android/skin/qt/emulator-no-qt-no-window.cpp
android/skin/qt/emulator-overlay.cpp
android/skin/qt/emulator-qt-window.cpp
android/skin/qt/error-dialog.cpp
android/skin/qt/event-capturer.cpp
android/skin/qt/event-qt.cpp
android/skin/qt/event-serializer.cpp
android/skin/qt/event-subscriber.cpp
android/skin/qt/extended-pages/battery-page.cpp
android/skin/qt/extended-pages/bug-report-page.cpp
android/skin/qt/extended-pages/camera-page.cpp
android/skin/qt/extended-pages/camera-virtualscene-subpage.cpp
android/skin/qt/extended-pages/car-cluster-connector/car-cluster-connector.cpp
android/skin/qt/extended-pages/car-data-emulation/car-property-utils.cpp
android/skin/qt/extended-pages/car-data-emulation/car-sensor-data.cpp
android/skin/qt/extended-pages/car-data-emulation/checkbox-dialog.cpp
android/skin/qt/extended-pages/car-data-emulation/vhal-item.cpp
android/skin/qt/extended-pages/car-data-emulation/vhal-table.cpp
android/skin/qt/extended-pages/car-data-page.cpp
android/skin/qt/extended-pages/car-rotary-page.cpp
android/skin/qt/extended-pages/cellular-page.cpp
android/skin/qt/extended-pages/common.cpp
android/skin/qt/extended-pages/dpad-page.cpp
android/skin/qt/extended-pages/finger-page.cpp
android/skin/qt/extended-pages/google-play-page.cpp
android/skin/qt/extended-pages/help-page.cpp
android/skin/qt/extended-pages/instr-cluster-render/car-cluster-widget.cpp
android/skin/qt/extended-pages/location-page-point.cpp
android/skin/qt/extended-pages/location-page-route-playback.cpp
android/skin/qt/extended-pages/location-page-route.cpp
android/skin/qt/extended-pages/location-page.cpp
android/skin/qt/extended-pages/microphone-page.cpp
android/skin/qt/extended-pages/multi-display-arrangement.cpp
android/skin/qt/extended-pages/multi-display-item.cpp
android/skin/qt/extended-pages/multi-display-page.cpp
android/skin/qt/extended-pages/network-connectivity-manager.cpp
android/skin/qt/extended-pages/perfstats-page.cpp
android/skin/qt/extended-pages/record-and-playback-page.cpp
android/skin/qt/extended-pages/record-macro-edit-dialog.cpp
android/skin/qt/extended-pages/record-macro-page.cpp
android/skin/qt/extended-pages/record-macro-saved-item.cpp
android/skin/qt/extended-pages/record-screen-page.cpp
android/skin/qt/extended-pages/record-settings-page.cpp
android/skin/qt/extended-pages/rotary-input-dial.cpp
android/skin/qt/extended-pages/rotary-input-page.cpp
android/skin/qt/extended-pages/settings-page-proxy.cpp
android/skin/qt/extended-pages/sensor-replay-item.cpp
android/skin/qt/extended-pages/sensor-replay-page.cpp
android/skin/qt/extended-pages/settings-page.cpp
android/skin/qt/extended-pages/snapshot-page.cpp
android/skin/qt/extended-pages/telephony-page.cpp
android/skin/qt/extended-pages/tv-remote-page.cpp
android/skin/qt/extended-pages/virtual-sensors-page.cpp
android/skin/qt/extended-window.cpp
android/skin/qt/FramelessDetector.cpp
android/skin/qt/gl-canvas.cpp
android/skin/qt/gl-common.cpp
android/skin/qt/gl-texture-draw.cpp
android/skin/qt/gl-widget.cpp
android/skin/qt/init-qt.cpp
android/skin/qt/ModalOverlay.cpp
android/skin/qt/native-event-filter-factory.cpp
android/skin/qt/native-keyboard-event-handler.cpp
android/skin/qt/OverlayMessageCenter.cpp
android/skin/qt/perf-stats-3d-widget.cpp
android/skin/qt/poster-image-well.cpp
android/skin/qt/posture-selection-dialog.cpp
android/skin/qt/qt-ui-commands.cpp
android/skin/qt/QtLooper.cpp
android/skin/qt/QtThreading.cpp
android/skin/qt/screen-mask.cpp
android/skin/qt/size-tweaker.cpp
android/skin/qt/stylesheet.cpp
android/skin/qt/surface-qt.cpp
android/skin/qt/tool-window.cpp
android/skin/qt/ui-event-recorder.cpp
android/skin/qt/user-actions-counter.cpp
android/skin/qt/video-player/QtVideoPlayerNotifier.cpp
android/skin/qt/video-player/VideoInfo.cpp
android/skin/qt/video-player/VideoPlayerWidget.cpp
android/skin/qt/virtualscene-control-window.cpp
android/skin/qt/VirtualSceneInfoDialog.cpp
android/skin/qt/wavefront-obj-parser.cpp
android/skin/qt/winsys-qt.cpp
android/skin/rect.c
android/skin/resource.c
android/skin/trackball.c
android/skin/ui.c
android/skin/window.c
android/window-agent-impl.cpp)
# Note, these are separated for historical reasons only, the uic compiler will
# find this automatically
set(ANDROID_SKIN_QT_UI_SRC_FILES
# cmake-format: sortable
android/skin/qt/common-controls/cc-list-item.ui
android/skin/qt/extended-pages/battery-page.ui
android/skin/qt/extended-pages/bug-report-page.ui
android/skin/qt/extended-pages/camera-page.ui
android/skin/qt/extended-pages/camera-virtualscene-subpage.ui
android/skin/qt/extended-pages/car-data-emulation/car-sensor-data.ui
android/skin/qt/extended-pages/car-data-page.ui
android/skin/qt/extended-pages/car-rotary-page.ui
android/skin/qt/extended-pages/cellular-page.ui
android/skin/qt/extended-pages/dpad-page.ui
android/skin/qt/extended-pages/finger-page.ui
android/skin/qt/extended-pages/google-play-page.ui
android/skin/qt/extended-pages/help-page.ui
android/skin/qt/extended-pages/microphone-page.ui
android/skin/qt/extended-pages/multi-display-page.ui
android/skin/qt/extended-pages/record-and-playback-page.ui
android/skin/qt/extended-pages/record-macro-edit-dialog.ui
android/skin/qt/extended-pages/record-macro-page.ui
android/skin/qt/extended-pages/record-macro-saved-item.ui
android/skin/qt/extended-pages/record-screen-page.ui
android/skin/qt/extended-pages/record-settings-page.ui
android/skin/qt/extended-pages/rotary-input-page.ui
android/skin/qt/extended-pages/settings-page.ui
android/skin/qt/extended-pages/sensor-replay-page.ui
android/skin/qt/extended-pages/snapshot-page.ui
android/skin/qt/extended-pages/telephony-page.ui
android/skin/qt/extended-pages/tv-remote-page.ui
android/skin/qt/extended-pages/virtual-sensors-page.ui
android/skin/qt/extended.ui
android/skin/qt/poster-image-well.ui
android/skin/qt/postureselectiondialog.ui
android/skin/qt/tools.ui
android/skin/qt/virtualscene-controls.ui
android/skin/qt/virtualscene-info-dialog.ui)
# Same here, the MOC compiler will find these files automatically.
set(ANDROID_SKIN_QT_MOC_SRC_FILES
# cmake-format: sortable
android/skin/qt/angle-input-widget.h
android/skin/qt/common-controls/cc-list-item.h
android/skin/qt/device-3d-widget.h
android/skin/qt/editable-slider-widget.h
android/skin/qt/emulator-container.h
android/skin/qt/emulator-no-qt-no-window.h
android/skin/qt/emulator-overlay.h
android/skin/qt/emulator-qt-window.h
android/skin/qt/event-capturer.h
android/skin/qt/event-subscriber.h
android/skin/qt/extended-pages/battery-page.h
android/skin/qt/extended-pages/bug-report-page.h
android/skin/qt/extended-pages/camera-page.h
android/skin/qt/extended-pages/camera-virtualscene-subpage.h
android/skin/qt/extended-pages/car-data-emulation/car-property-utils.h
android/skin/qt/extended-pages/car-data-emulation/car-sensor-data.h
android/skin/qt/extended-pages/car-data-page.h
android/skin/qt/extended-pages/car-rotary-page.h
android/skin/qt/extended-pages/cellular-page.h
android/skin/qt/extended-pages/dpad-page.h
android/skin/qt/extended-pages/finger-page.h
android/skin/qt/extended-pages/google-play-page.h
android/skin/qt/extended-pages/help-page.h
android/skin/qt/extended-pages/location-page.h
android/skin/qt/extended-pages/location-route-playback-item.h
android/skin/qt/extended-pages/microphone-page.h
android/skin/qt/extended-pages/multi-display-arrangement.h
android/skin/qt/extended-pages/multi-display-page.h
android/skin/qt/extended-pages/record-and-playback-page.h
android/skin/qt/extended-pages/record-macro-edit-dialog.h
android/skin/qt/extended-pages/record-macro-page.h
android/skin/qt/extended-pages/record-macro-saved-item.h
android/skin/qt/extended-pages/record-screen-page-tasks.h
android/skin/qt/extended-pages/record-screen-page.h
android/skin/qt/extended-pages/record-settings-page.h
android/skin/qt/extended-pages/rotary-input-dial.h
android/skin/qt/extended-pages/rotary-input-page.h
android/skin/qt/extended-pages/sensor-replay-item.h
android/skin/qt/extended-pages/sensor-replay-page.h
android/skin/qt/extended-pages/settings-page.h
android/skin/qt/extended-pages/snapshot-page.h
android/skin/qt/extended-pages/telephony-page.h
android/skin/qt/extended-pages/tv-remote-page.h
android/skin/qt/extended-pages/virtual-sensors-page.h
android/skin/qt/extended-window.h
android/skin/qt/gl-widget.h
android/skin/qt/ModalOverlay.h
android/skin/qt/OverlayMessageCenter.h
android/skin/qt/poster-image-well.h
android/skin/qt/posture-selection-dialog.h
android/skin/qt/QtLooperImpl.h
android/skin/qt/raised-material-button.h
android/skin/qt/screen-mask.h
android/skin/qt/size-tweaker.h
android/skin/qt/tool-window.h
android/skin/qt/user-actions-counter.h
android/skin/qt/video-player/QtVideoPlayerNotifier.h
android/skin/qt/video-player/VideoInfo.h
android/skin/qt/video-player/VideoPlayerWidget.h
android/skin/qt/virtualscene-control-window.h
android/skin/qt/VirtualSceneInfoDialog.h)
# Resources will now always be compiled in.
set(ANDROID_SKIN_QT_DYNAMIC_RESOURCES android/skin/qt/resources.qrc)
set(ANDROID_SKIN_QT_UI_SRC_FILES android/skin/qt/static_resources.qrc)
set(ANDROID_SKIN_SOURCES
# cmake-format: sortable
android/skin/qt/event-qt.cpp
android/skin/qt/init-qt.cpp
android/skin/qt/QtLogger.cpp
android/skin/qt/surface-qt.cpp
android/skin/qt/winsys-qt.cpp)
# Set the target specific sources.
if(NOT QTWEBENGINE)
message(STATUS "Webengine disabled.")
set(emulator-libui_darwin-x86_64_src
android/skin/qt/mac-native-window.mm
android/skin/qt/mac-native-event-filter.mm
android/skin/qt/extended-pages/location-page_noMaps.ui)
set(emulator-libui_windows_msvc-x86_64_src
android/skin/qt/windows-native-window.cpp
android/skin/qt/extended-pages/location-page_noMaps.ui)
set(emulator-libui_linux-x86_64_src
android/skin/qt/extended-pages/location-page_noMaps.ui)
else()
message(STATUS "Webengine enabled")
set(emulator-libui_darwin-x86_64_src
# cmake-format: sortable
android/skin/qt/extended-pages/location-page.ui
android/skin/qt/mac-native-event-filter.mm
android/skin/qt/mac-native-window.mm
android/skin/qt/websockets/websocketclientwrapper.cpp
android/skin/qt/websockets/websockettransport.cpp)
set(emulator-libui_windows_msvc-x86_64_src
# cmake-format: sortable
android/skin/qt/extended-pages/location-page.ui
android/skin/qt/websockets/websocketclientwrapper.cpp
android/skin/qt/websockets/websockettransport.cpp
android/skin/qt/windows-native-window.cpp)
set(emulator-libui_linux-x86_64_src
# cmake-format: sortable
android/skin/qt/extended-pages/location-page.ui
android/skin/qt/websockets/websocketclientwrapper.cpp
android/skin/qt/websockets/websockettransport.cpp)
endif()
# Set the sources
set(emulator-libui_src
${ANDROID_LIBUI_SRC_FILES} ${ANDROID_SKIN_QT_DYNAMIC_RESOURCES}
${ANDROID_SKIN_QT_MOC_SRC_FILES} ${ANDROID_SKIN_QT_UI_SRC_FILES}
${ANDROID_SKIN_SOURCES})
android_add_library(
TARGET emulator-libui
LICENSE Apache-2.0
SRC # cmake-format: sortable
${emulator-libui_src}
DARWIN ${emulator-libui_darwin-x86_64_src}
LINUX ${emulator-libui_linux-x86_64_src}
MSVC ${emulator-libui_windows_msvc-x86_64_src})
# TODO: Remove this and the "USE_WEBENGINE" defines once we have: --no-window
# mode has no dependency on Qt
if(QTWEBENGINE)
target_compile_definitions(emulator-libui PRIVATE "-DUSE_WEBENGINE")
target_link_libraries(
emulator-libui PRIVATE Qt5::Network Qt5::WebEngineWidgets Qt5::WebChannel
Qt5::WebSockets)
endif()
if(NOT BUILDING_FOR_AARCH64)
target_compile_options(emulator-libui PRIVATE "-DUSE_MMX=1" "-mmmx")
endif()
# Target specific compiler flags for windows, since we include FFMPEG C sources
# from C++ we need to make sure this flag is set for c++ sources.
android_target_compile_options(
emulator-libui windows
PRIVATE "$<$<COMPILE_LANGUAGE:CXX>:-Wno-literal-suffix>")
# Linux compiler settings
android_target_compile_options(
emulator-libui linux-x86_64
PRIVATE "-Wno-reserved-user-defined-literal" "-Wno-pointer-bool-conversion"
"-Wno-deprecated-declarations" "-Wno-inconsistent-missing-override"
"-Wno-return-type-c-linkage" "-Wno-invalid-constexpr")
# Mac Os compiler settings
android_target_compile_options(
emulator-libui darwin-x86_64
PRIVATE "-Wno-reserved-user-defined-literal" "-Wno-pointer-bool-conversion"
"-Wno-deprecated-declarations" "-Wno-inconsistent-missing-override"
"-Wno-return-type-c-linkage" "-Wno-invalid-constexpr")
# dependencies will remain internal, we should not be leaking out internal
# headers and defines.
target_link_libraries(
emulator-libui
PRIVATE android-emu
emulator-libyuv
FFMPEG::FFMPEG
Qt5::Core
Qt5::Widgets
Qt5::Gui
Qt5::Svg
zlib
android-hw-config)
# gl-widget.cpp needs to call XInitThreads() directly to work around a Qt bug.
# This implies a direct dependency to libX11.so
android_target_link_libraries(emulator-libui linux-x86_64 PRIVATE -lX11)
android_target_link_libraries(emulator-libui linux-aarch64 PRIVATE -lX11 -lxcb
-lXau)
android_target_link_libraries(emulator-libui darwin-x86_64
PRIVATE "-framework Carbon")
android_target_link_libraries(emulator-libui darwin-aarch64
PRIVATE "-framework Carbon")
# Windows-msvc specific dependencies. Need these for posix support.
android_target_link_libraries(emulator-libui windows_msvc-x86_64
PUBLIC dirent-win32)
list(APPEND android-libui-testdata testdata/mp4/video.mp4)
if(NOT LINUX_AARCH64)
android_add_test(
TARGET emulator-libui_unittests
SRC # cmake-format: sortable
android/mp4/MP4Dataset_test.cpp
android/mp4/MP4Demuxer_test.cpp
android/mp4/SensorLocationEventProvider_test.cpp
android/mp4/VideoMetadataProvider_test.cpp
android/recording/FfmpegRecorder.cpp
android/recording/test/DummyAudioProducer.cpp
android/recording/test/DummyVideoProducer.cpp
android/recording/test/FfmpegRecorder_unittest.cpp
android/skin/keycode-buffer_unittest.cpp
android/skin/keycode_unittest.cpp
android/skin/qt/native-keyboard-event-handler_unittest.cpp
android/skin/qt/qtmain_dummy_test.cpp
android/skin/rect_unittest.cpp)
android_copy_test_files(emulator-libui_unittests "${android-libui-testdata}"
testdata)
target_compile_options(emulator-libui_unittests
PRIVATE -O0 -UNDEBUG -Wno-deprecated-declarations)
# Target specific compiler flags for windows
android_target_compile_options(
emulator-libui_unittests windows
PRIVATE "$<$<COMPILE_LANGUAGE:CXX>:-Wno-literal-suffix>")
# Linux compiler settings
android_target_compile_options(emulator-libui_unittests linux-x86_64
PRIVATE "-Wno-reserved-user-defined-literal")
# Mac Os compiler settings
android_target_compile_options(emulator-libui_unittests darwin-x86_64
PRIVATE "-Wno-reserved-user-defined-literal")
android_target_dependency(emulator-libui_unittests all
QT5_SHARED_DEPENDENCIES)
android_target_properties(emulator-libui_unittests all
"${QT5_SHARED_PROPERTIES}")
# Make sure we disable rtti in gtest
target_compile_definitions(emulator-libui_unittests
PRIVATE -DGTEST_HAS_RTTI=0)
target_link_libraries(
emulator-libui_unittests PRIVATE emulator-libui android-emu FFMPEG::FFMPEG
gmock_main)
android_target_link_libraries(emulator-libui_unittests windows_msvc-x86_64
PUBLIC dirent-win32)
endif()
# Version of libui without Qt
set(emulator-libui-headless_src ${ANDROID_LIBUI_HEADLESS_SRC_FILES})
android_add_library(
TARGET emulator-libui-headless
LICENSE Apache-2.0
SRC # cmake-format: sortable
${emulator-libui-headless_src}
DARWIN ${emulator-libui-headless_darwin-x86_64_src}
LINUX ${emulator-libui-headless_linux-x86_64_src}
MSVC ${emulator-libui-headless_windows_msvc-x86_64_src})
target_compile_definitions(emulator-libui-headless PRIVATE -DCONFIG_HEADLESS)
if(NOT LINUX_AARCH64)
target_compile_options(emulator-libui-headless PRIVATE "-DUSE_MMX=1" "-mmmx")
endif()
# Target specific compiler flags for windows, since we include FFMPEG C sources
# from C++ we need to make sure this flag is set for c++ sources.
if(NOT MSVC)
android_target_compile_options(
emulator-libui-headless windows
PRIVATE "$<$<COMPILE_LANGUAGE:CXX>:-Wno-literal-suffix>")
endif()
# Linux compiler settings
android_target_compile_options(
emulator-libui-headless linux-x86_64
PRIVATE "-Wno-reserved-user-defined-literal" "-Wno-pointer-bool-conversion"
"-Wno-deprecated-declarations" "-Wno-inconsistent-missing-override"
"-Wno-return-type-c-linkage" "-Wno-invalid-constexpr")
# Mac Os compiler settings
android_target_compile_options(
emulator-libui-headless darwin-x86_64
PRIVATE "-Wno-reserved-user-defined-literal" "-Wno-pointer-bool-conversion"
"-Wno-deprecated-declarations" "-Wno-inconsistent-missing-override"
"-Wno-return-type-c-linkage" "-Wno-invalid-constexpr")
# dependencies will remain internal, we should not be leaking out internal
# headers and defines.
target_link_libraries(
emulator-libui-headless PRIVATE android-emu emulator-libyuv FFMPEG::FFMPEG
zlib android-hw-config)
if(WINDOWS_MSVC_X86_64)
# Qt in windows will call main from win-main v.s. calling qt_main. we have to
# make a separate launch library to make sure that we do not end up with
# duplicate main symbols when linking emulator-libui (it used to work do to a
# cmake linker quirk).
android_add_library(
TARGET emulator-winqt-launcher LICENSE Apache-2.0
SRC # cmake-format: sortable
android/skin/qt/windows-qt-launcher.cpp)
target_link_libraries(emulator-winqt-launcher PRIVATE android-emu-base)
endif()