# 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(CONFIG_AEMU)
endif()

# Stream server core
set(stream-server-core-sources
    Buffer.cpp
    BlobManager.cpp
    ColorBuffer.cpp
    GfxStreamAgents.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.m)
elseif (WIN32)
    set(stream-server-core-platform-sources NativeSubWindow_win32.cpp)
else()
    set(stream-server-core-platform-sources NativeSubWindow_x11.cpp)
endif()

# 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-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/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}/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
    )

# gfxstream_backend.dll
add_library(
    gfxstream_backend
    SHARED
    render_api.cpp
    virtio-gpu-gfxstream-renderer.cpp)

target_link_libraries(
    gfxstream_backend
    PUBLIC
    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()

android_install_shared(gfxstream_backend)

# 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
        tests/ImageUtils.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_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 (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()
