2024-12-02 21:22:53 +02:00
ifndef LLAMA_MAKEFILE
2025-02-15 16:40:57 +02:00
$(error The Makefile build is deprecated. Use the CMake build instead. For more details, see https : //github .com /ggml -org /llama .cpp /blob /master /docs /build .md )
2024-12-02 21:22:53 +02:00
endif
2023-04-20 03:14:14 +02:00
# Define the default target now so that it is always the first target
2023-10-11 21:25:33 +03:00
BUILD_TARGETS = \
2024-06-13 00:41:52 +01:00
libllava.a \
llama-batched \
llama-batched-bench \
llama-bench \
llama-cli \
llama-convert-llama2c-to-ggml \
llama-embedding \
llama-eval-callback \
llama-export-lora \
llama-gbnf-validator \
llama-gguf \
2024-07-07 22:58:43 +10:00
llama-gguf-hash \
2024-06-13 00:41:52 +01:00
llama-gguf-split \
llama-gritlm \
llama-imatrix \
llama-infill \
llama-llava-cli \
2024-08-09 18:33:53 +08:00
llama-minicpmv-cli\
2024-12-14 20:43:46 +08:00
llama-qwen2vl-cli\
2024-06-13 00:41:52 +01:00
llama-lookahead \
llama-lookup \
llama-lookup-create \
llama-lookup-merge \
llama-lookup-stats \
llama-parallel \
llama-passkey \
llama-perplexity \
llama-q8dot \
llama-quantize \
llama-quantize-stats \
llama-retrieval \
llama-save-load-state \
llama-server \
llama-simple \
2024-11-01 23:50:59 +01:00
llama-simple-chat \
2024-11-25 16:56:24 -05:00
llama-run \
2024-06-13 00:41:52 +01:00
llama-speculative \
llama-tokenize \
llama-vdot \
2024-06-15 18:53:40 +02:00
llama-cvector-generator \
2024-09-07 20:43:51 +02:00
llama-gen-docs \
2024-06-13 00:41:52 +01:00
tests/test-c.o
2023-05-27 11:04:14 -06:00
2023-07-21 12:09:16 +02:00
# Binaries only useful for tests
2023-10-11 21:25:33 +03:00
TEST_TARGETS = \
2024-09-07 20:43:51 +02:00
tests/test-arg-parser \
2024-04-29 16:58:41 +03:00
tests/test-autorelease \
tests/test-backend-ops \
2025-01-30 19:13:58 +00:00
tests/test-chat \
2024-06-28 02:19:11 +02:00
tests/test-chat-template \
2024-04-29 16:58:41 +03:00
tests/test-double-float \
tests/test-grammar-integration \
tests/test-grammar-parser \
tests/test-json-schema-to-grammar \
tests/test-llama-grammar \
2024-09-15 20:46:12 +03:00
tests/test-log \
2024-04-29 16:58:41 +03:00
tests/test-model-load-cancel \
tests/test-quantize-fns \
tests/test-quantize-perf \
tests/test-rope \
tests/test-sampling \
tests/test-tokenizer-0 \
tests/test-tokenizer-1-bpe \
tests/test-tokenizer-1-spm
2024-11-03 19:34:08 +01:00
# tests/test-opt \
2023-07-21 12:09:16 +02:00
2024-07-02 13:19:56 -04:00
# Legacy build targets that were renamed in #7809, but should still be removed when the project is cleaned
2024-07-25 10:39:04 +02:00
LEGACY_TARGETS_CLEAN = main quantize quantize-stats perplexity imatrix embedding vdot q8dot convert-llama2c-to-ggml \
2024-07-02 13:19:56 -04:00
simple batched batched-bench save-load-state server gguf gguf-split eval-callback llama-bench libllava.a llava-cli baby-llama \
2024-10-02 10:14:44 +03:00
retrieval speculative infill tokenize parallel export-lora lookahead lookup passkey gritlm
2024-07-02 13:19:56 -04:00
2024-07-09 11:54:43 -04:00
# Legacy build targets that were renamed in #7809, but we want to build binaries that for them that output a deprecation warning if people try to use them.
# We don't want to clutter things too much, so we only build replacements for the most commonly used binaries.
2024-07-25 10:39:04 +02:00
LEGACY_TARGETS_BUILD = main quantize perplexity embedding server
2024-07-09 11:54:43 -04:00
2024-06-26 18:33:02 +03:00
# Deprecation aliases
ifdef LLAMA_CUBLAS
$( error LLAMA_CUBLAS is removed . Use GGML_CUDA instead .)
endif
ifdef LLAMA_CUDA
GGML_CUDA := 1
DEPRECATE_WARNING := 1
endif
ifdef LLAMA_KOMPUTE
GGML_KOMPUTE := 1
DEPRECATE_WARNING := 1
endif
ifdef LLAMA_METAL
GGML_METAL := 1
DEPRECATE_WARNING := 1
endif
ifdef LLAMA_RPC
GGML_RPC := 1
DEPRECATE_WARNING := 1
endif
ifdef LLAMA_SYCL
GGML_SYCL := 1
DEPRECATE_WARNING := 1
endif
ifdef LLAMA_SYCL_F16
GGML_SYCL_F16 := 1
DEPRECATE_WARNING := 1
endif
ifdef LLAMA_OPENBLAS
GGML_OPENBLAS := 1
DEPRECATE_WARNING := 1
endif
ifdef LLAMA_OPENBLAS64
GGML_OPENBLAS64 := 1
DEPRECATE_WARNING := 1
endif
ifdef LLAMA_BLIS
GGML_BLIS := 1
DEPRECATE_WARNING := 1
endif
ifdef LLAMA_NO_LLAMAFILE
GGML_NO_LLAMAFILE := 1
DEPRECATE_WARNING := 1
endif
ifdef LLAMA_NO_ACCELERATE
GGML_NO_ACCELERATE := 1
DEPRECATE_WARNING := 1
endif
ifdef LLAMA_NO_OPENMP
GGML_NO_OPENMP := 1
DEPRECATE_WARNING := 1
endif
ifdef LLAMA_NO_METAL
GGML_NO_METAL := 1
DEPRECATE_WARNING := 1
endif
2023-09-03 11:48:49 +03:00
2024-09-15 20:46:12 +03:00
ifdef LLAMA_DISABLE_LOGS
REMOVE_WARNING := 1
endif
ifdef LLAMA_SERVER_VERBOSE
REMOVE_WARNING := 1
endif
2023-09-04 22:26:24 +03:00
ifndef UNAME_S
UNAME_S := $( shell uname -s)
endif
ifndef UNAME_P
UNAME_P := $( shell uname -p)
endif
ifndef UNAME_M
UNAME_M := $( shell uname -m)
endif
2024-04-29 15:08:20 +02:00
# In GNU make default CXX is g++ instead of c++. Let's fix that so that users
# of non-gcc compilers don't have to provide g++ alias or wrapper.
DEFCC := cc
DEFCXX := c++
ifeq ( $( origin CC ) ,default)
CC := $( DEFCC)
endif
ifeq ( $( origin CXX ) ,default)
CXX := $( DEFCXX)
endif
2023-09-04 22:26:24 +03:00
# Mac OS + Arm can report x86_64
# ref: https://github.com/ggerganov/whisper.cpp/issues/66#issuecomment-1282546789
ifeq ( $( UNAME_S ) ,Darwin)
2024-06-26 18:33:02 +03:00
ifndef GGML_NO_METAL
GGML_METAL := 1
2023-09-04 22:26:24 +03:00
endif
2024-06-26 18:33:02 +03:00
GGML_NO_OPENMP := 1
2024-06-04 00:14:15 +09:00
2023-09-04 22:26:24 +03:00
ifneq ( $( UNAME_P) ,arm)
SYSCTL_M := $( shell sysctl -n hw.optional.arm64 2>/dev/null)
ifeq ( $( SYSCTL_M) ,1)
# UNAME_P := arm
# UNAME_M := arm64
warn := $( warning Your arch is announced as x86_64, but it seems to actually be ARM64. Not fixing that can lead to bad performance. For more info see: https://github.com/ggerganov/whisper.cpp/issues/66\# issuecomment-1282546789)
endif
endif
endif
2024-06-26 18:33:02 +03:00
ifdef GGML_METAL
GGML_METAL_EMBED_LIBRARY := 1
endif
ifdef GGML_RPC
2024-06-03 20:03:26 +03:00
BUILD_TARGETS += rpc-server
endif
2024-07-13 13:12:39 -03:00
ifdef GGML_VULKAN
BUILD_TARGETS += vulkan-shaders-gen
endif
2024-07-09 11:54:43 -04:00
default : $( BUILD_TARGETS ) $( LEGACY_TARGETS_BUILD )
2023-04-20 03:14:14 +02:00
2023-09-07 10:15:01 -04:00
test : $( TEST_TARGETS )
@failures= 0; \
for test_target in $( TEST_TARGETS) ; do \
2024-04-29 16:58:41 +03:00
if [ " $$ test_target" = "tests/test-tokenizer-0" ] ; then \
./$$ test_target $( CURDIR) /models/ggml-vocab-llama-spm.gguf; \
./$$ test_target $( CURDIR) /models/ggml-vocab-llama-bpe.gguf; \
./$$ test_target $( CURDIR) /models/ggml-vocab-phi-3.gguf; \
2023-10-03 09:16:26 +02:00
./$$ test_target $( CURDIR) /models/ggml-vocab-falcon.gguf; \
2024-04-29 16:58:41 +03:00
./$$ test_target $( CURDIR) /models/ggml-vocab-bert-bge.gguf; \
./$$ test_target $( CURDIR) /models/ggml-vocab-starcoder.gguf; \
./$$ test_target $( CURDIR) /models/ggml-vocab-gpt-2.gguf; \
2024-05-04 08:32:32 +03:00
./$$ test_target $( CURDIR) /models/ggml-vocab-refact.gguf; \
2024-04-29 16:58:41 +03:00
elif [ " $$ test_target" = "tests/test-tokenizer-1-spm" ] ; then \
2023-08-30 12:42:51 +03:00
continue ; \
2023-10-03 09:16:26 +02:00
elif [ " $$ test_target" = "tests/test-tokenizer-1-bpe" ] ; then \
continue ; \
2023-08-30 12:42:51 +03:00
else \
2023-09-07 10:15:01 -04:00
echo "Running test $$ test_target..." ; \
2023-08-30 12:42:51 +03:00
./$$ test_target; \
fi ; \
2023-09-07 10:15:01 -04:00
if [ $$ ? -ne 0 ] ; then \
2023-12-21 21:07:46 +01:00
printf 'Test %s FAILED!\n\n' $$ test_target; \
2023-09-07 10:15:01 -04:00
failures = $$ (( failures + 1 )) ; \
else \
printf 'Test %s passed.\n\n' $$ test_target; \
fi ; \
done ; \
if [ $$ failures -gt 0 ] ; then \
printf '\n%s tests failed.\n' $$ failures; \
exit 1; \
fi
@echo 'All tests passed.'
2023-08-30 12:42:51 +03:00
2024-07-09 11:54:43 -04:00
all : $( BUILD_TARGETS ) $( TEST_TARGETS ) $( LEGACY_TARGETS_BUILD )
2023-08-30 12:42:51 +03:00
2023-09-01 18:27:40 +05:00
ifdef RISCV_CROSS_COMPILE
CC := riscv64-unknown-linux-gnu-gcc
CXX := riscv64-unknown-linux-gnu-g++
endif
2023-03-10 20:40:58 +02:00
#
# Compile flags
#
2024-11-30 19:19:44 -08:00
# keep standard at C11 and C++17
2024-11-25 15:13:39 +01:00
MK_CPPFLAGS = -Iggml/include -Iggml/src -Iinclude -Isrc -Icommon -DGGML_USE_CPU
2024-02-19 13:41:51 +02:00
MK_CFLAGS = -std= c11 -fPIC
2024-11-29 21:54:58 +01:00
MK_CXXFLAGS = -std= c++17 -fPIC
MK_NVCCFLAGS = -std= c++17
2023-09-16 17:55:43 +03:00
2024-07-09 17:11:07 +02:00
ifdef LLAMA_NO_CCACHE
GGML_NO_CCACHE := 1
DEPRECATE_WARNING := 1
endif
ifndef GGML_NO_CCACHE
2024-02-05 19:33:00 +01:00
CCACHE := $( shell which ccache)
ifdef CCACHE
export CCACHE_SLOPPINESS = time_macros
2024-07-09 17:11:07 +02:00
$( info I ccache found , compilation results will be cached . Disable with GGML_NO_CCACHE .)
2024-02-05 19:33:00 +01:00
CC := $( CCACHE) $( CC)
CXX := $( CCACHE) $( CXX)
else
$( info I ccache not found . Consider installing it for faster compilation .)
endif # CCACHE
2024-07-09 17:11:07 +02:00
endif # GGML_NO_CCACHE
2024-02-05 19:33:00 +01:00
2023-09-08 14:09:21 +02:00
# clock_gettime came in POSIX.1b (1993)
# CLOCK_MONOTONIC came in POSIX.1-2001 / SUSv3 as optional
# posix_memalign came in POSIX.1-2001 / SUSv3
# M_PI is an XSI extension since POSIX.1-2001 / SUSv3, came in XPG1 (1985)
2023-09-14 13:22:47 -04:00
MK_CPPFLAGS += -D_XOPEN_SOURCE= 600
2023-09-08 14:09:21 +02:00
# Somehow in OpenBSD whenever POSIX conformance is specified
# some string functions rely on locale_t availability,
# which was introduced in POSIX.1-2008, forcing us to go higher
ifeq ( $( UNAME_S ) ,OpenBSD)
2023-09-14 13:22:47 -04:00
MK_CPPFLAGS += -U_XOPEN_SOURCE -D_XOPEN_SOURCE= 700
2023-09-08 14:09:21 +02:00
endif
# Data types, macros and functions related to controlling CPU affinity and
# some memory allocation are available on Linux through GNU extensions in libc
ifeq ( $( UNAME_S ) ,Linux)
2023-09-14 13:22:47 -04:00
MK_CPPFLAGS += -D_GNU_SOURCE
2024-11-25 15:13:39 +01:00
MK_LDFLAGS += -ldl
2023-09-08 14:09:21 +02:00
endif
# RLIMIT_MEMLOCK came in BSD, is not specified in POSIX.1,
# and on macOS its availability depends on enabling Darwin extensions
# similarly on DragonFly, enabling BSD extensions is necessary
ifeq ( $( UNAME_S ) ,Darwin)
2023-09-14 13:22:47 -04:00
MK_CPPFLAGS += -D_DARWIN_C_SOURCE
2023-09-08 14:09:21 +02:00
endif
ifeq ( $( UNAME_S ) ,DragonFly)
2023-09-14 13:22:47 -04:00
MK_CPPFLAGS += -D__BSD_VISIBLE
2023-09-08 14:09:21 +02:00
endif
# alloca is a non-standard interface that is not visible on BSDs when
# POSIX conformance is specified, but not all of them provide a clean way
# to enable it in such cases
ifeq ( $( UNAME_S ) ,FreeBSD)
2023-09-14 13:22:47 -04:00
MK_CPPFLAGS += -D__BSD_VISIBLE
2023-09-08 14:09:21 +02:00
endif
ifeq ( $( UNAME_S ) ,NetBSD)
2023-09-14 13:22:47 -04:00
MK_CPPFLAGS += -D_NETBSD_SOURCE
2023-09-08 14:09:21 +02:00
endif
ifeq ( $( UNAME_S ) ,OpenBSD)
2023-09-14 13:22:47 -04:00
MK_CPPFLAGS += -D_BSD_SOURCE
2023-09-08 14:09:21 +02:00
endif
2024-06-26 18:33:02 +03:00
ifdef GGML_SCHED_MAX_COPIES
MK_CPPFLAGS += -DGGML_SCHED_MAX_COPIES= $( GGML_SCHED_MAX_COPIES)
2024-03-13 18:54:21 +01:00
endif
2023-05-28 21:01:02 +02:00
ifdef LLAMA_DEBUG
2024-06-03 16:28:58 +02:00
MK_CFLAGS += -O0 -g
MK_CXXFLAGS += -O0 -g
MK_LDFLAGS += -g
MK_NVCCFLAGS += -O0 -g
2023-12-01 13:18:35 -05:00
ifeq ( $( UNAME_S) ,Linux)
2024-02-20 20:06:17 +01:00
MK_CPPFLAGS += -D_GLIBCXX_ASSERTIONS
2023-12-01 13:18:35 -05:00
endif
2023-05-28 21:01:02 +02:00
else
2024-06-26 20:20:22 +02:00
MK_CPPFLAGS += -DNDEBUG
2024-07-27 04:41:55 +02:00
MK_CFLAGS += -O3 -g
MK_CXXFLAGS += -O3 -g
MK_NVCCFLAGS += -O3 -g
2023-04-29 18:43:28 +03:00
endif
2023-10-11 13:35:46 -06:00
ifdef LLAMA_SANITIZE_THREAD
MK_CFLAGS += -fsanitize= thread -g
MK_CXXFLAGS += -fsanitize= thread -g
MK_LDFLAGS += -fsanitize= thread -g
endif
ifdef LLAMA_SANITIZE_ADDRESS
MK_CFLAGS += -fsanitize= address -fno-omit-frame-pointer -g
MK_CXXFLAGS += -fsanitize= address -fno-omit-frame-pointer -g
MK_LDFLAGS += -fsanitize= address -fno-omit-frame-pointer -g
endif
ifdef LLAMA_SANITIZE_UNDEFINED
MK_CFLAGS += -fsanitize= undefined -g
MK_CXXFLAGS += -fsanitize= undefined -g
MK_LDFLAGS += -fsanitize= undefined -g
endif
2024-03-09 02:57:09 -07:00
ifdef LLAMA_SERVER_SSL
MK_CPPFLAGS += -DCPPHTTPLIB_OPENSSL_SUPPORT
MK_LDFLAGS += -lssl -lcrypto
endif
2023-09-03 11:48:49 +03:00
2024-11-15 20:20:54 +01:00
ifndef GGML_NO_CPU_AARCH64
MK_CPPFLAGS += -DGGML_USE_CPU_AARCH64
endif
2023-03-28 16:48:20 +00:00
# warnings
2024-06-26 18:33:02 +03:00
WARN_FLAGS = \
-Wall \
-Wextra \
-Wpedantic \
-Wcast-qual \
-Wno-unused-function
MK_CFLAGS += \
$( WARN_FLAGS) \
-Wshadow \
-Wstrict-prototypes \
-Wpointer-arith \
-Wmissing-prototypes \
-Werror= implicit-int \
-Werror= implicit-function-declaration
MK_CXXFLAGS += \
$( WARN_FLAGS) \
-Wmissing-declarations \
-Wmissing-noreturn
2023-03-28 16:48:20 +00:00
2024-02-17 16:03:14 -05:00
ifeq ( $( LLAMA_FATAL_WARNINGS ) ,1)
2024-02-19 14:45:41 +02:00
MK_CFLAGS += -Werror
2024-02-17 16:03:14 -05:00
MK_CXXFLAGS += -Werror
endif
2023-11-14 09:34:41 -08:00
# this version of Apple ld64 is buggy
ifneq '' '$(findstring dyld-1015.7,$(shell $(CC) $(LDFLAGS) -Wl,-v 2>&1))'
MK_CPPFLAGS += -DHAVE_BUGGY_APPLE_LINKER
endif
2023-03-10 20:40:58 +02:00
# OS specific
# TODO: support Windows
2023-09-03 01:26:59 -04:00
ifneq '' '$(filter $(UNAME_S),Linux Darwin FreeBSD NetBSD OpenBSD Haiku)'
MK_CFLAGS += -pthread
MK_CXXFLAGS += -pthread
2023-03-10 20:40:58 +02:00
endif
2023-07-21 09:42:21 +02:00
# detect Windows
ifneq ( $( findstring _NT ,$( UNAME_S )) ,)
_WIN32 := 1
endif
# library name prefix
ifneq ( $( _WIN 32) ,1)
LIB_PRE := lib
endif
# Dynamic Shared Object extension
ifneq ( $( _WIN 32) ,1)
DSO_EXT := .so
else
DSO_EXT := .dll
endif
# Windows Sockets 2 (Winsock) for network-capable apps
ifeq ( $( _WIN 32) ,1)
LWINSOCK2 := -lws2_32
endif
2023-05-13 17:25:09 +03:00
ifdef LLAMA_GPROF
2023-09-03 01:26:59 -04:00
MK_CFLAGS += -pg
MK_CXXFLAGS += -pg
2023-05-13 17:25:09 +03:00
endif
2023-03-10 20:40:58 +02:00
# Architecture specific
# TODO: probably these flags need to be tweaked on some architectures
# feel free to update the Makefile for your architecture and send a pull request or issue
2023-09-01 18:27:40 +05:00
2024-09-12 16:24:31 +05:00
ifndef RISCV_CROSS_COMPILE
2023-09-01 18:27:40 +05:00
2023-07-21 06:53:27 -04:00
ifeq ( $( UNAME_M ) , $( filter $( UNAME_M ) ,x 86_ 64 i 686 amd 64) )
2023-04-02 09:17:05 +02:00
# Use all CPU extensions that are available:
2023-12-13 12:10:10 -05:00
MK_CFLAGS += -march= native -mtune= native
HOST_CXXFLAGS += -march= native -mtune= native
2023-04-22 11:08:12 +03:00
2024-12-07 13:37:50 +01:00
# Usage AMX build test
#MK_CFLAGS += -march=graniterapids -mtune=graniterapids
#HOST_CXXFLAGS += -march=graniterapids -mtune=graniterapids
2023-04-22 11:08:12 +03:00
# Usage AVX-only
2023-09-03 01:26:59 -04:00
#MK_CFLAGS += -mfma -mf16c -mavx
#MK_CXXFLAGS += -mfma -mf16c -mavx
2023-06-10 14:41:59 +08:00
# Usage SSSE3-only (Not is SSE3!)
2023-09-03 01:26:59 -04:00
#MK_CFLAGS += -mssse3
#MK_CXXFLAGS += -mssse3
2023-03-10 20:40:58 +02:00
endif
2023-06-04 23:34:30 +03:00
2023-09-01 09:53:14 -04:00
ifneq '' '$(findstring mingw,$(shell $(CC) -dumpmachine))'
2023-12-12 04:27:26 -05:00
# The stack is only 16-byte aligned on Windows, so don't let gcc emit aligned moves.
# https://gcc.gnu.org/bugzilla/show_bug.cgi?id=54412
2025-02-15 16:40:57 +02:00
# https://github.com/ggml-org/llama.cpp/issues/2922
2023-09-05 15:12:00 -04:00
MK_CFLAGS += -Xassembler -muse-unaligned-vector-move
MK_CXXFLAGS += -Xassembler -muse-unaligned-vector-move
2023-12-12 04:27:26 -05:00
# Target Windows 8 for PrefetchVirtualMemory
MK_CPPFLAGS += -D_WIN32_WINNT= 0x602
2023-09-01 09:53:14 -04:00
endif
2023-08-06 23:21:46 -07:00
ifneq ( $( filter aarch 64%,$( UNAME_M )) ,)
# Apple M1, M2, etc.
# Raspberry Pi 3, 4, Zero 2 (64-bit)
2023-12-22 23:11:12 +08:00
# Nvidia Jetson
2023-09-03 01:26:59 -04:00
MK_CFLAGS += -mcpu= native
MK_CXXFLAGS += -mcpu= native
2023-12-22 23:11:12 +08:00
JETSON_RELEASE_INFO = $( shell jetson_release)
ifdef JETSON_RELEASE_INFO
ifneq ( $( filter TX2%,$( JETSON_RELEASE_INFO)) ,)
JETSON_EOL_MODULE_DETECT = 1
CC = aarch64-unknown-linux-gnu-gcc
cxx = aarch64-unknown-linux-gnu-g++
endif
endif
2023-08-06 23:21:46 -07:00
endif
ifneq ( $( filter armv 6%,$( UNAME_M )) ,)
# Raspberry Pi 1, Zero
2023-09-03 01:26:59 -04:00
MK_CFLAGS += -mfpu= neon-fp-armv8 -mfp16-format= ieee -mno-unaligned-access
MK_CXXFLAGS += -mfpu= neon-fp-armv8 -mfp16-format= ieee -mno-unaligned-access
2023-08-06 23:21:46 -07:00
endif
ifneq ( $( filter armv 7%,$( UNAME_M )) ,)
# Raspberry Pi 2
2023-09-03 01:26:59 -04:00
MK_CFLAGS += -mfpu= neon-fp-armv8 -mfp16-format= ieee -mno-unaligned-access -funsafe-math-optimizations
MK_CXXFLAGS += -mfpu= neon-fp-armv8 -mfp16-format= ieee -mno-unaligned-access -funsafe-math-optimizations
2023-08-06 23:21:46 -07:00
endif
ifneq ( $( filter armv 8%,$( UNAME_M )) ,)
# Raspberry Pi 3, 4, Zero 2 (32-bit)
2023-09-03 01:26:59 -04:00
MK_CFLAGS += -mfp16-format= ieee -mno-unaligned-access
MK_CXXFLAGS += -mfp16-format= ieee -mno-unaligned-access
2023-08-06 23:21:46 -07:00
endif
2023-03-10 20:40:58 +02:00
ifneq ( $( filter ppc 64%,$( UNAME_M )) ,)
POWER9_M := $( shell grep "POWER9" /proc/cpuinfo)
ifneq ( ,$( findstring POWER9,$( POWER9_M)) )
2023-09-03 01:26:59 -04:00
MK_CFLAGS += -mcpu= power9
MK_CXXFLAGS += -mcpu= power9
2023-03-10 20:40:58 +02:00
endif
endif
2023-06-04 23:34:30 +03:00
2023-11-17 17:11:23 +01:00
ifneq ( $( filter ppc 64le %,$( UNAME_M )) ,)
MK_CFLAGS += -mcpu= powerpc64le
MK_CXXFLAGS += -mcpu= powerpc64le
CUDA_POWER_ARCH = 1
endif
2024-05-20 15:19:21 +08:00
ifneq ( $( filter loongarch 64%,$( UNAME_M )) ,)
MK_CFLAGS += -mlasx
MK_CXXFLAGS += -mlasx
endif
2024-09-12 16:24:31 +05:00
ifneq ( $( filter riscv 64%,$( UNAME_M )) ,)
MK_CFLAGS += -march= rv64gcv -mabi= lp64d
MK_CXXFLAGS += -march= rv64gcv -mabi= lp64d
endif
else # RISC-V CROSS COMPILATION
2023-09-05 15:12:00 -04:00
MK_CFLAGS += -march= rv64gcv -mabi= lp64d
MK_CXXFLAGS += -march= rv64gcv -mabi= lp64d
2023-09-01 18:27:40 +05:00
endif
2024-06-26 18:33:02 +03:00
ifndef GGML_NO_ACCELERATE
2023-09-04 22:26:24 +03:00
# Mac OS - include Accelerate framework.
# `-framework Accelerate` works both with Apple Silicon and Mac Intel
2023-03-10 20:40:58 +02:00
ifeq ( $( UNAME_S) ,Darwin)
2024-11-16 17:58:32 +02:00
MK_CPPFLAGS += -DGGML_USE_ACCELERATE -DGGML_USE_BLAS -DGGML_BLAS_USE_ACCELERATE
MK_CPPFLAGS += -DACCELERATE_NEW_LAPACK
MK_CPPFLAGS += -DACCELERATE_LAPACK_ILP64
MK_LDFLAGS += -framework Accelerate
OBJ_GGML_EXT += ggml/src/ggml-blas/ggml-blas.o
2023-03-10 20:40:58 +02:00
endif
2024-06-26 18:33:02 +03:00
endif # GGML_NO_ACCELERATE
2023-06-04 23:34:30 +03:00
2024-06-26 18:33:02 +03:00
ifndef GGML_NO_OPENMP
2024-06-04 00:14:15 +09:00
MK_CPPFLAGS += -DGGML_USE_OPENMP
MK_CFLAGS += -fopenmp
MK_CXXFLAGS += -fopenmp
2024-06-26 18:33:02 +03:00
endif # GGML_NO_OPENMP
2024-06-04 00:14:15 +09:00
2024-06-26 18:33:02 +03:00
ifdef GGML_OPENBLAS
2024-11-16 17:58:32 +02:00
MK_CPPFLAGS += -DGGML_USE_BLAS $( shell pkg-config --cflags-only-I openblas)
MK_CFLAGS += $( shell pkg-config --cflags-only-other openblas)
MK_LDFLAGS += $( shell pkg-config --libs openblas)
OBJ_GGML_EXT += ggml/src/ggml-blas/ggml-blas.o
2024-06-26 18:33:02 +03:00
endif # GGML_OPENBLAS
2023-06-04 23:34:30 +03:00
2024-06-26 18:33:02 +03:00
ifdef GGML_OPENBLAS64
2024-11-16 17:58:32 +02:00
MK_CPPFLAGS += -DGGML_USE_BLAS $( shell pkg-config --cflags-only-I openblas64)
MK_CFLAGS += $( shell pkg-config --cflags-only-other openblas64)
MK_LDFLAGS += $( shell pkg-config --libs openblas64)
OBJ_GGML_EXT += ggml/src/ggml-blas/ggml-blas.o
2024-06-26 18:33:02 +03:00
endif # GGML_OPENBLAS64
2024-06-13 03:11:35 +02:00
2024-06-26 18:33:02 +03:00
ifdef GGML_BLIS
2024-11-16 17:58:32 +02:00
MK_CPPFLAGS += -DGGML_USE_BLAS -DGGML_BLAS_USE_BLIS -I/usr/local/include/blis -I/usr/include/blis
MK_LDFLAGS += -lblis -L/usr/local/lib
OBJ_GGML_EXT += ggml/src/ggml-blas/ggml-blas.o
2024-06-26 18:33:02 +03:00
endif # GGML_BLIS
2024-06-13 03:11:35 +02:00
2024-07-11 11:49:15 -05:00
ifdef GGML_NVPL
2024-11-16 17:58:32 +02:00
MK_CPPFLAGS += -DGGML_USE_BLAS -DGGML_BLAS_USE_NVPL -DNVPL_ILP64 -I/usr/local/include/nvpl_blas -I/usr/include/nvpl_blas
MK_LDFLAGS += -L/usr/local/lib -lnvpl_blas_core -lnvpl_blas_ilp64_gomp
OBJ_GGML_EXT += ggml/src/ggml-blas/ggml-blas.o
2024-07-11 11:49:15 -05:00
endif # GGML_NVPL
2024-06-26 18:33:02 +03:00
ifndef GGML_NO_LLAMAFILE
2024-11-16 17:58:32 +02:00
MK_CPPFLAGS += -DGGML_USE_LLAMAFILE
OBJ_GGML_EXT += ggml/src/ggml-cpu/llamafile/sgemm.o
2024-04-17 23:58:26 +03:00
endif
2024-10-18 13:34:36 +08:00
ifndef GGML_NO_AMX
MK_CPPFLAGS += -DGGML_USE_AMX
2024-11-29 21:54:58 +01:00
OBJ_GGML_EXT += ggml/src/ggml-cpu/amx/amx.o ggml/src/ggml-cpu/amx/mmq.o
2024-10-18 13:34:36 +08:00
endif
2024-11-29 21:54:58 +01:00
# only necessary for the CPU backend files
MK_CPPFLAGS += -Iggml/src/ggml-cpu
2024-06-26 18:33:02 +03:00
ifdef GGML_RPC
2024-11-16 17:58:32 +02:00
MK_CPPFLAGS += -DGGML_USE_RPC
OBJ_GGML_EXT += ggml/src/ggml-rpc.o
2024-06-26 18:33:02 +03:00
endif # GGML_RPC
2024-06-03 20:03:26 +03:00
2025-02-02 19:31:09 +01:00
OBJ_CUDA_TMPL = $( patsubst %.cu,%.o,$( wildcard ggml/src/ggml-cuda/template-instances/fattn-mma*.cu))
2024-06-26 18:33:02 +03:00
OBJ_CUDA_TMPL += $( patsubst %.cu,%.o,$( wildcard ggml/src/ggml-cuda/template-instances/mmq*.cu))
2024-03-26 01:16:01 +01:00
2024-06-26 18:33:02 +03:00
ifdef GGML_CUDA_FA_ALL_QUANTS
OBJ_CUDA_TMPL += $( patsubst %.cu,%.o,$( wildcard ggml/src/ggml-cuda/template-instances/fattn-vec*.cu))
2024-06-01 08:44:14 +02:00
else
2024-06-26 18:33:02 +03:00
OBJ_CUDA_TMPL += $( patsubst %.cu,%.o,$( wildcard ggml/src/ggml-cuda/template-instances/fattn-vec*q4_0-q4_0.cu))
OBJ_CUDA_TMPL += $( patsubst %.cu,%.o,$( wildcard ggml/src/ggml-cuda/template-instances/fattn-vec*q8_0-q8_0.cu))
OBJ_CUDA_TMPL += $( patsubst %.cu,%.o,$( wildcard ggml/src/ggml-cuda/template-instances/fattn-vec*f16-f16.cu))
endif # GGML_CUDA_FA_ALL_QUANTS
2024-06-01 08:44:14 +02:00
2024-06-26 18:33:02 +03:00
ifdef GGML_CUDA
2024-11-14 18:04:35 +01:00
ifneq ( '' , '$(wildcard /opt/cuda)' )
CUDA_PATH ?= /opt/cuda
2024-07-28 07:41:25 +08:00
else
2024-11-14 18:04:35 +01:00
CUDA_PATH ?= /usr/local/cuda
endif
2024-07-28 07:41:25 +08:00
2024-11-14 18:04:35 +01:00
MK_CPPFLAGS += -DGGML_USE_CUDA -DGGML_CUDA_USE_GRAPHS -I$( CUDA_PATH) /include -I$( CUDA_PATH) /targets/$( UNAME_M) -linux/include
MK_LDFLAGS += -lcuda -lcublas -lculibos -lcudart -lcublasLt -lpthread -ldl -lrt -L$( CUDA_PATH) /lib64 -L/usr/lib64 -L$( CUDA_PATH) /targets/$( UNAME_M) -linux/lib -L$( CUDA_PATH) /lib64/stubs -L/usr/lib/wsl/lib
MK_NVCCFLAGS += -use_fast_math
2024-06-26 18:33:02 +03:00
2024-11-16 17:58:32 +02:00
OBJ_GGML_EXT += ggml/src/ggml-cuda/ggml-cuda.o
OBJ_GGML_EXT += $( patsubst %.cu,%.o,$( wildcard ggml/src/ggml-cuda/*.cu))
OBJ_GGML_EXT += $( OBJ_CUDA_TMPL)
2024-06-26 18:33:02 +03:00
2024-02-19 14:45:41 +02:00
ifdef LLAMA_FATAL_WARNINGS
MK_NVCCFLAGS += -Werror all-warnings
endif # LLAMA_FATAL_WARNINGS
2024-06-26 18:33:02 +03:00
2023-12-22 23:11:12 +08:00
ifndef JETSON_EOL_MODULE_DETECT
MK_NVCCFLAGS += --forward-unknown-to-host-compiler
endif # JETSON_EOL_MODULE_DETECT
2024-06-26 18:33:02 +03:00
2023-12-13 13:04:25 +01:00
ifdef LLAMA_DEBUG
2023-12-13 12:10:10 -05:00
MK_NVCCFLAGS += -lineinfo
2023-12-24 14:34:22 +01:00
endif # LLAMA_DEBUG
2024-06-26 18:33:02 +03:00
ifdef GGML_CUDA_DEBUG
2024-05-27 19:34:40 +02:00
MK_NVCCFLAGS += --device-debug
2024-06-26 18:33:02 +03:00
endif # GGML_CUDA_DEBUG
ifdef GGML_CUDA_NVCC
NVCC = $( CCACHE) $( GGML_CUDA_NVCC)
2023-07-21 18:38:57 +08:00
else
2024-11-14 18:04:35 +01:00
NVCC = $( CCACHE) nvcc
2024-07-28 07:41:25 +08:00
endif # GGML_CUDA_NVCC
2024-06-26 18:33:02 +03:00
2023-07-07 11:25:25 -07:00
ifdef CUDA_DOCKER_ARCH
2023-12-13 12:10:10 -05:00
MK_NVCCFLAGS += -Wno-deprecated-gpu-targets -arch= $( CUDA_DOCKER_ARCH)
else ifndef CUDA_POWER_ARCH
MK_NVCCFLAGS += -arch= native
2023-10-23 23:46:05 +03:00
endif # CUDA_DOCKER_ARCH
2024-06-26 18:33:02 +03:00
ifdef GGML_CUDA_FORCE_MMQ
2023-12-13 12:10:10 -05:00
MK_NVCCFLAGS += -DGGML_CUDA_FORCE_MMQ
2024-06-26 18:33:02 +03:00
endif # GGML_CUDA_FORCE_MMQ
ifdef GGML_CUDA_FORCE_CUBLAS
2024-06-24 17:43:42 +02:00
MK_NVCCFLAGS += -DGGML_CUDA_FORCE_CUBLAS
2024-06-26 18:33:02 +03:00
endif # GGML_CUDA_FORCE_CUBLAS
ifdef GGML_CUDA_F16
2023-12-13 12:10:10 -05:00
MK_NVCCFLAGS += -DGGML_CUDA_F16
2024-06-26 18:33:02 +03:00
endif # GGML_CUDA_F16
ifdef GGML_CUDA_DMMV_F16
2023-12-13 12:10:10 -05:00
MK_NVCCFLAGS += -DGGML_CUDA_F16
2024-06-26 18:33:02 +03:00
endif # GGML_CUDA_DMMV_F16
ifdef GGML_CUDA_PEER_MAX_BATCH_SIZE
MK_NVCCFLAGS += -DGGML_CUDA_PEER_MAX_BATCH_SIZE= $( GGML_CUDA_PEER_MAX_BATCH_SIZE)
2023-09-17 16:37:53 +02:00
else
2023-12-13 12:10:10 -05:00
MK_NVCCFLAGS += -DGGML_CUDA_PEER_MAX_BATCH_SIZE= 128
2024-06-26 18:33:02 +03:00
endif # GGML_CUDA_PEER_MAX_BATCH_SIZE
ifdef GGML_CUDA_NO_PEER_COPY
2024-03-22 14:05:31 +01:00
MK_NVCCFLAGS += -DGGML_CUDA_NO_PEER_COPY
2024-06-26 18:33:02 +03:00
endif # GGML_CUDA_NO_PEER_COPY
ifdef GGML_CUDA_CCBIN
MK_NVCCFLAGS += -ccbin $( GGML_CUDA_CCBIN)
endif # GGML_CUDA_CCBIN
2025-02-22 20:44:34 +01:00
ifdef GGML_CUDA_NO_FA
MK_NVCCFLAGS += -DGGML_CUDA_NO_FA
endif # GGML_CUDA_NO_FA
2024-06-26 18:33:02 +03:00
ifdef GGML_CUDA_FA_ALL_QUANTS
2024-06-01 08:44:14 +02:00
MK_NVCCFLAGS += -DGGML_CUDA_FA_ALL_QUANTS
2024-06-26 18:33:02 +03:00
endif # GGML_CUDA_FA_ALL_QUANTS
2024-03-25 13:50:23 +01:00
2023-12-22 23:11:12 +08:00
ifdef JETSON_EOL_MODULE_DETECT
2024-03-25 13:50:23 +01:00
define NVCC_COMPILE
2024-03-26 01:16:01 +01:00
$( NVCC ) -I. -Icommon -D_XOPEN_SOURCE = 600 -D_GNU_SOURCE -DNDEBUG -DGGML_USE_CUDA -I/usr/local/cuda/include -I/opt/cuda/include -I/usr/local/cuda/targets/aarch64-linux/include -std= c++11 -O3 $( NVCCFLAGS) $( CPPFLAGS) -Xcompiler " $( CUDA_CXXFLAGS) " -c $< -o $@
2024-03-25 13:50:23 +01:00
endef # NVCC_COMPILE
2023-12-22 23:11:12 +08:00
else
2024-03-25 13:50:23 +01:00
define NVCC_COMPILE
2024-02-19 15:54:12 -05:00
$( NVCC ) $( NVCCFLAGS ) $( CPPFLAGS ) -Xcompiler "$(CUDA_CXXFLAGS)" -c $< -o $@
2024-03-25 13:50:23 +01:00
endef # NVCC_COMPILE
2023-12-22 23:11:12 +08:00
endif # JETSON_EOL_MODULE_DETECT
2024-03-25 13:50:23 +01:00
2024-06-26 18:33:02 +03:00
ggml/src/ggml-cuda/%.o : \
ggml /src /ggml -cuda /%.cu \
ggml /include /ggml .h \
ggml /src /ggml -common .h \
ggml /src /ggml -cuda /common .cuh
2024-03-25 13:50:23 +01:00
$( NVCC_COMPILE)
2024-11-14 18:04:35 +01:00
ggml/src/ggml-cuda/ggml-cuda.o : \
ggml /src /ggml -cuda /ggml -cuda .cu \
2024-06-26 18:33:02 +03:00
ggml /include /ggml -cuda .h \
ggml /include /ggml .h \
ggml /include /ggml -backend .h \
ggml /src /ggml -backend -impl .h \
ggml /src /ggml -common .h \
$( wildcard ggml /src /ggml -cuda /*.cuh )
2024-03-25 13:50:23 +01:00
$( NVCC_COMPILE)
2024-06-26 18:33:02 +03:00
endif # GGML_CUDA
2023-06-04 23:34:30 +03:00
2024-06-26 18:33:02 +03:00
ifdef GGML_VULKAN
2024-11-16 17:58:32 +02:00
MK_CPPFLAGS += -DGGML_USE_VULKAN
MK_LDFLAGS += $( shell pkg-config --libs vulkan)
OBJ_GGML_EXT += ggml/src/ggml-vulkan.o ggml/src/ggml-vulkan-shaders.o
2024-01-28 18:03:59 +01:00
2024-06-26 18:33:02 +03:00
ifdef GGML_VULKAN_CHECK_RESULTS
2024-01-28 18:03:59 +01:00
MK_CPPFLAGS += -DGGML_VULKAN_CHECK_RESULTS
endif
2024-06-26 18:33:02 +03:00
ifdef GGML_VULKAN_DEBUG
2024-02-03 18:15:00 +01:00
MK_CPPFLAGS += -DGGML_VULKAN_DEBUG
endif
2024-06-26 18:33:02 +03:00
ifdef GGML_VULKAN_MEMORY_DEBUG
2024-06-16 07:17:31 +02:00
MK_CPPFLAGS += -DGGML_VULKAN_MEMORY_DEBUG
endif
2024-08-14 18:32:53 +02:00
ifdef GGML_VULKAN_PERF
MK_CPPFLAGS += -DGGML_VULKAN_PERF
endif
2024-06-26 18:33:02 +03:00
ifdef GGML_VULKAN_VALIDATE
2024-02-03 18:15:00 +01:00
MK_CPPFLAGS += -DGGML_VULKAN_VALIDATE
endif
2024-06-26 18:33:02 +03:00
ifdef GGML_VULKAN_RUN_TESTS
2024-02-03 18:15:00 +01:00
MK_CPPFLAGS += -DGGML_VULKAN_RUN_TESTS
endif
2024-07-13 13:12:39 -03:00
GLSLC_CMD = glslc
_ggml_vk_genshaders_cmd = $( shell pwd ) /vulkan-shaders-gen
_ggml_vk_header = ggml/src/ggml-vulkan-shaders.hpp
_ggml_vk_source = ggml/src/ggml-vulkan-shaders.cpp
2024-11-19 23:18:17 +01:00
_ggml_vk_input_dir = ggml/src/ggml-vulkan/vulkan-shaders
2024-07-13 13:12:39 -03:00
_ggml_vk_shader_deps = $( echo $( _ggml_vk_input_dir) /*.comp)
2024-11-19 23:18:17 +01:00
ggml/src/ggml-vulkan.o : ggml /src /ggml -vulkan /ggml -vulkan .cpp ggml /include /ggml -vulkan .h $( _ggml_vk_header ) $( _ggml_vk_source )
2024-07-13 13:12:39 -03:00
$( CXX) $( CXXFLAGS) $( shell pkg-config --cflags vulkan) -c $< -o $@
$(_ggml_vk_header) : $( _ggml_vk_source )
$(_ggml_vk_source) : $( _ggml_vk_shader_deps ) vulkan -shaders -gen
$( _ggml_vk_genshaders_cmd) \
--glslc $( GLSLC_CMD) \
--input-dir $( _ggml_vk_input_dir) \
--target-hpp $( _ggml_vk_header) \
--target-cpp $( _ggml_vk_source)
2024-11-19 23:18:17 +01:00
vulkan-shaders-gen : ggml /src /ggml -vulkan /vulkan -shaders /vulkan -shaders -gen .cpp
$( CXX) $( CXXFLAGS) -o $@ $( LDFLAGS) ggml/src/ggml-vulkan/vulkan-shaders/vulkan-shaders-gen.cpp
2024-07-13 13:12:39 -03:00
2024-06-26 18:33:02 +03:00
endif # GGML_VULKAN
2024-01-28 18:03:59 +01:00
2024-11-26 19:27:28 +01:00
ifdef GGML_HIP
2023-12-17 12:23:33 -03:00
ifeq ( $( wildcard /opt /rocm ) ,)
2024-06-26 18:33:02 +03:00
ROCM_PATH ?= /usr
2024-05-17 11:03:03 -04:00
AMDGPU_TARGETS ?= $( shell $( shell which amdgpu-arch))
2023-12-17 12:23:33 -03:00
else
ROCM_PATH ?= /opt/rocm
2024-05-17 11:03:03 -04:00
AMDGPU_TARGETS ?= $( shell $( ROCM_PATH) /llvm/bin/amdgpu-arch)
2023-12-17 12:23:33 -03:00
endif
2024-06-26 18:33:02 +03:00
2024-11-14 18:04:35 +01:00
MK_CPPFLAGS += -DGGML_USE_HIP -DGGML_USE_CUDA
2024-06-26 18:33:02 +03:00
MK_LDFLAGS += -L$( ROCM_PATH) /lib -Wl,-rpath= $( ROCM_PATH) /lib
MK_LDFLAGS += -L$( ROCM_PATH) /lib64 -Wl,-rpath= $( ROCM_PATH) /lib64
MK_LDFLAGS += -lhipblas -lamdhip64 -lrocblas
HIPCC ?= $( CCACHE) $( ROCM_PATH) /bin/hipcc
HIPFLAGS += $( addprefix --offload-arch= ,$( AMDGPU_TARGETS))
2024-07-16 21:20:59 +02:00
ifdef GGML_CUDA_FORCE_MMQ
HIPFLAGS += -DGGML_CUDA_FORCE_MMQ
endif # GGML_CUDA_FORCE_MMQ
ifdef GGML_CUDA_FORCE_CUBLAS
HIPFLAGS += -DGGML_CUDA_FORCE_CUBLAS
endif # GGML_CUDA_FORCE_CUBLAS
2024-06-26 18:33:02 +03:00
ifdef GGML_CUDA_NO_PEER_COPY
HIPFLAGS += -DGGML_CUDA_NO_PEER_COPY
endif # GGML_CUDA_NO_PEER_COPY
2025-02-22 20:44:34 +01:00
ifdef GGML_CUDA_NO_FA
HIPFLAGS += -DGGML_CUDA_NO_FA
endif # GGML_CUDA_NO_FA
2024-11-16 17:58:32 +02:00
OBJ_GGML_EXT += ggml/src/ggml-cuda/ggml-cuda.o
OBJ_GGML_EXT += $( patsubst %.cu,%.o,$( wildcard ggml/src/ggml-cuda/*.cu))
OBJ_GGML_EXT += $( OBJ_CUDA_TMPL)
2024-06-26 18:33:02 +03:00
2024-11-14 18:04:35 +01:00
ggml/src/ggml-cuda/ggml-cuda.o : \
ggml /src /ggml -cuda /ggml -cuda .cu \
2024-06-26 18:33:02 +03:00
ggml /include /ggml -cuda .h \
ggml /include /ggml .h \
ggml /include /ggml -backend .h \
ggml /src /ggml -backend -impl .h \
ggml /src /ggml -common .h \
$( wildcard ggml /src /ggml -cuda /*.cuh )
2023-08-25 12:09:42 +03:00
$( HIPCC) $( CXXFLAGS) $( HIPFLAGS) -x hip -c -o $@ $<
2024-03-25 13:50:23 +01:00
2024-06-26 18:33:02 +03:00
ggml/src/ggml-cuda/%.o : \
ggml /src /ggml -cuda /%.cu \
ggml /include /ggml .h \
ggml /src /ggml -common .h \
ggml /src /ggml -cuda /common .cuh
2024-03-25 13:50:23 +01:00
$( HIPCC) $( CXXFLAGS) $( HIPFLAGS) -x hip -c -o $@ $<
2024-11-26 19:27:28 +01:00
endif # GGML_HIP
2024-03-25 13:50:23 +01:00
2024-11-14 18:04:35 +01:00
ifdef GGML_MUSA
ifeq ( $( wildcard /opt /musa ) ,)
MUSA_PATH ?= /usr/local/musa
else
MUSA_PATH ?= /opt/musa
endif
2025-03-11 01:18:25 +08:00
MUSA_ARCHITECTURES ?= 21; 22; 31
2024-11-14 18:04:35 +01:00
MK_CPPFLAGS += -DGGML_USE_MUSA -DGGML_USE_CUDA
MK_LDFLAGS += -L$( MUSA_PATH) /lib -Wl,-rpath= $( MUSA_PATH) /lib
MK_LDFLAGS += -lmusa -lmusart -lmublas
ifndef GGML_NO_OPENMP
# For Ubuntu Focal
MK_CPPFLAGS += -I/usr/lib/llvm-10/include/openmp
MK_LDFLAGS += -L/usr/lib/llvm-10/lib
# For Ubuntu Jammy
MK_CPPFLAGS += -I/usr/lib/llvm-14/lib/clang/14.0.0/include
MK_LDFLAGS += -L/usr/lib/llvm-14/lib
endif # GGML_NO_OPENMP
CC := $( MUSA_PATH) /bin/clang
CXX := $( MUSA_PATH) /bin/clang++
MCC := $( CCACHE) $( MUSA_PATH) /bin/mcc
2025-02-21 15:46:23 +08:00
MUSAFLAGS = -fsigned-char -x musa -mtgpu
2024-11-27 00:00:41 +08:00
MUSAFLAGS += $( foreach arch,$( subst ; , ,$( MUSA_ARCHITECTURES)) ,--cuda-gpu-arch= mp_$( arch))
2024-11-14 18:04:35 +01:00
ifdef GGML_CUDA_FORCE_MMQ
MUSAFLAGS += -DGGML_CUDA_FORCE_MMQ
endif # GGML_CUDA_FORCE_MMQ
ifdef GGML_CUDA_FORCE_CUBLAS
MUSAFLAGS += -DGGML_CUDA_FORCE_CUBLAS
endif # GGML_CUDA_FORCE_CUBLAS
ifdef GGML_CUDA_F16
MUSAFLAGS += -DGGML_CUDA_F16
endif # GGML_CUDA_F16
ifdef GGML_CUDA_DMMV_F16
MUSAFLAGS += -DGGML_CUDA_F16
endif # GGML_CUDA_DMMV_F16
ifdef GGML_CUDA_PEER_MAX_BATCH_SIZE
MUSAFLAGS += -DGGML_CUDA_PEER_MAX_BATCH_SIZE= $( GGML_CUDA_PEER_MAX_BATCH_SIZE)
else
MUSAFLAGS += -DGGML_CUDA_PEER_MAX_BATCH_SIZE= 128
endif # GGML_CUDA_PEER_MAX_BATCH_SIZE
ifdef GGML_CUDA_NO_PEER_COPY
MUSAFLAGS += -DGGML_CUDA_NO_PEER_COPY
endif # GGML_CUDA_NO_PEER_COPY
2025-02-22 20:44:34 +01:00
ifdef GGML_CUDA_NO_FA
MUSAFLAGS += -DGGML_CUDA_NO_FA
endif # GGML_CUDA_NO_FA
2024-11-14 18:04:35 +01:00
ifdef GGML_CUDA_FA_ALL_QUANTS
MUSAFLAGS += -DGGML_CUDA_FA_ALL_QUANTS
endif # GGML_CUDA_FA_ALL_QUANTS
2024-11-16 17:58:32 +02:00
OBJ_GGML_EXT += ggml/src/ggml-cuda/ggml-cuda.o
OBJ_GGML_EXT += $( patsubst %.cu,%.o,$( wildcard ggml/src/ggml-cuda/*.cu))
OBJ_GGML_EXT += $( OBJ_CUDA_TMPL)
2024-11-14 18:04:35 +01:00
ggml/src/ggml-cuda/ggml-cuda.o : \
ggml /src /ggml -cuda /ggml -cuda .cu \
ggml /include /ggml -cuda .h \
ggml /include /ggml .h \
ggml /include /ggml -backend .h \
ggml /src /ggml -backend -impl .h \
ggml /src /ggml -common .h \
$( wildcard ggml /src /ggml -cuda /*.cuh )
2024-11-27 00:00:41 +08:00
$( MCC) $( CXXFLAGS) $( MUSAFLAGS) -c -o $@ $<
2024-11-14 18:04:35 +01:00
ggml/src/ggml-cuda/%.o : \
ggml /src /ggml -cuda /%.cu \
ggml /include /ggml .h \
ggml /src /ggml -common .h \
ggml /src /ggml -cuda /common .cuh
2024-11-27 00:00:41 +08:00
$( MCC) $( CXXFLAGS) $( MUSAFLAGS) -c -o $@ $<
2024-11-14 18:04:35 +01:00
endif # GGML_MUSA
2024-06-26 18:33:02 +03:00
ifdef GGML_METAL
2024-11-16 17:58:32 +02:00
MK_CPPFLAGS += -DGGML_USE_METAL
MK_LDFLAGS += -framework Foundation -framework Metal -framework MetalKit
OBJ_GGML_EXT += ggml/src/ggml-metal/ggml-metal.o
2024-11-08 21:59:46 +02:00
ifdef GGML_METAL_USE_BF16
MK_CPPFLAGS += -DGGML_METAL_USE_BF16
endif # GGML_METAL_USE_BF16
2024-06-26 18:33:02 +03:00
ifdef GGML_METAL_NDEBUG
2023-09-05 18:21:10 -04:00
MK_CPPFLAGS += -DGGML_METAL_NDEBUG
endif
2024-06-26 18:33:02 +03:00
ifdef GGML_METAL_EMBED_LIBRARY
2024-11-16 17:58:32 +02:00
MK_CPPFLAGS += -DGGML_METAL_EMBED_LIBRARY
OBJ_GGML_EXT += ggml/src/ggml-metal-embed.o
2024-02-19 22:58:36 -11:00
endif
2024-06-26 18:33:02 +03:00
endif # GGML_METAL
2023-06-04 23:34:30 +03:00
2024-06-26 18:33:02 +03:00
ifdef GGML_METAL
2024-11-14 18:04:35 +01:00
ggml/src/ggml-metal/ggml-metal.o : \
ggml /src /ggml -metal /ggml -metal .m \
2024-11-17 11:23:01 +02:00
ggml /src /ggml -metal /ggml -metal -impl .h \
2024-06-26 18:33:02 +03:00
ggml /include /ggml -metal .h \
ggml /include /ggml .h
2023-07-14 11:34:40 -06:00
$( CC) $( CFLAGS) -c $< -o $@
2024-02-19 22:58:36 -11:00
2024-06-26 18:33:02 +03:00
ifdef GGML_METAL_EMBED_LIBRARY
ggml/src/ggml-metal-embed.o : \
2024-11-14 18:04:35 +01:00
ggml /src /ggml -metal /ggml -metal .metal \
2024-11-17 11:23:01 +02:00
ggml /src /ggml -metal /ggml -metal -impl .h \
2024-06-26 18:33:02 +03:00
ggml /src /ggml -common .h
2024-02-19 22:58:36 -11:00
@echo "Embedding Metal library"
2024-11-17 11:23:01 +02:00
@sed -e '/__embed_ggml-common.h__/r ggml/src/ggml-common.h' -e '/__embed_ggml-common.h__/d' < ggml/src/ggml-metal/ggml-metal.metal > ggml/src/ggml-metal/ggml-metal-embed.metal.tmp
@sed -e '/#include "ggml-metal-impl.h"/r ggml/src/ggml-metal/ggml-metal-impl.h' -e '/#include "ggml-metal-impl.h"/d' < ggml/src/ggml-metal/ggml-metal-embed.metal.tmp > ggml/src/ggml-metal/ggml-metal-embed.metal
2024-08-07 18:24:05 +02:00
$( eval TEMP_ASSEMBLY = $( shell mktemp -d))
2024-11-14 18:04:35 +01:00
@echo ".section __DATA, __ggml_metallib" > $( TEMP_ASSEMBLY) /ggml-metal-embed.s
@echo ".globl _ggml_metallib_start" >> $( TEMP_ASSEMBLY) /ggml-metal-embed.s
@echo "_ggml_metallib_start:" >> $( TEMP_ASSEMBLY) /ggml-metal-embed.s
@echo ".incbin \"ggml/src/ggml-metal/ggml-metal-embed.metal\"" >> $( TEMP_ASSEMBLY) /ggml-metal-embed.s
@echo ".globl _ggml_metallib_end" >> $( TEMP_ASSEMBLY) /ggml-metal-embed.s
@echo "_ggml_metallib_end:" >> $( TEMP_ASSEMBLY) /ggml-metal-embed.s
2024-08-07 18:24:05 +02:00
$( CC) $( CFLAGS) -c $( TEMP_ASSEMBLY) /ggml-metal-embed.s -o $@
@rm -f ${ TEMP_ASSEMBLY } /ggml-metal-embed.s
@rmdir ${ TEMP_ASSEMBLY }
2024-02-19 22:58:36 -11:00
endif
2024-06-26 18:33:02 +03:00
endif # GGML_METAL
2023-07-14 11:34:40 -06:00
2024-11-16 17:58:32 +02:00
DIR_GGML = ggml
DIR_LLAMA = src
DIR_COMMON = common
OBJ_GGML = \
$( DIR_GGML) /src/ggml.o \
$( DIR_GGML) /src/ggml-alloc.o \
$( DIR_GGML) /src/ggml-backend.o \
$( DIR_GGML) /src/ggml-backend-reg.o \
2024-11-16 21:35:31 +02:00
$( DIR_GGML) /src/ggml-opt.o \
2024-11-16 17:58:32 +02:00
$( DIR_GGML) /src/ggml-quants.o \
$( DIR_GGML) /src/ggml-threading.o \
$( DIR_GGML) /src/ggml-cpu/ggml-cpu.o \
2024-12-07 13:37:50 +01:00
$( DIR_GGML) /src/ggml-cpu/ggml-cpu_cpp.o \
2024-11-16 17:58:32 +02:00
$( DIR_GGML) /src/ggml-cpu/ggml-cpu-aarch64.o \
2024-12-07 13:37:50 +01:00
$( DIR_GGML) /src/ggml-cpu/ggml-cpu-hbm.o \
2024-11-16 17:58:32 +02:00
$( DIR_GGML) /src/ggml-cpu/ggml-cpu-quants.o \
2024-12-07 13:37:50 +01:00
$( DIR_GGML) /src/ggml-cpu/ggml-cpu-traits.o \
2024-11-16 17:58:32 +02:00
$( OBJ_GGML_EXT)
2024-06-03 20:03:26 +03:00
2024-06-26 18:33:02 +03:00
OBJ_LLAMA = \
2024-11-16 17:58:32 +02:00
$( DIR_LLAMA) /llama.o \
$( DIR_LLAMA) /llama-vocab.o \
$( DIR_LLAMA) /llama-grammar.o \
$( DIR_LLAMA) /llama-sampling.o \
$( DIR_LLAMA) /unicode.o \
$( DIR_LLAMA) /unicode-data.o
2024-04-17 23:58:26 +03:00
2024-06-26 18:33:02 +03:00
OBJ_COMMON = \
2024-11-16 17:58:32 +02:00
$( DIR_COMMON) /common.o \
$( DIR_COMMON) /arg.o \
$( DIR_COMMON) /log.o \
$( DIR_COMMON) /console.o \
$( DIR_COMMON) /ngram-cache.o \
$( DIR_COMMON) /sampling.o \
2024-11-25 09:58:41 +02:00
$( DIR_COMMON) /speculative.o \
2025-01-30 19:13:58 +00:00
$( DIR_COMMON) /chat.o \
2024-11-16 17:58:32 +02:00
$( DIR_COMMON) /build-info.o \
$( DIR_COMMON) /json-schema-to-grammar.o
2024-06-03 20:03:26 +03:00
2024-06-26 18:33:02 +03:00
OBJ_ALL = $( OBJ_GGML) $( OBJ_LLAMA) $( OBJ_COMMON)
2024-06-03 20:03:26 +03:00
2024-06-26 18:33:02 +03:00
LIB_GGML = $( LIB_PRE) ggml$( DSO_EXT)
LIB_GGML_S = $( LIB_PRE) ggml.a
LIB_LLAMA = $( LIB_PRE) llama$( DSO_EXT)
LIB_LLAMA_S = $( LIB_PRE) llama.a
LIB_COMMON = $( LIB_PRE) common$( DSO_EXT)
LIB_COMMON_S = $( LIB_PRE) common.a
LIB_ALL = $( LIB_GGML) $( LIB_LLAMA) $( LIB_COMMON)
LIB_ALL_S = $( LIB_GGML_S) $( LIB_LLAMA_S) $( LIB_COMMON_S)
2024-06-03 20:03:26 +03:00
2023-12-13 12:10:10 -05:00
GF_CC := $( CC)
include scripts/get-flags.mk
2023-09-16 17:55:43 +03:00
2023-12-13 12:10:10 -05:00
# combine build flags with cmdline overrides
2024-02-19 15:54:12 -05:00
override CPPFLAGS : = $( MK_CPPFLAGS ) $( CPPFLAGS )
override CFLAGS : = $( CPPFLAGS ) $( MK_CFLAGS ) $( GF_CFLAGS ) $( CFLAGS )
BASE_CXXFLAGS := $( MK_CXXFLAGS) $( CXXFLAGS)
override CXXFLAGS : = $( BASE_CXXFLAGS ) $( HOST_CXXFLAGS ) $( GF_CXXFLAGS ) $( CPPFLAGS )
2023-12-13 12:10:10 -05:00
override NVCCFLAGS : = $( MK_NVCCFLAGS ) $( NVCCFLAGS )
override LDFLAGS : = $( MK_LDFLAGS ) $( LDFLAGS )
# identify CUDA host compiler
2024-06-26 18:33:02 +03:00
ifdef GGML_CUDA
2023-12-13 12:10:10 -05:00
GF_CC := $( NVCC) $( NVCCFLAGS) 2>/dev/null .c -Xcompiler
include scripts/get-flags.mk
2024-02-18 16:21:52 -05:00
CUDA_CXXFLAGS := $( BASE_CXXFLAGS) $( GF_CXXFLAGS) -Wno-pedantic
2023-12-13 12:10:10 -05:00
endif
2023-09-03 01:26:59 -04:00
2024-03-17 19:12:37 +01:00
ifdef LLAMA_CURL
override CXXFLAGS : = $( CXXFLAGS ) -DLLAMA_USE_CURL
override LDFLAGS : = $( LDFLAGS ) -lcurl
endif
2023-03-10 20:40:58 +02:00
#
# Print build information
#
$(info I llama.cpp build info : )
2023-09-16 17:55:43 +03:00
$(info I UNAME_S : $( UNAME_S ) )
$(info I UNAME_P : $( UNAME_P ) )
$(info I UNAME_M : $( UNAME_M ) )
$(info I CFLAGS : $( CFLAGS ) )
$(info I CXXFLAGS : $( CXXFLAGS ) )
$(info I NVCCFLAGS : $( NVCCFLAGS ) )
$(info I LDFLAGS : $( LDFLAGS ) )
2024-02-03 20:15:13 +01:00
$(info I CC : $( shell $( CC ) --version | head -n 1) )
$(info I CXX : $( shell $( CXX ) --version | head -n 1) )
2024-06-26 18:33:02 +03:00
ifdef GGML_CUDA
2024-02-03 20:15:13 +01:00
$(info I NVCC : $( shell $( NVCC ) --version | tail -n 1) )
2024-02-26 00:46:49 +08:00
CUDA_VERSION := $( shell $( NVCC) --version | grep -oP 'release (\K[0-9]+\.[0-9])' )
2024-02-13 12:38:37 +01:00
ifeq ( $( shell awk -v "v =$( CUDA_VERSION ) " 'BEGIN { print ( v < 11.7) }') ,1)
2024-06-26 18:33:02 +03:00
2024-02-13 12:38:37 +01:00
ifndef CUDA_DOCKER_ARCH
ifndef CUDA_POWER_ARCH
2024-04-11 21:56:29 +02:00
$(error I ERROR : For CUDA versions < 11.7 a target CUDA architecture must be explicitly provided via environment variable CUDA_DOCKER_ARCH , e .g . by running "export CUDA_DOCKER_ARCH =compute_XX " on Unix -like systems , where XX is the minimum compute capability that the code needs to run on . A list with compute capabilities can be found here : https ://developer .nvidia .com /cuda -gpus )
2024-02-13 12:38:37 +01:00
endif # CUDA_POWER_ARCH
endif # CUDA_DOCKER_ARCH
2024-06-26 18:33:02 +03:00
2024-02-13 12:38:37 +01:00
endif # eq ($(shell echo "$(CUDA_VERSION) < 11.7" | bc),1)
2024-06-26 18:33:02 +03:00
endif # GGML_CUDA
2023-03-10 20:40:58 +02:00
$( info )
2024-06-26 18:33:02 +03:00
ifdef DEPRECATE_WARNING
$( info !!! DEPRECATION WARNING !!!)
$( info The following LLAMA_ options are deprecated and will be removed in the future . Use the GGML_ prefix instead )
$( info - LLAMA_CUDA )
$( info - LLAMA_METAL )
$( info - LLAMA_METAL_EMBED_LIBRARY )
$( info - LLAMA_OPENMP )
$( info - LLAMA_RPC )
$( info - LLAMA_SYCL )
$( info - LLAMA_SYCL_F 16)
$( info - LLAMA_OPENBLAS )
$( info - LLAMA_OPENBLAS 64)
$( info - LLAMA_BLIS )
$( info - LLAMA_NO_LLAMAFILE )
$( info - LLAMA_NO_ACCELERATE )
$( info - LLAMA_NO_OPENMP )
$( info - LLAMA_NO_METAL )
2024-07-09 17:11:07 +02:00
$( info - LLAMA_NO_CCACHE )
2024-03-26 01:16:01 +01:00
$( info )
endif
2024-09-15 20:46:12 +03:00
ifdef REMOVE_WARNING
$( info !!! REMOVAL WARNING !!!)
$( info The following LLAMA_ options have been removed and are no longer supported )
2025-02-15 16:40:57 +02:00
$(info - LLAMA_DISABLE_LOGS (https : //github .com /ggml -org /llama .cpp /pull /9418))
$(info - LLAMA_SERVER_VERBOSE (https : //github .com /ggml -org /llama .cpp /pull /9418))
2024-09-15 20:46:12 +03:00
$( info )
endif
2023-03-10 20:40:58 +02:00
#
2024-06-26 18:33:02 +03:00
# Build libraries
2023-03-10 20:40:58 +02:00
#
2024-11-16 17:58:32 +02:00
# Libraries
LIB_GGML = libggml.so
LIB_GGML_S = libggml.a
2024-06-26 18:33:02 +03:00
2024-11-16 17:58:32 +02:00
LIB_LLAMA = libllama.so
LIB_LLAMA_S = libllama.a
2023-03-10 20:40:58 +02:00
2024-11-16 17:58:32 +02:00
LIB_COMMON = libcommon.so
LIB_COMMON_S = libcommon.a
2024-11-14 18:04:35 +01:00
2024-11-16 17:58:32 +02:00
# Targets
BUILD_TARGETS += $( LIB_GGML) $( LIB_GGML_S) $( LIB_LLAMA) $( LIB_LLAMA_S) $( LIB_COMMON) $( LIB_COMMON_S)
2024-11-03 19:34:08 +01:00
2024-11-16 17:58:32 +02:00
# Dependency files
DEP_FILES = $( OBJ_GGML:.o= .d) $( OBJ_LLAMA:.o= .d) $( OBJ_COMMON:.o= .d)
# Default target
all : $( BUILD_TARGETS )
2024-12-07 13:37:50 +01:00
# force c++ build for source file that have same name as c file
2024-11-16 17:58:32 +02:00
# Note: need this exception because `ggml-cpu.c` and `ggml-cpu.cpp` both produce the same obj/dep files
2024-12-07 13:37:50 +01:00
$(DIR_GGML)/%_cpp.o : $( DIR_GGML ) /%.cpp
$( CXX) $( CXXFLAGS) -MMD -c $< -o $@
2024-06-26 18:33:02 +03:00
2024-11-16 17:58:32 +02:00
# Rules for building object files
$(DIR_GGML)/%.o : $( DIR_GGML ) /%.c
$( CC) $( CFLAGS) -MMD -c $< -o $@
2024-07-23 13:10:17 +03:00
2024-11-16 17:58:32 +02:00
$(DIR_GGML)/%.o : $( DIR_GGML ) /%.cpp
$( CXX) $( CXXFLAGS) -MMD -c $< -o $@
2024-07-23 13:10:17 +03:00
2024-11-16 17:58:32 +02:00
$(DIR_LLAMA)/%.o : $( DIR_LLAMA ) /%.cpp
$( CXX) $( CXXFLAGS) -MMD -c $< -o $@
2024-07-23 13:10:17 +03:00
2024-11-16 17:58:32 +02:00
$(DIR_COMMON)/%.o : $( DIR_COMMON ) /%.cpp
$( CXX) $( CXXFLAGS) -MMD -c $< -o $@
# Rules for building libraries
$(LIB_GGML) : $( OBJ_GGML )
2024-06-26 18:33:02 +03:00
$( CXX) $( CXXFLAGS) -shared -fPIC -o $@ $^ $( LDFLAGS)
2024-11-16 17:58:32 +02:00
$(LIB_GGML_S) : $( OBJ_GGML )
ar rcs $( LIB_GGML_S) $^
$(LIB_LLAMA) : $( OBJ_LLAMA ) $( LIB_GGML )
$( CXX) $( CXXFLAGS) -shared -fPIC -o $@ $^ $( LDFLAGS)
$(LIB_LLAMA_S) : $( OBJ_LLAMA )
2024-06-26 18:33:02 +03:00
ar rcs $( LIB_LLAMA_S) $^
2024-11-16 17:58:32 +02:00
$(LIB_COMMON) : $( OBJ_COMMON ) $( LIB_LLAMA ) $( LIB_GGML )
2024-06-26 18:33:02 +03:00
$( CXX) $( CXXFLAGS) -shared -fPIC -o $@ $^ $( LDFLAGS)
2024-11-16 17:58:32 +02:00
$(LIB_COMMON_S) : $( OBJ_COMMON )
2024-06-26 18:33:02 +03:00
ar rcs $( LIB_COMMON_S) $^
2024-02-02 02:18:53 +11:00
2024-11-16 17:58:32 +02:00
# Include dependency files
-include $( DEP_FILES )
2024-12-03 19:38:44 +01:00
# Clean generated server assets
clean-server-assets :
2025-05-02 20:27:13 +02:00
find tools/server -type f -name "*.js.hpp" -delete
find tools/server -type f -name "*.mjs.hpp" -delete
find tools/server -type f -name "*.css.hpp" -delete
find tools/server -type f -name "*.html.hpp" -delete
2024-12-03 19:38:44 +01:00
2024-11-16 17:58:32 +02:00
# Clean rule
2024-12-03 19:38:44 +01:00
clean : clean -server -assets
2024-11-16 17:58:32 +02:00
rm -vrf $( BUILD_TARGETS) $( TEST_TARGETS)
rm -rvf *.a *.dll *.so *.dot
find ggml src common tests examples pocs -type f -name "*.o" -delete
find ggml src common tests examples pocs -type f -name "*.d" -delete
2023-05-01 09:23:47 -07:00
#
# Examples
#
2024-02-05 19:33:00 +01:00
# $< is the first prerequisite, i.e. the source file.
# Explicitly compile this to an object file so that it can be cached with ccache.
# The source file is then filtered out from $^ (the list of all prerequisites) and the object file is added instead.
# Helper function that replaces .c, .cpp, and .cu file endings with .o:
GET_OBJ_FILE = $( patsubst %.c,%.o,$( patsubst %.cpp,%.o,$( patsubst %.cu,%.o,$( 1))))
2025-05-02 20:27:13 +02:00
llama-cli : tools /main /main .cpp \
2024-06-26 18:33:02 +03:00
$( OBJ_ALL )
2024-02-05 19:33:00 +01:00
$( CXX) $( CXXFLAGS) -c $< -o $( call GET_OBJ_FILE, $<)
$( CXX) $( CXXFLAGS) $( filter-out %.h $<,$^) $( call GET_OBJ_FILE, $<) -o $@ $( LDFLAGS)
2023-03-23 05:41:32 -06:00
@echo
2024-06-13 00:41:52 +01:00
@echo '==== Run ./llama-cli -h for help. ===='
2023-03-23 05:41:32 -06:00
@echo
2023-03-10 20:40:58 +02:00
2024-06-26 18:33:02 +03:00
llama-infill : examples /infill /infill .cpp \
$( OBJ_ALL )
2024-02-05 19:33:00 +01:00
$( CXX) $( CXXFLAGS) -c $< -o $( call GET_OBJ_FILE, $<)
$( CXX) $( CXXFLAGS) $( filter-out %.h $<,$^) $( call GET_OBJ_FILE, $<) -o $@ $( LDFLAGS)
2023-10-02 09:42:02 +02:00
2025-05-02 20:27:13 +02:00
llama-run : tools /run /run .cpp \
2024-11-25 16:56:24 -05:00
$( OBJ_ALL )
$( CXX) $( CXXFLAGS) -c $< -o $( call GET_OBJ_FILE, $<)
$( CXX) $( CXXFLAGS) $( filter-out %.h $<,$^) $( call GET_OBJ_FILE, $<) -o $@ $( LDFLAGS)
2024-06-26 18:33:02 +03:00
llama-simple : examples /simple /simple .cpp \
$( OBJ_ALL )
2024-02-05 19:33:00 +01:00
$( CXX) $( CXXFLAGS) -c $< -o $( call GET_OBJ_FILE, $<)
$( CXX) $( CXXFLAGS) $( filter-out %.h $<,$^) $( call GET_OBJ_FILE, $<) -o $@ $( LDFLAGS)
2023-06-16 20:58:09 +02:00
2024-11-01 23:50:59 +01:00
llama-simple-chat : examples /simple -chat /simple -chat .cpp \
$( OBJ_ALL )
$( CXX) $( CXXFLAGS) -c $< -o $( call GET_OBJ_FILE, $<)
$( CXX) $( CXXFLAGS) $( filter-out %.h $<,$^) $( call GET_OBJ_FILE, $<) -o $@ $( LDFLAGS)
2025-05-02 20:27:13 +02:00
llama-tokenize : tools /tokenize /tokenize .cpp \
2024-06-26 18:33:02 +03:00
$( OBJ_ALL )
2024-02-05 19:33:00 +01:00
$( CXX) $( CXXFLAGS) -c $< -o $( call GET_OBJ_FILE, $<)
$( CXX) $( CXXFLAGS) $( filter-out %.h $<,$^) $( call GET_OBJ_FILE, $<) -o $@ $( LDFLAGS)
2023-11-18 14:48:17 -07:00
2024-06-26 18:33:02 +03:00
llama-batched : examples /batched /batched .cpp \
$( OBJ_ALL )
2024-02-05 19:33:00 +01:00
$( CXX) $( CXXFLAGS) -c $< -o $( call GET_OBJ_FILE, $<)
$( CXX) $( CXXFLAGS) $( filter-out %.h $<,$^) $( call GET_OBJ_FILE, $<) -o $@ $( LDFLAGS)
2023-09-28 19:04:36 +03:00
2025-05-02 20:27:13 +02:00
llama-batched-bench : tools /batched -bench /batched -bench .cpp \
2024-06-26 18:33:02 +03:00
$( OBJ_ALL )
2024-02-05 19:33:00 +01:00
$( CXX) $( CXXFLAGS) -c $< -o $( call GET_OBJ_FILE, $<)
$( CXX) $( CXXFLAGS) $( filter-out %.h $<,$^) $( call GET_OBJ_FILE, $<) -o $@ $( LDFLAGS)
2023-10-11 21:25:33 +03:00
2025-05-02 20:27:13 +02:00
llama-quantize : tools /quantize /quantize .cpp \
2024-06-26 18:33:02 +03:00
$( OBJ_ALL )
2024-02-05 19:33:00 +01:00
$( CXX) $( CXXFLAGS) -c $< -o $( call GET_OBJ_FILE, $<)
$( CXX) $( CXXFLAGS) $( filter-out %.h $<,$^) $( call GET_OBJ_FILE, $<) -o $@ $( LDFLAGS)
2023-03-25 20:26:40 +02:00
2025-05-02 20:27:13 +02:00
llama-quantize-stats : tools /quantize -stats /quantize -stats .cpp \
2024-06-26 18:33:02 +03:00
$( OBJ_ALL )
2024-02-05 19:33:00 +01:00
$( CXX) $( CXXFLAGS) -c $< -o $( call GET_OBJ_FILE, $<)
$( CXX) $( CXXFLAGS) $( filter-out %.h $<,$^) $( call GET_OBJ_FILE, $<) -o $@ $( LDFLAGS)
2023-04-08 00:09:18 +02:00
2025-05-02 20:27:13 +02:00
llama-perplexity : tools /perplexity /perplexity .cpp \
2024-06-26 18:33:02 +03:00
$( OBJ_ALL )
2024-02-05 19:33:00 +01:00
$( CXX) $( CXXFLAGS) -c $< -o $( call GET_OBJ_FILE, $<)
$( CXX) $( CXXFLAGS) $( filter-out %.h $<,$^) $( call GET_OBJ_FILE, $<) -o $@ $( LDFLAGS)
2024-01-12 06:59:57 +01:00
2025-05-02 20:27:13 +02:00
llama-imatrix : tools /imatrix /imatrix .cpp \
2024-06-26 18:33:02 +03:00
$( OBJ_ALL )
2024-02-05 19:33:00 +01:00
$( CXX) $( CXXFLAGS) -c $< -o $( call GET_OBJ_FILE, $<)
$( CXX) $( CXXFLAGS) $( filter-out %.h $<,$^) $( call GET_OBJ_FILE, $<) -o $@ $( LDFLAGS)
2023-03-10 20:40:58 +02:00
2024-06-26 18:33:02 +03:00
llama-embedding : examples /embedding /embedding .cpp \
$( OBJ_ALL )
2024-02-05 19:33:00 +01:00
$( CXX) $( CXXFLAGS) -c $< -o $( call GET_OBJ_FILE, $<)
$( CXX) $( CXXFLAGS) $( filter-out %.h $<,$^) $( call GET_OBJ_FILE, $<) -o $@ $( LDFLAGS)
2023-03-28 08:11:09 +02:00
2024-06-26 18:33:02 +03:00
llama-gritlm : examples /gritlm /gritlm .cpp \
$( OBJ_ALL )
2024-03-10 11:56:30 -04:00
$( CXX) $( CXXFLAGS) -c $< -o $( call GET_OBJ_FILE, $<)
$( CXX) $( CXXFLAGS) $( filter-out %.h $<,$^) $( call GET_OBJ_FILE, $<) -o $@ $( LDFLAGS)
2024-06-26 18:33:02 +03:00
llama-save-load-state : examples /save -load -state /save -load -state .cpp \
$( OBJ_ALL )
2024-02-05 19:33:00 +01:00
$( CXX) $( CXXFLAGS) -c $< -o $( call GET_OBJ_FILE, $<)
$( CXX) $( CXXFLAGS) $( filter-out %.h $<,$^) $( call GET_OBJ_FILE, $<) -o $@ $( LDFLAGS)
2023-04-18 21:00:14 +02:00
2024-06-26 18:33:02 +03:00
llama-gguf : examples /gguf /gguf .cpp \
$( OBJ_GGML )
$( CXX) $( CXXFLAGS) -c $< -o $( call GET_OBJ_FILE, $<)
$( CXX) $( CXXFLAGS) $( filter-out %.h $<,$^) $( call GET_OBJ_FILE, $<) -o $@ $( LDFLAGS)
2024-07-07 22:58:43 +10:00
examples/gguf-hash/deps/sha1/sha1.o : \
examples /gguf -hash /deps /sha 1/sha 1.c
$( CC) $( CFLAGS) -Iexamples/gguf-hash/deps -c $< -o $@
examples/gguf-hash/deps/xxhash/xxhash.o : \
examples /gguf -hash /deps /xxhash /xxhash .c
$( CC) $( CFLAGS) -Iexamples/gguf-hash/deps -c $< -o $@
examples/gguf-hash/deps/sha256/sha256.o : \
examples /gguf -hash /deps /sha 256/sha 256.c
$( CC) $( CFLAGS) -Iexamples/gguf-hash/deps -c $< -o $@
llama-gguf-hash : examples /gguf -hash /gguf -hash .cpp examples /gguf -hash /deps /sha 1/sha 1.o examples /gguf -hash /deps /xxhash /xxhash .o examples /gguf -hash /deps /sha 256/sha 256.o \
$( OBJ_ALL )
$( CXX) $( CXXFLAGS) -Iexamples/gguf-hash/deps -c $< -o $( call GET_OBJ_FILE, $<)
$( CXX) $( CXXFLAGS) $( filter-out %.h $<,$^) $( call GET_OBJ_FILE, $<) -o $@ $( LDFLAGS)
2025-05-02 20:27:13 +02:00
llama-gguf-split : tools /gguf -split /gguf -split .cpp \
2024-06-26 18:33:02 +03:00
$( OBJ_ALL )
$( CXX) $( CXXFLAGS) -c $< -o $( call GET_OBJ_FILE, $<)
$( CXX) $( CXXFLAGS) $( filter-out %.h $<,$^) $( call GET_OBJ_FILE, $<) -o $@ $( LDFLAGS)
llama-eval-callback : examples /eval -callback /eval -callback .cpp \
$( OBJ_ALL )
$( CXX) $( CXXFLAGS) -c $< -o $( call GET_OBJ_FILE, $<)
$( CXX) $( CXXFLAGS) $( filter-out %.h $<,$^) $( call GET_OBJ_FILE, $<) -o $@ $( LDFLAGS)
2025-05-02 20:27:13 +02:00
llama-cvector-generator : tools /cvector -generator /cvector -generator .cpp \
2024-06-26 18:33:02 +03:00
$( OBJ_ALL )
$( CXX) $( CXXFLAGS) -c $< -o $( call GET_OBJ_FILE, $<)
$( CXX) $( CXXFLAGS) $( filter-out %.h $<,$^) $( call GET_OBJ_FILE, $<) -o $@ $( LDFLAGS)
llama-convert-llama2c-to-ggml : examples /convert -llama 2c -to -ggml /convert -llama 2c -to -ggml .cpp \
2024-09-15 20:46:12 +03:00
$( OBJ_ALL )
2024-06-26 18:33:02 +03:00
$( CXX) $( CXXFLAGS) -c $< -o $( call GET_OBJ_FILE, $<)
$( CXX) $( CXXFLAGS) $( filter-out %.h $<,$^) $( call GET_OBJ_FILE, $<) -o $@ $( LDFLAGS)
2025-05-02 20:27:13 +02:00
llama-bench : tools /llama -bench /llama -bench .cpp \
2024-06-26 18:33:02 +03:00
$( OBJ_ALL )
$( CXX) $( CXXFLAGS) -c $< -o $( call GET_OBJ_FILE, $<)
$( CXX) $( CXXFLAGS) $( filter-out %.h $<,$^) $( call GET_OBJ_FILE, $<) -o $@ $( LDFLAGS)
2025-05-02 20:27:13 +02:00
llama-export-lora : tools /export -lora /export -lora .cpp \
2024-07-23 23:48:37 +02:00
$( OBJ_ALL )
2024-06-26 18:33:02 +03:00
$( CXX) $( CXXFLAGS) -c $< -o $( call GET_OBJ_FILE, $<)
$( CXX) $( CXXFLAGS) $( filter-out %.h $<,$^) $( call GET_OBJ_FILE, $<) -o $@ $( LDFLAGS)
llama-retrieval : examples /retrieval /retrieval .cpp \
$( OBJ_ALL )
$( CXX) $( CXXFLAGS) -c $< -o $( call GET_OBJ_FILE, $<)
$( CXX) $( CXXFLAGS) $( filter-out %.h $<,$^) $( call GET_OBJ_FILE, $<) -o $@ $( LDFLAGS)
llama-speculative : examples /speculative /speculative .cpp \
$( OBJ_ALL )
$( CXX) $( CXXFLAGS) -c $< -o $( call GET_OBJ_FILE, $<)
$( CXX) $( CXXFLAGS) $( filter-out %.h $<,$^) $( call GET_OBJ_FILE, $<) -o $@ $( LDFLAGS)
llama-parallel : examples /parallel /parallel .cpp \
$( OBJ_ALL )
$( CXX) $( CXXFLAGS) -c $< -o $( call GET_OBJ_FILE, $<)
$( CXX) $( CXXFLAGS) $( filter-out %.h $<,$^) $( call GET_OBJ_FILE, $<) -o $@ $( LDFLAGS)
llama-lookahead : examples /lookahead /lookahead .cpp \
$( OBJ_ALL )
$( CXX) $( CXXFLAGS) -c $< -o $( call GET_OBJ_FILE, $<)
$( CXX) $( CXXFLAGS) $( filter-out %.h $<,$^) $( call GET_OBJ_FILE, $<) -o $@ $( LDFLAGS)
llama-lookup : examples /lookup /lookup .cpp \
$( OBJ_ALL )
$( CXX) $( CXXFLAGS) -c $< -o $( call GET_OBJ_FILE, $<)
$( CXX) $( CXXFLAGS) $( filter-out %.h $<,$^) $( call GET_OBJ_FILE, $<) -o $@ $( LDFLAGS)
llama-lookup-create : examples /lookup /lookup -create .cpp \
$( OBJ_ALL )
$( CXX) $( CXXFLAGS) -c $< -o $( call GET_OBJ_FILE, $<)
$( CXX) $( CXXFLAGS) $( filter-out %.h $<,$^) $( call GET_OBJ_FILE, $<) -o $@ $( LDFLAGS)
llama-lookup-merge : examples /lookup /lookup -merge .cpp \
$( OBJ_ALL )
$( CXX) $( CXXFLAGS) -c $< -o $( call GET_OBJ_FILE, $<)
$( CXX) $( CXXFLAGS) $( filter-out %.h $<,$^) $( call GET_OBJ_FILE, $<) -o $@ $( LDFLAGS)
llama-lookup-stats : examples /lookup /lookup -stats .cpp \
$( OBJ_ALL )
$( CXX) $( CXXFLAGS) -c $< -o $( call GET_OBJ_FILE, $<)
$( CXX) $( CXXFLAGS) $( filter-out %.h $<,$^) $( call GET_OBJ_FILE, $<) -o $@ $( LDFLAGS)
llama-passkey : examples /passkey /passkey .cpp \
$( OBJ_ALL )
$( CXX) $( CXXFLAGS) -c $< -o $( call GET_OBJ_FILE, $<)
$( CXX) $( CXXFLAGS) $( filter-out %.h $<,$^) $( call GET_OBJ_FILE, $<) -o $@ $( LDFLAGS)
llama-gbnf-validator : examples /gbnf -validator /gbnf -validator .cpp \
$( OBJ_ALL )
$( CXX) $( CXXFLAGS) -c $< -o $( call GET_OBJ_FILE, $<)
$( CXX) $( CXXFLAGS) $( filter-out %.h $<,$^) $( call GET_OBJ_FILE, $<) -o $@ $( LDFLAGS)
ifdef GGML_RPC
2025-05-02 20:27:13 +02:00
rpc-server : tools /rpc /rpc -server .cpp \
2024-06-26 18:33:02 +03:00
$( OBJ_GGML )
$( CXX) $( CXXFLAGS) $^ -o $@ $( LDFLAGS)
endif # GGML_RPC
llama-server : \
2025-05-02 20:27:13 +02:00
tools /server /server .cpp \
tools /server /utils .hpp \
tools /server /httplib .h \
tools /server /index .html .hpp \
tools /server /loading .html .hpp \
2025-01-30 19:13:58 +00:00
common /chat .cpp \
2025-02-18 18:03:23 +00:00
common /chat .h \
2025-01-21 13:18:51 +00:00
common /chat -template .hpp \
2024-06-26 18:33:02 +03:00
common /json .hpp \
2025-01-21 13:18:51 +00:00
common /minja .hpp \
2024-06-26 18:33:02 +03:00
$( OBJ_ALL )
2024-02-05 19:33:00 +01:00
$( CXX) $( CXXFLAGS) -c $< -o $( call GET_OBJ_FILE, $<)
2025-05-02 20:27:13 +02:00
$( CXX) $( CXXFLAGS) $( filter-out %.h %.hpp $<,$^) -Itools/server $( call GET_OBJ_FILE, $<) -o $@ $( LDFLAGS) $( LWINSOCK2)
2023-05-27 11:04:14 -06:00
2025-05-02 20:27:13 +02:00
# Portable equivalent of `cd tools/server/public && xxd -i $(notdir $<) ../$(notdir $<).hpp`:
tools/server/%.hpp : tools /server /public /% FORCE Makefile
2024-04-21 18:48:53 +01:00
@( export NAME = $( subst .,_,$( subst -,_,$( notdir $<))) && \
echo "unsigned char $$ {NAME}[] = {" && \
cat $< | od -v -t x1 -An | sed -E 's/([0-9a-fA-F]+)/0x\1, /g' && \
echo "};" && \
echo "unsigned int $$ {NAME}_len = $( shell cat $< | wc -c ) ;" \
) > $@
2024-09-07 20:43:51 +02:00
llama-gen-docs : examples /gen -docs /gen -docs .cpp \
$( OBJ_ALL )
$( CXX) $( CXXFLAGS) -c $< -o $( call GET_OBJ_FILE, $<)
$( CXX) $( CXXFLAGS) $( filter-out %.h $<,$^) $( call GET_OBJ_FILE, $<) -o $@ $( LDFLAGS)
2025-05-02 20:27:13 +02:00
libllava.a : tools /llava /llava .cpp \
tools /llava /llava .h \
tools /llava /clip .cpp \
tools /llava /clip .h \
2024-06-26 18:33:02 +03:00
common /stb_image .h \
common /base 64.hpp \
$( OBJ_ALL )
2023-11-07 19:25:32 +02:00
$( CXX) $( CXXFLAGS) -static -fPIC -c $< -o $@ -Wno-cast-qual
2023-11-06 22:36:23 +01:00
2025-05-02 20:27:13 +02:00
llama-llava-cli : tools /llava /llava -cli .cpp \
tools /llava /llava .cpp \
tools /llava /llava .h \
tools /llava /clip .cpp \
tools /llava /clip .h \
2024-06-26 18:33:02 +03:00
$( OBJ_ALL )
2024-08-09 18:24:30 +03:00
$( CXX) $( CXXFLAGS) $< $( filter-out %.h $<,$^) -o $@ $( LDFLAGS) -Wno-cast-qual
2024-08-09 18:33:53 +08:00
2025-05-02 20:27:13 +02:00
llama-minicpmv-cli : tools /llava /minicpmv -cli .cpp \
tools /llava /llava .cpp \
tools /llava /llava .h \
tools /llava /clip .cpp \
tools /llava /clip .h \
2024-08-09 18:33:53 +08:00
$( OBJ_ALL )
2024-08-09 18:24:30 +03:00
$( CXX) $( CXXFLAGS) $< $( filter-out %.h $<,$^) -o $@ $( LDFLAGS) -Wno-cast-qual
2023-10-12 18:23:18 +03:00
2025-05-02 20:27:13 +02:00
llama-qwen2vl-cli : tools /llava /qwen 2vl -cli .cpp \
tools /llava /llava .cpp \
tools /llava /llava .h \
tools /llava /clip .cpp \
tools /llava /clip .h \
2024-12-14 20:43:46 +08:00
$( OBJ_ALL )
$( CXX) $( CXXFLAGS) $< $( filter-out %.h $<,$^) -o $@ $( LDFLAGS) -Wno-cast-qual
2023-10-11 04:14:05 -07:00
ifeq ( $( UNAME_S ) ,Darwin)
swift : examples /batched .swift
( cd examples/batched.swift; make build)
endif
2023-11-02 02:50:16 -04:00
common/build-info.cpp : $( wildcard .git /index ) scripts /build -info .sh
2024-02-05 19:33:00 +01:00
@sh scripts/build-info.sh " $( CC) " > $@ .tmp
2023-05-01 09:23:47 -07:00
@if ! cmp -s $@ .tmp $@ ; then \
mv $@ .tmp $@ ; \
else \
rm $@ .tmp; \
fi
2023-04-13 09:03:57 -05:00
2024-06-26 18:33:02 +03:00
common/build-info.o : common /build -info .cpp
2023-11-02 02:50:16 -04:00
$( CXX) $( CXXFLAGS) -c $( filter-out %.h,$^) -o $@
2023-03-10 20:40:58 +02:00
#
# Tests
#
2023-07-21 12:09:16 +02:00
tests : $( TEST_TARGETS )
2024-09-07 20:43:51 +02:00
tests/test-arg-parser : tests /test -arg -parser .cpp \
$( OBJ_ALL )
$( CXX) $( CXXFLAGS) -c $< -o $( call GET_OBJ_FILE, $<)
$( CXX) $( CXXFLAGS) $( filter-out %.h $<,$^) $( call GET_OBJ_FILE, $<) -o $@ $( LDFLAGS)
2024-06-26 18:33:02 +03:00
tests/test-llama-grammar : tests /test -llama -grammar .cpp \
2024-07-23 13:10:17 +03:00
$( OBJ_ALL )
2024-02-05 19:33:00 +01:00
$( CXX) $( CXXFLAGS) -c $< -o $( call GET_OBJ_FILE, $<)
$( CXX) $( CXXFLAGS) $( filter-out %.h $<,$^) $( call GET_OBJ_FILE, $<) -o $@ $( LDFLAGS)
2024-09-15 20:46:12 +03:00
tests/test-log : tests /test -log .cpp \
$( OBJ_ALL )
$( CXX) $( CXXFLAGS) -c $< -o $( call GET_OBJ_FILE, $<)
$( CXX) $( CXXFLAGS) $( filter-out %.h $<,$^) $( call GET_OBJ_FILE, $<) -o $@ $( LDFLAGS)
2023-08-17 03:41:01 -04:00
2024-06-26 18:33:02 +03:00
tests/test-grammar-parser : tests /test -grammar -parser .cpp \
$( OBJ_ALL )
2024-02-05 19:33:00 +01:00
$( CXX) $( CXXFLAGS) -c $< -o $( call GET_OBJ_FILE, $<)
$( CXX) $( CXXFLAGS) $( filter-out %.h $<,$^) $( call GET_OBJ_FILE, $<) -o $@ $( LDFLAGS)
2023-08-13 10:00:48 -04:00
2024-06-26 18:33:02 +03:00
tests/test-grammar-integration : tests /test -grammar -integration .cpp \
$( OBJ_ALL )
2024-04-06 10:31:33 -04:00
$( CXX) $( CXXFLAGS) -c $< -o $( call GET_OBJ_FILE, $<)
$( CXX) $( CXXFLAGS) $( filter-out %.h $<,$^) $( call GET_OBJ_FILE, $<) -o $@ $( LDFLAGS)
2024-06-26 18:33:02 +03:00
tests/test-double-float : tests /test -double -float .cpp
2024-02-05 19:33:00 +01:00
$( CXX) $( CXXFLAGS) -c $< -o $( call GET_OBJ_FILE, $<)
$( CXX) $( CXXFLAGS) $( filter-out %.h $<,$^) $( call GET_OBJ_FILE, $<) -o $@ $( LDFLAGS)
2023-07-21 12:09:16 +02:00
2024-06-26 18:33:02 +03:00
tests/test-json-schema-to-grammar : tests /test -json -schema -to -grammar .cpp \
$( OBJ_ALL )
2025-05-02 20:27:13 +02:00
$( CXX) $( CXXFLAGS) -Itools/server -c $< -o $( call GET_OBJ_FILE, $<)
2024-03-21 11:50:43 +00:00
$( CXX) $( CXXFLAGS) $( filter-out %.h $<,$^) $( call GET_OBJ_FILE, $<) -o $@ $( LDFLAGS)
2025-01-30 19:13:58 +00:00
tests/test-chat : tests /test -chat .cpp \
$( OBJ_ALL )
2025-05-02 20:27:13 +02:00
$( CXX) $( CXXFLAGS) -Itools/server -c $< -o $( call GET_OBJ_FILE, $<)
2025-01-30 19:13:58 +00:00
$( CXX) $( CXXFLAGS) $( filter-out %.h $<,$^) $( call GET_OBJ_FILE, $<) -o $@ $( LDFLAGS)
2023-07-21 12:09:16 +02:00
2024-06-26 18:33:02 +03:00
tests/test-opt : tests /test -opt .cpp \
$( OBJ_GGML )
2024-02-05 19:33:00 +01:00
$( CXX) $( CXXFLAGS) -c $< -o $( call GET_OBJ_FILE, $<)
$( CXX) $( CXXFLAGS) $( filter-out %.h $<,$^) $( call GET_OBJ_FILE, $<) -o $@ $( LDFLAGS)
2023-07-21 12:09:16 +02:00
2024-06-26 18:33:02 +03:00
tests/test-quantize-fns : tests /test -quantize -fns .cpp \
$( OBJ_GGML )
2024-02-05 19:33:00 +01:00
$( CXX) $( CXXFLAGS) -c $< -o $( call GET_OBJ_FILE, $<)
$( CXX) $( CXXFLAGS) $( filter-out %.h $<,$^) $( call GET_OBJ_FILE, $<) -o $@ $( LDFLAGS)
2023-07-21 12:09:16 +02:00
2024-06-26 18:33:02 +03:00
tests/test-quantize-perf : tests /test -quantize -perf .cpp \
$( OBJ_GGML )
2024-02-05 19:33:00 +01:00
$( CXX) $( CXXFLAGS) -c $< -o $( call GET_OBJ_FILE, $<)
$( CXX) $( CXXFLAGS) $( filter-out %.h $<,$^) $( call GET_OBJ_FILE, $<) -o $@ $( LDFLAGS)
2023-07-21 12:09:16 +02:00
2024-06-26 18:33:02 +03:00
tests/test-sampling : tests /test -sampling .cpp \
$( OBJ_ALL )
2024-02-05 19:33:00 +01:00
$( CXX) $( CXXFLAGS) -c $< -o $( call GET_OBJ_FILE, $<)
$( CXX) $( CXXFLAGS) $( filter-out %.h $<,$^) $( call GET_OBJ_FILE, $<) -o $@ $( LDFLAGS)
2023-07-21 12:09:16 +02:00
2024-06-26 18:33:02 +03:00
tests/test-tokenizer-0 : tests /test -tokenizer -0.cpp \
$( OBJ_ALL )
2024-02-05 19:33:00 +01:00
$( CXX) $( CXXFLAGS) -c $< -o $( call GET_OBJ_FILE, $<)
$( CXX) $( CXXFLAGS) $( filter-out %.h $<,$^) $( call GET_OBJ_FILE, $<) -o $@ $( LDFLAGS)
2023-08-28 18:38:35 +03:00
2024-06-26 18:33:02 +03:00
tests/test-tokenizer-1-bpe : tests /test -tokenizer -1-bpe .cpp \
$( OBJ_ALL )
2024-02-05 19:33:00 +01:00
$( CXX) $( CXXFLAGS) -c $< -o $( call GET_OBJ_FILE, $<)
$( CXX) $( CXXFLAGS) $( filter-out %.h $<,$^) $( call GET_OBJ_FILE, $<) -o $@ $( LDFLAGS)
2023-10-03 09:16:26 +02:00
2024-06-26 18:33:02 +03:00
tests/test-tokenizer-1-spm : tests /test -tokenizer -1-spm .cpp \
$( OBJ_ALL )
2024-02-05 19:33:00 +01:00
$( CXX) $( CXXFLAGS) -c $< -o $( call GET_OBJ_FILE, $<)
$( CXX) $( CXXFLAGS) $( filter-out %.h $<,$^) $( call GET_OBJ_FILE, $<) -o $@ $( LDFLAGS)
2023-08-30 02:20:26 -04:00
2024-06-26 18:33:02 +03:00
tests/test-rope : tests /test -rope .cpp ggml /src /ggml .o \
$( OBJ_GGML )
2024-02-05 19:33:00 +01:00
$( CXX) $( CXXFLAGS) -c $< -o $( call GET_OBJ_FILE, $<)
$( CXX) $( CXXFLAGS) $( filter-out %.h $<,$^) $( call GET_OBJ_FILE, $<) -o $@ $( LDFLAGS)
2023-11-30 17:23:08 -05:00
2024-06-26 18:33:02 +03:00
tests/test-c.o : tests /test -c .c include /llama .h
2023-08-30 02:20:26 -04:00
$( CC) $( CFLAGS) -c $( filter-out %.h,$^) -o $@
2023-12-07 22:26:54 +02:00
2024-06-26 18:33:02 +03:00
tests/test-backend-ops : tests /test -backend -ops .cpp \
$( OBJ_GGML )
2024-02-05 19:33:00 +01:00
$( CXX) $( CXXFLAGS) -c $< -o $( call GET_OBJ_FILE, $<)
$( CXX) $( CXXFLAGS) $( filter-out %.h $<,$^) $( call GET_OBJ_FILE, $<) -o $@ $( LDFLAGS)
2024-01-17 18:38:39 +02:00
2024-06-26 18:33:02 +03:00
tests/test-model-load-cancel : tests /test -model -load -cancel .cpp tests /get -model .cpp \
$( OBJ_ALL )
2024-02-05 19:33:00 +01:00
$( CXX) $( CXXFLAGS) -c $< -o $( call GET_OBJ_FILE, $<)
$( CXX) $( CXXFLAGS) $( filter-out %.h $<,$^) $( call GET_OBJ_FILE, $<) -o $@ $( LDFLAGS)
2024-01-26 07:18:00 -05:00
2024-06-26 18:33:02 +03:00
tests/test-autorelease : tests /test -autorelease .cpp tests /get -model .cpp \
$( OBJ_ALL )
2024-02-05 19:33:00 +01:00
$( CXX) $( CXXFLAGS) -c $< -o $( call GET_OBJ_FILE, $<)
$( CXX) $( CXXFLAGS) $( filter-out %.h $<,$^) $( call GET_OBJ_FILE, $<) -o $@ $( LDFLAGS)
2024-02-19 09:23:37 +01:00
2024-06-26 18:33:02 +03:00
tests/test-chat-template : tests /test -chat -template .cpp \
$( OBJ_ALL )
2024-02-19 09:23:37 +01:00
$( CXX) $( CXXFLAGS) -c $< -o $( call GET_OBJ_FILE, $<)
$( CXX) $( CXXFLAGS) $( filter-out %.h $<,$^) $( call GET_OBJ_FILE, $<) -o $@ $( LDFLAGS)
2024-06-26 18:33:02 +03:00
#
# PoCs
#
llama-vdot : pocs /vdot /vdot .cpp ggml /src /ggml .o \
$( OBJ_GGML )
$( CXX) $( CXXFLAGS) -c $< -o $( call GET_OBJ_FILE, $<)
$( CXX) $( CXXFLAGS) $( filter-out $<,$^) $( call GET_OBJ_FILE, $<) -o $@ $( LDFLAGS)
llama-q8dot : pocs /vdot /q 8dot .cpp ggml /src /ggml .o \
$( OBJ_GGML )
$( CXX) $( CXXFLAGS) -c $< -o $( call GET_OBJ_FILE, $<)
$( CXX) $( CXXFLAGS) $( filter-out $<,$^) $( call GET_OBJ_FILE, $<) -o $@ $( LDFLAGS)
2024-07-09 11:54:43 -04:00
#
# Deprecated binaries that we want to keep around long enough for people to migrate to the new filenames, then these can be removed.
#
# Mark legacy binary targets as .PHONY so that they are always checked.
2024-12-03 19:38:44 +01:00
.PHONY : FORCE main quantize perplexity embedding server
2024-07-09 11:54:43 -04:00
2024-07-31 15:51:06 -04:00
# Define the object file target
examples/deprecation-warning/deprecation-warning.o : examples /deprecation -warning /deprecation -warning .cpp
$( CXX) $( CXXFLAGS) -c $< -o $@
2024-07-10 12:35:18 -04:00
# NOTE: We currently will always build the deprecation-warning `main` and `server` binaries to help users migrate.
# Eventually we will want to remove these target from building all the time.
2024-07-31 15:51:06 -04:00
main : examples /deprecation -warning /deprecation -warning .o
$( CXX) $( CXXFLAGS) $< -o $@ $( LDFLAGS)
2024-07-10 12:35:18 -04:00
@echo "NOTICE: The 'main' binary is deprecated. Please use 'llama-cli' instead."
2024-07-31 15:51:06 -04:00
server : examples /deprecation -warning /deprecation -warning .o
$( CXX) $( CXXFLAGS) $< -o $@ $( LDFLAGS)
2024-07-10 12:35:18 -04:00
@echo "NOTICE: The 'server' binary is deprecated. Please use 'llama-server' instead."
2024-07-09 11:54:43 -04:00
2024-07-31 15:51:06 -04:00
quantize : examples /deprecation -warning /deprecation -warning .o
2024-07-09 11:54:43 -04:00
ifneq (, $( wildcard quantize ) )
2024-07-31 15:51:06 -04:00
$( CXX ) $( CXXFLAGS ) $< -o $@ $( LDFLAGS )
2024-07-09 11:54:43 -04:00
@echo "#########"
@echo "WARNING : The 'quantize ' binary is deprecated . Please use 'llama -quantize ' instead ."
@echo " Remove the 'quantize' binary to remove this warning."
@echo "#########"
endif
2024-07-31 15:51:06 -04:00
perplexity : examples /deprecation -warning /deprecation -warning .o
2024-07-09 11:54:43 -04:00
ifneq (, $( wildcard perplexity ) )
2024-07-31 15:51:06 -04:00
$( CXX ) $( CXXFLAGS ) $< -o $@ $( LDFLAGS )
2024-07-09 11:54:43 -04:00
@echo "#########"
@echo "WARNING : The 'perplexity ' binary is deprecated . Please use 'llama -perplexity ' instead ."
@echo " Remove the 'perplexity' binary to remove this warning."
@echo "#########"
endif
2024-07-31 15:51:06 -04:00
embedding : examples /deprecation -warning /deprecation -warning .o
2024-07-09 11:54:43 -04:00
ifneq (, $( wildcard embedding ) )
2024-07-31 15:51:06 -04:00
$( CXX ) $( CXXFLAGS ) $< -o $@ $( LDFLAGS )
2024-07-09 11:54:43 -04:00
@echo "#########"
@echo "WARNING : The 'embedding ' binary is deprecated . Please use 'llama -embedding ' instead ."
@echo " Remove the 'embedding' binary to remove this warning."
@echo "#########"
endif