Skip to content

Commit ee893b0

Browse files
committed
Add musl Compilation
1 parent 5307d5a commit ee893b0

File tree

4 files changed

+203
-5
lines changed

4 files changed

+203
-5
lines changed

.github/workflows/compile.yml

Lines changed: 93 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -76,6 +76,72 @@ jobs:
7676
name: llava-bin-linux-${{ matrix.build }}-x64.so
7777
if-no-files-found: error
7878

79+
compile-musl:
80+
name: Compile (musl)
81+
strategy:
82+
fail-fast: true
83+
matrix:
84+
include:
85+
- build: 'noavx'
86+
defines: '-DGGML_AVX=OFF -DGGML_AVX2=OFF -DGGML_FMA=OFF'
87+
- build: 'avx2'
88+
defines: ''
89+
- build: 'avx'
90+
defines: '-DGGML_AVX2=OFF'
91+
- build: 'avx512'
92+
defines: '-DGGML_AVX512=ON'
93+
runs-on: ubuntu-20.04
94+
container:
95+
image: alpine:latest
96+
steps:
97+
- name: Install dependencies
98+
run: |
99+
apk update && apk add --no-cache \
100+
build-base \
101+
cmake \
102+
git \
103+
linux-headers \
104+
g++
105+
- uses: actions/checkout@v4
106+
with:
107+
repository: ggerganov/llama.cpp
108+
fetch-depth: 0
109+
ref: '${{ github.event.inputs.llama_cpp_commit }}'
110+
- name: Build
111+
id: cmake_build_musl
112+
run: |
113+
mkdir build
114+
cd build
115+
cmake .. ${{ env.COMMON_DEFINE }} ${{ matrix.defines }}
116+
cmake --build . --config Release -j ${env:NUMBER_OF_PROCESSORS}
117+
ls -R
118+
- uses: actions/upload-artifact@v4
119+
with:
120+
path: ./build/bin/libllama.so
121+
name: llama-bin-musl-${{ matrix.build }}-x64.so
122+
if-no-files-found: error
123+
- uses: actions/upload-artifact@v4
124+
with:
125+
path: ./build/bin/libggml.so
126+
name: ggml-bin-musl-${{ matrix.build }}-x64.so
127+
if-no-files-found: error
128+
- uses: actions/upload-artifact@v4
129+
with:
130+
path: ./build/bin/libggml-base.so
131+
name: ggml-base-bin-musl-${{ matrix.build }}-x64.so
132+
if-no-files-found: error
133+
- uses: actions/upload-artifact@v4
134+
with:
135+
path: ./build/bin/libggml-cpu.so
136+
name: ggml-cpu-bin-musl-${{ matrix.build }}-x64.so
137+
if-no-files-found: error
138+
- name: Upload Llava
139+
uses: actions/upload-artifact@v4
140+
with:
141+
path: ./build/bin/libllava_shared.so
142+
name: llava-bin-musl-${{ matrix.build }}-x64.so
143+
if-no-files-found: error
144+
79145
compile-windows:
80146
name: Compile (Windows)
81147
strategy:
@@ -519,6 +585,7 @@ jobs:
519585
if: ${{ always() }}
520586
needs: [
521587
"compile-linux",
588+
"compile-musl",
522589
"compile-windows",
523590
"compile-vulkan",
524591
"compile-cublas",
@@ -534,7 +601,7 @@ jobs:
534601
- name: Rearrange Files
535602
run: |
536603
# Make all directories at once
537-
mkdir --parents deps/{noavx,avx,avx2,avx512,osx-arm64,osx-x64,osx-x64-rosetta2,cu11.7.1,cu12.2.0,vulkan,android-arm64-v8a,android-x86,android-x86_64}
604+
mkdir --parents deps/{noavx,avx,avx2,avx512,musl-noavx,musl-avx,musl-avx2,musl-avx512,osx-arm64,osx-x64,osx-x64-rosetta2,cu11.7.1,cu12.2.0,vulkan,android-arm64-v8a,android-x86,android-x86_64}
538605
539606
# Linux
540607
cp artifacts/ggml-bin-linux-noavx-x64.so/libggml.so deps/noavx/libggml.so
@@ -561,6 +628,31 @@ jobs:
561628
cp artifacts/llama-bin-linux-avx512-x64.so/libllama.so deps/avx512/libllama.so
562629
cp artifacts/llava-bin-linux-avx512-x64.so/libllava_shared.so deps/avx512/libllava_shared.so
563630
631+
# Musl
632+
cp artifacts/ggml-bin-musl-noavx-x64.so/libggml.so deps/musl-noavx/libggml.so
633+
cp artifacts/ggml-base-bin-musl-noavx-x64.so/libggml-base.so deps/musl-noavx/libggml-base.so
634+
cp artifacts/ggml-cpu-bin-musl-noavx-x64.so/libggml-cpu.so deps/musl-noavx/libggml-cpu.so
635+
cp artifacts/llama-bin-musl-noavx-x64.so/libllama.so deps/musl-noavx/libllama.so
636+
cp artifacts/llava-bin-musl-noavx-x64.so/libllava_shared.so deps/musl-noavx/libllava_shared.so
637+
638+
cp artifacts/ggml-bin-musl-avx-x64.so/libggml.so deps/musl-avx/libggml.so
639+
cp artifacts/ggml-base-bin-musl-avx-x64.so/libggml-base.so deps/musl-avx/libggml-base.so
640+
cp artifacts/ggml-cpu-bin-musl-avx-x64.so/libggml-cpu.so deps/musl-avx/libggml-cpu.so
641+
cp artifacts/llama-bin-musl-avx-x64.so/libllama.so deps/musl-avx/libllama.so
642+
cp artifacts/llava-bin-musl-avx-x64.so/libllava_shared.so deps/musl-avx/libllava_shared.so
643+
644+
cp artifacts/ggml-bin-musl-avx2-x64.so/libggml.so deps/musl-avx2/libggml.so
645+
cp artifacts/ggml-base-bin-musl-avx2-x64.so/libggml-base.so deps/musl-avx2/libggml-base.so
646+
cp artifacts/ggml-cpu-bin-musl-avx2-x64.so/libggml-cpu.so deps/musl-avx2/libggml-cpu.so
647+
cp artifacts/llama-bin-musl-avx2-x64.so/libllama.so deps/musl-avx2/libllama.so
648+
cp artifacts/llava-bin-musl-avx2-x64.so/libllava_shared.so deps/musl-avx2/libllava_shared.so
649+
650+
cp artifacts/ggml-bin-musl-avx512-x64.so/libggml.so deps/musl-avx512/libggml.so
651+
cp artifacts/ggml-base-bin-musl-avx512-x64.so/libggml-base.so deps/musl-avx512/libggml-base.so
652+
cp artifacts/ggml-cpu-bin-musl-avx512-x64.so/libggml-cpu.so deps/musl-avx512/libggml-cpu.so
653+
cp artifacts/llama-bin-musl-avx512-x64.so/libllama.so deps/musl-avx512/libllama.so
654+
cp artifacts/llava-bin-musl-avx512-x64.so/libllava_shared.so deps/musl-avx512/libllava_shared.so
655+
564656
# Windows
565657
cp artifacts/ggml-bin-win-noavx-x64.dll/ggml.dll deps/noavx/ggml.dll
566658
cp artifacts/ggml-base-bin-win-noavx-x64.dll/ggml-base.dll deps/noavx/ggml-base.dll

LLama/LLamaSharp.Runtime.targets

Lines changed: 70 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -200,6 +200,7 @@
200200
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
201201
<Link>runtimes/linux-x64/native/avx512/libggml-cpu.so</Link>
202202
</None>
203+
203204

204205
<None Include="$(MSBuildThisFileDirectory)runtimes/deps/cu11.7.1/libllama.so">
205206
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
@@ -253,6 +254,75 @@
253254
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
254255
<Link>runtimes/linux-x64/native/vulkan/libggml-vulkan.so</Link>
255256
</None>
257+
258+
259+
<None Include="$(MSBuildThisFileDirectory)runtimes/deps/musl-noavx/libllama.so">
260+
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
261+
<Link>runtimes/linux-musl-x64/native/noavx/libllama.so</Link>
262+
</None>
263+
<None Include="$(MSBuildThisFileDirectory)runtimes/deps/noavx/libggml.so">
264+
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
265+
<Link>runtimes/linux-musl-x64/native/noavx/libggml.so</Link>
266+
</None>
267+
<None Include="$(MSBuildThisFileDirectory)runtimes/deps/musl-noavx/libggml-base.so">
268+
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
269+
<Link>runtimes/linux-musl-x64/native/noavx/libggml-base.so</Link>
270+
</None>
271+
<None Include="$(MSBuildThisFileDirectory)runtimes/deps/musl-noavx/libggml-cpu.so">
272+
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
273+
<Link>runtimes/linux-musl-x64/native/noavx/libggml-cpu.so</Link>
274+
</None>
275+
276+
<None Include="$(MSBuildThisFileDirectory)runtimes/deps/musl-avx/libllama.so">
277+
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
278+
<Link>runtimes/linux-musl-x64/native/avx/libllama.so</Link>
279+
</None>
280+
<None Include="$(MSBuildThisFileDirectory)runtimes/deps/musl-avx/libggml.so">
281+
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
282+
<Link>runtimes/linux-musl-x64/native/avx/libggml.so</Link>
283+
</None>
284+
<None Include="$(MSBuildThisFileDirectory)runtimes/deps/musl-avx/libggml-base.so">
285+
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
286+
<Link>runtimes/linux-musl-x64/native/avx/libggml-base.so</Link>
287+
</None>
288+
<None Include="$(MSBuildThisFileDirectory)runtimes/deps/musl-avx/libggml-cpu.so">
289+
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
290+
<Link>runtimes/linux-musl-x64/native/avx/libggml-cpu.so</Link>
291+
</None>
292+
293+
<None Include="$(MSBuildThisFileDirectory)runtimes/deps/musl-avx2/libllama.so">
294+
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
295+
<Link>runtimes/linux-musl-x64/native/avx2/libllama.so</Link>
296+
</None>
297+
<None Include="$(MSBuildThisFileDirectory)runtimes/deps/musl-avx2/libggml.so">
298+
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
299+
<Link>runtimes/linux-musl-x64/native/avx2/libggml.so</Link>
300+
</None>
301+
<None Include="$(MSBuildThisFileDirectory)runtimes/deps/musl-avx2/libggml-base.so">
302+
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
303+
<Link>runtimes/linux-musl-x64/native/avx2/libggml-base.so</Link>
304+
</None>
305+
<None Include="$(MSBuildThisFileDirectory)runtimes/deps/musl-avx2/libggml-cpu.so">
306+
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
307+
<Link>runtimes/linux-musl-x64/native/avx2/libggml-cpu.so</Link>
308+
</None>
309+
310+
<None Include="$(MSBuildThisFileDirectory)runtimes/deps/musl-avx512/libllama.so">
311+
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
312+
<Link>runtimes/linux-musl-x64/native/avx512/libllama.so</Link>
313+
</None>
314+
<None Include="$(MSBuildThisFileDirectory)runtimes/deps/musl-avx512/libggml.so">
315+
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
316+
<Link>runtimes/linux-musl-x64/native/avx512/libggml.so</Link>
317+
</None>
318+
<None Include="$(MSBuildThisFileDirectory)runtimes/deps/musl-avx512/libggml-base.so">
319+
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
320+
<Link>runtimes/linux-musl-x64/native/avx512/libggml-base.so</Link>
321+
</None>
322+
<None Include="$(MSBuildThisFileDirectory)runtimes/deps/musl-avx512/libggml-cpu.so">
323+
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
324+
<Link>runtimes/linux-musl-x64/native/avx512/libggml-cpu.so</Link>
325+
</None>
256326

257327

258328
<None Include="$(MSBuildThisFileDirectory)runtimes/deps/osx-arm64/libggml-base.dylib">

LLama/Native/Load/NativeLibraryUtils.cs

Lines changed: 16 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -218,10 +218,22 @@ public static void GetPlatformPathParts(OSPlatform platform, out string os, out
218218

219219
if (platform == OSPlatform.Linux)
220220
{
221-
os = "linux-x64";
222-
fileExtension = ".so";
223-
libPrefix = "lib";
224-
return;
221+
if(RuntimeInformation.RuntimeIdentifier.ToLower().StartsWith("alpine"))
222+
{
223+
// alpine linux distro
224+
os = "linux-musl-x64";
225+
fileExtension = ".so";
226+
libPrefix = "lib";
227+
return;
228+
}
229+
else
230+
{
231+
// other linux distro
232+
os = "linux-x64";
233+
fileExtension = ".so";
234+
libPrefix = "lib";
235+
return;
236+
}
225237
}
226238

227239
if (platform == OSPlatform.OSX)

LLama/runtimes/build/LLamaSharp.Backend.Cpu.nuspec

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -65,7 +65,31 @@
6565
<file src="runtimes/deps/avx512/libggml-cpu.so" target="runtimes\linux-x64\native\avx512\libggml-cpu.so" />
6666
<file src="runtimes/deps/avx512/libllama.so" target="runtimes\linux-x64\native\avx512\libllama.so" />
6767
<file src="runtimes/deps/avx512/libllava_shared.so" target="runtimes\linux-x64\native\avx512\libllava_shared.so" />
68+
69+
<file src="runtimes/deps/musl-noavx/libggml.so" target="runtimes\linux-musl-x64\native\noavx\libggml.so" />
70+
<file src="runtimes/deps/musl-noavx/libggml-base.so" target="runtimes\linux-musl-x64\native\noavx\libggml-base.so" />
71+
<file src="runtimes/deps/musl-noavx/libggml-cpu.so" target="runtimes\linux-musl-x64\native\noavx\libggml-cpu.so" />
72+
<file src="runtimes/deps/musl-noavx/libllama.so" target="runtimes\linux-musl-x64\native\noavx\libllama.so" />
73+
<file src="runtimes/deps/musl-noavx/libllava_shared.so" target="runtimes\linux-musl-x64\native\noavx\libllava_shared.so" />
6874

75+
<file src="runtimes/deps/musl-avx/libggml.so" target="runtimes\linux-musl-x64\native\avx\libggml.so" />
76+
<file src="runtimes/deps/musl-avx/libggml-base.so" target="runtimes\linux-musl-x64\native\avx\libggml-base.so" />
77+
<file src="runtimes/deps/musl-avx/libggml-cpu.so" target="runtimes\linux-musl-x64\native\avx\libggml-cpu.so" />
78+
<file src="runtimes/deps/musl-avx/libllama.so" target="runtimes\linux-musl-x64\native\avx\libllama.so" />
79+
<file src="runtimes/deps/musl-avx/libllava_shared.so" target="runtimes\linux-musl-x64\native\avx\libllava_shared.so" />
80+
81+
<file src="runtimes/deps/musl-avx2/libggml.so" target="runtimes\linux-musl-x64\native\avx2\libggml.so" />
82+
<file src="runtimes/deps/musl-avx2/libggml-base.so" target="runtimes\linux-musl-x64\native\avx2\libggml-base.so" />
83+
<file src="runtimes/deps/musl-avx2/libggml-cpu.so" target="runtimes\linux-musl-x64\native\avx2\libggml-cpu.so" />
84+
<file src="runtimes/deps/musl-avx2/libllama.so" target="runtimes\linux-musl-x64\native\avx2\libllama.so" />
85+
<file src="runtimes/deps/musl-avx2/libllava_shared.so" target="runtimes\linux-musl-x64\native\avx2\libllava_shared.so" />
86+
87+
<file src="runtimes/deps/musl-avx512/libggml.so" target="runtimes\linux-musl-x64\native\avx512\libggml.so" />
88+
<file src="runtimes/deps/musl-avx512/libggml-base.so" target="runtimes\linux-musl-x64\native\avx512\libggml-base.so" />
89+
<file src="runtimes/deps/musl-avx512/libggml-cpu.so" target="runtimes\linux-musl-x64\native\avx512\libggml-cpu.so" />
90+
<file src="runtimes/deps/musl-avx512/libllama.so" target="runtimes\linux-musl-x64\native\avx512\libllama.so" />
91+
<file src="runtimes/deps/musl-avx512/libllava_shared.so" target="runtimes\linux-musl-x64\native\avx512\libllava_shared.so" />
92+
6993
<file src="runtimes/deps/osx-x64/libggml.dylib" target="runtimes\osx-x64\native\libggml.dylib" />
7094
<file src="runtimes/deps/osx-x64/libggml-base.dylib" target="runtimes\osx-x64\native\libggml-base.dylib" />
7195
<file src="runtimes/deps/osx-x64/libggml-cpu.dylib" target="runtimes\osx-x64\native\libggml-cpu.dylib" />

0 commit comments

Comments
 (0)