summarylogtreecommitdiffstats
path: root/PKGBUILD
blob: 2370ae5eb5a010757cc9e24c21e4119877bb1460 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
# Manitainer: Caleb Maclennan <caleb@alerque.com>
# Contributor: Wilken Gottwalt <wilken dot gottwalt at posteo dot net>

# Sometimes RC tags start showing up on unmerged branches...
_branch=main

pkgbase=ollama-git
pkgname=(ollama-git ollama-rocm-git ollama-cuda-git ollama-vulkan-git ollama-docs-git)
pkgver=0.30.4rc0.r1.gad8cda255d97
pkgrel=2
pkgdesc='Create, run and share large language models (LLMs) with ROCm'
arch=(aarch64 x86_64)
url='https://github.com/ollama/ollama'
license=(MIT)
options=(!lto)
depends=(gcc-libs glibc)
makedepends=(cmake
             git
             go
             rocm-toolchain
             hipblas
             cuda
             clblast
             spirv-headers
             vulkan-headers
             vulkan-icd-loader
             shaderc)
source=("git+$url.git#branch=$_branch"
        ollama-ld.conf
        ollama.service
        sysusers.conf
        tmpfiles.conf)
b2sums=('SKIP'
        '121a7854b5a7ffb60226aaf22eed1f56311ab7d0a5630579525211d5c096040edbcfd2608169a4b6d83e8b4e4855dbb22f8ebf3d52de78a34ea3d4631b7eff36'
        'b2567ca9222da664aa52d290bfdea34bec7f03ea0553888a849aad582fc340c17176ede35abd366ca159615af32617fcc23279f3ce1566422ba22f0e46783cf8'
        '3aabf135c4f18e1ad745ae8800db782b25b15305dfeaaa031b4501408ab7e7d01f66e8ebb5be59fc813cfbff6788d08d2e48dcf24ecc480a40ec9db8dbce9fec'
        'e8f2b19e2474f30a4f984b45787950012668bf0acb5ad1ebb25cd9776925ab4a6aa927f8131ed53e35b1c71b32c504c700fe5b5145ecd25c7a8284373bb951ed')

pkgver() {
  cd ollama
  git describe --long --tags --abbrev=12 | sed 's/v//;s/\([^-]*-g\)/r\1/;s/-/./g;s/\.rc/rc/'
}

build() {
  export CGO_CPPFLAGS="${CPPFLAGS}"
  export CGO_CFLAGS="${CFLAGS}"
  export CGO_CXXFLAGS="${CXXFLAGS}"
  export CGO_LDFLAGS="${LDFLAGS}"
  export GOPATH="${srcdir}"
  export GOFLAGS="-buildmode=pie -mod=readonly -modcacherw '-ldflags=-linkmode=external -compressdwarf=false -X=github.com/ollama/ollama/version.Version=$pkgver -X=github.com/ollama/ollama/server.mode=release'"

  cd ollama

  # Remove the runtime dependencies from installation so CMake doesn't install
  # lots of system dependencies into the target path.
  sed -i 's/PRE_INCLUDE_REGEXES.*/PRE_INCLUDE_REGEXES = ""/' CMakeLists.txt

  local cmake_options=(
    -B build
    -W no-dev
    -D CMAKE_BUILD_TYPE=Release
    -D CMAKE_INSTALL_PREFIX=/usr
    -D OLLAMA_LLAMA_BACKENDS="cuda_v13;rocm_v7_2;vulkan"
    -D AMDGPU_TARGETS="$(rocm-supported-gfx)"
    # Sync GPU targets from CMakePresets.json
    # For CUDA 12
    # -D CMAKE_CUDA_ARCHITECTURES="50;52;53;60;61;62;70;72;75;80;86;87;89;90;90a"
    # for CUDA 13
    -D CMAKE_CUDA_ARCHITECTURES="75;80;86;87;88;89;90;100;103;110;120;121;121-virtual"
  )

  cmake "${cmake_options[@]}"
  cmake --build build
  go build .

  DESTDIR=staging-install cmake --install build
}

package_ollama-git() {
  conflicts=("${pkgname%-git}")
  provides=("${pkgname%-git}=$pkgver")

  cp -r ollama/staging-install/* "$pkgdir"
  rm -r "$pkgdir/usr/lib/ollama/rocm"*
  rm -r "$pkgdir/usr/lib/ollama/cuda"*
  rm -r "$pkgdir/usr/lib/ollama/vulkan"*

  install -Dm755 ${pkgbase%-git}/ollama "$pkgdir/usr/bin/ollama"
  install -dm755 "$pkgdir/var/lib/ollama"
  install -Dm644 ollama.service "$pkgdir/usr/lib/systemd/system/ollama.service"
  install -Dm644 sysusers.conf "$pkgdir/usr/lib/sysusers.d/ollama.conf"
  install -Dm644 tmpfiles.conf "$pkgdir/usr/lib/tmpfiles.d/ollama.conf"
  install -Dm644 ollama/LICENSE "$pkgdir/usr/share/licenses/$pkgname/LICENSE"

  ln -s /var/lib/ollama "$pkgdir/usr/share/ollama"
}

package_ollama-rocm-git() {
  conflicts=("${pkgname%-git}")
  provides=("${pkgname%-git}=$pkgver")
  pkgdesc='Create, run and share large language models (LLMs) with ROCm'
  depends+=(ollama hipblas)

  mkdir -p "$pkgdir/usr/lib/ollama"
  cp -r ollama/staging-install/usr/lib/ollama/rocm* "$pkgdir/usr/lib/ollama"
}

package_ollama-cuda-git() {
  conflicts=("${pkgname%-git}")
  provides=("${pkgname%-git}=$pkgver")
  pkgdesc='Create, run and share large language models (LLMs) with CUDA'
  depends+=(ollama cuda)

  mkdir -p "$pkgdir/usr/lib/ollama"
  cp -r ollama/staging-install/usr/lib/ollama/cuda* "$pkgdir/usr/lib/ollama"
}

package_ollama-vulkan-git() {
  conflicts=("${pkgname%-git}")
  provides=("${pkgname%-git}=$pkgver")
  pkgdesc='Create, run and share large language models (LLMs) with Vulkan'
  depends=(ollama vulkan-icd-loader)

  mkdir -p "$pkgdir/usr/lib/ollama"
  cp -r ollama/staging-install/usr/lib/ollama/vulkan* "$pkgdir/usr/lib/ollama"
}

package_ollama-docs-git() {
  conflicts=("${pkgname%-git}")
  provides=("${pkgname%-git}=$pkgver")
  pkgdesc='Documentation for Ollama'
  depends=()

  install -d "$pkgdir/usr/share/doc"
  cp -r ollama/docs "$pkgdir/usr/share/doc/ollama"
  install -Dm644 ollama/LICENSE "$pkgdir/usr/share/licenses/$pkgname/LICENSE"
}