solana/sdk/bpf/scripts/install.sh

193 lines
3.7 KiB
Bash
Executable File

#!/usr/bin/env bash
cd "$(dirname "$0")"/../dependencies
if [[ "$(uname)" = Darwin ]]; then
machine=osx
else
machine=linux
fi
download() {
set -e
declare url="$1/$2/$3"
declare version=$2
declare filename=$3
declare dirname=$4
declare progress=$5
declare cache_directory=~/.cache/"$version"
declare cache_dirname=$cache_directory/${dirname//:\//_}
link() {
set -e
ln -sf "$cache_dirname" "$dirname"
ln -sf "$cache_directory/$dirname-$version.md" "$dirname-$version.md"
}
if [[ -r $cache_dirname ]]; then
link
return 0
fi
declare args=(
"$url" -O "$filename"
"--progress=dot:$progress"
"--retry-connrefused"
"--read-timeout=30"
)
set -x
mkdir -p "$cache_dirname"
pushd "$cache_dirname"
if wget "${args[@]}"; then
tar --strip-components 1 -jxf "$filename"
rm -rf "$filename"
echo "$url" >"../$dirname-$version.md"
popd
link
return 0
fi
popd
rm -rf "$cache_dirname"
return 1
}
clone() {
set -e
declare url=$1
declare version=$2
declare dirname=$3
declare cache_directory=~/.cache/"$version"
declare cache_dirname=$cache_directory/${dirname//:\//_}
link() {
set -e
ln -sf "$cache_dirname" "$dirname"
ln -sf "$cache_directory/$dirname-$version.md" "$dirname-$version.md"
}
if [[ -r $cache_dirname ]]; then
link
return 0
fi
set -x
mkdir -p "$cache_directory"
pushd "$cache_directory"
cmd="git clone --recursive --depth 1 --single-branch --branch $version $url"
if $cmd; then
echo "$cmd" >"$dirname-$version.md"
popd
link
return 0
fi
return 1
}
# Install xargo
version=0.3.22
if [[ ! -e xargo-$version.md ]] || [[ ! -x bin/xargo ]]; then
(
args=()
# shellcheck disable=SC2154
if [[ -n $rust_stable ]]; then
args+=(+"$rust_stable")
fi
args+=(install xargo --version "$version" --root .)
set -ex
cargo "${args[@]}"
./bin/xargo --version >xargo-$version.md 2>&1
)
exitcode=$?
if [[ $exitcode -ne 0 ]]; then
rm -rf xargo-$version.md
exit 1
fi
fi
# Install Criterion
version=v2.3.2
if [[ ! -e criterion-$version.md ]]; then
(
set -e
rm -rf criterion*
download "https://github.com/Snaipe/Criterion/releases/download" \
$version \
"criterion-$version-$machine-x86_64.tar.bz2" \
criterion \
mega
)
exitcode=$?
if [[ $exitcode -ne 0 ]]; then
rm -rf criterion-$version.md
exit 1
fi
fi
# Install LLVM
version=v0.0.15
if [[ ! -e llvm-native-$version.md ]]; then
(
set -e
rm -rf llvm-native*
rm -rf xargo
download "https://github.com/solana-labs/llvm-builder/releases/download" \
$version \
"solana-llvm-$machine.tar.bz2" \
llvm-native \
giga
)
exitcode=$?
if [[ $exitcode -ne 0 ]]; then
rm -rf llvm-native-$version.md
exit 1
fi
fi
# Install Rust-BPF
version=v0.2.5
if [[ ! -e rust-bpf-$version.md ]]; then
(
set -e
rm -rf rust-bpf
rm -rf rust-bpf-$machine-*
rm -rf xargo
download "https://github.com/solana-labs/rust-bpf-builder/releases/download" \
$version \
"solana-rust-bpf-$machine.tar.bz2" \
rust-bpf \
giga
set -ex
./rust-bpf/bin/rustc --print sysroot
set +e
rustup toolchain uninstall bpf
set -e
rustup toolchain link bpf rust-bpf
)
exitcode=$?
if [[ $exitcode -ne 0 ]]; then
rm -rf rust-bpf-$version.md
exit 1
fi
fi
# Install Rust-BPF Sysroot sources
version=v0.12
if [[ ! -e rust-bpf-sysroot-$version.md ]]; then
(
set -e
rm -rf rust-bpf-sysroot*
rm -rf xargo
clone "https://github.com/solana-labs/rust-bpf-sysroot.git" \
$version \
rust-bpf-sysroot
)
exitcode=$?
if [[ $exitcode -ne 0 ]]; then
rm -rf rust-bpf-sysroot-$version.md
exit 1
fi
fi
exit 0