build-linux-cross.yml 13 KB

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