llama-cpp-sys-4 0.10.0

Low Level Bindings to llama.cpp
Documentation
set(LLAMA_WIN_APP_MANIFEST "${CMAKE_CURRENT_LIST_DIR}/../common/win-app.manifest")

if(WIN32)
    if(MSVC OR CMAKE_CXX_SIMULATE_ID STREQUAL "MSVC")
        set(LLAMA_WIN_APP_MSVC_ABI TRUE)
    else()
        set(LLAMA_WIN_APP_MSVC_ABI FALSE)
    endif()

    if(NOT LLAMA_WIN_APP_MSVC_ABI)
        if(CMAKE_VERSION VERSION_LESS 3.21)
            message(FATAL_ERROR "CMake 3.21 or newer is required to build for Windows with the GNU ABI")
        endif()
        enable_language(RC)
        set(LLAMA_WIN_APP_MANIFEST_RC "${CMAKE_CURRENT_BINARY_DIR}/win-app-manifest.rc")
        configure_file("${CMAKE_CURRENT_LIST_DIR}/win-app.rc.in" "${LLAMA_WIN_APP_MANIFEST_RC}" @ONLY)
        set_property(DIRECTORY APPEND PROPERTY CMAKE_CONFIGURE_DEPENDS "${LLAMA_WIN_APP_MANIFEST}")
    endif()
endif()

function(llama_add_app_manifest target)
    if(NOT WIN32)
        return()
    endif()
    get_target_property(_aliased ${target} ALIASED_TARGET)
    if(_aliased)
        return()
    endif()
    get_target_property(_type ${target} TYPE)
    if(NOT _type STREQUAL "EXECUTABLE")
        return()
    endif()
    if(LLAMA_WIN_APP_MSVC_ABI)
        target_sources(${target} PRIVATE "${LLAMA_WIN_APP_MANIFEST}")
    else()
        if(NOT TARGET llama-win-app-manifest-res)
            add_library(llama-win-app-manifest-res OBJECT ${LLAMA_WIN_APP_MANIFEST_RC})
            set_source_files_properties(${LLAMA_WIN_APP_MANIFEST_RC} PROPERTIES OBJECT_DEPENDS "${LLAMA_WIN_APP_MANIFEST}")
        endif()
        target_link_libraries(${target} PRIVATE "$<TARGET_OBJECTS:llama-win-app-manifest-res>")
    endif()
endfunction()

function(llama_apply_app_manifests_dir dir)
    get_property(_targets DIRECTORY "${dir}" PROPERTY BUILDSYSTEM_TARGETS)
    foreach(_target IN LISTS _targets)
        llama_add_app_manifest(${_target})
    endforeach()
    get_property(_subdirs DIRECTORY "${dir}" PROPERTY SUBDIRECTORIES)
    foreach(_subdir IN LISTS _subdirs)
        llama_apply_app_manifests_dir("${_subdir}")
    endforeach()
endfunction()

function(llama_apply_app_manifests)
    if(NOT WIN32)
        return()
    endif()
    get_property(_subdirs DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}" PROPERTY SUBDIRECTORIES)
    foreach(_dir IN LISTS _subdirs)
        get_filename_component(_name "${_dir}" NAME)
        if(_name STREQUAL "app" OR _name STREQUAL "examples" OR _name STREQUAL "pocs" OR _name STREQUAL "tests" OR _name STREQUAL "tools")
            llama_apply_app_manifests_dir("${_dir}")
        endif()
    endforeach()
endfunction()