The new version of bpf-tools eliminates the separate rust-bpf-sysroot. The Rust standard libraries for the BPF target are built in tree when the compiler is built. The standard libraries code is slightly more optimized and some reduction of compute budget can be expected with this version of bpf-tools.
123 lines
2.6 KiB
Bash
Executable File
123 lines
2.6 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
|
|
mkdir -p "$(dirname "$0")"/../dependencies
|
|
cd "$(dirname "$0")"/../dependencies
|
|
|
|
if [[ "$(uname)" = Darwin ]]; then
|
|
machine=osx
|
|
else
|
|
machine=linux
|
|
fi
|
|
|
|
download() {
|
|
declare url="$1/$2/$3"
|
|
declare filename=$3
|
|
declare wget_args=(
|
|
"$url" -O "$filename"
|
|
"--progress=dot:giga"
|
|
"--retry-connrefused"
|
|
"--read-timeout=30"
|
|
)
|
|
declare curl_args=(
|
|
-L "$url" -o "$filename"
|
|
)
|
|
if hash wget 2>/dev/null; then
|
|
wget_or_curl="wget ${wget_args[*]}"
|
|
elif hash curl 2>/dev/null; then
|
|
wget_or_curl="curl ${curl_args[*]}"
|
|
else
|
|
echo "Error: Neither curl nor wget were found" >&2
|
|
return 1
|
|
fi
|
|
|
|
set -x
|
|
if $wget_or_curl; then
|
|
tar --strip-components 1 -jxf "$filename" || return 1
|
|
{ set +x; } 2>/dev/null
|
|
rm -rf "$filename"
|
|
return 0
|
|
fi
|
|
return 1
|
|
}
|
|
|
|
get() {
|
|
declare version=$1
|
|
declare dirname=$2
|
|
declare job=$3
|
|
declare cache_root=~/.cache/solana
|
|
declare cache_dirname="$cache_root/$version/$dirname"
|
|
declare cache_partial_dirname="$cache_dirname"_partial
|
|
|
|
if [[ -r $cache_dirname ]]; then
|
|
ln -sf "$cache_dirname" "$dirname" || return 1
|
|
return 0
|
|
fi
|
|
|
|
rm -rf "$cache_partial_dirname" || return 1
|
|
mkdir -p "$cache_partial_dirname" || return 1
|
|
pushd "$cache_partial_dirname"
|
|
|
|
if $job; then
|
|
popd
|
|
mv "$cache_partial_dirname" "$cache_dirname" || return 1
|
|
ln -sf "$cache_dirname" "$dirname" || return 1
|
|
return 0
|
|
fi
|
|
popd
|
|
return 1
|
|
}
|
|
|
|
# Install Criterion
|
|
if [[ $machine == "linux" ]]; then
|
|
version=v2.3.3
|
|
else
|
|
version=v2.3.2
|
|
fi
|
|
if [[ ! -e criterion-$version.md || ! -e criterion ]]; then
|
|
(
|
|
set -e
|
|
rm -rf criterion*
|
|
job="download \
|
|
https://github.com/Snaipe/Criterion/releases/download \
|
|
$version \
|
|
criterion-$version-$machine-x86_64.tar.bz2 \
|
|
criterion"
|
|
get $version criterion "$job"
|
|
)
|
|
exitcode=$?
|
|
if [[ $exitcode -ne 0 ]]; then
|
|
exit 1
|
|
fi
|
|
touch criterion-$version.md
|
|
fi
|
|
|
|
# Install Rust-BPF
|
|
version=v1.5
|
|
if [[ ! -e bpf-tools-$version.md || ! -e bpf-tools ]]; then
|
|
(
|
|
set -e
|
|
rm -rf bpf-tools*
|
|
rm -rf xargo
|
|
job="download \
|
|
https://github.com/solana-labs/bpf-tools/releases/download \
|
|
$version \
|
|
solana-bpf-tools-$machine.tar.bz2 \
|
|
bpf-tools"
|
|
get $version bpf-tools "$job"
|
|
)
|
|
exitcode=$?
|
|
if [[ $exitcode -ne 0 ]]; then
|
|
exit 1
|
|
fi
|
|
touch bpf-tools-$version.md
|
|
set -ex
|
|
./bpf-tools/rust/bin/rustc --version
|
|
./bpf-tools/rust/bin/rustc --print sysroot
|
|
set +e
|
|
rustup toolchain uninstall bpf
|
|
set -e
|
|
rustup toolchain link bpf bpf-tools/rust
|
|
fi
|
|
|
|
exit 0
|