diff --git a/ci/test/00_setup_env_riscv_bare_cross.sh b/ci/test/00_setup_env_riscv_bare_cross.sh new file mode 100755 index 00000000000..b68434087dc --- /dev/null +++ b/ci/test/00_setup_env_riscv_bare_cross.sh @@ -0,0 +1,37 @@ +#!/usr/bin/env bash +# +# Copyright (c) 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 GOAL="bitcoin_consensus bitcoin_crypto secp256k1" +export CI_IMAGE_NAME_TAG="mirror.gcr.io/ubuntu:26.04" +export HOST="riscv32-unknown-elf-gcc" +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 \ + -DBUILD_BITCOIN_BIN=OFF \ + -DENABLE_WALLET=OFF \ + -DENABLE_EXTERNAL_SIGNER=OFF \ + -DENABLE_IPC=OFF \ + -DCMAKE_SYSTEM_NAME=Generic \ + -DIFADDR_LINKS_WITHOUT_LIBSOCKET=ON \ + " + +export BARE_METAL_RISCV="true" +export RUN_UNIT_TESTS="false" +export RUN_FUNCTIONAL_TESTS="false" +export NO_DEPENDS="true" diff --git a/ci/test/01_base_install.sh b/ci/test/01_base_install.sh index 54dafbe8fd4..3dee1b734c5 100755 --- a/ci/test/01_base_install.sh +++ b/ci/test/01_base_install.sh @@ -87,6 +87,14 @@ if [[ -n "${USE_INSTRUMENTED_LIBCPP}" ]]; then rm -rf /llvm-project fi +if [[ ${BARE_METAL_RISCV} == "true" ]]; then + ${CI_RETRY_EXE} git clone --depth=1 https://github.com/riscv-collab/riscv-gnu-toolchain -b 2026.06.06 /riscv/gcc + ( cd /riscv/gcc; + ./configure --prefix=/opt/riscv-ilp32 --with-arch=rv32gc --with-abi=ilp32 --disable-gdb; + make "$MAKEJOBS"; ) + rm -rf /riscv/gcc +fi + if [[ "${RUN_IWYU}" == true ]]; then ${CI_RETRY_EXE} git clone --depth=1 https://github.com/include-what-you-use/include-what-you-use -b clang_"${IWYU_LLVM_V}" /include-what-you-use pushd /include-what-you-use diff --git a/ci/test/03_test_script.sh b/ci/test/03_test_script.sh index c55f4430163..7650ab7d86b 100755 --- a/ci/test/03_test_script.sh +++ b/ci/test/03_test_script.sh @@ -167,6 +167,11 @@ if [ -n "${CI_LIMIT_STACK_SIZE}" ]; then ulimit -s 512 fi +if [[ ${BARE_METAL_RISCV} == "true" ]]; then + export BASE_BUILD_DIR + "${BASE_ROOT_DIR}/ci/test/link-riscv.sh" +fi + if [ -n "$USE_VALGRIND" ]; then "${BASE_ROOT_DIR}/ci/test/wrap-valgrind.py" fi diff --git a/ci/test/link-riscv.sh b/ci/test/link-riscv.sh new file mode 100755 index 00000000000..93bebfa8a97 --- /dev/null +++ b/ci/test/link-riscv.sh @@ -0,0 +1,73 @@ +#!/usr/bin/env bash +# +# Copyright (c) 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 +set -o errexit -o xtrace -o pipefail + +GCC=/opt/riscv-ilp32/bin/riscv32-unknown-elf-gcc +GXX=/opt/riscv-ilp32/bin/riscv32-unknown-elf-g++ +CRTBEGIN=$("${GCC}" -print-file-name=crtbegin.o) +LIBGCC=$("${GCC}" -print-libgcc-file-name) +LIBSTDCXX=$("${GXX}" -print-file-name=libstdc++.a) +LIBC=$("${GCC}" -print-file-name=libc.a) +LIBM=$("${GCC}" -print-file-name=libm.a) + +echo -e "#include