blob: 3d2f7f8c9d2044daec9dc5bb642d032e7f53f4a9 [file] [log] [blame] [edit]
add_subdirectory(backend)
add_subdirectory(features)
add_subdirectory(tracing)
# Codec common sources
add_subdirectory(apigen-codec-common)
add_subdirectory(compressedTextureFormats)
# GL
add_subdirectory(gl)
# Vulkan
add_subdirectory(vulkan)
# RenderControl decoder
add_subdirectory(renderControl_dec)
# Magma decoder
add_subdirectory(magma)
if(CONFIG_AEMU)
add_compile_definitions(GFXSTREAM_BUILD_WITH_SNAPSHOT_SUPPORT)
add_compile_definitions(CONFIG_AEMU)
endif()
# Stream server core
set(stream-server-core-sources
Buffer.cpp
ExternalObjectManager.cpp
ColorBuffer.cpp
GfxStreamAgents.cpp
VirtioGpuContext.cpp
VirtioGpuFrontend.cpp
VirtioGpuResource.cpp
VirtioGpuRingBlob.cpp
VirtioGpuTimelines.cpp
VsyncThread.cpp
ChannelStream.cpp
DisplaySurface.cpp
DisplaySurfaceUser.cpp
Hwc2.cpp
PostWorker.cpp
PostWorkerGl.cpp
ReadBuffer.cpp
RenderChannelImpl.cpp
RenderThreadInfo.cpp
RenderThreadInfoGl.cpp
RenderThreadInfoMagma.cpp
RingStream.cpp
SyncThread.cpp
RenderThread.cpp
RenderControl.cpp
RenderWindow.cpp
RenderLibImpl.cpp
RendererImpl.cpp
FrameBuffer.cpp)
if (APPLE)
set(stream-server-core-platform-sources NativeSubWindow_cocoa.mm)
elseif (WIN32)
set(stream-server-core-platform-sources NativeSubWindow_win32.cpp)
elseif (QNX)
set(stream-server-core-platform-sources NativeSubWindow_qnx.cpp)
else()
set(stream-server-core-platform-sources NativeSubWindow_x11.cpp)
endif()
add_library(
gfxstream_backend_headers
INTERFACE)
target_include_directories(
gfxstream_backend_headers
INTERFACE
include)
# Compile everything as a static library first so that unit tests can call non-exported functions
add_library(
gfxstream_backend_static
STATIC
${stream-server-core-sources}
${stream-server-core-platform-sources}
)
target_link_libraries(
gfxstream_backend_static
PUBLIC
GLES_CM_translator_static
OpenGLESDispatch
renderControl_dec
gfxstream_backend_common
gfxstream_features
gfxstream_host_tracing
gfxstream-gl-server
gfxstream-magma-server
gfxstream-vulkan-server
gfxstream_egl_headers
gfxstream-snapshot
apigen-codec-common
${GFXSTREAM_HOST_COMMON_LIB}
${GFXSTREAM_BASE_LIB})
target_include_directories(
gfxstream_backend_static
PUBLIC
${GFXSTREAM_REPO_ROOT}
${GFXSTREAM_REPO_ROOT}/include
${GFXSTREAM_REPO_ROOT}/host
${GFXSTREAM_REPO_ROOT}/host/include
${GFXSTREAM_REPO_ROOT}/host/apigen-codec-common
${GFXSTREAM_REPO_ROOT}/host/gl
${GFXSTREAM_REPO_ROOT}/host/gl/glestranslator/include
${GFXSTREAM_REPO_ROOT}/host/magma
${GFXSTREAM_REPO_ROOT}/host/magma/magma_dec
${GFXSTREAM_REPO_ROOT}/host/vulkan
${GFXSTREAM_REPO_ROOT}/host/vulkan/cereal/common
${GFXSTREAM_REPO_ROOT}/third-party/fuchsia/magma/include
${GFXSTREAM_REPO_ROOT}/third-party/glm/include)
if (APPLE)
target_link_libraries(gfxstream_backend_static PUBLIC "-framework AppKit -framework QuartzCore -framework IOSurface")
endif()
if (WIN32)
target_link_libraries(gfxstream_backend_static PRIVATE D3d9.lib)
endif()
# Suppress some warnings generated by platform/aemu repo
target_compile_options(
gfxstream_backend_static
PRIVATE
-Wno-invalid-offsetof
-Wno-free-nonheap-object
-Wno-attributes
-DGFXSTREAM_ENABLE_HOST_GLES=1
)
# gfxstream_backend.dll
add_library(
gfxstream_backend
SHARED
render_api.cpp
virtio-gpu-gfxstream-renderer.cpp)
target_link_libraries(
gfxstream_backend
PUBLIC
gfxstream_common_utils
gfxstream_backend_common
gfxstream_features
gfxstream_host_tracing
gfxstream_backend_static
PRIVATE
)
if(BUILD_STANDALONE)
target_link_libraries(gfxstream_backend
PRIVATE
gfxstream-gl-host-common)
endif()
if (APPLE)
set_target_properties(gfxstream_backend
PROPERTIES
LINK_FLAGS "-undefined dynamic_lookup -flat_namespace")
endif()
if(CONFIG_AEMU)
android_install_shared(gfxstream_backend)
else()
install(
TARGETS gfxstream_backend RUNTIME DESTINATION ${CMAKE_INSTALL_PREFIX} LIBRARY DESTINATION ${CMAKE_INSTALL_PREFIX})
endif()
# Testing libraries
add_subdirectory(testlibs)
if (ENABLE_VKCEREAL_TESTS)
set(LIST_OF_TESTS)
function(discover_tests test_name)
if (WIN32)
gtest_discover_tests(
${test_name}
${ARGN})
list(APPEND LIST_OF_TESTS ${test_name})
set(LIST_OF_TESTS ${LIST_OF_TESTS} PARENT_SCOPE)
else()
gtest_discover_tests(
${test_name}
${ARGN}
)
endif()
endfunction()
# Backend unit tests
add_executable(
gfxstream_backend_unittests
gfxstream_unittest.cpp)
target_link_libraries(
gfxstream_backend_unittests
PRIVATE
OSWindow
gfxstream_backend
aemu-host-common-testing-support
${GFXSTREAM_BASE_LIB}
gtest_main)
discover_tests(gfxstream_backend_unittests)
# More functional tests#########################################################
# Common testing support library################################################
# This includes the server core and testing sources
add_library(
stream-server-testing-support
tests/SampleApplication.cpp
tests/GLSnapshotTesting.cpp
tests/OpenGLTestContext.cpp
tests/GLTestUtils.cpp
tests/ShaderUtils.cpp
tests/GLSnapshotTestDispatch.cpp
tests/GLSnapshotTestStateUtils.cpp
tests/HelloTriangleImp.cpp)
target_include_directories(
stream-server-testing-support
PUBLIC
${GFXSTREAM_REPO_ROOT}
${GFXSTREAM_REPO_ROOT}/include
${GFXSTREAM_REPO_ROOT}/host
${GFXSTREAM_REPO_ROOT}/host/gl/glestranslator/GLES_CM
${GFXSTREAM_REPO_ROOT}/host/gl/glestranslator/include
${GFXSTREAM_REPO_ROOT}/host/apigen-codec-common
${GFXSTREAM_REPO_ROOT}/host/vulkan)
target_link_libraries(
stream-server-testing-support
PUBLIC
aemu-host-common-testing-support
aemu-base-testing-support
gfxstream_common_image
gfxstream_backend_static
gfxstream_stb
OSWindow
gtest)
if (LINUX)
add_library(
x11_testing_support
tests/X11TestingSupport.cpp)
target_link_libraries(
x11_testing_support
aemu-base.headers)
endif()
# Basic opengl rendering tests##################################################
add_executable(
OpenglRender_unittests
tests/FrameBuffer_unittest.cpp
tests/GLES1Dispatch_unittest.cpp
tests/DefaultFramebufferBlit_unittest.cpp
tests/TextureDraw_unittest.cpp
tests/StalePtrRegistry_unittest.cpp
tests/VsyncThread_unittest.cpp)
target_link_libraries(
OpenglRender_unittests
PRIVATE
stream-server-testing-support
aemu-host-common-testing-support
aemu-base-testing-support
gfxstream_backend_static
gtest_main)
if (LINUX)
target_compile_definitions(
OpenglRender_unittests
PRIVATE GFXSTREAM_HAS_X11=1)
target_link_libraries(
OpenglRender_unittests
PRIVATE x11_testing_support)
endif()
discover_tests(OpenglRender_unittests)
# Snapshot tests################################################################
add_executable(
OpenglRender_snapshot_unittests
tests/GLSnapshotBuffers_unittest.cpp
tests/GLSnapshotFramebufferControl_unittest.cpp
tests/GLSnapshotFramebuffers_unittest.cpp
tests/GLSnapshotMultisampling_unittest.cpp
tests/GLSnapshotPixelOperations_unittest.cpp
tests/GLSnapshotPixels_unittest.cpp
tests/GLSnapshotPrograms_unittest.cpp
tests/GLSnapshotRasterization_unittest.cpp
tests/GLSnapshotRenderbuffers_unittest.cpp
tests/GLSnapshotRendering_unittest.cpp
tests/GLSnapshotShaders_unittest.cpp
tests/GLSnapshotTextures_unittest.cpp
tests/GLSnapshotTransformation_unittest.cpp
tests/GLSnapshotVertexAttributes_unittest.cpp
tests/GLSnapshot_unittest.cpp)
target_link_libraries(
OpenglRender_snapshot_unittests
PRIVATE
stream-server-testing-support
aemu-host-common-testing-support
aemu-base-testing-support
gfxstream_backend_static
gtest_main)
discover_tests(OpenglRender_snapshot_unittests)
# Vulkan tests##################################################################
add_executable(
Vulkan_unittests
tests/Vulkan_unittest.cpp
tests/CompositorVk_unittest.cpp
tests/SwapChainStateVk_unittest.cpp
tests/DisplayVk_unittest.cpp
tests/VirtioGpuTimelines_unittest.cpp
vulkan/vk_util_unittest.cpp
vulkan/VkFormatUtils_unittest.cpp
vulkan/VkQsriTimeline_unittest.cpp
vulkan/VkDecoderGlobalState_unittest.cpp
)
target_link_libraries(
Vulkan_unittests
PRIVATE
stream-server-testing-support
aemu-host-common-testing-support
aemu-base-testing-support
gfxstream_backend_static
gtest
gtest_main
gmock)
if (APPLE)
target_compile_definitions(Vulkan_unittests PRIVATE -DVK_USE_PLATFORM_METAL_EXT)
target_link_libraries(Vulkan_unittests PUBLIC "-framework AppKit")
endif()
discover_tests(
Vulkan_unittests
WORKING_DIRECTORY ${CMAKE_BINARY_DIR})
if (APPLE)
target_compile_definitions(Vulkan_unittests PRIVATE -DVK_USE_PLATFORM_METAL_EXT)
elseif (QNX)
target_compile_definitions(Vulkan_unittests PRIVATE -DVK_USE_PLATFORM_SCREEN_QNX)
elseif (UNIX)
target_compile_definitions(Vulkan_unittests PRIVATE -DVK_USE_PLATFORM_XCB_KHR)
endif()
file(GLOB Vulkan_unittests_datafiles "tests/testdata/*.png")
add_custom_command(TARGET Vulkan_unittests POST_BUILD
COMMAND ${CMAKE_COMMAND} -E make_directory
${CMAKE_BINARY_DIR}/tests/testdata
COMMAND ${CMAKE_COMMAND} -E copy_if_different
${Vulkan_unittests_datafiles}
${CMAKE_BINARY_DIR}/tests/testdata)
add_executable(
Vulkan_integrationtests
vulkan/testing/VkDecoderTestDispatch.h
vulkan/testing/VulkanTestHelper.cpp
)
target_link_libraries(
Vulkan_integrationtests
PRIVATE
gfxstream_backend_static
gfxstream-gl-server
gfxstream-vulkan-server
stream-server-testing-support
gtest
gtest_main
gmock)
discover_tests(Vulkan_integrationtests)
endif()
if (WIN32)
set(BUILD_DIR "${CMAKE_CURRENT_BINARY_DIR}")
configure_file(../cmake/SetWin32TestEnvironment.cmake.in ${CMAKE_CURRENT_BINARY_DIR}/SetWin32TestEnvironment.cmake @ONLY)
set_property(DIRECTORY APPEND PROPERTY TEST_INCLUDE_FILES ${CMAKE_CURRENT_BINARY_DIR}/SetWin32TestEnvironment.cmake)
endif()