diff --git a/programs/bpf/rust/mem/src/lib.rs b/programs/bpf/rust/mem/src/lib.rs index 860ff16a24..2315eb0d84 100644 --- a/programs/bpf/rust/mem/src/lib.rs +++ b/programs/bpf/rust/mem/src/lib.rs @@ -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 { diff --git a/programs/bpf/tests/programs.rs b/programs/bpf/tests/programs.rs index ab63aa1cf4..cac2d66dc6 100644 --- a/programs/bpf/tests/programs.rs +++ b/programs/bpf/tests/programs.rs @@ -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), ]); } diff --git a/sdk/bpf/.gitignore b/sdk/bpf/.gitignore index deda848aab..beaddb4ca6 100644 --- a/sdk/bpf/.gitignore +++ b/sdk/bpf/.gitignore @@ -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 diff --git a/sdk/bpf/c/bpf.mk b/sdk/bpf/c/bpf.mk index 379058d256..d056afcd4a 100644 --- a/sdk/bpf/c/bpf.mk +++ b/sdk/bpf/c/bpf.mk @@ -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 diff --git a/sdk/bpf/dependencies/llvm-docker/bin/clang b/sdk/bpf/dependencies/llvm-docker/bin/clang deleted file mode 100755 index 03f69ca1aa..0000000000 --- a/sdk/bpf/dependencies/llvm-docker/bin/clang +++ /dev/null @@ -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" "$@" diff --git a/sdk/bpf/dependencies/llvm-docker/bin/clang++ b/sdk/bpf/dependencies/llvm-docker/bin/clang++ deleted file mode 100755 index 03f69ca1aa..0000000000 --- a/sdk/bpf/dependencies/llvm-docker/bin/clang++ +++ /dev/null @@ -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" "$@" diff --git a/sdk/bpf/dependencies/llvm-docker/bin/ld.lld b/sdk/bpf/dependencies/llvm-docker/bin/ld.lld deleted file mode 100755 index 03f69ca1aa..0000000000 --- a/sdk/bpf/dependencies/llvm-docker/bin/ld.lld +++ /dev/null @@ -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" "$@" diff --git a/sdk/bpf/dependencies/llvm-docker/bin/llc b/sdk/bpf/dependencies/llvm-docker/bin/llc deleted file mode 100755 index 03f69ca1aa..0000000000 --- a/sdk/bpf/dependencies/llvm-docker/bin/llc +++ /dev/null @@ -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" "$@" diff --git a/sdk/bpf/dependencies/llvm-docker/bin/llvm-objcopy b/sdk/bpf/dependencies/llvm-docker/bin/llvm-objcopy deleted file mode 100755 index 03f69ca1aa..0000000000 --- a/sdk/bpf/dependencies/llvm-docker/bin/llvm-objcopy +++ /dev/null @@ -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" "$@" diff --git a/sdk/bpf/dependencies/llvm-docker/bin/llvm-objdump b/sdk/bpf/dependencies/llvm-docker/bin/llvm-objdump deleted file mode 100755 index 03f69ca1aa..0000000000 --- a/sdk/bpf/dependencies/llvm-docker/bin/llvm-objdump +++ /dev/null @@ -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" "$@" diff --git a/sdk/bpf/dependencies/llvm-docker/generate.sh b/sdk/bpf/dependencies/llvm-docker/generate.sh deleted file mode 100755 index 0ec8023277..0000000000 --- a/sdk/bpf/dependencies/llvm-docker/generate.sh +++ /dev/null @@ -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 diff --git a/sdk/bpf/env.sh b/sdk/bpf/env.sh index 8217277694..db94262b29 100644 --- a/sdk/bpf/env.sh +++ b/sdk/bpf/env.sh @@ -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 diff --git a/sdk/bpf/scripts/dump.sh b/sdk/bpf/scripts/dump.sh index b1dc866bfc..47ab94db55 100755 --- a/sdk/bpf/scripts/dump.sh +++ b/sdk/bpf/scripts/dump.sh @@ -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" ) diff --git a/sdk/bpf/scripts/install.sh b/sdk/bpf/scripts/install.sh index 2ca46cebc6..5938150769 100755 --- a/sdk/bpf/scripts/install.sh +++ b/sdk/bpf/scripts/install.sh @@ -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 diff --git a/sdk/bpf/scripts/strip.sh b/sdk/bpf/scripts/strip.sh index e80459829e..eafa4fd822 100755 --- a/sdk/bpf/scripts/strip.sh +++ b/sdk/bpf/scripts/strip.sh @@ -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"