Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 4 additions & 8 deletions .github/workflows/ci.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -28,10 +28,8 @@ jobs:
include:
- os: ubuntu-latest
platform: linux-amd64
- os: macos-13
platform: darwin-amd64
# - os: macos-latest # enable when darwin-arm64 prebuilt .a files are added
# platform: darwin-arm64
- os: macos-latest
platform: darwin-arm64
steps:
- uses: actions/checkout@v4
- uses: actions/setup-go@v5
Expand All @@ -51,10 +49,8 @@ jobs:
include:
- os: ubuntu-latest
platform: linux-amd64
- os: macos-13
platform: darwin-amd64
# - os: macos-latest
# platform: darwin-arm64
- os: macos-latest
platform: darwin-arm64
steps:
- uses: actions/checkout@v4
- uses: actions/setup-go@v5
Expand Down
42 changes: 41 additions & 1 deletion Dockerfile.libs
Original file line number Diff line number Diff line change
Expand Up @@ -3,9 +3,12 @@
# Usage:
# docker build -f Dockerfile.libs -o ./out .
#
# Build + link test (ensures .a files link correctly):
# docker build -f Dockerfile.libs --target build-test .
#
# This extracts prebuilt .a files + headers into ./out/ on the host.

FROM golang:1.24-bullseye AS builder
FROM golang:1.24-bookworm AS builder

RUN apt-get update && apt-get install -y --no-install-recommends \
build-essential cmake wget && \
Expand Down Expand Up @@ -58,6 +61,43 @@ RUN mkdir -p /out/whisper.cpp/linux-amd64 /out/whisper.cpp/include /out/whisper.
cp whisper-src/include/*.h /out/whisper.cpp/include/ && \
cp whisper-src/ggml/include/*.h /out/whisper.cpp/ggml/include/

# ============================================================================
# Build test — verifies the .a files link correctly with Go CGO
# ============================================================================
FROM golang:1.24-bookworm AS build-test

RUN apt-get update && apt-get install -y --no-install-recommends \
build-essential libgomp1 && \
rm -rf /var/lib/apt/lists/*

WORKDIR /src
COPY . .

# Copy freshly built .a files into the source tree
COPY --from=builder /out/llama.cpp/linux-amd64/ /src/ggml/llamacpp/third_party/prebuilt/linux-amd64/
COPY --from=builder /out/llama.cpp/include/ /src/ggml/llamacpp/third_party/include/
COPY --from=builder /out/llama.cpp/ggml/include/ /src/ggml/llamacpp/third_party/ggml/include/
COPY --from=builder /out/llama.cpp/common/ /src/ggml/llamacpp/third_party/common/
COPY --from=builder /out/whisper.cpp/linux-amd64/ /src/ggml/whispercpp/third_party/prebuilt/linux-amd64/
COPY --from=builder /out/whisper.cpp/include/ /src/ggml/whispercpp/third_party/include/
COPY --from=builder /out/whisper.cpp/ggml/include/ /src/ggml/whispercpp/third_party/ggml/include/

# Test stub builds (no CGO)
RUN CGO_ENABLED=0 go build ./ggml/llamacpp/... && \
CGO_ENABLED=0 go build ./ggml/whispercpp/... && \
echo "stub builds OK"

# Test CGO builds (link against .a files)
RUN CGO_ENABLED=1 go build -tags llamacpp ./ggml/llamacpp/... && \
echo "llamacpp CGO build OK"
RUN CGO_ENABLED=1 go build -tags whispercpp ./ggml/whispercpp/... && \
echo "whispercpp CGO build OK"

# Run stub tests
RUN CGO_ENABLED=0 go test ./ggml/llamacpp/... && \
CGO_ENABLED=0 go test ./ggml/whispercpp/... && \
echo "all tests passed"

# Output stage — docker build -o extracts from here
FROM scratch
COPY --from=builder /out/ /
6 changes: 3 additions & 3 deletions ggml/llamacpp/llamacpp.go
Original file line number Diff line number Diff line change
Expand Up @@ -14,9 +14,9 @@ package llamacpp
#cgo darwin,amd64 LDFLAGS: -L${SRCDIR}/third_party/prebuilt/darwin-amd64
#cgo linux,amd64 LDFLAGS: -L${SRCDIR}/third_party/prebuilt/linux-amd64
#cgo linux,arm64 LDFLAGS: -L${SRCDIR}/third_party/prebuilt/linux-arm64
#cgo LDFLAGS: -lcommon -lllama -lggml-cpu -lggml-base -lggml -lstdc++ -lm
#cgo darwin LDFLAGS: -lggml-blas -lggml-metal -L/usr/local/opt/libomp/lib -L/opt/homebrew/opt/libomp/lib -lomp -framework Accelerate -framework Metal -framework Foundation
#cgo linux LDFLAGS: -lpthread -ldl -lrt -lgomp
#cgo LDFLAGS: -lstdc++ -lm
#cgo darwin LDFLAGS: -lcommon -lllama -lggml-cpu -lggml-base -lggml -lggml-blas -lggml-metal -L/usr/local/opt/libomp/lib -L/opt/homebrew/opt/libomp/lib -lomp -framework Accelerate -framework Metal -framework Foundation
#cgo linux LDFLAGS: -Wl,--start-group -lcommon -lllama -lggml-cpu -lggml-base -lggml -Wl,--end-group -lpthread -ldl -lrt -lgomp
#include <stdlib.h>
#include <stdbool.h>
#include "wrapper.h"
Expand Down
Binary file modified ggml/llamacpp/third_party/prebuilt/linux-amd64/libcommon.a
Binary file not shown.
Binary file not shown.
Binary file modified ggml/llamacpp/third_party/prebuilt/linux-amd64/libggml-base.a
Binary file not shown.
Binary file modified ggml/llamacpp/third_party/prebuilt/linux-amd64/libggml-cpu.a
Binary file not shown.
Binary file modified ggml/llamacpp/third_party/prebuilt/linux-amd64/libggml.a
Binary file not shown.
Binary file modified ggml/llamacpp/third_party/prebuilt/linux-amd64/libllama.a
Binary file not shown.
Binary file modified ggml/llamacpp/third_party/prebuilt/linux-amd64/libmtmd.a
Binary file not shown.
Binary file not shown.
Binary file modified ggml/whispercpp/third_party/prebuilt/linux-amd64/libcommon.a
Binary file not shown.
Binary file modified ggml/whispercpp/third_party/prebuilt/linux-amd64/libggml-base.a
Binary file not shown.
Binary file modified ggml/whispercpp/third_party/prebuilt/linux-amd64/libggml-cpu.a
Binary file not shown.
Binary file modified ggml/whispercpp/third_party/prebuilt/linux-amd64/libggml.a
Binary file not shown.
Binary file modified ggml/whispercpp/third_party/prebuilt/linux-amd64/libwhisper.a
Binary file not shown.
6 changes: 3 additions & 3 deletions ggml/whispercpp/whispercpp.go
Original file line number Diff line number Diff line change
Expand Up @@ -14,9 +14,9 @@ package whispercpp
#cgo darwin,amd64 LDFLAGS: -L${SRCDIR}/third_party/prebuilt/darwin-amd64
#cgo linux,amd64 LDFLAGS: -L${SRCDIR}/third_party/prebuilt/linux-amd64
#cgo linux,arm64 LDFLAGS: -L${SRCDIR}/third_party/prebuilt/linux-arm64
#cgo LDFLAGS: -lwhisper -lcommon -lggml-cpu -lggml-base -lggml -lstdc++ -lm
#cgo darwin LDFLAGS: -lggml-blas -lggml-metal -L/usr/local/opt/libomp/lib -L/opt/homebrew/opt/libomp/lib -lomp -framework Accelerate -framework Metal -framework Foundation
#cgo linux LDFLAGS: -lpthread -ldl -lrt -lgomp
#cgo LDFLAGS: -lstdc++ -lm
#cgo darwin LDFLAGS: -lwhisper -lcommon -lggml-cpu -lggml-base -lggml -lggml-blas -lggml-metal -L/usr/local/opt/libomp/lib -L/opt/homebrew/opt/libomp/lib -lomp -framework Accelerate -framework Metal -framework Foundation
#cgo linux LDFLAGS: -Wl,--start-group -lwhisper -lcommon -lggml-cpu -lggml-base -lggml -Wl,--end-group -lpthread -ldl -lrt -lgomp
#include <stdlib.h>
#include "whisper.h"
*/
Expand Down
2 changes: 1 addition & 1 deletion version.go
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
package gonativeml

const (
Version = "v0.1.0"
Version = "v0.1.1"
LlamaCppVersion = "b8220"
WhisperCppVersion = "v1.8.3"
)
Loading