Changeset View
Changeset View
Standalone View
Standalone View
contrib/teamcity/build-configurations.sh
Show All 15 Lines | if [ -z "${ABC_BUILD_NAME}" ]; then | ||||
exit 1 | exit 1 | ||||
fi | fi | ||||
echo "Running build configuration '${ABC_BUILD_NAME}'..." | echo "Running build configuration '${ABC_BUILD_NAME}'..." | ||||
TOPLEVEL=$(git rev-parse --show-toplevel) | TOPLEVEL=$(git rev-parse --show-toplevel) | ||||
export TOPLEVEL | export TOPLEVEL | ||||
setup() { | |||||
# Use separate build dirs to get the most out of ccache and prevent crosstalk | # Use separate build dirs to get the most out of ccache and prevent crosstalk | ||||
: "${BUILD_DIR:=${TOPLEVEL}/${ABC_BUILD_NAME}}" | : "${BUILD_DIR:=${TOPLEVEL}/${ABC_BUILD_NAME}}" | ||||
mkdir -p "${BUILD_DIR}" | mkdir -p "${BUILD_DIR}" | ||||
BUILD_DIR=$(cd "${BUILD_DIR}"; pwd) | BUILD_DIR=$(cd "${BUILD_DIR}"; pwd) | ||||
export BUILD_DIR | export BUILD_DIR | ||||
cd "${BUILD_DIR}" | cd "${BUILD_DIR}" | ||||
# Determine the number of build threads | # Determine the number of build threads | ||||
THREADS=$(nproc || sysctl -n hw.ncpu) | THREADS=$(nproc || sysctl -n hw.ncpu) | ||||
export THREADS | export THREADS | ||||
CI_SCRIPTS_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )" | |||||
DEVTOOLS_DIR="${TOPLEVEL}"/contrib/devtools | |||||
CMAKE_PLATFORMS_DIR="${TOPLEVEL}/cmake/platforms" | CMAKE_PLATFORMS_DIR="${TOPLEVEL}/cmake/platforms" | ||||
# Base directories for sanitizer related files | # Base directories for sanitizer related files | ||||
SAN_SUPP_DIR="${TOPLEVEL}/test/sanitizer_suppressions" | SAN_SUPP_DIR="${TOPLEVEL}/test/sanitizer_suppressions" | ||||
SAN_LOG_DIR="/tmp/sanitizer_logs" | SAN_LOG_DIR="/tmp/sanitizer_logs" | ||||
# Create the log directory if it doesn't exist and clear it | # Create the log directory if it doesn't exist and clear it | ||||
mkdir -p "${SAN_LOG_DIR}" | mkdir -p "${SAN_LOG_DIR}" | ||||
rm -rf "${SAN_LOG_DIR:?}"/* | rm -rf "${SAN_LOG_DIR:?}"/* | ||||
# Needed options are set by the build system, add the log path to all runs | # Needed options are set by the build system, add the log path to all runs | ||||
export ASAN_OPTIONS="log_path=${SAN_LOG_DIR}/asan.log" | export ASAN_OPTIONS="log_path=${SAN_LOG_DIR}/asan.log" | ||||
export LSAN_OPTIONS="log_path=${SAN_LOG_DIR}/lsan.log" | export LSAN_OPTIONS="log_path=${SAN_LOG_DIR}/lsan.log" | ||||
export TSAN_OPTIONS="log_path=${SAN_LOG_DIR}/tsan.log" | export TSAN_OPTIONS="log_path=${SAN_LOG_DIR}/tsan.log" | ||||
export UBSAN_OPTIONS="log_path=${SAN_LOG_DIR}/ubsan.log" | export UBSAN_OPTIONS="log_path=${SAN_LOG_DIR}/ubsan.log" | ||||
# Unit test logger parameters | |||||
UNIT_TESTS_JUNIT_LOG_LEVEL=message | |||||
} | |||||
run_test_bitcoin() { | run_test_bitcoin() { | ||||
# Usage: run_test_bitcoin "Context as string" [arguments...] | # Usage: run_test_bitcoin "Context as string" [arguments...] | ||||
ninja test_bitcoin | ninja test_bitcoin | ||||
TEST_BITCOIN_JUNIT="junit_results_unit_tests${1:+_${1// /_}}.xml" | TEST_BITCOIN_JUNIT="junit_results_unit_tests${1:+_${1// /_}}.xml" | ||||
TEST_BITCOIN_SUITE_NAME="Bitcoin ABC unit tests${1:+ $1}" | TEST_BITCOIN_SUITE_NAME="Bitcoin ABC unit tests${1:+ $1}" | ||||
# More sanitizer options are needed to run the executable directly | # More sanitizer options are needed to run the executable directly | ||||
ASAN_OPTIONS="malloc_context_size=0:${ASAN_OPTIONS}" \ | ASAN_OPTIONS="malloc_context_size=0:${ASAN_OPTIONS}" \ | ||||
LSAN_OPTIONS="suppressions=${SAN_SUPP_DIR}/lsan:${LSAN_OPTIONS}" \ | LSAN_OPTIONS="suppressions=${SAN_SUPP_DIR}/lsan:${LSAN_OPTIONS}" \ | ||||
TSAN_OPTIONS="suppressions=${SAN_SUPP_DIR}/tsan:${TSAN_OPTIONS}" \ | TSAN_OPTIONS="suppressions=${SAN_SUPP_DIR}/tsan:${TSAN_OPTIONS}" \ | ||||
UBSAN_OPTIONS="suppressions=${SAN_SUPP_DIR}/ubsan:print_stacktrace=1:halt_on_error=1:${UBSAN_OPTIONS}" \ | UBSAN_OPTIONS="suppressions=${SAN_SUPP_DIR}/ubsan:print_stacktrace=1:halt_on_error=1:${UBSAN_OPTIONS}" \ | ||||
./src/test/test_bitcoin \ | ./src/test/test_bitcoin \ | ||||
--logger=HRF:JUNIT,${UNIT_TESTS_JUNIT_LOG_LEVEL},${TEST_BITCOIN_JUNIT} \ | --logger=HRF:JUNIT,message,${TEST_BITCOIN_JUNIT} \ | ||||
-- \ | -- \ | ||||
-testsuitename="${TEST_BITCOIN_SUITE_NAME}" \ | -testsuitename="${TEST_BITCOIN_SUITE_NAME}" \ | ||||
"${@:2}" | "${@:2}" | ||||
} | } | ||||
# Facility to print out sanitizer log outputs to the build log console | # Facility to print out sanitizer log outputs to the build log console | ||||
print_sanitizers_log() { | print_sanitizers_log() { | ||||
for log in "${SAN_LOG_DIR}"/*.log.* | for log in "${SAN_LOG_DIR}"/*.log.* | ||||
do | do | ||||
if [ -f "${log}" ]; then | if [ -f "${log}" ]; then | ||||
echo "*** Output of ${log} ***" | echo "*** Output of ${log} ***" | ||||
cat "${log}" | cat "${log}" | ||||
fi | fi | ||||
done | done | ||||
} | } | ||||
trap "print_sanitizers_log" ERR | trap "print_sanitizers_log" ERR | ||||
CI_SCRIPTS_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )" | |||||
DEVTOOLS_DIR="${TOPLEVEL}"/contrib/devtools | |||||
build_with_cmake() { | build_with_cmake() { | ||||
CMAKE_FLAGS="${CMAKE_FLAGS[*]}" "${DEVTOOLS_DIR}"/build_cmake.sh "$@" | CMAKE_FLAGS="${CMAKE_FLAGS[*]}" "${DEVTOOLS_DIR}"/build_cmake.sh "$@" | ||||
} | } | ||||
build_with_autotools() { | build_with_autotools() { | ||||
CONFIGURE_FLAGS="${CONFIGURE_FLAGS[*]}" "${DEVTOOLS_DIR}"/build_autotools.sh "$@" | CONFIGURE_FLAGS="${CONFIGURE_FLAGS[*]}" "${DEVTOOLS_DIR}"/build_autotools.sh "$@" | ||||
} | } | ||||
setup | |||||
case "$ABC_BUILD_NAME" in | case "$ABC_BUILD_NAME" in | ||||
build-asan) | build-asan) | ||||
# Build with the address sanitizer, then run unit tests and functional tests. | # Build with the address sanitizer, then run unit tests and functional tests. | ||||
CMAKE_FLAGS=( | CMAKE_FLAGS=( | ||||
"-DCMAKE_CXX_FLAGS=-DARENA_DEBUG" | "-DCMAKE_CXX_FLAGS=-DARENA_DEBUG" | ||||
"-DCMAKE_BUILD_TYPE=Debug" | "-DCMAKE_BUILD_TYPE=Debug" | ||||
# ASAN does not support assembly code: https://github.com/google/sanitizers/issues/192 | # ASAN does not support assembly code: https://github.com/google/sanitizers/issues/192 | ||||
# This will trigger a segfault if the SSE4 implementation is selected for SHA256. | # This will trigger a segfault if the SSE4 implementation is selected for SHA256. | ||||
▲ Show 20 Lines • Show All 430 Lines • Show Last 20 Lines |