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)