Cross compile go-face with docker
This commit is contained in:
parent
979ce161ae
commit
24ae144af8
|
@ -26,7 +26,7 @@ jobs:
|
|||
uses: actions/checkout@v2
|
||||
|
||||
- name: Get C dependencies
|
||||
run: apt-get install -y libdlib-dev libblas-dev liblapack-dev libjpeg62-turbo-dev
|
||||
run: sudo apt-get install -y libdlib-dev libblas-dev liblapack-dev libjpeg62-turbo-dev
|
||||
|
||||
- name: Get GO dependencies
|
||||
run: |
|
||||
|
|
27
Dockerfile
27
Dockerfile
|
@ -22,14 +22,25 @@ RUN npm run build -- --public-url $UI_PUBLIC_URL
|
|||
### Build API ###
|
||||
FROM --platform=${BUILDPLATFORM:-linux/amd64} golang:1.15-buster AS api
|
||||
|
||||
# Install GCC cross compilers
|
||||
# Install G++/GCC cross compilers
|
||||
RUN dpkg --add-architecture arm64
|
||||
RUN dpkg --add-architecture armhf
|
||||
RUN apt-get update
|
||||
RUN apt-get install -y gcc-aarch64-linux-gnu libc6-dev-arm64-cross gcc-arm-linux-gnueabihf libc6-dev-armhf-cross
|
||||
RUN apt-get install -y g++-aarch64-linux-gnu libc6-dev-arm64-cross g++-arm-linux-gnueabihf libc6-dev-armhf-cross
|
||||
|
||||
# Install go-face dependencies
|
||||
RUN apt-get install -y libdlib-dev libblas-dev liblapack-dev libjpeg62-turbo-dev
|
||||
RUN apt-get install -y \
|
||||
libdlib-dev libdlib-dev:arm64 libdlib-dev:armhf \
|
||||
libblas-dev libblas-dev:arm64 libblas-dev:armhf \
|
||||
liblapack-dev liblapack-dev:arm64 liblapack-dev:armhf \
|
||||
libjpeg62-turbo-dev libjpeg62-turbo-dev:arm64 libjpeg62-turbo-dev:armhf
|
||||
|
||||
COPY --from=tonistiigi/xx:golang / /
|
||||
RUN echo $PATH
|
||||
|
||||
COPY docker_go_wrapper.sh /go/bin/go
|
||||
RUN chmod +x /go/bin/go
|
||||
|
||||
ENV CGO_ENABLED 1
|
||||
|
||||
ARG TARGETPLATFORM
|
||||
RUN go env
|
||||
|
@ -41,13 +52,13 @@ WORKDIR /app
|
|||
COPY api/go.mod api/go.sum /app/
|
||||
RUN go mod download
|
||||
|
||||
# Build go-sqlite3 dependency with CGO
|
||||
ENV CGO_ENABLED 1
|
||||
RUN go install github.com/mattn/go-sqlite3
|
||||
|
||||
# Build go-face
|
||||
RUN sed -i 's/-march=native//g' /go/pkg/mod/github.com/!kagami/go-face*/face.go
|
||||
RUN go install github.com/Kagami/go-face
|
||||
|
||||
# Build go-sqlite3 dependency with CGO
|
||||
RUN go install github.com/mattn/go-sqlite3
|
||||
|
||||
# Copy api source
|
||||
COPY api /app
|
||||
|
||||
|
|
|
@ -0,0 +1,104 @@
|
|||
#!/bin/sh
|
||||
|
||||
: ${TARGETPLATFORM=}
|
||||
: ${TARGETOS=}
|
||||
: ${TARGETARCH=}
|
||||
: ${TARGETVARIANT=}
|
||||
: ${CGO_ENABLED=}
|
||||
: ${GOARCH=}
|
||||
: ${GOOS=}
|
||||
: ${GOARM=}
|
||||
: ${GOBIN=}
|
||||
|
||||
set -eu
|
||||
|
||||
if [ ! -z "$TARGETPLATFORM" ]; then
|
||||
os="$(echo $TARGETPLATFORM | cut -d"/" -f1)"
|
||||
arch="$(echo $TARGETPLATFORM | cut -d"/" -f2)"
|
||||
if [ ! -z "$os" ] && [ ! -z "$arch" ]; then
|
||||
export GOOS="$os"
|
||||
export GOARCH="$arch"
|
||||
if [ "$arch" = "arm" ]; then
|
||||
case "$(echo $TARGETPLATFORM | cut -d"/" -f3)" in
|
||||
"v5")
|
||||
export GOARM="5"
|
||||
;;
|
||||
"v6")
|
||||
export GOARM="6"
|
||||
;;
|
||||
*)
|
||||
export GOARM="7"
|
||||
;;
|
||||
esac
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
|
||||
if [ ! -z "$TARGETOS" ]; then
|
||||
export GOOS="$TARGETOS"
|
||||
fi
|
||||
|
||||
if [ ! -z "$TARGETARCH" ]; then
|
||||
export GOARCH="$TARGETARCH"
|
||||
fi
|
||||
|
||||
if [ "$TARGETARCH" = "arm" ]; then
|
||||
if [ ! -z "$TARGETVARIANT" ]; then
|
||||
case "$TARGETVARIANT" in
|
||||
"v5")
|
||||
export GOARM="5"
|
||||
;;
|
||||
"v6")
|
||||
export GOARM="6"
|
||||
;;
|
||||
*)
|
||||
export GOARM="7"
|
||||
;;
|
||||
esac
|
||||
else
|
||||
export GOARM="7"
|
||||
fi
|
||||
fi
|
||||
|
||||
if [ "$CGO_ENABLED" = "1" ]; then
|
||||
case "$GOARCH" in
|
||||
"amd64")
|
||||
export CC="x86_64-linux-gnu-gcc"
|
||||
export CXX="x86_64-linux-gnu-g++"
|
||||
;;
|
||||
"ppc64le")
|
||||
export CC="powerpc64le-linux-gnu-gcc"
|
||||
export CXX="powerpc64le-linux-gnu-g++"
|
||||
;;
|
||||
"s390x")
|
||||
export CC="s390x-linux-gnu-gcc"
|
||||
export CXX="s390x-linux-gnu-g++"
|
||||
;;
|
||||
"arm64")
|
||||
export CC="aarch64-linux-gnu-gcc"
|
||||
export CXX="aarch64-linux-gnu-g++"
|
||||
;;
|
||||
"arm")
|
||||
case "$GOARM" in
|
||||
"5")
|
||||
export CC="arm-linux-gnueabi-gcc"
|
||||
export CXX="arm-linux-gnueabi-g++"
|
||||
;;
|
||||
*)
|
||||
export CC="arm-linux-gnueabihf-gcc"
|
||||
export CXX="arm-linux-gnueabihf-g++"
|
||||
;;
|
||||
esac
|
||||
;;
|
||||
esac
|
||||
fi
|
||||
|
||||
if [ "$GOOS" = "wasi" ]; then
|
||||
export GOOS="js"
|
||||
fi
|
||||
|
||||
if [ -z "$GOBIN" ] && [ -n "$GOPATH" ] && [ -n "$GOARCH" ] && [ -n "$GOOS" ]; then
|
||||
export PATH=${GOPATH}/bin/${GOOS}_${GOARCH}:${PATH}
|
||||
fi
|
||||
|
||||
exec /usr/local/go/bin/go "$@"
|
Loading…
Reference in New Issue