@@ -8,6 +8,125 @@ export LC_ALL=C.UTF-8
88
99set -ex
1010
11+ if [ " $CI_OS_NAME " == " macos" ]; then
12+ top -l 1 -s 0 | awk ' /PhysMem/ {print}'
13+ echo " Number of CPUs: $( sysctl -n hw.logicalcpu) "
14+ else
15+ CI_EXEC free -m -h
16+ CI_EXEC echo " Number of CPUs \(nproc\):" \$\( nproc\)
17+ CI_EXEC echo " $( lscpu | grep Endian) "
18+ fi
19+ CI_EXEC echo " Free disk space:"
20+ CI_EXEC df -h
21+
22+ if [ " $RUN_FUZZ_TESTS " = " true" ]; then
23+ export DIR_FUZZ_IN=${DIR_QA_ASSETS} /fuzz_seed_corpus/
24+ if [ ! -d " $DIR_FUZZ_IN " ]; then
25+ CI_EXEC git clone --depth=1 https://github.com/bitcoin-core/qa-assets " ${DIR_QA_ASSETS} "
26+ fi
27+ elif [ " $RUN_UNIT_TESTS " = " true" ] || [ " $RUN_UNIT_TESTS_SEQUENTIAL " = " true" ]; then
28+ export DIR_UNIT_TEST_DATA=${DIR_QA_ASSETS} /unit_test_data/
29+ if [ ! -d " $DIR_UNIT_TEST_DATA " ]; then
30+ CI_EXEC mkdir -p " $DIR_UNIT_TEST_DATA "
31+ CI_EXEC curl --location --fail https://github.com/bitcoin-core/qa-assets/raw/main/unit_test_data/script_assets_test.json -o " ${DIR_UNIT_TEST_DATA} /script_assets_test.json"
32+ fi
33+ fi
34+
35+ CI_EXEC mkdir -p " ${BASE_SCRATCH_DIR} /sanitizer-output/"
36+
37+ if [ " $USE_BUSY_BOX " = " true" ]; then
38+ echo " Setup to use BusyBox utils"
39+ # tar excluded for now because it requires passing in the exact archive type in ./depends (fixed in later BusyBox version)
40+ # ar excluded for now because it does not recognize the -q option in ./depends (unknown if fixed)
41+ # shellcheck disable=SC1010
42+ CI_EXEC for util in \$\( busybox --list \| grep -v " ^ar$" \| grep -v " ^tar$" \)\; do ln -s \$\( command -v busybox\) " ${BINS_SCRATCH_DIR} /\$ util" \; done
43+ # Print BusyBox version
44+ CI_EXEC patch --help
45+ fi
46+
47+ # Make sure default datadir does not exist and is never read by creating a dummy file
48+ if [ " $CI_OS_NAME " == " macos" ]; then
49+ echo > " ${HOME} /Library/Application Support/Bitcoin"
50+ else
51+ CI_EXEC echo \> \$ HOME/.bitcoin
52+ fi
53+
54+ if [ -z " $NO_DEPENDS " ]; then
55+ if [[ $CI_IMAGE_NAME_TAG == * centos* ]]; then
56+ # CentOS has problems building the depends if the config shell is not explicitly set
57+ # (i.e. for libevent a Makefile with an empty SHELL variable is generated, leading to
58+ # an error as the first command is executed)
59+ SHELL_OPTS=" LC_ALL=en_US.UTF-8 CONFIG_SHELL=/bin/dash"
60+ else
61+ SHELL_OPTS=" CONFIG_SHELL="
62+ fi
63+ CI_EXEC " $SHELL_OPTS " make " $MAKEJOBS " -C depends HOST=" $HOST " " $DEP_OPTS " LOG=1
64+ fi
65+ if [ " $DOWNLOAD_PREVIOUS_RELEASES " = " true" ]; then
66+ CI_EXEC test/get_previous_releases.py -b -t " $PREVIOUS_RELEASES_DIR "
67+ fi
68+
69+ BITCOIN_CONFIG_ALL=" --enable-suppress-external-warnings --disable-dependency-tracking"
70+ if [ -z " $NO_DEPENDS " ]; then
71+ BITCOIN_CONFIG_ALL=" ${BITCOIN_CONFIG_ALL} CONFIG_SITE=$DEPENDS_DIR /$HOST /share/config.site"
72+ fi
73+ if [ -z " $NO_WERROR " ]; then
74+ BITCOIN_CONFIG_ALL=" ${BITCOIN_CONFIG_ALL} --enable-werror"
75+ fi
76+
77+ CI_EXEC " ccache --zero-stats --max-size=$CCACHE_SIZE "
78+ PRINT_CCACHE_STATISTICS=" ccache --version | head -n 1 && ccache --show-stats"
79+
80+ if [ -n " $ANDROID_TOOLS_URL " ]; then
81+ CI_EXEC make distclean || true
82+ CI_EXEC ./autogen.sh
83+ CI_EXEC ./configure " $BITCOIN_CONFIG_ALL " " $BITCOIN_CONFIG " || ( (CI_EXEC cat config.log) && false)
84+ CI_EXEC " make $MAKEJOBS && cd src/qt && ANDROID_HOME=${ANDROID_HOME} ANDROID_NDK_HOME=${ANDROID_NDK_HOME} make apk"
85+ CI_EXEC " ${PRINT_CCACHE_STATISTICS} "
86+ exit 0
87+ fi
88+
89+ BITCOIN_CONFIG_ALL=" ${BITCOIN_CONFIG_ALL} --enable-external-signer --prefix=$BASE_OUTDIR "
90+
91+ if [ -n " $CONFIG_SHELL " ]; then
92+ CI_EXEC " $CONFIG_SHELL " -c " ./autogen.sh"
93+ else
94+ CI_EXEC ./autogen.sh
95+ fi
96+
97+ CI_EXEC mkdir -p " ${BASE_BUILD_DIR} "
98+ export P_CI_DIR=" ${BASE_BUILD_DIR} "
99+
100+ CI_EXEC " ${BASE_ROOT_DIR} /configure" --cache-file=config.cache " $BITCOIN_CONFIG_ALL " " $BITCOIN_CONFIG " || ( (CI_EXEC cat config.log) && false)
101+
102+ CI_EXEC make distdir VERSION=" $HOST "
103+
104+ export P_CI_DIR=" ${BASE_BUILD_DIR} /bitcoin-$HOST "
105+
106+ CI_EXEC ./configure --cache-file=../config.cache " $BITCOIN_CONFIG_ALL " " $BITCOIN_CONFIG " || ( (CI_EXEC cat config.log) && false)
107+
108+ set -o errtrace
109+ trap ' CI_EXEC "cat ${BASE_SCRATCH_DIR}/sanitizer-output/* 2> /dev/null"' ERR
110+
111+ if [[ ${USE_MEMORY_SANITIZER} == " true" ]]; then
112+ # MemorySanitizer (MSAN) does not support tracking memory initialization done by
113+ # using the Linux getrandom syscall. Avoid using getrandom by undefining
114+ # HAVE_SYS_GETRANDOM. See https://github.com/google/sanitizers/issues/852 for
115+ # details.
116+ CI_EXEC ' grep -v HAVE_SYS_GETRANDOM src/config/bitcoin-config.h > src/config/bitcoin-config.h.tmp && mv src/config/bitcoin-config.h.tmp src/config/bitcoin-config.h'
117+ fi
118+
119+ if [[ " ${RUN_TIDY} " == " true" ]]; then
120+ MAYBE_BEAR=" bear --config src/.bear-tidy-config"
121+ MAYBE_TOKEN=" --"
122+ fi
123+
124+ CI_EXEC " ${MAYBE_BEAR} " " ${MAYBE_TOKEN} " make " $MAKEJOBS " " $GOAL " || ( echo " Build failure. Verbose build follows." && CI_EXEC make " $GOAL " V=1 ; false )
125+
126+ CI_EXEC " ${PRINT_CCACHE_STATISTICS} "
127+ CI_EXEC du -sh " ${DEPENDS_DIR} " /* /
128+ CI_EXEC du -sh " ${PREVIOUS_RELEASES_DIR} "
129+
11130if [[ $HOST = * -mingw32 ]]; then
12131 # Generate all binaries, so that they can be wrapped
13132 make " $MAKEJOBS " -C src/secp256k1 VERBOSE=1
0 commit comments