mirror of
https://github.com/bitcoin/bitcoin.git
synced 2026-04-15 01:58:09 +02:00
70f632bda8f Merge bitcoin-core/libmultiprocess#265: ci: set LC_ALL in shell scripts 8e8e564259a Merge bitcoin-core/libmultiprocess#249: fixes for race conditions on disconnects 05d34cc2ec3 ci: set LC_ALL in shell scripts e606fd84a8c Merge bitcoin-core/libmultiprocess#264: ci: reduce nproc multipliers ff0eed1bf18 refactor: Use loop variable in type-context.h ff1d8ba172a refactor: Move type-context.h getParams() call closer to use 1dbc59a4aa3 race fix: m_on_cancel called after request finishes 1643d05ba07 test: m_on_cancel called after request finishes f5509a31fcc race fix: getParams() called after request cancel 4a60c39f24a test: getParams() called after request cancel f11ec29ed20 race fix: worker thread destroyed before it is initialized a1d643348f4 test: worker thread destroyed before it is initialized 336023382c4 ci: reduce nproc multipliers b090beb9651 Merge bitcoin-core/libmultiprocess#256: ci: cache gnu32 nix store be8622816da ci: cache gnu32 nix store 975270b619c Merge bitcoin-core/libmultiprocess#263: ci: bump timeout factor to 40 09f10e5a598 ci: bump timeout factor to 40 db8f76ad290 Merge bitcoin-core/libmultiprocess#253: ci: run some Bitcoin Core CI jobs 55a9b557b19 ci: set Bitcoin Core CI test repetition fb0fc84d556 ci: add TSan job with instrumented libc++ 0f29c38725b ci: add Bitcoin Core IPC tests (ASan + macOS) 3f64320315d Merge bitcoin-core/libmultiprocess#262: ci: enable clang-tidy in macOS job, use nullptr cd9f8bdc9f0 Merge bitcoin-core/libmultiprocess#258: log: add socket connected info message and demote destroy logs to debug b5d6258a42f Merge bitcoin-core/libmultiprocess#255: fix: use unsigned char cast and sizeof in LogEscape escape sequence d94688e2c32 Merge bitcoin-core/libmultiprocess#251: Improved CustomBuildField for std::optional in IPC/libmultiprocess a9499fad755 mp: use nullptr with pthread_threadid_np f499e37850f ci: enable clang-tidy in macOS job 98f1352159d log: add socket connected info message and demote destroy logs to debug 554a481ea73 fix: use unsigned char cast and sizeof in LogEscape escape sequence 1977b9f3f65 Use std::forward in CustomBuildField for std::optional to allow move semantics, resolves FIXME 22bec918c97 Merge bitcoin-core/libmultiprocess#247: type-map: Work around LLVM 22 "out of bounds index" error 8a5e3ae6ed2 Merge bitcoin-core/libmultiprocess#242: proxy-types: add CustomHasField hook to map Cap'n Proto values to null C++ values e8d35246918 Merge bitcoin-core/libmultiprocess#246: doc: Bump version 8 > 9 97d877053b6 proxy-types: add CustomHasField hook for nullable decode paths 8c2f10252c9 refactor: add missing includes to mp/type-data.h b1638aceb40 doc: Bump version 8 > 9 f61af487217 type-map: Work around LLVM 22 "out of bounds index" error git-subtree-dir: src/ipc/libmultiprocess git-subtree-split: 70f632bda8f80449b6240f98da768206a535a04e
174 lines
4.9 KiB
Bash
Executable File
174 lines
4.9 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
|
|
export LC_ALL=C
|
|
|
|
set -o errexit -o nounset -o pipefail -o xtrace
|
|
|
|
readonly SCRIPT_DIR="$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")" && pwd)"
|
|
|
|
source "${SCRIPT_DIR}/ci_helpers.sh"
|
|
|
|
replace_subtree() {
|
|
rm -rf src/ipc/libmultiprocess
|
|
cp -a _libmultiprocess src/ipc/libmultiprocess
|
|
rm -rf src/ipc/libmultiprocess/.git
|
|
}
|
|
|
|
add_llvm_apt_repository() {
|
|
curl -s "https://apt.llvm.org/llvm-snapshot.gpg.key" | sudo tee "/etc/apt/trusted.gpg.d/apt.llvm.org.asc" > /dev/null
|
|
source /etc/os-release
|
|
echo "deb http://apt.llvm.org/${VERSION_CODENAME}/ llvm-toolchain-${VERSION_CODENAME}-${LLVM_VERSION} main" | sudo tee "/etc/apt/sources.list.d/llvm.list"
|
|
sudo apt-get update
|
|
}
|
|
|
|
install_llvm_alternatives() {
|
|
sudo update-alternatives --install /usr/bin/clang++ clang++ "/usr/bin/clang++-${LLVM_VERSION}" 100
|
|
sudo update-alternatives --install /usr/bin/clang clang "/usr/bin/clang-${LLVM_VERSION}" 100
|
|
sudo update-alternatives --install /usr/bin/llvm-symbolizer llvm-symbolizer "/usr/bin/llvm-symbolizer-${LLVM_VERSION}" 100
|
|
}
|
|
|
|
set_llvm_alternatives() {
|
|
sudo update-alternatives --set clang "/usr/bin/clang-${LLVM_VERSION}"
|
|
sudo update-alternatives --set clang++ "/usr/bin/clang++-${LLVM_VERSION}"
|
|
sudo update-alternatives --set llvm-symbolizer "/usr/bin/llvm-symbolizer-${LLVM_VERSION}"
|
|
}
|
|
|
|
install_tsan_packages() {
|
|
install_apt_packages \
|
|
ccache \
|
|
"clang-${LLVM_VERSION}" \
|
|
"llvm-${LLVM_VERSION}" \
|
|
"llvm-${LLVM_VERSION}-dev" \
|
|
"libclang-${LLVM_VERSION}-dev" \
|
|
"libclang-rt-${LLVM_VERSION}-dev" \
|
|
ninja-build \
|
|
pkgconf \
|
|
python3-pip \
|
|
bison
|
|
install_llvm_alternatives
|
|
set_llvm_alternatives
|
|
install_pip_packages --break-system-packages pycapnp
|
|
}
|
|
|
|
build_instrumented_libcxx() {
|
|
export PATH="/usr/lib/llvm-${LLVM_VERSION}/bin:${PATH}"
|
|
|
|
ls -l /usr/bin/clang /usr/bin/clang++ /usr/bin/llvm-symbolizer
|
|
which clang clang++ llvm-symbolizer
|
|
clang --version
|
|
clang++ --version
|
|
"/usr/bin/clang-${LLVM_VERSION}" --version
|
|
"/usr/bin/clang++-${LLVM_VERSION}" --version
|
|
git clone --depth=1 https://github.com/llvm/llvm-project -b "llvmorg-${LLVM_VERSION}.1.0" /tmp/llvm-project
|
|
cmake -G Ninja -B "${LIBCXX_DIR}" \
|
|
-DLLVM_ENABLE_RUNTIMES="libcxx;libcxxabi;libunwind" \
|
|
-DCMAKE_BUILD_TYPE=Release \
|
|
-DLLVM_USE_SANITIZER=Thread \
|
|
-DCMAKE_C_COMPILER="/usr/bin/clang-${LLVM_VERSION}" \
|
|
-DCMAKE_CXX_COMPILER="/usr/bin/clang++-${LLVM_VERSION}" \
|
|
-DLLVM_TARGETS_TO_BUILD=Native \
|
|
-DLLVM_ENABLE_PER_TARGET_RUNTIME_DIR=OFF \
|
|
-DLIBCXX_INCLUDE_TESTS=OFF \
|
|
-DLIBCXXABI_INCLUDE_TESTS=OFF \
|
|
-DLIBUNWIND_INCLUDE_TESTS=OFF \
|
|
-DLIBCXXABI_USE_LLVM_UNWINDER=OFF \
|
|
-S /tmp/llvm-project/runtimes
|
|
grep -E 'CMAKE_(C|CXX)_COMPILER' "${LIBCXX_DIR}/CMakeCache.txt"
|
|
ninja -C "${LIBCXX_DIR}" -j "${BUILD_PARALLEL}" -v
|
|
rm -rf /tmp/llvm-project
|
|
}
|
|
|
|
configure_bitcoin_core() {
|
|
local cmake_arg
|
|
local cmake_args=()
|
|
|
|
if [[ -n "${BITCOIN_CORE_CMAKE_ARGS:-}" ]]; then
|
|
while IFS= read -r cmake_arg; do
|
|
[[ -n "${cmake_arg}" ]] || continue
|
|
cmake_args+=("${cmake_arg}")
|
|
done <<< "${BITCOIN_CORE_CMAKE_ARGS}"
|
|
fi
|
|
|
|
cmake -S . -B build \
|
|
--preset=dev-mode \
|
|
-DCMAKE_BUILD_TYPE=Debug \
|
|
-DBUILD_GUI=OFF \
|
|
-DBUILD_GUI_TESTS=OFF \
|
|
-DWITH_ZMQ=OFF \
|
|
-DWITH_USDT=OFF \
|
|
-DBUILD_BENCH=OFF \
|
|
-DBUILD_FUZZ_BINARY=OFF \
|
|
-DWITH_QRENCODE=OFF \
|
|
-G Ninja \
|
|
"${cmake_args[@]}"
|
|
}
|
|
|
|
build_bitcoin_core() {
|
|
cmake --build build --parallel "${BUILD_PARALLEL}"
|
|
}
|
|
|
|
build_depends_without_ipc() {
|
|
make -C depends -j "${BUILD_PARALLEL}" \
|
|
CC=clang \
|
|
CXX=clang++ \
|
|
CXXFLAGS="${LIBCXX_FLAGS}" \
|
|
NO_QT=1 \
|
|
NO_ZMQ=1 \
|
|
NO_USDT=1 \
|
|
NO_QR=1 \
|
|
NO_IPC=1
|
|
}
|
|
|
|
build_depends_with_ipc() {
|
|
make -C depends -j "${BUILD_PARALLEL}" \
|
|
CC=clang \
|
|
CXX=clang++ \
|
|
CXXFLAGS="${LIBCXX_FLAGS}" \
|
|
NO_QT=1 \
|
|
NO_ZMQ=1 \
|
|
NO_USDT=1 \
|
|
NO_QR=1
|
|
}
|
|
|
|
run_ipc_unit_tests() {
|
|
local runs="$1"
|
|
|
|
for _ in $(seq 1 "${runs}"); do
|
|
build/bin/test_bitcoin --run_test=ipc_tests,miner_tests --catch_system_error=no --log_level=nothing --report_level=no
|
|
done
|
|
}
|
|
|
|
run_ipc_functional_tests() {
|
|
local runs="$1"
|
|
local timeout_factor="$2"
|
|
local test_scripts
|
|
local test_args=()
|
|
|
|
test_scripts=$(python3 -c "import sys; import os; sys.path.append(os.path.abspath('build/test/functional')); from test_runner import ALL_SCRIPTS; print(' '.join(s for s in ALL_SCRIPTS if s.startswith('interface_ipc')))")
|
|
for _ in $(seq 1 "${runs}"); do
|
|
for script in $test_scripts; do
|
|
test_args+=("$script")
|
|
done
|
|
done
|
|
build/test/functional/test_runner.py "${test_args[@]}" --jobs "${PARALLEL}" --timeout-factor="${timeout_factor}" --failfast --combinedlogslen=99999999
|
|
}
|
|
|
|
main() {
|
|
local command="${1:?missing command}"
|
|
shift
|
|
|
|
[[ "${command}" =~ ^[a-z_][a-z0-9_]*$ ]] || {
|
|
echo "Invalid command: ${command}" >&2
|
|
exit 1
|
|
}
|
|
|
|
if declare -F "${command}" >/dev/null; then
|
|
"${command}" "$@"
|
|
else
|
|
echo "Unknown command: ${command}" >&2
|
|
exit 1
|
|
fi
|
|
}
|
|
|
|
main "$@"
|