By passing -split-sections to all dependencies, GHC will link only the modules we actually use and not the full package for each dependency. This does neither work on MacOS nor Windows, thus we don't do it for stack right now. Stripping unused symbols in CI will further decrease the size of those files.
73 lines
2.0 KiB
Bash
73 lines
2.0 KiB
Bash
#!/bin/bash
|
|
|
|
# This script builds PostgREST in a remote ARM server
|
|
|
|
[ -z "$1" ] && { echo "Missing 1st argument: PostgREST github commit SHA"; exit 1; }
|
|
[ -z "$2" ] && { echo "Missing 2nd argument: Build environment directory name"; exit 1; }
|
|
[ -z "$3" ] && { echo "Missing 3rd argument: GHC version"; exit 1; }
|
|
|
|
PGRST_GITHUB_COMMIT="$1"
|
|
SCRIPT_DIR="$2"
|
|
|
|
DOCKER_BUILD_DIR="$SCRIPT_DIR/docker-env"
|
|
# latest is a shortcut documented on https://www.haskell.org/ghcup/guide/#tags-and-shortcuts
|
|
CABAL_VERSION="latest"
|
|
GHC_VERSION="$3"
|
|
|
|
install_packages() {
|
|
sudo apt-get update -y
|
|
sudo apt-get upgrade -y
|
|
sudo apt-get install -y git build-essential curl libffi-dev libffi7 libgmp-dev libgmp10 libncurses-dev libncurses5 libtinfo5 llvm libnuma-dev zlib1g-dev libpq-dev jq gcc
|
|
sudo apt-get clean
|
|
}
|
|
|
|
install_ghcup() {
|
|
export BOOTSTRAP_HASKELL_NONINTERACTIVE=1
|
|
export BOOTSTRAP_HASKELL_MINIMAL=1
|
|
curl --proto '=https' --tlsv1.2 -sSf https://get-ghcup.haskell.org | sh
|
|
source ~/.ghcup/env
|
|
}
|
|
|
|
install_cabal() {
|
|
ghcup upgrade
|
|
ghcup install cabal $CABAL_VERSION
|
|
ghcup set cabal $CABAL_VERSION
|
|
}
|
|
|
|
install_ghc() {
|
|
ghcup upgrade
|
|
ghcup install ghc $GHC_VERSION
|
|
ghcup set ghc $GHC_VERSION
|
|
}
|
|
|
|
install_packages
|
|
|
|
# Add ghcup to the PATH for this session
|
|
[ -f ~/.ghcup/env ] && source ~/.ghcup/env
|
|
|
|
ghcup --version || install_ghcup
|
|
ghcup set cabal $CABAL_VERSION || install_cabal
|
|
ghcup set ghc $GHC_VERSION || install_ghc
|
|
|
|
cd ~/$SCRIPT_DIR
|
|
|
|
# Clone the repository and build the project
|
|
git clone https://github.com/PostgREST/postgrest.git
|
|
cd postgrest
|
|
git checkout $PGRST_GITHUB_COMMIT
|
|
cp cabal.project.non-nix cabal.project
|
|
cabal v2-update && cabal v2-build
|
|
|
|
# Strip unused symbols from executable
|
|
PGRST_BIN=$(cabal exec which postgrest | tail -1)
|
|
strip $PGRST_BIN
|
|
|
|
# Copy the built binary to the Dockerfile directory
|
|
cp $PGRST_BIN ~/$DOCKER_BUILD_DIR
|
|
|
|
# Move and compress the built binary
|
|
mkdir -p ~/$SCRIPT_DIR/result
|
|
mv $PGRST_BIN ~/$SCRIPT_DIR/result
|
|
cd ~/$SCRIPT_DIR
|
|
tar -cJf result.tar.xz result
|