mirror of
				https://github.com/ggml-org/llama.cpp.git
				synced 2025-10-31 08:51:55 +00:00 
			
		
		
		
	 ff227703d6
			
		
	
	ff227703d6
	
	
	
		
			
			* initial porting of previous LLG patch * update for new APIs * build: integrate llguidance as an external project * use '%llguidance' as marker to enable llg lark syntax * add some docs * clarify docs * code style fixes * remove llguidance.h from .gitignore * fix tests when llg is enabled * pass vocab not model to llama_sampler_init_llg() * copy test-grammar-integration.cpp to test-llguidance.cpp * clang fmt * fix ref-count bug * build and run test * gbnf -> lark syntax * conditionally include llguidance test based on LLAMA_LLGUIDANCE flag * rename llguidance test file to test-grammar-llguidance.cpp * add gh action for llg test * align tests with LLG grammar syntax and JSON Schema spec * llama_tokenizer() in fact requires valid utf8 * update llg * format file * add $LLGUIDANCE_LOG_LEVEL support * fix whitespace * fix warning * include <cmath> for INFINITY * add final newline * fail llama_sampler_init_llg() at runtime * Link gbnf_to_lark.py script; fix links; refer to llg docs for lexemes * simplify #includes * improve doc string for LLAMA_LLGUIDANCE * typo in merge * bump llguidance to 0.6.12
		
			
				
	
	
		
			125 lines
		
	
	
		
			4.0 KiB
		
	
	
	
		
			CMake
		
	
	
	
	
	
			
		
		
	
	
			125 lines
		
	
	
		
			4.0 KiB
		
	
	
	
		
			CMake
		
	
	
	
	
	
| # common
 | |
| 
 | |
| find_package(Threads REQUIRED)
 | |
| 
 | |
| llama_add_compile_flags()
 | |
| 
 | |
| # Build info header
 | |
| #
 | |
| 
 | |
| if(EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/../.git")
 | |
|     set(GIT_DIR "${CMAKE_CURRENT_SOURCE_DIR}/../.git")
 | |
| 
 | |
|     # Is git submodule
 | |
|     if(NOT IS_DIRECTORY "${GIT_DIR}")
 | |
|         file(READ ${GIT_DIR} REAL_GIT_DIR_LINK)
 | |
|         string(REGEX REPLACE "gitdir: (.*)\n$" "\\1" REAL_GIT_DIR ${REAL_GIT_DIR_LINK})
 | |
|         string(FIND "${REAL_GIT_DIR}" "/" SLASH_POS)
 | |
|         if (SLASH_POS EQUAL 0)
 | |
|             set(GIT_DIR "${REAL_GIT_DIR}")
 | |
|         else()
 | |
|             set(GIT_DIR "${CMAKE_CURRENT_SOURCE_DIR}/../${REAL_GIT_DIR}")
 | |
|         endif()
 | |
|     endif()
 | |
| 
 | |
|     if(EXISTS "${GIT_DIR}/index")
 | |
|         set(GIT_INDEX "${GIT_DIR}/index")
 | |
|     else()
 | |
|         message(WARNING "Git index not found in git repository.")
 | |
|         set(GIT_INDEX "")
 | |
|     endif()
 | |
| else()
 | |
|     message(WARNING "Git repository not found; to enable automatic generation of build info, make sure Git is installed and the project is a Git repository.")
 | |
|     set(GIT_INDEX "")
 | |
| endif()
 | |
| 
 | |
| # Add a custom command to rebuild build-info.cpp when .git/index changes
 | |
| add_custom_command(
 | |
|     OUTPUT "${CMAKE_CURRENT_SOURCE_DIR}/build-info.cpp"
 | |
|     COMMENT "Generating build details from Git"
 | |
|     COMMAND ${CMAKE_COMMAND} -DMSVC=${MSVC} -DCMAKE_C_COMPILER_VERSION=${CMAKE_C_COMPILER_VERSION}
 | |
|             -DCMAKE_C_COMPILER_ID=${CMAKE_C_COMPILER_ID} -DCMAKE_VS_PLATFORM_NAME=${CMAKE_VS_PLATFORM_NAME}
 | |
|             -DCMAKE_C_COMPILER=${CMAKE_C_COMPILER} -P "${CMAKE_CURRENT_SOURCE_DIR}/cmake/build-info-gen-cpp.cmake"
 | |
|     WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/.."
 | |
|     DEPENDS "${CMAKE_CURRENT_SOURCE_DIR}/build-info.cpp.in" ${GIT_INDEX}
 | |
|     VERBATIM
 | |
| )
 | |
| set(TARGET build_info)
 | |
| add_library(${TARGET} OBJECT build-info.cpp)
 | |
| if (BUILD_SHARED_LIBS)
 | |
|     set_target_properties(${TARGET} PROPERTIES POSITION_INDEPENDENT_CODE ON)
 | |
| endif()
 | |
| 
 | |
| set(TARGET common)
 | |
| 
 | |
| add_library(${TARGET} STATIC
 | |
|     arg.cpp
 | |
|     arg.h
 | |
|     base64.hpp
 | |
|     chat.cpp
 | |
|     chat.hpp
 | |
|     chat-template.hpp
 | |
|     common.cpp
 | |
|     common.h
 | |
|     console.cpp
 | |
|     console.h
 | |
|     json-schema-to-grammar.cpp
 | |
|     json.hpp
 | |
|     llguidance.cpp
 | |
|     log.cpp
 | |
|     log.h
 | |
|     minja.hpp
 | |
|     ngram-cache.cpp
 | |
|     ngram-cache.h
 | |
|     sampling.cpp
 | |
|     sampling.h
 | |
|     speculative.cpp
 | |
|     speculative.h
 | |
|     )
 | |
| 
 | |
| if (BUILD_SHARED_LIBS)
 | |
|     set_target_properties(${TARGET} PROPERTIES POSITION_INDEPENDENT_CODE ON)
 | |
| endif()
 | |
| 
 | |
| set(LLAMA_COMMON_EXTRA_LIBS build_info)
 | |
| 
 | |
| # Use curl to download model url
 | |
| if (LLAMA_CURL)
 | |
|     find_package(CURL REQUIRED)
 | |
|     target_compile_definitions(${TARGET} PUBLIC LLAMA_USE_CURL)
 | |
|     include_directories(${CURL_INCLUDE_DIRS})
 | |
|     find_library(CURL_LIBRARY curl REQUIRED)
 | |
|     set(LLAMA_COMMON_EXTRA_LIBS ${LLAMA_COMMON_EXTRA_LIBS} ${CURL_LIBRARY})
 | |
| endif ()
 | |
| 
 | |
| if (LLAMA_LLGUIDANCE)
 | |
|     include(ExternalProject)
 | |
|     set(LLGUIDANCE_SRC ${CMAKE_BINARY_DIR}/llguidance/source)
 | |
|     set(LLGUIDANCE_PATH ${LLGUIDANCE_SRC}/target/release)
 | |
|     ExternalProject_Add(llguidance_ext
 | |
|         GIT_REPOSITORY https://github.com/guidance-ai/llguidance
 | |
|         # v0.6.12:
 | |
|         GIT_TAG ced1c9023d47ec194fa977932d35ce65c2ebfc09
 | |
|         PREFIX ${CMAKE_BINARY_DIR}/llguidance
 | |
|         SOURCE_DIR ${LLGUIDANCE_SRC}
 | |
|         BUILD_IN_SOURCE TRUE
 | |
|         CONFIGURE_COMMAND ""
 | |
|         BUILD_COMMAND cargo build --release
 | |
|         INSTALL_COMMAND ""
 | |
|         BUILD_BYPRODUCTS ${LLGUIDANCE_PATH}/libllguidance.a ${LLGUIDANCE_PATH}/llguidance.h
 | |
|         UPDATE_COMMAND ""
 | |
|     )
 | |
|     target_compile_definitions(${TARGET} PUBLIC LLAMA_USE_LLGUIDANCE)
 | |
| 
 | |
|     add_library(llguidance STATIC IMPORTED)
 | |
|     set_target_properties(llguidance PROPERTIES IMPORTED_LOCATION ${LLGUIDANCE_PATH}/libllguidance.a)
 | |
|     add_dependencies(llguidance llguidance_ext)
 | |
| 
 | |
|     target_include_directories(${TARGET} PRIVATE ${LLGUIDANCE_PATH})
 | |
|     set(LLAMA_COMMON_EXTRA_LIBS ${LLAMA_COMMON_EXTRA_LIBS} llguidance)
 | |
| endif ()
 | |
| 
 | |
| target_include_directories(${TARGET} PUBLIC .)
 | |
| target_compile_features   (${TARGET} PUBLIC cxx_std_17)
 | |
| target_link_libraries     (${TARGET} PRIVATE ${LLAMA_COMMON_EXTRA_LIBS} PUBLIC llama Threads::Threads)
 |