mirror of
https://github.com/bitcoin/bitcoin.git
synced 2025-01-25 18:53:23 -03:00
5baff2b318
Compilers used change as follows: Linux native GCC 7.5 -> GCC 8.4 Linux cross GCC 8.4 -> GCC 8.4 Windows mingw-w64 7.3 -> mingw-w64 9.3 macOS Clang 8.0.0 -> Clang 8.0.0 The macOS and Win cross builds in the CI are updated to use Focal, and per the op, running the security tests is disabled in the Windows build.
165 lines
6 KiB
YAML
165 lines
6 KiB
YAML
---
|
|
name: "bitcoin-core-linux-22"
|
|
enable_cache: true
|
|
distro: "ubuntu"
|
|
suites:
|
|
- "focal"
|
|
architectures:
|
|
- "amd64"
|
|
packages:
|
|
# Common dependencies.
|
|
- "autoconf"
|
|
- "automake"
|
|
- "binutils"
|
|
- "bsdmainutils"
|
|
- "ca-certificates"
|
|
- "curl"
|
|
- "faketime"
|
|
- "g++-8"
|
|
- "gcc-8"
|
|
- "git"
|
|
- "libtool"
|
|
- "patch"
|
|
- "pkg-config"
|
|
- "python3"
|
|
# Cross compilation HOSTS:
|
|
# - arm-linux-gnueabihf
|
|
- "binutils-arm-linux-gnueabihf"
|
|
- "g++-8-arm-linux-gnueabihf"
|
|
# - aarch64-linux-gnu
|
|
- "binutils-aarch64-linux-gnu"
|
|
- "g++-8-aarch64-linux-gnu"
|
|
# - powerpc64-linux-gnu
|
|
- "binutils-powerpc64-linux-gnu"
|
|
- "g++-8-powerpc64-linux-gnu"
|
|
# - powerpc64le-linux-gnu
|
|
- "binutils-powerpc64le-linux-gnu"
|
|
- "g++-8-powerpc64le-linux-gnu"
|
|
# - riscv64-linux-gnu
|
|
- "binutils-riscv64-linux-gnu"
|
|
- "g++-8-riscv64-linux-gnu"
|
|
remotes:
|
|
- "url": "https://github.com/bitcoin/bitcoin.git"
|
|
"dir": "bitcoin"
|
|
files: []
|
|
script: |
|
|
set -e -o pipefail
|
|
|
|
WRAP_DIR=$HOME/wrapped
|
|
HOSTS="x86_64-linux-gnu arm-linux-gnueabihf aarch64-linux-gnu powerpc64-linux-gnu powerpc64le-linux-gnu riscv64-linux-gnu"
|
|
CONFIGFLAGS="--enable-glibc-back-compat --enable-reduce-exports --disable-bench --disable-gui-tests"
|
|
FAKETIME_HOST_PROGS="gcc g++"
|
|
FAKETIME_PROGS="date ar ranlib nm"
|
|
HOST_CFLAGS="-O2 -g"
|
|
HOST_CXXFLAGS="-O2 -g"
|
|
HOST_LDFLAGS_BASE="-static-libstdc++ -Wl,-O2"
|
|
|
|
export QT_RCC_TEST=1
|
|
export QT_RCC_SOURCE_DATE_OVERRIDE=1
|
|
export TZ="UTC"
|
|
export BUILD_DIR="$PWD"
|
|
mkdir -p ${WRAP_DIR}
|
|
if test -n "$GBUILD_CACHE_ENABLED"; then
|
|
export SOURCES_PATH=${GBUILD_COMMON_CACHE}
|
|
export BASE_CACHE=${GBUILD_PACKAGE_CACHE}
|
|
mkdir -p ${BASE_CACHE} ${SOURCES_PATH}
|
|
fi
|
|
|
|
# Use $LIB in LD_PRELOAD to avoid hardcoding the dir (See `man ld.so`)
|
|
function create_global_faketime_wrappers {
|
|
for prog in ${FAKETIME_PROGS}; do
|
|
echo '#!/usr/bin/env bash' > ${WRAP_DIR}/${prog}
|
|
echo "REAL=\`which -a ${prog} | grep -v ${WRAP_DIR}/${prog} | head -1\`" >> ${WRAP_DIR}/${prog}
|
|
echo "export LD_PRELOAD='/usr/\$LIB/faketime/libfaketime.so.1'" >> ${WRAP_DIR}/${prog}
|
|
echo "export FAKETIME=\"$1\"" >> ${WRAP_DIR}/${prog}
|
|
echo "exec \"\$REAL\" \"\$@\"" >> $WRAP_DIR/${prog}
|
|
chmod +x ${WRAP_DIR}/${prog}
|
|
done
|
|
}
|
|
|
|
function create_per-host_faketime_wrappers {
|
|
for i in $HOSTS; do
|
|
for prog in ${FAKETIME_HOST_PROGS}; do
|
|
if which ${i}-${prog}-8
|
|
then
|
|
echo '#!/usr/bin/env bash' > ${WRAP_DIR}/${i}-${prog}
|
|
echo "REAL=\`which -a ${i}-${prog}-8 | grep -v ${WRAP_DIR}/${i}-${prog} | head -1\`" >> ${WRAP_DIR}/${i}-${prog}
|
|
echo "export LD_PRELOAD='/usr/\$LIB/faketime/libfaketime.so.1'" >> ${WRAP_DIR}/${i}-${prog}
|
|
echo "export FAKETIME=\"$1\"" >> ${WRAP_DIR}/${i}-${prog}
|
|
if [ "${i:0:11}" = "powerpc64le" ]; then
|
|
echo "exec \"\$REAL\" -mcpu=power8 -mtune=power9 \"\$@\"" >> $WRAP_DIR/${i}-${prog}
|
|
elif [ "${i:0:9}" = "powerpc64" ]; then
|
|
echo "exec \"\$REAL\" -mcpu=970 -mtune=power9 \"\$@\"" >> $WRAP_DIR/${i}-${prog}
|
|
else
|
|
echo "exec \"\$REAL\" \"\$@\"" >> $WRAP_DIR/${i}-${prog}
|
|
fi
|
|
chmod +x ${WRAP_DIR}/${i}-${prog}
|
|
fi
|
|
done
|
|
done
|
|
}
|
|
|
|
# Faketime for depends so intermediate results are comparable
|
|
export PATH_orig=${PATH}
|
|
create_global_faketime_wrappers "2000-01-01 12:00:00"
|
|
create_per-host_faketime_wrappers "2000-01-01 12:00:00"
|
|
export PATH=${WRAP_DIR}:${PATH}
|
|
|
|
cd bitcoin
|
|
BASEPREFIX="${PWD}/depends"
|
|
# Build dependencies for each host
|
|
for i in $HOSTS; do
|
|
make ${MAKEOPTS} -C ${BASEPREFIX} HOST="${i}" CC=${i}-gcc-8 CXX=${i}-g++-8
|
|
done
|
|
|
|
# Faketime for binaries
|
|
export PATH=${PATH_orig}
|
|
create_global_faketime_wrappers "${REFERENCE_DATETIME}"
|
|
create_per-host_faketime_wrappers "${REFERENCE_DATETIME}"
|
|
export PATH=${WRAP_DIR}:${PATH}
|
|
|
|
# Define DISTNAME variable.
|
|
# shellcheck source=contrib/gitian-descriptors/assign_DISTNAME
|
|
source contrib/gitian-descriptors/assign_DISTNAME
|
|
|
|
GIT_ARCHIVE="${OUTDIR}/src/${DISTNAME}.tar.gz"
|
|
|
|
# Create the source tarball
|
|
mkdir -p "$(dirname "$GIT_ARCHIVE")"
|
|
git archive --prefix="${DISTNAME}/" --output="$GIT_ARCHIVE" HEAD
|
|
|
|
ORIGPATH="$PATH"
|
|
# Extract the git archive into a dir for each host and build
|
|
for i in ${HOSTS}; do
|
|
export PATH=${BASEPREFIX}/${i}/native/bin:${ORIGPATH}
|
|
if [ "${i}" = "riscv64-linux-gnu" ] || [ "${i}" = "powerpc64-linux-gnu" ] || [ "${i}" = "powerpc64le-linux-gnu" ]; then
|
|
# Workaround for https://bugs.launchpad.net/ubuntu/+source/gcc-8-cross-ports/+bug/1853740
|
|
# TODO: remove this when no longer needed
|
|
HOST_LDFLAGS="${HOST_LDFLAGS_BASE} -Wl,-z,noexecstack"
|
|
else
|
|
HOST_LDFLAGS="${HOST_LDFLAGS_BASE}"
|
|
fi
|
|
mkdir -p distsrc-${i}
|
|
cd distsrc-${i}
|
|
INSTALLPATH="${PWD}/installed/${DISTNAME}"
|
|
mkdir -p ${INSTALLPATH}
|
|
tar --strip-components=1 -xf "${GIT_ARCHIVE}"
|
|
|
|
./autogen.sh
|
|
CONFIG_SITE=${BASEPREFIX}/${i}/share/config.site ./configure --prefix=/ --disable-ccache --disable-maintainer-mode --disable-dependency-tracking ${CONFIGFLAGS} CFLAGS="${HOST_CFLAGS}" CXXFLAGS="${HOST_CXXFLAGS}" LDFLAGS="${HOST_LDFLAGS}" CC=${i}-gcc-8 CXX=${i}-g++-8
|
|
make ${MAKEOPTS}
|
|
make ${MAKEOPTS} -C src check-security
|
|
make ${MAKEOPTS} -C src check-symbols
|
|
make install DESTDIR=${INSTALLPATH}
|
|
cd installed
|
|
find . -name "lib*.la" -delete
|
|
find . -name "lib*.a" -delete
|
|
rm -rf ${DISTNAME}/lib/pkgconfig
|
|
find ${DISTNAME}/bin -type f -executable -print0 | xargs -0 -n1 -I{} ../contrib/devtools/split-debug.sh {} {} {}.dbg
|
|
find ${DISTNAME}/lib -type f -print0 | xargs -0 -n1 -I{} ../contrib/devtools/split-debug.sh {} {} {}.dbg
|
|
cp ../README.md ${DISTNAME}/
|
|
find ${DISTNAME} -not -name "*.dbg" | sort | tar --mtime="$REFERENCE_DATETIME" --no-recursion --mode='u+rw,go+r-w,a+X' --owner=0 --group=0 -c -T - | gzip -9n > ${OUTDIR}/${DISTNAME}-${i}.tar.gz
|
|
find ${DISTNAME} -name "*.dbg" | sort | tar --mtime="$REFERENCE_DATETIME" --no-recursion --mode='u+rw,go+r-w,a+X' --owner=0 --group=0 -c -T - | gzip -9n > ${OUTDIR}/${DISTNAME}-${i}-debug.tar.gz
|
|
cd ../../
|
|
rm -rf distsrc-${i}
|
|
done
|