#!/usr/bin/env bash set -e # WARN: non hermetic build (people must run this script inside docker to # produce deterministic binaries). # Get the version from the environment, or try to figure it out. if [ -z $VERSION ]; then VERSION=$(awk -F\" 'TMCoreSemVer =/ { print $2; exit }' < version/version.go) fi if [ -z "$VERSION" ]; then echo "Please specify a version." exit 1 fi echo "==> Building version $VERSION..." # Delete the old dir echo "==> Removing old directory..." rm -rf build/pkg mkdir -p build/pkg # Get the git commit VERSION := "$(shell git describe --always)" GIT_IMPORT="github.com/tendermint/tendermint/version" # Determine the arch/os combos we're building for XC_ARCH=${XC_ARCH:-"386 amd64 arm"} XC_OS=${XC_OS:-"solaris darwin freebsd linux windows"} XC_EXCLUDE=${XC_EXCLUDE:-" darwin/arm solaris/amd64 solaris/386 solaris/arm freebsd/amd64 windows/arm "} # Make sure build tools are available. make tools # Build! # ldflags: -s Omit the symbol table and debug information. # -w Omit the DWARF symbol table. echo "==> Building..." IFS=' ' read -ra arch_list <<< "$XC_ARCH" IFS=' ' read -ra os_list <<< "$XC_OS" for arch in "${arch_list[@]}"; do for os in "${os_list[@]}"; do if [[ "$XC_EXCLUDE" != *" $os/$arch "* ]]; then echo "--> $os/$arch" GOOS=${os} GOARCH=${arch} go build -ldflags "-s -w -X ${GIT_IMPORT}.TMCoreSemVer=${VERSION}" -tags="${BUILD_TAGS}" -o "build/pkg/${os}_${arch}/tendermint" ./cmd/tendermint fi done done # Zip all the files. echo "==> Packaging..." for PLATFORM in $(find ./build/pkg -mindepth 1 -maxdepth 1 -type d); do OSARCH=$(basename "${PLATFORM}") echo "--> ${OSARCH}" pushd "$PLATFORM" >/dev/null 2>&1 zip "../${OSARCH}.zip" ./* popd >/dev/null 2>&1 done # Add "tendermint" and $VERSION prefix to package name. rm -rf ./build/dist mkdir -p ./build/dist for FILENAME in $(find ./build/pkg -mindepth 1 -maxdepth 1 -type f); do FILENAME=$(basename "$FILENAME") cp "./build/pkg/${FILENAME}" "./build/dist/tendermint_${VERSION}_${FILENAME}" done # Make the checksums. pushd ./build/dist shasum -a256 ./* > "./tendermint_${VERSION}_SHA256SUMS" popd # Done echo echo "==> Results:" ls -hl ./build/dist exit 0