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()