mirror of
https://github.com/bitcoin/bitcoin.git
synced 2025-03-29 03:02:33 +01:00
Compare commits
6 Commits
66b70f12e6
...
1d36649366
Author | SHA1 | Date | |
---|---|---|---|
|
1d36649366 | ||
|
257fd27e4b | ||
|
52482cb244 | ||
|
f27760012b | ||
|
662f67bd4a | ||
|
dbb1c45ce8 |
10
.cirrus.yml
10
.cirrus.yml
@ -212,3 +212,13 @@ task:
|
|||||||
type: small
|
type: small
|
||||||
env:
|
env:
|
||||||
FILE_ENV: "./ci/test/00_setup_env_mac_cross.sh"
|
FILE_ENV: "./ci/test/00_setup_env_mac_cross.sh"
|
||||||
|
|
||||||
|
task:
|
||||||
|
name: 'riscv32 bare metal, static libbitcoin_consensus'
|
||||||
|
<< : *GLOBAL_TASK_TEMPLATE
|
||||||
|
persistent_worker:
|
||||||
|
labels:
|
||||||
|
type: small
|
||||||
|
env:
|
||||||
|
FILE_ENV: "./ci/test/00_setup_env_riscv_bare_cross.sh"
|
||||||
|
|
||||||
|
@ -340,11 +340,13 @@ if(CMAKE_SYSTEM_NAME STREQUAL "Darwin")
|
|||||||
endif()
|
endif()
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
|
if(NOT CMAKE_SYSTEM_NAME STREQUAL "Generic")
|
||||||
set(THREADS_PREFER_PTHREAD_FLAG ON)
|
set(THREADS_PREFER_PTHREAD_FLAG ON)
|
||||||
find_package(Threads REQUIRED)
|
find_package(Threads REQUIRED)
|
||||||
target_link_libraries(core_interface INTERFACE
|
target_link_libraries(core_interface INTERFACE
|
||||||
Threads::Threads
|
Threads::Threads
|
||||||
)
|
)
|
||||||
|
endif()
|
||||||
|
|
||||||
add_library(sanitize_interface INTERFACE)
|
add_library(sanitize_interface INTERFACE)
|
||||||
target_link_libraries(core_interface INTERFACE sanitize_interface)
|
target_link_libraries(core_interface INTERFACE sanitize_interface)
|
||||||
@ -395,8 +397,10 @@ if(BUILD_FUZZ_BINARY)
|
|||||||
)
|
)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
|
if(NOT CMAKE_SYSTEM_NAME STREQUAL "Generic")
|
||||||
include(AddBoostIfNeeded)
|
include(AddBoostIfNeeded)
|
||||||
add_boost_if_needed()
|
add_boost_if_needed()
|
||||||
|
endif()
|
||||||
|
|
||||||
if(BUILD_DAEMON OR BUILD_GUI OR BUILD_CLI OR BUILD_TESTS OR BUILD_BENCH OR BUILD_FUZZ_BINARY)
|
if(BUILD_DAEMON OR BUILD_GUI OR BUILD_CLI OR BUILD_TESTS OR BUILD_BENCH OR BUILD_FUZZ_BINARY)
|
||||||
find_package(Libevent 2.1.8 MODULE REQUIRED)
|
find_package(Libevent 2.1.8 MODULE REQUIRED)
|
||||||
|
31
ci/test/00_setup_env_riscv_bare_cross.sh
Executable file
31
ci/test/00_setup_env_riscv_bare_cross.sh
Executable file
@ -0,0 +1,31 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
#
|
||||||
|
# Copyright (c) 2019-present The Bitcoin Core developers
|
||||||
|
# Distributed under the MIT software license, see the accompanying
|
||||||
|
# file COPYING or http://www.opensource.org/licenses/mit-license.php.
|
||||||
|
|
||||||
|
export LC_ALL=C.UTF-8
|
||||||
|
|
||||||
|
export CONTAINER_NAME=ci_native_riscv_bare
|
||||||
|
|
||||||
|
export CI_IMAGE_NAME_TAG="docker.io/ubuntu:24.04"
|
||||||
|
export PACKAGES="autoconf automake autotools-dev curl python3 python3-pip libmpc-dev libmpfr-dev libgmp-dev gawk build-essential bison flex texinfo gperf libtool patchutils bc zlib1g-dev libexpat-dev ninja-build git cmake libglib2.0-dev libslirp-dev"
|
||||||
|
export BITCOIN_CONFIG="-DCMAKE_C_COMPILER=/opt/riscv-ilp32/bin/riscv32-unknown-elf-gcc \
|
||||||
|
-DCMAKE_CXX_COMPILER=/opt/riscv-ilp32/bin/riscv32-unknown-elf-g++ \
|
||||||
|
-DBUILD_KERNEL_LIB=OFF \
|
||||||
|
-DBUILD_UTIL_CHAINSTATE=OFF \
|
||||||
|
-DBUILD_TESTS=OFF \
|
||||||
|
-DBUILD_BENCH=OFF \
|
||||||
|
-DBUILD_FUZZ_BINARY=OFF \
|
||||||
|
-DBUILD_DAEMON=OFF \
|
||||||
|
-DBUILD_TX=OFF \
|
||||||
|
-DBUILD_UTIL=OFF \
|
||||||
|
-DBUILD_CLI=OFF \
|
||||||
|
-DENABLE_WALLET=OFF \
|
||||||
|
-DCMAKE_SYSTEM_NAME=Generic \
|
||||||
|
"
|
||||||
|
|
||||||
|
export BARE_METAL_RISCV="true"
|
||||||
|
export RUN_UNIT_TESTS="false"
|
||||||
|
export RUN_FUNCTIONAL_TESTS="false"
|
||||||
|
export NO_DEPENDS="true"
|
@ -85,6 +85,29 @@ if [[ ${USE_MEMORY_SANITIZER} == "true" ]]; then
|
|||||||
rm -rf /msan/llvm-project
|
rm -rf /msan/llvm-project
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
if [[ ${BARE_METAL_RISCV} == "true" ]]; then
|
||||||
|
${CI_RETRY_EXE} git clone --depth=1 https://github.com/riscv-collab/riscv-gnu-toolchain -b 2024.11.22 /riscv/gcc
|
||||||
|
( cd /riscv/gcc;
|
||||||
|
./configure --prefix=/opt/riscv-ilp32 --with-arch=rv32gc --with-abi=ilp32;
|
||||||
|
make -j "$MAKEJOBS";
|
||||||
|
make install; )
|
||||||
|
rm -rf /riscv/gcc
|
||||||
|
|
||||||
|
${CI_RETRY_EXE} git clone --depth=1 https://sourceware.org/git/newlib-cygwin.git -b topic/3.6 /riscv/newlib
|
||||||
|
( cd /riscv/newlib;
|
||||||
|
mkdir build && cd build;
|
||||||
|
../configure \
|
||||||
|
--target=riscv32-unknown-elf --with-arch=rv32gc --with-abi=ilp32 --disable-shared --disable-multilib\
|
||||||
|
--prefix=/opt/newlib \
|
||||||
|
CC_FOR_TARGET=/opt/riscv-ilp32/bin/riscv32-unknown-elf-gcc \
|
||||||
|
CXX_FOR_TARGET=/opt/riscv-ilp32/bin/riscv32-unknown-elf-g++ \
|
||||||
|
AR_FOR_TARGET=/opt/riscv-ilp32/bin/riscv32-unknown-elf-ar \
|
||||||
|
RANLIB_FOR_TARGET=/opt/riscv-ilp32/bin/riscv32-unknown-elf-ranlib
|
||||||
|
make -j "$MAKEJOBS";
|
||||||
|
make install; )
|
||||||
|
rm -rf /riscv/newlib
|
||||||
|
fi
|
||||||
|
|
||||||
if [[ "${RUN_TIDY}" == "true" ]]; then
|
if [[ "${RUN_TIDY}" == "true" ]]; then
|
||||||
${CI_RETRY_EXE} git clone --depth=1 https://github.com/include-what-you-use/include-what-you-use -b clang_"${TIDY_LLVM_V}" /include-what-you-use
|
${CI_RETRY_EXE} git clone --depth=1 https://github.com/include-what-you-use/include-what-you-use -b clang_"${TIDY_LLVM_V}" /include-what-you-use
|
||||||
cmake -B /iwyu-build/ -G 'Unix Makefiles' -DCMAKE_PREFIX_PATH=/usr/lib/llvm-"${TIDY_LLVM_V}" -S /include-what-you-use
|
cmake -B /iwyu-build/ -G 'Unix Makefiles' -DCMAKE_PREFIX_PATH=/usr/lib/llvm-"${TIDY_LLVM_V}" -S /include-what-you-use
|
||||||
|
@ -132,6 +132,61 @@ bash -c "${PRINT_CCACHE_STATISTICS}"
|
|||||||
du -sh "${DEPENDS_DIR}"/*/
|
du -sh "${DEPENDS_DIR}"/*/
|
||||||
du -sh "${PREVIOUS_RELEASES_DIR}"
|
du -sh "${PREVIOUS_RELEASES_DIR}"
|
||||||
|
|
||||||
|
if [[ ${BARE_METAL_RISCV} == "true" ]]; then
|
||||||
|
cmake --build . --target bitcoin_consensus
|
||||||
|
|
||||||
|
echo -e "#include <script/script_error.h>\n int main() { return ScriptErrorString(ScriptError_t::SCRIPT_ERR_UNKNOWN_ERROR).size() > 0; }" > test.cpp
|
||||||
|
|
||||||
|
/opt/riscv-ilp32/bin/riscv32-unknown-elf-g++ -I "${BASE_ROOT_DIR}"/src -g -std=c++20 -march=rv32gc -mabi=ilp32 -c test.cpp -o test.o
|
||||||
|
|
||||||
|
echo -e ".section .text
|
||||||
|
.global _start
|
||||||
|
.type _start, @function
|
||||||
|
|
||||||
|
_start:
|
||||||
|
.option push
|
||||||
|
.option norelax
|
||||||
|
la gp, __global_pointer$
|
||||||
|
.option pop
|
||||||
|
|
||||||
|
call main
|
||||||
|
|
||||||
|
# Put Exit2 system call number into the a7 register
|
||||||
|
li a7, 93
|
||||||
|
ecall" > start.s
|
||||||
|
|
||||||
|
/opt/riscv-ilp32/bin/riscv32-unknown-elf-gcc -c start.s -o start.o
|
||||||
|
|
||||||
|
echo -e "#include <sys/stat.h>
|
||||||
|
void _exit(int code) { while(1); }
|
||||||
|
int _sbrk(int incr) { return 0; }
|
||||||
|
int _write(int file, char *ptr, int len) { return 0; }
|
||||||
|
int _close(int file) { return -1; }
|
||||||
|
int _fstat(int file, struct stat *st) { st->st_mode = S_IFCHR; return 0; }
|
||||||
|
int _isatty(int file) { return 1; }
|
||||||
|
int _lseek(int file, int ptr, int dir) { return 0; }
|
||||||
|
int _read(int file, char *ptr, int len) { return 0; }
|
||||||
|
int _kill(int pid, int sig) { return -1; }
|
||||||
|
int _getpid(void) { return -1; }" > syscalls.c
|
||||||
|
|
||||||
|
/opt/riscv-ilp32/bin/riscv32-unknown-elf-gcc -g -march=rv32i -mabi=ilp32 -c syscalls.c -o syscalls.o
|
||||||
|
|
||||||
|
/opt/riscv-ilp32/bin/riscv32-unknown-elf-g++ -g -std=c++20 -march=rv32gc -mabi=ilp32 \
|
||||||
|
-nostdlib \
|
||||||
|
/opt/riscv-ilp32/lib/gcc/riscv32-unknown-elf/14.2.0/crtbegin.o \
|
||||||
|
test.o \
|
||||||
|
start.o \
|
||||||
|
syscalls.o \
|
||||||
|
src/libbitcoin_consensus.a \
|
||||||
|
src/crypto/libbitcoin_crypto.a \
|
||||||
|
src/secp256k1/lib/libsecp256k1.a \
|
||||||
|
/opt/riscv-ilp32/riscv32-unknown-elf/lib/libstdc++.a \
|
||||||
|
/opt/newlib/riscv32-unknown-elf/lib/libc.a \
|
||||||
|
/opt/newlib/riscv32-unknown-elf/lib/libm.a \
|
||||||
|
/opt/riscv-ilp32/lib/gcc/riscv32-unknown-elf/14.2.0/libgcc.a \
|
||||||
|
-o test.elf
|
||||||
|
fi
|
||||||
|
|
||||||
if [[ $HOST = *-mingw32 ]]; then
|
if [[ $HOST = *-mingw32 ]]; then
|
||||||
"${BASE_ROOT_DIR}/ci/test/wrap-wine.sh"
|
"${BASE_ROOT_DIR}/ci/test/wrap-wine.sh"
|
||||||
fi
|
fi
|
||||||
|
@ -26,7 +26,9 @@ if(HAVE_SYS_TYPES_H AND HAVE_IFADDRS_H)
|
|||||||
endif()
|
endif()
|
||||||
|
|
||||||
include(TestAppendRequiredLibraries)
|
include(TestAppendRequiredLibraries)
|
||||||
|
if(NOT CMAKE_SYSTEM_NAME STREQUAL "Generic")
|
||||||
test_append_atomic_library(core_interface)
|
test_append_atomic_library(core_interface)
|
||||||
|
endif()
|
||||||
|
|
||||||
check_cxx_symbol_exists(std::system "cstdlib" HAVE_STD_SYSTEM)
|
check_cxx_symbol_exists(std::system "cstdlib" HAVE_STD_SYSTEM)
|
||||||
check_cxx_symbol_exists(::_wsystem "stdlib.h" HAVE__WSYSTEM)
|
check_cxx_symbol_exists(::_wsystem "stdlib.h" HAVE__WSYSTEM)
|
||||||
|
@ -185,7 +185,7 @@ target_link_libraries(bitcoin_common
|
|||||||
bitcoin_util
|
bitcoin_util
|
||||||
univalue
|
univalue
|
||||||
secp256k1
|
secp256k1
|
||||||
Boost::headers
|
$<TARGET_NAME_IF_EXISTS:Boost::headers>
|
||||||
$<TARGET_NAME_IF_EXISTS:USDT::headers>
|
$<TARGET_NAME_IF_EXISTS:USDT::headers>
|
||||||
$<$<PLATFORM_ID:Windows>:ws2_32>
|
$<$<PLATFORM_ID:Windows>:ws2_32>
|
||||||
)
|
)
|
||||||
@ -319,7 +319,7 @@ target_link_libraries(bitcoin_node
|
|||||||
leveldb
|
leveldb
|
||||||
minisketch
|
minisketch
|
||||||
univalue
|
univalue
|
||||||
Boost::headers
|
$<TARGET_NAME_IF_EXISTS:Boost::headers>
|
||||||
$<TARGET_NAME_IF_EXISTS:libevent::core>
|
$<TARGET_NAME_IF_EXISTS:libevent::core>
|
||||||
$<TARGET_NAME_IF_EXISTS:libevent::extra>
|
$<TARGET_NAME_IF_EXISTS:libevent::extra>
|
||||||
$<TARGET_NAME_IF_EXISTS:libevent::pthreads>
|
$<TARGET_NAME_IF_EXISTS:libevent::pthreads>
|
||||||
|
@ -24,7 +24,7 @@ add_library(test_util STATIC EXCLUDE_FROM_ALL
|
|||||||
target_link_libraries(test_util
|
target_link_libraries(test_util
|
||||||
PRIVATE
|
PRIVATE
|
||||||
core_interface
|
core_interface
|
||||||
Boost::headers
|
$<TARGET_NAME_IF_EXISTS:Boost::headers>
|
||||||
PUBLIC
|
PUBLIC
|
||||||
univalue
|
univalue
|
||||||
)
|
)
|
||||||
|
@ -9,6 +9,7 @@ to a hash that has been compiled into bitcoind.
|
|||||||
The assumeutxo value generated and used here is committed to in
|
The assumeutxo value generated and used here is committed to in
|
||||||
`CRegTestParams::m_assumeutxo_data` in `src/kernel/chainparams.cpp`.
|
`CRegTestParams::m_assumeutxo_data` in `src/kernel/chainparams.cpp`.
|
||||||
"""
|
"""
|
||||||
|
import contextlib
|
||||||
from shutil import rmtree
|
from shutil import rmtree
|
||||||
|
|
||||||
from dataclasses import dataclass
|
from dataclasses import dataclass
|
||||||
@ -349,6 +350,22 @@ class AssumeutxoTest(BitcoinTestFramework):
|
|||||||
assert 'NETWORK' not in node_services
|
assert 'NETWORK' not in node_services
|
||||||
assert 'NETWORK_LIMITED' in node_services
|
assert 'NETWORK_LIMITED' in node_services
|
||||||
|
|
||||||
|
@contextlib.contextmanager
|
||||||
|
def assert_disk_cleanup(self, node, assumeutxo_used):
|
||||||
|
"""
|
||||||
|
Ensure an assumeutxo node is cleaning up the background chainstate
|
||||||
|
"""
|
||||||
|
msg = []
|
||||||
|
if assumeutxo_used:
|
||||||
|
# Check that the snapshot actually existed before restart
|
||||||
|
assert (node.datadir_path / node.chain / "chainstate_snapshot").exists()
|
||||||
|
msg = ["cleaning up unneeded background chainstate"]
|
||||||
|
|
||||||
|
with node.assert_debug_log(msg):
|
||||||
|
yield
|
||||||
|
|
||||||
|
assert not (node.datadir_path / node.chain / "chainstate_snapshot").exists()
|
||||||
|
|
||||||
def run_test(self):
|
def run_test(self):
|
||||||
"""
|
"""
|
||||||
Bring up two (disconnected) nodes, mine some new blocks on the first,
|
Bring up two (disconnected) nodes, mine some new blocks on the first,
|
||||||
@ -656,7 +673,8 @@ class AssumeutxoTest(BitcoinTestFramework):
|
|||||||
for i in (0, 1):
|
for i in (0, 1):
|
||||||
n = self.nodes[i]
|
n = self.nodes[i]
|
||||||
self.log.info(f"Restarting node {i} to ensure (Check|Load)BlockIndex passes")
|
self.log.info(f"Restarting node {i} to ensure (Check|Load)BlockIndex passes")
|
||||||
self.restart_node(i, extra_args=self.extra_args[i])
|
with self.assert_disk_cleanup(n, i == 1):
|
||||||
|
self.restart_node(i, extra_args=self.extra_args[i])
|
||||||
|
|
||||||
assert_equal(n.getblockchaininfo()["blocks"], FINAL_HEIGHT)
|
assert_equal(n.getblockchaininfo()["blocks"], FINAL_HEIGHT)
|
||||||
|
|
||||||
@ -733,7 +751,8 @@ class AssumeutxoTest(BitcoinTestFramework):
|
|||||||
for i in (0, 2):
|
for i in (0, 2):
|
||||||
n = self.nodes[i]
|
n = self.nodes[i]
|
||||||
self.log.info(f"Restarting node {i} to ensure (Check|Load)BlockIndex passes")
|
self.log.info(f"Restarting node {i} to ensure (Check|Load)BlockIndex passes")
|
||||||
self.restart_node(i, extra_args=self.extra_args[i])
|
with self.assert_disk_cleanup(n, i == 2):
|
||||||
|
self.restart_node(i, extra_args=self.extra_args[i])
|
||||||
|
|
||||||
assert_equal(n.getblockchaininfo()["blocks"], FINAL_HEIGHT)
|
assert_equal(n.getblockchaininfo()["blocks"], FINAL_HEIGHT)
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user