Skip to content

Commit 098f6d7

Browse files
make: Use ccache for faster compilation (#5318)
* make: Use ccache for faster compilation
1 parent 78b00dd commit 098f6d7

File tree

2 files changed

+121
-52
lines changed

2 files changed

+121
-52
lines changed

CMakeLists.txt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -809,9 +809,9 @@ if (LLAMA_CCACHE)
809809
if (LLAMA_CCACHE_FOUND)
810810
set_property(GLOBAL PROPERTY RULE_LAUNCH_COMPILE ccache)
811811
set(ENV{CCACHE_SLOPPINESS} time_macros)
812-
message(STATUS "Using ccache")
812+
message(STATUS "ccache found, compilation results will be cached. Disable with LLAMA_CCACHE=OFF.")
813813
else()
814-
message(STATUS "Warning: ccache not found - consider installing it or use LLAMA_CCACHE=OFF")
814+
message(STATUS "Warning: ccache not found - consider installing it for faster compilation or disable this warning with LLAMA_CCACHE=OFF")
815815
endif ()
816816
endif()
817817

Makefile

Lines changed: 119 additions & 50 deletions
Original file line numberDiff line numberDiff line change
@@ -112,6 +112,18 @@ MK_CXXFLAGS += -O3
112112
MK_NVCCFLAGS += -O3
113113
endif
114114

115+
ifndef LLAMA_NO_CCACHE
116+
CCACHE := $(shell which ccache)
117+
ifdef CCACHE
118+
export CCACHE_SLOPPINESS = time_macros
119+
$(info I ccache found, compilation results will be cached. Disable with LLAMA_NO_CCACHE.)
120+
CC := $(CCACHE) $(CC)
121+
CXX := $(CCACHE) $(CXX)
122+
else
123+
$(info I ccache not found. Consider installing it for faster compilation.)
124+
endif # CCACHE
125+
endif # LLAMA_NO_CCACHE
126+
115127
# clock_gettime came in POSIX.1b (1993)
116128
# CLOCK_MONOTONIC came in POSIX.1-2001 / SUSv3 as optional
117129
# posix_memalign came in POSIX.1-2001 / SUSv3
@@ -374,9 +386,9 @@ ifdef LLAMA_DEBUG
374386
MK_NVCCFLAGS += -lineinfo
375387
endif # LLAMA_DEBUG
376388
ifdef LLAMA_CUDA_NVCC
377-
NVCC = $(LLAMA_CUDA_NVCC)
389+
NVCC = $(CCACHE) $(LLAMA_CUDA_NVCC)
378390
else
379-
NVCC = nvcc
391+
NVCC = $(CCACHE) nvcc
380392
endif #LLAMA_CUDA_NVCC
381393
ifdef CUDA_DOCKER_ARCH
382394
MK_NVCCFLAGS += -Wno-deprecated-gpu-targets -arch=$(CUDA_DOCKER_ARCH)
@@ -483,7 +495,7 @@ ifdef LLAMA_HIPBLAS
483495
ROCM_PATH ?= /opt/rocm
484496
GPU_TARGETS ?= $(shell $(ROCM_PATH)/llvm/bin/amdgpu-arch)
485497
endif
486-
HIPCC ?= $(ROCM_PATH)/bin/hipcc
498+
HIPCC ?= $(CCACHE) $(ROCM_PATH)/bin/hipcc
487499
LLAMA_CUDA_DMMV_X ?= 32
488500
LLAMA_CUDA_MMV_Y ?= 1
489501
LLAMA_CUDA_KQUANTS_ITER ?= 2
@@ -607,105 +619,143 @@ libllama.a: llama.o ggml.o $(OBJS) $(COMMON_DEPS)
607619

608620
clean:
609621
rm -vrf *.o tests/*.o *.so *.a *.dll benchmark-matmult common/build-info.cpp *.dot $(COV_TARGETS) $(BUILD_TARGETS) $(TEST_TARGETS)
622+
find examples pocs -type f -name "*.o" -delete
610623

611624
#
612625
# Examples
613626
#
614627

628+
# $< is the first prerequisite, i.e. the source file.
629+
# Explicitly compile this to an object file so that it can be cached with ccache.
630+
# The source file is then filtered out from $^ (the list of all prerequisites) and the object file is added instead.
631+
632+
# Helper function that replaces .c, .cpp, and .cu file endings with .o:
633+
GET_OBJ_FILE = $(patsubst %.c,%.o,$(patsubst %.cpp,%.o,$(patsubst %.cu,%.o,$(1))))
634+
615635
main: examples/main/main.cpp ggml.o llama.o $(COMMON_DEPS) console.o grammar-parser.o $(OBJS)
616-
$(CXX) $(CXXFLAGS) $(filter-out %.h,$^) -o $@ $(LDFLAGS)
636+
$(CXX) $(CXXFLAGS) -c $< -o $(call GET_OBJ_FILE, $<)
637+
$(CXX) $(CXXFLAGS) $(filter-out %.h $<,$^) $(call GET_OBJ_FILE, $<) -o $@ $(LDFLAGS)
617638
@echo
618639
@echo '==== Run ./main -h for help. ===='
619640
@echo
620641

621642
infill: examples/infill/infill.cpp ggml.o llama.o $(COMMON_DEPS) console.o grammar-parser.o $(OBJS)
622-
$(CXX) $(CXXFLAGS) $(filter-out %.h,$^) -o $@ $(LDFLAGS)
643+
$(CXX) $(CXXFLAGS) -c $< -o $(call GET_OBJ_FILE, $<)
644+
$(CXX) $(CXXFLAGS) $(filter-out %.h $<,$^) $(call GET_OBJ_FILE, $<) -o $@ $(LDFLAGS)
623645

624646
simple: examples/simple/simple.cpp ggml.o llama.o $(COMMON_DEPS) $(OBJS)
625-
$(CXX) $(CXXFLAGS) $(filter-out %.h,$^) -o $@ $(LDFLAGS)
647+
$(CXX) $(CXXFLAGS) -c $< -o $(call GET_OBJ_FILE, $<)
648+
$(CXX) $(CXXFLAGS) $(filter-out %.h $<,$^) $(call GET_OBJ_FILE, $<) -o $@ $(LDFLAGS)
626649

627650
tokenize: examples/tokenize/tokenize.cpp ggml.o llama.o $(COMMON_DEPS) $(OBJS)
628-
$(CXX) $(CXXFLAGS) $(filter-out %.h,$^) -o $@ $(LDFLAGS)
651+
$(CXX) $(CXXFLAGS) -c $< -o $(call GET_OBJ_FILE, $<)
652+
$(CXX) $(CXXFLAGS) $(filter-out %.h $<,$^) $(call GET_OBJ_FILE, $<) -o $@ $(LDFLAGS)
629653

630654
batched: examples/batched/batched.cpp ggml.o llama.o $(COMMON_DEPS) $(OBJS)
631-
$(CXX) $(CXXFLAGS) $(filter-out %.h,$^) -o $@ $(LDFLAGS)
655+
$(CXX) $(CXXFLAGS) -c $< -o $(call GET_OBJ_FILE, $<)
656+
$(CXX) $(CXXFLAGS) $(filter-out %.h $<,$^) $(call GET_OBJ_FILE, $<) -o $@ $(LDFLAGS)
632657

633658
batched-bench: examples/batched-bench/batched-bench.cpp build-info.o ggml.o llama.o common.o $(OBJS)
634-
$(CXX) $(CXXFLAGS) $(filter-out %.h,$^) -o $@ $(LDFLAGS)
659+
$(CXX) $(CXXFLAGS) -c $< -o $(call GET_OBJ_FILE, $<)
660+
$(CXX) $(CXXFLAGS) $(filter-out %.h $<,$^) $(call GET_OBJ_FILE, $<) -o $@ $(LDFLAGS)
635661

636662
quantize: examples/quantize/quantize.cpp build-info.o ggml.o llama.o $(OBJS)
637-
$(CXX) $(CXXFLAGS) $(filter-out %.h,$^) -o $@ $(LDFLAGS)
663+
$(CXX) $(CXXFLAGS) -c $< -o $(call GET_OBJ_FILE, $<)
664+
$(CXX) $(CXXFLAGS) $(filter-out %.h $<,$^) $(call GET_OBJ_FILE, $<) -o $@ $(LDFLAGS)
638665

639666
quantize-stats: examples/quantize-stats/quantize-stats.cpp build-info.o ggml.o llama.o $(OBJS)
640-
$(CXX) $(CXXFLAGS) $(filter-out %.h,$^) -o $@ $(LDFLAGS)
667+
$(CXX) $(CXXFLAGS) -c $< -o $(call GET_OBJ_FILE, $<)
668+
$(CXX) $(CXXFLAGS) $(filter-out %.h $<,$^) $(call GET_OBJ_FILE, $<) -o $@ $(LDFLAGS)
641669

642670
perplexity: examples/perplexity/perplexity.cpp ggml.o llama.o $(COMMON_DEPS) $(OBJS)
643-
$(CXX) $(CXXFLAGS) $(filter-out %.h,$^) -o $@ $(LDFLAGS)
671+
$(CXX) $(CXXFLAGS) -c $< -o $(call GET_OBJ_FILE, $<)
672+
$(CXX) $(CXXFLAGS) $(filter-out %.h $<,$^) $(call GET_OBJ_FILE, $<) -o $@ $(LDFLAGS)
644673

645674
imatrix: examples/imatrix/imatrix.cpp ggml.o llama.o $(COMMON_DEPS) $(OBJS)
646-
$(CXX) $(CXXFLAGS) $(filter-out %.h,$^) -o $@ $(LDFLAGS)
675+
$(CXX) $(CXXFLAGS) -c $< -o $(call GET_OBJ_FILE, $<)
676+
$(CXX) $(CXXFLAGS) $(filter-out %.h $<,$^) $(call GET_OBJ_FILE, $<) -o $@ $(LDFLAGS)
647677

648678
embedding: examples/embedding/embedding.cpp ggml.o llama.o $(COMMON_DEPS) $(OBJS)
649-
$(CXX) $(CXXFLAGS) $(filter-out %.h,$^) -o $@ $(LDFLAGS)
679+
$(CXX) $(CXXFLAGS) -c $< -o $(call GET_OBJ_FILE, $<)
680+
$(CXX) $(CXXFLAGS) $(filter-out %.h $<,$^) $(call GET_OBJ_FILE, $<) -o $@ $(LDFLAGS)
650681

651682
save-load-state: examples/save-load-state/save-load-state.cpp ggml.o llama.o $(COMMON_DEPS) $(OBJS)
652-
$(CXX) $(CXXFLAGS) $(filter-out %.h,$^) -o $@ $(LDFLAGS)
683+
$(CXX) $(CXXFLAGS) -c $< -o $(call GET_OBJ_FILE, $<)
684+
$(CXX) $(CXXFLAGS) $(filter-out %.h $<,$^) $(call GET_OBJ_FILE, $<) -o $@ $(LDFLAGS)
653685

654686
server: examples/server/server.cpp examples/server/oai.hpp examples/server/utils.hpp examples/server/httplib.h examples/server/json.hpp examples/server/index.html.hpp examples/server/index.js.hpp examples/server/completion.js.hpp examples/llava/clip.cpp examples/llava/clip.h common/stb_image.h ggml.o llama.o $(COMMON_DEPS) grammar-parser.o $(OBJS)
655-
$(CXX) $(CXXFLAGS) -Iexamples/server $(filter-out %.h,$(filter-out %.hpp,$^)) -o $@ $(LDFLAGS) $(LWINSOCK2) -Wno-cast-qual
687+
$(CXX) $(CXXFLAGS) -c $< -o $(call GET_OBJ_FILE, $<)
688+
$(CXX) $(CXXFLAGS) -c examples/llava/clip.cpp -o $(call GET_OBJ_FILE, examples/llava/clip.cpp) -Wno-cast-qual
689+
$(CXX) $(CXXFLAGS) -Iexamples/server $(filter-out %.h %.hpp $< examples/llava/clip.cpp,$^) $(call GET_OBJ_FILE, $<) $(call GET_OBJ_FILE, examples/llava/clip.cpp) -o $@ $(LDFLAGS) $(LWINSOCK2)
656690

657691
gguf: examples/gguf/gguf.cpp ggml.o $(OBJS)
658-
$(CXX) $(CXXFLAGS) $(filter-out %.h,$^) -o $@ $(LDFLAGS)
692+
$(CXX) $(CXXFLAGS) -c $< -o $(call GET_OBJ_FILE, $<)
693+
$(CXX) $(CXXFLAGS) $(filter-out %.h $<,$^) $(call GET_OBJ_FILE, $<) -o $@ $(LDFLAGS)
659694

660695
train-text-from-scratch: examples/train-text-from-scratch/train-text-from-scratch.cpp ggml.o llama.o $(COMMON_DEPS) train.o $(OBJS)
661-
$(CXX) $(CXXFLAGS) $(filter-out %.h,$^) -o $@ $(LDFLAGS)
696+
$(CXX) $(CXXFLAGS) -c $< -o $(call GET_OBJ_FILE, $<)
697+
$(CXX) $(CXXFLAGS) $(filter-out %.h $<,$^) $(call GET_OBJ_FILE, $<) -o $@ $(LDFLAGS)
662698

663699
convert-llama2c-to-ggml: examples/convert-llama2c-to-ggml/convert-llama2c-to-ggml.cpp ggml.o llama.o $(OBJS)
664-
$(CXX) $(CXXFLAGS) $(filter-out %.h,$^) -o $@ $(LDFLAGS)
700+
$(CXX) $(CXXFLAGS) -c $< -o $(call GET_OBJ_FILE, $<)
701+
$(CXX) $(CXXFLAGS) $(filter-out %.h $<,$^) $(call GET_OBJ_FILE, $<) -o $@ $(LDFLAGS)
665702

666703
llama-bench: examples/llama-bench/llama-bench.cpp ggml.o llama.o $(COMMON_DEPS) $(OBJS)
667-
$(CXX) $(CXXFLAGS) $(filter-out %.h,$^) -o $@ $(LDFLAGS)
704+
$(CXX) $(CXXFLAGS) -c $< -o $(call GET_OBJ_FILE, $<)
705+
$(CXX) $(CXXFLAGS) $(filter-out %.h $<,$^) $(call GET_OBJ_FILE, $<) -o $@ $(LDFLAGS)
668706

669707
libllava.a: examples/llava/llava.cpp examples/llava/llava.h examples/llava/clip.cpp examples/llava/clip.h common/stb_image.h common/base64.hpp ggml.o llama.o $(COMMON_DEPS) $(OBJS)
670708
$(CXX) $(CXXFLAGS) -static -fPIC -c $< -o $@ -Wno-cast-qual
671709

672710
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)
673-
$(CXX) $(CXXFLAGS) $(filter-out %.h,$^) -o $@ $(LDFLAGS) -Wno-cast-qual
711+
$(CXX) $(CXXFLAGS) -c $< -o $(call GET_OBJ_FILE, $<)
712+
$(CXX) $(CXXFLAGS) -c examples/llava/clip.cpp -o $(call GET_OBJ_FILE, examples/llava/clip.cpp) -Wno-cast-qual
713+
$(CXX) $(CXXFLAGS) -c examples/llava/llava.cpp -o $(call GET_OBJ_FILE, examples/llava/llava.cpp)
714+
$(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)
674715

675716
baby-llama: examples/baby-llama/baby-llama.cpp ggml.o llama.o $(COMMON_DEPS) train.o $(OBJS)
676-
$(CXX) $(CXXFLAGS) $(filter-out %.h,$^) -o $@ $(LDFLAGS)
717+
$(CXX) $(CXXFLAGS) -c $< -o $(call GET_OBJ_FILE, $<)
718+
$(CXX) $(CXXFLAGS) $(filter-out %.h $<,$^) $(call GET_OBJ_FILE, $<) -o $@ $(LDFLAGS)
677719

678720
beam-search: examples/beam-search/beam-search.cpp ggml.o llama.o $(COMMON_DEPS) $(OBJS)
679-
$(CXX) $(CXXFLAGS) $(filter-out %.h,$^) -o $@ $(LDFLAGS)
721+
$(CXX) $(CXXFLAGS) -c $< -o $(call GET_OBJ_FILE, $<)
722+
$(CXX) $(CXXFLAGS) $(filter-out %.h $<,$^) $(call GET_OBJ_FILE, $<) -o $@ $(LDFLAGS)
680723

681724
finetune: examples/finetune/finetune.cpp ggml.o llama.o $(COMMON_DEPS) train.o $(OBJS)
682-
$(CXX) $(CXXFLAGS) $(filter-out %.h,$^) -o $@ $(LDFLAGS)
725+
$(CXX) $(CXXFLAGS) -c $< -o $(call GET_OBJ_FILE, $<)
726+
$(CXX) $(CXXFLAGS) $(filter-out %.h $<,$^) $(call GET_OBJ_FILE, $<) -o $@ $(LDFLAGS)
683727

684728
export-lora: examples/export-lora/export-lora.cpp ggml.o common/common.h $(OBJS)
685-
$(CXX) $(CXXFLAGS) $(filter-out %.h,$^) -o $@ $(LDFLAGS)
729+
$(CXX) $(CXXFLAGS) -c $< -o $(call GET_OBJ_FILE, $<)
730+
$(CXX) $(CXXFLAGS) $(filter-out %.h $<,$^) $(call GET_OBJ_FILE, $<) -o $@ $(LDFLAGS)
686731

687732
speculative: examples/speculative/speculative.cpp ggml.o llama.o $(COMMON_DEPS) grammar-parser.o $(OBJS)
688-
$(CXX) $(CXXFLAGS) $(filter-out %.h,$^) -o $@ $(LDFLAGS)
733+
$(CXX) $(CXXFLAGS) -c $< -o $(call GET_OBJ_FILE, $<)
734+
$(CXX) $(CXXFLAGS) $(filter-out %.h $<,$^) $(call GET_OBJ_FILE, $<) -o $@ $(LDFLAGS)
689735

690736
parallel: examples/parallel/parallel.cpp ggml.o llama.o $(COMMON_DEPS) $(OBJS)
691-
$(CXX) $(CXXFLAGS) $(filter-out %.h,$^) -o $@ $(LDFLAGS)
737+
$(CXX) $(CXXFLAGS) -c $< -o $(call GET_OBJ_FILE, $<)
738+
$(CXX) $(CXXFLAGS) $(filter-out %.h $<,$^) $(call GET_OBJ_FILE, $<) -o $@ $(LDFLAGS)
692739

693740
lookahead: examples/lookahead/lookahead.cpp ggml.o llama.o $(COMMON_DEPS) $(OBJS)
694-
$(CXX) $(CXXFLAGS) $(filter-out %.h,$^) -o $@ $(LDFLAGS)
741+
$(CXX) $(CXXFLAGS) -c $< -o $(call GET_OBJ_FILE, $<)
742+
$(CXX) $(CXXFLAGS) $(filter-out %.h $<,$^) $(call GET_OBJ_FILE, $<) -o $@ $(LDFLAGS)
695743

696744
lookup: examples/lookup/lookup.cpp ggml.o llama.o $(COMMON_DEPS) $(OBJS)
697-
$(CXX) $(CXXFLAGS) $(filter-out %.h,$^) -o $@ $(LDFLAGS)
745+
$(CXX) $(CXXFLAGS) -c $< -o $(call GET_OBJ_FILE, $<)
746+
$(CXX) $(CXXFLAGS) $(filter-out %.h $<,$^) $(call GET_OBJ_FILE, $<) -o $@ $(LDFLAGS)
698747

699748
passkey: examples/passkey/passkey.cpp ggml.o llama.o $(COMMON_DEPS) $(OBJS)
700-
$(CXX) $(CXXFLAGS) $(filter-out %.h,$^) -o $@ $(LDFLAGS)
749+
$(CXX) $(CXXFLAGS) -c $< -o $(call GET_OBJ_FILE, $<)
750+
$(CXX) $(CXXFLAGS) $(filter-out %.h $<,$^) $(call GET_OBJ_FILE, $<) -o $@ $(LDFLAGS)
701751

702752
ifeq ($(UNAME_S),Darwin)
703753
swift: examples/batched.swift
704754
(cd examples/batched.swift; make build)
705755
endif
706756

707757
common/build-info.cpp: $(wildcard .git/index) scripts/build-info.sh
708-
@sh scripts/build-info.sh $(CC) > $@.tmp
758+
@sh scripts/build-info.sh "$(CC)" > $@.tmp
709759
@if ! cmp -s $@.tmp $@; then \
710760
mv $@.tmp $@; \
711761
else \
@@ -722,66 +772,85 @@ build-info.o: common/build-info.cpp
722772
tests: $(TEST_TARGETS)
723773

724774
benchmark-matmult: examples/benchmark/benchmark-matmult.cpp build-info.o ggml.o $(OBJS)
725-
$(CXX) $(CXXFLAGS) $(filter-out %.h,$^) -o $@ $(LDFLAGS)
775+
$(CXX) $(CXXFLAGS) -c $< -o $(call GET_OBJ_FILE, $<)
776+
$(CXX) $(CXXFLAGS) $(filter-out %.h $<,$^) $(call GET_OBJ_FILE, $<) -o $@ $(LDFLAGS)
726777

727778
run-benchmark-matmult: benchmark-matmult
728779
./$@
729780

730781
.PHONY: run-benchmark-matmult swift
731782

732783
vdot: pocs/vdot/vdot.cpp ggml.o $(OBJS)
733-
$(CXX) $(CXXFLAGS) $^ -o $@ $(LDFLAGS)
784+
$(CXX) $(CXXFLAGS) -c $< -o $(call GET_OBJ_FILE, $<)
785+
$(CXX) $(CXXFLAGS) $(filter-out $<,$^) $(call GET_OBJ_FILE, $<) -o $@ $(LDFLAGS)
734786

735787
q8dot: pocs/vdot/q8dot.cpp ggml.o $(OBJS)
736-
$(CXX) $(CXXFLAGS) $^ -o $@ $(LDFLAGS)
788+
$(CXX) $(CXXFLAGS) -c $< -o $(call GET_OBJ_FILE, $<)
789+
$(CXX) $(CXXFLAGS) $(filter-out $<,$^) $(call GET_OBJ_FILE, $<) -o $@ $(LDFLAGS)
737790

738791
tests/test-llama-grammar: tests/test-llama-grammar.cpp ggml.o grammar-parser.o $(OBJS)
739-
$(CXX) $(CXXFLAGS) $(filter-out %.h,$^) -o $@ $(LDFLAGS)
792+
$(CXX) $(CXXFLAGS) -c $< -o $(call GET_OBJ_FILE, $<)
793+
$(CXX) $(CXXFLAGS) $(filter-out %.h $<,$^) $(call GET_OBJ_FILE, $<) -o $@ $(LDFLAGS)
740794

741795
tests/test-grammar-parser: tests/test-grammar-parser.cpp ggml.o llama.o grammar-parser.o $(OBJS)
742-
$(CXX) $(CXXFLAGS) $(filter-out %.h,$^) -o $@ $(LDFLAGS)
796+
$(CXX) $(CXXFLAGS) -c $< -o $(call GET_OBJ_FILE, $<)
797+
$(CXX) $(CXXFLAGS) $(filter-out %.h $<,$^) $(call GET_OBJ_FILE, $<) -o $@ $(LDFLAGS)
743798

744799
tests/test-double-float: tests/test-double-float.cpp ggml.o $(OBJS)
745-
$(CXX) $(CXXFLAGS) $(filter-out %.h,$^) -o $@ $(LDFLAGS)
800+
$(CXX) $(CXXFLAGS) -c $< -o $(call GET_OBJ_FILE, $<)
801+
$(CXX) $(CXXFLAGS) $(filter-out %.h $<,$^) $(call GET_OBJ_FILE, $<) -o $@ $(LDFLAGS)
746802

747803
tests/test-grad0: tests/test-grad0.cpp ggml.o $(OBJS)
748-
$(CXX) $(CXXFLAGS) $(filter-out %.h,$^) -o $@ $(LDFLAGS)
804+
$(CXX) $(CXXFLAGS) -c $< -o $(call GET_OBJ_FILE, $<)
805+
$(CXX) $(CXXFLAGS) $(filter-out %.h $<,$^) $(call GET_OBJ_FILE, $<) -o $@ $(LDFLAGS)
749806

750807
tests/test-opt: tests/test-opt.cpp ggml.o $(OBJS)
751-
$(CXX) $(CXXFLAGS) $(filter-out %.h,$^) -o $@ $(LDFLAGS)
808+
$(CXX) $(CXXFLAGS) -c $< -o $(call GET_OBJ_FILE, $<)
809+
$(CXX) $(CXXFLAGS) $(filter-out %.h $<,$^) $(call GET_OBJ_FILE, $<) -o $@ $(LDFLAGS)
752810

753811
tests/test-quantize-fns: tests/test-quantize-fns.cpp ggml.o $(OBJS)
754-
$(CXX) $(CXXFLAGS) $(filter-out %.h,$^) -o $@ $(LDFLAGS)
812+
$(CXX) $(CXXFLAGS) -c $< -o $(call GET_OBJ_FILE, $<)
813+
$(CXX) $(CXXFLAGS) $(filter-out %.h $<,$^) $(call GET_OBJ_FILE, $<) -o $@ $(LDFLAGS)
755814

756815
tests/test-quantize-perf: tests/test-quantize-perf.cpp ggml.o $(OBJS)
757-
$(CXX) $(CXXFLAGS) $(filter-out %.h,$^) -o $@ $(LDFLAGS)
816+
$(CXX) $(CXXFLAGS) -c $< -o $(call GET_OBJ_FILE, $<)
817+
$(CXX) $(CXXFLAGS) $(filter-out %.h $<,$^) $(call GET_OBJ_FILE, $<) -o $@ $(LDFLAGS)
758818

759819
tests/test-sampling: tests/test-sampling.cpp ggml.o llama.o $(OBJS)
760-
$(CXX) $(CXXFLAGS) $(filter-out %.h,$^) -o $@ $(LDFLAGS)
820+
$(CXX) $(CXXFLAGS) -c $< -o $(call GET_OBJ_FILE, $<)
821+
$(CXX) $(CXXFLAGS) $(filter-out %.h $<,$^) $(call GET_OBJ_FILE, $<) -o $@ $(LDFLAGS)
761822

762823
tests/test-tokenizer-0-falcon: tests/test-tokenizer-0-falcon.cpp ggml.o llama.o $(COMMON_DEPS) console.o $(OBJS)
763-
$(CXX) $(CXXFLAGS) $(filter-out %.h,$^) -o $@ $(LDFLAGS)
824+
$(CXX) $(CXXFLAGS) -c $< -o $(call GET_OBJ_FILE, $<)
825+
$(CXX) $(CXXFLAGS) $(filter-out %.h $<,$^) $(call GET_OBJ_FILE, $<) -o $@ $(LDFLAGS)
764826

765827
tests/test-tokenizer-0-llama: tests/test-tokenizer-0-llama.cpp ggml.o llama.o $(COMMON_DEPS) console.o $(OBJS)
766-
$(CXX) $(CXXFLAGS) $(filter-out %.h,$^) -o $@ $(LDFLAGS)
828+
$(CXX) $(CXXFLAGS) -c $< -o $(call GET_OBJ_FILE, $<)
829+
$(CXX) $(CXXFLAGS) $(filter-out %.h $<,$^) $(call GET_OBJ_FILE, $<) -o $@ $(LDFLAGS)
767830

768831
tests/test-tokenizer-1-bpe: tests/test-tokenizer-1-bpe.cpp ggml.o llama.o $(COMMON_DEPS) console.o $(OBJS)
769-
$(CXX) $(CXXFLAGS) $(filter-out %.h,$^) -o $@ $(LDFLAGS)
832+
$(CXX) $(CXXFLAGS) -c $< -o $(call GET_OBJ_FILE, $<)
833+
$(CXX) $(CXXFLAGS) $(filter-out %.h $<,$^) $(call GET_OBJ_FILE, $<) -o $@ $(LDFLAGS)
770834

771835
tests/test-tokenizer-1-llama: tests/test-tokenizer-1-llama.cpp ggml.o llama.o $(COMMON_DEPS) console.o $(OBJS)
772-
$(CXX) $(CXXFLAGS) $(filter-out %.h,$^) -o $@ $(LDFLAGS)
836+
$(CXX) $(CXXFLAGS) -c $< -o $(call GET_OBJ_FILE, $<)
837+
$(CXX) $(CXXFLAGS) $(filter-out %.h $<,$^) $(call GET_OBJ_FILE, $<) -o $@ $(LDFLAGS)
773838

774839
tests/test-rope: tests/test-rope.cpp ggml.o $(OBJS)
775-
$(CXX) $(CXXFLAGS) $(filter-out %.h,$^) -o $@ $(LDFLAGS)
840+
$(CXX) $(CXXFLAGS) -c $< -o $(call GET_OBJ_FILE, $<)
841+
$(CXX) $(CXXFLAGS) $(filter-out %.h $<,$^) $(call GET_OBJ_FILE, $<) -o $@ $(LDFLAGS)
776842

777843
tests/test-c.o: tests/test-c.c llama.h
778844
$(CC) $(CFLAGS) -c $(filter-out %.h,$^) -o $@
779845

780846
tests/test-backend-ops: tests/test-backend-ops.cpp ggml.o $(OBJS)
781-
$(CXX) $(CXXFLAGS) $(filter-out %.h,$^) -o $@ $(LDFLAGS)
847+
$(CXX) $(CXXFLAGS) -c $< -o $(call GET_OBJ_FILE, $<)
848+
$(CXX) $(CXXFLAGS) $(filter-out %.h $<,$^) $(call GET_OBJ_FILE, $<) -o $@ $(LDFLAGS)
782849

783850
tests/test-model-load-cancel: tests/test-model-load-cancel.cpp ggml.o llama.o tests/get-model.cpp $(COMMON_DEPS) $(OBJS)
784-
$(CXX) $(CXXFLAGS) $(filter-out %.h,$^) -o $@ $(LDFLAGS)
851+
$(CXX) $(CXXFLAGS) -c $< -o $(call GET_OBJ_FILE, $<)
852+
$(CXX) $(CXXFLAGS) $(filter-out %.h $<,$^) $(call GET_OBJ_FILE, $<) -o $@ $(LDFLAGS)
785853

786854
tests/test-autorelease: tests/test-autorelease.cpp ggml.o llama.o tests/get-model.cpp $(COMMON_DEPS) $(OBJS)
787-
$(CXX) $(CXXFLAGS) $(filter-out %.h,$^) -o $@ $(LDFLAGS)
855+
$(CXX) $(CXXFLAGS) -c $< -o $(call GET_OBJ_FILE, $<)
856+
$(CXX) $(CXXFLAGS) $(filter-out %.h $<,$^) $(call GET_OBJ_FILE, $<) -o $@ $(LDFLAGS)

0 commit comments

Comments
 (0)