Files
bitcoin/ci/scripts/bitcoin_core_ci.sh
Ryan Ofsky 2478a15ef9 Squashed 'src/ipc/libmultiprocess/' changes from 1868a84451f..70f632bda8f
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
2026-03-27 05:50:19 -04:00

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 "$@"