add_subdirectory(features)

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

# Stream server core
set(stream-server-core-sources
    Buffer.cpp
    ExternalObjectManager.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.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_features
        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_features
    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()
