Files
ollama/Makefile2
2024-12-20 16:28:53 -08:00

113 lines
3.8 KiB
Plaintext

export GOOS?=$(shell go env GOOS)
export GOARCH?=$(shell go env GOARCH)
build: llama/build/$(GOOS)-$(GOARCH)
export GOFLAGS=-trimpath
llama/build/%/runners/metal: GOFLAGS+=-tags=metal
llama/build/%/runners/cpu_avx: GOFLAGS+=-tags=avx
llama/build/%/runners/cpu_avx2: GOFLAGS+=-tags=avx2
llama/build/%/runners/cuda_v11: GOFLAGS+=-tags=cuda,cuda_v11
llama/build/%/runners/cuda_v12: GOFLAGS+=-tags=cuda,cuda_v12
llama/build/%/runners/rocm: GOFLAGS+=-tags=cuda,rocm
.PHONY: llama/build/darwin-amd64 llama/build/darwin-arm64
llama/build/darwin-amd64: llama/build/darwin-amd64/runners/cpu_avx
llama/build/darwin-arm64: llama/build/darwin-arm64/runners/metal
.PHONY: llama/build/linux-amd64 llama/build/linux-arm64
llama/build/linux-amd64: llama/build/linux-amd64/runners/cpu_avx
llama/build/linux-amd64: llama/build/linux-amd64/runners/cpu_avx2
llama/build/linux-arm64: llama/build/linux-arm64/runners/cpu_avx
llama/build/linux-arm64: llama/build/linux-arm64/runners/cpu_avx2
.PHONY: llama/build/windows-amd64 linux/build/windows-arm64
llama/build/windows-amd64: llama/build/windows-amd64/runners/cpu_avx
llama/build/windows-amd64: llama/build/windows-amd64/runners/cpu_avx2
llama/build/windows-arm64: llama/build/windows-arm64/runners/cpu_avx
llama/build/windows-arm64: llama/build/windows-arm64/runners/cpu_avx2
.PHONY: cuda_v11 cuda_v12
cuda_v11 cuda_v12 rocm:
$(MAKE) -C ml/backend/ggml/ggml/ggml-cuda $@
ifeq ($(GOOS),linux)
NVCC11=$(shell command -v /usr/local/cuda-11/bin/nvcc)
NVCC12=$(shell command -v /usr/local/cuda-12/bin/nvcc)
HIPCC=$(shell command -v hipcc)
else ifeq ($(GOOS),windows)
NVCC11=$(shell ls "C:\\Program Files\\NVIDIA GPU Computing Toolkit\\CUDA\\v11.?\\bin\\nvcc.exe")
NVCC12=$(shell ls "C:\\Program Files\\NVIDIA GPU Computing Toolkit\\CUDA\\v12.?\\bin\\nvcc.exe")
HIPCC=$(shell command -v hipcc)
endif
ifneq ($(NVCC11),)
ifeq ($(OLLAMA_SKIP_GENERATE_CUDA_11),)
CUDA_V11_TARGETS= \
llama/build/linux-amd64/runners/cuda_v11 \
llama/build/linux-arm64/runners/cuda_v11 \
llama/build/windows-amd64/runners/cuda_v11 \
llama/build/windows-arm64/runners/cuda_v11 \
$(CUDA_V11_TARGETS): cuda_v11
cuda_v11: export NVCC=$(NVCC11)
llama/build/linux-amd64: llama/build/linux-amd64/runners/cuda_v11
llama/build/linux-arm64: llama/build/linux-arm64/runners/cuda_v11
llama/build/windows-amd64: llama/build/windows-amd64/runners/cuda_v11
llama/build/windows-arm64: llama/build/windows-arm64/runners/cuda_v11
endif
endif
ifneq ($(NVCC12),)
ifeq ($(OLLAMA_SKIP_GENERATE_CUDA_12),)
CUDA_V12_TARGETS= \
llama/build/linux-amd64/runners/cuda_v12 \
llama/build/linux-arm64/runners/cuda_v12 \
llama/build/windows-amd64/runners/cuda_v12 \
llama/build/windows-arm64/runners/cuda_v12 \
$(CUDA_V12_TARGETS): cuda_v12
cuda_v12: export NVCC=$(NVCC12)
llama/build/linux-amd64: llama/build/linux-amd64/runners/cuda_v12
llama/build/linux-arm64: llama/build/linux-arm64/runners/cuda_v12
llama/build/windows-amd64: llama/build/windows-amd64/runners/cuda_v12
llama/build/windows-arm64: llama/build/windows-arm64/runners/cuda_v12
endif
endif
ifneq ($(HIPCC),)
ifeq ($(OLLAMA_SKIP_GENERATE_ROCM),)
ROCM_TARGETS= \
llama/build/linux-amd64/runners/rocm \
llama/build/linux-arm64/runners/rocm \
llama/build/windows-amd64/runners/rocm \
llama/build/windows-arm64/runners/rocm \
$(ROCM_TARGETS): rocm
rocm: export NVCC=$(HIPCC)
llama/build/linux-amd64: llama/build/linux-amd64/runners/rocm
llama/build/linux-arm64: llama/build/linux-arm64/runners/rocm
llama/build/windows-amd64: llama/build/windows-amd64/runners/rocm
llama/build/windows-arm64: llama/build/windows-arm64/runners/rocm
endif
endif
export CGO_ENABLED=1
export CGO_CPPFLAGS_ALLOW=-mfma|-mf16c
llama/build/%: cmd/runner always
mkdir -p $@; go build -o $@ ./$<
.PHONY: always
always:
clean:
$(RM) -r llama/build
realclean: clean
$(MAKE) -C ml/backend/ggml/ggml/ggml-cuda $<