# Create the i965 Vulkan DRI library

set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wno-sign-compare")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-sign-compare")

add_subdirectory(kmd)
add_subdirectory(compiler)

add_custom_command(OUTPUT gpa.c
    COMMAND ${PROJECT_SOURCE_DIR}/vk-vtgenerate.py Xcb icd-get-proc-addr > gpa.c
    DEPENDS ${PROJECT_SOURCE_DIR}/vk-vtgenerate.py ${PROJECT_SOURCE_DIR}/vulkan.py)

set(sources
    buf.c
    cmd.c
    cmd_decode.c
    cmd_meta.c
    cmd_mi.c
    cmd_barrier.c
    cmd_pipeline.c
    desc.c
    dev.c
    instance.c
    event.c
    extension_utils.c
    fb.c
    fence.c
    format.c
    gpa.c
    gpu.c
    img.c
    layout.c
    mem.c
    obj.c
    pipeline.c
    query.c
    queue.c
    sampler.c
    shader.c
    state.c
    view.c
    )

set(definitions "")
set(include_dirs "")

set(libraries
    m
    icd
    intelkmd
    intelcompiler)

find_package(XCB COMPONENTS xcb xcb-dri3 xcb-present)
if(XCB_FOUND)
    list(APPEND include_dirs ${XCB_INCLUDE_DIRS})
    list(APPEND libraries ${XCB_LIBRARIES})

    if (DisplayServer MATCHES "Xcb")
        find_package(XCB COMPONENTS xcb)
        if(XCB_FOUND)
            # No include directories by purpose.
            list(APPEND libraries ${XCB_LIBRARIES})
        endif()
    endif()

    if (DisplayServer MATCHES "Xlib")
        find_package(X11_XCB COMPONENTS X11-xcb)
        if(X11_XCB_FOUND)
            # No include directories by purpose.
            list(APPEND libraries ${X11_XCB_LIBRARIES})
        endif()
    endif()

    list(APPEND sources wsi_x11.c)

    set_source_files_properties(wsi_x11.c PROPERTIES COMPILE_FLAGS "-I${PROJECT_SOURCE_DIR}/icd/intel/kmd/libdrm/include/drm")
else()
    list(APPEND sources wsi_null.c)
endif()

if (NOT WIN32)
    # extra setup for out-of-tree builds
    # intel ICD not built on Windows
    if (NOT (CMAKE_CURRENT_SOURCE_DIR STREQUAL CMAKE_CURRENT_BINARY_DIR))
            add_custom_target(intel_icd-json ALL
                COMMAND ln -sf ${CMAKE_CURRENT_SOURCE_DIR}/intel_icd.json
                VERBATIM
                )
    endif()
endif()

add_library(VK_i965 SHARED ${sources})
target_compile_definitions(VK_i965 PRIVATE ${definitions})
target_include_directories(VK_i965 PRIVATE ${include_dirs})
target_link_libraries(VK_i965 ${libraries})

# set -Bsymbolic for vkGetProcAddr()
set_target_properties(VK_i965 PROPERTIES
    COMPILE_FLAGS "-Wmissing-declarations"
    LINK_FLAGS "-Wl,-Bsymbolic -Wl,-no-undefined -Wl,--exclude-libs,ALL")
