2021-11-15 11:48:19 +00:00
|
|
|
#!/usr/bin/env bash
|
2020-10-15 12:19:41 +00:00
|
|
|
|
2022-03-28 08:03:11 +00:00
|
|
|
# Copyright (c) 2020-2022 Status Research & Development GmbH. Licensed under
|
2021-02-02 22:31:01 +00:00
|
|
|
# either of:
|
|
|
|
# - Apache License, version 2.0
|
|
|
|
# - MIT license
|
|
|
|
# at your option. This file may not be copied, modified, or distributed except
|
|
|
|
# according to those terms.
|
|
|
|
|
2020-10-15 12:19:41 +00:00
|
|
|
set -e
|
|
|
|
|
|
|
|
cd /home/user/nimbus-eth2
|
2020-11-07 07:46:53 +00:00
|
|
|
git config --global core.abbrev 8
|
2020-10-15 12:19:41 +00:00
|
|
|
|
2021-01-07 09:19:29 +00:00
|
|
|
if [[ -z "${1}" ]]; then
|
|
|
|
echo "Usage: $(basename ${0}) PLATFORM"
|
|
|
|
exit 1
|
|
|
|
fi
|
|
|
|
PLATFORM="${1}"
|
2023-02-20 11:27:55 +00:00
|
|
|
BINARIES="${BINARIES:-nimbus_beacon_node nimbus_validator_client}"
|
2020-11-06 16:26:03 +00:00
|
|
|
|
2022-08-11 14:57:44 +00:00
|
|
|
echo "==================STARTING BUILD=================="
|
|
|
|
echo "Build Tools = ${BUILD_TOOLS}"
|
|
|
|
|
|
|
|
if [[ "${BUILD_TOOLS}" == "1" ]]; then
|
|
|
|
echo "Including tools in distribution"
|
|
|
|
BINARIES="${BINARIES} deposit_contract nimbus_signing_node nimbus_light_client logtrace"
|
|
|
|
fi
|
|
|
|
|
2022-03-28 08:03:11 +00:00
|
|
|
echo -e "\nPLATFORM=${PLATFORM}"
|
|
|
|
|
2022-11-30 18:09:43 +00:00
|
|
|
# we need to build everything against libraries available inside this container, including the Nim compiler
|
|
|
|
# we need to build everything against libraries available inside this container, including the Nim compiler
|
|
|
|
# the nimbus-build-system.paths file needs to be re-created because it may include absolute paths that are
|
|
|
|
# valid only on the host system (and not in the docker container where the build is executing)
|
|
|
|
rm -f nimbus-build-system.paths
|
2020-11-06 16:26:03 +00:00
|
|
|
make clean
|
2022-11-30 18:09:43 +00:00
|
|
|
make update -j$(nproc)
|
|
|
|
|
2021-11-02 17:06:36 +00:00
|
|
|
NIMFLAGS_COMMON="-d:disableMarchNative --gcc.options.debug:'-g1' --clang.options.debug:'-gline-tables-only'"
|
2021-02-02 22:31:01 +00:00
|
|
|
if [[ "${PLATFORM}" == "Windows_amd64" ]]; then
|
|
|
|
# Cross-compilation using the MXE distribution of Mingw-w64
|
2022-03-28 08:03:11 +00:00
|
|
|
export PATH="/opt/mxe/usr/bin:${PATH}"
|
2021-05-05 06:55:39 +00:00
|
|
|
CC=x86_64-w64-mingw32.static-gcc
|
|
|
|
CXX=x86_64-w64-mingw32.static-g++
|
2022-03-28 08:03:11 +00:00
|
|
|
${CC} --version
|
|
|
|
echo
|
|
|
|
|
2021-02-02 22:31:01 +00:00
|
|
|
make \
|
|
|
|
-j$(nproc) \
|
|
|
|
USE_LIBBACKTRACE=0 \
|
2021-02-11 19:03:29 +00:00
|
|
|
QUICK_AND_DIRTY_COMPILER=1 \
|
2021-03-10 02:59:19 +00:00
|
|
|
deps-common build/generate_makefile
|
2021-02-02 22:31:01 +00:00
|
|
|
make \
|
|
|
|
-j$(nproc) \
|
|
|
|
-C vendor/nim-nat-traversal/vendor/miniupnp/miniupnpc \
|
|
|
|
-f Makefile.mingw \
|
2021-03-14 03:19:11 +00:00
|
|
|
CC="${CC}" \
|
2021-02-02 22:31:01 +00:00
|
|
|
libminiupnpc.a &>/dev/null
|
|
|
|
make \
|
|
|
|
-j$(nproc) \
|
|
|
|
-C vendor/nim-nat-traversal/vendor/libnatpmp-upstream \
|
2021-03-14 03:19:11 +00:00
|
|
|
CC="${CC}" \
|
2021-02-02 22:31:01 +00:00
|
|
|
CFLAGS="-Wall -Os -DWIN32 -DNATPMP_STATICLIB -DENABLE_STRNATPMPERR -DNATPMP_MAX_RETRIES=4 ${CFLAGS}" \
|
|
|
|
libnatpmp.a &>/dev/null
|
2021-03-14 03:19:11 +00:00
|
|
|
# We set CXX and add CXXFLAGS for libunwind's C++ code, even though we don't
|
|
|
|
# use those C++ objects. I don't see an easy way of disabling the C++ parts in
|
|
|
|
# libunwind itself.
|
|
|
|
#
|
|
|
|
# "libunwind.a" combines objects produced from C and C++ code. Even though we
|
|
|
|
# don't link any C++-generated objects, the linker still checks them for
|
|
|
|
# undefined symbols, so we're forced to use g++ as a linker wrapper.
|
|
|
|
# For some reason, macOS's Clang doesn't need this trick, nor do native (and
|
|
|
|
# newer) Mingw-w64 toolchains on Windows.
|
2022-03-05 14:40:08 +00:00
|
|
|
#
|
|
|
|
# nim-blscurve's Windows SSSE3 detection doesn't work when cross-compiling,
|
|
|
|
# so we enable it here.
|
2021-02-02 22:31:01 +00:00
|
|
|
make \
|
|
|
|
-j$(nproc) \
|
2021-03-14 03:19:11 +00:00
|
|
|
CC="${CC}" \
|
|
|
|
CXX="${CXX}" \
|
|
|
|
CXXFLAGS="${CXXFLAGS} -D__STDC_FORMAT_MACROS -D_WIN32_WINNT=0x0600" \
|
|
|
|
USE_VENDORED_LIBUNWIND=1 \
|
2021-02-02 22:31:01 +00:00
|
|
|
LOG_LEVEL="TRACE" \
|
2022-03-05 14:40:08 +00:00
|
|
|
NIMFLAGS="${NIMFLAGS_COMMON} --os:windows --gcc.exe=${CC} --gcc.linkerexe=${CXX} --passL:-static -d:BLSTuseSSSE3=1" \
|
2021-02-02 22:31:01 +00:00
|
|
|
${BINARIES}
|
2021-03-10 02:59:19 +00:00
|
|
|
elif [[ "${PLATFORM}" == "Linux_arm32v7" ]]; then
|
|
|
|
CC="arm-linux-gnueabihf-gcc"
|
2022-03-28 08:03:11 +00:00
|
|
|
${CC} --version
|
|
|
|
echo
|
|
|
|
|
2021-03-10 02:59:19 +00:00
|
|
|
make \
|
|
|
|
-j$(nproc) \
|
|
|
|
USE_LIBBACKTRACE=0 \
|
|
|
|
QUICK_AND_DIRTY_COMPILER=1 \
|
|
|
|
deps-common build/generate_makefile
|
|
|
|
make \
|
|
|
|
-j$(nproc) \
|
|
|
|
LOG_LEVEL="TRACE" \
|
|
|
|
CC="${CC}" \
|
2021-05-25 23:43:33 +00:00
|
|
|
NIMFLAGS="${NIMFLAGS_COMMON} --cpu:arm --gcc.exe=${CC} --gcc.linkerexe=${CC}" \
|
2021-03-10 02:59:19 +00:00
|
|
|
PARTIAL_STATIC_LINKING=1 \
|
|
|
|
${BINARIES}
|
|
|
|
elif [[ "${PLATFORM}" == "Linux_arm64v8" ]]; then
|
|
|
|
CC="aarch64-linux-gnu-gcc"
|
2022-03-28 08:03:11 +00:00
|
|
|
${CC} --version
|
|
|
|
echo
|
|
|
|
|
2021-03-10 02:59:19 +00:00
|
|
|
make \
|
|
|
|
-j$(nproc) \
|
|
|
|
USE_LIBBACKTRACE=0 \
|
|
|
|
QUICK_AND_DIRTY_COMPILER=1 \
|
|
|
|
deps-common build/generate_makefile
|
|
|
|
make \
|
|
|
|
-j$(nproc) \
|
|
|
|
LOG_LEVEL="TRACE" \
|
|
|
|
CC="${CC}" \
|
2021-05-25 23:43:33 +00:00
|
|
|
NIMFLAGS="${NIMFLAGS_COMMON} --cpu:arm64 --gcc.exe=${CC} --gcc.linkerexe=${CC}" \
|
2021-03-10 02:59:19 +00:00
|
|
|
PARTIAL_STATIC_LINKING=1 \
|
|
|
|
${BINARIES}
|
2021-05-19 06:38:13 +00:00
|
|
|
elif [[ "${PLATFORM}" == "macOS_amd64" ]]; then
|
|
|
|
export PATH="/opt/osxcross/bin:${PATH}"
|
|
|
|
export OSXCROSS_MP_INC=1 # sets up include and library paths
|
|
|
|
export ZERO_AR_DATE=1 # avoid timestamps in binaries
|
|
|
|
DARWIN_VER="20.4"
|
|
|
|
CC="o64-clang"
|
2022-03-28 08:03:11 +00:00
|
|
|
${CC} --version
|
|
|
|
echo
|
|
|
|
|
2021-05-19 06:38:13 +00:00
|
|
|
make \
|
|
|
|
-j$(nproc) \
|
|
|
|
USE_LIBBACKTRACE=0 \
|
|
|
|
QUICK_AND_DIRTY_COMPILER=1 \
|
|
|
|
deps-common build/generate_makefile
|
|
|
|
make \
|
|
|
|
-j$(nproc) \
|
|
|
|
CC="${CC}" \
|
|
|
|
LIBTOOL="x86_64-apple-darwin${DARWIN_VER}-libtool" \
|
|
|
|
OS="darwin" \
|
2021-05-25 23:43:33 +00:00
|
|
|
NIMFLAGS="${NIMFLAGS_COMMON} --os:macosx --clang.exe=${CC}" \
|
2021-05-19 06:38:13 +00:00
|
|
|
nat-libs
|
|
|
|
make \
|
|
|
|
-j$(nproc) \
|
|
|
|
LOG_LEVEL="TRACE" \
|
|
|
|
CC="${CC}" \
|
|
|
|
AR="x86_64-apple-darwin${DARWIN_VER}-ar" \
|
|
|
|
RANLIB="x86_64-apple-darwin${DARWIN_VER}-ranlib" \
|
|
|
|
CMAKE="x86_64-apple-darwin${DARWIN_VER}-cmake" \
|
|
|
|
DSYMUTIL="x86_64-apple-darwin${DARWIN_VER}-dsymutil" \
|
|
|
|
FORCE_DSYMUTIL=1 \
|
|
|
|
USE_VENDORED_LIBUNWIND=1 \
|
2021-05-25 23:43:33 +00:00
|
|
|
NIMFLAGS="${NIMFLAGS_COMMON} --os:macosx --clang.exe=${CC} --clang.linkerexe=${CC}" \
|
2021-05-19 06:38:13 +00:00
|
|
|
${BINARIES}
|
|
|
|
elif [[ "${PLATFORM}" == "macOS_arm64" ]]; then
|
|
|
|
export PATH="/opt/osxcross/bin:${PATH}"
|
|
|
|
export OSXCROSS_MP_INC=1 # sets up include and library paths
|
|
|
|
export ZERO_AR_DATE=1 # avoid timestamps in binaries
|
|
|
|
DARWIN_VER="20.4"
|
|
|
|
CC="oa64-clang"
|
2022-03-28 08:03:11 +00:00
|
|
|
${CC} --version
|
|
|
|
echo
|
|
|
|
|
2021-05-19 06:38:13 +00:00
|
|
|
make \
|
|
|
|
-j$(nproc) \
|
|
|
|
USE_LIBBACKTRACE=0 \
|
|
|
|
QUICK_AND_DIRTY_COMPILER=1 \
|
|
|
|
deps-common build/generate_makefile
|
|
|
|
make \
|
|
|
|
-j$(nproc) \
|
|
|
|
CC="${CC}" \
|
|
|
|
LIBTOOL="arm64-apple-darwin${DARWIN_VER}-libtool" \
|
|
|
|
OS="darwin" \
|
2021-12-15 22:08:42 +00:00
|
|
|
NIMFLAGS="${NIMFLAGS_COMMON} --os:macosx --cpu:arm64 --passC:'-mcpu=apple-a13' --clang.exe=${CC}" \
|
2021-05-19 06:38:13 +00:00
|
|
|
nat-libs
|
|
|
|
make \
|
|
|
|
-j$(nproc) \
|
|
|
|
LOG_LEVEL="TRACE" \
|
|
|
|
CC="${CC}" \
|
|
|
|
AR="arm64-apple-darwin${DARWIN_VER}-ar" \
|
|
|
|
RANLIB="arm64-apple-darwin${DARWIN_VER}-ranlib" \
|
|
|
|
CMAKE="arm64-apple-darwin${DARWIN_VER}-cmake" \
|
|
|
|
DSYMUTIL="arm64-apple-darwin${DARWIN_VER}-dsymutil" \
|
|
|
|
FORCE_DSYMUTIL=1 \
|
|
|
|
USE_VENDORED_LIBUNWIND=1 \
|
2021-12-15 22:08:42 +00:00
|
|
|
NIMFLAGS="${NIMFLAGS_COMMON} --os:macosx --cpu:arm64 --passC:'-mcpu=apple-a13' --passL:'-mcpu=apple-a13' --clang.exe=${CC} --clang.linkerexe=${CC}" \
|
2021-05-19 06:38:13 +00:00
|
|
|
${BINARIES}
|
2021-02-02 22:31:01 +00:00
|
|
|
else
|
2021-05-25 23:43:33 +00:00
|
|
|
# Linux AMD64
|
2022-03-28 08:03:11 +00:00
|
|
|
gcc --version
|
|
|
|
echo
|
|
|
|
|
2021-02-02 22:31:01 +00:00
|
|
|
make \
|
|
|
|
-j$(nproc) \
|
|
|
|
LOG_LEVEL="TRACE" \
|
2021-05-25 23:43:33 +00:00
|
|
|
NIMFLAGS="${NIMFLAGS_COMMON}" \
|
2021-02-02 22:31:01 +00:00
|
|
|
PARTIAL_STATIC_LINKING=1 \
|
2021-02-11 19:03:29 +00:00
|
|
|
QUICK_AND_DIRTY_COMPILER=1 \
|
2021-02-02 22:31:01 +00:00
|
|
|
${BINARIES}
|
|
|
|
fi
|
2020-11-06 16:26:03 +00:00
|
|
|
|
|
|
|
# archive directory (we need the Nim compiler in here)
|
2021-01-07 09:19:29 +00:00
|
|
|
PREFIX="nimbus-eth2_${PLATFORM}_"
|
2020-10-15 12:19:41 +00:00
|
|
|
GIT_COMMIT="$(git rev-parse --short HEAD)"
|
2020-11-06 16:26:03 +00:00
|
|
|
VERSION="$(./env.sh nim --verbosity:0 --hints:off --warnings:off scripts/print_version.nims)"
|
2020-11-07 07:46:53 +00:00
|
|
|
DIR="${PREFIX}${VERSION}_${GIT_COMMIT}"
|
2020-10-15 12:19:41 +00:00
|
|
|
DIST_PATH="dist/${DIR}"
|
|
|
|
# delete old artefacts
|
2020-11-05 19:51:35 +00:00
|
|
|
rm -rf "dist/${PREFIX}"*.tar.gz
|
2020-11-07 07:46:53 +00:00
|
|
|
if [[ -d "${DIST_PATH}" ]]; then
|
|
|
|
rm -rf "${DIST_PATH}"
|
|
|
|
fi
|
2020-11-09 08:12:48 +00:00
|
|
|
|
2020-10-15 12:19:41 +00:00
|
|
|
mkdir -p "${DIST_PATH}"
|
2020-11-07 18:00:31 +00:00
|
|
|
mkdir "${DIST_PATH}/scripts"
|
|
|
|
mkdir "${DIST_PATH}/build"
|
2020-10-15 12:19:41 +00:00
|
|
|
|
2020-11-06 16:26:03 +00:00
|
|
|
# copy and checksum binaries, copy scripts and docs
|
2022-03-28 08:03:11 +00:00
|
|
|
EXT=""
|
|
|
|
if [[ "${PLATFORM}" == "Windows_amd64" ]]; then
|
|
|
|
EXT=".exe"
|
|
|
|
fi
|
2020-10-15 12:19:41 +00:00
|
|
|
for BINARY in ${BINARIES}; do
|
2022-03-28 08:03:11 +00:00
|
|
|
cp -a "./build/${BINARY}${EXT}" "${DIST_PATH}/build/"
|
2021-05-19 06:38:13 +00:00
|
|
|
if [[ "${PLATFORM}" =~ macOS ]]; then
|
|
|
|
# debug info
|
|
|
|
cp -a "./build/${BINARY}.dSYM" "${DIST_PATH}/build/"
|
|
|
|
fi
|
2020-11-07 18:00:31 +00:00
|
|
|
cd "${DIST_PATH}/build"
|
2022-03-28 08:03:11 +00:00
|
|
|
sha512sum "${BINARY}${EXT}" > "${BINARY}.sha512sum"
|
2020-10-15 12:19:41 +00:00
|
|
|
cd - >/dev/null
|
|
|
|
done
|
2021-07-05 10:31:25 +00:00
|
|
|
sed -e "s/GIT_COMMIT/${GIT_COMMIT}/" docker/dist/README.md.tpl > "${DIST_PATH}/README.md"
|
2021-02-06 20:22:25 +00:00
|
|
|
|
|
|
|
if [[ "${PLATFORM}" == "Linux_amd64" ]]; then
|
|
|
|
sed -i -e 's/^make dist$/make dist-amd64/' "${DIST_PATH}/README.md"
|
|
|
|
elif [[ "${PLATFORM}" == "Linux_arm32v7" ]]; then
|
|
|
|
sed -i -e 's/^make dist$/make dist-arm/' "${DIST_PATH}/README.md"
|
|
|
|
elif [[ "${PLATFORM}" == "Linux_arm64v8" ]]; then
|
|
|
|
sed -i -e 's/^make dist$/make dist-arm64/' "${DIST_PATH}/README.md"
|
|
|
|
elif [[ "${PLATFORM}" == "Windows_amd64" ]]; then
|
|
|
|
sed -i -e 's/^make dist$/make dist-win64/' "${DIST_PATH}/README.md"
|
2021-07-05 10:31:25 +00:00
|
|
|
cp -a docker/dist/README-Windows.md.tpl "${DIST_PATH}/README-Windows.md"
|
2021-05-19 06:38:13 +00:00
|
|
|
elif [[ "${PLATFORM}" == "macOS_amd64" ]]; then
|
|
|
|
sed -i -e 's/^make dist$/make dist-macos/' "${DIST_PATH}/README.md"
|
|
|
|
elif [[ "${PLATFORM}" == "macOS_arm64" ]]; then
|
|
|
|
sed -i -e 's/^make dist$/make dist-macos-arm64/' "${DIST_PATH}/README.md"
|
2021-02-02 22:31:01 +00:00
|
|
|
fi
|
2021-02-06 20:22:25 +00:00
|
|
|
|
2020-11-09 08:12:48 +00:00
|
|
|
cp -a scripts/run-beacon-node.sh "${DIST_PATH}/scripts"
|
2020-11-07 18:00:31 +00:00
|
|
|
cp -a ./run-*-beacon-node.sh "${DIST_PATH}/"
|
2020-10-15 12:19:41 +00:00
|
|
|
|
|
|
|
# create the tarball
|
|
|
|
cd dist
|
|
|
|
tar czf "${DIR}.tar.gz" "${DIR}"
|
|
|
|
# don't leave the directory hanging around
|
|
|
|
rm -rf "${DIR}"
|
|
|
|
cd - >/dev/null
|
|
|
|
|