more portable install.sh (bp #13114) (#13219)

* more portable install.sh (#13114)

(cherry picked from commit 4e0d1b1d4a)

# Conflicts:
#	sdk/bpf/scripts/install.sh

* resolve conflicts

Co-authored-by: Jack May <jack@solana.com>
This commit is contained in:
mergify[bot]
2020-10-29 21:10:14 +00:00
committed by GitHub
parent 3a8c6f33a3
commit ccec111178

View File

@ -9,179 +9,187 @@ else
fi fi
download() { download() {
set -e
declare url="$1/$2/$3" declare url="$1/$2/$3"
declare version=$2
declare filename=$3 declare filename=$3
declare dirname=$4 declare wget_args=(
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" "$url" -O "$filename"
"--progress=dot:$progress" "--progress=dot:giga"
"--retry-connrefused" "--retry-connrefused"
"--read-timeout=30" "--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 set -x
mkdir -p "$cache_dirname" if $wget_or_curl; then
pushd "$cache_dirname" tar --strip-components 1 -jxf "$filename" || return 1
if wget "${args[@]}"; then { set +x; } 2>/dev/null
tar --strip-components 1 -jxf "$filename"
rm -rf "$filename" rm -rf "$filename"
echo "$url" >"../$dirname-$version.md"
popd
link
return 0 return 0
fi fi
popd
rm -rf "$cache_dirname"
return 1 return 1
} }
clone() { clone() {
set -e
declare url=$1 declare url=$1
declare version=$2 declare version=$2
declare dirname=$3
declare cache_directory=~/.cache/"$version"
declare cache_dirname=$cache_directory/${dirname//:\//_}
link() { rm -rf temp
set -e if (
ln -sf "$cache_dirname" "$dirname" set -x
ln -sf "$cache_directory/$dirname-$version.md" "$dirname-$version.md" git clone --recursive --depth 1 --single-branch --branch "$version" "$url" temp
} ); then
(
if [[ -r $cache_dirname ]]; then shopt -s dotglob nullglob
link mv temp/* .
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 return 0
fi fi
return 1 return 1
} }
# Install xargo get() {
( declare version=$1
set -ex declare dirname=$2
# shellcheck disable=SC2154 declare job=$3
if [[ -n $rust_stable ]]; then declare cache_root=~/.cache/solana
cargo +"$rust_stable" install xargo declare cache_dirname="$cache_root/$version/$dirname"
else declare cache_partial_dirname="$cache_dirname"_partial
cargo install xargo
if [[ -r $cache_dirname ]]; then
ln -sf "$cache_dirname" "$dirname" || return 1
return 0
fi fi
xargo --version >xargo.md 2>&1
) rm -rf "$cache_partial_dirname" || return 1
# shellcheck disable=SC2181 mkdir -p "$cache_partial_dirname" || return 1
if [[ $? -ne 0 ]]; then pushd "$cache_partial_dirname"
exit 1
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 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[@]}"
)
exitcode=$?
if [[ $exitcode -ne 0 ]]; then
exit 1
fi
./bin/xargo --version >xargo-$version.md 2>&1
fi fi
# Install Criterion # Install Criterion
version=v2.3.2 version=v2.3.2
if [[ ! -e criterion-$version.md ]]; then if [[ ! -e criterion-$version.md || ! -e criterion ]]; then
( (
set -e set -e
rm -rf criterion* rm -rf criterion*
download "https://github.com/Snaipe/Criterion/releases/download" \ job="download \
$version \ https://github.com/Snaipe/Criterion/releases/download \
"criterion-$version-$machine-x86_64.tar.bz2" \ $version \
criterion \ criterion-$version-$machine-x86_64.tar.bz2 \
mega criterion"
get $version criterion "$job"
) )
exitcode=$? exitcode=$?
if [[ $exitcode -ne 0 ]]; then if [[ $exitcode -ne 0 ]]; then
rm -rf criterion-$version.md
exit 1 exit 1
fi fi
touch criterion-$version.md
fi fi
# Install LLVM # Install LLVM
version=v0.0.15 version=v0.0.15
if [[ ! -e llvm-native-$version.md ]]; then if [[ ! -e llvm-native-$version.md || ! -e llvm-native ]]; then
( (
set -e set -e
rm -rf llvm-native* rm -rf llvm-native*
rm -rf xargo rm -rf xargo
download "https://github.com/solana-labs/llvm-builder/releases/download" \ job="download \
$version \ https://github.com/solana-labs/llvm-builder/releases/download \
"solana-llvm-$machine.tar.bz2" \ $version \
llvm-native \ solana-llvm-$machine.tar.bz2 \
giga llvm-native"
get $version llvm-native "$job"
) )
exitcode=$? exitcode=$?
if [[ $exitcode -ne 0 ]]; then if [[ $exitcode -ne 0 ]]; then
rm -rf llvm-native-$version.md
exit 1 exit 1
fi fi
touch llvm-native-$version.md
fi fi
# Install Rust-BPF # Install Rust-BPF
version=v0.2.5 version=v0.2.5
if [[ ! -e rust-bpf-$version.md ]]; then if [[ ! -e rust-bpf-$machine-$version.md || ! -e rust-bpf-$machine ]]; then
( (
set -e set -e
rm -rf rust-bpf rm -rf rust-bpf-$machine*
rm -rf rust-bpf-$machine-*
rm -rf xargo rm -rf xargo
download "https://github.com/solana-labs/rust-bpf-builder/releases/download" \ job="download \
$version \ https://github.com/solana-labs/rust-bpf-builder/releases/download \
"solana-rust-bpf-$machine.tar.bz2" \ $version \
rust-bpf \ solana-rust-bpf-$machine.tar.bz2 \
giga rust-bpf-$machine"
get $version rust-bpf-$machine "$job"
set -ex set -ex
./rust-bpf/bin/rustc --print sysroot ./rust-bpf-$machine/bin/rustc --print sysroot
set +e set +e
rustup toolchain uninstall bpf rustup toolchain uninstall bpf
set -e set -e
rustup toolchain link bpf rust-bpf rustup toolchain link bpf rust-bpf-$machine
) )
exitcode=$? exitcode=$?
if [[ $exitcode -ne 0 ]]; then if [[ $exitcode -ne 0 ]]; then
rm -rf rust-bpf-$version.md
exit 1 exit 1
fi fi
touch rust-bpf-$machine-$version.md
fi fi
# Install Rust-BPF Sysroot sources # Install Rust-BPF Sysroot sources
version=v0.12 version=v0.12
if [[ ! -e rust-bpf-sysroot-$version.md ]]; then if [[ ! -e rust-bpf-sysroot-$version.md || ! -e rust-bpf-sysroot ]]; then
( (
set -e set -e
rm -rf rust-bpf-sysroot* rm -rf rust-bpf-sysroot*
rm -rf xargo rm -rf xargo
clone "https://github.com/solana-labs/rust-bpf-sysroot.git" \ job="clone \
$version \ https://github.com/solana-labs/rust-bpf-sysroot.git \
rust-bpf-sysroot $version"
get $version rust-bpf-sysroot "$job"
) )
exitcode=$? exitcode=$?
if [[ $exitcode -ne 0 ]]; then if [[ $exitcode -ne 0 ]]; then
rm -rf rust-bpf-sysroot-$version.md
exit 1 exit 1
fi fi
touch rust-bpf-sysroot-$version.md
fi fi
exit 0 exit 0