add full source: transcribe pipeline, HTTP API, OpenAI endpoint, web UI, Docker
This commit is contained in:
@@ -0,0 +1,82 @@
|
||||
# Makefile for record-asr — a Go HTTP transcription service built on
|
||||
# sherpa-onnx (SenseVoiceSmall int8 + silero VAD).
|
||||
#
|
||||
# Targets:
|
||||
# make build a *portable* native binary into dist/<arch>/,
|
||||
# with the sherpa/onnxruntime .so files copied next to it
|
||||
# and an $ORIGIN/lib rpath baked in so it runs anywhere.
|
||||
# make build-amd64 same, for linux/amd64 (native here).
|
||||
# make build-arm64 cross-compile for linux/arm64
|
||||
# (needs: apt-get install gcc-aarch64-linux-gnu).
|
||||
# make dist build both arches and produce tarballs in dist/.
|
||||
# make run build native, then run with ./data and default env.
|
||||
# make tidy/clean/check.
|
||||
#
|
||||
# All runtime behavior is controlled by ASR_* environment variables, not build
|
||||
# flags — see README.md.
|
||||
|
||||
VERSION ?= $(shell git describe --tags --always 2>/dev/null || echo dev)
|
||||
MODCACHE := $(shell go env GOMODCACHE)
|
||||
SHERPA_LINUX := $(MODCACHE)/github.com/k2-fsa/[email protected]
|
||||
|
||||
# RPATH baked into every binary so it finds the .so files shipped in ./lib
|
||||
# next to it, regardless of where the bundle is unpacked. $$ORIGIN -> $ORIGIN
|
||||
# (a dynamic-loader token = directory of the executable).
|
||||
ORIGIN_RPATH := '-Wl,-rpath,$$ORIGIN/lib'
|
||||
|
||||
.PHONY: all build build-amd64 build-arm64 dist run tidy clean check
|
||||
|
||||
all: build
|
||||
|
||||
# Portable native build for whatever arch `go env GOARCH` reports.
|
||||
build:
|
||||
@arch=$$(go env GOARCH); \
|
||||
case $$arch in \
|
||||
amd64) lib=x86_64-unknown-linux-gnu;; \
|
||||
arm64) lib=aarch64-unknown-linux-gnu;; \
|
||||
arm) lib=arm-unknown-linux-gnueabihf;; \
|
||||
*) echo "unsupported arch: $$arch"; exit 1;; \
|
||||
esac; \
|
||||
dist=dist/$$arch; mkdir -p $$dist/lib; \
|
||||
echo ">> building $$dist/record-asr ($$arch)"; \
|
||||
CGO_ENABLED=1 CGO_LDFLAGS=$(ORIGIN_RPATH) go build -trimpath -o $$dist/record-asr .; \
|
||||
cp $(SHERPA_LINUX)/lib/$$lib/*.so $$dist/lib/; \
|
||||
echo ">> built $$dist/record-asr (run with: ./$$dist/record-asr)"
|
||||
|
||||
# Explicit linux/amd64 (native toolchain).
|
||||
build-amd64:
|
||||
@dist=dist/amd64; mkdir -p $$dist/lib; \
|
||||
echo ">> building $$dist/record-asr (amd64)"; \
|
||||
CGO_ENABLED=1 CGO_LDFLAGS=$(ORIGIN_RPATH) go build -trimpath -o $$dist/record-asr .; \
|
||||
cp $(SHERPA_LINUX)/lib/x86_64-unknown-linux-gnu/*.so $$dist/lib/; \
|
||||
echo ">> built $$dist/record-asr"
|
||||
|
||||
# Cross-compile to linux/arm64. Requires a C cross-compiler:
|
||||
# sudo apt-get install gcc-aarch64-linux-gnu
|
||||
build-arm64:
|
||||
@dist=dist/arm64; mkdir -p $$dist/lib; \
|
||||
echo ">> building $$dist/record-asr (arm64)"; \
|
||||
CGO_ENABLED=1 CC=aarch64-linux-gnu-gcc GOOS=linux GOARCH=arm64 \
|
||||
CGO_LDFLAGS=$(ORIGIN_RPATH) go build -trimpath -o $$dist/record-asr .; \
|
||||
cp $(SHERPA_LINUX)/lib/aarch64-unknown-linux-gnu/*.so $$dist/lib/; \
|
||||
echo ">> built $$dist/record-asr (run on aarch64 with qemu or on-device)"
|
||||
|
||||
# Both arches + tarballs.
|
||||
dist: build-amd64 build-arm64
|
||||
@cd dist && \
|
||||
tar czf record-asr-$(VERSION)-linux-amd64.tar.gz amd64 && \
|
||||
tar czf record-asr-$(VERSION)-linux-arm64.tar.gz arm64 && \
|
||||
ls -lh *.tar.gz
|
||||
|
||||
# Build native then run from the build dir with a local ./data.
|
||||
run: build
|
||||
@ASR_DATA_DIR=$$PWD/data ./dist/$$(go env GOARCH)/record-asr
|
||||
|
||||
tidy:
|
||||
go mod tidy
|
||||
|
||||
clean:
|
||||
rm -rf dist
|
||||
|
||||
check:
|
||||
go vet ./...
|
||||
Reference in New Issue
Block a user