1
Fork 0

Cross compile go-face with docker

This commit is contained in:
viktorstrate 2021-02-15 23:17:37 +01:00
parent 979ce161ae
commit 24ae144af8
No known key found for this signature in database
GPG Key ID: 3F855605109C1E8A
3 changed files with 124 additions and 9 deletions

View File

@ -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: |

View File

@ -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

104
docker_go_wrapper.sh Normal file
View File

@ -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 "$@"