mirror of
https://github.com/simplex-chat/simplex-chat.git
synced 2024-12-17 17:20:21 +01:00
60 lines
1.7 KiB
Docker
60 lines
1.7 KiB
Docker
FROM alpine:latest AS build-stage
|
|
|
|
# Alpine Linux doesn't provide libtinfow.so.6 library, so we need to symlink it.
|
|
# Add essential packages for ghc/cabal to work.
|
|
RUN apk add --no-cache \
|
|
curl \
|
|
git \
|
|
xz \
|
|
grep \
|
|
ghc-dev \
|
|
gmp-dev \
|
|
zlib-static \
|
|
zlib-dev \
|
|
openssl-libs-static \
|
|
openssl-dev \
|
|
alpine-sdk &&\
|
|
ln -s /usr/lib/libncursesw.so.6 /usr/lib/libtinfow.so.6
|
|
|
|
# Specify bootstrap Haskell versions
|
|
ENV BOOTSTRAP_HASKELL_GHC_VERSION=9.6.3
|
|
ENV BOOTSTRAP_HASKELL_CABAL_VERSION=3.10.1.0
|
|
|
|
# Install ghcup
|
|
RUN curl --proto '=https' --tlsv1.2 -sSf https://get-ghcup.haskell.org | BOOTSTRAP_HASKELL_NONINTERACTIVE=1 sh
|
|
|
|
# Adjust PATH
|
|
ENV PATH="/root/.cabal/bin:/root/.ghcup/bin:$PATH"
|
|
|
|
# Set both as default
|
|
RUN ghcup set ghc "${BOOTSTRAP_HASKELL_GHC_VERSION}" && \
|
|
ghcup set cabal "${BOOTSTRAP_HASKELL_CABAL_VERSION}"
|
|
|
|
# Install hpack
|
|
RUN cabal install --install-method=copy --installdir=/usr/local/bin hpack-0.36.0
|
|
|
|
# Copy project in PWD to dontainer
|
|
COPY . /project
|
|
WORKDIR /project
|
|
|
|
# Adjust build
|
|
RUN cp ./scripts/cabal.project.local.linux ./cabal.project.local
|
|
|
|
# Add optimization flags and build statically
|
|
RUN sed -i '/- -Wunused-type-patterns/a\ - -O2\n\ - -split-sections\n\ - -with-rtsopts=-N\n\ - -static\n\cc-options: -static\n\ld-options: -static -pthread' package.yaml
|
|
|
|
# Reconfigure cabal project
|
|
RUN hpack
|
|
|
|
# Compile simplex-chat
|
|
RUN cabal update
|
|
RUN cabal build -j exe:simplex-chat
|
|
|
|
# Strip the binary from debug symbols to reduce size
|
|
RUN bin=$(find /project/dist-newstyle -name "simplex-chat" -type f -executable) && \
|
|
mv "$bin" ./ && \
|
|
strip ./simplex-chat
|
|
|
|
FROM scratch AS export-stage
|
|
COPY --from=build-stage /project/simplex-chat /
|