char-fork/llama.cpp
git clone https://git.t4t.associates/char-fork/llama.cpp
b29c606e2
char/aliceai-t5-moe
1cmake_minimum_required ( VERSION 3.14...3.28 ) # for add_link_options and implicit target directories. 2project ( "llama.cpp" C CXX ) 3include ( CheckIncludeFileCXX ) 4 5### llama.cpp version 6set ( LLAMA_VERSION_MAJOR 0 ) 7set ( LLAMA_VERSION_MINOR 4 ) 8set ( LLAMA_VERSION_PATCH 1 ) 9set ( LLAMA_VERSION_BASE " ${ LLAMA_VERSION_MAJOR } . ${ LLAMA_VERSION_MINOR } . ${ LLAMA_VERSION_PATCH } " ) 10 11# whether this is a development/nightly build 12# set this to OFF when making a release from a release tag (vX.Y.Z) 13# ref: https://github.com/ggml-org/ggml/discussions/1579 14option ( LLAMA_BUILD_IS_DEV "llama: dev build" ON ) 15 16if ( LLAMA_BUILD_IS_DEV) 17set ( LLAMA_VERSION " ${ LLAMA_VERSION_BASE } -dev" ) 18else () 19# TODO: check that the current commit is tagged correctly according to the version specified above 20set ( LLAMA_VERSION " ${ LLAMA_VERSION_BASE } " ) 21endif () 22 23message ( STATUS "llama.cpp version: ${ LLAMA_VERSION } " ) 24 25#set(CMAKE_WARN_DEPRECATED YES) 26set ( CMAKE_WARN_UNUSED_CLI YES ) 27 28set ( CMAKE_EXPORT_COMPILE_COMMANDS ON ) 29 30if ( NOT XCODEAND NOT MSVCAND NOT CMAKE_BUILD_TYPE) 31set ( CMAKE_BUILD_TYPE Release CACHE STRING "Build type" FORCE ) 32set_property ( CACHE CMAKE_BUILD_TYPE PROPERTY STRINGS "Debug" "Release" "MinSizeRel" "RelWithDebInfo" ) 33endif () 34 35message ( "CMAKE_BUILD_TYPE= ${ CMAKE_BUILD_TYPE } " ) 36 37# Add path to modules 38list ( APPEND CMAKE_MODULE_PATH " ${ CMAKE_CURRENT_SOURCE_DIR } /cmake/" ) 39 40set ( CMAKE_RUNTIME_OUTPUT_DIRECTORY ${ CMAKE_BINARY_DIR } /bin ) 41set ( CMAKE_LIBRARY_OUTPUT_DIRECTORY ${ CMAKE_BINARY_DIR } /bin ) 42 43if ( CMAKE_SOURCE_DIRSTREQUAL CMAKE_CURRENT_SOURCE_DIR) 44set ( LLAMA_STANDALONE ON ) 45 46include ( git-vars ) 47else () 48set ( LLAMA_STANDALONE OFF ) 49endif () 50 51option ( LLAMA_USE_SYSTEM_GGML "Use system libggml" OFF ) 52 53option ( LLAMA_WASM_MEM64 "llama: use 64-bit memory in WASM builds" ON ) 54 55if ( EMSCRIPTEN) 56set ( BUILD_SHARED_LIBS_DEFAULT OFF ) 57 58# Use 64-bit memory to support backend_get_memory queries 59# TODO: analyze performance impact, see https://spidermonkey.dev/blog/2025/01/15/is-memory64-actually-worth-using 60if ( LLAMA_WASM_MEM64) 61add_compile_options ( "-sMEMORY64=1" ) 62add_link_options ( "-sMEMORY64=1" ) 63endif () 64add_link_options ( "-sALLOW_MEMORY_GROWTH=1" ) 65 66option ( LLAMA_WASM_SINGLE_FILE "llama: embed WASM inside the generated llama.js" OFF ) 67option ( LLAMA_BUILD_HTML "llama: build HTML file" ON ) 68if ( LLAMA_BUILD_HTML) 69set ( CMAKE_EXECUTABLE_SUFFIX ".html" ) 70endif () 71else () 72if ( MINGW) 73set ( BUILD_SHARED_LIBS_DEFAULT OFF ) 74else () 75set ( BUILD_SHARED_LIBS_DEFAULT ON ) 76endif () 77endif () 78 79option ( BUILD_SHARED_LIBS "build shared libraries" ${ BUILD_SHARED_LIBS_DEFAULT }) 80 81if ( WIN32) 82add_compile_definitions ( _CRT_SECURE_NO_WARNINGS ) 83endif () 84 85if ( MSVC) 86add_compile_options ( " $ < $ <COMPILE_LANGUAGE:C>:/utf-8>" ) 87add_compile_options ( " $ < $ <COMPILE_LANGUAGE:CXX>:/utf-8>" ) 88add_compile_options ( " $ < $ <COMPILE_LANGUAGE:C>:/bigobj>" ) 89add_compile_options ( " $ < $ <COMPILE_LANGUAGE:CXX>:/bigobj>" ) 90endif () 91 92if ( LLAMA_STANDALONE) 93# enable parallel builds for msbuild 94list ( APPEND CMAKE_VS_GLOBALS UseMultiToolTask=true ) 95list ( APPEND CMAKE_VS_GLOBALS EnforceProcessCountAcrossBuilds=true ) 96endif () 97 98if ( CMAKE_SYSTEM_NAMESTREQUAL "iOS" ) 99set ( LLAMA_TOOLS_INSTALL_DEFAULT OFF ) 100else () 101set ( LLAMA_TOOLS_INSTALL_DEFAULT ${ LLAMA_STANDALONE }) 102endif () 103 104# subprocess spawning isn't a supported/sandbox-friendly operation on mobile OSes or in WASM 105if ( CMAKE_SYSTEM_NAMESTREQUAL "iOS" OR CMAKE_SYSTEM_NAMESTREQUAL "Android" OR ANDROID 106OR CMAKE_SYSTEM_NAMESTREQUAL "Emscripten" OR EMSCRIPTEN) 107set ( LLAMA_SUBPROCESS_DEFAULT OFF ) 108else () 109set ( LLAMA_SUBPROCESS_DEFAULT ON ) 110endif () 111 112# 113# option list 114# 115 116# debug 117option ( LLAMA_ALL_WARNINGS "llama: enable all compiler warnings" ON ) 118option ( LLAMA_ALL_WARNINGS_3RD_PARTY "llama: enable all compiler warnings in 3rd party libs" OFF ) 119 120# build 121option ( LLAMA_FATAL_WARNINGS "llama: enable -Werror flag" OFF ) 122 123# sanitizers 124option ( LLAMA_SANITIZE_THREAD "llama: enable thread sanitizer" OFF ) 125option ( LLAMA_SANITIZE_ADDRESS "llama: enable address sanitizer" OFF ) 126option ( LLAMA_SANITIZE_UNDEFINED "llama: enable undefined sanitizer" OFF ) 127 128# utils 129option ( LLAMA_BUILD_COMMON "llama: build common utils library" ${ LLAMA_STANDALONE }) 130 131# extra artifacts 132option ( LLAMA_BUILD_TESTS "llama: build tests" ${ LLAMA_STANDALONE }) 133option ( LLAMA_BUILD_TOOLS "llama: build tools" ${ LLAMA_STANDALONE }) 134option ( LLAMA_BUILD_EXAMPLES "llama: build examples" ${ LLAMA_STANDALONE }) 135option ( LLAMA_BUILD_SERVER "llama: build server example" ${ LLAMA_STANDALONE }) 136option ( LLAMA_BUILD_APP "llama: build the unified binary" ${ LLAMA_STANDALONE }) 137option ( LLAMA_BUILD_UI "llama: build the embedded Web UI for server" OFF ) 138option ( LLAMA_USE_PREBUILT_UI "llama: use prebuilt UI from HF Bucket when available" ON ) 139 140option ( LLAMA_TOOLS_INSTALL "llama: install tools" ${ LLAMA_TOOLS_INSTALL_DEFAULT }) 141option ( LLAMA_TESTS_INSTALL "llama: install tests" ON ) 142 143# 3rd party libs 144option ( LLAMA_OPENSSL "llama: use openssl to support HTTPS" ON ) 145option ( LLAMA_SUBPROCESS "llama-common: use subprocess, required by server tools and server router mode" ${ LLAMA_SUBPROCESS_DEFAULT }) 146option ( LLAMA_LLGUIDANCE "llama-common: include LLGuidance library for structured output in common utils" OFF ) 147 148 149# Required for relocatable CMake package 150include ( $ { CMAKE_CURRENT_SOURCE_DIR } /cmake/build-info.cmake ) 151include ( $ { CMAKE_CURRENT_SOURCE_DIR } /cmake/common.cmake ) 152 153if ( NOT DEFINED LLAMA_BUILD_NUMBER) 154set ( LLAMA_BUILD_NUMBER ${ BUILD_NUMBER }) 155endif () 156if ( NOT DEFINED LLAMA_BUILD_COMMIT) 157set ( LLAMA_BUILD_COMMIT ${ BUILD_COMMIT }) 158endif () 159 160# override ggml options 161set ( GGML_ALL_WARNINGS ${ LLAMA_ALL_WARNINGS }) 162set ( GGML_FATAL_WARNINGS ${ LLAMA_FATAL_WARNINGS }) 163 164# change the default for these ggml options 165if ( NOT DEFINED GGML_LLAMAFILE) 166set ( GGML_LLAMAFILE_DEFAULT ON ) 167endif () 168 169if ( NOT DEFINED GGML_CUDA_GRAPHS) 170set ( GGML_CUDA_GRAPHS_DEFAULT ON ) 171endif () 172 173# transition helpers 174function ( llama_option_depr TYPE OLD ) 175if (${ OLD }) 176set ( NEW " ${ ARGV2 } " ) 177if ( NEW) 178message ( $ { TYPE } " ${ OLD } is deprecated, use ${ NEW } instead" ) 179set ( $ { NEW } ON PARENT_SCOPE ) 180else () 181message ( $ { TYPE } " ${ OLD } is deprecated and will be ignored" ) 182endif () 183endif () 184endfunction () 185 186llama_option_depr ( FATAL_ERROR LLAMA_CUBLAS GGML_CUDA ) 187llama_option_depr ( WARNING LLAMA_CUDA GGML_CUDA ) 188llama_option_depr ( WARNING LLAMA_METAL GGML_METAL ) 189llama_option_depr ( WARNING LLAMA_METAL_EMBED_LIBRARY GGML_METAL_EMBED_LIBRARY ) 190llama_option_depr ( WARNING LLAMA_NATIVE GGML_NATIVE ) 191llama_option_depr ( WARNING LLAMA_RPC GGML_RPC ) 192llama_option_depr ( WARNING LLAMA_SYCL GGML_SYCL ) 193llama_option_depr ( WARNING LLAMA_SYCL_F16 GGML_SYCL_F16 ) 194llama_option_depr ( WARNING LLAMA_CANN GGML_CANN ) 195llama_option_depr ( WARNING LLAMA_CURL ) 196 197include ( "cmake/license.cmake" ) 198license_add_file ( "llama.cpp" "LICENSE" ) 199 200# 201# compile options 202# 203 204# clang stores the modification time of the precompiled header sources inside the 205# header and rejects it when they differ, so the timestamp is left out of it 206add_compile_options ( 207" $ < $ <COMPILE_LANG_AND_ID:C,Clang,IntelLLVM>:SHELL:-Xclang -fno-pch-timestamp>" 208" $ < $ <COMPILE_LANG_AND_ID:CXX,Clang,IntelLLVM>:SHELL:-Xclang -fno-pch-timestamp>" ) 209 210# 211# 3rd-party 212# 213 214if ( LLAMA_USE_SYSTEM_GGML) 215message ( STATUS "Using system-provided libggml, skipping ggml build" ) 216find_package ( ggml REQUIRED ) 217add_library ( ggml ALIAS ggml::ggml ) 218endif () 219 220if ( NOT TARGET ggmlAND NOT LLAMA_USE_SYSTEM_GGML) 221set ( GGML_BUILD_NUMBER ${ LLAMA_BUILD_NUMBER }) 222set ( GGML_BUILD_COMMIT ${ LLAMA_BUILD_COMMIT }) 223add_subdirectory ( ggml ) 224# ... otherwise assume ggml is added by a parent CMakeLists.txt 225endif () 226 227# 228# build the library 229# 230 231add_subdirectory ( src ) 232 233# 234# utils, programs, examples and tests 235# 236 237add_subdirectory ( vendor ) 238 239if ( LLAMA_BUILD_COMMON) 240add_subdirectory ( common ) 241endif () 242 243if ( LLAMA_BUILD_COMMONAND LLAMA_BUILD_TESTSAND NOT CMAKE_JS_VERSION) 244include ( CTest ) 245add_subdirectory ( tests ) 246endif () 247 248if ( LLAMA_BUILD_COMMONAND LLAMA_BUILD_EXAMPLES) 249add_subdirectory ( examples ) 250add_subdirectory ( pocs ) 251endif () 252 253if ( LLAMA_BUILD_COMMONAND LLAMA_BUILD_TOOLS) 254add_subdirectory ( tools ) 255endif () 256 257if ( LLAMA_BUILD_APP) 258add_subdirectory ( app ) 259endif () 260 261# Standalone libmtmd build without pulling in the rest of the tools/ tree. 262# Useful when packaging just the mtmd library for language bindings (e.g. an 263# Apple XCFramework, or a WASM build). When the full tools build is enabled, 264# mtmd is already built by the tools/ subdirectory above; this hook only fires 265# when LLAMA_BUILD_TOOLS is OFF to avoid double-adding the target. 266option ( LLAMA_BUILD_MTMD "llama: build tools/mtmd library standalone" OFF ) 267if ( LLAMA_BUILD_MTMDAND NOT ( LLAMA_BUILD_COMMONAND LLAMA_BUILD_TOOLS)) 268add_subdirectory ( tools/mtmd ) 269endif () 270 271# 272# install 273# 274 275include ( GNUInstallDirs ) 276include ( CMakePackageConfigHelpers ) 277 278set ( LLAMA_INCLUDE_INSTALL_DIR ${ CMAKE_INSTALL_INCLUDEDIR } CACHE PATH "Location of header files" ) 279set ( LLAMA_LIB_INSTALL_DIR ${ CMAKE_INSTALL_LIBDIR } CACHE PATH "Location of library files" ) 280set ( LLAMA_BIN_INSTALL_DIR ${ CMAKE_INSTALL_BINDIR } CACHE PATH "Location of binary files" ) 281 282set ( LLAMA_PUBLIC_HEADERS 283${ CMAKE_CURRENT_SOURCE_DIR } /include/llama.h 284${ CMAKE_CURRENT_SOURCE_DIR } /include/llama-cpp.h ) 285 286set_target_properties ( llama 287PROPERTIES 288PUBLIC_HEADER " ${ LLAMA_PUBLIC_HEADERS } " ) 289 290install ( TARGETS llama LIBRARY PUBLIC_HEADER ) 291 292if ( LLAMA_BUILD_COMMON) 293install ( TARGETS llama-common LIBRARY ) 294endif () 295 296configure_package_config_file ( 297${ CMAKE_CURRENT_SOURCE_DIR } /cmake/llama-config.cmake.in 298${ CMAKE_CURRENT_BINARY_DIR } /llama-config.cmake 299INSTALL_DESTINATION ${ CMAKE_INSTALL_LIBDIR } /cmake/llama 300PATH_VARS LLAMA_INCLUDE_INSTALL_DIR 301LLAMA_LIB_INSTALL_DIR 302LLAMA_BIN_INSTALL_DIR ) 303 304write_basic_package_version_file ( 305${ CMAKE_CURRENT_BINARY_DIR } /llama-config-version.cmake 306VERSION ${ LLAMA_VERSION } 307COMPATIBILITY SameMajorVersion ) 308 309install ( FILES ${ CMAKE_CURRENT_BINARY_DIR } /llama-config.cmake 310${ CMAKE_CURRENT_BINARY_DIR } /llama-config-version.cmake 311DESTINATION ${ CMAKE_INSTALL_LIBDIR } /cmake/llama ) 312 313configure_file ( cmake/llama.pc.in 314" ${ CMAKE_CURRENT_BINARY_DIR } /llama.pc" 315@ONLY ) 316 317install ( FILES " ${ CMAKE_CURRENT_BINARY_DIR } /llama.pc" 318DESTINATION ${ CMAKE_INSTALL_LIBDIR } /pkgconfig )