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-01-12 06:59:57 +01:00
main quantize quantize-stats perplexity imatrix embedding vdot q8dot train-text-from-scratch convert-llama2c-to-ggml \
2024-04-11 14:51:07 +02:00
simple batched batched-bench save-load-state server gguf gguf-split eval-callback llama-bench libllava.a llava-cli baby-llama beam-search \
2024-03-25 16:38:22 +09:00
retrieval speculative infill tokenize benchmark-matmult parallel finetune export-lora lookahead lookup passkey gritlm 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 = \
tests/test-llama-grammar tests/test-grammar-parser tests/test-double-float tests/test-grad0 tests/test-opt \
tests/test-quantize-fns tests/test-quantize-perf tests/test-sampling tests/test-tokenizer-0-llama \
2023-12-07 22:26:54 +02:00
tests/test-tokenizer-0-falcon tests/test-tokenizer-1-llama tests/test-tokenizer-1-bpe tests/test-rope \
2024-03-21 11:50:43 +00:00
tests/test-backend-ops tests/test-model-load-cancel tests/test-autorelease \
2024-04-06 10:31:33 -04:00
tests/test-json-schema-to-grammar tests/test-grammar-integration
2023-07-21 12:09:16 +02:00
2023-09-03 11:48:49 +03:00
# Code coverage output files
COV_TARGETS = *.gcno tests/*.gcno *.gcda tests/*.gcda *.gcov tests/*.gcov lcov-report gcovr-report
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
# Mac OS + Arm can report x86_64
# ref: https://github.com/ggerganov/whisper.cpp/issues/66#issuecomment-1282546789
ifeq ( $( UNAME_S ) ,Darwin)
ifndef LLAMA_NO_METAL
LLAMA_METAL := 1
endif
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
2023-05-27 11:04:14 -06:00
default : $( BUILD_TARGETS )
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 \
2023-08-30 12:42:51 +03:00
if [ " $$ test_target" = "tests/test-tokenizer-0-llama" ] ; then \
./$$ test_target $( CURDIR) /models/ggml-vocab-llama.gguf; \
elif [ " $$ test_target" = "tests/test-tokenizer-0-falcon" ] ; then \
2023-10-03 09:16:26 +02:00
./$$ test_target $( CURDIR) /models/ggml-vocab-falcon.gguf; \
2023-09-13 15:19:44 +02:00
elif [ " $$ test_target" = "tests/test-tokenizer-1-llama" ] ; 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
all : $( BUILD_TARGETS ) $( TEST_TARGETS )
2023-09-03 11:48:49 +03:00
coverage : ## Run code coverage
gcov -pb tests/*.cpp
lcov-report : coverage ## Generate lcov report
mkdir -p lcov-report
lcov --capture --directory . --output-file lcov-report/coverage.info
genhtml lcov-report/coverage.info --output-directory lcov-report
gcovr-report : coverage ## Generate gcovr report
mkdir -p gcovr-report
gcovr --root . --html --html-details --output gcovr-report/coverage.html
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
#
2023-03-21 17:29:41 +02:00
# keep standard at C11 and C++11
2024-02-19 13:41:51 +02:00
MK_CPPFLAGS = -I. -Icommon
MK_CFLAGS = -std= c11 -fPIC
MK_CXXFLAGS = -std= c++11 -fPIC
MK_NVCCFLAGS = -std= c++11
2023-09-16 17:55:43 +03:00
2023-06-05 22:56:18 +03:00
# -Ofast tends to produce faster code, but may not be available for some compilers.
2023-06-26 19:43:07 +03:00
ifdef LLAMA_FAST
2023-12-13 12:10:10 -05:00
MK_CFLAGS += -Ofast
HOST_CXXFLAGS += -Ofast
MK_NVCCFLAGS += -O3
2023-06-26 19:43:07 +03:00
else
2023-12-13 12:10:10 -05:00
MK_CFLAGS += -O3
MK_CXXFLAGS += -O3
2024-02-03 20:14:59 +01:00
MK_NVCCFLAGS += -O3
2023-06-26 19:43:07 +03:00
endif
2023-03-10 20:40:58 +02:00
2024-02-05 19:33:00 +01:00
ifndef LLAMA_NO_CCACHE
CCACHE := $( shell which ccache)
ifdef CCACHE
export CCACHE_SLOPPINESS = time_macros
$( info I ccache found , compilation results will be cached . Disable with LLAMA_NO_CCACHE .)
CC := $( CCACHE) $( CC)
CXX := $( CCACHE) $( CXX)
else
$( info I ccache not found . Consider installing it for faster compilation .)
endif # CCACHE
endif # LLAMA_NO_CCACHE
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
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-03-13 18:54:21 +01:00
ifdef LLAMA_SCHED_MAX_COPIES
MK_CPPFLAGS += -DGGML_SCHED_MAX_COPIES= $( LLAMA_SCHED_MAX_COPIES)
endif
2023-05-28 21:01:02 +02:00
ifdef LLAMA_DEBUG
2023-09-03 01:26:59 -04:00
MK_CFLAGS += -O0 -g
MK_CXXFLAGS += -O0 -g
MK_LDFLAGS += -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
2023-09-03 01:26:59 -04:00
MK_CPPFLAGS += -DNDEBUG
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
2023-07-04 15:38:04 +03:00
ifdef LLAMA_SERVER_VERBOSE
2023-09-03 01:26:59 -04:00
MK_CPPFLAGS += -DSERVER_VERBOSE= $( LLAMA_SERVER_VERBOSE)
2023-07-04 15:38:04 +03:00
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
ifdef LLAMA_CODE_COVERAGE
2023-09-05 15:12:00 -04:00
MK_CXXFLAGS += -fprofile-arcs -ftest-coverage -dumpbase ''
2023-09-03 11:48:49 +03:00
endif
2023-09-01 11:07:06 +02:00
ifdef LLAMA_DISABLE_LOGS
2023-09-05 15:12:00 -04:00
MK_CPPFLAGS += -DLOG_DISABLE_LOGS
2023-09-01 11:07:06 +02:00
endif # LLAMA_DISABLE_LOGS
2023-03-28 16:48:20 +00:00
# warnings
2023-09-28 17:41:44 -04: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
ifdef LLAMA_PERF
2023-09-03 01:26:59 -04:00
MK_CPPFLAGS += -DGGML_PERF
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
ifndef RISCV
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
# 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
# https://github.com/ggerganov/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
2023-09-01 18:27:40 +05:00
else
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
2023-06-26 19:43:07 +03:00
ifdef LLAMA_QKK_64
2023-09-03 01:26:59 -04:00
MK_CPPFLAGS += -DGGML_QKK_64
2023-06-26 19:43:07 +03:00
endif
2023-06-07 10:59:52 +03:00
2023-03-11 12:26:16 +02:00
ifndef LLAMA_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)
2023-09-03 01:26:59 -04:00
MK_CPPFLAGS += -DGGML_USE_ACCELERATE
2023-09-27 11:34:32 -04:00
MK_CPPFLAGS += -DACCELERATE_NEW_LAPACK
MK_CPPFLAGS += -DACCELERATE_LAPACK_ILP64
2023-09-03 01:26:59 -04:00
MK_LDFLAGS += -framework Accelerate
2023-03-10 20:40:58 +02:00
endif
2023-06-04 23:34:30 +03:00
endif # LLAMA_NO_ACCELERATE
2023-07-10 11:49:56 -04:00
ifdef LLAMA_MPI
2023-09-03 01:26:59 -04:00
MK_CPPFLAGS += -DGGML_USE_MPI
MK_CFLAGS += -Wno-cast-qual
MK_CXXFLAGS += -Wno-cast-qual
2023-10-29 18:32:28 +02:00
OBJS += ggml-mpi.o
2023-07-10 11:49:56 -04:00
endif # LLAMA_MPI
2023-03-11 12:26:16 +02:00
ifdef LLAMA_OPENBLAS
2023-09-03 01:26:59 -04:00
MK_CPPFLAGS += -DGGML_USE_OPENBLAS $( shell pkg-config --cflags-only-I openblas)
MK_CFLAGS += $( shell pkg-config --cflags-only-other openblas)
MK_LDFLAGS += $( shell pkg-config --libs openblas)
2023-06-04 23:34:30 +03:00
endif # LLAMA_OPENBLAS
2024-04-17 23:58:26 +03:00
# TODO: temporary disable until MoE is fixed
# https://github.com/ggerganov/llama.cpp/pull/6716
LLAMA_NO_LLAMAFILE := 1
ifndef LLAMA_NO_LLAMAFILE
MK_CPPFLAGS += -DGGML_USE_LLAMAFILE
OBJS += sgemm.o
endif
2023-05-20 23:58:31 +09:00
ifdef LLAMA_BLIS
2023-09-03 01:26:59 -04:00
MK_CPPFLAGS += -DGGML_USE_OPENBLAS -I/usr/local/include/blis -I/usr/include/blis
MK_LDFLAGS += -lblis -L/usr/local/lib
2023-06-04 23:34:30 +03:00
endif # LLAMA_BLIS
2023-04-19 11:22:45 +02:00
ifdef LLAMA_CUBLAS
2024-03-26 01:16:01 +01:00
# LLAMA_CUBLAS is deprecated and will be removed in the future
LLAMA_CUDA := 1
endif
ifdef LLAMA_CUDA
2024-02-27 10:03:06 +08:00
ifneq ( '' , '$(wildcard /opt/cuda)' )
CUDA_PATH ?= /opt/cuda
else
CUDA_PATH ?= /usr/local/cuda
endif
2024-03-26 01:16:01 +01:00
MK_CPPFLAGS += -DGGML_USE_CUDA -I$( CUDA_PATH) /include -I$( CUDA_PATH) /targets/$( UNAME_M) -linux/include
2024-02-27 10:03:06 +08:00
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/usr/lib/wsl/lib
2023-10-29 18:32:28 +02:00
OBJS += ggml-cuda.o
2024-03-25 13:50:23 +01:00
OBJS += $( patsubst %.cu,%.o,$( wildcard ggml-cuda/*.cu))
2024-02-03 20:14:59 +01:00
MK_NVCCFLAGS += -use_fast_math
2024-02-19 14:45:41 +02:00
ifdef LLAMA_FATAL_WARNINGS
MK_NVCCFLAGS += -Werror all-warnings
endif # LLAMA_FATAL_WARNINGS
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
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
2023-07-21 18:38:57 +08:00
ifdef LLAMA_CUDA_NVCC
2024-02-05 19:33:00 +01:00
NVCC = $( CCACHE) $( LLAMA_CUDA_NVCC)
2023-07-21 18:38:57 +08:00
else
2024-02-05 19:33:00 +01:00
NVCC = $( CCACHE) nvcc
2023-07-21 18:38:57 +08:00
endif #LLAMA_CUDA_NVCC
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
2023-07-05 14:19:42 +02:00
ifdef LLAMA_CUDA_FORCE_DMMV
2023-12-13 12:10:10 -05:00
MK_NVCCFLAGS += -DGGML_CUDA_FORCE_DMMV
2023-07-05 14:19:42 +02:00
endif # LLAMA_CUDA_FORCE_DMMV
2023-10-27 17:01:23 +03:00
ifdef LLAMA_CUDA_FORCE_MMQ
2023-12-13 12:10:10 -05:00
MK_NVCCFLAGS += -DGGML_CUDA_FORCE_MMQ
2023-10-27 17:01:23 +03:00
endif # LLAMA_CUDA_FORCE_MMQ
2023-05-25 23:07:29 +02:00
ifdef LLAMA_CUDA_DMMV_X
2023-12-13 12:10:10 -05:00
MK_NVCCFLAGS += -DGGML_CUDA_DMMV_X= $( LLAMA_CUDA_DMMV_X)
2023-05-25 23:07:29 +02:00
else
2023-12-13 12:10:10 -05:00
MK_NVCCFLAGS += -DGGML_CUDA_DMMV_X= 32
2023-05-25 23:07:29 +02:00
endif # LLAMA_CUDA_DMMV_X
2023-07-05 14:19:42 +02:00
ifdef LLAMA_CUDA_MMV_Y
2023-12-13 12:10:10 -05:00
MK_NVCCFLAGS += -DGGML_CUDA_MMV_Y= $( LLAMA_CUDA_MMV_Y)
2023-07-05 14:19:42 +02:00
else ifdef LLAMA_CUDA_DMMV_Y
2023-12-13 12:10:10 -05:00
MK_NVCCFLAGS += -DGGML_CUDA_MMV_Y= $( LLAMA_CUDA_DMMV_Y) # for backwards compatibility
2023-05-25 23:07:29 +02:00
else
2023-12-13 12:10:10 -05:00
MK_NVCCFLAGS += -DGGML_CUDA_MMV_Y= 1
2023-07-05 14:19:42 +02:00
endif # LLAMA_CUDA_MMV_Y
2023-07-29 23:04:44 +02:00
ifdef LLAMA_CUDA_F16
2023-12-13 12:10:10 -05:00
MK_NVCCFLAGS += -DGGML_CUDA_F16
2023-07-29 23:04:44 +02:00
endif # LLAMA_CUDA_F16
2023-06-19 10:23:56 +02:00
ifdef LLAMA_CUDA_DMMV_F16
2023-12-13 12:10:10 -05:00
MK_NVCCFLAGS += -DGGML_CUDA_F16
2023-06-19 10:23:56 +02:00
endif # LLAMA_CUDA_DMMV_F16
2023-06-16 20:08:44 +03:00
ifdef LLAMA_CUDA_KQUANTS_ITER
2023-12-13 12:10:10 -05:00
MK_NVCCFLAGS += -DK_QUANTS_PER_ITERATION= $( LLAMA_CUDA_KQUANTS_ITER)
2023-06-16 20:08:44 +03:00
else
2023-12-13 12:10:10 -05:00
MK_NVCCFLAGS += -DK_QUANTS_PER_ITERATION= 2
2023-06-16 20:08:44 +03:00
endif
2023-09-17 16:37:53 +02:00
ifdef LLAMA_CUDA_PEER_MAX_BATCH_SIZE
2023-12-13 12:10:10 -05:00
MK_NVCCFLAGS += -DGGML_CUDA_PEER_MAX_BATCH_SIZE= $( LLAMA_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
2023-09-17 16:37:53 +02:00
endif # LLAMA_CUDA_PEER_MAX_BATCH_SIZE
2024-03-22 14:05:31 +01:00
ifdef LLAMA_CUDA_NO_PEER_COPY
MK_NVCCFLAGS += -DGGML_CUDA_NO_PEER_COPY
endif # LLAMA_CUDA_NO_PEER_COPY
2023-07-21 18:38:57 +08:00
ifdef LLAMA_CUDA_CCBIN
2023-12-13 12:10:10 -05:00
MK_NVCCFLAGS += -ccbin $( LLAMA_CUDA_CCBIN)
2023-07-21 18:38:57 +08:00
endif
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
ggml-cuda/%.o : ggml -cuda /%.cu ggml -cuda /%.cuh ggml .h ggml -common .h ggml -cuda /common .cuh
$( NVCC_COMPILE)
ggml-cuda.o : ggml -cuda .cu ggml -cuda .h ggml .h ggml -backend .h ggml -backend -impl .h ggml -common .h $( wildcard ggml -cuda /*.cuh )
$( NVCC_COMPILE)
2024-03-26 01:16:01 +01:00
endif # LLAMA_CUDA
2023-06-04 23:34:30 +03:00
2023-04-28 16:57:16 +02:00
ifdef LLAMA_CLBLAST
2023-09-03 01:26:59 -04:00
MK_CPPFLAGS += -DGGML_USE_CLBLAST $( shell pkg-config --cflags-only-I clblast OpenCL)
MK_CFLAGS += $( shell pkg-config --cflags-only-other clblast OpenCL)
MK_CXXFLAGS += $( shell pkg-config --cflags-only-other clblast OpenCL)
2023-07-23 07:52:08 -04:00
2023-05-05 08:18:21 -04:00
# Mac provides OpenCL as a framework
ifeq ( $( UNAME_S) ,Darwin)
2023-09-03 01:26:59 -04:00
MK_LDFLAGS += -lclblast -framework OpenCL
2023-05-05 08:18:21 -04:00
else
2023-09-03 01:26:59 -04:00
MK_LDFLAGS += $( shell pkg-config --libs clblast OpenCL)
2023-05-05 08:18:21 -04:00
endif
2023-04-28 16:57:16 +02:00
OBJS += ggml-opencl.o
2023-06-04 23:34:30 +03:00
2023-05-22 23:33:24 +02:00
ggml-opencl.o : ggml -opencl .cpp ggml -opencl .h
$( CXX) $( CXXFLAGS) -c $< -o $@
2023-06-04 23:34:30 +03:00
endif # LLAMA_CLBLAST
2024-01-28 18:03:59 +01:00
ifdef LLAMA_VULKAN
MK_CPPFLAGS += -DGGML_USE_VULKAN
MK_LDFLAGS += -lvulkan
OBJS += ggml-vulkan.o
ifdef LLAMA_VULKAN_CHECK_RESULTS
MK_CPPFLAGS += -DGGML_VULKAN_CHECK_RESULTS
endif
2024-02-03 18:15:00 +01:00
ifdef LLAMA_VULKAN_DEBUG
MK_CPPFLAGS += -DGGML_VULKAN_DEBUG
endif
ifdef LLAMA_VULKAN_VALIDATE
MK_CPPFLAGS += -DGGML_VULKAN_VALIDATE
endif
ifdef LLAMA_VULKAN_RUN_TESTS
MK_CPPFLAGS += -DGGML_VULKAN_RUN_TESTS
endif
2024-01-28 18:03:59 +01:00
ggml-vulkan.o : ggml -vulkan .cpp ggml -vulkan .h
$( CXX) $( CXXFLAGS) -c $< -o $@
endif # LLAMA_VULKAN
2023-08-25 12:09:42 +03:00
ifdef LLAMA_HIPBLAS
2023-12-17 12:23:33 -03:00
ifeq ( $( wildcard /opt /rocm ) ,)
ROCM_PATH ?= /usr
GPU_TARGETS ?= $( shell $( shell which amdgpu-arch))
else
ROCM_PATH ?= /opt/rocm
GPU_TARGETS ?= $( shell $( ROCM_PATH) /llvm/bin/amdgpu-arch)
endif
2024-02-05 19:33:00 +01:00
HIPCC ?= $( CCACHE) $( ROCM_PATH) /bin/hipcc
2023-08-25 12:09:42 +03:00
LLAMA_CUDA_DMMV_X ?= 32
LLAMA_CUDA_MMV_Y ?= 1
LLAMA_CUDA_KQUANTS_ITER ?= 2
2024-03-26 01:16:01 +01:00
MK_CPPFLAGS += -DGGML_USE_HIPBLAS -DGGML_USE_CUDA
2023-12-22 09:03:25 +01:00
ifdef LLAMA_HIP_UMA
MK_CPPFLAGS += -DGGML_HIP_UMA
endif # LLAMA_HIP_UMA
2023-09-03 01:26:59 -04:00
MK_LDFLAGS += -L$( ROCM_PATH) /lib -Wl,-rpath= $( ROCM_PATH) /lib
MK_LDFLAGS += -lhipblas -lamdhip64 -lrocblas
2023-08-25 12:09:42 +03:00
HIPFLAGS += $( addprefix --offload-arch= ,$( GPU_TARGETS))
HIPFLAGS += -DGGML_CUDA_DMMV_X= $( LLAMA_CUDA_DMMV_X)
HIPFLAGS += -DGGML_CUDA_MMV_Y= $( LLAMA_CUDA_MMV_Y)
HIPFLAGS += -DK_QUANTS_PER_ITERATION= $( LLAMA_CUDA_KQUANTS_ITER)
ifdef LLAMA_CUDA_FORCE_DMMV
HIPFLAGS += -DGGML_CUDA_FORCE_DMMV
endif # LLAMA_CUDA_FORCE_DMMV
2024-03-22 14:05:31 +01:00
ifdef LLAMA_CUDA_NO_PEER_COPY
HIPFLAGS += -DGGML_CUDA_NO_PEER_COPY
endif # LLAMA_CUDA_NO_PEER_COPY
2023-08-25 12:09:42 +03:00
OBJS += ggml-cuda.o
2024-03-25 13:50:23 +01:00
OBJS += $( patsubst %.cu,%.o,$( wildcard ggml-cuda/*.cu))
2024-03-27 15:02:49 +02:00
2024-03-25 13:50:23 +01:00
ggml-cuda.o : ggml -cuda .cu ggml -cuda .h ggml .h ggml -backend .h ggml -backend -impl .h ggml -common .h $( wildcard 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
ggml-cuda/%.o : ggml -cuda /%.cu ggml -cuda /%.cuh ggml .h ggml -common .h ggml -cuda /common .cuh
$( HIPCC) $( CXXFLAGS) $( HIPFLAGS) -x hip -c -o $@ $<
2023-08-25 12:09:42 +03:00
endif # LLAMA_HIPBLAS
2023-06-04 23:34:30 +03:00
ifdef LLAMA_METAL
2023-09-05 15:12:00 -04:00
MK_CPPFLAGS += -DGGML_USE_METAL
2023-09-03 01:26:59 -04:00
MK_LDFLAGS += -framework Foundation -framework Metal -framework MetalKit
OBJS += ggml-metal.o
2023-09-05 18:21:10 -04:00
ifdef LLAMA_METAL_NDEBUG
MK_CPPFLAGS += -DGGML_METAL_NDEBUG
endif
2024-02-19 22:58:36 -11:00
ifdef LLAMA_METAL_EMBED_LIBRARY
MK_CPPFLAGS += -DGGML_METAL_EMBED_LIBRARY
OBJS += ggml-metal-embed.o
endif
2023-06-04 23:34:30 +03:00
endif # LLAMA_METAL
2023-07-14 11:34:40 -06:00
ifdef LLAMA_METAL
2024-03-15 11:36:50 +02:00
ggml-metal.o : ggml -metal .m ggml -metal .h ggml .h
2023-07-14 11:34:40 -06:00
$( CC) $( CFLAGS) -c $< -o $@
2024-02-19 22:58:36 -11:00
ifdef LLAMA_METAL_EMBED_LIBRARY
2024-03-14 11:55:23 +02:00
ggml-metal-embed.o : ggml -metal .metal ggml -common .h
2024-02-19 22:58:36 -11:00
@echo "Embedding Metal library"
2024-03-14 11:55:23 +02:00
@sed -e '/#include "ggml-common.h"/r ggml-common.h' -e '/#include "ggml-common.h"/d' < ggml-metal.metal > ggml-metal-embed.metal
2024-02-19 22:58:36 -11:00
$( eval TEMP_ASSEMBLY = $( shell mktemp))
2024-03-14 11:55:23 +02:00
@echo ".section __DATA, __ggml_metallib" > $( TEMP_ASSEMBLY)
@echo ".globl _ggml_metallib_start" >> $( TEMP_ASSEMBLY)
@echo "_ggml_metallib_start:" >> $( TEMP_ASSEMBLY)
@echo ".incbin \"ggml-metal-embed.metal\"" >> $( TEMP_ASSEMBLY)
@echo ".globl _ggml_metallib_end" >> $( TEMP_ASSEMBLY)
@echo "_ggml_metallib_end:" >> $( TEMP_ASSEMBLY)
2024-02-19 22:58:36 -11:00
@$( AS) $( TEMP_ASSEMBLY) -o $@
@rm -f ${ TEMP_ASSEMBLY }
endif
2023-07-14 11:34:40 -06:00
endif # LLAMA_METAL
ifdef LLAMA_MPI
ggml-mpi.o : ggml -mpi .c ggml -mpi .h
$( CC) $( CFLAGS) -c $< -o $@
endif # LLAMA_MPI
2024-04-17 23:58:26 +03:00
ifndef LLAMA_NO_LLAMAFILE
sgemm.o : sgemm .cpp sgemm .h ggml .h
$( CXX) $( CXXFLAGS) -c $< -o $@
endif
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-03-26 01:16:01 +01:00
ifdef LLAMA_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-03-26 01:16:01 +01:00
ifdef LLAMA_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)
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
endif # eq ($(shell echo "$(CUDA_VERSION) < 11.7" | bc),1)
2024-03-26 01:16:01 +01:00
endif # LLAMA_CUDA
2023-03-10 20:40:58 +02:00
$( info )
2024-03-26 01:16:01 +01:00
ifdef LLAMA_CUBLAS
$( info !!!!)
$( info LLAMA_CUBLAS is deprecated and will be removed in the future . Use LLAMA_CUDA instead .)
$( info !!!!)
$( info )
endif
2023-03-10 20:40:58 +02:00
#
# Build library
#
2023-06-07 10:59:52 +03:00
ggml.o : ggml .c ggml .h ggml -cuda .h
2023-04-14 19:39:48 +00:00
$( CC) $( CFLAGS) -c $< -o $@
2023-03-10 20:40:58 +02:00
2023-07-30 15:58:01 +02:00
ggml-alloc.o : ggml -alloc .c ggml .h ggml -alloc .h
$( CC) $( CFLAGS) -c $< -o $@
2023-10-08 20:19:14 +03:00
ggml-backend.o : ggml -backend .c ggml .h ggml -backend .h
$( CC) $( CFLAGS) -c $< -o $@
2023-07-30 15:58:01 +02:00
2024-03-09 12:47:57 +02:00
ggml-quants.o : ggml -quants .c ggml .h ggml -quants .h ggml -common .h
2023-10-29 18:32:28 +02:00
$( CC) $( CFLAGS) -c $< -o $@
2024-03-11 17:47:47 +02:00
unicode.o : unicode .cpp unicode .h
$( CXX) $( CXXFLAGS) -c $< -o $@
2023-10-08 20:19:14 +03:00
2024-03-26 17:46:21 -04:00
unicode-data.o : unicode -data .cpp unicode -data .h
$( CXX) $( CXXFLAGS) -c $< -o $@
2024-04-17 23:58:26 +03:00
OBJS += ggml-alloc.o ggml-backend.o ggml-quants.o unicode.o unicode-data.o
2024-03-11 17:47:47 +02:00
llama.o : llama .cpp unicode .h ggml .h ggml -alloc .h ggml -backend .h ggml -cuda .h ggml -metal .h llama .h
2023-04-14 19:39:48 +00:00
$( CXX) $( CXXFLAGS) -c $< -o $@
2023-03-22 07:32:36 +02:00
2024-04-21 18:36:45 +03:00
COMMON_H_DEPS = common/common.h common/sampling.h common/log.h llama.h
2024-04-15 18:35:21 +01:00
COMMON_DEPS = common.o sampling.o grammar-parser.o build-info.o json-schema-to-grammar.o
2023-10-11 13:35:46 -06:00
2023-11-02 02:50:16 -04:00
common.o : common /common .cpp $( COMMON_H_DEPS )
2023-10-11 13:35:46 -06:00
$( CXX) $( CXXFLAGS) -c $< -o $@
sampling.o : common /sampling .cpp $( COMMON_H_DEPS )
2023-04-14 19:39:48 +00:00
$( CXX) $( CXXFLAGS) -c $< -o $@
2023-03-10 20:40:58 +02:00
2023-08-21 23:07:43 +03:00
console.o : common /console .cpp common /console .h
2023-08-04 08:20:12 -07:00
$( CXX) $( CXXFLAGS) -c $< -o $@
2023-08-21 23:07:43 +03:00
grammar-parser.o : common /grammar -parser .cpp common /grammar -parser .h
2023-07-23 23:58:10 -04:00
$( CXX) $( CXXFLAGS) -c $< -o $@
2024-03-21 11:50:43 +00:00
json-schema-to-grammar.o : common /json -schema -to -grammar .cpp common /json -schema -to -grammar .h
$( CXX) $( CXXFLAGS) -c $< -o $@
2023-09-28 20:40:11 +02:00
train.o : common /train .cpp common /train .h
$( CXX) $( CXXFLAGS) -c $< -o $@
2024-03-23 01:24:36 +01:00
ngram-cache.o : common /ngram -cache .cpp common /ngram -cache .h
$( CXX) $( CXXFLAGS) -c $< -o $@
2023-06-07 10:59:52 +03:00
libllama.so : llama .o ggml .o $( OBJS )
2023-05-01 09:23:47 -07:00
$( CXX) $( CXXFLAGS) -shared -fPIC -o $@ $^ $( LDFLAGS)
2023-03-10 20:40:58 +02:00
2024-02-02 02:18:53 +11:00
libllama.a : llama .o ggml .o $( OBJS ) $( COMMON_DEPS )
ar rcs libllama.a llama.o ggml.o $( OBJS) $( COMMON_DEPS)
2023-05-01 09:23:47 -07:00
clean :
2024-03-23 01:24:36 +01:00
rm -vrf *.o tests/*.o *.so *.a *.dll benchmark-matmult lookup-create lookup-merge lookup-stats common/build-info.cpp *.dot $( COV_TARGETS) $( BUILD_TARGETS) $( TEST_TARGETS)
2024-03-25 13:50:23 +01:00
rm -vrf ggml-cuda/*.o
2024-02-05 19:33:00 +01:00
find examples pocs -type f -name "*.o" -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))))
2023-11-02 02:50:16 -04:00
main : examples /main /main .cpp ggml .o llama .o $( COMMON_DEPS ) console .o grammar -parser .o $( OBJS )
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
@echo '==== Run ./main -h for help. ===='
@echo
2023-03-10 20:40:58 +02:00
2023-11-02 02:50:16 -04:00
infill : examples /infill /infill .cpp ggml .o llama .o $( COMMON_DEPS ) console .o grammar -parser .o $( OBJS )
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
2023-11-02 02:50:16 -04:00
simple : examples /simple /simple .cpp ggml .o llama .o $( COMMON_DEPS ) $( OBJS )
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
2023-11-18 14:48:17 -07:00
tokenize : examples /tokenize /tokenize .cpp ggml .o llama .o $( COMMON_DEPS ) $( OBJS )
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
2023-11-02 02:50:16 -04:00
batched : examples /batched /batched .cpp ggml .o llama .o $( COMMON_DEPS ) $( OBJS )
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
2024-04-15 18:35:21 +01:00
batched-bench : examples /batched -bench /batched -bench .cpp build -info .o ggml .o llama .o $( COMMON_DEPS ) $( OBJS )
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
2023-11-02 02:50:16 -04:00
quantize : examples /quantize /quantize .cpp build -info .o ggml .o llama .o $( OBJS )
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
2023-11-02 02:50:16 -04:00
quantize-stats : examples /quantize -stats /quantize -stats .cpp build -info .o ggml .o llama .o $( OBJS )
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
2023-11-02 02:50:16 -04:00
perplexity : examples /perplexity /perplexity .cpp ggml .o llama .o $( COMMON_DEPS ) $( OBJS )
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
imatrix : examples /imatrix /imatrix .cpp ggml .o llama .o $( COMMON_DEPS ) $( OBJS )
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
2023-11-02 02:50:16 -04:00
embedding : examples /embedding /embedding .cpp ggml .o llama .o $( COMMON_DEPS ) $( OBJS )
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-03-10 11:56:30 -04:00
gritlm : examples /gritlm /gritlm .cpp ggml .o llama .o $( COMMON_DEPS ) $( OBJS )
$( CXX) $( CXXFLAGS) -c $< -o $( call GET_OBJ_FILE, $<)
$( CXX) $( CXXFLAGS) $( filter-out %.h $<,$^) $( call GET_OBJ_FILE, $<) -o $@ $( LDFLAGS)
2023-11-02 02:50:16 -04:00
save-load-state : examples /save -load -state /save -load -state .cpp ggml .o llama .o $( COMMON_DEPS ) $( OBJS )
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-04-21 18:48:53 +01:00
server : examples /server /server .cpp examples /server /utils .hpp examples /server /httplib .h common /json .hpp examples /server /index .html .hpp examples /server /index .js .hpp examples /server /completion .js .hpp examples /server /json -schema -to -grammar .mjs .hpp common /stb_image .h ggml .o llama .o $( COMMON_DEPS ) grammar -parser .o $( OBJS )
2024-02-05 19:33:00 +01:00
$( CXX) $( CXXFLAGS) -c $< -o $( call GET_OBJ_FILE, $<)
2024-03-07 11:41:53 +02:00
$( CXX) $( CXXFLAGS) $( filter-out %.h %.hpp $<,$^) -Iexamples/server $( call GET_OBJ_FILE, $<) -o $@ $( LDFLAGS) $( LWINSOCK2)
2023-05-27 11:04:14 -06:00
2024-04-21 18:48:53 +01:00
# Portable equivalent of `cd examples/server/public && xxd -i $(notdir $<) ../$(notdir $<).hpp`:
examples/server/%.hpp : examples /server /public /% Makefile
@( 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 ) ;" \
) > $@
2023-12-21 23:07:58 +02:00
gguf : examples /gguf /gguf .cpp ggml .o $( OBJS )
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-21 23:07:43 +03:00
2024-03-19 12:05:44 +01:00
gguf-split : examples /gguf -split /gguf -split .cpp ggml .o llama .o $( COMMON_DEPS ) $( OBJS )
$( CXX) $( CXXFLAGS) -c $< -o $( call GET_OBJ_FILE, $<)
$( CXX) $( CXXFLAGS) $( filter-out %.h $<,$^) $( call GET_OBJ_FILE, $<) -o $@ $( LDFLAGS)
2024-04-11 14:51:07 +02:00
eval-callback : examples /eval -callback /eval -callback .cpp ggml .o llama .o $( COMMON_DEPS ) $( OBJS )
$( CXX) $( CXXFLAGS) -c $< -o $( call GET_OBJ_FILE, $<)
$( CXX) $( CXXFLAGS) $( filter-out %.h $<,$^) $( call GET_OBJ_FILE, $<) -o $@ $( LDFLAGS)
2023-10-11 13:35:46 -06:00
train-text-from-scratch : examples /train -text -from -scratch /train -text -from -scratch .cpp ggml .o llama .o $( COMMON_DEPS ) train .o $( OBJS )
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-15 19:42:48 +02:00
2023-08-29 04:42:41 -04:00
convert-llama2c-to-ggml : examples /convert -llama 2c -to -ggml /convert -llama 2c -to -ggml .cpp ggml .o llama .o $( OBJS )
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-11 19:17:25 -04:00
2023-11-02 02:50:16 -04:00
llama-bench : examples /llama -bench /llama -bench .cpp ggml .o llama .o $( COMMON_DEPS ) $( OBJS )
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-18 12:44:58 +02:00
2023-11-06 22:36:23 +01:00
libllava.a : examples /llava /llava .cpp examples /llava /llava .h examples /llava /clip .cpp examples /llava /clip .h common /stb_image .h common /base 64.hpp ggml .o llama .o $( COMMON_DEPS ) $( OBJS )
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
llava-cli : examples /llava /llava -cli .cpp examples /llava /clip .h examples /llava /clip .cpp examples /llava /llava .h examples /llava /llava .cpp ggml .o llama .o $( COMMON_DEPS ) $( OBJS )
2024-02-05 19:33:00 +01:00
$( CXX) $( CXXFLAGS) -c $< -o $( call GET_OBJ_FILE, $<)
$( CXX) $( CXXFLAGS) -c examples/llava/clip.cpp -o $( call GET_OBJ_FILE, examples/llava/clip.cpp) -Wno-cast-qual
$( CXX) $( CXXFLAGS) -c examples/llava/llava.cpp -o $( call GET_OBJ_FILE, examples/llava/llava.cpp)
$( CXX) $( CXXFLAGS) $( filter-out %.h $< examples/llava/clip.cpp examples/llava/llava.cpp,$^) $( call GET_OBJ_FILE, $<) $( call GET_OBJ_FILE, examples/llava/clip.cpp) $( call GET_OBJ_FILE, examples/llava/llava.cpp) -o $@ $( LDFLAGS)
2023-10-12 18:23:18 +03:00
2023-10-11 13:35:46 -06:00
baby-llama : examples /baby -llama /baby -llama .cpp ggml .o llama .o $( COMMON_DEPS ) train .o $( OBJS )
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-29 04:42:41 -04:00
2023-11-02 02:50:16 -04:00
beam-search : examples /beam -search /beam -search .cpp ggml .o llama .o $( COMMON_DEPS ) $( OBJS )
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-29 04:42:41 -04:00
2023-11-02 02:50:16 -04:00
finetune : examples /finetune /finetune .cpp ggml .o llama .o $( COMMON_DEPS ) train .o $( OBJS )
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 20:40:11 +02:00
2023-11-30 17:23:08 -05:00
export-lora : examples /export -lora /export -lora .cpp ggml .o common /common .h $( OBJS )
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 20:40:11 +02:00
2024-03-25 16:38:22 +09:00
retrieval : examples /retrieval /retrieval .cpp ggml .o llama .o $( COMMON_DEPS ) $( OBJS )
$( CXX) $( CXXFLAGS) -c $< -o $( call GET_OBJ_FILE, $<)
$( CXX) $( CXXFLAGS) $( filter-out %.h $<,$^) $( call GET_OBJ_FILE, $<) -o $@ $( LDFLAGS)
2023-11-02 02:50:16 -04:00
speculative : examples /speculative /speculative .cpp ggml .o llama .o $( COMMON_DEPS ) grammar -parser .o $( OBJS )
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-04 03:39:57 -07:00
2023-11-02 02:50:16 -04:00
parallel : examples /parallel /parallel .cpp ggml .o llama .o $( COMMON_DEPS ) $( OBJS )
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
2023-11-26 20:33:07 +02:00
lookahead : examples /lookahead /lookahead .cpp ggml .o llama .o $( COMMON_DEPS ) $( OBJS )
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-26 20:33:07 +02:00
2024-03-23 01:24:36 +01:00
lookup : examples /lookup /lookup .cpp ggml .o llama .o ngram -cache .o $( COMMON_DEPS ) $( OBJS )
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-03-23 01:24:36 +01:00
$( CXX) $( CXXFLAGS) -c examples/lookup/lookup-create.cpp -o $( call GET_OBJ_FILE, examples/lookup/lookup-create.cpp)
$( CXX) $( CXXFLAGS) $( filter-out %.h $<,$^) $( call GET_OBJ_FILE, examples/lookup/lookup-create.cpp) -o lookup-create $( LDFLAGS)
$( CXX) $( CXXFLAGS) -c examples/lookup/lookup-merge.cpp -o $( call GET_OBJ_FILE, examples/lookup/lookup-merge.cpp)
$( CXX) $( CXXFLAGS) $( filter-out %.h $<,$^) $( call GET_OBJ_FILE, examples/lookup/lookup-merge.cpp) -o lookup-merge $( LDFLAGS)
$( CXX) $( CXXFLAGS) -c examples/lookup/lookup-stats.cpp -o $( call GET_OBJ_FILE, examples/lookup/lookup-stats.cpp)
$( CXX) $( CXXFLAGS) $( filter-out %.h $<,$^) $( call GET_OBJ_FILE, examples/lookup/lookup-stats.cpp) -o lookup-stats $( LDFLAGS)
2023-12-22 17:05:56 +01:00
2024-01-08 11:14:04 +02:00
passkey : examples /passkey /passkey .cpp ggml .o llama .o $( COMMON_DEPS ) $( OBJS )
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-08 11:14:04 +02:00
2024-04-04 03:44:28 -04:00
gbnf-validator : examples /gbnf -validator /gbnf -validator .cpp ggml .o llama .o $( COMMON_DEPS ) grammar -parser .o $( OBJS )
$( CXX) $( CXXFLAGS) -c $< -o $( call GET_OBJ_FILE, $<)
$( CXX) $( CXXFLAGS) $( filter-out %.h $<,$^) $( call GET_OBJ_FILE, $<) -o $@ $( LDFLAGS)
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
2023-11-02 02:50:16 -04:00
build-info.o : common /build -info .cpp
$( 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 )
2023-11-02 02:50:16 -04:00
benchmark-matmult : examples /benchmark /benchmark -matmult .cpp build -info .o ggml .o $( OBJS )
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 17:41:44 -04:00
run-benchmark-matmult : benchmark -matmult
2023-04-30 12:32:37 +00:00
./$@
2023-04-13 09:03:57 -05:00
2023-10-11 04:14:05 -07:00
.PHONY : run -benchmark -matmult swift
2023-09-28 17:41:44 -04:00
2023-06-07 10:59:52 +03:00
vdot : pocs /vdot /vdot .cpp ggml .o $( OBJS )
2024-02-05 19:33:00 +01:00
$( CXX) $( CXXFLAGS) -c $< -o $( call GET_OBJ_FILE, $<)
$( CXX) $( CXXFLAGS) $( filter-out $<,$^) $( call GET_OBJ_FILE, $<) -o $@ $( LDFLAGS)
2023-05-01 09:23:47 -07:00
2023-09-28 17:41:44 -04:00
q8dot : pocs /vdot /q 8dot .cpp ggml .o $( OBJS )
2024-02-05 19:33:00 +01:00
$( CXX) $( CXXFLAGS) -c $< -o $( call GET_OBJ_FILE, $<)
$( CXX) $( CXXFLAGS) $( filter-out $<,$^) $( call GET_OBJ_FILE, $<) -o $@ $( LDFLAGS)
2023-09-28 17:41:44 -04:00
2023-11-30 17:23:08 -05:00
tests/test-llama-grammar : tests /test -llama -grammar .cpp ggml .o grammar -parser .o $( OBJS )
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-17 03:41:01 -04:00
2023-11-30 17:23:08 -05:00
tests/test-grammar-parser : tests /test -grammar -parser .cpp ggml .o llama .o grammar -parser .o $( OBJS )
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-04-06 10:31:33 -04:00
tests/test-grammar-integration : tests /test -grammar -integration .cpp ggml .o llama .o grammar -parser .o $( OBJS )
$( 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
tests/test-double-float : tests /test -double -float .cpp ggml .o $( OBJS )
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-03-21 11:50:43 +00:00
tests/test-json-schema-to-grammar : tests /test -json -schema -to -grammar .cpp json -schema -to -grammar .o ggml .o llama .o grammar -parser .o $( OBJS )
$( CXX) $( CXXFLAGS) -Iexamples/server -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
tests/test-grad0 : tests /test -grad 0.cpp ggml .o $( OBJS )
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
2023-11-30 17:23:08 -05:00
tests/test-opt : tests /test -opt .cpp ggml .o $( OBJS )
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
2023-11-30 17:23:08 -05:00
tests/test-quantize-fns : tests /test -quantize -fns .cpp ggml .o $( OBJS )
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
2023-11-30 17:23:08 -05:00
tests/test-quantize-perf : tests /test -quantize -perf .cpp ggml .o $( OBJS )
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
2023-11-30 17:23:08 -05:00
tests/test-sampling : tests /test -sampling .cpp ggml .o llama .o $( OBJS )
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
2023-12-12 04:27:26 -05:00
tests/test-tokenizer-0-falcon : tests /test -tokenizer -0-falcon .cpp ggml .o llama .o $( COMMON_DEPS ) console .o $( OBJS )
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
2023-12-12 04:27:26 -05:00
tests/test-tokenizer-0-llama : tests /test -tokenizer -0-llama .cpp ggml .o llama .o $( COMMON_DEPS ) console .o $( OBJS )
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
2023-12-12 04:27:26 -05:00
tests/test-tokenizer-1-bpe : tests /test -tokenizer -1-bpe .cpp ggml .o llama .o $( COMMON_DEPS ) console .o $( OBJS )
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
2023-12-12 04:27:26 -05:00
tests/test-tokenizer-1-llama : tests /test -tokenizer -1-llama .cpp ggml .o llama .o $( COMMON_DEPS ) console .o $( OBJS )
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
2023-11-30 17:23:08 -05:00
tests/test-rope : tests /test -rope .cpp ggml .o $( OBJS )
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
2023-08-30 02:20:26 -04:00
tests/test-c.o : tests /test -c .c llama .h
$( CC) $( CFLAGS) -c $( filter-out %.h,$^) -o $@
2023-12-07 22:26:54 +02:00
tests/test-backend-ops : tests /test -backend -ops .cpp ggml .o $( OBJS )
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-01-26 07:18:00 -05:00
tests/test-model-load-cancel : tests /test -model -load -cancel .cpp ggml .o llama .o tests /get -model .cpp $( COMMON_DEPS ) $( OBJS )
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
tests/test-autorelease : tests /test -autorelease .cpp ggml .o llama .o tests /get -model .cpp $( COMMON_DEPS ) $( OBJS )
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
tests/test-chat-template : tests /test -chat -template .cpp ggml .o llama .o $( COMMON_DEPS ) $( OBJS )
$( CXX) $( CXXFLAGS) -c $< -o $( call GET_OBJ_FILE, $<)
$( CXX) $( CXXFLAGS) $( filter-out %.h $<,$^) $( call GET_OBJ_FILE, $<) -o $@ $( LDFLAGS)