Bump Rust-BPF to v1.46 (#15273)

This commit is contained in:
Jack May
2021-02-18 11:30:08 -08:00
committed by GitHub
parent e09c8543e4
commit 48785b507b
15 changed files with 32 additions and 150 deletions

View File

@ -1,10 +1,10 @@
//! @brief Test builtin mem functions
#![cfg(target_arch = "bpf")]
#![feature(compiler_builtins_lib)]
#![feature(rustc_private)]
extern crate compiler_builtins;
use solana_program::{custom_panic_default, entrypoint::SUCCESS, info};
use solana_program::{custom_panic_default, entrypoint::SUCCESS};
#[no_mangle]
pub extern "C" fn entrypoint(_input: *mut u8) -> u64 {

View File

@ -1213,7 +1213,7 @@ fn assert_instruction_count() {
programs.extend_from_slice(&[
("bpf_to_bpf", 13),
("multiple_static", 8),
("noop", 57),
("noop", 45),
("relative_call", 10),
("sanity", 176),
("sanity++", 177),
@ -1224,16 +1224,16 @@ fn assert_instruction_count() {
#[cfg(feature = "bpf_rust")]
{
programs.extend_from_slice(&[
("solana_bpf_rust_128bit", 572),
("solana_bpf_rust_alloc", 12919),
("solana_bpf_rust_128bit", 570),
("solana_bpf_rust_alloc", 8809),
("solana_bpf_rust_dep_crate", 2),
("solana_bpf_rust_external_spend", 514),
("solana_bpf_rust_external_spend", 526),
("solana_bpf_rust_iter", 724),
("solana_bpf_rust_many_args", 237),
("solana_bpf_rust_noop", 488),
("solana_bpf_rust_param_passing", 48),
("solana_bpf_rust_ristretto", 19399),
("solana_bpf_rust_sanity", 935),
("solana_bpf_rust_noop", 500),
("solana_bpf_rust_param_passing", 56),
("solana_bpf_rust_ristretto", 19208),
("solana_bpf_rust_sanity", 956),
]);
}

3
sdk/bpf/.gitignore vendored
View File

@ -1,7 +1,8 @@
/dependencies/criterion*
/dependencies/hashbrown*
/dependencies/llvm-native*
/dependencies/rust-bpf*
/dependencies/rust-bpf-sysroot*
/dependencies/bpf-tools*
/dependencies/xargo*
/dependencies/bin*
/dependencies/.crates.toml

View File

@ -14,14 +14,8 @@ TEST_PREFIX ?= test_
OUT_DIR ?= ./out
OS := $(shell uname)
ifeq ($(DOCKER),1)
$(warning DOCKER=1 is experimential and may not work as advertised)
LLVM_DIR = $(LOCAL_PATH)../dependencies/llvm-docker/
LLVM_SYSTEM_INC_DIRS := /usr/local/lib/clang/8.0.0/include
else
LLVM_DIR = $(LOCAL_PATH)../dependencies/llvm-native/
LLVM_DIR = $(LOCAL_PATH)../dependencies/bpf-tools/llvm/
LLVM_SYSTEM_INC_DIRS := $(LLVM_DIR)/lib/clang/8.0.0/include
endif
ifdef LLVM_DIR
CC := $(LLVM_DIR)/bin/clang

View File

@ -1,11 +0,0 @@
#!/usr/bin/env bash
set -e
PROGRAM=$(basename "$0")
SDKROOT="$(cd "$(dirname "$0")"/../..; pwd -P)"
[[ -z $V ]] || set -x
exec docker run \
--workdir "$PWD" \
--volume "$PWD:$PWD" \
--volume "$SDKROOT:$SDKROOT" \
--rm solanalabs/llvm \
"$PROGRAM" "$@"

View File

@ -1,11 +0,0 @@
#!/usr/bin/env bash
set -e
PROGRAM=$(basename "$0")
SDKROOT="$(cd "$(dirname "$0")"/../..; pwd -P)"
[[ -z $V ]] || set -x
exec docker run \
--workdir "$PWD" \
--volume "$PWD:$PWD" \
--volume "$SDKROOT:$SDKROOT" \
--rm solanalabs/llvm \
"$PROGRAM" "$@"

View File

@ -1,11 +0,0 @@
#!/usr/bin/env bash
set -e
PROGRAM=$(basename "$0")
SDKROOT="$(cd "$(dirname "$0")"/../..; pwd -P)"
[[ -z $V ]] || set -x
exec docker run \
--workdir "$PWD" \
--volume "$PWD:$PWD" \
--volume "$SDKROOT:$SDKROOT" \
--rm solanalabs/llvm \
"$PROGRAM" "$@"

View File

@ -1,11 +0,0 @@
#!/usr/bin/env bash
set -e
PROGRAM=$(basename "$0")
SDKROOT="$(cd "$(dirname "$0")"/../..; pwd -P)"
[[ -z $V ]] || set -x
exec docker run \
--workdir "$PWD" \
--volume "$PWD:$PWD" \
--volume "$SDKROOT:$SDKROOT" \
--rm solanalabs/llvm \
"$PROGRAM" "$@"

View File

@ -1,11 +0,0 @@
#!/usr/bin/env bash
set -e
PROGRAM=$(basename "$0")
SDKROOT="$(cd "$(dirname "$0")"/../..; pwd -P)"
[[ -z $V ]] || set -x
exec docker run \
--workdir "$PWD" \
--volume "$PWD:$PWD" \
--volume "$SDKROOT:$SDKROOT" \
--rm solanalabs/llvm \
"$PROGRAM" "$@"

View File

@ -1,11 +0,0 @@
#!/usr/bin/env bash
set -e
PROGRAM=$(basename "$0")
SDKROOT="$(cd "$(dirname "$0")"/../..; pwd -P)"
[[ -z $V ]] || set -x
exec docker run \
--workdir "$PWD" \
--volume "$PWD:$PWD" \
--volume "$SDKROOT:$SDKROOT" \
--rm solanalabs/llvm \
"$PROGRAM" "$@"

View File

@ -1,19 +0,0 @@
#!/usr/bin/env bash
read -r -d '' SCRIPT << 'EOM'
#!/usr/bin/env bash
set -e
PROGRAM=$(basename "$0")
SDKROOT="$(cd "$(dirname "$0")"/../..; pwd -P)"
[[ -z $V ]] || set -x
exec docker run \
--workdir "$PWD" \
--volume "$PWD:$PWD" \
--volume "$SDKROOT:$SDKROOT" \
--rm solanalabs/llvm \
"$PROGRAM" "$@"
EOM
for program in clang clang++ llc ld.lld llvm-objdump llvm-objcopy; do
echo "$SCRIPT" > bin/$program
done

View File

@ -10,10 +10,10 @@ fi
"$bpf_sdk"/scripts/install.sh
# Use the SDK's version of llvm to build the compiler-builtins for BPF
export CC="$bpf_sdk/dependencies/llvm-native/bin/clang"
export AR="$bpf_sdk/dependencies/llvm-native/bin/llvm-ar"
export OBJDUMP="$bpf_sdk/dependencies/llvm-native/bin/llvm-objdump"
export OBJCOPY="$bpf_sdk/dependencies/llvm-native/bin/llvm-objcopy"
export CC="$bpf_sdk/dependencies/bpf-tools/llvm/bin/clang"
export AR="$bpf_sdk/dependencies/bpf-tools/llvm/bin/llvm-ar"
export OBJDUMP="$bpf_sdk/dependencies/bpf-tools/llvm/bin/llvm-objdump"
export OBJCOPY="$bpf_sdk/dependencies/bpf-tools/llvm/bin/llvm-objcopy"
# Use the SDK's version of Rust to build for BPF
export RUSTUP_TOOLCHAIN=bpf
@ -26,7 +26,7 @@ export RUSTFLAGS="
-C link-arg=-shared \
-C link-arg=--entry=entrypoint \
-C link-arg=-no-threads \
-C linker=$bpf_sdk/dependencies/llvm-native/bin/ld.lld"
-C linker=$bpf_sdk/dependencies/bpf-tools/llvm/bin/ld.lld"
# CARGO may be set if run from within cargo, causing
# incompatibilities between cargo and xargo versions

View File

@ -20,14 +20,6 @@ if ! command -v rustfilt > /dev/null; then
echo "Error: rustfilt not found. It can be installed by running: cargo install rustfilt"
exit 1
fi
if ! command -v readelf > /dev/null; then
if [[ $(uname) = Darwin ]]; then
echo "Error: readelf not found. It can be installed by running: brew install binutils"
else
echo "Error: readelf not found."
fi
exit 1
fi
set -e
out_dir=$(dirname "$dump")
@ -39,7 +31,7 @@ dump_mangled=$dump.mangled
(
set -ex
ls -la "$so" > "$dump_mangled"
readelf -aW "$so" >>"$dump_mangled"
"$bpf_sdk"/dependencies/bpf-tools/llvm/bin/llvm-readelf -aW "$so" >>"$dump_mangled"
"$OBJDUMP" -print-imm-hex --source --disassemble "$so" >> "$dump_mangled"
sed s/://g < "$dump_mangled" | rustfilt > "$dump"
)

View File

@ -1,5 +1,6 @@
#!/usr/bin/env bash
mkdir -p "$(dirname "$0")"/../dependencies
cd "$(dirname "$0")"/../dependencies
if [[ "$(uname)" = Darwin ]]; then
@ -128,57 +129,36 @@ if [[ ! -e criterion-$version.md || ! -e criterion ]]; then
touch criterion-$version.md
fi
# Install LLVM
version=v0.0.15
if [[ ! -e llvm-native-$version.md || ! -e llvm-native ]]; then
(
set -e
rm -rf llvm-native*
rm -rf xargo
job="download \
https://github.com/solana-labs/llvm-builder/releases/download \
$version \
solana-llvm-$machine.tar.bz2 \
llvm-native"
get $version llvm-native "$job"
)
exitcode=$?
if [[ $exitcode -ne 0 ]]; then
exit 1
fi
touch llvm-native-$version.md
fi
# Install Rust-BPF
version=v0.2.5
if [[ ! -e rust-bpf-$machine-$version.md || ! -e rust-bpf-$machine ]]; then
version=v1.0
if [[ ! -e bpf-tools-$version.md || ! -e bpf-tools ]]; then
(
set -e
rm -rf rust-bpf-$machine*
rm -rf bpf-tools*
rm -rf xargo
job="download \
https://github.com/solana-labs/rust-bpf-builder/releases/download \
https://github.com/solana-labs/bpf-tools/releases/download \
$version \
solana-rust-bpf-$machine.tar.bz2 \
rust-bpf-$machine"
get $version rust-bpf-$machine "$job"
solana-bpf-tools-$machine.tar.bz2 \
bpf-tools"
get $version bpf-tools "$job"
set -ex
./rust-bpf-$machine/bin/rustc --print sysroot
./bpf-tools/rust/bin/rustc --print sysroot
set +e
rustup toolchain uninstall bpf
set -e
rustup toolchain link bpf rust-bpf-$machine
rustup toolchain link bpf bpf-tools/rust
)
exitcode=$?
if [[ $exitcode -ne 0 ]]; then
exit 1
fi
touch rust-bpf-$machine-$version.md
touch bpf-tools-$version.md
fi
# Install Rust-BPF Sysroot sources
version=v0.14
version=v1.0
if [[ ! -e rust-bpf-sysroot-$version.md || ! -e rust-bpf-sysroot ]]; then
(
set -e

View File

@ -20,4 +20,4 @@ out_dir=$(dirname "$so_stripped")
if [[ ! -d $out_dir ]]; then
mkdir -p "$out_dir"
fi
"$bpf_sdk"/dependencies/llvm-native/bin/llvm-objcopy --strip-all "$so" "$so_stripped"
"$bpf_sdk"/dependencies/bpf-tools/llvm/bin/llvm-objcopy --strip-all "$so" "$so_stripped"