# Codec common sources
add_subdirectory(apigen-codec-common)
add_subdirectory(compressedTextureFormats)

# Vulkan
add_subdirectory(vulkan)

# GLES translator
add_subdirectory(glestranslator)
add_subdirectory(libGLSnapshot)

# GLES decoder
add_subdirectory(gles1_dec)
add_subdirectory(gles2_dec)

# GLES dispatch based on Translator
add_subdirectory(OpenGLESDispatch)

# RenderControl decoder
add_subdirectory(renderControl_dec)

# Stream server core
set(stream-server-core-sources
    ChannelStream.cpp
    ColorBuffer.cpp
    CompositorVk.cpp
    DisplayVk.cpp
    FbConfig.cpp
    FenceSync.cpp
    GLESVersionDetector.cpp
    PostWorker.cpp
    ReadbackWorker.cpp
    ReadBuffer.cpp
    render_api.cpp
    RenderChannelImpl.cpp
    RenderThreadInfo.cpp
    RingStream.cpp
    SwapChainStateVk.cpp
    SyncThread.cpp
    TextureDraw.cpp
    TextureResize.cpp
    WindowSurface.cpp
    YUVConverter.cpp
    RenderThread.cpp
    RenderContext.cpp
    RenderControl.cpp
    RenderWindow.cpp
    RenderLibImpl.cpp
    RendererImpl.cpp
    FrameBuffer.cpp)
if (APPLE)
    set(stream-server-core-platform-sources NativeSubWindow_cocoa.m)
elseif (WIN32)
    set(stream-server-core-platform-sources NativeSubWindow_win32.cpp)
else()
    set(stream-server-core-platform-sources NativeSubWindow_x11.cpp)
endif()

add_library(
    gfxstream_backend
    SHARED
    ${stream-server-core-sources}
    ${stream-server-core-platform-sources}
    GfxStreamAgents.cpp
    GfxStreamBackend.cpp
    virtio-gpu-gfxstream-renderer.cpp
    VirtioGpuTimelines.cpp)
target_link_libraries(
    gfxstream_backend
    PUBLIC
    gfxstream-host-common
    gfxstream-base
    OpenGLESDispatch
    gles1_dec
    gles2_dec
    renderControl_dec
    gfxstream-vulkan-server
    gfxstream-snapshot
    apigen-codec-common
    perfetto-tracing-only)

if (WIN32)
    target_link_libraries(gfxstream_backend PRIVATE D3d9.lib)
    target_link_options(gfxstream_backend PRIVATE /DEBUG)
endif()

target_include_directories(
    gfxstream_backend
    PUBLIC
    ${GFXSTREAM_REPO_ROOT}
    ${GFXSTREAM_REPO_ROOT}/include
    ${GFXSTREAM_REPO_ROOT}/stream-servers
    ${GFXSTREAM_REPO_ROOT}/stream-servers/apigen-codec-common
    ${GFXSTREAM_REPO_ROOT}/stream-servers/vulkan)
android_install_shared(gfxstream_backend)

# Testing libraries
add_subdirectory(testlibs)

# Backend unit tests
add_executable(
    gfxstream_backend_unittests
    gfxstream_unittest.cpp)
target_link_libraries(
    gfxstream_backend_unittests
    PRIVATE
    OSWindow
    gfxstream_backend
    gfxstream-base
    gtest_main)

# More functional tests#########################################################

# Common testing support library################################################
# This includes the server core and testing sources
add_library(
    stream-server-testing-support
    ${stream-server-core-sources}
    ${stream-server-core-platform-sources}
    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
    PRIVATE
    ${GFXSTREAM_REPO_ROOT}
    PUBLIC
    ${GFXSTREAM_REPO_ROOT}/base/testing
    ${GFXSTREAM_REPO_ROOT}
    ${GFXSTREAM_REPO_ROOT}/include
    ${GFXSTREAM_REPO_ROOT}/stream-servers
    ${GFXSTREAM_REPO_ROOT}/stream-servers/apigen-codec-common
    ${GFXSTREAM_REPO_ROOT}/stream-servers/vulkan)
target_link_libraries(
    stream-server-testing-support
    PUBLIC
    gfxstream-base
    gfxstream-host-common
    OpenGLESDispatch
    gles1_dec
    gles2_dec
    renderControl_dec
    gfxstream-vulkan-server
    gfxstream-snapshot
    apigen-codec-common
    OSWindow
    gtest)

if (LINUX)
add_library(
    x11_testing_support
    tests/X11TestingSupport.cpp)
target_link_libraries(
    x11_testing_support
    gfxstream-base)
endif()

# Basic opengl rendering tests##################################################
add_executable(
    OpenglRender_unittests
    tests/FrameBuffer_unittest.cpp
    tests/DefaultFramebufferBlit_unittest.cpp
    tests/TextureDraw_unittest.cpp
    tests/StalePtrRegistry_unittest.cpp)
target_link_libraries(
    OpenglRender_unittests
    PRIVATE
    stream-server-testing-support
    gfxstream-base-testing-support
    gfxstream-host-common-testing-support)
if (LINUX)
    target_link_libraries(
        OpenglRender_unittests
        PRIVATE x11_testing_support)
endif()


# 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
    gfxstream-base-testing-support
    gfxstream-host-common-testing-support)

# Vulkan tests##################################################################
add_executable(
    Vulkan_unittests
    tests/Vulkan_unittest.cpp)
target_link_libraries(
    Vulkan_unittests
    PRIVATE
    stream-server-testing-support
    gfxstream-base-testing-support
    gfxstream-host-common-testing-support)

add_executable(
    CompositorVk_unittests
    tests/CompositorVk_unittest.cpp)
target_link_libraries(
    CompositorVk_unittests
    PRIVATE
    stream-server-testing-support
    gfxstream-host-common-testing-support)

add_executable(
    SwapChainStateVk_unittests
    tests/SwapChainStateVk_unittest.cpp)
target_link_libraries(
    SwapChainStateVk_unittests
    PRIVATE
    stream-server-testing-support
    gfxstream-host-common-testing-support)

add_executable(
    DisplayVk_unittests
    tests/DisplayVk_unittest.cpp)
target_link_libraries(
    DisplayVk_unittests
    PRIVATE
    stream-server-testing-support
    gfxstream-host-common-testing-support)

add_executable(
    VirtioGpuTimelines_unittests
    tests/VirtioGpuTimelines_unittest.cpp
    VirtioGpuTimelines.cpp)
target_include_directories(
    VirtioGpuTimelines_unittests
    PRIVATE
    ${GFXSTREAM_REPO_ROOT}
    ${GFXSTREAM_REPO_ROOT}/stream-servers
    ${GFXSTREAM_REPO_ROOT}/include)
target_link_libraries(
    VirtioGpuTimelines_unittests
    PRIVATE
    gtest
    gmock)