1name: Build on Linux using cross-compiler
2on:
3 workflow_dispatch:
4 workflow_call:
5
6jobs:
7 # ubuntu-24-riscv64-cpu-cross:
8 # runs-on: ubuntu-24.04
9
10 # steps:
11 # - uses: actions/checkout@v6
12 # - name: Setup Riscv
13 # run: |
14 # sudo dpkg --add-architecture riscv64
15
16 # # Add arch-specific repositories for non-amd64 architectures
17 # cat << EOF | sudo tee /etc/apt/sources.list.d/riscv64-ports.list
18 # deb [arch=riscv64] http://ports.ubuntu.com/ubuntu-ports/ noble main universe
19 # deb [arch=riscv64] http://ports.ubuntu.com/ubuntu-ports/ noble-updates main universe
20 # deb [arch=riscv64] http://ports.ubuntu.com/ubuntu-ports/ noble-security main universe
21 # deb [arch=riscv64] http://ports.ubuntu.com/ubuntu-ports/ noble-backports main universe
22 # EOF
23
24 # sudo apt-get update || true ;# Prevent failure due to missing URLs.
25
26 # sudo apt-get install -y --no-install-recommends \
27 # build-essential \
28 # gcc-14-riscv64-linux-gnu \
29 # g++-14-riscv64-linux-gnu
30
31 # - name: Build
32 # run: |
33 # cmake -B build -DLLAMA_OPENSSL=OFF \
34 # -DCMAKE_BUILD_TYPE=Release \
35 # -DGGML_OPENMP=OFF \
36 # -DLLAMA_BUILD_EXAMPLES=ON \
37 # -DLLAMA_BUILD_TOOLS=ON \
38 # -DLLAMA_BUILD_TESTS=OFF \
39 # -DCMAKE_SYSTEM_NAME=Linux \
40 # -DCMAKE_SYSTEM_PROCESSOR=riscv64 \
41 # -DCMAKE_C_COMPILER=riscv64-linux-gnu-gcc-14 \
42 # -DCMAKE_CXX_COMPILER=riscv64-linux-gnu-g++-14 \
43 # -DCMAKE_POSITION_INDEPENDENT_CODE=ON \
44 # -DCMAKE_FIND_ROOT_PATH=/usr/lib/riscv64-linux-gnu \
45 # -DCMAKE_FIND_ROOT_PATH_MODE_PROGRAM=NEVER \
46 # -DCMAKE_FIND_ROOT_PATH_MODE_LIBRARY=ONLY \
47 # -DCMAKE_FIND_ROOT_PATH_MODE_INCLUDE=BOTH
48
49 # cmake --build build --config Release -j $(nproc)
50
51 # ubuntu-24-riscv64-vulkan-cross:
52 # runs-on: ubuntu-24.04
53
54 # steps:
55 # - uses: actions/checkout@v6
56 # - name: Setup Riscv
57 # run: |
58 # sudo dpkg --add-architecture riscv64
59
60 # # Add arch-specific repositories for non-amd64 architectures
61 # cat << EOF | sudo tee /etc/apt/sources.list.d/riscv64-ports.list
62 # deb [arch=riscv64] http://ports.ubuntu.com/ubuntu-ports/ noble main universe
63 # deb [arch=riscv64] http://ports.ubuntu.com/ubuntu-ports/ noble-updates main universe
64 # deb [arch=riscv64] http://ports.ubuntu.com/ubuntu-ports/ noble-security main universe
65 # deb [arch=riscv64] http://ports.ubuntu.com/ubuntu-ports/ noble-backports main universe
66 # EOF
67
68 # sudo apt-get update || true ;# Prevent failure due to missing URLs.
69
70 # sudo apt-get install -y --no-install-recommends \
71 # build-essential \
72 # glslc \
73 # gcc-14-riscv64-linux-gnu \
74 # g++-14-riscv64-linux-gnu \
75 # libvulkan-dev:riscv64
76
77 # - name: Build
78 # run: |
79 # cmake -B build -DLLAMA_OPENSSL=OFF \
80 # -DCMAKE_BUILD_TYPE=Release \
81 # -DGGML_VULKAN=ON \
82 # -DGGML_OPENMP=OFF \
83 # -DLLAMA_BUILD_EXAMPLES=ON \
84 # -DLLAMA_BUILD_TOOLS=ON \
85 # -DLLAMA_BUILD_TESTS=OFF \
86 # -DCMAKE_SYSTEM_NAME=Linux \
87 # -DCMAKE_SYSTEM_PROCESSOR=riscv64 \
88 # -DCMAKE_C_COMPILER=riscv64-linux-gnu-gcc-14 \
89 # -DCMAKE_CXX_COMPILER=riscv64-linux-gnu-g++-14 \
90 # -DCMAKE_POSITION_INDEPENDENT_CODE=ON \
91 # -DCMAKE_FIND_ROOT_PATH=/usr/lib/riscv64-linux-gnu \
92 # -DCMAKE_FIND_ROOT_PATH_MODE_PROGRAM=NEVER \
93 # -DCMAKE_FIND_ROOT_PATH_MODE_LIBRARY=ONLY \
94 # -DCMAKE_FIND_ROOT_PATH_MODE_INCLUDE=BOTH
95
96 # cmake --build build --config Release -j $(nproc)
97
98 # ubuntu-24-arm64-vulkan-cross:
99 # runs-on: ubuntu-24.04
100
101 # steps:
102 # - uses: actions/checkout@v6
103 # - name: Setup Arm64
104 # run: |
105 # sudo dpkg --add-architecture arm64
106
107 # # Add arch-specific repositories for non-amd64 architectures
108 # cat << EOF | sudo tee /etc/apt/sources.list.d/arm64-ports.list
109 # deb [arch=arm64] http://ports.ubuntu.com/ubuntu-ports/ noble main universe
110 # deb [arch=arm64] http://ports.ubuntu.com/ubuntu-ports/ noble-updates main universe
111 # deb [arch=arm64] http://ports.ubuntu.com/ubuntu-ports/ noble-security main universe
112 # deb [arch=arm64] http://ports.ubuntu.com/ubuntu-ports/ noble-backports main universe
113 # EOF
114
115 # sudo apt-get update || true ;# Prevent failure due to missing URLs.
116
117 # sudo apt-get install -y --no-install-recommends \
118 # build-essential \
119 # glslc \
120 # crossbuild-essential-arm64 \
121 # libvulkan-dev:arm64
122
123 # - name: Build
124 # run: |
125 # cmake -B build -DLLAMA_OPENSSL=OFF \
126 # -DCMAKE_BUILD_TYPE=Release \
127 # -DGGML_VULKAN=ON \
128 # -DGGML_OPENMP=OFF \
129 # -DLLAMA_BUILD_EXAMPLES=ON \
130 # -DLLAMA_BUILD_TOOLS=ON \
131 # -DLLAMA_BUILD_TESTS=OFF \
132 # -DCMAKE_SYSTEM_NAME=Linux \
133 # -DCMAKE_SYSTEM_PROCESSOR=aarch64 \
134 # -DCMAKE_C_COMPILER=aarch64-linux-gnu-gcc \
135 # -DCMAKE_CXX_COMPILER=aarch64-linux-gnu-g++ \
136 # -DCMAKE_POSITION_INDEPENDENT_CODE=ON \
137 # -DCMAKE_FIND_ROOT_PATH=/usr/lib/aarch64-linux-gnu \
138 # -DCMAKE_FIND_ROOT_PATH_MODE_PROGRAM=NEVER \
139 # -DCMAKE_FIND_ROOT_PATH_MODE_LIBRARY=ONLY \
140 # -DCMAKE_FIND_ROOT_PATH_MODE_INCLUDE=BOTH
141
142 # cmake --build build --config Release -j $(nproc)
143
144 debian-13-loongarch64-cpu-cross:
145 runs-on: ubuntu-24.04
146 container: debian@sha256:653dfb9f86c3782e8369d5f7d29bb8faba1f4bff9025db46e807fa4c22903671
147
148 steps:
149 - uses: actions/checkout@v6
150 - name: Setup LoongArch
151 run: |
152 rm -f /etc/apt/sources.list.d/*
153 cat << EOF | tee /etc/apt/sources.list.d/debian-ports.list
154 deb http://snapshot.debian.org/archive/debian/20250515T202920Z/ trixie main
155 EOF
156 ( echo 'quiet "true";'; \
157 echo 'APT::Get::Assume-Yes "true";'; \
158 echo 'APT::Install-Recommends "false";'; \
159 echo 'Acquire::Check-Valid-Until "false";'; \
160 echo 'Acquire::Retries "5";'; \
161 ) > /etc/apt/apt.conf.d/99snapshot-repos
162
163 apt-get update
164 apt-get install -y ca-certificates debian-ports-archive-keyring cmake git zip
165 dpkg --add-architecture loong64
166
167 # Add arch-specific repositories for non-amd64 architectures
168 cat << EOF | tee /etc/apt/sources.list.d/loong64-ports.list
169 deb [arch=loong64] http://snapshot.debian.org/archive/debian-ports/20250515T194251Z/ sid main
170 EOF
171
172 apt-get update || true ;# Prevent failure due to missing URLs.
173
174 apt-get install -y --no-install-recommends \
175 build-essential \
176 gcc-14-loongarch64-linux-gnu \
177 g++-14-loongarch64-linux-gnu
178
179 - name: Build
180 run: |
181 cmake -B build -DLLAMA_OPENSSL=OFF \
182 -DCMAKE_BUILD_TYPE=Release \
183 -DGGML_OPENMP=OFF \
184 -DLLAMA_BUILD_EXAMPLES=ON \
185 -DLLAMA_BUILD_TOOLS=ON \
186 -DLLAMA_BUILD_TESTS=OFF \
187 -DCMAKE_SYSTEM_NAME=Linux \
188 -DCMAKE_SYSTEM_PROCESSOR=loongarch64 \
189 -DCMAKE_C_COMPILER=loongarch64-linux-gnu-gcc-14 \
190 -DCMAKE_CXX_COMPILER=loongarch64-linux-gnu-g++-14 \
191 -DCMAKE_POSITION_INDEPENDENT_CODE=ON \
192 -DCMAKE_FIND_ROOT_PATH=/usr/lib/loongarch64-linux-gnu \
193 -DCMAKE_FIND_ROOT_PATH_MODE_PROGRAM=NEVER \
194 -DCMAKE_FIND_ROOT_PATH_MODE_LIBRARY=ONLY \
195 -DCMAKE_FIND_ROOT_PATH_MODE_INCLUDE=BOTH
196
197 cmake --build build --config Release -j $(nproc)
198
199 debian-13-loongarch64-vulkan-cross:
200 runs-on: ubuntu-24.04
201 container: debian@sha256:653dfb9f86c3782e8369d5f7d29bb8faba1f4bff9025db46e807fa4c22903671
202
203 steps:
204 - uses: actions/checkout@v6
205 - name: Setup LoongArch
206 run: |
207 rm -f /etc/apt/sources.list.d/*
208 cat << EOF | tee /etc/apt/sources.list.d/debian-ports.list
209 deb http://snapshot.debian.org/archive/debian/20250515T202920Z/ trixie main
210 EOF
211 ( echo 'quiet "true";'; \
212 echo 'APT::Get::Assume-Yes "true";'; \
213 echo 'APT::Install-Recommends "false";'; \
214 echo 'Acquire::Check-Valid-Until "false";'; \
215 echo 'Acquire::Retries "5";'; \
216 ) > /etc/apt/apt.conf.d/99snapshot-repos
217
218 apt-get update
219 apt-get install -y ca-certificates debian-ports-archive-keyring cmake git zip
220 dpkg --add-architecture loong64
221
222 # Add arch-specific repositories for non-amd64 architectures
223 cat << EOF | tee /etc/apt/sources.list.d/loong64-ports.list
224 deb [arch=loong64] http://snapshot.debian.org/archive/debian-ports/20250515T194251Z/ sid main
225 EOF
226
227 apt-get update || true ;# Prevent failure due to missing URLs.
228
229 apt-get install -y --no-install-recommends \
230 build-essential \
231 glslc \
232 gcc-14-loongarch64-linux-gnu \
233 g++-14-loongarch64-linux-gnu \
234 libvulkan-dev:loong64
235
236 - name: Build
237 run: |
238 cmake -B build -DLLAMA_OPENSSL=OFF \
239 -DCMAKE_BUILD_TYPE=Release \
240 -DGGML_VULKAN=ON \
241 -DGGML_OPENMP=OFF \
242 -DLLAMA_BUILD_EXAMPLES=ON \
243 -DLLAMA_BUILD_TOOLS=ON \
244 -DLLAMA_BUILD_TESTS=OFF \
245 -DCMAKE_SYSTEM_NAME=Linux \
246 -DCMAKE_SYSTEM_PROCESSOR=loongarch64 \
247 -DCMAKE_C_COMPILER=loongarch64-linux-gnu-gcc-14 \
248 -DCMAKE_CXX_COMPILER=loongarch64-linux-gnu-g++-14 \
249 -DCMAKE_POSITION_INDEPENDENT_CODE=ON \
250 -DCMAKE_FIND_ROOT_PATH=/usr/lib/loongarch64-linux-gnu \
251 -DCMAKE_FIND_ROOT_PATH_MODE_PROGRAM=NEVER \
252 -DCMAKE_FIND_ROOT_PATH_MODE_LIBRARY=ONLY \
253 -DCMAKE_FIND_ROOT_PATH_MODE_INCLUDE=BOTH
254
255 cmake --build build --config Release -j $(nproc)
256
257 ubuntu-24-riscv64-cpu-spacemit-ime-cross:
258 runs-on: ubuntu-24.04
259
260 env:
261 # Make sure this is in sync with build-cache.yml
262 SPACEMIT_IME_TOOLCHAIN_VERSION: "1.1.2"
263
264 steps:
265 - uses: actions/checkout@v6
266
267 - name: Use SpacemiT Toolchain Cache
268 uses: actions/cache@v5
269 id: cache-toolchain
270 with:
271 path: ./spacemit_toolchain
272 key: spacemit-ime-toolchain-v${{ env.SPACEMIT_IME_TOOLCHAIN_VERSION }}-${{ runner.os }}
273
274 - name: Setup SpacemiT Toolchain
275 if: steps.cache-toolchain.outputs.cache-hit != 'true'
276 uses: ./.github/actions/linux-setup-spacemit
277 with:
278 path: ./spacemit_toolchain
279 version: ${{ env.SPACEMIT_IME_TOOLCHAIN_VERSION }}
280
281 - name: Build
282 run: |
283 export RISCV_ROOT_PATH=${PWD}/spacemit_toolchain
284 cmake -B build -DLLAMA_OPENSSL=OFF \
285 -DCMAKE_BUILD_TYPE=Release \
286 -DGGML_OPENMP=OFF \
287 -DLLAMA_BUILD_EXAMPLES=ON \
288 -DLLAMA_BUILD_TOOLS=ON \
289 -DLLAMA_BUILD_TESTS=OFF \
290 -DGGML_CPU_RISCV64_SPACEMIT=ON \
291 -DGGML_RVV=ON \
292 -DGGML_RV_ZFH=ON \
293 -DGGML_RV_ZICBOP=ON \
294 -DGGML_RV_ZIHINTPAUSE=ON \
295 -DRISCV64_SPACEMIT_IME_SPEC=RISCV64_SPACEMIT_IME1 \
296 -DCMAKE_TOOLCHAIN_FILE=${PWD}/cmake/riscv64-spacemit-linux-gnu-gcc.cmake
297
298 cmake --build build --config Release -j $(nproc)