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

# 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
    render_api.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
    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()
