solana-program-library/do.sh

151 lines
3.2 KiB
Bash
Raw Normal View History

2020-05-29 15:00:47 -07:00
#!/usr/bin/env bash
cd "$(dirname "$0")"
usage() {
cat <<EOF
Usage: do.sh <action> <project>
2020-05-29 15:00:47 -07:00
Supported actions:
build
clean
clippy
2020-06-17 16:13:48 -07:00
doc
dump
2020-05-29 15:00:47 -07:00
fmt
2020-06-17 16:13:48 -07:00
test
update
2020-05-29 15:00:47 -07:00
EOF
}
sdkParentDir=bin
sdkDir="$sdkParentDir"/bpf-sdk
targetDir="$PWD"/"$2"/target
2020-05-29 15:00:47 -07:00
profile=bpfel-unknown-unknown/release
perform_action() {
set -e
case "$1" in
build)
"$sdkDir"/rust/build.sh "$2"
2020-05-29 15:00:47 -07:00
so_path="$targetDir/$profile"
so_name="spl_${3%/}"
2020-05-29 15:00:47 -07:00
if [ -f "$so_path/${so_name}.so" ]; then
cp "$so_path/${so_name}.so" "$so_path/${so_name}_debug.so"
"$sdkDir"/dependencies/llvm-native/bin/llvm-objcopy --strip-all "$so_path/${so_name}.so" "$so_path/$so_name.so"
fi
;;
clean)
"$sdkDir"/rust/clean.sh "$2"
2020-05-29 15:00:47 -07:00
;;
test)
(
cd "$2"
echo "test $2"
cargo +nightly test
)
2020-05-29 15:00:47 -07:00
;;
clippy)
(
cd "$2"
echo "clippy $2"
cargo +nightly clippy
)
2020-05-29 15:00:47 -07:00
;;
fmt)
(
cd "$2"
echo "formatting $2"
cargo fmt
)
;;
2020-06-16 21:29:21 -07:00
doc)
(
cd "$2"
echo "generating docs $2"
cargo doc
)
;;
2020-06-26 09:05:29 -07:00
update)
mkdir -p $sdkParentDir
./bpf-sdk-install.sh $sdkParentDir
2020-06-17 11:25:19 -07:00
./do.sh clean
2020-05-29 15:00:47 -07:00
;;
dump)
# Dump depends on tools that are not installed by default and must be installed manually
# - greadelf
# - rustfilt
(
download_bpf_sdk
2020-05-29 15:00:47 -07:00
pwd
"$0" build "$3"
2020-05-29 15:00:47 -07:00
cd "$3"
2020-05-29 15:00:47 -07:00
so_path="$targetDir/$profile"
so_name="solana_bpf_${3%/}"
2020-05-29 15:00:47 -07:00
so="$so_path/${so_name}_debug.so"
dump="$so_path/${so_name}-dump"
if [ -f "$so" ]; then
ls \
-la \
"$so" \
>"${dump}-mangled.txt"
greadelf \
-aW \
"$so" \
>>"${dump}-mangled.txt"
"$sdkDir/dependencies/llvm-native/bin/llvm-objdump" \
-print-imm-hex \
--source \
--disassemble \
"$so" \
>>"${dump}-mangled.txt"
sed \
s/://g \
2020-06-24 15:05:22 -07:00
<"${dump}-mangled.txt" |
rustfilt \
2020-06-26 09:05:29 -07:00
>"${dump}.txt"
2020-05-29 15:00:47 -07:00
else
echo "Warning: No dump created, cannot find: $so"
fi
)
;;
help)
usage
exit
;;
*)
echo "Error: Unknown command"
usage
exit
;;
esac
}
set -e
2020-06-26 09:05:29 -07:00
if [[ $1 == "update" ]]; then
perform_action "$1"
else
2020-06-24 15:05:22 -07:00
if [[ ! -d "$sdkDir" ]]; then
./do.sh update
fi
fi
if [[ "$#" -ne 2 ]]; then
# Perform operation on all projects
2020-06-26 09:05:29 -07:00
for project in */; do
if [[ -f "$project"Cargo.toml ]]; then
perform_action "$1" "$PWD/$project" "$project"
else
2020-06-24 15:05:22 -07:00
continue
2020-06-26 09:05:29 -07:00
fi
done
else
2020-06-24 15:05:22 -07:00
# Perform operation on requested project
perform_action "$1" "$PWD/$2" "$2"
fi