mirror of
https://github.com/bitcoin/bitcoin.git
synced 2025-04-02 08:59:08 +02:00
Add CI job for producing a static bare metal binary
This commit is contained in:
parent
dbb1c45ce8
commit
662f67bd4a
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"
|
@ -84,6 +84,29 @@ if [[ ${USE_MEMORY_SANITIZER} == "true" ]]; then
|
||||
rm -rf /msan/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 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
|
||||
${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
|
||||
|
@ -132,6 +132,61 @@ bash -c "${PRINT_CCACHE_STATISTICS}"
|
||||
du -sh "${DEPENDS_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
|
||||
"${BASE_ROOT_DIR}/ci/test/wrap-wine.sh"
|
||||
fi
|
||||
|
Loading…
x
Reference in New Issue
Block a user