Files
-rpi-sendspin/Dockerfile.cross

64 lines
2.1 KiB
Docker

FROM golang:1.24-bookworm
# Enable ARM multiarch and install cross-compilers + ARM versions of CGo deps
RUN dpkg --add-architecture armhf \
&& dpkg --add-architecture arm64 \
&& apt-get update \
&& apt-get install -y --no-install-recommends \
crossbuild-essential-armhf \
crossbuild-essential-arm64 \
pkg-config \
libasound2-dev:armhf \
libopus-dev:armhf \
libopusfile-dev:armhf \
libogg-dev:armhf \
libasound2-dev:arm64 \
libopus-dev:arm64 \
libopusfile-dev:arm64 \
libogg-dev:arm64 \
&& rm -rf /var/lib/apt/lists/*
WORKDIR /src
COPY go.mod go.sum ./
RUN go mod download
COPY . .
RUN mkdir -p /out
# armhf (RPi 2/3/4 32-bit, RPi Zero 2 W 32-bit)
RUN CGO_ENABLED=1 \
CC=arm-linux-gnueabihf-gcc \
PKG_CONFIG_LIBDIR=/usr/lib/arm-linux-gnueabihf/pkgconfig \
GOOS=linux GOARCH=arm GOARM=7 \
go build -buildvcs=false -o /out/sendspin-client-armhf ./cmd/client/ \
&& CGO_ENABLED=1 \
CC=arm-linux-gnueabihf-gcc \
PKG_CONFIG_LIBDIR=/usr/lib/arm-linux-gnueabihf/pkgconfig \
GOOS=linux GOARCH=arm GOARM=7 \
go build -buildvcs=false -o /out/sendspin-server-armhf ./cmd/server/ \
&& CGO_ENABLED=1 \
CC=arm-linux-gnueabihf-gcc \
PKG_CONFIG_LIBDIR=/usr/lib/arm-linux-gnueabihf/pkgconfig \
GOOS=linux GOARCH=arm GOARM=7 \
go build -buildvcs=false -o /out/sendspin-live-server-armhf ./cmd/live-server/
# arm64 (RPi 3/4/5 64-bit)
RUN CGO_ENABLED=1 \
CC=aarch64-linux-gnu-gcc \
PKG_CONFIG_LIBDIR=/usr/lib/aarch64-linux-gnu/pkgconfig \
GOOS=linux GOARCH=arm64 \
go build -buildvcs=false -o /out/sendspin-client-arm64 ./cmd/client/ \
&& CGO_ENABLED=1 \
CC=aarch64-linux-gnu-gcc \
PKG_CONFIG_LIBDIR=/usr/lib/aarch64-linux-gnu/pkgconfig \
GOOS=linux GOARCH=arm64 \
go build -buildvcs=false -o /out/sendspin-server-arm64 ./cmd/server/ \
&& CGO_ENABLED=1 \
CC=aarch64-linux-gnu-gcc \
PKG_CONFIG_LIBDIR=/usr/lib/aarch64-linux-gnu/pkgconfig \
GOOS=linux GOARCH=arm64 \
go build -buildvcs=false -o /out/sendspin-live-server-arm64 ./cmd/live-server/
CMD ["sh", "-c", "cp /out/* /binaries/"]