development.md 3.7 KB

Development

Install prerequisites:

  • Go
  • C/C++ Compiler e.g. Clang on macOS, TDM-GCC (Windows amd64) or llvm-mingw (Windows arm64), GCC/Clang on Linux.

Then build and run Ollama from the root directory of the repository:

go run . serve

macOS (Apple Silicon)

macOS Apple Silicon supports Metal which is built-in to the Ollama binary. No additional steps are required.

macOS (Intel)

Install prerequisites:

  • CMake or brew install cmake

Then, configure and build the project:

cmake -B build
cmake --build build

Lastly, run Ollama:

go run . serve

Windows

Install prerequisites:

Then, configure and build the project:

cmake -B build
cmake --build build --config Release

[!IMPORTANT] Building for ROCm requires additional flags:

> cmake -B build -G Ninja -DCMAKE_C_COMPILER=clang -DCMAKE_CXX_COMPILER=clang++
> cmake --build build --config Release
> ```


Lastly, run Ollama:

shell go run . serve


## Windows (ARM)

Windows ARM does not support additional acceleration libraries at this time.  Do not use cmake, simply `go run` or `go build`.

## Linux

Install prerequisites:

- [CMake](https://cmake.org/download/) or `sudo apt install cmake` or `sudo dnf install cmake`
- (Optional) AMD GPU support
    - [ROCm](https://rocm.docs.amd.com/projects/install-on-linux/en/latest/install/quick-start.html)
- (Optional) NVIDIA GPU support
    - [CUDA SDK](https://developer.nvidia.com/cuda-downloads)

> [!IMPORTANT]
> Ensure prerequisites are in `PATH` before running CMake.


Then, configure and build the project:

shell cmake -B build cmake --build build


Lastly, run Ollama:

shell go run . serve


## Docker

shell docker build .


### ROCm

shell docker build --build-arg FLAVOR=rocm .


## Running tests

To run tests, use `go test`:

shell go test ./...


NOTE: In rare cirumstances, you may nedd to change a package using the new
"synctest" package in go1.24.

If you do not have the "synctest" package enabled, you will not see build or
test failures resulting from your change(s), if any, locally, but CI will
break.

If you see failures in CI, you can either keep pushing changes to see if the
CI build passes, or you can enable the "synctest" package locally to see the
failures before pushing.

To enable the "synctest" package for testing, run the following command:

shell GOEXPERIMENT=synctest go test ./...


If you wish to enable synctest for all go commands, you can set the
`GOEXPERIMENT` environment variable in your shell profile or by using:

shell go env -w GOEXPERIMENT=synctest ```

Which will enable the "synctest" package for all go commands without needing to set it for all shell sessions.

The synctest package is not required for production builds.

Library detection

Ollama looks for acceleration libraries in the following paths relative to the ollama executable:

  • ./lib/ollama (Windows)
  • ../lib/ollama (Linux)
  • . (macOS)
  • build/lib/ollama (for development)

If the libraries are not found, Ollama will not run with any acceleration libraries.